После загрузки операционная система готова к работе. Под ее управлением можно запускать различные программы системного и прикладного назначения. Большинство пользователей работают с операционной системой не напрямую, а с помощью файловых (типа Norton Commander, Volcov Commander, Far, Dos Navigator и т.п.) или операционных оболочек (типа Windows 3.11, Dos Shell и других.) Но, во-первых, некоторые программы по разным причинам не выполняются при загруженных оболочках. Во-вторых, вследствие большого количества операционных оболочек трудно ориентироваться в них. В-третьих не всегда оболочку можно запустить (например, при временном выходе в операционную систему из выполняемой ей-же программы.) При временном выходе в DOS поверх программы загружается файл Command.com, и оперативной памяти становится недостаточно для работы операционной оболочки. В-четвертых, при сбоях в операционной системе Microsoft Windows95/98 иногда доступна загрузка только в командной строке.
Указанное выше позволяет сделать вывод о необходимости умения пользоваться командной строкой операционной системы. В этой части дается как бы "мультилингва" - описания служебных программ для работы с файлами в операционных системах Microsoft (MS-DOS, MS Windows 95/98/NT), в операционной системе IBM OS/2 и LINUX.
Для более подробной информации смотри документацию к операционным системам.
После загрузки ядра операционной системы (для DOS это файлы Io.sys и MSDOS.sys) загружается так называемая программная оболочка, (или командный файл Command.com для систем MSDOS). В этой программной оболочке (или Shell) находятся интерпретаторы команд операционной системы и переменные окружения. Эти переменные окружения определяют приглашение операционной системы, пути, по котором ищутся вспомогательные файлы и программы, настройки аппаратных средств и опции вывода оглавления каталога.
Для операционной системы MS-DOS существует две оболочки. Первая, выбираемая по умолчанию и входящая в состав дистрибутива этой системы является программа Command.com. Другой оболочкой является входящий в состав Norton Utilites for DOS v. 6.0 - 8.0 оболочка NDOS.com.
Для UNIX - подобных операционных систем используется несколько различных оболочек. В частности, для LINUX наиболее часто используемые оболочки - это Bourne Again Shell (BASH) и TCSH - shell.
Все эти оболочки имеют разные переменные окружения. Описанием этих переменных автор и начнет свой рассказ о командной строке операционных систем.
Также следует отметить, что в [Р. Петерсен. LINUX: руководство по операционной системе //Изд. группа BHV, Киев, 1997. - 688 с.] на странице 446 дается следующая классификация переменных окружения, которой автор и будет придерживаться.
1. Системные переменные - специальные переменные, которые нельзя переопределять.
2. Переопределяемые переменные - специальные переменные, которые можно переопределять.
3. Пользовательские переменные - переменные, присутствие которых в окружении не обязательно.
Итак, перечислим основные переменные окружения MS-DOS:
1. Переменная местонахождения командного процессора COMSPEC.
2. Переменная приглашения командной строки PROMPT.
3. Переменная приглашения командной строки Windows 3.1x (только в MS-DOS v. 6.0 - 6.22) WINPMT.
4. Переменная опций вывода оглавления каталога, действующих по-умолчанию DIRCMD.
5. Переменная путей текущей конфигурации DOS (только для MS-DOS v. 6.0 и старше) CONFIG.
6. Переменная путей для поиска исполняемых файлов PATH.
7. Переменные для каталогов со временными файлами TEMP и TMP.
8. Специальные переменные окружения, требуемые прикладными пакетами.
Примечание: системные переменные графической оболочки Windows здесь не рассматриваются.
В таблице приведены значения по умолчанию для этих переменных окружения.
Таблица C.I. Значения основных переменных MS-DOS по-умолчанию.
Рассмотрим эти переменные по-подробнее:
Системные переменные DOS.
1. Переменная CONFIG определяет, какая из указанных в файлах Config.sys и Autoexec.bat конфигураций в настройке операционной системы активна. Эта опция не несет особого смысла и используется в файле Autoexec.bat в строке goto %config%. В этой строке определяется переход к той или иной последовательности загрузки резидентных программ для заданной конфигурации файла Config.sys. Для пользователя же эта переменная носит чисто информационный характер.
2. Переменная COMSPEC . Указывает путь местонахождения командного файла (или оболочки DOS). Этот путь соответствует пути для командного файла, указанного директивой SHELL в файле Config.sys. Автор считает, что существует только одна причина явно менять эту переменную - в случае перемещения командного файла.
Пример; с дискеты загружается операционная система фирмы Microsoft. С целью обеспечения правильной работы системы при смене дискеты в памяти компьютера создается виртуальный диск размером 2 Мбайта следующей командой файла Config.sys:
DEVICE=RAMDRIVE,SYS 2048 512 128 /E
В файл же Auoexec.bat вставляются следующие строчки:
copy a:\command.com D:\
set comspec=D:\command.com
После этого обращение к командному файлу всегда будет происходить на виртуальный диск D. В дисковод можно вставлять любые дискеты - система на "зависнет".
3. Переменная TZ - устанавливает часовой пояс для рабочей станции, работающей в глобальной сети. Ее синтаксис:
set TZ=zzzhhdst , где
zzz - зона местного времени, hh - отставание от Гринвича, dst - зона "летнего" времени. Так, для Москвы:
SET TZ=EST3EDT
Вообще EST определяет отставание от Гринвича (восточная долгота), PST - опережениеГринвича (западная долгота), а EDT/PDT - учет перехода на летнее время.
Остальные переменные рассматриваются в соответствующих разделах, посвященных различным аспектам работы командной оболочки DOS.
В основном все переменные окружения оболочки MS-DOS определяются с помощью команды SET в файле Autoexec.bat. Исключением являются следующие переменные:
- CONFIG - определяется в файле Config.sys,
- PROMPT - определяется отдельной командой DOS - оболочки,
- PATH - задается отдельно в файле Autoexec.bat.
Команда SET без параметров выдает текущее состояние переменных окружения.
Команда
SET <имя>=<значение>
присваивает переменной с идентификатором <имя> строку <значение>. В строке <значение> делается различие между прописными и строчными буквами, а в имени переменной такого различия нет.
Команда
SET <имя>=
отменяет все значения переменной с идентификатором <имя> и удаляет ее из системного окружения.
Пример:
SET TMP=C:\TMP
присваивает значение переменной TMP, которые старые прикладные программы фирмы Microsoft использовали для определения каталога со временными файлами.
set tmp=C:\TMP
та же команда, набранная строчными буквами.
SET FILE=scandisk.log
переменной FILE присваивается имя файла scandisk.log. Теперь эту переменную можно использовать вместо имени этого файла, например:
type %FILE% | more - выдает поэкранную распечатку файла scandisk.log
Замечание 1. Автор не советует использовать в команде set никаких лишних пробелов, Так, из за указания пробелов перед и после знака "=" в операционной системе MS-DOS v. 6.0 в команде set TMP = C:\TMP переменная TMP у автора не добавилась в окружение DOS. Указание же пробелов после знака "=" при определении переменной PATH в любой операционной системе всегда приводит к очистке этой переменной.
Замечание 2. Задание и сброс переменных окружения возможно только в файле Autoexec.bat и в "чистой" командной строке MS-DOS. Задание же переменных окружения в файловых оболочках не приведет к изменению значений переменных окружения. В операционных же оболочках (и в графических оболочках MS WINDOWS 95/98/NT) изменение переменных окружения произойдет только на текущий сеанс эмуляции MS-DOS).
Переменная PATH определяет пути, по которым будет производится поиск исполняемых файлов, набранных в командной строке или запускаемой из графической оболочки. Это бывает необходимо в следующих случаях:
1. Необходим запуск программы не из ее "родного" каталога, а из каталога, содержащего файлы пользователя, обрабатываемые этой программой. Это наиболее часто используемый случай.
2. Программа использует при своей работе другие программы, расположенные не в ее "родном" каталоге. Эта ситуация часто происходит при работе программ Windows.
Для удобства работы переменная PATH записывается без префикса SET. Ее синтаксис:
PATH=<путь>[{;<путь>}]
Путь можно писать как прописными, так и строчными буквами, без разницы: операционная система все символы приведет к верхнему регистру. Это добавление очень важное! Дело в том, что добавление новых путей к переменной PATH должно производится с указанием путей в верхнем регистре.
Задание PATH или PATH= без путей очищает переменную PATH. Задание же
PATH=<новый_список_путей> приводит к замене существующего значения переменной новым значением, а не добавление нового значения к списку имеющихся.
Добавление новых значений путей к файлам в переменную PATH происходит с помощью команды SET с указанием путей в верхнем регистре. Пример:
SET PATH=%PATH%;C:\TMP
добавляет новый путь в переменную PATH в ее конец.
SET PATH=C:\TMP;%PATH%
добавляет новый путь в переменную PATH в ее начало.
Неправильное использование переменной PATH:
SET PATH=%path%;c:\tmp
SET PATH=c:\tmp;%PATH%
Замечание 1. При запуски файла на исполнение сначала проверяется наличие файла с этим именем в рабочем каталоге, а уже потом - в путях переменной PATH.
Замечание 2. Порядок поиска файла по путям переменной PATH происходит слева направо, в порядке их записи. Поэтому, если существуют несколько исполняемых файлов с одинаковыми именами, но расположенных в разных каталогах, и эти каталоги прописаны в переменной PATH, то при вызове программы на исполнение из произвольного "неродного" каталога запустится программа из каталога, расположенного первым в переменной PATH.
Замечание 3. Переменная PATH задает пути поиска только исполняемых файлов. Для задания пути поиска неисполняемых файлов (например, файлов данных) используется команда Append.
Наиболее часто используются следующие переменные окружения DOS:
TEXT - определяет каталог со служебными файлами Лексикона. Если она не указана, используется каталог с программой lexicon.
CHIFILES - определяет каталог со служебными файлами ChiWriter. Если она не указана, используется каталог с программой cw.
87 - указывает программам, написанных на TurboC и Turbo Pascal, использовать (set 87=Y) или не использовать (set 87=N) команды сопроцессоров i80x87. Если переменная не используется, то инструкции используются только при наличии в системе сопроцессора.
PKTMP - указывает имя каталога, в котором архиватор PKZIP создает свои временные файлы.
INCLUDE - указывает имена каталогов (разделенных ";"), в которых происходит поиск файлов заголовка компилятором Microsoft.
LIB - указывает имена каталогов (разделенных ";"), в которых происходит поиск библиотек и объектных файлов при их сборке в исполняемый файл командой link ("редактор связей").
NC - указывает имена каталогов со служебными файлами Norton Commander. По-умолчанию - каталог с файлом nc,com (nc.exe в более поздних версий).
VC - указывает имена каталогов со служебными файлами Volkov Commander. По умолчанию - каталог с файлом vc.com.
NU - указывает имена каталогов со служебными файлами Norton Utilites. По умолчанию - каталог с файлом norton.exe.
LEX - используется программой для проверки орфографии Micro Spell. Она должна быть обязательно установлена при пользовании этой программой. В противном случае программа выдает ошибку.
ME_PATH - переменная используется для указания каталога с файлами редактора MultiEdit. Ее использование не обязательно - система сама правильно распознает местонахождение этих файлов.
BLASTER - указывает параметры звуковой платы. Пример:
set BLASTER=a330 i9 d1 t2
базовый порт ввода/вывода - 330, ей присвоено аппаратное прерывание IRQ9, она использует канал DMA - 1, тип карты - 2 (совместимая с Sound Blaster Pro). Обычно эта переменная устанавливается в файл Autoexec.bat командой инсталляции драйверов звуковой платы.
TEMP и TMP - переменные, определяющие каталог, в котором программы фирмы Microsoft создают свои временные файлы. Переменная TMP используется старыми приложениями, TEMP - новыми.
В отличие от DOS и его оболочек количество переменных окружения в LINUX значительно больше. Это объясняется тем, что UNIX - подобные системы были специально разработаны для работы со строкой приглашения операционной системы. С помощью этого приглашения и встроенных в UNIX стандартных команд в ней можно писать настоящие программы, содержащими даже условные выражения и циклы!
Различные разработчики UNIX - подобных операционных систем создали не только разные ядра и прикладные программы для этих операционных систем, но и разные оболочки. LINUX впитала лучшее из этих разработок, и в настоящее время поддерживает следующие оболочки: Bourne Again Shell (BASH), Public Domain Korn Shell (PDKSH) и TC - Shell (TCSH). Они в свою очередь являются потомками Korn - Shell и C = Shell. Не смотря на различия в реализации этих командных оболочек в UNIX - подобных операционных системах, в LINUX между ними больше сходства, чем различий. Это понятно - они реализованы в рамках одной операционной системы для Intel - совместимых компьютеров. К рассмотрению переменных в этих оболочках мы и приступим.
По умолчанию в LINUX применяется BASH. Но по желанию пользователь может загрузить другую оболочку. Все они вызываются "одна поверх другой", расходуя память компьютера. В отличие от Command.com и NDOS.com, каждая новая оболочка загружается с параметрами по-умолчанию, а текущие установки сбрасываются. Так же, как и в DOS, при возврате в предыдущую оболочку все переопределенные переменные очищаются. Для "наследования" переменных (то есть сохранения настроек части переменных предыдущих оболочек в последующих) в LINUX используются команды export в BASH и setenv в TCSH, о которых будет сказано ниже.
Синтаксис определения переменной в BASH следующий:
<имя_переменной>=<константа>
В качестве константы используется так называемая символьная константа - набор ASCII - символов, заключенных в двойные кавычки (как в языке Си, на котором написана данная операционная система). Регистр букв, набранных как в имени переменной, так и в константе, существен. Так, в отличие от DOS, переменные me, ME и Me различны! Пример определения переменной:
myfile="List"
В этом примере переменной myfile присваивается строка List. Теперь переменную myfile можно использовать вместо строки List. В качестве примера приводим следующие фрагменты команд, набранных в командном приглашении.
ls > $myfile
echo "Printing $myfile..."
lpr $myfile
В этом примере вначале создается оглавление каталога (команда ls, см. ???), которое перенаправляется в файл List. После этого на экран выводится сообщение:
Printing List...
и на принтервыдается содержание файла List (т.е оглавления текущего каталога, см. первую команду). Заметим, что перед использованием переменной перед ней ставится знак доллара, указывающий, что вместо символов (в данном случае myfile) используется строковая переменная.
Для назначения переменной нового значения используется та же конструкция:
<имя_переменной>=<новое_значение>
где новое значение - константа.
Для отмены назначения переменной и удаления этой переменной из окружения используется команда unset. Например,
unset myfile
удаляет из окружения переменную myfile.
Вывод текущих значений переменных выдается с помощью команды set, а только специальных переменных окружения - командой env.
Экспорт переменной в другую оболочку осуществляется в BASH с помощью команды export. Ее синтаксис:
export <имя_переменной>[{<имя_переменной>}]
т.е. представляет из себя команду и список экспортируемых переменных, разделенную пробелами. Переменные перед этим должны быть определены.
Переменная HOME.
Переменная HOME определяет путевое имя Вашего начального каталога. Этот каталог автоматически создается при создании администратором Ваших учетных данных, а этой переменной назначается правильное значение этого каталога. Эта переменная используется в том случае, когда нужно задать путевое имя начального каталога. Например, пусть переменной HOME присвоено значение /home/yuri. Тогда следующая команда:
cd $HOME/letters
приведет к переходу в каталог /homr/yuri/letters.
Переменная LOGNAME .
Данная переменная содержит Ваше регистрационное имя. Так, для пользователя yuri значение этой переменной будет yuri. Ее следует использовать в тех случаях, когда надо указать регистрационное имя.
Переменная TZ
Эта переменная определяет часовой пояс, используемый в системе.
Для Москвы:
TZ=EST3EDT
Значение по-умолчанию -
TZ=PST8PDT
Задание зоны аналогично для переменной TZ в DOS.
Переменная SHELL
В операционной системе LINUX при регистрации можно использовать три оболочки (см. введение к разделу "Переменные BASH". Переменная SHELL определяет оболочку, загружаемую по умолчанию. В качестве строки передается каталог с файлами оболочки. Пример:
SHELL=/bin/bash
задает в качестве оболочки, загружаемой по-умолчанию, BASH.
SHELL=/bin/pdksh
задает в качестве оболочки, загружаемой по-умолчанию, PDKSH-shell.
SHELL=/bin/tcsh
задает в качестве оболочки, загружаемой по-умолчанию, TCSH.
Заметим, что смена оболочки произойдет не сразу, а только после перезагрузки системы.
Переменная PATH
Данная переменная содержит имена каталогов, в котором содержатся выполняемые программы. При записи программы на исполнение в каталогах, заданных этой переменной, ищутся файлы с данным именем, а после нахождения этого имени оно "достраивается" до полного имени и только после этого запускается на выполнение. В отличие от DOS, если текущий каталог не указан в переменной PATH, из него также нельзя запускать файлы.
В переменной PATH все каталоги записываются без пробелов, а разделяются знаком ":" (двоеточие). Знак двоеточие в конце означает текущий каталог. В переменную PATH обязательно необходимо включать имена каталогов /usr/bin и /usr/sbin. По-умолчанию переменная PATH выглядит так:
PATH=/usr/bin:/usr/sbin:
то есть в ней указаны вышеперечисленные каталоги и рабочий каталог.
Добавление в переменную PATH новых каталогов происходит, как показано в следующем примере:
PATH=$PATH:$HOME:
В данном примере в конец списка каталогов PATH добавляется домашний каталог.
Переменные PS1 и PS2
Данные переменные определяют вид приглашения операционной системы: основной и дополнительный.
Переменные MAIL и MAILCHECK
В операционную систему LINUX встроена возможность использования электронной почты, которая для других операционных систем реализована с помощью дополнительных программных пакетов. Однако для того, чтобы электронная почта могла функционировать, системе должно быть указано местоположение почтового ящика, В этот почтовый ящик, который есть у каждого пользователя LINUX, система помещает поступившие на его имя сообщения. Обычно почтовый ящик создается при создании учетных данных пользователя, и система автоматически прописывает это имя в своих файлах конфигурации.
Однако это местоположение можно поменять. Для этого существует переменная MAIL. В переменной MAIL указывается путь для основного почтового ящика. Поскольку у каждого пользователя должен быть хотя бы один почтовый ящик, эта переменная должна присутствовать обязательно.
Переменная MAILCHECK задает промежуток времени, по истечении которого система будет предупреждать Вас о получении почты. По-умолчанию этот промежуток устанавливается в 600 секунд (10 минут). Время указывается в секундах.
Пример использования переменных для управления электронной почтой:
MAIL=/var/mail/yuri
MAILCHECK=1200
В данном примере основной почтовый ящик переназначается в каталог /var/mail/yuri, уведомление о поступившей почте будет посылаться каждые 1200 секунд (20 минут).
В BASH существуют так называемые дополнительные режимы работы оболочки. Это внутренние переменные, значения которых можно устанавливать или сбрасывать. Включение режима осуществляется командой
set -o <режим>
а выключение - командой
set +o <режим>
Перечислим основные режимы BASH:
Режим ignoreeof
Этот режим блокирования возможности выхода из оболочки с помощью комбинации клавиш Ctrl+d. Выход из оболочки с установленной опцией возможен только по команде exit. Этот режим используется для перестраховки при использовании комбинации клавиш Ctrl+d, которая часто используется и в других программах.
Режим noclobber
Данный режим используется для предотвращения записи новых файлов поверх существующих при переадресации вывода. В приведенном примере вторая команда при включенном режиме noclobber выдаст ошибку. Третья же команда ошибки не выдаст. Если файл myfile создается впервые, первая команда также не выдаст сообщения об ошибке.
ls > myfile
ls -l > myfile
ls -l >> myfile
О переадресации ввода и вывода смотри C.3.3.
Режим noglob
Режим используется для блокирования специальных символов регулярных выражений, используемых в шаблонах: *, ?, ~, [, ]. В данном режиме эти символы можно использовать в именах файлов. Например, допустимым будет имя файла Why? . Однако использование регулярных выражений будет запрещено!
Переменная MAILPATH
Эта переменная используется для указания путей для поиска дополнительных почтовых ящиков. Как уже указывалось в разделе C.2.3.5., в системе для каждого пользователя должен быть создан хотя бы один почтовый ящик. Однако не возбраняется каждому пользователю иметь несколько дополнительных почтовых ящиков, местонахождение которых и определяется этой переменной. Однако данная переменная не создается автоматически при создании учетных данных пользователя, и должна определяться отдельно.
В приведенном ниже примере задается путь для дополнительного почтового ящика, находящегося в директории /home/mail/yuri, если значение переменной LOGNAME равно yuri:
MAILPATH=/home/mail/$LOGNAME
Переменная CDPATH
Аналога этой переменной нет в не UNIX-подобных операционных системах. С помощью этой переменной определяются каталоги, в которых команда cd ищет подкаталоги. Пусть, например, фрагмент дерева каталогов в LINUX системе такой:
задана переменная CDPATH:
CDPATH=/home/yuri/mail
и текущим является каталог /home/yuri/letters/old. Тогда следующая команда:
cd myletters
вызовет не ошибку, как при отсутствии переменной CDPATH, а вызовет переход в каталог /home/yuri/mail/myletters. Команда же
cd old
вызовет ошибку, так как путь к директории /home/yuri/letters не прописан в пути CDPATH.
Пользоваться этой переменной следует с осторожностью! Дело в том, что если указать в переменной CDPATH каталоги, имеющие подкаталоги с одинаковыми именами, то действие команды cd не предсказуемо!
Переменная TERM
Переменная определяет тип подключенного терминала. Эта информация нужна таким программам, как стандартные редакторы для определения режима ввода/вывода. Дело в том, что на разных терминалах (или консоли, как этот термин расшифровывается в MS-DOS) существуют различные раскладки клавиатуры, различные кодировки и виды символов. Как правило, если Вы регистрируетесь в системе с терминала, она сама правильно определяет его тип. Однако если Вам надо явно указать его вид, необходимо явно указать его значение. Аналогом этой переменной в DOS могут служить команды mode, chcp, keyb, программы - русификаторы экрана и клавиатуры и другие программы, управляющие переназначением клавиш и управляющие выводом символов на экран.
Переменная EXINIT
Данная переменная содержит команды, позволяющие конфигурировать редакторы Ex и Vi. Когда Вы вызываете эти редакторы, команды, указанные в переменной EXINIT, выполняются. Команды пишутся в одну строку, в кавычках. Опции с одинаковым префиксом записываются подряд.
Назад | Содержание | Вперед