🐧 Linux Junior. Программирование под Linux.
3.21K subscribers
168 photos
2 videos
1 file
100 links
Канал для программистов работающих с Linux.
Почти все Python девелоперы с нами ну и другие тоже подтянутся.

По рекламе: @jannytg
@anothertechrock
Download Telegram
🎛Основные логи в Linux

Основные логи в Linux содержат информацию о различных событиях, происходящих в операционной системе, включая процесс загрузки, работу приложений, действия пользователей и сообщения ядра.

Эти логи, хранящиеся в специальных файлах, могут быть полезны для выявления и устранения проблем.

Основные категории логов в Linux включают: системные лог-файлы, лог-файлы событий, лог-файлы служб и лог-файлы приложений.

Многие из них располагаются в каталоге var/log.

Наиболее распространенными логами являются:

1️⃣ /var/log/boot.log — журнал загрузки системы (в нем хранится вся информация, связанная с этапами загрузки ОС).

2️⃣ /var/log/kern.log — журнал ядра (в нем хранятся сообщения и предупреждения, поступающие непосредственно из ядра Linux.

3️⃣ /var/log/syslog или /var/log/messages — журналы, в которых хранится информация об общей активности в системе (включая сообщения этапа загрузки).

4️⃣ /var/log/auth.log или /var/log/secure — журналы аутентификации и безопасности (в них хранятся записи обо всех попытках входа в систему, включая как успешные, так и неудачные).

5️⃣ /var/log/debug — журнал отладки (в нем хранится подробная отладочная информация системы и приложений).

6️⃣ /var/log/daemon.log — журнал демонов (содержит информацию о событиях, связанных с различными запущенными в системе демонами/службами).

7️⃣ /var/log/maillog или /var/log/mail.log — журналы почтовых серверов (в них хранится информация, относящаяся к почтовым серверам и архивированию электронных писем).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
😱 Как вернуть удалённый скрипт

Рассмотрим ситуацию, когда случайно/специально удалился исполняющийся bash-скрипт.

Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.

Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.

Создадим подопытный скрипт. touch /tmp/script.sh:

#!/bin/bash
sleep 1000
exit


Делаем его исполняемым chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &.

Символ & может служить разделителем между командами command & command, две команды выполнятся параллельно.

Скрипт запустили, он крутится в фоне. Удалим сам файл:

rm -f /tmp/script.sh

Ключ -f позволит удалить без лишних вопросов.

Восстанавливаем:

lsof -c 'script.sh'


На экран выведется простыня. Нам нужна строка, где в конце указан путь к удаленному скрипту:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh


Берем PID = 261899, берем FD = 255 и делаем так:

cat /proc/261899/fd/255


А вот и исходник скрипта:

File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit


Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥31
Пользователь может сменить командную оболочку, используемую для входа в систему, при помощи команды...
Anonymous Quiz
11%
chmod
66%
chsh
3%
rmsh
8%
tchsh
13%
Посмотреть ответ
👩‍💻 Команда rsync

rsync - один из самых популярных инструментов командной строки для резервного копирования. Он позволяет осуществлять быструю инкрементную передачу и синхронизацию файлов.

✔️ Как сделать локальный бэкап:

rsync -av /source/directory/ /destination/directory/


✔️ Как сделать удаленный бэкап через ssh:

rsync -av -e ssh /source/directory/ user@remote_host:/destination/directory/


Rsync можно использовать для зеркалирования данных, инкрементного резервного копирования, копирования файлов между системами, а также в качестве замены команд scp, sftp и cp.

⚙️ Установка:

sudo apt install rsync


Подробнее ознакомиться с опциями утилиты можно на этой странице, либо воспользовавшись командой man.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41
Если в директории есть файлы fileA, fileB, fileAB, fileBC и fileABC, какие из них подпадут под шаблон file[ABC]?
Anonymous Quiz
16%
fileA, fileB и fileABC
23%
fileABC
31%
fileA и fileB
13%
fileAB, fileBC и fileABC
17%
Посмотреть ответ
4
Что такое /dev/null и почему туда направляют данные?

Если вы активно работаете в командной строке, то, вероятно, использовали файл /dev/null для следующих целей:

1️⃣ Убрать из вывода всю ненужную инфу (предупреждения, ошибки и т.д.):

$ find / -name "*.conf" 2>/dev/null


2️⃣ Передать утилите пустой ресурс в качестве аргумента. Делаться это может с целью исключения пользовательских и системных конфигов и применения дефолтных настроек на стороне программы:

$ picom --config /dev/null


3️⃣ Полностью очистить файл:

$ cat /dev/null > bigfile   


Окей, принято, а чем является этот самый /dev/null?

В сущности - это cимвольное псевдо-устройство, которое создается на этапе запуска системы и работает с потоками данных:
$ ls -l
crw-rw-rw- 1 root root 1, 3 Sep 6 08:37 null


О типе устройства говорит первый бит режима файла - c "character".

Ресурс удаляет все записанное в него и возвращает при чтении EOF (End of File). Когда мы взаимодействуем с /dev/null, неявно отрабатывает специальный драйвер ядра, в который и зашита логика.

Если интересно, можно порыться в исходниках с реализацией: drivers/char/mem.c. Код имеет отношение не только к /dev/null, но и к другим символьным устройствам.

Развернем более подробную информацию:

$ stat /dev/null

File: /dev/null
Size: 0 Blocks: 0 IO Block: 4096   character special file
Access: (0666/crw-rw-rw-)  Uid: (0/ root)   Gid: (0/ root)
Access: 2025-01-25 14:42:20.101000002 +0300
...


Этот вывод показывает, что файл имеет размер 0 байт, для него выделено 0 блоков на диске, дата создания = дата запуска системы:

$ who -b  
system boot  2025-01-25 14:42


Права доступа установлены таким образом, что любой может читать и записывать в него, но никто не может его выполнять:

$ echo hello | /dev/null
-bash2: /dev/null: Permission denied


Поскольку файл не исполняемый, мы не можем использовать конвейер |. Единственный способ — использовать перенаправление файлов >, >>.
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2🔥2
Права на файл -rwxr--r-- иначе можно записать как:
Anonymous Quiz
12%
777
4%
666
50%
744
26%
711
8%
Посмотреть ответ
🤣4
Какая переменная содержит список переданных параметров?
Anonymous Quiz
12%
$#
30%
$*
13%
$?
28%
$$
17%
Посмотреть ответ
Какая команда используется для печати файлов (на принтере)?
Anonymous Quiz
23%
print
18%
ptr
28%
lpr
30%
Ничто из перечисленного
Пароль пользователя в зашифрованном виде хранится в:
Anonymous Quiz
42%
/etc/shadow
4%
/etc/enpasswwd
18%
/etc/.passwd
27%
/etc/passwd
9%
Посмотреть ответ
💻 Что означает 2>&1?

Это про стандартные потоки вывода. Они имеют файловые дескрипторы:

stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)

Получается (2>&1) = stderr > stdout — направляем поток с ошибками в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.

🤔 Логичным было бы сделать конструкцию 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.

Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.

🤔 А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.

Операция command &2>&1 анализируется следующим образом. command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.

Есть альтернатива с оператором |&.

|& это сокращенный вариант от 2>&1 |

Пример:

script.sh |& tee -a /var/log/script.log


Все что script.sh выведет в потоки stdout и stderr, будет перенаправлено в файл script.log.

В официальной документации можно подробнее изучить эту штуку.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23
Каким будет вывод этой программы?
Anonymous Quiz
1%
1
63%
3
10%
5
10%
Ошибка
16%
Посмотреть ответ
Сколько ссылок создается при создании директории?
Anonymous Quiz
33%
1
38%
2
6%
3
1%
4
22%
Посмотреть ответ
👩‍💻 Команда shred

Обычно для удаления файлов в Linux используется команда rm. Но файлы, удаленные с помощью этой команды, не удаляются окончательно с диска. Их содержимое остается на диске до тех пор, пока занятое ими пространство не будет перезаписано другими данными. Поэтому информацию возможно восстановить.

Но что, если нам нужно удалить файлы так, чтобы их никто не восстановил? Для этого существует команда shred.

Она перезаписывает содержимое файла случайными данными несколько раз, а затем по желанию удаляет его. Это делает восстановление практически невозможным.

⚙️ Команда:

shred [опции] файл


Опции:
-n — перезаписать файл n раз
-z — делает финальную перезапись нулями, чтобы скрыть сам факт использования shred.
-u, --remove — после перезаписи удаляет файл (по умолчанию файл не удаляется).
-v — выводит прогресс в терминал
-f — принудительно снимает защиту от записи (если файл read-only).

⚙️ Примеры использования:

1️⃣ Перезаписать файл и оставить его на месте:
shred secret.txt


2️⃣ Перезаписать файл 5 раз и удалить его:
shred -n 5 -u secret.txt


3️⃣ Перезаписать файл 1 раз, затем заполнить нулями и удалить:

shred -n 1 -z -u secret.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52👀1