Полезные однострочники для Linux

Неочевидные связки из консольных команд на все случаи жизни

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Страницы:
  • 1
  • 2
Распечатать
4X_Pro
Создатель сайта
Всего сообщений: 3930
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 2047

0
. Редактировалось 2 раза, последний — #1
В этой теме буду собирать различные полезные однострочники для Linux.

Ребята, давайте жить спокойно!

4X_Pro
Создатель сайта
Всего сообщений: 3930
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 2047

0
. Редактировалось 1 раз, последний — #2
Итак, начнем. Вот подсчет количества суммарного количества строк в файлах определенного типа во всех подкаталогах:
find ./ -name '*.php' -exec wc -l {} \;| awk '{ SUM += $1 } END {print SUM}'
Работает следующим образом: find, начиная с текущего каталога (./) ищет все файлы, маска для которых указана в параметре -name (в данном примере — *.php). Для каждого из найденных файлов запускается команда wc с параметром -l, чтобы считалось только число столбцов (без него еще считается число слов и символов). Получившийся результат из строк вида "число имя_файла" передается в awk, который производит суммирование по первому столбцу в переменную SUM, значение которой и выдается по окончанию работы.
В частности, с помощью такой команды можно подсчитывать общее число строк в том или ином программном продукте.

Ребята, давайте жить спокойно!

MadTechGuy
Единомышленник
Всего сообщений: 397
Зарегистрирован: 29 июн. 2018 г., 09:36
Рейтинг пользователя: 59

2
. Редактировалось 2 раза, последний — #3
Рекурсивный подсчёт большого количества файлов в каталоге:
find -L путь_к_каталогу -type f -printf \\n | awk 'BEGIN { count = 0 } { if(!(++count % 1000)) printf("%s\r", count) } END { print count }'
Показывает в реальном времени, сколько уже насчитано файлов через каждые 1000 файлов.
Опция -L нужна в случае, если требуется подсчитывать символические ссылки, указывающие на файлы. Имейте ввиду, что если указана опция -L, find будет рекурсивно переходить в каталоги, на которые указывают символические ссылки.

4X_Pro
Создатель сайта
Всего сообщений: 3930
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 2047

1
. Редактировалось 1 раз, последний — #4
Вывод списка всех видеовыходов (взято из документации по ArchLinux):
for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
Полезно для использования в командной строке ядра video=выход:d для отключения ненужных портов.

Ребята, давайте жить спокойно!

MadTechGuy
Единомышленник
Всего сообщений: 397
Зарегистрирован: 29 июн. 2018 г., 09:36
Рейтинг пользователя: 59

0
. Редактировалось 1 раз, последний — #5
Вывод информации об IOMMU-группах PCI-устройств:
find /sys/kernel/iommu_groups -type l -exec sh -c 'IFS=/; set -- $0; printf '\''IOMMU Group %-4s '\'' "$5"; lspci -nns "$7"' {} \; | sort -n -k3
Может понадобиться для проброса PCI-устройств в виртуальные машины на KVM, Xen и других гипервизорах. Для проброса любого из устройств пробрасывать нужно все устройства из группы, в которой находится пробрасываемое устройство.

MadTechGuy
Единомышленник
Всего сообщений: 397
Зарегистрирован: 29 июн. 2018 г., 09:36
Рейтинг пользователя: 59

0
. Редактировалось 1 раз, последний — #6
Рекурсивный поиск по содержимому файлов *.gz. Опция -F — искать [шаблон] как строку, а не как регулярное выражение. Опция -i — регистронезависимый поиск.
find /usr/share/man -type f -name '*.gz' -exec zgrep -HFi [шаблон] {} \;

MadTechGuy
Единомышленник
Всего сообщений: 397
Зарегистрирован: 29 июн. 2018 г., 09:36
Рейтинг пользователя: 59

1
#7
Поиск файлов с SUID/SGID в системе:
find / \( -path /dev -o -path /proc -o -path /sys \) -prune -o -type f -perm /u=s,g=s -ls

MadTechGuy
Единомышленник
Всего сообщений: 397
Зарегистрирован: 29 июн. 2018 г., 09:36
Рейтинг пользователя: 59

1
#8
Удаление дублирующихся элементов из массива в bash, в случае, если элементы массива могут содержать любые символы (кроме NULL, который является недопустимым):
eval "ARRAY=($(printf '%q\n' "${ARRAY[@]}" | awk '!($0 in dup) { print $0; dup[$0] = "" }'))"

Более производительный вариант, но не сохраняющий исходный порядок элементов (для сортировки элементов этот вариант не подходит, см. описание спецификатора %q в `help printf`):
eval "ARRAY=($(printf '%q\n' "${ARRAY[@]}" | sort -u))"

4X_Pro
Создатель сайта
Всего сообщений: 3930
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 2047

1
#9
Поиск каталога с самым большим количеством файлов (полезно, когда нужно выяснить, почему произошло превышение лимита квоты по файлам на хостинге):
find / -print0 | xargs -0 dirname | uniq -c | sort -n -k 1 | tail -1
Чтобы искать не от корня, а от другого каталога, нужно указать путь к нему после find вместо /.

Ребята, давайте жить спокойно!

4X_Pro
Создатель сайта
Всего сообщений: 3930
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 2047

1
#10
Подсчёт суммарного объёма памяти (в мегабайтах), занимаемого всеми процессами одного приложения (считается только RSS-часть, без shared memory):
ps -Ao rss,command | grep имя_процесса | awk '{ hr=$1/1024 ; sum +=hr} END {print sum}'

Ребята, давайте жить спокойно!

Следующие сообщения >>>
Страницы:
  • 1
  • 2
Распечатать

У вас нет прав для отправки сообщений в эту тему.

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.