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

По рекламе: @jannytg
@anothertechrock
Download Telegram
👩‍💻 Команда sync

Утилита команды sync синхронизирует данные из кэша в постоянную память.

Давайте рассмотрим варианты ее применения.

1️⃣ Синхронизация кэша юзера

Эта команда синхронизирует данные кэша с жестким диском:

$ sync


2️⃣ Синхронизация юзерских файлов

Когда вы даете привилегии sudo команде sync, она синхронизирует все смонтированные файловые системы на жестком диске:

$ sudo sync


Чтобы получить файловые системы юзера:

$ df


Можно посмотреть, сколько данных смонтированы в корневом каталоге "/", в раздел - "/dev/sda3".

3️⃣ Синхронизация данных файла

Команда sync предоставляет опции -d или -data для синхронизации/копирования данных кэша файла на жесткий диск:

$ sync -d /home/testfile1.txt


4️⃣ Синхронизация данных нескольких файлов

Для синхронизации данных кэша нескольких файлов, вы можете использовать команду следующим образом:

$ sync -d /home/testfile1.txt ~/Desktop/Samplevideo.mp4


5️⃣ Синхронизация файловой системы

Опции -f или -file-system позволяют юзеру синхронизировать данные вместе с файловыми системами:

$ sync -f /home/Downloads/testfile2.txt


6️⃣ Синхронизация нескольких файловых систем

Команда sync может синхронизировать/копировать несколько файловых систем с помощью одной команды:

$ sync -f /home/file1.txt ~/Desktop/Samplevideo.mp4


7️⃣ Синхронизация файловой системы конкретного раздела

Мы можем синхронизировать файловую систему определенного раздела системы:

$ sudo sync /dev/sda3


8️⃣ Синхронизация каталога и подкаталогов

Для синхронизации каталога с именем "/var/log/syslog" и его подкаталогов используется следующая команда:

$ sudo sync /var/log/syslog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Автоматизация задач с xargs

Многие пользователи Linux никогда не слышали о команде xargs, хотя это мощный инструмент для автоматизации задач и запуска команд с разными аргументами.

Утилита обрабатывает входные данные из стандартного потока ввода (STDIN). Они могут туда поступать либо напрямую от пользователя либо от сторонних команд через конвейер |.

Рассмотрим простой пример. Предположим, вы находитесь в каталоге с тремя файлами:

$ ls -1
file1.txt
file2.txt
file3.txt


Передадим данный список в xargs, чтобы он служил входными данными, и wc -l в качестве шаблона команды:

$ ls -1 | xargs wc -l
3 file1.txt
4 file2.txt
1 file3.txt
8 total


В результате xargs применил шаблон команды wc -l к каждому файлу для подсчета строк.

Недостаток примера заключается в том, что xargs тут не требуется, можно обойтись сопоставлением файлов с шаблоном:

$ wc -l *
3 file1.txt
4 file2.txt
...


Зачем тогда использовать xargs?

Ее мощь становится очевидной, когда входные строки немного сложнее.

Предположим, вы хотите обойти дерево каталогов и посчитать количество строк во всех python скриптах с именами, оканчивающимися на ".py".

Такой список путей к файлам легко создать с помощью команды find:

$ find . -type f -name \*.py -print

/usr/lib/bup/bup/options.py
/usr/lib/bup/bup/xstat.py
...


Теперь xargs может применить шаблон команды к каждому файлу:

$ find / -type f -name \*.py -print | xargs wc -l

292 /usr/lib/bup/bup/options.py
112 /usr/lib/bup/bup/xstat.py
...


Комбинируя find и xargs, можно дать возможность любой команде выполняться с обходом всей файловой системы, затрагивая только те ресурсы, которые соответствуют критериям.

Опции xargs

Команда xargs имеет множество опций. Рассмотрим наиболее интересные: -n, -I и -0.

1️⃣ Параметр "-n" указывает то количество аргументов, которое будет передано на 1 выполнение команды:

$ ls | xargs echo
file1.txt file2.txt

$ ls | xargs -n1 echo
file1.txt
file2.txt


Во втором случае команда echo выполнится 2 раза: по вызову на аргумент.

2️⃣ Параметр -I определяет место входных строк в команде. По умолчанию они добавляются в конец, но вы можете настроить их отображение в другом месте.

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

$ ls | xargs -I XYZ echo XYZ is OK
file1.txt is OK
file2.txt is OK


Обратите внимание, что -I ограничивает xargs одной входной строкой на команду.

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

3️⃣ Параметр -0 использует символ "\0" в качестве разделителя данных вместо "\n" или пробела. Он часто используется при объединении find и xargs, т.к., обычно xargs ожидает, что строки будут разделены пробелами.

А если отдельные элементы в строках содержат дополнительные пробелы, например имена файлов?

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

Например, если входные данные включают "file num 1.txt", xargs обработает все по отдельности и, вероятно, выведет ошибку:


$ find ./ -type f -name \*.txt -print | xargs wc -l

wc: ./file: No such file or directory
wc: num: No such file or directory
wc: 1.txt: No such file or directory


Как разделить входные строки нулями вместо символов новой строки? К счастью, у команды find есть возможность сделать это с помощью флага -print0:

$ find ./ -name \*.txt -print0

./file1.txt./file num 1.txt


Теперь xargs будет искать разделитель "\0" и по нему сформирует корректный список аргументов для wc -l:

$ find ./ -name \*.txt -print0 | xargs -0 wc -l

0 ./file1.txt
0 ./file num 1.txt
0 total
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Как отправить сообщение всем подключенным пользователям?

Предположим, вы хотите ребутнуть сервер, но на нем одновременно с вами работают и другие люди. Как отправить им сообщение в терминале?

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Для отправки сообщения всем пользователям сразу используется команда wall (расшифровывается как write to all, т.е. “написать всем”).

$ wall
I'm going to reboot the server at 14:00!

После нажатия Ctrl+D сообщение будет отправлено.
👍12
Шаблону a?b* будут соответствовать файлы...
Anonymous Quiz
6%
afcc, aabb
55%
aabb, axbc
17%
abbb, abxy
5%
abcd, axbb
16%
Посмотреть ответ
Как быть, если не можешь вспомнить команду в Linux?

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

man -k <ключевое слово>


Например, вы забыли название команды, но помните, что она как-то связана с диском. Поэтому вводим следующую строку в терминал:

man -k disk


В выхлоп попадают все команды, связанные с дисками. Легко найти необходимую, вспомнить ее название и нужные ключи. Правда, все очень просто? Так что, пользуемся и наслаждаемся!
🔥14👍7🤔1
🔥 Хотите понимать, как работает Linux на уровне ядра?

Повышение квалификации «Разработка ядра Linux» — это профессиональное погружение в архитектуру, отладку, модули, обработку прерываний и работу с памятью.

💻 Вы научитесь писать собственные модули, использовать структуры данных ядра, управлять потоками, анализировать dmesg и встраиваться в проекты на Linux-ядре.

💚 Курс ведут практикующие эксперты с реальным опытом разработки под ядро.
💚Программа обновляется под актуальные стандарты и задачи индустрии.
💚Живые лекции, поддержка наставников, итоговая работа — всё, чтобы вы освоили сложные темы системного программирования.

Оставьте заявку прямо сейчас

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Двойные тире в командах Linux

Порой опытные админы используют команды в консоли следующим образом:
ssh root@linuxzone.ru --


Что означает это двойное тире? Зачем оно? Давайте разбираться.

Двойное тире означает «флаги командной строки». Оно указывает ssh или другой команде не пытаться анализировать то, что следует после параметров. На словах выглядит не очень, давайте посмотрим на практике!

У меня есть такая команда:
ssh root@linuzone.ru -- command1 --arg1 --arg2


Приведенный выше синтаксис указывает ssh не пытаться анализировать параметры arg1 и arg2 после символа --. Это гарантирует, что команда command1 примет arg1 и arg2 в качестве аргументов командной строки и выполнится на удаленном сервере.

Короче говоря мы сообщаем ssh: все то, что идет после двойного тире, это не твои параметры и аргументы, анализировать это НЕ НАДО! СТОП! Дальше дело за command1 и его параметрами и аргументами.

Двойное тире не обрабатывается оболочками bash/zsh/csh/sh/fish и т.п. Оно обрабатывается средствами самих программ, но НЕ всех. Например ssh это умеет делать, как и множество других команд и утилит. Рассмотрим другие примеры.

Например, вы не сможете просмотреть файл с именем --file или -f, используя команду cat. Проверяем:
cat --file
cat -f


Опа. Ошибка! cat: unrecognized option --file/f. Давайте теперь передадим двойное тире:
cat -- --file
cat -- -f


Ошибка пропала и файл успешно вывелся на экран, ну либо выскочило сообщение cat: --file/f: No such file or directory. Это нормально.

Закрепим:
rm --file       = получим ошибку
rm -- '--file' = а вот это сработает


Ну а что бы передать параметры в rm, делаем так:
rm -v -i -- '--file'
rm -f -v -i -- '-f'


Просто, логично, мелодично. Но как я и сказал выше, не все команды умеют работать с двойным тире. Например, команда echo. Все попытки подружить её с двойным тире просто-напросто провалятся:
/usr/bin/echo -- -n
echo -- --test


Выведется это:
-- -n
-- --test
👍6🔥5
Как быстро изменить что-то в именах всех однотипных файлов в одной директории?

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM