Использование UNIX: Часть 2. Эффективная работа с UNIX

Быстрые команды shell уменьшают затраты сил и времени на ручной ввод команд

Узнайте, какие возможности обеспечивают быстрые команды оболочки UNIX®. Достаточно несколько раз попробовать применить быстрые команды на практике, и эффективность работы пользователя намного вырастет за счет сокращения ручного ввода!

Мартин Стрейчер, главный редактор, Linux Magazine

Мартин Стрейчер (Martin Streicher) -- главный редактор журнала Linux Magazine. Он имеет степень магистра компьютерных наук Университета Пардью (Purdue University) и с 1982 занимается программированием на языках Pascal, C, Perl, Java и (с недавнего времени) Ruby в UNIX-подобных операционных системах.



27.02.2008

Каждый профессионал имеет свои секреты: это маленькие хитрости, приемы и средства, которые делают проще даже самые сложные задачи. Вот, например, мой сосед, профессиональный плотник. Он невооруженным глазом может измерять и чертить углы с великолепной точностью, делает скосы вплотную без малейших огрехов, его работы всегда вызывают бурю восторгов в местных новостях.

Но что особенно интересно (как минимум для меня - непрофессионала и зеваки), так это та относительная простота, с которой он делает свою работу. После почти 20 лет работы, нет ни одного дела, для которого он не придумал бы упрощения. Маленькие хитрости экономят чуточку его времени тут, немного труда - там... Учитывая, что у него много повторяющейся работы (такой, как распил досок, забивание гвоздей, сборка рам), все эти маленькие хитрости в совокупности сберегают кучу его времени.

Программисты, системные администраторы и другие профессиональные UNIX-пользователи имеют свои собственные специальные инструменты:

  • процессор;
  • оперативная память;
  • операционная система;
  • приложения;
  • командная оболочка shell.

Они, так же как и профессиональные плотники, знают небольшие трюки и применяют специальные инструменты, которые помогают им сохранить время и силы. Первая статья из серии "Использование UNIX" познакомила вас с таким мощным инструментом UNIX-систем, как командная строка, а эта статья расскажет об удобных и быстрых командах, которые, несомненно, повысят качество работы с командной оболочкой.

Пожалейте пальцы!

Как было показано в первой статье этой серии, возможности командной строки UNIX просто неисчерпаемы. Всего лишь несколько нажатий клавиш и немного синтаксического клея, такого как конвейер (|), команда tee и перенаправление, и можно собрать собственный импровизированный транспортировщик данных для любой командной оболочки.

Например, эта команда находит все текстовые документы в домашнем каталоге пользователя, содержащие слова Monthly Report:

$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Monthly Report"

Эта команда ищет в домашнем каталоге (find /home/joe) все файлы (-type f) с расширением .txt и запускает команду grep для поиска в них строки "Monthly Report". Опция -l выводит имя файла, если совпадение было найдено. Следовательно, команда выведет на экран список файлов, содержащих искомую строку.

Однако, хотя команда, приведенная выше, очень полезна, запомнить и набирать ее - особенно если пользоваться ею регулярно - сплошное мучение! Кроме того, если командная строка - это основной интерфейс к электронной почте, файлам, программам (таким как редакторы, компиляторы, системы мониторинга сети) и удаленным системам, то любое время и силы, которые экономятся в командной строке, могут быть с большей пользой потрачены на другие задачи. В конце концов даже тысячные доли секунды сыграют свою роль!

Для облегчения повторяющихся задач оболочка UNIX предоставляет большое разнообразие вспомогательных инструментов, включая:

  • условные обозначения;
  • метасимволы;
  • историю команд;
  • переменные окружения;
  • псевдонимы;
  • файлы автозагрузки.

Например, можно ссылаться на домашний каталог с помощью условного обозначения ~ (тильда). Также можно ссылаться на свой домашний каталог, используя переменную окружения $HOME, как это показано в листинге 1.

Листинг 1. Сокращенные обозначения в командной оболочке UNIX
$ whoami
strike

$ echo ~
/Users/strike

$ echo $HOME
/Users/strike

$ !!
echo $HOME
/Users/strike

Последняя команда !!$ (два восклицательных знака) может показаться несколько странной, но это условное обозначение истории команд, которое дословно повторяет предыдущую команду. (Многие командные оболочки также позволяют просматривать список предыдущих команд, используя клавишу "вверх" или комбинацию клавиш Control+P).

Давайте рассмотрим каждый тип этих вспомогательных инструментов более детально. Эта статья основывается на командной оболочке Z (zsh - см. раздел Ресурсы), которая обычно устанавливается в /bin/zsh. (Если в системе нет оболочки Z, то попросите администратора установить ее). Оболочка Z имеет несколько специфических особенностей; однако все примеры, представленные здесь работают в любых современных командных оболочках.


Условные обозначения в оболочке

Многие аргументы командной строки используются настолько часто, что командные оболочки предоставляют специальные условные обозначения или идентификаторы в качестве сокращений. Можно просто поставить сокращение на место аргумента.

Как было сказано выше, ~ обозначает домашний каталог. Схожее обозначение ~username ссылается на домашний каталог пользователя username. Например, ~joe ссылается на домашнюю директорию joe. Итак, чтобы скопировать файл из директории doc пользователя joe в каталог info, можно набрать команду:

$ cp ~joe/doc/report.txt ~/info

Полагая, что домашний каталог joe находится в /guests и домашний каталог пользователя - это /staff/bobr, ~joe заменяется на /guests/joe и ~ становится /staff/bobr. Окончательно команда выглядит так: cp /guests/joe/doc/report.txt /staff/bobr/info (см. вкладку "Проверка результатов", чтобы узнать как сделать предпросмотр команды).

Если нужно увидеть во что превращается условное обозначение в команде, используйте команду echo:

Команда echo выводит то, что было введено в командной строке. Однако так как командная оболочка разворачивает (в большинстве случаев) аргументы командной строки, перед тем как передать какой-нибудь программе, команда echo выведет результат всех подстановок имен вместо сокращений. (Переменная окружения $SHELL содержит имя текущей запущенной командной оболочки).

$ echo ~joe/doc/report.txt ~/info
/guests/joe/doc/report.txt /staff/bobr/info

$ echo $SHELL
/bin/zsh

$ ls
architecture.txt  Services.pdf
services.txt      Schema.pdf

$ echo *.txt
architecture.txt services.txt

Другое ценное условное обозначение - это .. (две точки), сокращение для каталога, который находится непосредственно выше текущей директории. С .. и . - условным обозначением текущего рабочего каталога - можно ссылаться на все файлы и каталоги в файловой системе относительно текущего рабочего каталога.

Например, если текущий рабочий каталог ~/jane/projects/lambda, то сокращение ../.. ссылается на два каталога выше, т.е. на ~/jane. Чтобы сослаться на директорию, которая содержит ~/jane, можно использовать ../../.. (три директории выше) или путь ~jane/../. Последняя команда говорит "начни с ~jane, а затем поднимись на один каталог выше".

Чтобы скопировать файл в текущий рабочий каталог, не нужно набирать его имя, достаточно просто поставить обозначение "." (точка): $ cp -pr /path/to/lots/of/stuff . :

$ cp -pr /path/to/lots/of/stuff .

Эта команда рекурсивно копирует каталог /path/to/lots/of/stuff в текущий рабочий каталог, сохраняя отметки времени и дат. Имена путей, в которых используются ссылки .. и . называются относительными. Имена путей, которые начинаются с / (прямой слэш) или ~ (тильда) называются абсолютными именами, т.к. в этом случае ссылка идет на файл из вершины файловой системы или из вершины иерархии директорий.


Метасимволы и шаблоны

С условными обозначениями сокращается время, затрачиваемое на набор команды и можно ссылаться на специальные каталоги быстро и коротко. Метасимволы — это другое сокращение, используемое для ссылок на содержимое каталога.

Например, предположим, что есть каталог, содержащий 100 файлов. Некоторые из них - это файлы с исходным кодом на языке C, которые заканчиваются расширением .c, другие - объектные файлы с расширением .o, остальные - текстовые документы (.txt), сценарии (.sh) и исполняемые файлы (файлы с правами на выполнение). Чтобы вывести на экран только файлы с исходным кодом - .c, - просто наберите команду:

$ ls *.c

Метасимвол * ("звездочка") означает совпадение любой последовательности символов. Расширение имени файла суффиксом .c — это буквенный шаблон, с которым совпадает только знак точки со следующей за ним буквой "c" латинского алфавита в нижнем регистре. Получив *.c, командная оболочка просматривает текущий каталог (если перед шаблоном не задан абсолютный или относительный путь), находит все имена файлов, которые удовлетворяют шаблону, заменяет *.c этим списком имен и передает этот список имен как аргументы команде ls.

Листинг 2 демонстрирует использование шаблона *.c на исходном коде wget — утилиты командной строки для закачки файлов.

Glob-операторы оболочки Z

Оболочка Z имеет несколько уникальных и полезных glob-операторов. Вот некоторые из них.

Glob-оператор **/ подставляет файлы текущего каталога и всех каталогов ниже по иерархии. Можно считать **/ встроенной командой find. Обращаясь снова к исходному коду wget, можно найти все make-файлы следующей командой:

$ echo **/Makefile
Makefile doc/Makefile po/Makefile 
src/Makefile util/Makefile 
windows/Makefile

Если не нужно включать в поиск текущий каталог, просто наберите */**/, как это показано на примере:

$ echo */**/Makefile
doc/Makefile po/Makefile 
src/Makefile util/Makefile 
windows/Makefile

Другой полезный glob-оператор оболочки Z позволяет определять тип файла. Используя шаблоны, наподобие описанных ранее, но добавляя в конце (.), (/), (*) или (@), можно найти обычные файлы, каталоги, исполняемые файлы и символические ссылки соответственно:

$ ls -d -F *(/)
ChangeLog-branches/
 doc/ po/ src/ 
 util/ windows/

Оболочка Z также имеет сокращение для (/). Просто закончите шаблон прямым слешем, чтобы ограничить результат исключительно каталогами:

$ ls -d  */  
ChangeLog-branches/
 doc/ po/ src/ util/ windows/
Листинг 2. Использование специального символа для нахождения файлов исходного кода на языке C в текущем каталоге
$ ls *.c
alloca.c
ansi2knr.c
cmpt.c
connect.c
convert.c
...

Процесс преобразования специального символа в список соответствующих имен файлов (подстановка имен файлов) называется globbing и командные оболочки UNIX имеют большое количество операторов подстановки имен файлов (такой оператор называют glob-оператор или glob), помогающих определить критерии для поиска:

  • glob * (звездочка) - любой символ или последовательность символов, включая пустую последовательность;
  • glob ? (знак вопроса) - любой одиночный символ;
  • glob [ ] (квадратные скобки) - любые из перечисленных в скобках символов. Используя квадратные скобки можно ссылаться на диапазоны с помощью (тире), например [a-z] означает любой из символов латинского алфавита в нижнем регистре.

В оболочке Z имеется много glob-операторов. На вкладке Glob-операторы оболочки Z дана более подробная информация.

Также можно использовать несколько glob-операторов подряд при необходимости. В листинге 3 даны несколько дополнительных примеров.

Листинг 3. Примеры использования специальных символов
1 $ ls -1 -a -F
./libs
ChangeLog
ChangeLog-branches/
Makefile
Makefile.in
alloca.c
ansi2knr.c
cmpt.c
cmpt.o
config.h
config.h.in
connect.c
connect.h
connect.o
convert.c
convert.h
convert.o
...
wget*

2 $ ls -a -F .*
./lib

3 $ ls -1 *.?
alloca.c
ansi2knr.c
cmpt.c
cmpt.o
config.h
connect.c
connect.h
connect.o
convert.c
convert.h
convert.o
...

4 $ ls -1 ????.?
cmpt.c
cmpt.o

5 $ ls [a-c]?*.*
alloca.c
ansi2knr.c
cmpt.c
cmpt.o
config.h
config.h.in
connect.c
connect.h
connect.o
convert.c
convert.h
convert.o
cookies.c
cookies.h
cookies.o

В листинге 3 первая команда выводит длинный список содержимого каталога, включая то, что начинается с . (точки). Опция -a показывает файлы и каталоги, начинающиеся с точки; опция -1 выводит информацию в одной колонке; и опция -F обозначает каталоги символом / (прямой слеш) и исполняемые файлы символом * ("звездочка").

Следующая команда находит имена, начинающиеся с точки (соответственно, шаблон .*). Третья команда находит имена с расширением из одного символа.

Четвертая команда находит имена, которые имеют четыре символа до точки и один после. Наконец, пятая команда находит имена, начинающиеся с символа a, b или c в нижнем регистре и имеющие хотя бы один символ до точки. Как можно увидеть, при необходимости можно повторять glob-операторы.

Однако что выведет команда ls *.z (предполагая, что не существует ни одного подходящего файла)? Она выведет сообщение об ошибке:

$ ls *.z
zsh: no matches found: *.z

Немного об истории команд

Итак, мы узнали, как определять каталоги, выбирать файлы и обращаться к ним. В командной строке можно сделать все, что хотите. Однако даже если все используемые команды просты и коротки, все равно быстро надоест набирать их снова и снова. Если же команды длинные и сложные, со множеством аргументов, то пользователю будет крайне неудобно вводить их вручную. К счастью, большинство командных оболочек ведут историю использованных команд. Чтобы заново выполнить команду, ее просто надо найти в истории команд и повторить. И как и в других случаях, сокращения сделают обращения к командам быстрыми и простыми.

Чтобы включить ведение истории команд в оболочке Z, нужно выполнить команды:

$ HISTSIZE=500
$ SAVEHIST=500

Эти две команды указывают сохранять в истории команд текущей командной оболочки и до следующего входа в оболочку по 500 последних вызванных команд. (По умолчанию оболочка Z сохраняет только последние 30 команд). Из документации командной оболочки можно узнать, какой у нее размер истории команд.

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

$ history
...
781  /bin/ls -d */
782  /bin/ls -F *(/)
783  /bin/ls -d -F *(/)
784  /bin/ls -d -F */
785  /bin/ls -d  */

Все выполненные команды имеют числовые идентификаторы, которые присваиваются командам последовательно. Эти идентификаторы можно использовать - например, набрав 782, - чтобы обратиться к команде или части команды. Чтобы просто выполнить команду заново, нужно набрать ! (восклицательный знак), за которым следует номер команды:

$ !785
ChangeLog-branches/ doc/ po/ src/ util/ windows/

Если нужно получить аргумент команды, выполненной ранее, следует обратиться к команде через ! (восклицательный знак) и затем поставить :N, где 0 на месте N означает имя самой команды, 1 - первый аргумент и так далее. Например, чтобы получить второй аргумент команды номер 782 в журнале истории, надо выполнить команду, показанную в листинге 4.

Листинг 4. Извлечение второго аргумента команды 782
$ echo !782:2   
echo *(/)
ChangeLog-branches doc po src util windows

$ ls AUTHORS COPYING INSTALL MACHINES
AUTHORS   COPYING   INSTALL   MACHINES

$ echo !!:3
echo INSTALL

$ history -2
788  ls AUTHORS COPYING INSTALL MACHINES
789  echo INSTALL

$ echo !788^
echo AUTHORS
AUTHORS

$ echo !788$
echo MACHINES
MACHINES

Команда history -2 выводит две последние набранные команды. В качестве сокращения можно обращаться к первому аргументу команды (не к самой команде), используя ^ ("крышка"), и к последнему аргументу команды из истории командной оболочки сокращением $ (знак доллара). Также можно обращаться к диапазону аргументов, используя запись диапазона, как это показано в листинге 5.

Листинг 5. Обращение к диапазону аргументов
$ echo AUTHORS COPYING INSTALL MACHINES
AUTHORS COPYING INSTALL MACHINES
$ echo !!:1-2
echo AUTHORS COPYING
AUTHORS COPYING

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

$ ls I*
$ ls M*
$ echo !?M
ls INSTALL

Конструкция !?M ищет самую последнюю команду из истории, командной оболочки, которая содержит букву M в верхнем регистре.


Переменные окружения

Говоря просто, командная строка - это неотъемлемая часть UNIX. Но разговор с UNIX не ограничивается командной строкой: также нужно уметь взаимодействовать с огромным множеством утилит UNIX. В UNIX переменные окружения сохраняют настройки командной оболочки и позволяют преумножить возможности по отношению к каждой утилите, запускаемой из командной строки.

Некоторые переменные окружения, называемые переменными оболочки, используются только командной оболочкой для управления ее поведением. Например, только оболочка Z использует $HISTSIZE и $SAVEHIST, упомянутые выше, для управления историей команд. Можно считать, что переменные оболочки - это настройки командной оболочки.

Другие переменные окружения экспортируются или делаются доступными глобально и копируются в пространство процесса (окружение) каждой команды, запускаемой из командной строки. Например, $HOME - это специальная переменная окружения, которая запоминает расположение домашнего каталога. При входе в UNIX переменным $HOME (и другим переменным окружения) присваиваются значения, а затем запускается командная оболочка, которая в свою очередь использует $HOME для нахождения файлов автозагрузки оболочки. Другие запускаемые приложения, такие как SSH и FTP, обращаются к $HOME, чтобы найти файл .netrc (используемый для сохранения конфиденциальных паролей удаленного доступа). Некоторые переменные окружения, такие как $HOME, $PATH и $SHELL, используются каждым приложением. Другие переменные окружения могут быть предназначены для использования конкретными программами.

Чтобы увидеть все установленные на данный момент переменные окружения, наберите команду printenv, как это показано в листинге 6. В зависимости от того, как системный администратор сконфигурировал систему, можно иметь очень много или совсем мало установленных переменных.

Листинг 6. Просмотр переменных окружения
$ printenv
PATH=/Users/strike/bin:/Applications/xampp/xamppfiles/bin:/Users/strike/bin:/usr/bin:/
    bin:/usr/sbin:/sbin
HOME=/Users/strike
SHELL=/bin/zsh
USER=strike
TERM=xterm-color
LOGNAME=strike
SHLVL=1
PWD=/Local/src/versions/wget/wget-1.9
OLDPWD=/Local/src/versions/wget/wget-1.9/src
PERL5LIB=/Applications/xampp/xamppfiles/lib/perl5/site_perl/5.8.7:/Projects/IGSP/src
CLICOLOR=true
MANPATH=/Local/root/share/man:/usr/share/man:/opt/local/share/man
INFOPATH=/opt/local/share/info
LESS=-n

Многие из этих переменных окажутся знакомыми, некоторые - могут оказаться новыми. Уровень командной оболочки ($SHLVL) показывает текущий уровень вложенности оболочки. Уровень 1 означает, что командная оболочка загружена для входа в систему, уровень 2 говорит о том, что другая командная оболочка загружена из первоначальной и так далее. Также можно использовать значение $SHLVL, чтобы изменить строку приглашения для каждой дополнительной (вложенной) командной оболочки. $TERM содержит установки терминала (или эмулятора терминала), это важно для гарантированно правильного отображения текста, цвета, так же как и правильной интерпретации нажатых клавиш. $PWD - это текущий рабочий каталог, а $OLDPWD - предыдущий рабочий каталог. Можно использовать обе эти переменные окружения для быстрого перехода между двумя каталогами, как это показано в листинге 7.

Листинг 7. Переключение между каталогами
$ echo $PWD
/Users/strike

$ echo $OLDPWD
/Local/src/versions/wget/wget-1.9

$ cd $OLDPWD

$ echo $PWD 
/Local/src/versions/wget/wget-1.9

$ echo $OLDPWD
/Users/strike

Оставшиеся переменные окружения из списка выше специфичны для приложений. Каждая сохраненная настройка контролирует работу соответствующего ей приложения, которое может быть запущено. $PERL5LIB - это путь, по которому интерпретатор Perl будет искать пользовательские библиотеки. Команда ls использует $CLICOLOR для отображения цветом типов файлов (каталоги отображаются голубым, исполняемые файлы - зеленым и так далее). Пользовательские переменные окружения, ассоциированные с приложениями, обычно описаны в страницах man соответствующей программы.

Установка переменной окружения идентична установке переменной оболочки. Однако их нужно экспортировать для того, чтобы они были доступны глобально:

$ MYVARIABLE=$HOME/projectX
$ export TMPDIR=/tmp/projectX

Первая команда устанавливает значение переменной $MYVARIABLE. Ведущий знак доллара в команде из примера - это приглашение командной строки. При установке переменной не нужно ставить знак $ перед именем. Однако нужно указывать его, подобно $MYVARIABLE, при использовании переменной. $MYVARIABLE доступна только для текущей командной оболочки, так как не была экспортирована. Чтобы увидеть список всех переменных оболочки, нужно набрать команду set. Вывод команды set включает переменные окружения, так как они тоже доступны для оболочки.

В следующей команде листинга переменная $TMPDIR устанавливается, экспортируется и становится доступной для всех приложений, запущенных из текущей командной оболочки. Одно из приложений, которое использует переменную $TMPDIR - это компилятор GNU Compiler Collection (GCC). В каталоге, прописанном в переменной $TMPDIR, GCC создает свои временные файлы.

Если нужно удалить переменную окружения, то достаточно вызвать команду unset и указать имя переменной, как это показано в листинге 8.

Листинг 8. Удаление переменной окружения
$ set
HOME=/Users/strike
MYVARIABLE=/Users/strike/projectX
TMPDIR=/tmp/projectX
...

$ unset MYVARIABLE TMPDIR

$ set
HOME=/Users/strike
....

Псевдонимы и файлы автозагрузки

Предыдущий раздел, наверное, расстроил многих, ведь необходимо набирать столько символов в командной строке! Да, здесь много чего нужно запомнить, ведь переменные окружения командной оболочки дают огромные возможности. Помните, однако, что большие возможности несут с собой большую продуктивность (приношу свои извинения Человеку-пауку, если обидел его).

Чтобы сохранить эти драгоценные нажатия клавиш и запомнить все сделанные настройки, командная оболочка UNIX предлагает псевдонимы и файлы автозагрузки соответственно. Псевдонимы - это вводимые сокращения. Файлы автозагрузки читаются каждый раз, когда запускается командная оболочка и являются идеальным местом для хранения и передачи всех настроек командной оболочке, таких как переменные оболочки (опции), переменные окружения и псевдонимы.

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

$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Monthly Report"

в командной строке, можно набрать ту самую кличку, присвоенную команде раньше:

$ findreports

Командная оболочка сделает грязную работу, разворачивая findreports в более длинную команду. Чтобы создать псевдоним для findreports, нужно набрать:

alias findreports='find $HOME -type f -name "*.txt" -print | 
  xargs grep -l "Monthly Report"'

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

Листинг 9. Примитивы оболочки Z
$ alias ll='/bin/ls -l'
$ ll -d 2002*
drwxrwxr-x  2 www-data   www-data    4096 Jan 16  2002 2002-02
drwxrwxr-x  2 www-data   www-data    4096 Jan 22  2002 2002-03
drwxrwxr-x  2 www-data   www-data    4096 Apr 15  2002 2002-04
drwxrwxr-x  2 www-data   www-data    4096 Apr 19  2002 2002-05
...

$ alias lt='ll -t'
$ lt -d 2002*
drwxrwxr-x  2 www-data www-data 4096 Apr 19  2002 2002-05
drwxrwxr-x  2 www-data www-data 4096 Apr 15  2002 2002-04
drwxrwxr-x  2 www-data www-data 4096 Jan 22  2002 2002-03
drwxrwxr-x  2 www-data www-data 4096 Jan 16  2002 2002-02

$ alias m='pinky | grep mstreicher'
$ m
mstreicher Martin Streicher     ...

$ alias snap='pinky >> ~/.pinky'
$ snap
$ snap
$ cat ~/.pinky
Login            Name            TTY      Idle   When             Where
mstreicher  Martin Streicher    pts/0    Jun 18 16:40 cpe-071-065-224-025.nc.res.rr.com
Login            Name            TTY      Idle   When             Where
mstreicher  Martin Streicher    pts/0    Jun 18 16:40 cpe-071-065-224-025.nc.res.rr.com

Псевдоним ll ссылается на /bin/ls: абсолютный путь никогда не заменяется при подстановке псевдонима.

При вводе команды ll она заменяется своим псевдонимом и добавляются указанные в командной строке аргументы. Следовательно, ll -d 2002* на самом деле есть команда /bin/ls -l -d 2002*. Псевдоним lt включает в себя ll и флаг -t для сортировки по времени создания. Псевдоним lt разворачивается в /bin/ls -l -t -d 2002*. Псевдоним m включает в себя конвейер. Псевдоним snap использует перенаправление для вывода данных в файл.

Чтобы увидеть все псевдонимы, установленные в командной оболочке, нужно ввести alias (без аргументов), как это показано в листинге 10.

Листинг 10. Смотрим все псевдонимы, установленные в системе
$ alias
alias findreports='find $HOME -type f -name "*.txt" -print | xargs grep -l
  "Monthly Report"'
alias ll='/bin/ls -l'
alias lt='ll -t'
alias m='pinky | grep mstreicher'
alias snap='pinky >> ~/.pinky'
...

Если необходимо удалить псевдоним, то нужно ввести команду unalias и за ней имя псевдонима. Также можно удалить несколько псевдонимов за один раз, как это показано в листинге 11.

Листинг 11. Удаляем несколько псевдонимов сразу
$ unalias m snap
$ alias
alias findreports='find $HOME -type f -name "*.txt" -print | xargs grep -l
  "Monthly Report"'
alias ll='/bin/ls -l'
alias lt='ll -t'

Наконец, после приложенных усилий для установки переменных окружения их настройки нужно сохранить для использования в другой раз. Действительно, необходимо, чтобы командная оболочка была одинаково настроена в каждую новую сессию и в каждую новую загрузку, скажем, когда на компьютере запущено сразу несколько окон терминала.

Командные оболочки включают возможности по работе с файлами автозагрузки для (повторной) инициализации окружения при запуске командной оболочки. Файлы автозагрузки могут быть простыми - просто список переменных и значений - или сложными, включая настройки и сложные функции. Некоторые пользователи имеют несколько файлов автозагрузки - по одному на каждый проект.

Оболочка Z использует файлы автозагрузки .zshrc и .zprofile, оба они находятся в домашнем каталоге. Другие командные оболочки имеют схожие файлы автозагрузки со схожими именами и описания их специфических особенностей можно найти в документации оболочки. Некоторые командные оболочки имеют также файлы окончания работы - файлы, запускаемые при закрытии оболочки. Файл .zshrc читается и обрабатывается при запуске новой командной оболочки; файл .zprofile обрабатывается при входе в систему.

После того как вы настроили для себя командную оболочку, надо сделать "снимок" текущих настроек и сохранить их в файле автозагрузки оболочки:

$ set >> $HOME/.zshrc
$ alias >> $HOME/.zshrc

Примечание. Может понадобиться отредактировать получившийся .zshrc-файл для удаления переменных, которые специфичны для данной сессии.


Больше возможностей

На освоение материала этой статьи из серии "Использование UNIX" может уйти много времени, но это время потрачено не впустую! Работайте меньше, но эффективнее и сохраните свое драгоценное время на действительно важные вещи (например, на игру slashem).

В следующей статье из серии "Использование UNIX" мы вернемся к технике старой школы. Я объясню, как без помощи Web-браузеров можно соединяться с удаленным компьютером, закачивать, передавать файлы и общаться исключительно из командной строки.

Будьте готовы.

Ресурсы

Научиться

Получить продукты и технологии

  • Z shell: новейшую версию оболочки Z можно загрузить c домашней страницы оболочки Z(EN).
  • IBM trial software: ознакомительные версии программного обеспечения для разработчиков, которые можно загрузить прямо со страницы сообщества developerWorks.(EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=291921
ArticleTitle=Использование UNIX: Часть 2. Эффективная работа с UNIX
publish-date=02272008