fa
Feedback
🐧 Linux Junior. Программирование под Linux.

🐧 Linux Junior. Программирование под Linux.

رفتن به کانال در Telegram

Канал для программистов работающих с Linux. Почти все Python девелоперы с нами ну и другие тоже подтянутся. По рекламе: @jannytg @anothertechrock

نمایش بیشتر
3 117
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+17 روز
-1130 روز
آرشیو پست ها
Команда find / -name '*'
Anonymous voting

Что такое /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
Поскольку файл не исполняемый, мы не можем использовать конвейер |. Единственный способ — использовать перенаправление файлов >, >>.

Если в директории есть файлы fileA, fileB, fileAB, fileBC и fileABC, какие из них подпадут под шаблон file[ABC]?
Anonymous voting

👩‍💻 Команда 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.

Пользователь может сменить командную оболочку, используемую для входа в систему, при помощи команды...
Anonymous voting

😱 Как вернуть удалённый скрипт Рассмотрим ситуацию, когда случайно/специально удалился исполняющийся 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

🎛Основные логи в 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 — журналы почтовых серверов (в них хранится информация, относящаяся к почтовым серверам и архивированию электронных писем).

👩‍💻 Команда killall Если у вас будет открыто несколько окон с одинаковыми приложениями, то команда killall уничтожит их все. При этом не обязательно знать PID, в отличии от команды kill. killall — команда, которая останавливает процессы с одним и тем же названием.
Команда ищет все подходящие в папке /proc
Предположим, нам необходимо закрыть окна калькулятора:
killall gcalctool
Если не указывать аргументы при использовании команды, то по умолчанию будет отправлен сигнал SIGTERM. Однако, если необходимо отправить другой сигнал, то это нужно явно указать:
killall -s 1 gcalctool
Иногда не удается запомнить все правила использования команд. Но можно воспользоваться командой man, чтобы получить справку по их применению:
man killall
Как проверить, что процесс убит? Чтобы удостовериться в том, что процесс был действительно отменен, воспользуйтесь одним из доступных способов:
ps aux | grep
pidof
pgrep
В случае успешного выполнения этих команд ничего не будет выведено.

Права доступа к файлу 764 означают:
Anonymous voting

💡 Короткий совет по Linux Если вы хотите очистить пустые каталоги, команда find может упростить эту работу:
$ find . -type d -empty -exec rmdir -v {} +
Параметр -type d выполняет поиск каталогов, -empty выбирает пустые каталоги, а -exec rmdir {} выполняет команду rmdir для их удаления. Команда rmdir гарантирует, что каталог пуст перед его удалением. В качестве альтернативы, для выполнения той же задачи можно использовать эту команду:
$ find . -type d -empty -delete

Каким будет вывод? os=Unix echo 1.$os 2."$os" 3.'$os' 4.$os
Anonymous voting

Как освободить оперативную память в Linux
sync
Позволяет записать все данные из кэша на жесткий диск, что может помочь освободить оперативную память.
echo 1 > /proc/sys/vm/drop\_caches
Очищает кэши страниц, инодов и дэнджлиста в оперативной памяти. Потребуются права администратора.
sudo sysctl -w vm.drop_caches=3
Тоже происходит очистка кэша страниц, инодов и дэнджлиста.
sudo systemctl restart systemd-journald
Происходит перезапуск службы журнала системы.
sudo systemctl restart rsyslog
Перезапуск службы системного журнала rsyslog. Если у вас есть ненужные дисковые разделы или устройства, вы можете их отмонтировать или удалить с помощью команды umount или fdisk. А так же, если у вас имеются неиспользуемые процессы, то вы можете воспользоваться командой kill или killall для их завершения и освобождения памяти, которую они занимают.

👩‍💻 Что такое командная оболочка (shell) в Linux? Shell или командная оболочка представляет собой не только командный интерпретатор, обеспечивающий взаимодействие пользователя с ядром операционной системы, но и язык программирования, включающий операторы условного ветвления, циклы, переменные и другие конструкции. При входе пользователя в систему или открытии терминала операционная система запускает командную оболочку. Пользователь увидит приглашение оболочки, состоящее из имени пользователя, имени хоста, текущего пути и символа $ или #, отражающего его привилегии. Вводимые пользователем команды бывают внутренними (встроенными в оболочку) и внешними (выполняемыми как отдельные программы). ⚡️При необходимости определить тип команды, пользователь может использовать команду type <имя_команды>. В nix-системах существует два основных типа оболочек: оболочки на основе Bourne shell оболочки на основе C shell. Типичными представителями оболочек типа Bourne shell являются:
- sh (Bourne shell)
- bash (Bourne Again shell)
- ksh (Korn shell)
- zsh (Z Shell)
К оболочкам типа C Shell относятся:
- csh (C shell)
- tcsh (TENEX/TOPS C shell)

👩‍💻 Команда ps Как правило, команда перечисляет и отображает все запущенные процессы в ядре Linux. Основная функциональность заключается в отображении информации о процессе, включая уникальный идентификатор процесса (PID), терминал или пользователя, связанного с процессом, и команду, запускающую процесс. 1️⃣ Список процессов, связанных с текущей оболочкой Использование простой команды ps выводит список запущенных в данный момент процессов в оболочке.
ps
В выводе есть четыре столбца: PID, TTY, TIME и CMD. Давайте разберем, что означают эти четыре аббревиатуры. • PID: это сокращенная форма "Process ID". Каждый запущенный процесс имеет определенный идентификатор, отличающий его от других процессов. • TTY: расшифровывается как "Terminal Type", демонстрирующий терминал, используемый для запуска указанного процесса. • TIME: это примерно то время, в течение которого процесс использовал центральный процессор, а не количество времени, в течение которого процесс был запущен. • CMD: этот элемент показывает команду, использованную при запуске процесса. 2️⃣ Использование команды для просмотра всех запущенных процессов
ps -A
ps -e
Команда не связана с каким-либо терминальным сеансом всякий раз, когда TTY является вопросительным знаком. 3️⃣ Просмотр процессов, связанных с терминалом
ps -T
Выполнив эту команду, мы больше не будем видеть вопросительный знак в столбце TTY. Эта команда имеет две функциональные возможности: одна для запуска процессов, связанных с терминалом, а другая для отображения потоков определенного процесса 4️⃣ Отображать процессы, не связанные с терминалом Чтобы просмотреть все процессы, кроме руководителей сеансов и процессов, связанных с терминалом.
ps -a
Руководитель сеанса - это процесс, который запускает другие процессы, например, bash. 5️⃣ Список всех запущенных процессов с полным именем команды Чтобы перечислить все запущенные в данный момент процессы с полным названием команды, введите следующую команду:
ps -ax

Нужно использовать фигурные скобки:
touch file{1..100}.txt
А чтобы создать три файла с разными расширениями для одного проекта, введите:
touch app.{html,css,js}
Аналогичным образом можно удалять однотипные файлы. Например, удалить из текущей директории все картинки:
rm ./*.{jpg,jpeg,png,gif}

Как быстро создать много однотипных файлов в одной директории? Речь идет о файлах типа file1,txt, file2.txt, file3.txt ... file100.txt или app.html, app.css, app.js. Ответ через час. #вопросы