Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007





НазваниеАлексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007
страница5/48
Дата публикации28.05.2015
Размер6.43 Mb.
ТипДокументы
100-bal.ru > Информатика > Документы
1   2   3   4   5   6   7   8   9   ...   48

Популярные оболочки GNU/Linux


Самая первая оболочка, которая появилась в UNIX,– это Bourne Shell, названная по имени ее создателя. Эта оболочка была рассчитана на терминалы, по сути представлявшие собой телетайпы с крайне ограниченными возможностями редактирования текста. Поэтому в Bourne Shell нет никаких возможностей редактирования командной строки. В UNIX эта оболочка является стандартной, но в GNU/Linux вместо нее используется Bourne Again Shell – bash. Имя этой оболочки образовано игрой слов и значит "Возрожденная оболочка". По своим возможностям она превосходит Korn Shell – ksh, стандартную оболочку коммерческих версий UNIX, и оболочку С Shell – csh, стандартную оболочку в BSD.

В GNU/Linux наиболее часто используются следующие оболочки:
□ bash – Bourne Again Shell (используется по умолчанию);

□ pdksh – Public domain Korn Shell, являющаяся свободной реализацией стандартной в UNIX оболочки Korn Shell – ksh;

□ tcsh – Enhanced С shell, представляющая собой улучшенный вариант С Shell – csh;

□ zsh – Z Shell.
Эти оболочки обладают различной функциональностью и даже различными командами. Поэтому при запуске сценария оболочки (скриптов) необходимо убеждаться в его соответствии используемой оболочке.

Оболочки ksh и bash способны корректно выполнять сценарии, написанные для Bourne Shell, т.к. являются ее наследницами и совместимы с ней. Но сценарии С Shell не могут быть корректно выполнены в Bash.

Bash Shell является лидером по популярности, и большинство пользователей GNU/Linux используют именно эту оболочку. Эта оболочка устанавливается по умолчанию для пользователей GNU/Linux, и именно она обычно загружается после входа в сеанс.

Оболочки, установленные в системе, указаны в файле /etc/shells (пример 3.10).
Пример 3.10. Файл /etc/shells

В примере 3.10 команда cat вывела файл /etc/shells, который содержит список оболочек, установленных в системе.

Загрузка оболочки достигается запуском соответствующего исполняемого файла (пример 3.11).
Пример 3.11. Запуск опций Enhanced С Shell

В примере 3.11 команда tcsh запускает оболочку Enhanced С Shell. Команда ps выводит список процессов, из которого видно, что оболочка tcsh запущена.

Запускать другую оболочку имеет смысл, например, для выполнения в ней сценария, рассчитанного на эту оболочку.
Задания
• Получите список оболочек, установленных на вашей системе.

• Временно запустите оболочку tcsh и выйдите из нее.

• Какая версия оболочки tcsh установлена в вашей системе?

• Поддерживает ли оболочка tcsh GNU-опцию --help?

• Имеется ли в вашей системе какая-либо версия Korn Shell?

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


Все команды GNU/Linux делятся на два больших класса: встроенные и системные. Встроенные команды интерпретируются и выполняются самой оболочкой, а системные команды – это исполняемые файлы.

Встроенные команды представляют собой процедуры оболочки и, следовательно, выполняются быстрее системных команд. Однако одноименные встроенные команды в разных оболочках могут вести себя по-разному. Пример встроенной команды – cd. Она изменяет текущий каталог.

Системные команды обычно находятся в одном из следующих каталогов:
□ /bin;

□ /sbin;

□ /usr/bin;

□ /usr/sbin;

□/usr/local/bin;

□ /usr/local/sbin.
Пользователь может написать свои собственные системные команды и использовать их. Такие команды чаще всего размещаются в домашнем каталоге пользователя или подкаталоге bin домашнего каталога.

Для многих встроенных команд имеются системные аналоги. Например, для встроенной Bash-команды pwd, выводящей имя текущего каталога, имеется системный аналог /bin/pwd. Если команда вызвана без указания пути к ней, то выполняется ее встроенный в оболочку вариант (при его наличии). Если при вызове команды указан путь, то всегда выполняется системная команда.
Задания
• Используя команду is /bin, получите список системных команд. Есть ли среди них знакомые вам команды?

• Выполните встроенную команду pwd –help и системную/bin/pwd – help. Есть ли разница?

• Выполните команду help type. Для чего нужна команда type?

• Является ли команда disable встроенной в оболочку?

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


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

В табл. 3.1 приведены клавиатурные сочетания, которые могут быть использованы при работе в командной строке.
Таблица 3.1.
Клавиатурные сочетания Bash


Клавиши

Действие

+

Курсор влево

+

Курсор вправо

+

Курсор на слово влево

+

Курсор на слово вправо

+

Курсор в начало строки

+

Курсор в конец строки

+

Удаление символа перед курсором

+

Удаление символа в позиции курсора

+

Удаление слова

+

Удаление части строки слева от курсора

+

Удаление части строки справа от курсора

+

Ввод (аналогично нажатию клавиши )

+

Очистка экрана

+

Перемена мест аргументов

+

Перевод слова в верхний регистр

+

Перевод слова в нижний регистр

+

Остановка выполнения команды или сброс командной строки

+

Приостановление выполнения задания

+

Поиск команды в истории


Нажатие комбинации клавиш + приводит к немедленной приостановке активного задания, которое затем может быть переведено в фоновый режим командой bg, либо это задание может быть уничтожено командой kill. О сочетании +, командах kill и bz будет рассказано далее.

В случае если необходимо ввести длинную команду, которая не помещается в одну строку, необходимо воспользоваться символом обратной косой черты \ и продолжить ввод на следующей строке (пример 3.12).
Пример 3.12 Ввод команды с разбивкой на строки

Пример 3.12 демонстрирует ввод команды, разбитой на строки с помощью символа обратной косой черты \. Фактически введена команда is -id/etc, выводящая подробную информацию о каталоге/etc. Знаки "больше", показанные в примере, являются вторичным приглашением командной строки. Они могут быть установлены с помощью переменной окружения PS2.

Наоборот, можно вводить несколько команд в одной строке, разделяя их символом точки с запятой ; (пример 3.13).
Пример 3.13. Ввод нескольких команд в одной командной строке
$ cd /tmp; pwd

/trap
В командной строке, приведенной в примере 3.13, объединены команды cd/tmp и pwd. Первая меняет текущий каталог на/tmp, а вторая – выводит имя текущего каталога.

Если команды отделены друг от друга с помощью двух амперсандов &&, то вторая команда будет выполнена только в случае успешного выполнения первой. Напротив, при необходимости выполнять вторую команду только в случае неудачи первой следует использовать две вертикальные черты | |. Эти синтаксические конструкции оболочки позволяют организовать условное выполнение команд (пример 3.14).
Пример 3.13. Условное выполнение команд

В примере 3.14 первая команда cd/tmp меняет текущий каталог на /tmp. Если эта команда завершается успехом, то выполняется команда pwd, которая выводит имя текущего каталога. Так как первая команда была выполнена успешно (cd), то была запущена вторая команда (pwd).
Задания
• Введите команду Is -FR ~ так, чтобы имя команды, опции и аргументы занимали отдельные строки. То есть каждый элемент командной строки должен быть введен в отдельной строке.

• Выполните команды hostname и date в единой командной строке.

• Есть ли различие в работе команды clear и сочетания клавиш +?

• Введите командную строку/etc Is. Как поменять местами команду и аргумент?

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


Bash предоставляет возможность временного сохранения данных в переменных оболочки. Переменные оболочки размещаются в памяти автоматически при присвоении им значения. Для этого достаточно указать имя переменной, знак равно и строку – значение переменной. В примере 3.15 переменной VAR1 присваивается значение privet I.
Пример 3.15. Переменная оболочки

Для извлечения значения переменной необходимо перед ее именем установить знак доллара $. Команда echo в примере 3.15 получает в качестве аргумента значение, сохраняемое в переменной VAR1, и выводит его на экран.

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

В примере 3.16 команда hostname выводит ту же информацию, которая содержится в переменной hostname. Тем не менее, это совершенно разные объекты.

Если переменная должна содержать строку с пробелами, то строку следует экранировать с помощью одиночных или двойных кавычек (пример 3.17). Другой вариант: перед пробелами можно ставить экранирующий символ обратной косой черты \.
Пример 3.17. Переменная, содержащая строку с пробелом

В примере 3,17 переменная VAR1 содержит строку с пробелом.

Переменным можно присваивать значения других переменных или же их собственные значения, возможно, несколько изменяя их (пример 3.18).
Пример 3.18. Присвоение значения переменной

Переменной VAR1 в примере 3.18 было присвоено значение, составленное из строки Vam vsem и ее собственного старого значения. Пробела между строкой и символом доллара нет.

При необходимости добавления строки к значению переменной имя переменной следует взять в фигурные скобки для отделения имени переменной от последующей строки (пример 3.19).
Пример 3,19. Экранирование имени переменной

Пример 3.19 демонстрирует, как к значению переменной можно добавить строку. Если бы имя переменной не было экранировано с помощью фигурных скобок, то конструкция $VAR1ZZ была интерпретирована Bash неверно.

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

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

Переменные оболочки доступны только в той оболочке, в которой они были описаны. Однако существует способ сделать переменную доступной для дочерних процессов этой оболочки. Для этого необходимо произвести операцию преобразования переменной в переменную окружения с помощью команды export (пример 3.20). Команда export записывает переменную в окружение оболочки, которое копируется в окружение дочерних процессов оболочки. Таким образом, переменные окружения становятся доступными для дочерних процессов.
Пример 3.20. Экспортирование переменной

Переменная VAR1 в примере 3.20 получила значение Privet, а затем экспортирована, т.е. преобразована в переменную окружения. Это сделало ее доступной в дочернем процессе – здесь в порожденной оболочке csh.

Значения всех переменных окружения могут быть получены с помощью команды env.

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


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

Содержимое

НОМЕ

Путь к домашнему каталогу пользователя

LOGNAME и USER

Имя пользователя

MAIL

Путь к почтовому ящику пользователя

PATH

Путь поиска исполняемых файлов

PS1

Вид приглашения оболочки

PWD

Имя текущего каталога

OLDPWD

Имя предыдущего каталога

SHELL

Оболочка, указанная в учетной записи

TERM

Тип терминала

LANG

Тип локализации (локаль)

HOSTNAME

Имя хоста

SHLVL

Номер оболочки (для загружаемой при входе в сеанс – 1, для дочерней – 2 и т.д.)


Переменная окружения PS1 определяет вид приглашения оболочки (пример 3.21). Вид приглашения кодируется специальными символами. Символ \и устанавливает вывод имени пользователя. Символ \w устанавливает вывод имени текущего каталога, а символ \h отображает в строке приглашения Bash имя хоста. В Bash существуют также и другие специальные символы для переменной PS1. Они описаны в документации на Bash.
Пример 3.21. Переменная окружения PS1
[userl@work tmp]$ echo $PS1

[\u@\h \w]\$
При выходе из сеанса установленные значения переменных будут стерты, т. к. оболочка завершит работу. Для автоматической установки при входе в сеанс необходимых значений переменных окружения их следует инициализировать в файлах профиля.

Переменные окружения, общие для всех пользователей, хранятся в файле/etc/profile, а настройки, специфичные для конкретных пользователей, хранятся в одном из файлов домашнего каталога пользователя: либо в ~/.bash_profile, либо ~/.bash_login, либо ~/.profile. Эти файлы выполняются автоматически при каждом входе в сеанс. При ручном запуске оболочки Bash выполняется файл профиля ~/bashrc.

Подробнее о файлах профиля будет рассказано далее.
Задания
• Выполните команду cd && ls -а. Имеются ли в домашнем каталоге файлы профиля?

• Получите, используя переменные окружения, имена текущего каталога и домашнего каталога.

• Создайте новую переменную NEWVAR со значением 1982 и проверьте, доступна ли она в порожденной оболочке.

• Экспортируйте переменную NEWVAR и снова проверьте, доступна ли она в порожденной оболочке.

• Получите списки переменных оболочки и переменных окружения с их значениями. Какой список содержит больше переменных?

История команд


Оболочка Bash предоставляет пользователю возможность повторно выполнять ранее введенные команды. Строки введенных пользователями команд сохраняются в файле ~/.bash_history (в переменной окружения histfile можно указать другой файл – пример 3.22).
Пример 3.22. Переменная окружения HISTFILE

Количество команд, запоминаемых в файле истории, устанавливается с помощью переменной окружения HISTFILESIZE (пример 3.23).
Пример 3.23. Переменная окружения HISTFILESIZE

В примере 3.23 выводится значение переменной окружения HISTFILESIZE. Оно здесь равно 1000. В таком случае в файле истории будет храниться максимум 1000 строк.

Содержимое файла истории можно вывести с помощью команды history (пример 3.24).
Пример 3.24. Команда history

В примере 3.24 показаны лишь последние команды из файла истории. Перед каждой командой из файла истории выводится ее номер, с помощью которого эту команду можно вызвать заново. Наиболее простой способ для этого – ввести в командной строке знак восклицания и номер команды, которую необходимо повторить (пример 3.25).
Пример 3.25. Повторный вызов команды по номеру в истории

Пример 3.25 демонстрирует, как из файла истории была вызвана и выполнена команда с номером 685.

Последнюю выполненную команду можно выполнить снова, если ввести в командной строке два знака восклицания !!.

Очень удобно вызывать из истории команды, вводя после знака восклицания первые символы имен этих команд (пример 3.26). Например, если необходимо вновь выполнить команду is/tmp, отработанную недавно, достаточно ввести в командной строке !l. При этом история команд будет просмотрена с конца до тех пор, пока не будет найдена команда с подходящими первыми символами в ее строке.
Пример 3.26, Вызов команды из файла истории по первым символам в имени

Пользователь вызвал недавно выполненную команду is -d -l/etc, указав после знака восклицания первый символ из ее имени (см. пример 3.26). Если одного символа не достаточно, после знака восклицания можно указывать несколько лидирующих символов из имени требуемой команды.

Можно вызвать команду из истории, указав строку символов, содержащуюся в любом месте командой строки. Для этого следует ввести эту строку после знака восклицания и знака вопроса ! ? (пример 3.27).
Пример 3.27. Вызов команды из истории по подстроке ^командной строки

В примере 3.27 из файла истории была вызвана последняя выполненная команда, содержащая подстроку cho.

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

Аргумент команды fc – строка, с которой начинается искомая в файле истории команда, или номер команды в истории. Найденная команда отображается в редакторе, используемом в системе по умолчанию (обычно это – vi). После редактирования команда исполняется. Для того чтобы отказаться от выполнения найденной команды, следует просто удалить в редакторе всю ее командную строку. Для удаления команды в vi предназначена команда dd, а для выхода – zz.

Исключительно удобное сочетание клавиш + позволяет производить поиск команд в истории по любым символам в командной строке. Нажмите +, и вам будет предложено ввести символы из командной строки, причем найденная команда будет отображаться до того, как она будет исполнена (пример 3.28).
Пример 3.28. Поиск команды в истории с помощью комбинации клавиш +

Пример 3.28 показывает, как производится поиск команды после нажатия комбинации клавиш +. Пользователь ввел два символа из имени команды (не обязательно лидирующие), найденная команда была показана, далее пользователь нажал клавишу , и найденная команда была выполнена.
Заданий
• Выполните последнюю введенную команду заново.

• Пользуясь клавишами управления курсором, найдите в файле истории команду echo и выполните ее.

• Вызовите последнюю введенную команду echo по первым двум буквам ее имени.

• Вызовите команду, содержащую подстроку ho.

• Используя комбинацию клавиш +, выполните команду, у которой в строке была опция -F.

• Выведите полный список команд в файле истории.

• Установите максимальное количество команд в файле истории равным 9999. Сохранится ли это значение при выходе из сеанса?

• В чем отличие команды ! ! и нажатия комбинации клавиш +

?

Автоматическое дополнение командной строки


Bash предоставляет удобный механизм дополнения имен файлов и команд по первым символам их имен. Bash пытается продолжить введенные символы как имя команды или имя файла после нажатия на клавишу <Таb>. Если оболочка не может продолжить имя файла, то выводится звуковой сигнал. Это может происходить по двум причинам:
□ файла или команды с таким именем не существует;

□ имеется несколько вариантов продолжения строки.
Во втором случае при повторном нажатии клавиши табуляции Bash выводит список возможных подстановок, ориентируясь на который, пользователь может ввести еще несколько символов командной строки и снова нажать клавишу табуляции.

Механизм продолжения в Bash действует не только для имен файлов и команд. Если строка начинается с одного из символов: $, ~ или @, то Bash попытается дополнить строку как:
□ имя переменной оболочки ($);

□ имя пользователя (~);

□ имя хоста (@).
Пример 3.29. Продолжение командной строки

В примере 3.29 пользователь начал вводить команду is/etc/sysctl.conf, но после ввода части командной строки is/etc/sys он решил воспользоваться механизмом продолжения имен файлов. После первого нажатия клавиши <Таb> был получен звуковой сигнал, свидетельствующий либо об отсутствии файла, либо о наличии нескольких вариантов продолжения. После второго нажатия клавиши табуляции был получен список продолжений. Далее пользователь может продолжить ввод команды.

Имеется несколько удобных сочетаний клавиш, предназначенных для различных способов продолжения строки команды:
+ – выводит список возможных продолжений строки;

+ – выводит список возможных имен файлов;

+ <~> – выводит список возможных имен пользователей;

+ <@> – выводит список возможных имен хостов;

+<*> – вставляет в командную строку сразу все возможные варианты продолжения;

+ – осуществляет продолжение строки, как имени файла;

+<~> – осуществляет продолжение строки, как имени пользователя;

+<$> – осуществляет продолжение строки, как имени переменной;

+<@> – осуществляет продолжение строки, как имени хоста.
Задания
• Введите команду ls -ld /, а затем получите список всех возможных продолжений командной строки. Подставьте любое возможное продолжение в командную строку и выполните команду.

• Введите ту же команду, но подставив в командную строку все возможные варианты продолжения.

• Получите значение переменной окружения HISTFILESIZE, пользуясь механизмом дополнения имен.

• Получите список всех возможных подстановок имен переменных окружения, начинающихся с символа Р.

• Введите команду ping –с3 и первую букву имени хоста localhost. Получите список всех возможных продолжений имен хостов. Выберите из них localhost и выполните команду.

Псевдонимы команд (aliases)


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

Команда alias, выполненная без аргументов, выводит список всех уже определенных псевдонимов (пример 3.30).
Пример 3.30. Команда alias

Создание нового псевдонима также осуществляется с помощью команды alias (пример 3.31).
Пример 3.31. Создание нового псевдонима



В примере 3.31 создан новый псевдоним с именем lsd, указывающий на команду ls -ld.

Для удаления псевдонима достаточно указать его в качестве аргумента команде unalias. Команда unalias -а удаляет все описанные в оболочке псевдонимы.
Задания
• Получите список псевдонимов, определенных в текущем сеансе. Есть ли среди них известные вам?

• Псевдоним ls выводит имена файлов с пометкой их цветами. Почему при вызове команды /bin/Is этого не происходит?

• Создайте псевдоним If для команды ls -F и выполните команду lf/bin.

• Удалите только что созданный псевдоним.

Командная подстановка


Командная подстановка (command substitution) – это один из мощнейших механизмов Bash. Суть его сводится к тому, что результат выполнения одной команды автоматически передается в качестве аргументов другой команде. Внутренняя команда в командной подстановке должна быть заключена в открывающие обратные кавычки ''. Результаты ее работы автоматически подставляются в командную строку внешней команде. Командная подстановка выглядит следующим образом:
внешняя_команпа 'внутренняя__команда'
Вместо открывающих кавычек " можно использовать конструкцию $ (), т.е.:

внешняя_команда $(внутренняя_команда)
Исследуем в качестве примера две команды: which, которая выводит путь к заданной команде, и ls -l, отображающую подробную информацию о файле. Командная подстановка позволяет выполнить их так, что результат работы which (внутренняя команда) будет подставлен в качестве аргумента команде ls -l (внешняя) – пример 3.32.
Пример 3.32. Командная подстановка

Первая команда, приведенная в примере 3.32, определяет путь к программе rpm – which rpm. Путь /bin/rpm, полученный в результате работы первой команды, вручную подставлен в качестве аргумента команде ls -l, которая выдала информацию об этом исполняемом файле. Последняя команда примера 3.32 демонстрирует командную подстановку: команда ls -l 'which rpm выполняет автоматическую подстановку результатов работы which команде ls -l.
Пример 3.33. Другая форма Командной подстановки

Приведенная в примере 3.33 команда позволила определить, имеются ли в системе все оболочки, зарегистрированные в файле/etc/shells. Для этого был использован механизм командной подстановки, в котором имена файлов оболочек, установленных в системе (содержимое файла/etc/shells), были подставлены, как аргументы команды is -i. В результате была получена подробная информация обо всех исполняемых файлах оболочек.

Результаты, выводимые при работе внутренней команды в командной подстановке, могут быть занесены в переменную, как это продемонстрировано в примере 3.34.
Пример 3.31. Переменные и командная подстановка

Переменная who получила значение с помощью командной подстановки – строку, выведенную командой who.
Задания
• С помощью командной подстановки выведите командой Is -l подробную информацию о самом исполняемом файле команды Is.

• Пользуясь механизмом командной подстановки, получите список процессов в системе, исполняющихся от вашего имени. Для этого следует использовать команду ps -u, выводящую список процессов для заданного пользователя, и команду whoami, выводящую имя текущего пользователя.

• Используйте для этого же варианта синтаксиса командной подстановки с долларом и круглыми скобками.

• Создайте переменную MYGROUP, содержащую информацию о вашей первичной группе. Используйте для этого id -gn.

Вычисление арифметических выражений


В командной строке можно вычислять выражения, заключенные либо в квадратные скобки, либо в двойные круглые скобки (пример 3.35). Перед скобками должен стоять символ $, а результаты выражений можно передавать как аргумент какой-либо команде или назначать переменной.
Пример 3.35. Выселение значения арифметического выражения
$ echo $((192*512))

98304
В примере 3.35 вычислено значение выражения 192*512. Команда echo выводит в стандартный поток вывода строку, указанную в качестве аргумента.

В примере 3.36 продемонстрировано назначение результата арифметического выражения переменной.
Пример 3.36. Назначение вычислительного значения переменной

Переменной v1 присвоено значение 5. Далее производится присвоение переменной V2 результата деления значения v1 на два. В силу того, что в Bash возможно вычисление только целочисленных выражений, то в результате значением стало V2 число 2.
Задания
• Получите десятичное выражение для 16 мегабайт.

• Назначьте это значение переменной MB16. Может ли имя переменной быть таким: 16MB?

• Назначьте переменной TTL значение, соответствующее числу секунд в двух неделях. Выведите ее значение на экран.

• Получите удвоенное значение переменной окружения HISTFILESIZE.

• Попробуйте выполнить команды echo $ ((7%3)) и echo $ ((7%4)). Как вы думаете, что вычислено с помощью этих выражений?

Шаблоны подстановки и перечисление


Оболочки специальным образом интерпретируют некоторые метасимволы, например, *, подставляя вместо них имена файлов. Такие метасимволы называются шаблонами подстановки. Символы подстановки позволяют оболочке произвести поиск файлов, имена которых удовлетворяют шаблону, и подставить их в командную строку.

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

Символ "звездочка" * является шаблоном для любого количества любых символов в именах файлов и даже для их отсутствия. Единственный символ, который не удовлетворяет этому шаблону,– лидирующая точка в именах скрытых файлов. Таким образом, подставив звездочку в качестве аргумента команде echo, мы либо увидим в результате саму звездочку, если в каталоге нет скрытых файлов, либо оболочка подставит команде echo имена всех файлов в каталоге в командную строку и можно будет увидеть список этих файлов (пример 3.37).
Пример 3.37. Шаблон*

В примере 3.37 производится переход в каталог /etc/xinetd.d, в котором есть несколько файлов, имена которых подставляются оболочкой в виде аргументов команде echo, т. к. они удовлетворяют шаблону *.

Имеются особенные имена файлов, начинающиеся с точки, например, .bashrc. Такие файлы называются скрытыми, т. к. их имена не выводятся командой is без специальных опций. Шаблоном для имен скрытых файлов является . * (точка звездочка). Вообще, любые шаблоны для скрытых файлов должны начинаться с символа "точка".

Символ ? заменяет один символ в имени файла, который должен находиться в той позиции, где находится знак вопроса (пример 3.38).
Пример 3.38. Шаблон ?

В примере 3.38 получен список скрытых файлов (имена начинаются с точки), в именах которых после точки имеется шесть любых символов.

Можно еще более сузить диапазон поиска, используя набор символов, заключенных в квадратные скобки. Применение такого шаблона обозначает, что в данном месте должен находиться один любой символ из заданного множества. Для того чтобы указать допустимый диапазон символов в шаблоне, необходимо использовать квадратные скобки, а в них – требуемый диапазон. Например, [0-9] – шаблон подходит для любых цифр, a [a-zA-z] – шаблон для букв английского алфавита в верхнем и нижнем регистрах.
Пример 3.39. Шаблон множества

Пример 3.39 демонстрирует вывод имен скрытых файлов, в именах которых

после точки стоит символ b, с или d.

Если необходимо указать набор символов, не входящих во множество, следует установить знак восклицания после открывающей скобки. Например, [!abc] – множество любых символов, кроме а, b или с.

Очень удобен, хотя и не относится к шаблонам, механизм перечисления Bash. Он позволяет задать множество вариантов, которое должна перебрать оболочка, составляя последовательно все возможные варианты, заданные в фигурных скобках (пример 3.40).
Пример 3.40. Перечисление

В примере 3.40 использован механизм перечисления для обращения к двум файлам: .bashrc и .bash_profile. Имена этих файлов имеют общую подстроку .bash, коротая вынесена за фигурные скобки. В фигурных скобках через запятую перечислены варианты продолжения: rc и _profile.

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

Обратите внимание, что в командной строке, приведенной в примере 3.41. первый перебор {,/usr.} интерпретируется оболочкой, как пустая строка (перед запятой ничего нет) и строка/usr (после запятой). Второй перебор {,s} также дает два варианта: пустую строку и строку s. Таким образом получаются четыре варианта:/bin /sbin /usr/bin /usr/sbin.

Командная строка Bash может содержать даже вложенные структуры, составленные из переборов. Пример 3.42 показывает вложенный перебор.
Пример 3.42. Вложенный перебор

Команда, выполненная в примере 3.42, выводит еще два имени каталогов:/usr/local/bin и /usr/loca/sbin, т.к. в первом переборе появился вложенный перебор {,/local}.
Заданий
• Составьте шаблон для любых имен файлов, вторая буква которых должна быть гласной буквой английского алфавита.

• Как сделать то же, что и в предыдущем задании, но так, чтобы вторая буква не была гласной, а могла быть любым другим символом?

• Как получить с помощью шаблонов все имена файлов длиной шесть символов, последний из которых либо не цифра, либо буква A?

• Проверьте, можно ли использовать символ звездочки внутри квадратных скобок. Если да, то что значит такая конструкция?

• Получите список имен файлов в /etc, имена которых соответствуют шаблону re?., d. Сделайте это с помощью команды echo.

• Сделайте это же с помощью команды ls, а затем с помощью команды Is -d. Почему выводимый список имен файлов отличается?

• С помощью файлового шаблона подстановки и команды echo получите список файлов в каталоге /etc, имена которых начинаются либо с символа х, либо с х.

• Сделайте то же самое, но с помощью командной подстановки.

1   2   3   4   5   6   7   8   9   ...   48

Похожие:

Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconМетодическое пособие для врачей Санкт-Петербург 2007
В. Г. Беспалов, д м н., старший научный сотрудник, руководитель группы химиопрофилактики рака фгу "нии онкологии им. Н. Н. Петрова...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconНовые поступления 2 Сельское хозяйство 2 Общие вопросы сельского хозяйства 2
Агрофизический научно-исследовательский институт (Санкт-Петербург). Материалы координационного совещания Агрофизического института,...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Рабочая программа учебного курса информатики для 4 класса (далее Рабочая программа) составлена на основе программы курса информатики...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Рабочая программа учебного курса информатики для 4 класса (далее Рабочая программа) составлена на основе программы курса информатики...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconСпециальная /коррекционная/ общеобразовательная школа (VII вида)...
Субъект Российской Федерации Санкт-Петербург, в лице Комитета по Образованию Санкт-Петербурга. Место нахождения Учредитель -1: 190000,...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconЭкскурсионные туры в карелию
Санкт- петербург приозерск – ладожское озеро валаам – сортавала – парк «рускеала» олонец александро-свирский монастырь старая ладога...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconDhl открывает новое сервисное отделение в Санкт-Петербурге Санкт-Петербург, 20 марта 2008 г
Санкт-Петербург, 20 марта 2008 г. Компания dhl, мировой лидер в области экспресс-доставки и логистики, расширяет свое присутствие...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconРеферата «г. Санкт-Петербург, как символ новой культуры, великое...
Актуальность темы. Санкт-Петербург один из основных смысловых образов русской культуры. Это город-программа, город-концепция, имеющий...
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconУчебно-методический комплекс по специальности: 080801. 65 Прикладная...
Сетевое администрирование: Учебно-методический комплекс /Автор сост. Г. М. Аванесов спб.: Ивэсэп, 2010
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconТип урока: комбинированный урок с применением икт. Цели
Оборудование: пк, учебники: Тур С. Н., Бокучава Т. П информатика: 2 класс, спб: бхв-петербург, 2008; изображения фигур
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconМосква Санкт-Петербург 2007 Вопросы вокального образования: Методические...
Редактор-составитель – кандидат педагогических наук, профессор рам им. Гнесиных М. С. Агин. М. Спб., 2007
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconРазгрузочно-диетическая терапия (лечебное голодание) и редуцированные...

Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconЧуянова е. В. Уровень свободнорадикального окисления в ферментативной...

Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconПатентам и товарным знакам (19)
Санкт-Петербург, ул. Политехническая, 29, Санкт-Петербургский гту (цпи), С. В. Козыреву
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconРеальное и виртуальноЕ в медиапространстве современности
Санкт-Петербургский Гуманитарный университет профсоюзов, г. Санкт-Петербург, Россия
Алексей Береснев администрирование gnu/Linux с нуля санкт-Петербург «бхв-петербург» 2007 iconЗа 2011 год Санкт-Петербург 2011г
Показатели административных правонарушений по районам Санкт-Петербурга в 2010 году 47


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск