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

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

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

1
. Редактировалось 1 раз, последний — #11
Список 50 наиболее частых запросов к серверу Apache (если используется формат лога по умолчанию):
cat /var/log/apache2/access.log | awk '{ print $8}' | sort | uniq -c | sort -n -k 1 -r | head -n 50
А чтобы вывести список наиболее часто обращающихся IP-адресов, нужно print $8 заменить на print $2.

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

Develeone
Новичок
Нет Всего сообщений: 1
Зарегистрирован: 25 апр. 2022 г., 15:58
Рейтинг пользователя: 2

2
#12
Работа с изображениями

Оптимизация всех JPEG-ов в папке, рекурсивно, 70% качества:
$ find . -type f -name "*.jpg" -exec jpegoptim --strip-all --all-progressive -o --max=70 {} \;

Уменьшить разрешение всех изображений до 750px по ширине
$ mogrify -path resized/ -auto-orient -thumbnail 750x *.jpg
БЕЗ -path ЕСЛИ ЗАМЕНИТЬ
или уменьшить до 1024 по ширине (ниже)
$ find . -type f \( -name "*.jpeg" -or -name "*.jpg" \) -exec mogrify -resize 1024x -quality 70 {} \; -exec jpegoptim --strip-all --all-progressive -o --max=70 {} \;
или
$ convert "*.jpg[1024x]" -set filename:base "%[base]" "%[filename:base].jpg"

Вращать на 270 градусов все фотки
$ for szFile in *.jpg ; do convert "$szFile" -rotate 270 "$(basename "$szFile")" ; done

Отразить
Сверху-вниз
for szFile in *.png ; do convert "$szFile" -flip "$(basename "$szFile")" ; done
Слева-направо: -flop

Адская оптимизация PNG (неприлично долго)
$ find ./ -type f -iname "*.png" -exec optipng -strip all -o7 {} \;

Конвертировать все PNG в JPG
Ubuntu: $ mogrify -format jpg *.png

Mac: $ find ./ -name "*.png" -exec mogrify -format jpg {} \;
$ find ./ -name "*.png" -exec rm {} \;

Сделать все JPEG-и в папке "прогрессивными", чтоб они отрисовывались на сайте сразу а не построчно
$ mogrify -interlace plane *.jpg

Ресайз всех видео в подпапку
find . -type f -name "*.mov" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vf scale=320:320 -vcodec hap -format hap_alpha "small/${FILE%.mov}.mov";' _ '{}' \;

Ресайз прозрачного ХАП:
ffmpeg -i когти.mov -vf scale=320:320 -vcodec hap -format hap_alpha small/когти.mov

Конвертировать в HAP:
ffmpeg -i yourSourceFile.mov -c:v hap outputName.mov


convert "*.jpg[400x]" -set filename:base "%[base]" "%[filename:base].jpg"
sudo find -type f -name "*.jpg" -exec jpegoptim --strip-all --all-progressive -o --max=80 {} \;
mogrify -format bmp *.jpg
for i in *.bmp ; do echo | base64 "$i" > encoded/"$i".txt; done

Переименовать последовательно цифрами
$ a=1 ; for i in *.png.jpg ; do new=$(printf "%d.jpg" "$a"); mv -i — "$i" "$new"; let a=a+1; done

Убрать звук из видео
ffmpeg -i $input_file -c copy -an $output_file

MOV to WEBM with alpha transparency
ffmpeg -i input.mov -c:v libvpx -pix_fmt yuva420p -auto-alt-ref 0 output.webm

Для кучи сразу:
find . -type f -name "*.webm" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -c:v libvpx -pix_fmt yuva420p -auto-alt-ref 0 -vf scale=1920:1080 -b:v 4096k "new/${FILE%.webm}.webm";' _ '{}' \;

Склеить два видео
ffmpeg -safe 0 -f concat -i files -vcodec copy -acodec copy merged.MOV

"files" - это просто файл в той же папке с таким контентом:
file ./in.mov
file ./loop.mov

Сделать WEBM из картинки
ffmpeg -loop 1 -i input.png -t 1 -c:v libvpx -pix_fmt yuva420p -auto-alt-ref 0 -vf scale=3840:2160 -r 1 -b:v 8192k "output.webm"

Для кучи сразу:
find . -type f -name "*.png" -exec bash -c 'FILE="$1"; ffmpeg -loop 1 -i "${FILE}" -t 1 -c:v libvpx -pix_fmt yuva420p -auto-alt-ref 0 -vf scale=3840:2160 -r 1 -b:v 8192k "webm/${FILE%.png}.webm";' _ '{}' \;



Оптимизировать все JPEG-и в папке и всех подпапках
find . -name '*.jpg' -exec jpegoptim --strip-all '{}' \;

Оптимизировать все PNG-хи в папке и всех подпапках
find . -name '*.png' -exec optipng -o3 '{}' \;


Преобразовать MTS в MP4:
ffmpeg -i 00031.MTS -vcodec copy -acodec copy output.mp4

Для множества файлов:
for file in *.MTS; do ffmpeg -i "$file" -vcodec copy -acodec copy "${file%.MTS}".mp4; done

find . -type f \( -name "*.mov" -or -name "*.MOV" \) -exec ffmpeg -i "$file" -vcodec copy -acodec copy "${file%.mov}".mp4 \;
MAC: find ./ -iname '*.avi' -o -iname '*.mov' -exec bash -c 'ffmpeg -i "{}" -c:v libx264 -preset medium -crf 28 -c:a aac "{}".mp4' \;


Стабилизация видео:
ffmpeg -i input.mp4 -strict -2 -vf deshake output.mp4

Разбить видео на JPG-кадры:
ffmpeg -i crab.mp4 -r 25 frames/frame-%04d.jpeg


Переименовать все JPEG в JPG:
find . -type f -name '*.jpeg' -print0 | xargs -0 rename 's/\.jpeg/\.jpg/'

Переименовать по регулярному выражению, убрав кусок имён файлов (в данном случае первую цифру 7)
rename 's/7(\d{10}).*$/$1\.jpg/' *.jpg --dry-run

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

0
#13
Удаление в конце строк любых пробельных символов, в том числе символа возврата каретки (dos2unix, CR LF → LF) и лишних переводов строк в конце файла рекурсивно для всех файлов в подкаталогах:
find . -type f -exec awk -- '{ sub(/[\t\v\f\r ]+$/, ""); buf = buf $0 "\n" } END { sub(/\n+$/, "", buf); print buf > ARGV[1] }' {} \;
Замена отступов в 4 пробела на табуляции рекурсивно для всех файлов в подкаталогах:
find . -type f -exec awk -- '{ while(1) { if(!match($0, /^\t* /)) { break } $0 = (RLENGTH == 4 ? "" : substr($0, 1, RLENGTH - 4)) "\t" substr($0, RLENGTH + 1) } buf = buf $0 "\n" } END { sub(/\n$/, "", buf); print buf > ARGV[1] }' {} \;

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

1
#14
Полное удаление (вместе с конфигурационными файлами) deb-пакетов, ранее удалённых командой apt-get remove, которая не удаляет конфигурационные файлы пакетов.
apt-get purge $(dpkg -l | awk '$1 == "rc" { print $2 }')

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

0
#15
Если в каталоге слишком много файлов, то команда rm * может не работать. В этом случае можно применить такой трюк:
find путь -delete
Если нужно удалить не все файлы, а какие-то определённые (например, все файлы jpg), то это делается так:
find путь -name '*.jpg' -delete

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

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

0
#16
Отключить/включить звук (ALSA):
amixer -q set Master toggle
Отключить/включить звук (PulseAudio):
amixer -qD pulse set Master toggle

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

0
#17
Отключить монитор:
xset dpms force off

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

1
#18
Вывод списка наиболее активных входящих соединений:
netstat -t -n | LC_ALL=C sort -k2 -r -n|head -n 50
исходящих:
netstat -t -n | LC_ALL=C sort -k3 -r -n|head -n 50
В современных дистрибутивах Linux команды netstat (и вообще всего пакета nettools) нет, там можно использовать команду ss:
ss -t -n | sort -k2 -r -n|head -n 50

Вывод суммарной активности по соединениям (автор — 10geek):
netstat -tn | LC_ALL=C awk '$1 == "tcp" || $1 == "udp" { sum[$5] += int($2) } END { for(i in sum) printf("%8d %s\n", sum[i], i) }' | LC_ALL=C sort -n

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

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

0
#19
Конвертирование голосовых аудиодорожек, ориентированное на максимальное сжатие без существенного ущерба разборчивости речи. Опция -application voip даёт улучшение качества кодирования высокочастотных звуков (таких, как «с», «ц») без увеличения битрейта.
ffmpeg -y -i voice.wav -c:a libopus -ab 13k -ar 24000 -ac 1 -application voip voice.ogg

Страницы:
  • 1
  • 2
Распечатать

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

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

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