Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 10:

Командные процессоры

< Лекция 9 || Лекция 10: 123456789

Запуск командного процессора

Командный процессор запускается либо при входе пользователя в систему, и в дальнейшем пользователь отдает команды в его командной строке, либо из какой-нибудь программы (по команде пользователя). Частным случаем является запуск командного процессора из другого командного процессора. Например, вы работаете в sh и хотите получить более удобные средства редактирования командной строки ; для этого вызывается bash. Тогда вы просто набираете команду

bash

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

Каждый командный процессор при запуске пытается выполнить свои стартовые файлы, вначале системные (общие для всех пользователей), а затем пользовательские. Общие файлы лежат в /etc, индивидуальные - в домашнем каталоге пользователя. Если командный процессор запускается при входе пользователя в систему (в таком случе он называется login shell - командный процессор, запущенный при входе в систему), то после стартовых файлов он выполняет еще и login-файлы в том же порядке: сначала общий login-файл из /etc, затем - индивидуальный, из домашнего каталога. Login-файлы - это тоже стартовые файлы командного процессора, все стартовые файлы фактически представляют собой скрипты на языке командного процессора и служат для инициализации среды окружения командного процессора для конкретного пользователя. Настройка командного процессора для пользователя позволяет, например, задать короткие псевдонимы для длинных часто используемых команд и т.п.

Некоторые командные процессоры при входе в систему выполняют сначала login-файлы, а затем - стартовые файлы, это зависит от того, как они были скомпилированы.

Таблица 10.3. Стартовые файлы командных процессоров
shell стартовые файлы login-файлы
sh /etc/profile, ~/.profile
csh /etc/csh.cshrc, ~/.cshrc /etc/csh.login, ~/.login
ksh /etc/profile, ~/.profile
bash ~/.bashrc /etc/profile, ~/.bash_profile, ~/.profile

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

Командный процессор bash, в отличие от других, использует более сложный алгоритм выполнения стартовых и login-файлов. Если он запущен как login shell, то он выполняет /etc/profile, если такой файл есть. Затем делается попытка выполнить ~/.bash_profile. Если такого файла нет, bash пытается выполнить файл ~/.bash_login, а если нет и такого файла, то выполняется ~/.profile. Если bash запущен не как login shell, то при старте он выполняет только файл ~/.bashrc. Если же bash был запущен как sh (т.е. sh является символьной ссылкой на bash ), то при старте он ведет себя так же, как и sh.

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

Все командные процессоры запоминают введенные пользователем команды (их список называется историей команд). Во время сеанса работы командный процессор хранит историю команд в памяти, а по окончании работы записывает их в файл на диск. Файл истории команд хранится в домашнем каталоге пользователя. В sh, csh, tcsh он называется ~/.history, в bash - ~/.bash_history, в ksh - ~/.shhistory, а в бесплатной версии Korn Shell (public domain Korn shell - pdksh) его по умолчанию нет вообще.

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

Имейте в виду, что по умолчанию файл истории команд может быть доступен для чтения не только тому, кто вводил команды, но и другим пользователям. Чтобы не сделать систему уязвимой, следует избегать ввода каких бы то ни было паролей в командной строке. Например, возможно вызвать браузер lynx или программу доступа к серверу баз данных mysql, указывая пароль в командной строке:

lynx ftp://user:password@URL
mysql -u root -p password

Так как эти команды сохранятся в файле истории вместе с другими, кто-то потом сможет прочесть их и узнать какие-то из ваших паролей. Файл истории команд ограничен по размеру. По умолчанию, bash хранит 500 команд, tcsh - 1000, csh - 100, sh - в зависимости от версии. Часто sh не создает файл .history вовсе, и дает доступ только к командам, которые были введены в течение текущего сеанса работы с ним. Можно изменить число хранимых команд, указав иное значение переменной, в которой оно хранится.

Таблица 10.4.
shell переменная значение по уполчанию
sh HISTSIZE не определено
csh history 100
ksh HISTSIZE 128
bash HISTFILESIZE 500
< Лекция 9 || Лекция 10: 123456789