Секреты командной строки
Материал из Gentoo Linux Wiki
- Вернуться в раздел советов
На странице представлены различные трюки, которые вы можете применять в консоли Linux.
Содержание |
[править] Общие команды
- поиск команды Linux, ее описания и номера секции man страниц
apropos word
или
man -k word
- закодировать файл file с помощью GnuPG
gpg -c file
- раскодировать файл file
gpg file.gpg
- быстрый поиск по словарю слов, начинающихся с word
look word
- подсветить слово word в файле /somefile
grep --color word /somefile
- запустить command с низким приоритетом
nice command
- назначить низший приоритет текущему шеллу (и всем потомкам). Может быть полезно, если вашу систему сильно замедляет установка нового пакета (emerge). Кстати, для автоматического понижения приоритета emerge используется переменная PORTAGE_NICENESS в файле /etc/make.conf
renice 19 -p $$
- посмотреть код завершения предыдущей
echo $?
- скачать список новых страничек с нашего сайта в 01:00 в текущую директорию
echo "wget http://ru.gentoo-wiki.com/Special:Newpages" | at 01:00
- в 17:45 послать пустое письмо с заголовком 'got the r00t?'на bugs@microsoft.com
echo "mail -s 'got the r00t?' bugs@microsoft.com < /dev/null" | at 17:45
- напечатать 1234 в соответствии с настройками локали (в России обычно 1.234)
printf "%'d\n" 1234
- запускать просмотр прерываний каждую секунду
watch -n1 "cat /proc/interrupts"
- посмотреть, сколько времени занимает выполнение команды
time command
- удобный алиас для вывода дампа
alias hd='od -Ax -tx1z -v'
- полный путь к команде command
which command
- вывести в 9 колонок по ширине терминала
ls | pr -T9 -W$COLUMNS
- установить время изменения для файла file (в формате YYMMDDhhmm)
touch -c -t 0304050607 file
- показать иерархию запущенных процессов
pstree -p
- показать процессы, использующие файл /dir/file (чаще всего использую нечто вроде 'lsof /mnt/cdrom'). Не забудьте сделать 'emerge -n lsof'
lsof /dir/file
[править] Ввод-вывод
- объединить stderr и stdout (вернее сказать перенаправить stderr в stdout)
gcc file.c 2>&1 | less
- Перенаправить stderr в файл errors.log а stdout в файл compile.log для дальнейшего анализа
gcc file.c 2>errors.log 1>compile.log
- Если нужно запретить вывод потока (например убрать в скрипте сообщения об ошибках) то достаточно перенаправить поток на устройство /dev/null, тогда сообщения уйдут в никуда:
rm -r /var/tmp/portage 2>&1 >/dev/null или rm -r /var/tmp/portage &> /dev/null
- Порой нужно обьединить выходной поток сразу нескольких комманд, а поток одной из них отключить, тогда группу нужно объединить в скобки:
( cat /etc/gentoo-release ; cat /etc/passwd >/dev/null; cat /etc/group ) |less
[править] Навигация по директориям.
- вернуться в предыдущую директорию (не путать с 'cd ..')
cd -
- вернуться в домашнюю директорию
cd
- перейти в директорию dir, запустить command и автоматически вернуться назад
(cd dir; command)
- добавить текущую директорию в стек, чтобы потом можно было сделать popd и вернуться к ней
pushd .
[править] Дисковое пространство
- показать список файлов с информацией о каждом файле (-l), отсортировав список по убыванию размера (-S) и перевернуть список (-r). Получим сортировку по возрастанию.
ls -lSr
- показать, сколько места на диске занимает файл file и директория dir
du -sh file dir
- показать свободное место на примонтированных ресурсах
df -h
- то же самое но в инодах
df -i
- показать геометрию размещения разделов жесткого диска (нужны права root)
fdisk -l
[править] Работа с CD
- создать iso-образ диска и заархивировать его
dd bs=1M if=/dev/cdrom | gzip > cdrom.iso.gz
- создать iso-образ из директории dir
mkisofs -r dir | gzip > cdrom.iso.gz
- смонтировать cdrom.iso в /mnt/dir (для просмотра и правки)
mount -o loop cdrom.iso /mnt/dir
- записать архивированный образ на диск
gzip -dc cdrom.iso.gz | cdrecord dev=0,0,0 -
- рипнуть дорожки с Audio-CD в текущую директорию (в формате .wav)
cdparanoia -B
- создать Audio-CD из всех .wav файлов в текущей директории
cdrecord dev=0,0,0 -audio *.wav
- конвертировать файл track.cdda.wav формат .ogg
oggenc --tracknum="track" track.cdda.wav -o "track.ogg"
[править] Работа с архивами
- создать архив директории dir
tar c dir/ | bzip2 > dir.tar.bz2
tar -cjf dir.tar.bz2 dir
- извлечь архив в директорию /to/dir (без '-C /to/dir' в текущую директорию)
bzip2 -dc dir.tar.bz2 | tar x -С /to/dir
tar -xjf dir.tar.bz2 -C /to/dir
- создать архив всех .png файлов в директории dir/
find dir/ -name "*.png" | xargs tar rf dir.tar; bzip2 dir.tar
- скопировать (с сохранением прав доступа!) директорию /dir/to/copy/ в /where/to/
( tar cf - /dir/to/copy ) | ( cd /where/to/ && tar xf - )
- скопировать (с сохранением прав доступа!) содержимое директории /dir/to/copy в /where/to/
( cd /dir/to/copy && tar cf - . ) | ( cd /where/to/ && tar xf - )
- скопировать (с сохранением прав доступа!) директорию /dir/to/copy/ в директорию /where/to/ на удаленной машине
( tar cf - /dir/to/copy ) | gzip | ssh user@remote 'cd /where/to/ && gzip -dc | tar xf -'
- создать и сохранить бэкап жесткого диска на удаленной машине
dd bs=1M if=/dev/hda | gzip | ssh user@remote 'dd of=hda.gz'
[править] Работа с файлами
- удобный листинг по команде l
alias l='ls -l --color=auto'
- вывести листинг с упорядочиванием по дате
ls -lrt
- показать в папке dir файлы модифицированные раньше, чем 2 дня назад
find dir -mtime +2
- удаляем в папке dir файлы старше 1 часа
find dir -type f -mmin +60 -exec rm -f {} \;
- удаляем в папке dir файлы старше 10 дней
find dir -type f -mtime +10 -exec rm -f {} \;
- найти в текущей директории (и ниже) .c и .h файлы содержащие строку "search string"
find -name "*.[ch]" | xargs grep -E "search string"
- искать строку "search string" только в обычных файлах
find -type f | xargs grep -E "search string"
- искать строку "search string" только в текущей директории (не спускаться ниже)
find -type f -maxdepth 1 | xargs grep -E "search string"
- в текущей директории найти все файлы с расширением sql содержащие USER1 и заменить в них USER1 на USER2
tmp="/tmp/$RANDOM$$.tmp"; f="USER1"; r="USER2";
find . -name '*.sql' -exec grep -l "$f" {} \; |
xargs --replace="{}" bash -c "( sed 's/$f/$r/g' < {} > $tmp && cat $tmp > {} && rm -f $tmp )"
- найти файл в базе данных программы slocate. Замечание: данное регулярное выражение эквивалентно маске *file*.txt
locate -r 'file[^/]*\.txt'
[править] Работа с файловой системой
- отформатировать флоппи-диск с FAT
mkdosfs -c -f 16 -n "название тома" /dev/fd0 или mkfs -t fat16 /dev/fd0
- "правильная" кодировка и права файлов для сменных носителей (floppy, CD, flash)
необходимо прописать в /etc/fstab!!!
для CDROM
/dev/cdrom /mnt/cdrom iso9660 ro,nosuid,noauto,exec,user,nodev 0 0
для "дискетки"
/dev/fd0 /mnt/floppy vfat iocharset=koi8-r,sync,nosuid,codepage=866,user,--,noauto,nodev,unhide 0 0
для раздела Windows
/dev/hda1 /mnt/win vfat user,exec,umask=0,codepage=866,iocharset=koi8-r 0 0
для "флешки"
/dev/sda1 /mnt/flash vfat user,exec,umask=0,async,codepage=866,iocharset=koi8-r 0 0
вышенаписанное справедливо для локали koi8-r, ваша может отличаться (см. locale), в этом случае все "koi8-r" необходимо исправить на свои, и помните, что это, лишь, пример
[править] Работа с календарем
- вывести на экран календарь на текущий, предыдущий и следующий месяцы
cal -3
- на какой день недели выпал в этом году день рождения Linux?
date --date='25 Aug' +%A
- конвертировать в дату (в соответствии с локалью) - 130204800 секунд, прошедшие с начала эпохи Unix
date --date '1970-01-01 UTC 130204800 seconds'
- Сколько сейчас времени на западном побережьи США (используйте tzselect чтобы узнать параметр для TZ)
TZ="America/Los_Angeles" date
[править] Работа с сетью
(Предварительно сделать emerge на net-tools, sys-apps/iproute2, net-dns/bind-tools)
- показать сетевые интерфейсы
ip link show
- показать статус сетевых интерфейсов
ethtool interface или /sbin/ifconfig
- переименовать eth0 в wan
ip link set dev eth0 name wan
- добавить ip 1.2.3.4 с маской 255.255.255.0 на eth0
ip addr add 1.2.3.4/24 brd + dev eth0
- удалить ip 1.2.3.4 c маской 255.255.255.0 на eth0
ip addr del 1.2.3.4/24 brd + dev eth0
- поднять интерфейс
ip link set dev interface up
- опустить интерфейс
ip link set dev interface down
- сделать шлюзом по умолчанию 1.2.3.254
ip route add default via 1.2.3.254
- показать ip адрес для name
host name
- показать прослушиваемые порты в системе (и кто их слушает)
netstat -lp --inet
- показать активные соединения
netstat -p --inet
[править] Математика
- простое вычисление
echo "(321-123)/123" | bc -l
- простое целочисленное вычисление с использование bash
echo "$(( (51+123)/2 ))"
- использование python для научных вычислений
python -c "print (10E3-123)/123"
- приведение систем счисления (в данном случае, десятичной к шестнадцатеричной)
echo "obase=16;ibase=10;123" | bc
- Более сложное вычисление - максимальная скорость передачи (в пакетах в секунду) в Fast Ethernet сети (100Mb)
echo "framing=20; minsize=64; (100*10^6)/((framing+minsize)*8)" | bc
- А здесь мы строим график зависимости скорости передачи от размера пакета всё в той же 100-мегабитной сети.
echo "framing=20; plot [64:1518] (100*10**6)/((framing+x)*8)" | gnuplot -persist
[править] Разное
- показать последние доступные версии ядра Linux (предварительно сделайте emerge -n netkit-fingerd)
finger @kernel.org
- Для того, чтобы повторить команду, которую уже набирали, поставьте восклицательный знак в начале командной строки и начало вводимой команды.
Пример:
tar czf files.tgz file1 file2 file3 file4
echo "дополнительная строка" >> file1
!ta<Enter>
Будет выполнена последняя команда, которая начиналась со слова "ta", то есть, в данном случае -- архив снова затарится.
