Полезные однострочники для Linux
Неочевидные связки из консольных команд на все случаи жизни
Страницы:
Распечатать
- 1
- 2
. Редактировалось 2 раза, последний — #1
В этой теме буду собирать различные полезные однострочники для Linux.
Ребята, давайте жить спокойно!
. Редактировалось 1 раз, последний — #11
Список 50 наиболее частых запросов к серверу Apache (если используется формат лога по умолчанию):
А чтобы вывести список наиболее часто обращающихся IP-адресов, нужно print $8 заменить на print $2.
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.
Ребята, давайте жить спокойно!
Работа с изображениями
Оптимизация всех 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
Оптимизация всех 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
Удаление в конце строк любых пробельных символов, в том числе символа возврата каретки (dos2unix, CR LF → LF) и лишних переводов строк в конце файла рекурсивно для всех файлов в подкаталогах:
Замена отступов в 4 пробела на табуляции рекурсивно для всех файлов в подкаталогах:
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] }' {} \;
Полное удаление (вместе с конфигурационными файлами) deb-пакетов, ранее удалённых командой apt-get remove, которая не удаляет конфигурационные файлы пакетов.
apt-get purge $(dpkg -l | awk '$1 == "rc" { print $2 }')
Если в каталоге слишком много файлов, то команда rm * может не работать. В этом случае можно применить такой трюк:
Если нужно удалить не все файлы, а какие-то определённые (например, все файлы jpg), то это делается так:
find путь -delete
Если нужно удалить не все файлы, а какие-то определённые (например, все файлы jpg), то это делается так:
find путь -name '*.jpg' -delete
Ребята, давайте жить спокойно!
Отключить/включить звук (ALSA):
Отключить/включить звук (PulseAudio):
amixer -q set Master toggle
Отключить/включить звук (PulseAudio):
amixer -qD pulse set Master toggle
Вывод списка наиболее активных входящих соединений:
исходящих:
В современных дистрибутивах Linux команды netstat (и вообще всего пакета nettools) нет, там можно использовать команду ss:
Вывод суммарной активности по соединениям (автор — 10geek):
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
Ребята, давайте жить спокойно!
Конвертирование голосовых аудиодорожек, ориентированное на максимальное сжатие без существенного ущерба разборчивости речи. Опция -application voip даёт улучшение качества кодирования высокочастотных звуков (таких, как «с», «ц») без увеличения битрейта.
ffmpeg -y -i voice.wav -c:a libopus -ab 13k -ar 24000 -ac 1 -application voip voice.ogg
Страницы:
Распечатать - 1
- 2
У вас нет прав для отправки сообщений в эту тему.