Оглавление

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

less

Команда less показывает в stdout текстовый документ. Присутствует в большинстве дистрибутивов.

# less unixtoolbox.xhtml

Основные команды управления (^N - Ctrl + N):

vi

Текстовый редактор Vi присутствует в любой Unix-подобной системе, поэтому будет нелишним, знать его основные команды. В VI, есть два режима работы, командный и режим вставки. В коммандный режим можно перейти, нажав [ESC], в режим вставки с помощью i. Для получения помощи, используйте : help.
Редактолры nano и pico, не менее распространены, и попроще в использовании (прим. автора)

Выход

Поиск и перемещение

Удаление текста

mail

Mail, это базовое приложение для отправки и получения электронной почты. Для отправки почты, просто наберите "mail user@domain". Первая строка, это "Тема" (subject), далее идет содержимое письма. Закончить набор и отправить письмо можно, введя на новой строке символ "."(точка). Пример:

# mail c@cb.vu
Subject: Your text is full of typos
"For a moment, nothing happened. Then, after a second or so, 
nothing continued to happen."
.
EOT
#
Можно использовать конвейер( pipe ), символ "|":
# echo "This is the mail body" | mail c@cb.vu
Так-же, это простой способ проверить почтовый сервер.

Программа tar, для создания архивов

Команда tar, предназначена для создания архивов (с файлами или директориями). Имейте в виду, tar, это не сжатый архив, сжатые архивы имеют расширения .tgz или .tar.gz (zip) или .tbz (bzip2). Не используйте абсолютный путь при создании архива, возможно вы захотите распаковать его в другое место. Примеры использования:

Примеры создания архивов:

# cd /
# tar -cf home.tar home/        # Заархивировать целиком, директорию /home (ключ -c, для создания )
# tar -czf home.tgz home/       # То-же, но с zip компрессией
# tar -cjf home.tbz home/       # То-же, но с bzip2 компрессией

Включить в архив одну директорию(или несколько), из дерева, но сохранить относительные пути. Например, заархивируем директории /usr/local/etc и /usr/local/www, директория local/ должна быть первой.

# tar -C /usr -czf local.tgz local/etc local/www
# tar -C /usr -xzf local.tgz    # Распаковать архив директорию local в дерево /usr
# cd /usr; tar -xzf local.tgz   # То-же, что выше

Распаковка

# tar -tzf home.tgz             # Просмотр содержимого архива без его распаковки (листинг)
# tar -xf home.tar              # Распаковать архив в текущую папку(ключ "x" для распаковки)
# tar -xzf home.tgz             # То-же для архива с zip компрессией
# tar -xjf home.tbz             # То-же для архива с bzip2 компрессией
# tar -xjf home.tbz home/colin/file.txt    # Распаковать один файл

Дополнительно

# tar c dir/ | gzip | ssh user@remote 'dd of=dir.tgz' # Заархивировать dir/ и сохранить удаленно
# tar cvf - `find . -print` > backup.tar              # Заархивировать текущую директорию
# tar -cf - -C /etc . | tar xpf - -C /backup/etc      # Копировать директории
# tar -cf - -C /etc . | ssh user@remote tar xpf - -C /backup/etc      # Удаленное копирование
# tar -czf home.tgz --exclude '*.o' --exclude 'tmp/' home/

dd

Программа dd (disk dump), используется для копирования(конвертирования) дисков, разделов, и прочих операций копирования. Типичный пример:

# dd if=<source> of=<target> bs=<byte size> conv=<conversion>

Важные опции для conv:

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

Резервное копирование и восстановление

# dd if=/dev/hda of=/dev/hdc bs=16065b                # Копировать с диска на диск с таким-же размером
# dd if=/dev/sda7 of=/home/root.img bs=4096 conv=notrunc,noerror # Резервное копирование /
# dd if=/home/root.img of=/dev/sda7 bs=4096 conv=notrunc,noerror # Восстановление /
# dd bs=1M if=/dev/ad4s3e | gzip -c > ad4s3e.gz                  # Сделать резервную копию и заархивировать в Zip
# gunzip -dc ad4s3e.gz | dd of=/dev/ad0s3e bs=1M                 # Восстановить из архива
# dd bs=1M if=/dev/ad4s3e | gzip | ssh eedcoba@fry 'dd of=ad4s3e.gz' # Что и выше, удаленно
# gunzip -dc ad4s3e.gz | ssh eedcoba@host 'dd of=/dev/ad0s3e bs=1M'
# dd if=/dev/ad0 of=/dev/ad2 skip=1 seek=1 bs=4k conv=noerror    # Пропустить MBR(Master Boot Record)
    # Необходимо если диск назначения (ad2) меньше.

Лечение

dd считывает раздел поблочно, если на диске предположительно есть проблемы, нужно использовать опцию conv=sync,noerror, dd будет пропускать битые блоки и записывать нули на диск назначения. Поэтому важно, установить размер блока, равным, или меньшим, чем размер блока на диске. Вполне подходящим будет размер блока в 1 килобайт, установить размер на входе и выходе можно опцией bs=1k. Если на диске имеются сбойные сектора, но основные данные нужно сохранить с данного раздела, можно создать файл образа, смонтировать образ и копировать данные на новый диск. С установленной опцией noerror, dd пропустит поврежденные блоки, записав на их место нули, при этом, потеряны будут, только данные, содержавшиеся в сбойных секторах диска.
# dd if=/dev/hda of=/dev/null bs=1m                   # Проверить на наличие бэд блоков
# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc | gzip | ssh \ # Отправить на удаленный хост
root@fry 'dd of=hda1.gz bs=1k'
# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc of=hda1.img    # Сохранить в образ
# mount -o loop /hda1.img /mnt                        # Создание и монтирование образа
# rsync -ax /mnt/ /newdisk/                           # Копировать на новый диск
# dd if=/dev/hda of=/dev/hda                          # Обновить 
  # Обновление диска, безопасная операция, но диск при этом должен быть размонтирован.

Удаление

# dd if=/dev/zero of=/dev/hdc                         # Удалить все данные с диска(забивает нулями)
# dd if=/dev/urandom of=/dev/hdc                      # Удалить все данные с диска (более предпочтительный вариант)
# kill -USR1 PID                                      # Посмотреть текущее состояние dd (Linux)
# kill -INFO PID                                      # Посмотреть текущее состояние dd (FreeBSD)

Трюки с MBR

MBR содержит код загрузчика и таблицу разделов. Первый 466 байт отводятся под загрузчик, 466-512 по таблицу размещения разделов.
# dd if=/dev/sda of=/mbr_sda.bak bs=512 count=1       # Сделать резервную копию MBR
# dd if=/dev/zero of=/dev/sda bs=512 count=1          # Удалить MBR и таблицу размещения разделов
# dd if=/mbr_sda.bak of=/dev/sda bs=512 count=1       # Восстановить MBR целиком
# dd if=/mbr_sda.bak of=/dev/sda bs=446 count=1       # Восстановить только загрузчик
# dd if=/mbr_sda.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # Восстановить таблицу размещения разделов

Screen

Screen имеет две основные функциональности:

Небольшие примеры:

Запустить экран можно командой:
# screen

Со screen сессией удобно использовать программы с длинным листингом ( например Top).

# top

Теперь отключим терминал с помощью Ctrl-a Ctrl-d. Переподключиться можно:

# screen -R -D

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

# screen -x

Подключиться к screen в многоэкранном режиме. Консоль могут использовать несколько пользователей, полезно для совместной работы.

Команды screen

Все команды screen начинаются с Ctrl-a.

Сессия терминала прерывается, когда будет закрыта работающая программа и сделан выход с терминала.

find

Важные опции:
# find . -type f ! -perm -444        # Найти файлы с правами 0444
# find . -type d ! -perm -111        # Найти директории с правами 0111
# find /home/user/ -cmin 10 -print   # Файлы созданные или модифицированные за последние 10 минут.
# find . -name '*.[ch]' | xargs grep -E 'expr' # Найти 'expr' в текущей директории.
# find / -name "*.core" | xargs rm   # Найти и удалить аварийные дампы(так-же можно искать core.*).
# find / -name "*.core" -print -exec rm {} \;  # Другой сиснтаксис
      # Найти все графические файлы и создать архив, iname -регистронезависимо. -r -добавить
# find . \( -iname "*.png" -o -iname "*.jpg" \) -print -exec tar -rf images.tar {} \;
# find . -type f -name "*.txt" ! -name README.txt -print  # Исключая файлы README.txt
# find /var/ -size +10M -exec ls -lh {} \;     # Найти файлы больше 10 MB
# find /var/ -size +10M -ls           # То-же, что и выше
# find . -size +10M -size -50M -print
# find /usr/ports/ -name work -type d -print -exec rm -rf {} \;  # Очистить порты
      # Найти файлы, принадлежащие определенному пользователю и с определенными правами
# find / -type f -user root -perm -4000 -exec ls -l {} \; 

Будьте осторожны при использовании XARG или EXEC, они могут возвращать неверный результат если имена файлов или директорий содержат пробелы. Используйте "-print0 | xargs -0" вместо "| xargs". Опция -print0 должна быть последней. Мини урок по команде find.

# find . -type f | xargs ls -l       # Не будет работать при наличии пробелов в именах
# find . -type f -print0 | xargs -0 ls -l  # Будет работать нормально с пробелами
# find . -type f -exec ls -l '{}' \; # Или используйте с -exec, ковычки '{}'

Разное

# which command                      # Показывает полный путь к файлу команды
# time command                       # Показывает время выполнения команды
# time cat                           # Использовать команду time как секундомер. Ctrl-c для остановки
# set | grep $USER                   # Просмотр текущего окружения
# cal                                # Показать календарь на текущий месяц
# date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
# date 10022155                      # Установить дату и время
# whatis grep                        # Показать короткую справку по команде
# whereis java                       # Найти путь и стандартную директорию для "слова"
# setenv varname value               # Установить переменную окружения varname в значение value (csh/tcsh)
# export varname="value"             # Установить переменную окружения varname в значение value (sh/ksh/bash)
# pwd                                # Печать текущей директории
# mkdir -p /path/to/dir              # Создать директорию, включая родительскую, не выдавать ошибку если такая существует.
# mkdir -p project/{bin,src,obj,doc/{html,man,pdf},debug/some/more/dirs}
# rmdir /path/to/dir                 # Удалить директорию.
# rm -rf /path/to/dir                # Удалить директорию с содержимым (принудительно).
# cp -la /dir1 /dir2                 # Вместо копирования отобразить одну директорию в другую с помощью жесткой ссылки
# cp -lpR /dir1 /dir2                # То-же во FreeBSD
# cp unixtoolbox.xhtml{,.bak}        # Быстрый вариант скопировать файл с новым расширением
# mv /dir1 /dir2                     # Переименовать директорию
# ls -1                              # Лстинг файлов, по одному в строке
# history | tail -50                 # Показать последние 50 использовавшихся команд

Проверить хэш файла с помощью OpenSSL. Неплохая альтернатива программам md5sum и sha1sum.

# openssl md5 file.tar.gz            # Сгенерировать md5 файла
# openssl sha1 file.tar.gz           # Сгенерировать sha1 файла
# openssl rmd160 file.tar.gz         # Сгенерировать RIPEMD-160 файла

Оглавление