Шрифт:
Интервал:
Закладка:
Командой в Linux считается все, что может быть исполнено: исполняемые файлы, встроенные команды оболочки, псевдонимы команд, пользовательские функции, файлы сценариев (скрипты) — заранее подготовленные последовательности команд в текстовом виде. До сих пор, приводя примеры команд, я не различал их по происхождению, и дальше не собираюсь делать этого, кроме особых случаев.
Оболочка принимает вводимые пользователем команды, обрабатывает, если нужно, их аргументы, отправляет команды на выполнение, принимает возвращаемые ими значения и выполняет определенные действия в зависимости от этих значений. Кроме того, в оболочку встроен язык программирования (командный язык), позволяющий писать сложные разветвленные командные сценарии. Именно командный язык отличает разные оболочки друг от друга, и именно из него исходят пользователи, выбирая любимую и нелюбимую оболочки.
Для Linux разработано много командных интерпретаторов. Вот несколько из них:
sh Bourne shell, оболочка Борна, стандарт для многих UNIX-подобных систем;
bash Bourne Again shell, «еще одна оболочка Борна»;
csh С shell, оболочка Си: синтаксис ее командного языка похож на синтаксис языка С;
tcsh tiny С shell, минимальная оболочка Си;
pdksh public domain Korn shell, общедоступная оболочка Корна;
sash stand-alone shell, автономная оболочка, может быть использована в случае, когда программные библиотеки недоступны.
Список всех установленных в системе программ-оболочек находится в файле /etc/shells. У меня он выглядит так:
/bin/sh
/bin/bash
/sbin/nologin # это "оболочка" для тех,
# кому запрещен вход в систему
/bin/ash
/bin/bsh
/bin/ksh
/usr/bin/ksh
/usr/bin/pdksh
/bin/tcsh
/bin/csh
Начальная оболочка для каждого пользователя, запускаемая для него при регистрации в системе, указывается в файле /etc/passwd:
$ grep den /etc/passwd # выбрать из файла строки,
# содержащие подстроку den
den:x:501:501:Denis:/home/den:/bin/bash
В дальнейшем вы можете сменить текущую ободочку на любую из установленных (точнее, войти в подоболочку). Чтобы выйти из нее и вернуться в родительскую оболочку, введите команду exit. В начальной оболочке эта команда завершает сеанс работы.
В любой оболочке можно запускать командные сценарии, состоящие из команд другой оболочки: первая строка каждого сценария содержит указание на то, в какой оболочке его следует выполнять, и текущая оболочка запускает для него указанную как дочерний процесс.
По умолчанию новому пользователю назначается оболочка bash. Это прекрасная оболочка, включающая много усовершенствований и лучших свойств других ободочек, и менять ее я не рекомендую. В дальнейшем, говоря «оболочка», я буду иметь в виду именно bash.
3.4.1. Встроенные команды
Список встроенных команд оболочки bash можно получить по команде help или найти на man-странице в секции SHELL BUILTIN COMMANDS. Напоминаю, что поиск в выводе команды man выполняется командой /<образец><Ввод>, а поиск следующего вхождения образца — по нажатии клавиши <n>.
Справку по команде, имя которой вы знаете, можно получить командой help <имя>.
Вот несколько полезных встроенных команд:
♦ alias <псевдоним> <длинная команда с аргументами> — назначение псевдонима. Без аргументов выводит список всех имеющихся псевдонимов. Обратите внимание, что у пользователя root команда rm сделана псевдонимом для «rm -i», чтобы он не забыл воспользоваться ключом -i (см.п.2.1.4.3). Вы тоже можете назначить псевдоним для опасной команды risk, создав сценарий, который сначала будет спрашивать «а вы уверены?», и только при положительном ответе запускать risk на выполнение. Дайте этому сценарию имя risk, а внутри него ссылайтесь на настоящую команду risk по ее полному пути. Удалить псевдоним из списка можно командой unalias.
♦ echo [аргументы] — вывод аргументов на экран. Полезно, если нужно выполнить подстановку (п.3.4.4) и посмотреть, что получится.
♦ enable <имя_команды> — заставляет оболочку вместо встроенной команды выполнить исполняемый файл с таким же именем. Полезно, если у вас есть собственный сценарий по имени, например, echo.
♦ eval [аргументы] — конструирование команды на лету, из указанных аргументов, и отправка ее на выполнение.
♦ let <переменная>=<арифметическое выражение> — вычисление выражений. Так, команда var= 1 + 2 присвоит переменной var (см. п.3.4.3) значение «1 + 2», а команда let var=1+2 — значение «3».
♦ source <файл> — прочитать и выполнить команды, содержащиеся в файле. Применяется для определения пользовательских переменных и функций (п.3.4.3).
Другие встроенные команды служат инструкциями командного языка bash.
3.4.2. История команд
Оболочка предлагает вам много возможностей для облегчения ввода команд и редактирования командной строки. Помимо функции автозаполнения, с которой вы познакомились в п.1.1.4.7, bash содержит механизм командной истории. Суть его в том, что вводимые вами команды (по умолчанию 1000) запоминаются и доступны для повторного вызова — без изменений или с ними.
Команда history без аргументов выводит всю историю, нумеруя при этом команды в порядке их ввода.
Если вас интересуют только последние несколько команд:
$ history 23 # показать последние 23 команды
Если вас интересуют все команды, имеющие отношение к монтированию каталога public:
$ history | grep mount | grep public
# еще один пример конвейера
Номера команд выводятся для того, чтобы вы могли снова ввести эту команду, набрав
$ ! <номер>
или
$ !! # запускает последнюю из введенных команд
или
$ !<первые_буквы> # запускает последнюю из команд,
# начинающихся с этих букв.
Стрелки «вверх» и «вниз» перемещают по командной истории, не отправляя команду на выполнение, а вводя ее в командную строку для редактирования.
Последнюю команду может для вас отредактировать сама оболочка. Для этого вместо команды введите:
$ ^что_заменить^чем_заменить
Например, вы запросили справку по команде оболочке bash: man bash. Если сразу после этого вы хотите посмотреть справку по оболочке csh, можете вместо man csh набрать
$ ^ba^c
Помните, что замене подлежит первое вхождение подстроки «что_заменить».
Если вы хотите не изменить, а дополнить последнюю команду (например, пропустить ее вывод через фильтр more), введите
$ !! | more
3.4.3. Переменные
Описание и использование переменныхКак любой язык программирования, командный язык bash поддерживает переменные. Тип их — строковый. Оператор присваивания выглядит так:
$ <имя_переменной>=<значение>
Имя должно начинаться с буквы и может состоять из латинских букв, цифр, знака подчеркивания. Если значение переменной содержит специальные символы, их нужно экранировать кавычками или обратным слэшем (см. п. 2.1.1).
Операция подстановки значения переменной обозначается символом $ (не путайте с приглашением bash). Вывести значение переменной можно командой echo:
$ cwd=/home/den/MyDownloads/packages
$ echo cwd # выводит имя переменной
cwd
$ echo $cwd # выводит значение переменной
/home/den/MyDownloads/packages
Установленные таким образом переменные доступны только встроенным командам bash. Чтобы они стали доступны дочерним процессам (программам и командным сценариям, запускаемым из-под bash), их нужно поместить в окружение bash. Делается это командой export:
$ export HELLO="Hello from environment!" # пробел нужно экранировать
Чтобы почувствовать разницу, создайте простейший командный сценарий, выводящий значения двух переменных. Для записи сценария можно создать пустой файл и открыть его в каком-нибудь ASCII-редакторе, а можно вспомнить п.2.1.4 и воспользоваться командой cat:
$ cat > myscript
echo Env variable: $HELLO
echo Local variable: $hello # помните о разнице в регистре?
# Это другая переменная.
^D
$
Комбинация клавиш Ctrl+D завершает ввод и закрывает файл, и вы снова видите приглашение оболочки.
Получившийся файл сценария нужно сделать исполняемым (п.2.1.4):
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение