Операционные системы и сети
Как уже отмечалось, команды в ОС Linux принято передавать либо через командную строку, либо через командное окно (окно терминала). Команды в Linux имеют определенную структуру. Наиболее общий ее вид следующий:
Здесь command означает имя команды, которую вы хотите выполнить, keys — опции, также называемые флагами, а params — параметры. Заметим, что флаги и параметры могут отсутствовать. Обычно команды, опции и параметры разделяются пробелами. Опции команд часто начинаются со знака «-«, за которым следуют одна или несколько букв.
Пользователь набирает команду и затем инициирует ее выполнение нажатием клавиши Enter. Когда вы введете команду ОС Linux, shell сначала прочитает ее имя, а затем проверит, существует ли команда с таким именем. Если такой команды нет, shell выдаст сообщение об ошибке . До нажатия клавиши Enter команду можно редактировать, используя клавиши Backspace и Del (можно исправить ошибки ввода). Комбинация клавиш Ctrl+u позволяет стереть целую строку и ввести ее заново. Если вы по ошибке инициировали выполнение неверной команды, то нажатие комбинации клавиш Ctrl+c немедленно прервет выполнение команды.
В одной строке можно вводить несколько команд, в этом случае они разделяются символом ; (точка с запятой), например, последовательность команд, приведенная ниже, сначала выдаст дату, а затем календарь на текущий месяц.
Рассмотрим команду ls (от англ. list ). Когда она используется без параметров, то выводит список файлов и подкаталогов текущего каталога. Команда ls -l выведет список , содержащий дополнительную информацию о файлах. В качестве параметра данной команды обычно выступают имена файлов или директорий, так команда ls -l /Stud/g5312/ выведет информацию о директории, отведенной для студентов группы 5312 (как правило, для каждого студента группы при регистрации создается поддиректория с именем, совпадающим с пользовательским именем студента, поэтому эта команда позволит получить список входных имен студентов данной группы). Здесь ls — команда , — l — опция , а /home/Stud/g5312 — параметр .
Наверное вы заметили, что не очень удобно было писать команду или имя файла целиком, при этом даже опытный пользователь может допустить ошибку. Чтобы избежать этого, используйте клавишу Tab (табуляция), которая автоматически продолжает команду. Давайте рассмотрим, как с ней работать, на примере команды ls -l /Stud/g5312/ . Наберите начало команды ls -l /St и нажмите Tab , после чего на экране появится продолжение ls -l /Stud/ . Дальнейшее продолжение невозможно, т. к. существует несколько вариантов (чтобы посмотреть все варианты, нажмите табуляцию два раза). При использовании клавиши Tab вы можете быть уверены, что не допустили ошибки при написании имени каталога или файла.
Переадресация ввода и вывода
В ОС Linux все файлы имеют одинаковую структуру — последовательность байтов. Любой файл можно свободно копировать или добавлять к другому файлу, так как все файлы организованы одинаково. Эта организация данных распространяется и на операции ввода и вывода. Данные в операциях ввода и вывода организованы аналогично файлам и все внешние устройства тоже считаются файлами.
Данные, вводимые с клавиатуры, так же, как и данные, выводимые командой или программой, представляют из себя поток байтов. Входной поток данных для программы в ОС Linux называется ее стандартным входом, а выходной поток данных — стандартным выводом.
В ОС Linux широко используется переадресация, которая позволяет, например, перенаправить стандартный вывод так, чтобы информация не отображалась на экране, а записывалась в файл. Для переадресации вывода используется знак > (больше), после которого указывается имя файла, в который направляется вывод, например,
Операция переадресации вывода всегда создает новый файл или перезаписывает существующий. Если же требуется дописать вывод к имеющейся в файле информации, то используется оператор >>. В этом случае данные добавляются в конец файла.
Можно переадресовать и стандартный вход, чтобы входная информация читалась из файла, а не с клавиатуры. Оператор переадресации стандартного входа имеет вид знака < (меньше). Операции переадресации стандартного входа и стандартного выхода можно объединять.
Перемещение по файловой системе
Файловую систему можно представить в виде дерева, только корень (root) этого дерева находится вверху, а ветви растут вниз. Листья этого дерева и есть файлы, а разветвления — каталоги (директории). На следующем рисунке для изображения файлов используются прямоугольники, а для директорий — овалы.
В каждом каталоге (разветвлении) может быть много различных файлов и каталогов. В этом смысле каталог выполняет две важные функции: в каталоге хранятся файлы и каталог соединяется с другими каталогами, как ветвь дерева соединяется с другими ветвями. Каждый каталог может содержать множество каталогов, но сам должен быть потомком только одного каталога.
При входе в систему пользователь оказывается в своей домашней директории , в которой он может создавать файлы, удалять их и копировать. Имя, которое дается каталогу или файлу при его создании, не является полным. Полным именем является его путевое имя. В ОС Linux путевое имя состоит из имен всех каталогов, образующих путь к файлу от вершины дерева (/). Эти имена отделяются друг от друга символами «косая черта» (/, «слеш»). Путевые имена даются и файлам. Фактически имя, которым система обозначает файл, представляет собой комбинацию имени файла с именами каталогов, образующих путь от корневого каталога до каталога данного файла.
Путевые имена могут быть абсолютными и относительными. Абсолютное путевое имя — это полное имя файла или каталога, начинающееся символом корневого каталога. Относительное путевое имя начинается символом текущего (рабочего) каталога и представляет собой обозначение пути к файлу относительно вашего рабочего каталога.
Команда cd (change directory) позволяет перемещаться по файловому дереву, изменяя текущий (рабочий) каталог. В качестве параметра ей можно указать как абсолютный, так и относительный путь каталога. С помощью команды cd DOS вы переместитесь в поддиректорию DOS (если она существует).
Каждый каталог (за исключением корневого) имеет родительский каталог . Две точки, используемые как аргумент команды, обозначают родительский каталог . Например, команда cd . . переместит вас в родительский каталог . Одна точка используется для обозначения текущего каталога.
Если в процессе путешествия по файловому дереву вы «заблудились», то команда cd (без указания параметра) переместит вас в вашу домашнюю директорию. Для перемещения в домашний каталог какого-либо пользователя, можно вместо задания его абсолютного пути использовать символ ~, после которого должно следовать входное имя этого пользователя, например,
Для того чтобы определить, какой каталог является текущим, можно воспользоваться командой pwd.
Введение в курс практических занятий. Знакомство с операционной системой UNIX
В операционной системе UNIX существуют три базовых понятия: «процесс», «файл» и «пользователь». С понятием » пользователь » мы только что уже столкнулись и будем сталкиваться в дальнейшем при изучении работы операционной системы UNIX . Понятие «процесс» характеризует динамическую сторону происходящего в вычислительной системе, оно будет подробно обсуждаться в лекции 2 и в описании последующих семинаров. Понятие » файл » характеризует статическую сторону вычислительной системы.
Из предыдущего опыта работы с вычислительной техникой вы уже имеете некоторое представление о файле, как об именованном наборе данных, хранящемся где-нибудь на магнитных дисках или лентах. Для нашего сегодняшнего обсуждения нам достаточно такого понимания, чтобы разобраться в том, как организована работа с файлами в операционной системе UNIX . Более подробное рассмотрение понятия » файл » и организации файловых систем для операционных систем в целом будет приведено в лекции 11 и лекции 12, а также на семинарах 11–12, посвященных организации файловых систем в UNIX .
Все файлы, доступные в операционной системе UNIX , как и в уже известных вам операционных системах, объединяются в древовидную логическую структуру. Файлы могут объединяться в каталоги или директории. Не существует файлов, которые не входили бы в состав какой-либо директории. Директории в свою очередь могут входить в состав других директорий. Допускается существование пустых директорий, в которые не входит ни один файл , и ни одна другая директория (см. рис. 1–2.1). Среди всех директорий существует только одна директория , которая не входит в состав других директорий – ее принято называть корневой. На настоящем уровне нашего незнания UNIX мы можем заключить, что в файловой системе UNIX присутствует, по крайней мере, два типа файлов: обычные файлы, которые могут содержать тексты программ, исполняемый код , данные и т.д. – их принято называть регулярными файлами, и директории.
Каждому файлу (регулярному или директории) должно быть присвоено имя. В различных версиях операционной системы UNIX существуют те или иные ограничения на построение имени файла. В стандарте POSIX на интерфейс системных вызовов для операционной системы UNIX содержится лишь три явных ограничения:
- Нельзя создавать имена большей длины, чем это предусмотрено операционной системой (для Linux – 255 символов).
- Нельзя использовать символ NUL (не путать с указателем NULL !) – он же символ с нулевым кодом, он же признак конца строки в языке C.
- Нельзя использовать символ ‘/’ .
От себя добавим, что также нежелательно применять символы «звездочка» – «*» , «знак вопроса» – «?» , «кавычка» – «\»» , » апостроф » – «\`» , » пробел » – » » и » обратный слэш» – «\\» (символы записаны в нотации символьных констант языка C).
Единственным исключением является корневая директория , которая всегда имеет имя «/» . Эта же директория по вполне понятным причинам представляет собой единственный файл , который должен иметь уникальное имя во всей файловой системе. Для всех остальных файлов имена должны быть уникальными только в рамках той директории, в которую они непосредственно входят. Каким же образом отличить два файла с именами «aaa.c» , входящими в директории «b» и «d» на рисунке 1–2.1, чтобы было понятно о каком из них идет речь? Здесь на помощь приходит понятие полного имени файла .
Давайте мысленно построим путь от корневой вершины дерева файлов к интересующему нас файлу и выпишем все имена файлов (т.е. узлов дерева), встречающиеся на нашем пути, например, «/ usr b aaa.c» . В этой последовательности первым будет всегда стоять имя корневой директории, а последним – имя интересующего нас файла. Отделим имена узлов друг от друга в этой записи не пробелами, а символами «/» , за исключением имени корневой директории и следующего за ним имени ( «/usr/b/aaa.c» ). Полученная запись однозначно идентифицирует файл во всей логической конструкции файловой системы. Такая запись и получила название полного имени файла .
Понятие о текущей директории. Команда pwd. Относительные имена файлов
Полные имена файлов могут включать в себя достаточно много имен директорий и быть очень длинными, с ними не всегда удобно работать. В то же время, существуют такие понятия как текущая или рабочая директория и относительное имя файла .
Для каждой работающей программы в операционной системе, включая командный интерпретатор ( shell ), который обрабатывает вводимые команды и высвечивает приглашение к их вводу, одна из директорий в логической структуре файловой системы назначается текущей или рабочей для данной программы. Узнать, какая директория является текущей для вашего командного интерпретатора, можно с помощью команды операционной системы pwd .