четверг, 16 апреля 2009 г.

Различные полезные однострочники

Полезные однострочники, собранные на просторах интернета, в частности с сайта http://www.linux.com/, http://rus-linux.net/, http://www.linux.org.ru/ и из собственного опыта.


Сколько файлов в текущем каталоге:
ls -1| wc -l

5 процессов, которые больше всего нагружают процессор системы:
ps -eo user,pcpu,pid,cmd | sort -r -k2 | head -6

Получить упорядоченный список пользователей системы:
sort /etc/passwd

Если вам нужны лишь имена пользователей, тогда нужно отсеять часть данных. К примеру, так:
sort /etc/passwd | cut -d":" -f1

Если требуются лишь настоящие пользователи, отдайте следующую команду:
gawk '$3 >= 500 {print $1 }' FS=":" /etc/passwd | sort

Создать резервные копии лишь .php-файлов, добавив к их имени .bkp - вот так filename.bkp. Это реализует следующий однострочник:
for f in *.php; do cp $f $f.bkp; done
Либо
for f in *.php; do cp $f{,.bkp}; done

Создать резервную копию большого объема данных:
tar cf - . | (cd /usr/backups/; tar xfp -)

Создание архива на удаленном сервере:
tar cf - . | ssh smith@remote.server tar xfp - -C /usr/backup/smith

Требуется получить отчет по входящим почтовым сообщениям, примерно так:
cat incoming_emails
2008-07-01 08:23:17 user1@example.com
2008-07-01 08:25:20 user2@someplace.com
2008-07-01 08:32:41 somebody@server.net
2008-07-01 08:35:03 spam not recived, filtered
2008-07-01 08:39:57 user1@example.com
...

Итак, требуется отчет, содержащий адреса получателей. Как видно, некоторые адресаты повторяются, а нам это не нужно. Следующий однострочник решает эту задачу:
awk '/@/ {print $3}' incoming_email | sort -u
либо
grep '@' incoming_email | cut -d ' ' -f 3 | sort -u

В текущей директории рекурсивно сменить разрешения на все директории
find ./ -type d -exec chmod 775 {} \; 

то же для файлов
find ./ -type f -exec chmod 664 {} \; 

Как в -exec find'а выполнить не одну а несколько комманд:
find . -type f -exec sh -c "echo '{}' | iconv -f cp1251 -t utf8 > '{}'.utf8 && mv '{}'.utf8 '{}'" \;

Можно просто несколько раз использовать -exec
find . -exec echo {} \; -exec echo {} \;

chmod +X устанавливает флаг x для u,g,o,a (как указано), если он стоит хотя бы для кого-нибудь (т.е. owner-executable-only => a+x, но текстовый файл a+x не получит).
chmod -R a+rX directory 

Увеличение громкости всех ogg текущей папке.
find . -iname '*.ogg' -exec sh -c "echo \"{}\" && sox \"{}\" tmp.ogg vol 1.7 && mv tmp.ogg \"{}\"" \;

Конвертим все теги mp3-файлов в текущем каталоге с cp1251 на unicode (необходим mp3unicode!):
find . -name "*.mp3" -exec mp3unicode –source-encoding windows-1251 –id3v1-encoding none –id3v2-encoding unicode {} \;

Чистка логов:
find /var/log -type f -exec sh -c ':> "{}"' \;

Не забываем что xargs берет многострочный вывод одной команды и отдает по строке в качестве аргументов другой команде.
find . -name "*.txt" | xargs grep foo

Использование ключа -c в команде uniq может посчитать количество уникальных строк, например узнать, кто больше всех послал мне сообщений:
cat mail_list | sort | uniq -c | sort -nr | head -n -5

63 foo1@verizon.net
24 support@fbar.com
22 bar1@comcast.net
20 foo2@verizon.net
9 abcxyz123@verizon.net

Конвертирование пачки файлов из JPG в GIF с понижением количества цветов до 8:
for file in $(ls *.jpg) ; do convert -verbose -colors 8 ${file} ${file%.jpg}.gif ; done

Конвертирование WAV в MP3 и установка битрейта, равным 32 (в несольких директориях):
for DIR in $(ls -d1 *) ; do for FILE in $(ls -1 ${DIR}/*.wav); do lame -b 32 "${FILE}" "${FILE%.wav}.mp3" ; done ; done

Найти самый большой файл:
find <dir> -type f -print | xargs ls -s | sort -rn | head

Самый крупный каталог:
du -sk * |sort -n

Размер всех вложенных каталогов:
du --max-depth=1 -h

Скопировать большое количество вложенных каталогов, исключая определенные файлы:
tar --exclude='*.doc' -cf - | (cd /destination; tar xf -)

Комментариев нет:

Отправить комментарий