07.11.2008

Работа в консоли – использование mplayer, mencoder, imagemagic...

В этом посте собираются советы по работе в консоли с видио, аудио и графикой.


mplayer


Получение информации о видеофайле



mplayer -identify /home/username/movie.avi -ao null -vo null -frames 0 2>/dev/null | grep ^ID_

Воспроизведение музыки, создание плейлистов



mplayer умеет воспроизводить заранее созданные плейлисты
по порядку записей в плейлиста:

mplayer -playlist <файл плейлиста>

воспроизведение в случайном порядке:

mplayer -shuffle -playlist <файл плейлиста>

динамическое создание списка воспроизведения без создания отдельного файла плейлиста:

find <путь_поиска_файлов> -type f -name "*.mp3" -print | sort > ~/playlist.pls

воспроизведение мультемедия потока (интернет радио)

mplayer mms://адрес сервера

нормализация звука -aop list=volnorm
смена звуковых дорожек -aid 1 (число - номер дорожки)
автоматическая установка звуковых дорожек -alang ru
ручное усиление звука на определенное количество децибел -af volume=10

Горячие клавиши



Esc/q – выход из программы
Space/p – пауза, отжимается при нажатии любой клавиши
9/0 – уменьшить/увеличить громкость
стрелка вправо/влево – перемотать видео на 10 сек. вперед/назад
стрелка вверх/вниз – перемотать видео на 1 минуту вперед/назад
Page Up/Page Down – перемотать видео на 10 минут вперед/назад
f – на полный экран/обратно в обычный режим
o (англ. буква "o") – информативность, можно скрыть все показания плеера, выводить только прошедшее время или прошедшее+полное время фильма
m – выключить / включить звук
1-8 – калибровка яркости, осветленности, контраста и т.д.
+/- (на цифровой клавиатуре) – сместить аудио-видео синхронизацию.

воспроизведение фильмов HD качества с размером 7 Гб и более



использование 2-го ядра для двухядерных процессоров

mplayer -lavdopts threads=2 -vo xv film.mkv

пропуск кадров, выключение обработки

mplayer -framedrop -lavdopts fast:skiploopfilter=all

параметр -lavdopts fast:skiploopfilter=all отключает деблокинг, должно помочь ускорению воспроизведения

mencoder



Кодирование



перекодирование фильма, с целью уменьшения размера и потребления ресурсов при просмотре:
кодирование (в два прохода) в MPEG-4 ("DivX") AVI с кодированием звуковой дорожки в MP3
для предварительной отладки будем кодировать всего несколько секунд фильма
1) mencoder input.avi -ss 120 -endpos 30 -nosound -ovc xvid -xvidencopts vhq=1:bitrate=826:pass=1 -vf scale=640:268,hqdn3d=2:1:2 -o /dev/null && mencoder input.avi -ss 120 -endpos 30 -oac mp3lame -alang ru -lameopts cbr:br=128:mode=0 -ovc xvid -xvidencopts vhq=1:bitrate=826:pass=2 -vf scale=640:268,hqdn3d=2:1:2 -o output.avi
если все устраивает то
2) mencoder input.avi -nosound -ovc xvid -xvidencopts vhq=1:bitrate=826:pass=1 -vf scale=640:268,hqdn3d=2:1:2 -o /dev/null && mencoder input.avi -oac mp3lame -alang ru -lameopts cbr:br=128:mode=0 -ovc xvid -xvidencopts vhq=1:bitrate=826:pass=2 -vf scale=640:268,hqdn3d=2:1:2 -o output.avi
здесь:
input.avi - имя файла, подвераемого обработке
output.avi - имя файла после обработки

скрипт для конвертирования видео в avi c помощью кодека xvid в 2 прохода:

#!/bin/sh
codec="xvid"
codecoptions="-xvidencopts vhq=1:bitrate=700:autoaspect"
namebase="output"
videofiltres="-vf pullup,softskip,hqdn3d,scale=360:288"
lameopts="vbr=3"

mencoder -o /dev/null \
-oac copy \
-ovc ${codec} ${codecoptions}:pass=1 $videofiltres input.avi

mencoder -o "${namebase}.avi" \
-oac mp3lame -alang ru -lameopts ${lameopts} \
-info name="Levashov 1991":comment="encoded by mencoder on ALTLinux4 system":srcform="DVD" \
-ovc ${codec} ${codecoptions}:pass=2 $videofiltres input.avi


скрипт для перегона в avi c помощью кодека xvid в 3 прохода:

#!/bin/sh

lavcopts="vcodec=mpeg4:mbd=2:trell:cbp:mv0:v4mv:vbitrate=826:vqmin=2:vqmax=21:vqcomp=0.8:vqblur=0.1:vlelim=-3:vcelim=5:lumi_mask=0.01:dark_mask=0.1:scplx_mask=0.1:tcplx_mask=0.01:naq:autoaspect"
namebase="output2"
vfs="-vf pullup,softskip,hqdn3d,scale=360:288"


mencoder -o /dev/null \
-oac copy \
-ovc lavc -lavcopts ${lavcopts}:vpass=1:turbo $vfs input.avi

mencoder -o /dev/null \
-oac copy \
-ovc lavc -lavcopts ${lavcopts}:vpass=2:psnr $vfs input.avi

cp divx2pass.log 2nd_divx2pass.log

mencoder -o "${namebase}.avi" \
-oac mp3lame -alang ru -lameopts cbr:br=128:mode=0 \
-info name="21":comment="encoded by mencoder on ALTLinux4 system":srcform="internet" \
-ovc lavc -lavcopts ${lavcopts}:vpass=3:psnr:qns=1:qpel $vfs input.avi

конвертирование во flash .flv:

mencoder source_file.ext -ofps FPS -o out_file.flv -of lavf -oac mp3lame -lameopts abr:br=AUDIO_BITRATE -srate $5 -ovc lavc -lavcopts vcodec=flv:keyint=50:vbitrate=VIDEO_BITRATE:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf pp=lb,harddup

кодирование мультимедиа потоков, получаемых из сети:

mencoder mms://address.of.site/movie.wmv -ovc copy -oac copy -o output.avi
mencoder rtsp://address.of.site/movie.wmv -ovc copy -oac copy -o output.avi

простое кодирование в один проход, перекодировать из WMV в MPEG4, а звук конвертировать в MP3:
mencoder movie.wmv -ovc lavc -lavcopts vcodec=msmpeg4:vbitrate=750:vhq -oac mp3lame -o output.avi

грабить немуцкую аудиодорожку с DVD и сохранить как "MP3 video".
mencoder dvd://1 -aid 129 -oac mp3lame -lameopts br=48:cbr:vol=6 -ovc frameno -o frameno.avi

Может потребоваться указать номер русской звуковой дорожки. Определить номер дорожки можно так:
mencoder -v -endpos 0 -dvd 1 -nosound -ovc frameno

В информации, выдаваемой mencoder-ом, найдите строку про звук "ru", Там и будет указана цифра для ключа -aid

перекодировать WMV файл из AVI в MPEG, а звук конвертировать в MP3

mencoder movie.wmv -ovc copy -ofps 24000/1001 -oac mp3lame -of mpeg -o output.mpg


Исправление AVI файлов с испорченными заголовками
mencoder -idx input.avi -ovc copy -oac copy -o output.avi
Соединение нескольких AVI файлов
cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o output.avi -
или
mencoder 1.avi 2.avi 3.avi -idx -ovc copy -oac copy -o output.avi
здесь кроме простого объединения происходит перестройка индекса, что позволяет корректно перематывать файл при просмотре
mencoder 1.avi 2.avi 3.avi -forceidx -ovc copy -oac copy -o output.avi
если по каким то причинам предыдущий вариант не позволяет конкретно перематывать

Создание видео файла из нескольких файлов JPEGs, PNGs или TGAs
Создание файла DivX4 из всех файлов JPEG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi *.jpg

Создание файла DivX4 из некоторых файлов JPEG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi frame001.jpg,frame002.jpg

Создание файла Motion JPEG (MJPEG) из всех файлов JPEG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o output.avi *.jpg

Создание несжатого видео файла из всех файлов PNG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb -o output.avi *.png

Примечание: Ширина должна быть целым числом, кратным 4, это ограничение формата RAW RGB AVI.

Создание файла Motion PNG (MPNG) из всех файлов PNG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy -o output.avi *.png

Создание файла Motion TGA (MTGA) из всех файлов TGA в текущей директории:
mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o output.avi *.tga

раскадровка фильма
Вырезать кадр идущий на 670 сек. фильма:
mplayer -ss 670 -frames 1 -vo jpeg -nosound movie.avi
mplayer -vo jpeg (или png) movie_name.avi


Графика


конвертирование всех файлов в текущей директории из одного формата файлов в другой с помощью ImageMagick
convert *.tif[0] 0.jpg
увеличение контраста, при сохранении исходных файлов
convert *.bmp +contrast +contrast _.bmp
увеличение контраста, файлы заменяются
mogrify -verbose *.bmp +contrast +contrast (опция verbose - выводит информацию об обрабатываемых файлах)
получение информации о графическом файле
identify 00064.bmp
просмотр файла
display 00064.bmp

простой скрипт для увлечения контраста изображений
применим для отсканированных книг, в том случае, если полученное изображение "выцвевшее", бледное
#/bin/sh
for NAME in *

do

nice 20 convert "$NAME" -contrast -gamma 0.5 "$NAME.mod.png"

echo "Обработан файл '$NAME'"

done

Скрипт преобразованиея всех файлов в текущей дирректории в формат djvu и создание одного многостраничного файла
строка DEFMASK="*.png" определяет формат исходных файлов


#!/bin/bash
#
# any2djvu-bw
#

if [ -z `which anytopnm` -o -z `which ppmtopgm` -o -z `which pgmtopbm`\
-o -z `which cjb2` ]; then
usage
echo "Error: anytopnm, ppmtopgm, pgmtopbm and cjb2 are needed"
echo
exit 1
fi

shopt -s extglob


DEFMASK="*.png"
DPI=300
# uncomment the following line to compile a bundled DjVu document
OUTFILE="#0-bw.djvu"

function usage() {
echo
echo "usage:"
echo
echo "$0 [\"REGEXP\"]"
echo " converts single pages with the default mask $DEFMASK (or REGEXP if provided)"
echo " in the current directory to single-page black and white djvu documents"
# uncomment the following line to compile a bundled DjVu document
echo " and bundles them as a djvu file $OUTFILE"
echo
}

if [ -n "$1" ]; then
MASK=$1
else
MASK=$DEFMASK
fi

for i in $MASK; do
if [ ! -e $i ]; then
usage
echo "Error: current directory must contain files with the mask $MASK"
echo
exit 1
fi
if [ ! -e $i.djvu ]; then
echo "$i"
anytopnm $i | ppmtopgm | pgmtopbm -value 0.499 > $i.pbm
# in netpbm >= 10.23 the above line can be replaced with the following:
# anytopnm $i | ppmtopgm | pamditherbw -value 0.499 > $.pbm
cjb2 -dpi $DPI $i.pbm $i.djvu
rm -f $i.pbm
fi
done

# uncomment the following line to compile a bundled DjVu document
djvm -c $OUTFILE $MASK.djvu




#!/bin/bash
WATERMARK="$HOME/.watermark.png"

echo "*****************************************"
echo "* Image Resize and Watermarking Script *"
echo "* By Gilbert Mendoza - SavvyAdmin.com! *"
echo "*****************************************"
echo " "

for i in ~/Photo_publ/*{.jpg,.jpeg,.png,.JPG,.JPEG,.PNG}
do
echo "Working on $i ..."
renrot --no-rename $i 1> /dev/null 2> /dev/null
convert -adaptive-resize 1024x1024 -sharpen 0.1 -normalize -quality 89 $i $i 2> /dev/null
composite -gravity southeast -dissolve 75 $WATERMARK $i $i 2> /dev/null
echo "... Done!"
done
rm ~/Photo_publ/*_orig
exit 0


Есть задача масштабировать большой набор картинок к некоторому меньшему размеру.
Требуемые конечные размеры: 100x100.

#!/bin/bash
width=100
height=100

PIC_INFO=`identify -format "%m %w %h" $pic 2>/dev/null || echo "false"`
if [[ $PIC_INFO != "false" ]]; then
# image format
FORMAT=`echo $PIC_INFO | cut -d ' ' -f1`
# picture width
W=`echo $PIC_INFO | cut -d ' ' -f2`
# picture height
H=`echo $PIC_INFO | cut -d ' ' -f3`

# picture info
pi="$pic $FORMAT [$W x $H]"

## convert if only file is image and exciting [width x height]
if [[ $W -gt $width || $H -gt $height ]]; then
echo "convert $pi..."
convert $pic -resize "$size>" -sharpen 0.8 $pic
else
if [[ $FORMAT == "JPEG" ]]; then
echo "$pi : there is no reason to convert $pic"
else
echo "$pi is not a JPEG, convert to JPEG"
convert $pic $pic
fi
fi



find -name '*.jpg' | while read PIC; do
DATE=$(exiftool -p '$DateTimeOriginal' $PIC | sed 's/[:
]//g')
touch -t $(echo $DATE | sed 's/\(..$\)/\.\1/') $PIC
mv -i $PIC $(dirname $PIC)/$DATE.jpg
done

Первая строка находит все файлы *.jpg в текущем и дочерних каталогах. Следующая стока извлекает тэг Date/Time Original каждого файла (может понадобиться тэг Create Data, смотря какая камера) и удаляет все пробелы и двоеточия. Затем команда touch устанавливает временную отметку согласно полученным данным, – устрашающее регулярное выражение sed всего лишь вставляет точку перед двумя последними символами (touch ожидает, что секунды будут отделены от прочих данных временной строки именно так). Заключительная строка переименовывает файл, используя параметр -i с mv на тот случай, если временные отметки двух файлов одинаковы. Это предотвращает перезапись файлов.


Звук


увеличение громкости
for FILE in *.mp3;/ do nice lame --scale 3 "$FILE" "hi_volume/$FILE"; done
разрезание mp3 файлов на более мелкие, заданной длинны (удобно при прослушивании аудиокниг на мобильных устройствах у которых отсутствует возможность перемещения внутри композиции)
for FILE in *.mp3; do mkdir "$FILE"; mp3splt -t 5.00 "$FILE" -d "output" -o "$FILE"_@n; done
создать Audio-CD из всех .wav файлов в текущей директории
cdrecord dev=0,0,0 -audio *.wav
грабить дорожки с Audio-CD в текущую директорию (в формате .wav)
cdparanoia -B
конвертирование аудио в MP3

mplayer -dumpstream -dumpfile music.ra rtsp://site/music.ra

mkfifo pipe.wav

lame pipe.wav music.mp3

mplayer -ao pcm:file=pipe.wav music.ra



Интернет


скачать сайт
wget -c -p -r -l0 -np -N -k -nv


find - поиск файлов



$find /etc/ -type f -mtime -1

первым параметром всегда указывается начальный каталог для поиска.
опция -type с параметром f говорит find, что нужно искать только обыкновенные файлы.
опция -mtime с параметром -1 указывает find, что нужно найти файлы, изменившиеся за последние сутки.
"-"перед 1 задает верхнюю границу диапазона, т.е. "все, что изменилось за последние 24 часа"

если бы мы указали "+" перед 1, то find нашел бы всех файлы, изменившиеся от 01.01.1970 до вчерашнего дня (более суток назад)
так же можно указать точную дату поставив число без модификатора.

выполнение действий с найденными файлами.
опция -exec принимает строку с командой, которая будет выполнятся для каждого найденного файла
параметр передающийся команде обозначается через {}
строка должна заканчиваться символами " \; "

рассмотрим пример:
* найти в каталоге /tmp все файлы, изменившиеся за последний месяц и скопировать их в каталог
/tmp/backup/

$find /tmp -type f -mtime -30 -exec cp {} /tmp/backup \;

* удалить все каталоги(рекурсивно) с именем logs, изменившиеся за последний день в каталоге
/var/www


$find /var/www -type d -mtime 0 -name logs -exec sudo rm -fr {} \;

параметр d в опции -type указывает на поиск только каталогов
опция -name задает поиск по имени.
здесь стоит добавить, что удалять таким образом файлы не оптимально(медленно).
для удаления у find есть встроенная опция -delete, которая отрабатывает на порядок быстрее.

Работа с текстом, регулярные выражения



awk - это язык программирования, предназначенный для обработки файлов. Цель его
разработки - облегчить постановку и решение многих задач, связанных с переработкой текстовой информации.
awk разделяет входной поток на поля и помещает эти поля в переменные вида $1,$2,..$N
по умолчанию, разделитель полей - пробел, но с помощью опции -F" " это можно переопределить :


$head -4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

$cat /etc/passwd|awk -F":" '{print $1}'
root
daemon
bin


например, у нас в каталоге /var/www есть несколько сайтов. для каждого сайта существует каталог logs, куда пишутся логи апача (для этого сайта).и вот мы хотим узнать суммарный обьем этих логов, а так же найти все логи больше 100Mb.

1.поиск больших логов:

$find /var/www -type f -name "access.log*" -size +100M
/var/www/site1/logs/access.log
/var/www/site2/logs/access.log.1.gz

2.подсчитаем суммарный обьем логов:

find /var/www/ -type f -name "access.log*" -exec du -k {} \;|awk '{s+=$1}END{print s}'
5071604


find ищет все файлы по маске (access.log*) и для каждого запускает команду du.
команда du печатает размер файла. опция -k делает вывод в килобайтах.
дальше запускается процессор awk, просто суммирует первое поле строк (числа) в переменную s и выводит значение переменной на экран.

еще примерчик : найдем в системе все файлы и каталоги принадлежищие юзеру test1 и подсчитаем суммарный обьем.

#find / -user test1 -exec du -sm {} \;|awk '{s+=$1}END{print s}'

т.е. здесь с помощью опции -user find ищет файлы, принадлежашие юзеру test1 и для каждого файла/каталога подсчитываем его размер (команда du)
дальше через конвеер эти данные принимает awk и, как мы делали выше, считает их сумму в Kb.

Прокси

Вопрос: Web-прокси Squid (и SquidGuard) работает на моем компютере с Fedora Core 6 с тех пор, когда я прочел о нем в самом первом учебнике Hardcore Linux, в LXF76. Я настроил SquidGuard так, чтобы защитить моих детей от нежелательного контента. Это означает, что на их (Windows XP) компьютере я установил маршрут доступа в Интернет через мой прокси-сервер (192.168.100.100:8080), и все бы прекрасно.

Но меня беспокоит, что мой старший очень быстро взрослеет, и недалек тот день, когда он догадается снять флажок Use Proxy Server (Использовать проксисервер) и, настроив прямое подключение к Интернету, получит ничем не ограниченный доступ. Можно ли пропускать весь трафик через мой (постоянно включенный) FC6-компьютер (вероятно, пробросом портов на маршрутизаторе, пароль к которому знаю только я), чтобы весь web-трафик проходил через прокси-сервер, а при «прямом» подключении доступа в Интернет не было? Если можно, то как? Я пробовал перенаправить порты 80 и 8080 на IP моего компьютера, но это не помогло. Марк [Mark], из форумов LXF

Ответ: Насколько я понимаю, под словом «Интернет» вы подразумеваете World Wide Web, то, с чем обычно имеет дело Squid. Однако вы можете направить весь Интернет-трафик через свою FC6-машину, а следовательно, через SquidGuard, в три шага.

Во-первых (конкретное воплощение зависит от вашего маршрутизатора), вы должны настроить маршрутизатор так, чтобы он позволял подключаться к Интернету только Вашей FC6-машине. Сделанный Вами проброс портов влияет только на входящие подключения, поэтому ликвидируйте его.

Во-вторых, необходимо назначить FC6 шлюзом по умолчанию, чтобы весь Интернет-трафик (а не только web-трафик) проходил через него. Отредактируйте /etc/sysctl.conf от имени суперпользователя, изменив окончание строки

net.ipv4.ip_forward = 0

с 0 на 1. Потом наберите

service network restart

Теперь нужно перенастроить детский компьютер на использование IP-адреса вашего компьютера в качестве адреса сетевого шлюза. Так как вы запретили им бесконтрольный доступ с помощью маршрутизатора, теперь это единственный путь подключения к Сети.

Остается проблема удаления Вашими детьми всяких прокси-настроек, поэтому мы воспользуемся функцией Squid, называемой «прозрачный прокси». Эта функция принудительно направляет все web-запросы, проходящие через машину – а вы уже предопределили их направление на предыдущих шагах – на прокси Squid, следовательно, на SquidGuard. Откройте в редакторе файл настройки Squid (обычно /etc/Squid/Squid.conf) и найдите строку (строки), начинающиеся с 'http_port'. В Вашем файле это, скорее всего, выглядит так: http_port 8080. Измените это на

http_port 80 transparent

80 – это стандартный HTTP-порт. Параметр transparent предписывает Squid вмешиваться и перехватывать все запросы, независимо от того, настроен браузер на работу с прокси или нет. вам нужно или удалить старую настройку прокси из браузеров, или добавить строку обработки запросов для старого порта 8080.

http_port 8080 transparent

Существует другой метод сделать то же самое. Можно оставить http_port на 8080, а запросы, которые вы хотите пропускать через прокси, перенаправить с порта 80 на 8080 при помощи правила Iptables. Это сложнее, но удобнее, так как позволяет некоторым машинам полностью миновать прокси. Подробнее об этом можно узнать на web-сайте Squid: http://www.Squidcache.org.

Вы можете также использовать Iptables или графическую оболочку вроде Firestarter для блокировки исходящего трафика на любые порты, кроме стандартных (HTTP, HTTPS, POP3, SMTP и FTP). Это предотвратит использование Вашими детьми удаленного прокси, работающего через другой порт. Возможно, вы решите сделать это на маршрутизаторе, но если вы установите запрет на своей FC6-машине, то блокировка нежелательного доступа для детей не ограничит вашей собственной свободы.



Если вы хотите отправлять почту из Bash-скриптов, простейшее решение – команда mailx (и она, вероятно, в Вашей системе уже есть). Эта программа отправляет все, что получает со стандартного ввода, на указанный электронный адрес. Например:

echo "Hello World" | -s "Obvious example" me@example.com

Тема сообщения задается параметром -s (используйте кавычки, если в теме есть пробелы); все, что получено со стандартного ввода, составит тело сообщения. Для почтовой программы этого вполне достаточно


Вопрос: У меня возникла следующая задача, которую, как мне кажется, решить довольно легко. Необходимо дать всем файлам в одном каталоге случайные названия (можно и цифровые), но сохранить расширение. Хотелось бы, чтобы это был простенький скрипт на Bash или Perl. Дело в том, что мне подарили MP3-плеер, который умеет либо проигрывать мелодии подряд, либо работать в режиме случайного выбора песни. Оказалось, что датчик случайных чисел в этом плейере плохой и постоянно выдает фактически одну и ту же последовательность песен, и, как следствие, режимы мало отличаются друг от друга. Поэтому вместо встроенного датчика (и вместе с ним) я хочу использовать более качественный компьютерный. Маслий Алексей

Ответ: Вашу задачу можно решить буквально одной командой:

$ for oldname in *.mp3; do mv $oldname $RANDOM.mp3; done

Переменная оболочки RANDOM возвращает случайное число в диапазоне от 0 до 32767, которое генерируется Bash при каждом ее прочтении. Поскольку значения RANDOM, в принципе, могут повторяться, следует учесть этот факт во избежание затирания одного файла другим:

for oldname in *.mp3; do
while [ -z $newname -o -e $newname ]; do
newname="$RANDOM.mp3"
done
mv $oldname $newname
done

Цикл while генерирует новое имя для каждого файла до тех пор, пока не найдет свободное (-e $newname проверяет существование файла с именем $newname). Условие -z $newname необходимо, чтобы цикл инициализировал значение переменной newname перед началом работы. Изменив $RANDOM.mp3 на $1$RANDOM.mp3, вы получите возможность указать общий префикс (например, "song_") в качестве параметра командой строки скрипта

$ ./randomizer.sh song_; ls *.mp3
song_10306.mp3 song_123.mp3 song_20096.mp3

Скрипт несложно обобщить и на случай, когда файлы в каталоге имеют различные расширения: достаточно воспользоваться конструкцией ext=${oldname##*.} для его извлечения и заменить $1$RANDOM.mp3 на $1$RANDOM.$ext. Да, и не забудьте изменить фильтр *.mp3 в первой строке на что-то более подходящее, скажем *.{mp3,wav}.



Легкий путь к удаленной работе.

X, основа всех графических интерфейсов Linux – сетевой протокол. Чаще всего ваш дисплей подключается к X-серверу на локальной машине, но это совершенно не обязательно. Для доступа к рабочему столу удаленного компьютера вы можете пользоваться VNC или NX, но этот метод имеет один недостаток: необходимо воспроизводить весь рабочий стол другого компьютере. А еще нужно, чтобы на удаленном компьютере реально имелся рабочий стол. Если этот компьютер – автономный сервер, запуск рабочего стола может оказаться растратой ресурсов.

Вместо запуска полномасштабного рабочего стола можно запустить лишь то приложение, которое вам необходимо, через SSH-соединение, безопасное даже при работе через общедоступные сети. Наберите в своем терминале следующее:

ssh -X user@remote.computer
someprogram

Если someprogram – графическое приложение, то его окно откроется на вашем рабочем столе. Правда, кое о чем нужно помнить. Во-первых, у вас должен быть SSH-доступ к другому компьютеру через пароль или по ключу. Кроме того, на SSH-сервере другого компьютера должен быть настроен проброс X (X forwarding). Он обычно настраивается по умолчанию, но на всякий случай проверьте, что /etc/ssh/sshd_config содержит

X11Forwarding yes

У ssh есть и другие полезные функции. Например, можно использовать -Y вместо –X. Этот параметр доступен, если SSH-сервер настроен на Trusted X11 Forwarding, и существенно ускоряет процесс передачи данных. Другой параметр, способный ускорить подключение по медленным линиям – это -C, вызывающий сжатие всех данных. Хотя X для медленных подключений все же не годится – лучше пользоваться NX или TightVNC.

Проверка поверхности жесткого диска
badblocks -s -w -v /dev/hdb1 -o badblocks
Перенос данных с одного диска на другой
dd if=/dev/hdc of=/dev/sda bs=8K conv=noerror,sync
или
ddrescue -r 1 /dev/hdc /dev/sda samsung200.log
где -r 1 - однократная попытка чтения дефектного сектора при вычитывании с использованием сохраненного лога.
или dd_rescue -v -y 1G -l samsung200.log -o samsung200.bb /dev/hdc /dev/sda

С помошью программы hdparm и опции -S естъ возможность выставить сколько времени должно
пройти от последнего доступа к HD чтобы он отключился.

значение сзади -S обозначает следуешие:
[1-240] Это значение умножается на 5 секунд, это время через которое HD остановиться.
[241-251] Это значение минус 240 умножается на 30 минут, это время через которое HD остановиться.
[252] Timeout через 21 минуту

hdparm -S 120 /dev/hda
hdparm -S 242 /dev/hda
hdparm -S 0 /dev/hda

в первом случае HD выключится через 10 минут, во втором через полчаса (241-240)*30=30 ,
и в третьем будет всё время включен.

Смена часового пояса в Debian-бейсед дистрибутивах
dpkg-reconfigure tzdata


Конвертирование тегов mp3

Скрипт для конвертирования тегов mp3 файлов из cp1251 в utf8, чтоб нормально было видно что за трек играет.

Называется скрипт tag2utf. Качаем себе на машину, устанавливаем права на запуск

chmod 755 ./tag2utf-0.15.py

А дальше все просто. Запускаем скрипт с каталогом файлов в качестве параметра и говорим где в каком каталоге какая кодировка исходная. Все. Теперь наслаждаемся нормальными тегами в mp3 файлах.

Для создания CD_R из кучи MP3 файлов, Вы можете использовать следующую командную последовательность:

for I in *.mp3
do
mpg123 -s $I | cdrecord -audio -pad -swab -nofix -
done
cdrecord -fix