Секреты командной строки

Материал из 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", то есть, в данном случае -- архив снова затарится.

Личные инструменты