Аппаратные средства и архитектура



Скачать 10.18 Mb.
Pdf просмотр
страница10/68
Дата22.11.2016
Размер10.18 Mb.
Просмотров7599
Скачиваний0
1   ...   6   7   8   9   10   11   12   13   ...   68
Листнг 12. Unset и set
[ian@echidna ian]$ echo $- himBH
[ian@echidna ian]$ echo $VAR1
[ian@echidna ian]$ set -u;echo $- himuBH
[ian@echidna ian]$ echo $VAR1
bash: VAR1: unbound variable
[ian@echidna ian]$ VAR1=v1
[ian@echidna ian]$ VAR1=v1;echo $VAR1
v1
[ian@echidna ian]$ unset VAR1;echo $VAR1
bash: VAR1: unbound variable
[ian@echidna ian]$ set +u;echo $VAR1;echo $- himBH

Вы можете использовать команду set без каких-либо опций, которая отобразит все ваши shell переменные и их значения (если есть). Есть также другая команда, declare
, с помощью которой вы можете создавать, экспортировать и отображать значения shell переменных. О других опциях команд set и declare вы можете узнать из man-страниц.
Мы рассмотрим man-страницы далее в этом разделе.
Команда exec
Последняя команда, которую мы рассмотрим в этом разделе это exec
. Вы можете использовать команду exec, чтобы запустить другую команду, которая заместит текущий интерпретатор. В Листинге 13 порождается экземпляр bash, а затем используется exec, чтобы заместить его на интерпретатор Korn. После выхода из интерпретатора Korn, вы оказываетесь в исходном интерпретаторе bash (в этом примере PID 22985).
Листинг 13. Использование exec
й
[ian@echidna ian]$ echo $$
22985
[ian@echidna ian]$ bash
[ian@echidna ian]$ echo $$
25063
[ian@echidna ian]$ exec ksh
$ echo $$
25063
$ exit
[ian@echidna ian]$ echo $$
22985
История команд
Если вы набирали команды, по мере того как читали руководство, то могли заметить, что часто используются почти одни и те же команды. Хорошая новость состоит в том, что bash может хранить историю ваших команд. По умолчанию история включена. Вы можете отключить ее с помощью команды set +o history и включить с помощью команды set
-o history
. Переменная среды HISTSIZE сообщает bash о том, сколько надо хранить строк. Набор других свойств определяет поведение и работу истории. Подробности смотрите в man-страницах bash.
Вот некоторые команды, которые вы можете использовать для работы с историей:
history
Отображает всю историю
historyN
Отображает последние N строк вашей истории
history -dN
Удаляет строку N из вашей истории; это можно использовать, если, например, вы хотите удалить строку, содержащую пароль
!!
Ваша последняя введенная команда
!N
Nая команда истории
!-N
Команда, отстоящая на N шагов от текущей в истории (!-1 эквивалентно !!)
!#

Текущая команда, которую вы набираете
!string
Самая недавняя команда, которая начинается со строки string
!?string?
Самая последняя команда, содержащая строку string
Вы можете использовать двоеточие (:), за которым следует определенное значение, чтобы получить доступ или изменить команду в истории. Листинг 14 показывает некоторые возможности истории.
Листинг 14. Управление историей
[ian@echidna ian]$ echo $$
22985
[ian@echidna ian]$ env -i bash -c 'echo $$'
1542
[ian@echidna ian]$ !!
env -i bash -c 'echo $$'
1555
[ian@echidna ian]$ !ec
echo $$
22985
[ian@echidna ian]$ !en:s/$$/$PPID/
env -i bash -c 'echo $PPID'
22985
[ian@echidna ian]$ history 6
1097 echo $$
1098 env -i bash -c 'echo $$'
1099 env -i bash -c 'echo $$'
1100 echo $$
1101 env -i bash -c 'echo $PPID'
1102 history 6
[ian@echidna ian]$ history -d1100
Команды в Листинге 14 делают следующее:
1. Вывод PID текущего интерпретатора
2. Запуск команды echo в новом экземпляре интерпретатора и вывод его PID
3. Запустить последнюю команду
4. Перезапустить команду, начинающуюся с 'ec'; произойдет запуск первой команды в этом примере
5. Запустить последнюю команду, начинающуюся с 'en', но заменить '$PPID' на '$$', поэтому на самом деле отобразится родительский PID
6. Отобразить последние 6 команд истории
7. Удалить команду под номером 1100, последняя команда echo
Вы можете редактировать истории в интерактивном режиме. Интерпретатор bash использует библиотеку readline для управления редактированием команд и истории. По умолчанию, клавиши и комбинации клавиш, которые используются для перемещения по истории или редактированию строк соответствуют тем, что используются в редакторе GNU Emacs. В
Emacs комбинации клавиш обычно обозначаются как C-x или M-x, где x это обычная клавиша, а C и M это Control и Meta клавиши соответственно. На типичном PC клавишаCtrlсоответствует клавише Emacs Control, а клавиша Alt соответствует клавише
Meta. В Таблице 5 содержатся некоторые доступные функции редактирования истории.

Кроме комбинаций клавиш, показанных в Таблице 5, клавиши курсора, а также Home и End клавиши используются естественным образом для работы с историей. Дополнительные функции, а также возможности настройки опций с помощью файла инициализации readline
(обычно это inputrc в вашем домашнем каталоге) можно найти в man-страницах.
Таблица 5. Редактирование истории с помощью команд emacs
Команда
Клавиша на
клавиатуре PC
Описание
C-f
Стрелка вправо
Перейти на один знак вправо
C-b
Стрелка влево
Перейти на один знак влево
M-f
Alt-f
Перейти в начало следующего слова; В графических средах эта комбинация приводит к открытию меню File текущего окна
M-b
Alt-b
Перейти к началу предыдущего слова
C-a
Home
Перейти к началу строки
C-e
End
Перейти к концу строки
BackspaceBackspace
Удалить символ перед курсором
C-d
Del
Удалить символ, стоящий сразу после курсора (функции
Del и Backspace можно поменять местами)
C-k
Ctrl-k
Удалить (убить) все до конца строки и сохранить для последующего использования
M-d
Alt-d
Удалить (убить) до конца слова и сохранить текст для последующего использования
C-y
Ctrl-y
Вставить текст, удаленный командой убить
Если вы предпочитаете управлять историей в режиме vi, то используйте команду set -o vi
, чтобы переключиться в режим vi. Можете переключиться обратно в режим emacs с помощью команды set -o emacs
. Когда вы извлекаете команду в режиме vi, то находитесь изначально в режиме вставки vi. Более подробно о редакторе vi смотрите в разделе
Редактирование файлов в vi
Пути
Одни команды bash являются встроенными, другие же наоборот внешними. Давайте теперь рассмотрим внешние команды и как их запускать, а также как отличить внутреннюю команду.
Где интерпретатор ищет команды?
Внешние команды представляют собой файлы в файловой системе. Дальше раздел
Простое управление файлами этого руководства и руководства для Темы 104 раскрывают необходимые подробности. В системах Linux и UNIX все файлы являются частью огромного дерева, конем которого является /. В рассматриваемых выше примерах нашим текущим каталогом был домашний каталог пользователя. У обычных пользователей домашние каталоги находятся в /home каталоге, то есть /home/ian, в моем случае. Домашний каталог root находится в /root. После того как вы набрали команду, bash ищет ее в списке каталогов
поиска по умолчанию, который представляет собой список каталогов, разделенных двоеточием и хранящийся в переменной окружения PATH.
Если вы хотите знать какая команда будет выполнена, если вы напечатаете определенную строку, то используйте команду which или type
. В Листинге 15 показан мой путь по умолчанию, а также расположение нескольких команд.
Листинг 15. Поиск месторасположения команд
[ian@echidna ian]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/ian/bin

[ian@echidna ian]$ which bash env zip xclock echo set ls alias ls='ls --color=tty'
/bin/ls
/bin/bash
/bin/env
/usr/bin/zip
/usr/X11R6/bin/xclock
/bin/echo
/usr/bin/which: no set in (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/b in:/home/ian/bin)
[ian@echidna ian]$ type bash env zip xclock echo set ls bash is /bin/bash env is /bin/env zip is /usr/bin/zip xclock is /usr/X11R6/bin/xclock echo is a shell builtin set is a shell builtin ls is aliased to `ls --color=tty'
Заметим, что все каталоги в пути заканчиваются на /bin. Это общепринятое соглашение, но не требование. Команда which доложила нам, что команда ls является псевдонимом и что команда set не может быть найдена. В этом случае это можно интерпретировать, что команды либо не существует, либо она является встроенной. Команда type сообщила нам, что команда ls на самом деле является псевдонимом, а также она определила, что команда set является встроенной командой интерпретатора; также она сообщила, что есть встроенная команда echo
, а также есть такая команда в /bin, которую мы нашли с помощью команды which
. Эти две команды по-разному осуществляют свой вывод.
Мы видели, что команда ls, используемая для просмотра содержимого каталогов, на самом деле является псевдонимом. Псевдонимы представляют удобный способ использования команд с различными наборами опций или же просто для альтернативного именования команды. В нашем примере опция
--color=tty заставляет подсвечивать список файлов каталога в зависимости от типа файлов и каталогов. Попробуйте запустить dircolors
--print-database
, чтобы увидеть коды цветов, а также, какие цвета используются для конкретного типа файла.
У каждой из этих команд есть дополнительные опции. В зависимости от ваших требований вы можете использовать ту или иную команду. Я предпочитаю использовать which
, когда уверен, что найду исполняемый файл и мне просто нужен его полный путь. Команда type выдает мне более точную информацию, которая мне иногда необходима в сценариях.
Запуск других команд
В Листинге 15 мы видели, что полный путь исполняемых файлов начинается с корневого каталога /. Например, программа xclock это на самом деле /usr/X11R6/bin/xclock, файл, расположенный в каталоге /usr/X11R6/bin. Если программа не находится в переменной
PATH, то вы можете запустить ее, указав полный путь к программе и саму программу.
Существует два вида путей, которые вы можете использовать:

Абсолютные пути, которые начинаются с /, такие как мы видели в Листинге 15
(/bin/bash, /bin/env и так далее).

Относительные пути эти пути относительно вашего текущего рабочего каталога, имя которого можно получить с помощью команды pwd
. Такие команды не начинаются с /, но по крайней мере содержат один символ /.
Вы можете использовать абсолютные пути в независимости от вашего текущего рабочего каталога, но возможно будете использовать относительные пути, когда команда находится
недалеко от текущего каталога. Предположим, что вы разрабатываете новую версию классической программы "Hello World!" в подкаталоге mytestbin вашего домашнего каталога.
Возможно вы захотите использовать относительный путь и запустить команду как mytestbin/hello
. Существует два специальных имени, которые вы можете использовать в указании пути; простая точка (.) ссылается на текущий каталог, и пара точек (..), которые ссылаются на родительский каталог текущего каталога. Так как ваш домашний каталог не находится в переменной окружения PATH (и так и должно быть), то вам понадобится указать явный путь к файлу, который вы хотите запустить из своего домашнего каталога. Например, если у вас есть копия программы hello в вашем домашнем каталоге, то для ее запуска можете просто использовать команду
./hello
. Вы можете использовать как. так и .. как часть абсолютного пути, хотя одинарная .не очень полезна в данном случае. Вы можете использовать тильду (
) для ссылки на свой домашний каталог и
usernameдля ссылки на домашний каталог пользователя username.Некоторые примеры приведены в Листинге 16.
Листнг 16. Абсолютные и относительные пути
[ian@echidna ian]$ /bin/echo Use echo command rather than builtin
Use echo command rather than builtin
[ian@echidna ian]$ /usr/../bin/echo Include parent dir in path
Include parent dir in path
[ian@echidna ian]$ /bin/././echo Add a couple of useless path components
Add a couple of useless path components
[ian@echidna ian]$ pwd # See where we are
/home/ian
[ian@echidna ian]$ ../../bin/echo Use a relative path to echo
Use a relative path to echo
[ian@echidna ian]$ myprogs/hello # Use a relative path with no dots
-bash: myprogs/hello: No such file or directory
[ian@echidna ian]$ mytestbin/hello # Use a relative path with no dots
Hello World!
[ian@echidna ian]$ ./hello # Run program in current directory
Hello World!
[ian@echidna mytestbin]$
/mytestbin/hello # run hello using
Hello World!
[ian@echidna ian]$ ../hello # Try running hello from parent
-bash: ../hello: No such file or directory
Смена рабочего каталога
Также как вы можете исполнять программы из различных каталогов, вы можете изменять ваш текущий рабочий каталог, используя команду cd
. Аргументом для cd должен быть абсолютный или относительный путь до каталога. В команде при указании путей вы также можете использовать ., ..,
, и
username. Если вы наберете cd без параметров, то перейдете в домашний каталог. Передача в качестве параметра одиночного (-) означает переход в предыдущий рабочий каталог. Домашний каталог хранится в переменной окружения HOME, а предыдущий каталог хранится в переменной OLDPWD, поэтому cd эквивалентно cd
$HOME
, а cd
- эквивалентно cd
$OLDPWD
. Обычно мы коротко говорим о смене каталога вместо полной смены текущего рабочего каталога.
Что касается команд, существует переменная среды CDPATH, которая содержит список каталогов, разделенных двоеточием, в которых должен происходить поиск (в дополнение к текущему рабочему каталогу), при разрешении относительных путей. Если решение использует путь из CDPATH, то cd напечатает на выходе полный путь найденного каталога.
Обычно удачная смена каталога сопровождается появлением нового приглашения или немного модифицированного приглашения. Некоторые примеры показаны в Листинге17.

Листнг 17. Смена каталогов
[ian@echidna home]$ cd /;pwd
/
[ian@echidna /]$ cd /usr/X11R6;pwd
/usr/X11R6
[ian@echidna X11R6]$ cd ;pwd
/home/ian
[ian@echidna ian]$ cd -;pwd
/usr/X11R6
/usr/X11R6
[ian@echidna X11R6]$ cd ian/..;pwd
/home
[ian@echidna home]$ cd
;pwd
/home/ian
[ian@echidna ian]$ export CDPATH=
[ian@echidna mytestbin]$ cd /;pwd
/
[ian@echidna /]$ cd mytestbin
/home/ian/mytestbin
Рекурсивное применение команд
Многие Linux команды можно применять рекурсивно ко всем файлам в дереве каталогов.
Например, у команды ls есть опция
-R
для рекурсивной выдачи списка каталогов, а у команд cp
, mv
, rm
, и diff есть опция
-r для рекурсивного применения. Раздел
Простое управление файлами рассматривает рекурсию более подробно.
Подстановка команд
У bash есть чрезвычайно мощная возможность передачи результата одной программы на вход другой; это называется подстановкой команды. Это можно сделать, заключив команду, результаты которой вам нужны, в апострофы (`). При использовании множественных вложенных команд можно заключать команду между $( и ).
В предыдущем руководстве "
Подготовка к экзамену LPI 101 (тема 102): Установка Linux и управление пакетами " мы видели, что команда rpm может сказать какому пакету принадлежит какая команда; здесь было удобно применять подстановку команды. Теперь вы знаете, что мы действительно это делали.
Подстановка команды является бесценными инструментом при написании сценариев, а также при использовании в командной строке. В Листинге 18 показан пример, как получить абсолютный путь каталога из относительного, как найти пакет, который предоставляет команду /bin/echo, и как (будучи root) просмотреть метки трех разделов на жестком диске.
Последний использует команду seq для создания последовательности целых чисел.
Листинг 18. Подстановка команды
[ian@echidna ian]$ echo '../../usr/bin' dir is $(cd ../../usr/bin;pwd)
../../usr/bin dir is /usr/bin
[ian@echidna ian]$ which echo
/bin/echo
[ian@echidna ian]$ rpm -qf `which echo`
sh-utils-2.0.12-3
[ian@echidna ian]$ su -
Password:
[root@echidna root]# for n in $(seq 7 9); do echo p$n `e2label /dev/hda$n`;done p7 RH73
p8 SUSE81
p9 IMAGES
Man-страницы
В последней теме раздела этого руководства рассмотрим, как получить справку по командам
Linux с помощью man-страниц и других видов документации.
Man-страницы и разделы
Главный (и традиционный) источник документации -- это man-страницы, доступ к которым можно получить с помощью команды man
. На Рисунке 1 показана man-страница для команды man. Используйте команду man man для получения этой информации.
Рисунок 1. Man-страница для команды man
На Рисунке 1 представлены некоторые типичные пункты man-страниц:

Заголовок с именем команды, за которым в скобках следует номер раздела

Имя команды и другие похожие команды, которые обсуждаются в этой man-странице

Список опций и параметров примених к команде

Короткое описание команды

Подробное описание каждой опции
Также вы можете найти разделы по использованию, как сообщать ошибки, информацию об авторе, а также список других команд. Например, man-страница для man сообщает, что существуют дополнительные команды (и их руководства): apropos(1), whatis(1), less(1), groff(1) и man.conf(5).
Обычно общими для man-страниц являются 8 разделов. Большинство страниц обычно ставиться при установке пакета, поэтому если пакет не установлен, то почти наверняка у вас будут отсутствовать его man-страницы. Кроме того, некоторые разделы страниц могут быть пустыми или почти пустыми. Наиболее общие разделы man-страниц это:

1. Команды пользователя (env, ls, echo, mkdir, tty)
2. Системные вызовы или функции ядра (link, sethostname, mkdir)
3. Библиотечные функции (acosh, asctime, btree, locale, XML::Parser)
4. Информация по оборудованию (isdn_audio, mouse, tty, zero)
5. Описание формата файолов (keymaps, motd, wvdial.conf)
6. Игры (заметим, что многие игры теперь работают в графическом режиме, поэтому могут иметь собственную систему помощи, а не man-страницы)
7. Разное (arp, boot, regex, unix utf8)
8. Системное администрирование (debugfs, fdisk, fsck, mount, renice, rpm)
Другие разделы могут включать 9 для документации по ядру Linux, nдля новой документации, o для старой документации и l для локальной документации.
Некоторые записи могут встречаться в нескольких разделах. Наши примеры показали, что mkdir содержится в разделах 1 и 2, а tty в разделах 1 и 4. Вы можете определить определенный раздел, например, man
4
tty или man
2
mkdir
, или вы можете использовать опцию
-a для получения списка всех разделов man-страниц.
Вы заметили на рисунке, что у man много опций, которые вы можете сами посмотреть.
Сейчас давайте быстро взглянем на раздел команд "See also", имеющих отношение к man
See also
Две важнейших команды, имеющих отношение к man
, это whatis и apropos
. Команда whatis ищет man-страницы для указанного вами имени и отображает информации об имени из соответствующих man-страниц. Команда apropos осуществляет поиск по ключевым словам в man-страниц и выводит те, которые содержат ваше слово. В Листинге 19 эти команды представлены.
Листинг 19. Примеры команд whatis и apropos
[ian@lyrebird ian]$ whatis man man (1) - format and display the on-line manual pages man (7) - macros to format man pages man [manpath] (1) - format and display the on-line manual pages man.conf [man] (5) - configuration data for man
[ian@lyrebird ian]$ whatis mkdir mkdir (1) - make directories mkdir (2) - create a directory
[ian@lyrebird ian]$ apropos mkdir mkdir (1) - make directories mkdir (2) - create a directory mkdirhier (1x) - makes a directory hierarchy
Между прочим если вы не можете найти man-страницу для man.conf, то попытайтесь запустить man man.conf
ig
Вывод на экран команды man осуществляет специальная программа постраничного вывода.
На большинстве Linux систем такой программой будет less
. Другим вариантом может быть более старая программа more
. Если вы хотите напечатать страницу, то определите опцию
-t для форматирования страницы и печати, используя программу groff или troff
У программы вывода less есть несколько команд, облегчающих поиск строк в отображаемом тексте. Используйте команду man less
, чтобы узнать больше о /(поиск вперед), ?(поиск назад) и n (для последнего произведенного поиска), а также о многих других командах.

Другие источники документации
В дополнение к man-страницам, доступным из командной строки, фонд Free Software
Foundation создал большое число info файлов, которые обрабатываются программой info. Она обладает большими возможностями навигации, в том числе и возможностью перехода в другую секцию. Наберите man info или info info
, чтобы получить больше информации. Не все команды документированы в info, поэтому вы можете использовать как man-страницы так и info.
Существует несколько графических интерфейсов к man-страницам, как например xman
(из проекта XFree86) и yelp
(браузер помощи Gnome 2.0).
Если вы не можете найти справки по команде, попытайтесь запусить команду с опцией
--help
. Так вы, возможно, узнаете то что хотели или получите подсказку, где ещё можно поискать.
Следующий раздел посвящен обработки текстовых потоков с помощью фильтров.
| предыдущая
| следующая
Текстовые потоки и фильтры
Этот раздел описывает материал темы 1.103.2, необходимый для экзамена Junior Level
Administration (LPIC-1) 101. Тема имеет вес 6.
В этом разделе вы узнаете о следующих темах:

Посылке текстовых файлов и выходных потоков в фильтр с целью модификации вывода

Использование стандартных UNIX команд из пакета GNU textutils
Фильтрация текста
Фильтрация текста -- это процесс преобразований над входным потоком текста до того как он будет выдан в выходной поток. Хотя как входной, так и выходной поток могут поступать из файла, в системах Linux и UNIX фильтрация преимущественно осуществляется через
конвейер команд, когда вывод одной команды связывается или перенаправляется на ввод следующей команды. Программные каналы и перенаправления более подробно рассмотрены в разделе
Потоки, программные каналы и перенаправления
, но сейчас давайте взглянем на конвейер и простое перенаправление вывода с помощью операторов
| и
>
Конвейер с помощью
|
Вспомним из предыдущего раздела, что интерпретатор оперирует с тремя стандартными
потоками ввода/вывода:

stdin это стандартный поток ввода, через который поступает ввод командам.

stdout это стандратный выходной поток, через который команды выводят свой выход.

stderr это стандартный поток ошибок, через который выводятся ошибки в командах.
До сих пор, в этом руководстве, ввод представлял собой параметры, которые мы передавали командам, а вывод отображался на терминал. Многие команды обработки текста (фильтры) могут принимать входной поток, как из стандартного ввода, так и из файла. Чтобы использовать выход команды command1, как входной фильтр command2 вы должны соединить команды с помощью операции конвейерезации (|), как показано в Листинге 20.
1   ...   6   7   8   9   10   11   12   13   ...   68


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал