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

По рекламе: @jannytg
@anothertechrock
Download Telegram
👩‍💻 Команда 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
🔥51👀1
🔥 Что такое демоны (daemons) в Linux?

Демоны, или "daemons", в операционных системах работают в фоновом режиме и следят за различными аспектами системы для обеспечения ее нормальной работы.

Они могут контролировать различные подсистемы, такие как печать или сеть.

В Linux они подобны службам в Windows и выполняют определенные задачи в определенное время или в ответ на события.

Демоны могут быть запущены при старте системы и продолжают работу в качестве системных служб.

Они не требуют вмешательства пользователя для своего запуска и работают в фоновом режиме.

Создаются они процессом инициализации системы при загрузке с помощью метода fork(), создавая копию существующего процесса.

Демоны могут быть идентифицированы в системе по их процессам, их имена обычно заканчиваются на "d".

Их можно отслеживать с помощью различных команд, таких как ps, top, htop и pstree. Команда pstree отображает процессы в виде древовидной диаграммы, что помогает лучше понять, какие демоны работают в системе.

ℹ️ В системе могут работать различные демоны, вот некоторые из них:

🔴 systemd: родитель всех процессов с PID=1, аналог init.
🔴 rsyslogd: регистрирует системные сообщения с дополнительными функциями по сравнению с syslogd.
🔴 udisksd: обрабатывает операции с устройствами хранения данных, такие как монтирование и размонтирование.
🔴 logind: управляет входом пользователей в систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Как найти самые часто встречающиеся IP-адреса в логах?

Ответ через час.

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Эта команда находит 10 наиболее часто встречающихся IP-адресов в файле access.log:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort | uniq -c | sort -nr | head

Покажет топ IP по количеству обращений. Незаменимо для анализа веб-серверов.

#вопросы
👍7
Приведенная команда cat дает такой вывод ⬆️
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Команда watch в Linux

Вам знакома ситуация, когда ждешь чего-то важного, будь то подключение пользователя или копирование файлов по FTP? Постоянно приходится вводить одну и ту же команду для проверки результата. А это порой бывает утомительно.

Для таких случаев и пригодится команда watch. Она используется для периодического запуска другой команды и отображения её вывода в терминале с обновлением через заданный интервал времени. Это удобно для "живого мониторинга" изменений в системе.

⚙️ Синтаксис:

watch [опции] команда


По умолчанию watch запускает команду каждые 2 секунды.

⚙️ Опции:
-n <сек> — задать интервал обновления в секундах (по умолчанию 2).
-d — подсвечивать изменения между обновлениями.
-t — убрать заголовок (без отображения времени и команды).
-g — завершить выполнение, когда вывод изменится.

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

1️⃣ Мониторинг свободного места на диске. Каждые 5 секунд обновляется информация о дисках:
watch -n 5 df -h


2️⃣ Наблюдение за процессами. Отслеживание процессов apache, обновление каждые 2 секунды:
watch -n 2 ps aux | grep apache


3️⃣ Подсветка изменений. При изменении значений в /proc/meminfo изменённые строки будут подсвечены:
watch -d cat /proc/meminfo


4️⃣ Отслеживание использования CPU конкретным процессом. Каждую секунду выводится загрузка CPU и памяти процессом firefox:
watch -n 1 "ps -C firefox -o %cpu,%mem,cmd"


5️⃣ Завершение при изменении. watch будет следить за состоянием файла и завершится, как только его атрибуты изменятся:
watch -g ls -l file.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🔥 Расширение фигурных скобок (brace expansion)

Фигурные скобки {} в Bash позволяют разворачивать выражения в последовательность аргументов.

Простой пример:
echo {1..10}
# 1 2 3 4 5 6 7 8 9 10


Можно в обратную сторону:
echo {10..1}
# 10 9 8 7 6 5 4 3 2 1


⚙️ Шаг в диапазоне

Третий параметр задаёт шаг:
echo {1..501..100}
# 1 101 201 301 401 501


Можно и в обратную сторону:
echo {501..1..100}
# 501 401 301 201 101 1


⚙️ Последовательности букв

В отличие от seq, фигурные скобки умеют работать с буквами:
echo {A..P}
# A B C D E F G H I J K L M N O P


Шаг тоже поддерживается:
echo {A..P..2}
# A C E G I K M O


⚙️ Перечисления и практические приёмы

Создать сразу несколько директорий:
mkdir ~/Sources/{test1,test2,test3}


Сравнить оригинал и патч одной командой:
diff {orig,patched}/path/to/prog.c


Сделать бэкап файла:
cp -p file.txt{,.bak}
# создаст file.txt и file.txt.bak

💡 Если перед запятой ничего нет, Bash просто подставляет существующее значение.

⚠️ Важно: пробелы внутри {} ломают расширение!
echo file{1.. 2}.txt  # не сработает


⚙️ Форматирование вывода

Можно убрать пробелы из вывода, передав вывод в tr:
echo {A..P..2} | tr -d " "
# ACEGIKMO


Создадим псевдоним для получения n-й буквы алфавита:
alias nth="echo {A..Z} | tr -d ' ' | cut -c"
nth 10
# J


⚙️ {} vs []

Квадратные скобки [] — это сопоставление с шаблоном имён файлов, а фигурные {} — просто генерация последовательности.

ls file[1-9].txt
# отберёт существующие файлы


ls file{1..9}.txt
# попытается вывести все файлы последовательности, даже если их нет


⚙️ Группировка и вложенность

Комбинация наборов:
touch {a,b,c}.{hpp,cpp}
# создаст a.cpp a.hpp b.cpp b.hpp c.cpp c.hpp


Вложенные расширения:
mkdir -p {source,help{/pages,/yelp,/images}}


Структура получится такая:
.
├── help
│ ├── images
│ ├── pages
│ └── yelp
└── source
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4😱1
Как очистить текст от нечитаемых символов, например, при копировании из PDF?

Ответ через час.

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Для замены, замещения или удаления символов из стандартного ввода используется консольная команда tr. С ее помощью можно удалить нечитаемые символы:

tr -cd '\11\12\15[:print:]' < bad.txt > clean.txt


Опции:
🔴-c — инвертирует набор, т.е. все символы, не входящие в указанный диапазон, будут выбраны
🔴-d — удаляет выбранные символы (вместо замены)

Диапазон символов для выборки:
🔴 \11, \12, \15 — это табуляция (\t), перевод строки (\n) и возврат каретки (\r), записанные в восьмеричном (octal) виде. Каждое число — это ASCII-код символа.
🔴 [:print:] — все видимые символы.

В результате команда оставит только стандартные печатные символы, табы и переводы строк.

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
👩‍💻 Команда yes

Команда yes в Linux — это простая утилита, которая бесконечно выводит строку (по умолчанию y) в стандартный вывод.

Эта команда часто применяется для автоматизации скриптов или тестирования.

⚙️ Синтаксис:
$ yes [строка]


⚙️ Примечания:

↘️ Если строка не указана — будет бесконечно выводиться y.
↘️ Если указать строку — будет бесконечно выводиться именно она.
↘️ Чтобы остановить вывод, нужно нажать Ctrl+C.
↘️ yes бесконечно генерирует вывод, поэтому почти всегда ее используют вместе с пайпами (|) или ограничителями (head).

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

1️⃣ Иногда программы запрашивают подтверждение (Do you want to continue? [y/n]). Ввод y можно автоматизировать. Здесь все запросы будут автоматически подтверждаться y:
yes | apt-get install package


2️⃣ Подтверждение с no. Здесь на все запросы ответ будет n:
yes n | command


3️⃣ Тестирование производительности:
yes можно использовать для загрузки процессора. Этот процесс будет сильно нагружать CPU, пока его не остановить (Ctrl+C):
yes > /dev/null


4️⃣ Быстрая генерация больших файлов. Эта команда создаст файл с 1000 одинаковыми строками:
yes "строка" | head -n 1000 > file.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
🔥 Чем отличается su от sudo

Обе команды связаны с повышением прав, но делают это по-разному.

📌 Основная идея

su — substitute user ➡️ «заменить пользователя»
sudo — substitute user and do ➡️ «выполнить как другой пользователь»

⚙️ Как работает su

su переключает вас на другого пользователя внутри текущей сессии. Для этого нужно знать пароль целевой учётки, а не своей.
user@dev:/$ su john
Пароль: ****
john@dev:/$ whoami
john


Вы стали Джоном и работаете от его имени.
su без дефиса, как в этом примере, просто меняет пользователя, но оставляет окружение старого. О su - мы еще поговорим.

⚙️ Как работает sudo

sudo запускает одну команду от имени другого пользователя (по умолчанию — root). При этом спрашивается ваш пароль, а не пароль того, под кем выполняется команда.
user@dev:/$ sudo -u john whoami
john


Чтобы это работало, у пользователя user должны быть разрешения в /etc/sudoers:
user ALL=(ALL:ALL) ALL


Редактируется через visudo:
sudo visudo


Проверить конфигурацию можно так:
sudo visudo -c


💡 visudo защищает от ошибок: если синтаксис неправильный, файл не сохранится.

⚙️ su с дефисом

Иногда можно заметить команду su - john.
Зачем дефис?

Он очищает окружение и запускает оболочку, как будто вы вошли в систему под новым пользователем.

Посмотрим на примере:
ssh user@pc
export a="test"
su john
echo $a
# test


Переменная $a сохранилась.
А теперь с дефисом:
su - john
echo $a
# ничего не выводит


Переменные исчезли — новая, "чистая" среда.

📎 Коротко:

su — просто смена пользователя, старое окружение остаётся;
su - — полная имитация входа в систему под новым пользователем.

⚙️ Аналоги у sudo

sudo тоже может запустить shell с разным уровнем "чистоты" окружения:

sudo -s   # shell с правами root, окружение текущее
sudo -i # shell как при входе под root (загружается /root/.profile и т.п.)


Если в /root/.profile прописать переменную, то она появится только при sudo -i.

✔️ sudo -i ≈ sudo su -
Но писать sudo su - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103
Как узнать, какие команды вы используете чаще всего?

Ответ через час.

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Чтобы получить топ-10 команд, которые вы вводите чаще всего, посчитайте частоту команд в истории. Это интересно и полезно для самоанализа.

history | awk '{print $2}' | sort | uniq -c | sort -nr | head

#вопросы
👍8🔥2
👩‍💻 Утилита symlinks

symlinks — это консольный инструмент в Linux, который помогает управлять символьными ссылками (symbolic links, или "ярлыками" в файловой системе). Она позволяет искать, проверять и исправлять ссылки в заданном каталоге.

На большинстве систем утилита ставится пакетом symlinks:

sudo apt install symlinks      # Ubuntu, Debian
sudo dnf install symlinks # Fedora
sudo pacman -S symlinks # Arch


⚙️ Синтаксис:

symlinks [опции] [каталог]


⚙️ Опции:
-c — заменить абсолютные / беспорядочные ссылки на относительные
-d — удалить битые ссылки
-o — предупреждать о ссылках между файловыми системами
-r — проверять рекурсивно подкаталоги
-s — сокращать длинные ссылки (отображаются в выводе только если не указан параметр -c)
-t — показывать, что будет сделано с помощью -c
-v — показывать подробный отчет (выводит все ссылки)

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

1️⃣ Найти все симлинки в каталоге /usr/local/bin:

symlinks -v /usr/local/bin


Команда выведет список ссылок и покажет, какие из них "good" — рабочие, а какие "dangling" — битые (ведут в несуществующий файл).

2️⃣ Проверить рекурсивно и удалить битые ссылки:

sudo symlinks -rd /opt/


3️⃣ Только проверить, не изменяя ничего:

symlinks -rv /home/user/projects


⚙️ Практический смысл:

🔎 Проверка целостности системы или проекта. После обновлений или чисток пакетов остаются "битые" ссылки — ведущие в никуда.
🔎 Подготовка окружения для деплоя или контейнера. При переносе проекта, создании Docker-образа или сборке пакета абсолютные пути могут сломаться (например, /home/user/... внутри контейнера не существует).
🔎 Чистка симлинков после ручной установки софта. Когда программы ставятся вручную, часто создаются симлинки в /usr/local/bin → /opt/.... После удаления директории /opt/app ссылки остаются.
🔎 Работа с большими файловыми архивами или бэкапами. При создании резервных копий с помощью rsync или копировании проекта на другой диск относительные ссылки часто "ломаются", потому что пути изменились.
🔎 Упрощение диагностики. Можно быстро увидеть, какие файлы — ссылки и куда они ведут. Это удобно, например, при разборе чужой системы или CI/CD окружения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1