Полезные bash-команды

Кто слышал о BASH? Думаю все, кто, хоть как-то, связан с IT индустрией. О синтаксисе и командах написана не одна тысяча книг. Поэтому здесь, предлагаю, рассмотреть только “редкие” команды, которые трудно найти, но могут быть полезными.
Возвращает количество файлов в том числе и во вложенных папках:

ls -R -l | wc -l

Возвращает объём папки(со вложеностями):

du -sh

Выводит максимальное разрешение текстур (wallpapper, skydom и тд) поддерживаемое системой:

xvinfo | grep max

Высчитывает количество строк в файлах по маске (параметр “*.php”) в текущей и во вложеных директориях:

find . -name "*.php" -type f -print0 | xargs -0 wc -l

Генерирует произвольный пароль в 16 (параметр -c16) символов:

/dev/urandom tr -dc A-Za-z0-9_ | head -c16 ; echo

Разбивает файл bigfile на файлы не превышающие 700 мегабайт (параметр 700m), называя новые файлы BIG_aa, BIG_ab, … (общая маска задаётся последним параметром):

split -b 700m bigfile BIG_

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

history|awk '{a[$2]++ } END{for(i in a){print a[ i ] " " i}}'|sort -rn|head

Найти и удалить в bash

Простая команда для поиска и удаления в консоле:

 $ rm -rf `find /folder_name/ -name *patern*` 

Пример:

 $ rm -rf `find . -name .svn` 

Удалит все папки .svn из текущей и всех вложенных дерикторий.

Настройка NAT во FreeBSD

В статье описывается процесс настройки NAT’а (Network Address Translation) на простом примере предоставления доступа к ресурсам внешней сети (или интернету) из внутренней локальной сети.

В данной статье мы будем рассматривать настройку Nat на примере раздачи интернета в локальную сеть.

Итак, у нас есть сервер под управлением FreeBSD, подключенный к сети провайдера («внешняя сеть»).
Также имеется один или несколько компьютеров («внутренняя сеть»), которым нужно дать доступ к ресурсам сети интернет.
Подключить компьютеры внутренней сети напрямую к внешней нельзя, так как у нас есть всего 1 IP-Адрес во внешней сети, который выдан нашему серверу.
Выходом из ситуации будет соединение сетей через сервер (в данной ситуации всётаки «роутер» будет более правильно) при помощи технологии NAT
Предположим что сеть провайдера имеет диапазон 123.123.123.0/24, а IP который выдал нам провайдер 123.123.123.111.
Внутренняя сеть же имеет диапазон 192.168.10.0/24 и IP нашего роутера в ней 192.168.0.1
Диапазон IP адресов во внутренней сети может быть любой, однако необходимо чтобы он не пересекался с диапазонами ни в одной внешней сети.
Read the rest of this entry »

Настройка сетевых интерфейсов для разных Unix систем

В данной статье мы рассмотрим как правильно настроить сетевой интерфейс для разных Unix систем.
В качестве примера предположим что у нас есть следующие данные:

IP address : 192.168.10.14, 192.168.10.15
Mask : 255.255.255.0
Gateway : 192.168.10.1
DNS : 192.168.10.3
DNS : 192.168.10.2

Итак приступим:
Для операционной системы FreeBSD:
В конфигурационный файл /etc/rc.conf добавляем:

# Основной адрес
ifconfig_rl0="inet 192.168.10.14 netmask 255.255.255.0"
# Основной Шлюз
defaultrouter="192.168.10.1"
# Алиас
ifconfig_rl0_alias0="inet 192.168.10.15 netmask 255.255.255.0"

rl0 — название сетевого интерфейса который настраиваемого мы настраиваем.

После того как Вы сохранили файл нужно перезагрузить сеть выполнив команду

/etc/rc.d/netif restart
 Read the rest of this entry »

autoconf 2.62 и старые версии FreeBSD

При необходимости установить autoconf версии 2.62 и выше из портов в FreeBSD 5.x или, тем более, 4.x, возникает проблема с texinfo. Например, появляются такие ошибки:

autoconf-2.62.texi:1723: Unknown command `'.
autoconf-2.62.texi:3353: Unknown command `’.

По этой ссылке указано, что надо с этим делать. В общем, надо всего-то добавить пару строк в Makefile и чуть-чуть изменить последнюю строку, и всё соберётся без проблем.

UPDATE: получившийся у меня Makefile

UPDATE2: in case you don’t speak Russian, please, read this the full version of this post.

If you have ‘old’ version of FreeBSD (4-5) and experiencing problems with texinfo while updating autoconf, you should read this link. It tells what you should add to Makefile in order to update autoconf. As a result, this Makefile worked for me.

Tip: запускать задачу раз в месяц в субботу

Часто необходимо запускать что-то (например полный бекап бд) раз в месяц, но в выходной, допустим в ночь с субботы на воскресенье.

Это можно сделать в crontab следующим образом

0 23 * * 6 [`date "+%d"` -lt 8] && /path/to/script

Это запустит скрипт в первую субботу месяца в 23:00.

Файловая система FreeBSD: иерархия и монтирование

Созданием разделов и файловых систем на них дело подготовки дискового пространства к использованию не заканчивается. Все созданные файловые системы нужно еще сделать доступными для FreeBSD. Для чего они должны быть смонтированы — то есть включены в единую иерархию каталогов и файлов, для обозначения которой также используется название файловой системы. Однако если раньше речь шла о физической организации данных, то теперь пора ознакомиться с ее логикой.
Логика файловой системы

Логически файловая система FreeBSD (как и любой Unix-системы) организована по древовидному принципу: в основании ее лежит корень (корневой каталог, обозначаемый символом / и именуемый также root-каталогом; последнее не должно путать с каталогом /root, который выполняет роль домашнего для суперпользователя). От корневого каталога, который можно уподобить скорее стволу дерева, отходят ветви — вложенные в него подкаталоги, и побеги — обычные файлы. Последних, правда, немного: в версиях FreeBSD 5-й ветки это пара профильных файлов — /.cshrc и /.profile, на самом деле дублирующие профильные файлы суперпользователя (в каталоге /root), некий энтропийный (/entropy) файл и файл с описанием авторских прав на систему /COPYRIGHT. Read the rest of this entry »

Быстрая передача файла через псевдо-HTTP

Когда есть необходимость передать файл с одной машины на другую,
а под рукой нет общедоступных ресурсов, можно сделать так:

    nc -l -p 8080 < file

или

    netcat -l 8080 < file

на клиенте достаточно в браузере набрать http://192.168.0.123:8080

Собственно, все. Впрочем, если получатель — блондинка, которая не знает команды File-Save, можно написать так:

   (echo -e "HTTP/1.1 200\nContent-Disposition: attachment;
   filename=gena_na.png\nContent-Type: application/octet-
   stream\nConnection: close\n"; cat vim_mrxvt.png ) | nc -vv -l -p 8080

Но это еще не все. Можно дать доступ к целой директории, написав простой HTTP сервер в одной строке:

   while true; do nc -vv -l -p 8080 -c '( read a b c; file=`echo $b | sed 's/[^a-z0-9.]//g'`;
   if [ a$file = "a" ]; then ( ls | (while read f; do echo "<a href=$f>$f</a><br>"; done) );
   else cat $PWD/$file; fi )'; sleep 1; done

Этот скрипт отдает все файлы, которые есть в текущем каталоге и не позволяет его сменить.
В случае, если запрашивается корневая директория, то управление передается
своеобразному mod_index — т.е. выводится список файлов-ссылок. В конце добавлена задержка в 1 сек для того, чтобы была возможность убить его нажатием Ctrl-C.

Несколько реально полезных bash-уловок

По мотивам http://www.shell-fu.org/ . Несколько интересных вещей:

  • Избавьтесь от повторения внутри команды. Вот, например, надо зарезервировать файл /usr/src/linux/arch/i385/boot/bzImage в /usr/src/linux/arch/i385/boot/bzImage.old (пример довольно-таки “учебный”). Даже с учётом автодополнения по Tab набор команды cp /usr/src/linux/arch/i385/boot/bzImage /usr/src/linux/arch/i385/boot/bzImage.old — достаточно нуден. Куда проще написать cp /usr/src/linux/arch/i385/boot/bzImage{,.old}. Соответственно, для возврата — cp /usr/src/linux/arch/i385/boot/bzImage{.old,}
  • Избавьтесь от повторения в цепочке команд. В набираемой команде можно использовать аргументы предыдущей: вместо первого просто написать !:1 , вместо второго — !:2 , вместо последнего — !:$ . А можно и “одним махом”: !* — сразу все. Обычно так и пишут не заморачиваясь, особенное, если аргумент всего один: !* ведь проще набрать, чем !:1
  • И ещё о повторах. Когда нужно несколько раз “прогрепить” несколько раз один файл по разным ключевым словам, имеет смысл писать команду grep “наоборот”: — тогда нажав стрелку вверх, можно сразу править ключевое слово.
  • Забытое sudo. Если набрали команду, а она “ругнулась” на права и вы вспомнили, что надо её выполнить через sudo, достаточно набрать sudo !! — команда подставится сама.
  • Несколько команд в одну строку. Можно написать несколко команд в одну строку. Причём, если разделить их && — следующая будет выполняться только в случае успешного завершения предыдущей. А если разделить ; — в любом случае.
  • Несколько вложенных каталогов. Для создания нескольких вложенных каталогов вовсе необязательно писать mkdir asd ; mkdir asd/ghjk ; mkdir asd/ghjk/qwer. Можно сразу написать mkdir -p asd/ghjk/qwer
  • Замечательные клавиши. Ctrl-U — вырезает (в “буфер обмена”) всё от курсора до начала строки, Ctrl-W — вырезает (в “буфер обмена”) одно слово влево, Ctrl-Y — вставляет из “буфера обмена”, Ctrl-A — перейти в начало строки, Ctrl-E — перейти в конец строки. “Буфер обмена” — свой собственный, ни с буфером обмена X, ни, тем более, с Windows через SSH ничего общего не имеет.
  • Генератор паролей в одну строку. Команда </dev/urandom tr -dc A-Za-z0-9_ | head -c8 ; echo создаст вполне надёжный пароль из 8 символов.

Список основных команд Linux. Все команды тестировались на Fedora и Ubuntu.

Команда Описание
apropos whatis Показать команды соответствующие строке. См. также threadsafe
man -t man | ps2pdf — > man.pdf Создать pdf версию страницы мануала (man)
which command Показать полный путь к файлу команды
time command Выполнить команду и отобразить время выполнения
time cat Запустить секундомер. Ctrl-d чтобы остановить его. См. также sw
nice info Запустить команду с низким приоритетом (”info” reader в данном случае)
renice 19 -p $$ Установить shell (скрипту) низкий приоритет. Используется для неинтерактивных задач.
Навигация по директориям
cd - Перейти в предыдущую директорию
cd Перейти в $HOME директорию
(cd dir && command) Перейти в директорию, выполнить комманду (command) и вернуться в текущую директорию
pushd . Положить текущую директорию в стек, чтобы позже вернуться к ней с помощью popd
alias l=’ls -l —color=auto’ Быстрое отображение содержимого директории
ls -lrt Список файлов по дате. См. также newest и find_mm_yyyy
ls /usr/bin | pr -T9 -W$COLUMNS Напечатать в 9 столбцов в ширину терминала
find -name ‘*.[ch]‘ | xargs grep -E ‘expr’ Искать ‘expr’ в текущей директории и в нижестоящих директориях. См. также findrepo
find -type f -print0 | xargs -r0 grep -F ‘example’ Поиск всех файлов по ‘example’ в текущей директории и ниже
find -maxdepth 1 -type f | xargs grep -F ‘example’ Поиск всех файлов по ‘example’ в текущей директории
find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done Обработать каждый элемент с несколькими командами (в цикле while)
find -type f ! -perm -444 Найти файлы, которые не являются видимыми для всех (полезно для веб сайта)
find -type d ! -perm -111 Найти директории не доступные для всех (полезно для web сайтов)
locate -r ‘file[^/]*\.txt’ Искать в кешированном индексе по именам.
look reference Быстрый поиск (сортированный) словаря по префиксу
grep —color reference /usr/share/dict/words Подсвечивание мест где регулярное выражение появляется в словаре
Архивирование и сжатие
gpg -c file Зашифровать файл
gpg file.gpg Расшифровать файл
tar -c dir/ | bzip2 > dir.tar.bz2 Заархивировать директорию (папку) dir/
bzip2 -dc dir.tar.bz2 | tar -x Разархивировать архив (используйте gzip вместо bzip2 для файлов tar.gz)
tar -c dir/ | gzip | gpg -c | ssh user@remote ‘dd of=dir.tar.gz.gpg’ Создать зашифрованный архив директории (папки) dir/ на удаленном компьютере
find dir/ -name ‘*.txt’ | tar -c —files-from=- | bzip2 > dir_txt.tar.bz2 Создать архив для папки dir/ и всех вложенных папок
find dir/ -name ‘*.txt’ | xargs cp -a —target-directory=dir_txt/ —parents Создать копию папки dir/ с вложенными папками
( tar -c /dir/to/copy ) | ( cd /where/to/ && tar -x -p ) Скопировать (с правами доступа) папку copy/ в папку /where/to/
( cd /dir/to/copy && tar -c . ) | ( cd /where/to/ && tar -x -p ) Скопировать (с правами доступа) содержимое папки copy/ в /where/to
( tar -c /dir/to/copy ) | ssh -C user@remote ‘cd /where/to/ && tar -x -p’ Скопировать (с правами доступа) папку copy/ на удаленный компьютер remote:/where/to
dd bs=1M if=/dev/sda | gzip | ssh user@remote ‘dd of=sda.gz’ Сделать резервную копию (сбекапить) жесткого диска и послать ее на удаленный компьютер
rsync (Эффективный сетевой копировщик файлов: Используйте опцию –dry-run для тестирования)
rsync -P rsync://rsync.server.com/path/to/file file Только отобразить различия. Делайте много раз чтобы проверить прошли ли нормально закачки
rsync —bwlimit=1000 fromfile tofile Скопировать локально с предельной скоростью. Это приятно для I/O
rsync -az -e ssh —delete ~/public_html/ remote.com:’~/public_html’ Зеркальный веб сайт (используется шифрование и дешифрование)
rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/ Синхронизировать текушую папку с папкой на удаленном компьютере
ssh (Secure SHell)
ssh $USER@$HOST command Запустить команду command на удаленном хосте $HOST от имени пользователя $USER
(команда по умолчанию = shell)
ssh -f -Y $USER@$HOSTNAME xeyes Запустить GUI команду на удаленном хосте $HOST от имени пользователя $USER
scp -p -r $USER@$HOST: file dir/ Скопировать папку dir/ с правами доступа в домашнию папку пользователя $USER на хосте $HOST
ssh -g -L 8080:localhost:80 root@$HOST Перенаправить соединения к $HOSTNAME:8080 наружу к $HOST:80
ssh -R 1434:imap:143 root@$HOST Перенаправить соединения от $HOST:1434 к внутр. imap:143
wget (многоцелевой инструмент для скачивания)
(cd cli && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html) Сохранить веб страницу (как она открывается локально) в текущую директорию
wget -c http://www.example.com/large.file Продолжить скачивание частично скаченного файла
wget -r -nd -np -l1 -A ‘*.jpg’ http://www.example.com/ Скачать множество файлов в текущую директорию
wget ftp://remote/file[1-9].iso/ Ftp непосредственная поддержка globbing
wget -q -O- http://www.pixelbeat.org/timeline.html | grep ‘a href’ | head Отображать вывод напрямую (на экран)
echo ‘wget url’ | at 01:00 Скачать url в 01:00 в текущую директорию
wget —limit-rate=20k url Сделать закачку с уменьшенной скоростью (ограничить скорость до 20 КB/s в этом примере)
wget -nv —spider —force-html -i bookmarks.html Проверить ссылки в файле
wget —mirror http://www.example.com/ Оперативно обновлять локальную копию сайта (удобно использовать с cron)
Сетевые команды (Обратите внимание, что команды ifconfig, route, mii-tool, nslookup устарели)
ethtool eth0 Отобразить статус сетевого устройства (интерфейса) eth0
ethtool —change eth0 autoneg off speed 100 duplex full Вручную установить скорость сетевого интерфейса (устройства)
iwconfig eth1 Отобразить статус беспроводного интерфейса (устройства) eth1
iwconfig eth1 rate 1Mb/s fixed Вручную установить скорость беспроводного интерфейса (устройства)
iwlist scan Список беспроводных сетей в радиусе действия
ip link show Список сетевых интерфейсов (устройств)
ip link set dev eth0 name wan Переименовать интерфейс (устройство) eth0 в wan
ip link set dev eth0 up Включить интерфейс eth0 (чтобы выключить — down)
ip addr show Список ip адресов интерфейсов
ip addr add 1.2.3.4/24 brd + dev eth0 Добавить (или удалить) ip адрес и маску (255.255.255.0)
ip route show Вывести таблицу маршрутизации
ip route add default via 1.2.3.254 Установить 1.2.3.254 в качестве шлюза по умолчанию
tc qdisc add dev lo root handle 1:0 netem delay 20msec Добавить 20мс латентность к устройству loopback (для тестирования)
tc qdisc del dev lo root Убрать латентность добавленную выше
host pixelbeat.org Поиск ДНС ip адреса по имени хоста или наоборот
hostname -i Поиск локального ip адреса (идентично host ‘hostname’)
whois pixelbeat.org Поиск whois информации по имени хоста или ip адресу
netstat -tupl Список интернет сервисов в системе
netstat -tup Список активных соединений к системе (от системы)
Сетевые команды связанные с windows (Обратите внимание, что samba — это пакет который предоставляет всю windows специфичную поддержку сети)
smbtree Найти windows компьютеры в сети. См. также findsmb
nmblookup -A 1.2.3.4 Найти windows (netbios) имя, ассоциируемое с ip адресом
smbclient -L windows_box Список shares на windows компьютере или samba сервере
mount -t smbfs -o fmask=666,guest //windows_box/share /mnt/share Смонтировать windows share (папку с открытым доступом)
echo ‘message’ | smbclient -M windows_box Послать popup сообщение на windows комьютер (отключено по умолчанию в XP sp2)
Манипуляции с текстом (Обратите внимание, sed использует stdin и stdout, так что если Вы хотите редактировать файлы, добавляйте <oldfile >newfile)
sed ‘s/string1/string2/g’ Заменить строку string1 строкой string2
sed ‘s/\(.*\)1/\12/g’ Изменить строку anystring1 на anystring2
sed ‘/ *#/d; /^ *$/d’ Убрать комментарии и пустые строки
sed ‘:a; /\\$/N; s/\\\n//; ta’ Соединить строки (линии) с предшествующим \
sed ‘s/[ \t]*$//’ Удалить предшествующие пробелы с строк
sed ‘s/\([\\`\\"$\\\\]\)/\\\1/g’ Заескейпить активные метасимволы оболочки двумя ковычками
seq 10 | sed «s/^/      /; s/ *\(.\{7,\}\)/\1/» Выровнять числа по правой границе
sed -n ’1000p;1000q Напечатать 1000-ную строку
sed -n ’10,20p;20q Напечатать строки с 10 по 20-ую
sed -n ‘s/.*<title>\(.*\)<\/title>.*/\1/ip;T;q Получить title из HTML страницы
sort -t. -k1,1n -k2,2n -k3,3n -k4,4n Отсортировать IPV4 ip адреса
echo ‘Test’ | tr ‘[:lower:]‘ ‘[:upper:]‘ Перевести из одного регистра в другой
tr -dc ‘[:print:]‘ < /dev/urandom Отфильтровать не печатаемые символы
history | wc -l Посчитать число строк
Операции с множествами (Обратите внимание, что Вы можете export LANG=C для скорости. Это также полагает отсутствие линий дупликатов в файле)
sort file1 file2 | uniq Объединение неотсортированных файлов
sort file1 file2 | uniq -d Пересечение неотсортированных файлов
sort file1 file1 file2 | uniq -u Разность неотсортированных файлов
sort file1 file2 | uniq -u Симметрическая разность неотсортированных файлов
join -a1 -a2 file1 file2 Объединение отсортированных файлов
join file1 file2 Пересечение отсортированных файлов
join -v2 file1 file2 Разность отсортированных файлов
join -v1 -v2 file1 file2 Симметрическая разность отсортированных файлов
Математические операции
echo ‘(1 + sqrt(5))/2′ | bc -l Простая математика (Вычисление числа φ). См. также bc
echo ‘pad=20; min=64; (100*10^6)/((pad+min)*8)’ | bc Более сложная (целая). Этот пример показывает максимум FastE packet rate
echo ‘pad=20; min=64; print (100E6)/((pad+min)*8)’ | python Питон занимается математическими вычислениями
echo ‘pad=20; plot [64:1518] (100*10**6)/((pad+x)*8)’ | gnuplot -persist Напечатать FastE packet rate против packet size
echo ‘obase=16; ibase=10; 64206′ | bc Конвертация систем счисления (десятичную в шестнадцатиричную)
echo $((0x2dec)) Конвертация систем счисления (шестнадцатиричную в десятичную)
((арифметическое расширение shell-а))
units -t ’100m/9.69s‘ ‘miles/hour’ Unit конвертация (метрической системы в имперскую)
units -t ’500GB’ ‘GiB’ Unit конвертация (SI в IEC префиксы)
units -t ’1 googol’ Поиск определения
seq 100 | (tr ‘\n’ +; echo 0) | bc Добавить столбец чисел. См. также add и funcpy
Календарь
cal -3 Отобразить календарь
cal 9 1752 Отобразить календарь для конкретного месяца года
date -d fri Какая дата у текущей пятницы. См. также day
[ $(date -d "tomorrow" +%d) = "01" ] || exit Завершить выполнение скрипта, если только сейчас не последний день месяца
date —date=’25 Dec’ +%A Какого числа будет рождество в текущем году
date —date=’@2147483647′ Перевести секунды прошедшие с epoch (1970-01-01 UTC) в дату
TZ=’:America/Los_Angeles’ date Сколько времени сейчас на Западном побережье США (используйте tzselect чтобы найти TZ)
echo «mail -s ‘get the train’ P@draigBrady.com < /dev/null» | at 17:45 Напоминать по Email
echo «DISPLAY=$DISPLAY xmessage cooker» | at «NOW + 30 minutes» Напоминать в Popup окне
Locales (локализация)
printf «%’d\n» 1234 Напечатать четырехзначное число сгруппированное соответственно локали
BLOCK_SIZE=\’1 ls -l Сделать чтобы ls группировала тысячи соответственно локали
echo «I live in `locale territory`» Получить информацию из базы данных локали
LANG=en_IE.utf8 locale int_prefix Искать информацию о локали для конкретной страны См. также ccodes
locale | cut -d= -f1 | xargs locale -kc | less Список полей, доступных в базе данных локали
Перекодирование (команды iconv, dos2unix, unix2dos устарели)
recode -l | less Отобразить доступные переходы (по 1 алиасу на каждой строке)
recode windows-1252.. file_to_change.txt Перевести Windows “ansi” в локальную (текущую) кодировку (auto делает CRFL перевод)
recode utf-8/CRLF.. file_to_change.txt Перевести windows utf8 в локальную (текущую) кодирувку
recode iso-8859-15..utf8 file_to_change.txt Перевести из кодировки latin9 (западная европейская) в utf8
recode ../b64 < file.txt > file.b64 Кодирование base64
recode /qp.. < file.txt > file.qp Раскодирование с кавычками
recode ..HTML < file.txt > file.html Перевести text в HTML
recode -lf windows-1252 | grep euro Поиск в таблице символов
echo -n 0×80 | recode latin-9/x1..dump Показать символ в кодировке latin9 по коду
echo -n 0x20AC | recode ucs-2/x2..latin-9/x Показать latin-9 encoding
echo -n 0x20AC | recode ucs-2/x2..utf-8/x Показать utf-8 encoding
CDs (операции с CD дисками)
gzip < /dev/cdrom > cdrom.iso.gz Сохранить копию CD с данными
mkisofs -V LABEL -r dir | gzip > cdrom.iso.gz Создать образ CD диска из содержимого директории
mount -o loop cdrom.iso /mnt/dir Смонтировать CD образ на /mnt/dir (только для чтения)
cdrecord -v dev=/dev/cdrom blank=fast Очистить CDRW
gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom - Записать CD образ (используйте dev=ATAPI -scanbus для выбора устройства записи)
cdparanoia -B Сохранить аудио треки с CD в wav файлы (сохранятся в текущую папку)
cdrecord -v dev=/dev/cdrom -audio *.wav Создать аудио диск (audio CD) из всех wav файлов,
находящихся в текущей директории (см. также cdrdao)
oggenc —tracknum=’track’ track.cdda.wav -o ‘track.ogg’ Создать ogg файл из wav файла
Дисковое пространство (См. также FSlint)
ls -lSr Список файлов, отсортированных по размеру (файл с наибольшим размером — последний)
du -s * | sort -k1,1rn | head Показать пользователей в текущей папке с наибольшим объемом используемых данных.
См. также dutop
df -h Показать свободное место на смонтированных файловых системах
df -i Показать свободные индексные дескрипторы на смонтированных файловых системах
fdisk -l Показать размеры разделов дисков и типы (запускается от root-а)
rpm -q -a —qf ‘%10{SIZE}\t%{NAME}\n’ | sort -k1,1n Список всех пакетов с размером дистрибутивов (размер — в Байтах)
dpkg-query -W -f=’${Installed-Size;10}\t${Package}\n’ | sort -k1,1n Список всех пакетов с размерами установки (размер — в килобайтах) для debian дистрибутивов
dd bs=1 seek=2TB if=/dev/null of=ext3.test Создать большой тестовый файл. См. также truncate
Мониторинг/отладка
tail -f /var/log/messages Мониторинг сообщений в log файле
strace -c ls >/dev/null Сумма/профиль системных вызовов, сделанных командой
strace -f -e open ls >/dev/null Список системных вызовов, сделанных командой
ltrace -f -e getenv ls >/dev/null Список библиотечных вызовов, сделанных командой
lsof -p $$ Список путей, которые открывал процесс
lsof ~ Список процессов, которые имеют открытые пути
tcpdump not port 22 Отобразить сетевой (кроме ssh) траффик. См. также tcpdump_not_me
ps -e -o pid,args —forest Иерархический список процессов
ps -e -o pcpu,cpu,nice,state,cputime,args —sort pcpu | sed ‘/^ 0.0 /d’ Список процессов с % использования процессора
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS Список процессов с используемой ими памятью (См. также ps_mem.py)
ps -C firefox-bin -L -o pid,tid,pcpu,state Список всех потоков для конкретного процесса
ps -p 1,2 Список информации о процессах с конкретными IDs (идентификаторами)
last reboot Показать историю ребутов системы
free -m Показать количество оставшейся оперативной памяти (-m отображает в мегабайтах)
watch -n.1 ‘cat /proc/interrupts’ Наблюдать последовательно за изменяющимися данными
Информация о системе (см. также sysinfo) (’#’ означает, что для запуска нужны права root-а)
uname -a Показать версию ядра и системную архитектуру
head -n1 /etc/issue Показать название и версию дистрибутива (операционной системы)
cat /proc/partitions Показать все разделы, зарегистрированные в системе
grep MemTotal /proc/meminfo Показать всю оперативную память, которую видит система
grep «model name» /proc/cpuinfo Показать информацию о процессоре(ах) (CPU)
lspci -tv Показать информацию о шине PCI
lsusb -tv Показать информацию о USB
mount | column -t Список смонтированных файловых систем в системе (херархический вывод)
# dmidecode -q | less Отобразить информацию о SMBIOS/DMI
# smartctl -A /dev/sda | grep Power_On_Hours Какой промежуток времени этот диск (система) был включен (работал)
# hdparm -i /dev/sda Показать информацию о диске sda
# hdparm -tT /dev/sda Протестировать скорость чтения на диске sda
# badblocks -s /dev/sda Протестировать на нечитаемые блоки диск sda
Интерактивность (см. также горячие клавиши linux)
readline Редактор строки, используемый bash, python, gnuplot, …
screen Виртуальные терминалы с возможностями открепления, …
mc Мощный файл менеджер, которые может просматривать rpm, tar, ftp, ssh, …
gnuplot Интерактивная (скриптовая) графика
links Текстовый веб браузер
Разное
alias hd=’od -Ax -tx1z -v’ Ручной 16-ричный дамп (пример использования: hd /proc/self/cmdline | less)
alias realpath=’readlink -f’ Канонический путь (пример использования: realpath ~/../$USER)
set | grep $USER Поиск в текущем environment (окружении)
touch -c -t 0304050607 file Установить дату для файла (YYMMDDhhmm)
python -m SimpleHTTPServer Отобразить дерево текущего каталога по адресу http://$HOSTNAME:8000/