Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #71, НОЯБРЬ 2004 г.

Консольные этюды

Andrey Matveev

Хакер, номер #071, стр. 071-102-1


(andrushock@real.xakep.ru)

Нестандартные решения стандартных задач в *nix

Сегодня мы много говорим о графической подсистеме X Window, уделяем безумное количество времени наведению блеска своего рабочего стола, наполняем очередь закачки download-менеджера все новыми и новыми графическими утилитами, обладающими мнимым удобством и тяжестью Gtk/Qt, совсем забывая о командной строке - чрезвычайно мощной и гибкой среде настоящего юниксоида. Возможно, для кого-то эта статья станет напоминанием, а для кого-то руководством к действию. В любом случае, держись крепче!

Мировая конкатенация

Способность командной оболочки осуществлять перенаправление ввода/вывода и поддерживать работу программ с помощью конвейеров - вот главные козыри *nix-консоли. Именно совместное использование команд предоставляет пользователю поистине уникальные возможности. Однако довольно часто за счет различных приемов можно добиться еще более эффективной работы.

Как правило, чтобы отправить короткое сообщение по электронной почте, используется вот такая незамысловатая конструкция:

% cat message.txt | mail -s 'slacker' bill@gates.com

При отсутствии имени файла в качестве аргумента или если необходимо получить ввод с клавиатуры, многие *nix-программы способны обрабатывать входную информацию из STDIN, соответственно, вызовом cat здесь можно пренебречь:

% mail -s 'slacker' bill@gates.com < message.txt

Кстати, псевдоустройство /dev/null можно использовать не только в качестве треша, но и вместо стандартного потока ввода в том случае, когда входные данные для нас не представляют интереса (чтобы не повторяться, немного расширим предыдущий пример):

% echo "mail -s 'slacker' bill@gates.com < /dev/null" | at 23:59

Очень часто в статьях можно увидеть запись вроде этой:

# kill -HUP `cat /var/run/sendmail.pid`

Без сомнения, эта команда будет работать, но не на всех системах, т.к. файл с уникальным идентификатором процесса может состоять из нескольких строк:

openbsd# cat /var/run/sendmail.pid

6563

/usr/sbin/sendmail -L sm-mta -C /etc/mail/localhost.cf -bd -q30m

Если быть точнее, то Sendmail все же перезапустится, но с многочисленными ошибками kill: illegal pid, поэтому чтобы не запоминать, в каких осях и на каких pid-файлах следует применять cat, лучше сразу использовать - нет, не head -n 1, - а потоковый редактор текста sed:

# kill -HUP `sed q /var/run/sendmail.pid`

Если содержимое текстового файла не умещается на одном экране, его лучше просматривать нормальным пейджером, таким как more, less или most. Предвижу твой вопрос: так что же можно делать с помощью cat? К примеру, резервировать данные:

% tar zcf - ~/work | ssh trusted.box.ru 'cat > backup.tgz'

Или выполнять объединение файлов, скажем, для создания самоподписанного сертификата, необходимого для работы STARTTLS:

# cd /etc/mail/certs

# openssl req -newkey rsa:1024 -keyout mykey.pem -nodes -x509 -days 3650 -out cacert.crt

# cat mykey.pem cacert.crt > server.pem

Вот еще одна интересная функция - cat можно использовать в качестве примитивного текстового редактора. Этот прием может пригодиться, если на удаленном узле (читай захваченном шелле) по какой-то причине оказались недоступными консольные ftp-клиенты (ftp, wget) и стандартные редакторы, такие как vi, nano, joe:

Содержание  Вперед на стр. 071-102-2
дачные переезды, офисные переезды
<<< НАЗАД ||| ГЛАВНАЯ