|
Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Редактор vi
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!
|
Утилиты и приёмыЗдесь я собрал небольшую коллекцию информационных и вспомогательных утилит и различных приёмов, которые бывают очень полезны, но пользуешься ими редко и названия и ключи забываются забываются. (Честно говоря, информация стала уже слишком разношёрстна, надо бы её уже разделить на несколько страниц, но всё руки не дойдут.) Преобразование видеоУ меня есть два устройства с экранами 320x240 и возможностью показывать видео, кодированное в H.264: телефон Nokia N78 и плеер Sony Walkman NWZ-A726. Поэтому пришлось мне всесторонне изучить вопрос конвертирования видео. Лучшим конвертером оказался (на мой взгляд) Конвертируем любое видео в H.264 старым mencoder -ofps 25 -of lavf -lavfopts \ format=mp4:i_certify_that_my_video_stream_does_not_use_b_frames \ -af lavcresample=48000 -srate 48000 -vf-add harddup \ -vf-add scale=320:240 -oac lavc -ovc lavc -lavcopts \ aglobal=1:vglobal=1:acodec=aac:abitrate=128:vcodec=mpeg4:\ vbitrate=250:autoaspect:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:\ predia=2:dia=2:precmp=2:cmp=2:subcmp=2:preme=2:turbo \ -quiet -info name="Name_to_display" \ -o output.mp4 input.avi Более новые реинконрации mencoder -ofps 25 -of lavf -lavfopts \ format=mp4 \ -af lavcresample=48000 -srate 48000 -vf-add harddup \ -vf-add scale=320:240 -oac lavc -ovc lavc -lavcopts \ aglobal=1:vglobal=1:acodec=libfaac:abitrate=128:vcodec=mpeg4:\ vbitrate=250:autoaspect:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:\ predia=2:dia=2:precmp=2:cmp=2:subcmp=2:preme=2:turbo \ -quiet -info name="Name_to_display" \ -o output.mp4 input.avi Разница в двух опциях: Если звук в фильме очень тихий, то можно включить опцию нормализации звука: -af lavcresample=48000,volnorm=2:1 Если вы хотите порезать фильм на части, то лучше
сперва нормализовать звук, а потом резать. Иначе
нормализация может сработать не правильно в началах
фрагментов. Подробнее о параметрах Чтобы сконвертировать DVD-диск, полезно знать команду mplayer -dumpstream -dumpfile rip.mpg dvd://1 Вместо Чтобы разрезать 100-минутный видеоролик на две части: mencoder -ovc copy -oac copy -endpos 0:50:00 -o part1.avi video.avi mencoder -ovc copy -oac copy -ss 0:50:00 -o part2.avi video.avi Резать на много небольших частей можно скриптом (доработать по вкусу): #!/bin/sh for i in 00:00 00:20 00:40 01:00 01:20 01:40 do p=`echo $i | sed 's/:/_/g'` n="kolobaha_part_$p.avi" echo $n mencoder -ovc copy -oac copy -ss $i:00 -endpos 0:20:00 -o $n Kolobaha.avi done Ещё бывает, что при конвертировании возникает ошибка вида: Pos: 593.1s 15799f (11%) 33.58fps Trem: 61min 238mb A-V:0.051 [251:127] Too many audio packets in the buffer: (4103 in 830561 bytes). Maybe you are playing a non-interleaved stream/file or the codec failed? For AVI files, try to force non-interleaved mode with the -ni option. Простой способ решить эту проблему такой: исходный файл следует разделить и слить назад следующим образом: ## отделяем видео mencoder -ni -ovc copy -nosound -ofps 25 -o video.wmv 'American Psycho.mkv' ## отделяем аудио mplayer -ni -ao pcm -aofile audio.wav -vc dummy -vo null 'American Psycho.mkv' # или на более свежем mplayer # mplayer -ni -ao pcm:file=audio.wav -vc dummy -vo null 'American Psycho.mkv' ## соединяем всё снова mencoder -idx -audiofile audio.wav -ovc lavc -lavcopts vcodec=mpeg4 \ -ofps 25 -oac mp3lame -lameopts vbr=3 video.wmv -o 'American Psycho.avi' Результирующий файл будет конвертироваться без ошибок. Добавление ID3-тегов в mp3-файлыОказалось, что далеко не все программы справляются с этим корректно.
После некоторых экспериментов, я нашёл id3tag. Как её использовать,
можно прочитать в help, а здесь я приведу пример конвертирования большой коллекции
музыки, где файл раскиданы по директория for a in * # исполнители
do
if test -d "$a"
then
cd "$a"
for s in * # альбомы
do
if test -d "$s"
then
cd "$s"
i=1
c=`ls -1 *.mp3 | wc -l`
for f in *.mp3 # песни
do
ff=${f%.mp3}
id3tag -a "$a" \
-A "$a ${s#[0-9][0-9]-}" \
-s "${ff#[0-9][0-9]-}" \
-c "no coments" \
-C "no descr" \
-y 2009 -t $i -T $c -g 1 -w -n "$f"
i=$(($i+1))
done
cd ..
fi
done
cd ..
fi
doneКогда вы будете модифицировать этот скрипт для своих нужд, не забывайте заключать все переменные в двойные кавычки. Иначе пробелы в именах файлов (а они часто попадаются в именах mp3-файлов) поломают всю работу скрипта. Синхронизация времени по NTPntpdate 2.ru.pool.ntp.org ssh, ssh-keygen, scp, opensslУдалённый запуск программДопустим надо запустить программу от пользователя ssh script@down /usr/home/script/bin/prog --prog-params Единственный «недостаток» у вас каждый раз будет запрашиваться пароль. Чтобы включить авторизацию по открытому ключу, а не по паролю делаем следующие простые действия. ssh, авторизация по ключу, а не по паролюЕсли у вас нет открытого ключа, то создаём его: cd ~/.ssh ssh-keygen -t dsa Теперь у вас есть открытый ключ. Заходим на удалённый хост и добавляем ваш ключ к списку авторизованных ключей: ssh script@down # у вас запросят пароль scp you@yourhost:~/.ssh/id_dsa.pub ~/.ssh/temp cat ~/.ssh/temp >> ~/.ssh/authorized_keys rm ~/.ssh/temp Теперь Генерация паролейОчень удобный способ генерации паролей: openssl rand -base64 24 Генерация md5-суммыДля генерации md5-сумм существуют отдельные утилиты
(под FreeBSD — openssl md5 файл ШифрованиеЗашифровать файл: openssl enc -aes-256-cbc -salt -in входной_файл -out зашифрованный_файл Эта команда дважды спросит пароль для шифрования. openssl enc -d -aes-256-cbc -in зашифрованный_файл -out расшифрованный_файл Спросит пароль. Того же самого эффекта можно доиться, управляя стандартными потоками: # шифруем openssl enc -aes-256-cbc -salt < входной_файл > зашифрованный_файл # расшифровываем openssl enc -d -aes-256-cbc < зашифрованный_файл > расшифрованный_файл Полезный пример: # создаём защищённый паролем tar-архив tar czf - your_dir | openssl enc -aes-256-cbc -salt >file.tgz # распаковываем этот архив openssl enc -d -aes-256-cbc < file.tgz | tar xzf - Telnet через opensslПример работы с gmail.com по SSL по POP3: $ openssl s_client -crlf -ign_eof -connect pop.gmail.com:995 CONNECTED(00000003) .... +OK Gpop ready for requests from XXX.XXX.XXX.XXX XXXXXXXXXXXXXXXX USER XXXXXXXX +OK send PASS PASS XXXXXXXX +OK Welcome. STAT +OK 528 44954440 LIST +OK 528 messages (44954440 bytes) 1 2867 .... 527 1020 528 2583 . TOP 5 0 +OK message follows .... . QUIT +OK Farewell. read:errno=0 КонсольНастройка цветов в команде ls во FreeBSDКоманда Предлагаю разместить в # эти переменные изменять не надо black='a' red='b' green='c' brown='d' blue='e' magenta='f' cyan='g' light_grey='h' bold_black='A' bold_red='B' bold_green='C' yellow='D' bold_blue='E' bold_magenta='F' bold_cyan='G' bold_light_grey='H' default='x' # ---------------------------------------------------- # а вот тут вы можете установить любые цвета для # разных элементов файловой системы (см. комментарии), # используя имена переменных, инициализированных выше; # для каждого элемента указывается два цвета: # цвет букв и цвет фона # xx00="$bold_blue$default" # directory xx01="$cyan$default" # symbolic link xx02="$magenta$default" # socket xx03="$magenta$default" # pipe xx04="$green$default" # executable xx05="$yellow$default" # block special xx06="$brown$default" # character special xx07="$bold_green$green" # executable with setuid bit set xx08="$bold_green$default" # executable with setgid bit set xx09="$bold_blue$blue" # directory writable to others, with sticky bit xx10="$bold_blue$blue" # directory writable to others, without sticky bit # # ---------------------------------------------------- # экспортируем необходимые переменные LSCOLORS="$xx00$xx01$xx02$xx03$xx04$xx05$xx06$xx07$xx08$xx09$xx10" export LSCOLORS CLICOLOR="YES" export CLICOLOR Вы можете установить любые цвета; сейчас выбраны цвета, в духе Linux-традиции, правда с небольшими моими дополнениями. Приведение bash в чувстваБывает, что перестают работать консоли, выдаётся сообщение вида: subshell.c: read (subshell_pty...): No such file or directory Решается проблема просто: killall -CONT bash Создание patch'ейСоздать patch: diff старый_файл новый_файл > patch_файл Наложить patch: patch старый_файл patch_файл Естественно порядок файлов везде важен. FreeBSD/Linux md5/md5sumВо FreeBSD и в Linux есть две утилиты для подсчёта md5-сумм файлов. Они выдают один а тот же результат, но в несколько разном формате, что очень неудобно, если надо сравнить файлы (по суммам), лежащие на Linux и FreeBSD машинах. Поэтому для каждой системы я написал маленький скрипт, эмитирующий поведение недостающей утилиты. Для FreeBSD — !/bin/sh md5 -- "$@" | sed -E 's/^MD5 \((.*)\) = ([^[:space:]]+)/\2 \1/' Для Linux — #!/bin/sh md5sum -- "$@" | sed -r 's/^(\S+)\s+(\S+)/MD5 (\2) = \1/' Они, конечно, не позволяют использовать ключи командной строки, но обычно это как раз то, что нужно. Информационные утилитыXorgПри настройке оконного интерфейса (оконного менеджера)
часто оказывается необходима
информация об окнах того или иного приложения. Получить её можно
двумя командами При настройке обработки событий (клавиатура/мышь) очень
полезна бывает утилита ЯдроПосмотреть настройки ядра: Посмотреть, что значат все эти переменные: Посмотреть сообщения ядра: Посмотреть окружение ядра (hint'ы): Информация о ядре и загруженных модулях: Нагрузка на дискиОчень полезная утилита /usr/local/sbin/smartctl -a /dev/ad4 выдаст полную информацию по указанному диску, вот лишь, некоторые поля: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 100 100 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0007 253 253 025 Pre-fail Always - 5760 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 77 7 Seek_Error_Rate 0x000f 253 253 051 Pre-fail Always - 0 8 Seek_Time_Performance 0x0025 253 253 015 Pre-fail Offline - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 5899 10 Spin_Retry_Count 0x0033 253 253 051 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 61 194 Temperature_Celsius 0x0022 050 043 000 Old_age Always - 50 196 Reallocated_Event_Count 0x0032 253 253 000 Old_age Always - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x000a 100 100 000 Old_age Always - 0 201 Soft_Read_Error_Rate 0x000a 100 100 000 Old_age Always - 0 202 TA_Increase_Count 0x0032 253 253 000 Old_age Always - 0 На самом деле информации выдаётся на много больше. Информация о нагрузке на диски в реальном масштабе времени:
Информация о swap'e: Информация о всех открытых файлах Есть ещё СетьО сети При отладке новых интерфейсов полезна Для прослушивания трафика очень полезна утилита Разное, но полезноеОчень полезная утилита Посмотреть, от каких библиотек зависит исполняемый файл: ldd -f '%p\n' -a /usr/local/bin/mc | sort | uniq Список локалей: Очень полезен мониторчик Тем, кто активно пользуется MySQL очень понравится
Программа бывает так полезна, что я не удержался и написал свой аналог этой программы, который ещё менее прихотлив и умеет издавать звуки при завершении обработки запросов. |
|
|
|