Команда less
показывает в stdout текстовый документ. Присутствует в большинстве дистрибутивов.
# less unixtoolbox.xhtml
Основные команды управления (^N - Ctrl + N):
Текстовый редактор Vi присутствует в любой Unix-подобной системе, поэтому будет нелишним, знать его основные команды. В VI, есть два режима работы, командный и режим вставки. В коммандный режим можно перейти, нажав [ESC], в режим вставки с помощью i. Для получения помощи, используйте : help
.
Редактолры nano
и pico
, не менее распространены, и попроще в использовании (прим. автора)
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, это не сжатый архив, сжатые архивы имеют расширения .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
(disk dump), используется для копирования(конвертирования) дисков, разделов, и прочих операций копирования.
Типичный пример:
# dd if=<source> of=<target> bs=<byte size> conv=<conversion>
Важные опции для conv:
notrunc
не обрезать нули в файле на выходе, записывая их как нулиnoerror
продолжать после ошибок чтенияsync
дополнять каждый входящий блок нулями до размера ibs-sizeРазмер входных данных по-умолчанию 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)
# 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 сессией удобно использовать программы с длинным листингом ( например Top).
# top
Теперь отключим терминал с помощью Ctrl-a Ctrl-d. Переподключиться можно:
# screen -R -D
В частности это означает: если сессия запущена, переподключаться, если нужно переподключиться удаленно, сначала выйти из систему, если не запущена, запустить и уведомить пользователя. Или:
# screen -x
Подключиться к screen в многоэкранном режиме. Консоль могут использовать несколько пользователей, полезно для совместной работы.
Все команды screen начинаются с Ctrl-a.
Сессия терминала прерывается, когда будет закрыта работающая программа и сделан выход с терминала.
-x
(в BSD) -xdev
(в Linux) Оставаться на то-же файловой системе.-exec cmd {} \;
Выполнить команду, если есть (), то find заменяет их на путь и имя файла найденного файла.-iname
То-же, что и -name но без учета регистра-ls
Показать информацию о файле (как ls -la)-size n
Размер в блоках или байтах, n (равно n блоков), +n (более n блоков), -n (менее n блоков), доступные обозначения размеров: k, M, G, T, P-cmin n
Статус файла был изменен N минут назад# 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 файла