Практическая работа по предмету UNIX

В формате MS Word 97 

	Что такое UNIX? 

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

В более широком смысле под UNIX понимают не только ядро, но и такие важные компоненты, как компиляторы, редакторы, программы копирования и печати файлов. Сюда даже относят языки управления заданиями (командные языки). UNIX может также включать, созданные Вами или другими пользователями программы, предназначенные для подготовки документации, статистического анализа или, скажем, "графические" средства и т. д.

Это и обуславливает широкое распространение и многообразие версий системы UNIX. Но все их объединяет единая концепция. Поэтому, изучив основы одной версии, Вы сможете разобраться и в любой другой, тем более что в каждой версии системы UNIX есть справочное руководство, описывающее именно эту версию. (Вы будете работать в системе MINIX - она наиболее удобна для начинающих, но часто речь будет идти именно о семействе систем UNIX).

Однако, несмотря на то, что тонкости каждой версии Вы в состоянии изучить самостоятельно, при ознакомлении с основами нужна некоторая помощь.

Итак, UNIX это многозадачная, многопользовательская операционная система. Это означает, что много людей может одновременно использовать один компьютер, выполняя много различных задач. (Это существенное отличие от MS-DOS, где только один человек может использовать в данный момент операционную систему). 

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

В традиционных UNIX-системах имя и начальный пароль Вам присвоит системный администратор при Вашей регистрации в системе (при заведении в системе нового пользователя). Системный администратор (root) - это особый пользователь, который организовывает работу системы: он имеет полный доступ к любому файлу системы, регистрирует новых пользователей и имеет право выполнять специальные программы (например, создания файловой системы); при появлении новых версий, при необходимости, модернизирует отдельные части системы (в DOS предпочтительнее работать на последней версии системы), а главное адаптирует систему в соответствии с требованиями конкретных пользователей. 

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

Вход в систему.

Прежде чем начать работу с UNIX, как и с любой другой системой, надо:

Включить компьютер. На экране должно появится приглашение, содержащее слово login. 

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

Если и это не сработает, то следует обратиться к преподавателю. 

После того как на экране появится приглашение, Вы должны ввести Ваше имя в системе и нажать клавишу ENTER. (Помните: UNIX различает прописные и строчные буквы). 

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

В том случае, если Вы ввели пароль неправильно, на экране появиться сообщение

login incorrect

и новое приглашение.

	Простейшие команды. 

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

Если это так, то попробуйте ввести команду 

date

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

Попробуйте ввести команду

who

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

Вы можете поэкспериментировать и с такой командой 

who am i

Система сообщит Вам Ваше системное имя (как пользователя), системное имя используемого устройства связи, дату и время Вашего входа в систему.

Если Вы ошибетесь и введете имя несуществующей команды, то система ответит, что команда с этим именем не найдена.

Например: $ WHO 

WHO: not found

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

	Типы команд и примеры их использования. 

Обратите внимание, что команды в UNIX имеют определенную структуру. Наиболее общий вид ее следующий:

command stuff 

где command – имя команды, а stuff – аргументы команды. 

Аргументы бывают разные: опции (иначе флаги) и параметры. Заметьте, что вместо stuff может ничего и не быть. (Помните команды, которые Вы вводили). 

Обычно команды, опции и параметры разделяются пробелами.

	Команды с опциями.

Большинство команд используются с аргументами называемыми опциями (флагами), уточняющими, что должна делать команда. Различные команды имеют различные опции, но способ их использования одинаков: после имени команды ставится пробел, затем знак "-" и одна или несколько букв обозначающих опцию.

Введите 

cd /

и давайте, например, рассмотрим команду ls.

	Если набрать команду 

ls

и нажать клавишу ENTER, то на экран выведется список файлов и подкаталогов текущего каталога.

	Если набрать команду 

ls -l

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

Можно использовать несколько опций одновременно.

	Если Вы наберете команду 

ls -lt

т. е. добавите еще опцию -t, то названия файлов будут выведены не только с дополнительной информацией, но и отсортированы по времени.

Как правило, символ "-" не печатается перед каждой опцией и сами опции записываются слитно. 

	Команды с параметрами.

Второй тип команд – это команды с параметрами. Параметрами могут быть имя пользователя, принтера, файла и т.п. Это та дополнительная информация, которая необходима для выполнения команды в конкретной ситуации.

Продолжим пример с командой ls.

	Наберите 

ls -l etc

– на экране будет выведена информация о директории etc.

	Если Вы наберете через пробел несколько имен файлов: 

ls -l .exrc .profile 

то система выдаст Вам информацию о двух файлах .exrc и .profile, если они существуют в текущем каталоге (в том, в котором Вы находитесь в данный момент). В случае, если файла в текущем каталоге нет, например, Вы ошибочно набрали

ls -l exrc

то на экране Вы увидите надпись 

ls: exrc: No such file or directory

(Нет такого файла или директории)

Когда параметры различны, они используются несколько иначе.

	Давайте рассмотрим это на примере команды lp, которая используется для распечатки файлов на принтере. В отличие от приведенных выше, это абстрактная команда - в системе MINIX указанные опции не применяются, но она дает хорошее представление о том, как можно употреблять несколько опций и параметров: 

lp -dpsdoc -onobanner myfile

Здесь команда lp используется с двумя опциями и тремя параметрами. После опции -d должен следовать параметр, который представляет собой имя принтера в данном случае это psdoc; за опцией -о, используемой для установки нескольких параметров, в данном случае следует параметр nobanner, который указывает принтеру, что не надо печатать banner page (титульный лист, в котором указывается имя пользователя, время и дата печати, имя используемого принтера). Последний параметр, употребляемый без опции, означает имя файла, который следует распечатать.

Заметьте, что пробел между опцией и ее параметром не нужен, хотя и может присутствовать.

Если Вы все же ввели эту команду, то не удивляйтесь - система выдаст Вам следующее: 

lp: -dpsdoc:No such file or directory

lp: -onobanner: No such file or directory

lp: myfile: No such file or directory

ведь команда lp в MINIX не имеет опций, а ее параметрами являются имена файлов.

	Некоторые дополнительные приемы использования команд.

Оговорим также некоторые дополнительные приемы использования команд:

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

Вы можете написать сразу несколько команд. Например, 

cd /usr; ls; date

(каталог /usr станет текущим и на экран будет выведен список файлов и подкаталогов каталога /usr, а также информация о дате и времени) или

date; ls –la

(Вы увидите информацию о дате и времени и обо всех файлах и подкаталогах каталога /usr).

Вы можете передать результат выполнения команды другим командным файлам или устройствам. Попробуйте вывести информацию о дате и времени не на экран, а в файл с названием vrem с помощью командной строки 

cd; date > vrem

Проверьте результат выполнения команды, набрав 

cat vrem 

	Если команда не выполняется. 

Что делать в том случае, если Ваша команда не выполняется? Существует ряд причин, из-за которых это может произойти. 

Если после ввода команды, Вы получили сообщение следующего вида: 

<имя команды>: not found

то это означает, что команда не найдена.

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

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

Для просмотра РАТН напечатайте: 

echo $PATH.

Результат работы команды показывает, в каких каталогах производится поиск. (Для разделения каталогов в РАТН используется двоеточие.)

Если команда, которую Вы хотите выполнить, содержится в другом каталоге, тогда Вы должны добавить этот каталог в РАТН. Для этого нужно набрать РАТН= и перечислить через двоеточие все каталоги, в которых необходимо производить поиск. Давайте зададим такой путь поиска

РАТН=.:/usr/local/bin:/bin

Не забудьте нажать клавишу ENTER.

Попробуйте теперь ввести команду

ls

система ответит Вам 

ls: not found

С другой стороны, Вы можете запустить команду, находящуюся в каталоге, которого нет в РАТН, напечатав полное имя, включая ее местонахождение. Например,

/usr/ bin/ls

или

/usr/ bin/ls /usr/ bin

Обратите внимание на то, что, во-первых, если команда находится в двух каталогах, и оба они указаны в РАТН, то UNIX запустит команду из каталога, который стоит первым по порядку в РАТН. (Например, если команда находится в Х и Y из РАТН = .:/X:/been:/Y, то запуск будет производиться из X); во-вторых, в отличие от DOS, UNIX не ищет команду в корневом каталоге автоматически.

Давайте все же восстановим путь поиска команд: 

РАТН=.:/usr/local/bin:/bin:/usr/bin

Он позволяет осуществлять поиск в корневом каталоге и каталогах /usr/local/bin, /bin, /usr/bin. Проверьте выполняется ли теперь команда ls.

Еще одна причина невыполнения введенной команды – отсутствие прав на использование данной команды или некоторых ее опций, иначе говоря, прав доступа. В таком случае система Вам выдает сообщение о невозможности выполнить команду. Это могут быть следующие сообщения cannot execut (не может быть запущена), permission denied (обращение запрещено), no permission to … (нет доступа к …). Проверьте это, введя команду 

date 000000

на экране появится строка

No permission to set time 

(нет доступа к установке времени), т.к. правом использования этой команды обладает лишь root-пользватель.

Возможна и другая ситуация. Попробуйте ввести такую команду

cp /etc/mtab /etc/m1

она должна скопировать файл mtab каталога /etc в файл m1того же каталога, но Вы получите сообщение 

cp: m1: Permission denied

(обращение запрещено). Дело в том, что Вы не имеете права копировать файлы в каталог /etc.

	Использование простейших команд.

Теперь давайте попробуем выполнить несколько общедоступных безобидных команд – это должно придать Вам чувство уверенности при работе с командами UNIX.

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

В первом случае (после ввода команды uname) система выдает Вам информацию об имени системы. Когда же Вы вводите команду 

uname -а

то на экране появляются следующие сведения: имя системы, сетевой адрес компьютера, версия системы, тип машины.

Хотите узнать, в какой день недели произошло Ледовое побоище или родились Ваши родители, а может Вам интересно как выглядел календарь первого месяца первого года нашей эры?

Воспользуйтесь командой cal (вывод календаря на экран). Задав в качестве параметров номер месяца и четырехзначный номер года (от 1 до 9999), Вы сможете увидеть на экране календарь этого месяца. Если номер месяца опустить, то UNIX выведет на экран календарь этого года. Так в какой день недели мы встретим 21 век? (Надеюсь, Вы не забыли, что команды и параметры разделяются пробелами.)

Если Вы забудете указать аргументы:

cal

то система напомнит Вам об этом, указав правильный формат команды

Usage: cal [mounth] year

(Употребление: cal [месяц] год).

Если Вы неправильно укажете параметр:

cal feb 1

то увидите на экране надпись Bad argument (неверный аргумент)

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

banner UNIX

Можно использовать кавычки. Командная строка должна выглядеть примерно так:

banner ’ UNIX’

Сравните результаты. 

	Как навести справку о команде. 

В системах UNIX – сотни команд. Узнать, как работают все команды, возможно только в процессе кропотливой, долговременной работы в конкретной системе UNIX (не забывайте обо всем многообразии версий).

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

Самая старая и все еще самая важная справочная информация находится в "man page". Man page (сокращение от manual page - страница руководства) содержит сведения обо всех командах и отдельных компонентах UNIX. Страницы справки хороши тем, что, во-первых, в них ясно показаны все опции данной команды, причем для каждой имеется отдельное описание; во-вторых, справочная система обновляется всякий раз, когда программисты изменяют команды UNIX.

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

man date

выводит на экран справку о команде date. Движение по тексту справки осуществляется с помощью клавиши ENTER и клавиш стрелка-вверх, стрелка-вниз. Для выхода из справки и возвращения в оболочку UNIX следует нажать клавишу Q.

Страница справки для команд имеет следующие разделы:

- NAME (имя) содержит имя команды и краткое описание.

- SYNOPSIS (конспект) показывает команду со всеми опциями и параметрами, которые Вы можете использовать.

- DESCRIPTION (описание) описывает, как используется команда, а также каждая опция этой команды.

- OPTIONS (опции) содержит имя опции и ее краткое описание.

- EXAMPLES (примеры) приводит примеры использования команды.

- SEE ALSO (смотрите также) содержит список связанных команд, если они есть.

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

Вы, наверное, обратили внимание, что в верхних углах страницы-справки стоит имя компонента, о котором наводиться справка, а рядом в скобках – цифра (возможно, цифра и буква). Эта цифра показывает, что данный компонент принадлежит разделу с этим номером. А т.к. в каждом разделе справочной системы содержатся лишь компоненты одного типа, т.е. либо команды общего назначения (раздел 1), либо системные команды (раздел 1М), либо устройства (раздел 7) и т.д., то таким образом номер раздела указывает Вам, какое место занимает данный компонент в иерархии системы UNIX.

В системе MINIX разделы справки организованы следующим образом:

	Пользовательские команды. 

Команды общего пользования такие как ls, man, who, banner, cal.

	Системные вызовы. 

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

	Библиотека программ. 

Программы высокого уровня, написанные на языке Си.

	Файлы устройств. 

Описание устройств каталога /dev.

	Форматы файлов. 

Форматы файлов различных утилит и программ.

	Игры. 

	Разное. 

Различные дополнения.

	Системные утилиты. 

Команды системного администратора.

	Документы. 

Более детальное руководство по некоторым программам.

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

	Виртуальные консоли 

Системная консоль - это монитор и клавиатура, связанные непосредственно с системой. (Поскольку UNIX многопользовательская система, Вы можете иметь дополнительные терминалы, связанные через последовательные порты с вашей системой, но они не будут консолями). MINIX, как и некоторые другие версии UNIX, обеспечивает доступ к виртуальным консолям (или VC), которые позволяют войти в систему под несколькими именами в одно время.

Нажмите клавишу F2, удерживая нажатой клавишу Аlt. Вы должны снова увидеть приглашение, содержащее слово login. Это вторая виртуальная консоль.

Вы вошли через первую. Чтобы переключиться обратно на первую VC, нажмите комбинацию клавиш Аlt и F1. 

MINIX позволит вам работать с четырьмя VC, используя клавиши F1- F4 в комбинации с клавишей Аlt. Как видите, использование VC может быть очень эффективным - Вы можете работать на нескольких VC одновременно. (Пока Вы работаете на VC №1, Вы можете переключиться на VC №2 и начать работу над чем-то другим).

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

	Краткая информация о командах, встречающихся в этой практической работе. 

ИМЯ

banner - печатает аргументы крупными буквами.

СИНТАКСИС

banner arg ...

ОПИСАНИЕ

banner печатает параметры на stdout, используя матрицы 6x6 пикселей на символ. 

ПРИМЕР

banner happy birthday

-печатает крупными буквами на экране строку happy birthday

ИМЯ

сal -вывод календаря

СИНТАКСИС

сal [месяц] год

ОПИСАНИЕ

сal печатает календарь месяца или года. Год задается цифрами от 1 до 9999. Обратитe внимание, что год 91 не является синонимом года 1991. 

ПРИМЕР

сal 3 1992 

-печатает календарь марта 1992

ИМЯ 

cd -изменяет текущий рабочий каталог. СИНТАКСИС cd [имя каталога] 

ОПИСАНИЕ

cd делает указанный каталог текущим рабочим каталогом; cd осуществляет переход в личный каталог; cd .. осуществляет переход в родительский каталог. ПРИМЕР cd /usr – делает каталог /usr текущим. 

ИМЯ

cat -объединяет файлы и пишет их в стандартный выходной поток

СИНТАКСИС

cat [-u] [имя файла] ... 

ОПЦИИ

-u небуферизованный вывод

ОПИСАНИЕ

cat объединяет исходные файлы и копирует результат в стандартный выходной поток. Если имя файла не задано или файл с указанным именем не существует, то используется стандартный входной поток. Вывод производится блоками по 512 байтов, если флаг -u не установлен. Если Вы хотите только скопировать файл, то нужно использовать cp - это быстрее.

ПРИМЕРЫ

cat file 

-выводит файл file на экран 

cat file1 file2 | lpr

-объединяет 2 файла file1, file2 и печатает результат

ИМЯ

date - печатает или устанавливает дату и время

СИНТАКСИС

date [-qsu] [[MMDDYY] hhmm [ss]] [+ формат]

ОПЦИИ

-q читает дату из стандартного входного потока; 

-s устанавливает время;

-u печатает дату ПО ГРИНВИЧУ;

-t устанавливает заданное число секунд в текущее время.

ОПИСАНИЕ

С флагом -q или числовыми параметрами, date устанавливает время ПО ГРИНВИЧУ и дату. MMDDYY задает месяц, день, год; hhmmss задает часы, минуты и секунды. Каждое из шести полей должно содержать точно две цифры. date всегда отображает дату и время в формате, заданном по умолчанию в системе. Флаг -u запрашивает время ПО ГРИНВИЧУ вместо местного времени. 

Формат может быть определен дополнительно следующими опциями:

%% символ %

%A название дня

%B название месяца

%D mm/dd/yy

%H Десятичный час на 2 цифры

%I Десятичный модуль часа 12 на 2 цифры

%M Десятичная минута на 2 цифры

%S Десятичные секунды на 2 цифры

%T HH: MM: SS

%U Десятичный номер недели, воскресенье является первым днем недели

%W Десятичный номер недели, понедельник является первым днем недели

ПРИМЕРЫ

date 

-печатает дату и время

date 0221921610 

-устанавливает дату 21 февраля, 1992 4:10 пополудни.

ИМЯ 

ls -выдает информацию о файлах в каталоге. СИНТАКСИС ls [имя файла] ... ОПЦИИ: 

-a выводит имена всех файлов и подкаталогов, включая . и .. -l выводит информацию о типе файла (обычный, каталог или специальный), правах на его использование, владельце, размере, дате последнего изменения (или создания) по столбцам. 

-t выводит список файлов, отсортированный по датам их последнего изменения (или создания). ОПИСАНИЕ 

ls выдает список имен файлов и подкаталогов текущего каталога. ПРИМЕР 

ls -а /home/larry

- выдает список всех файлов и подкаталогов каталога /home/larry . 

ИМЯ

lp - копирует файл на принтер 

СИНТАКСИС

lp [имя файла]...

ОПИСАНИЕ

посылаeт заданные файлы на принтер для печати. Если имена файлов опущены, то на печать выводится стандартный входной поток. Файлы печатаются в том порядке, в котором они перечислены. 

ПРИМЕР

lp myfile youfile

- вызывает печать файлов myfile и youfile

ИМЯ man -выдает страницу Руководства по данной команде или ресурсу. СИНТАКСИС man <command> ОПИСАНИЕ man выводит на экран страницу Справочного Руководства по заданной команде или ресурсу (здесь "ресурс" - это любая системная утилита, которая не является командой, например библиотечная функция). ПРИМЕР man ls -выдает справку по команде ls. 

ИМЯ 

uname - выдача имени используемой UNIX-системы

СИНТАКСИС 

		uname [-a]

	ОПИСАНИЕ

Команда uname выдает на стандартный вывод имя используемой UNIX-системы. Опция -a позволяет получать следующую информацию: имя системы, имя узла (то есть имя, под которым система известна в коммуникационной сети), наименование версии операционной системы, наименование модификации операционной системы, наименование используемого компьютера. ПРИМЕР 

uname -a

- выдает на экран имя системы, в которой Вы работаете, имя узла (то есть имя, под которым система известна в коммуникационной сети), наименование версии операционной системы, наименование модификации операционной системы, наименование используемого компьютера.

ИМЯ 

who - выдает информацию о том, кто работает в системе.

СИНТАКСИС 

		who	

		who  am i

ОПИСАНИЕ

Команда who в первом столбце указывает имя пользователя, во втором – системное имя используемого устройства связи, затем – дату и время входа в систему для каждого из пользователей, работающих в системе UNIX. 

Команда who с опцией am i идентифицирует обратившегося к ней пользователя. 

ПРИМЕР 

who am i

-сообщает имя обратившегося к ней пользователя, системное имя используемого устройства связи, затем – дату и время входа в систему.

	Выход из системы. 

Для завершения работы в системе наберите команду 

shutdown

на экране появится надпись 

The system will shutdown now (Система будет выключена сейчас)

System Halted (Система остановлена)

hd3a _

Для выхода из системы Вам необходимо ввести команду 

exit

После этого питание компьютера можно отключить. 

В формате MS Word 97 

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

Во многих операционных системах (включая UNIX) существует концепция файла, по которой его можно рассматривать просто, как набор информации, которому дано имя. Примерами файлов будут: программа, которая может выполняться, письмо, полученное по электронной почте, написанная Вами статья. Существенно то, что все, что хранится на диске, хранится в отдельных файлах.

Все, с чем работает система UNIX, она воспринимает в виде файла. Файловая система – это ключевое звено, обеспечивающее успешное применение UNIX.

Типы файлов 

В UNIX существуют различные виды файлов, включая файлы данных, выполняемые файлы и специальные файлы. 

Файлы данных 

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

Итак, к файлам данных относятся файлы, которые содержат информацию и создаются приложениями и прикладными программами.

Форматы хранения данных. 

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

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

cat /bin/echo

Существуют еще и ASCII-файлы (их также называют текстовые файлы). Этот вид файлов не содержит непонятные коды, а содержит символы, которые человек может читать, то есть буквы и цифры. Аббревиатура ASCII означает Американский стандартный Код для Информационного обмена. 

Примером текстового файла может служить файл .profile. Чтобы увидеть его содержание введите команду

cat /.profile

Несмотря на видимое преимущество ASCII – файлов, которое состоит в том, что множество программ могут читать их без преобразования, и это, несомненно, облегчает обмен файлами между людьми, использующими различные программы; этот вид файлов имеет недостаток – формат, в котором записана Ваша информация, не сохраняется, т.е. если Вы используете различные шрифты, делаете отступы и другие операции форматирования, то все эти характеристики будут потеряны, если Вы сохраните информацию как ASCII-файл. 

Многие программы могут хранить данные как в двоичном виде, так и в виде кодов ASCII, следует лишь указать соответствующие параметры. UNIX позволяет сохранять информацию и в том и в другом виде. 

Выполняемые файлы. 

Второй тип файлов – выполняемые. Как и файлы данных, выполняемые файлы могут записываться и в двоичном и в ASCII форматах. К выполняемым файлам относятся файлы, содержащие различные программы и команды. Некоторые маленькие программы, выполняющие одну конкретную задачу, называются командами. Эти маленькие программы имеют и другое название - утилиты. Большинство команд UNIX хранятся в каталоге /usr/bin. Чтобы просмотреть список этих команд, наберите

ls /usr/bin

(большая часть этих файлов сохранена в двоичном формате). Есть особые команды называемые скриптами shell. Скрипт shell – это файл, который содержит вызов одной или нескольких команд. Запуск скрипта shell приводит к выполнению этих команд (такие файлы хранятся в ASCII – формате). Наберите, к примеру, команду

whereis cal

она определит местонахождение файла cal. На самом деле это маленький скрипт. Вы можете увидеть его содержание, напечатав

cat /usr/bin/whereis

Любой файл является выполняемым, если после ввода его имени и нажатия клавиши ENTER, что-нибудь будет выполняться в системе.

Файлы устройств 

Кроме вышеназванных, существуют также специальные файлы устройств. 

Вы помните, что в отличие от DOS, все, с чем работает UNIX, является файлом. Поэтому в UNIX и любое специальное устройство представлено файлом, который используется при обращении к этому устройству (т.е. доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства). Например, в UNIX параллельный порт (куда обычно подсоединяется принтер) называется /dev/lp. Это означает что в каталоге dev существует файл lp. И когда Вы посылаете файлу lp информацию, то она не сохраняется на жестком диске, а отправляется на принтер. 

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

Специальные файлы устройств содержатся в каталоге /dev. В UNIX различают символьные (character) и блочные (block) файлы устройств. Символьные файлы устройств используются для небуферизованного обмена данными с устройством, в противоположность этому блочные файлы позволяют производить обмен данными в виде пакетов фиксированной длины - блоков. Доступ к некоторым устройствам может осуществляться как через символьные, так и через блочные специальные файлы.

Чтобы просмотреть список специальных файлов устройств, введите 

ls /dev

Блочными файлами представлены, например, жесткие диски, а символьными - терминалы и принтеры. Если Вы введете команду 

ls -l /dev

то в начале каждой строки подробного списка файлов устройств увидите либо символ с - он означает, что файл символьный, либо b, означающий блочный файл. В пятой колонке вместо размера файла указаны два числа, называемые верхним и нижним числами устройства. Верхнее число устройства обозначает его тип, а нижнее - различные экземпляры устройств одного типа.

Файлы связей. Создание файлов связей.

1.5.1. Жесткие связи.

UNIX позволяет одному физическому файлу иметь несколько имен в файловой системе. Заметьте, что имя файла является атрибутом файловой системы, а не набора данных на диске, который не имеет имени как такового; а имеет связанные с ним метаданные, содержащие все характеристики файла и позволяющие операционной системе выполнять открытие, прочтение, запись данных, создание или удаление файла. Связь имени файла с его данными называется жесткой связью. Для создания жесткой связи используют команду ln. Например, для создания еще одного имени (second) файла, на который уже указывает имя first используют команду

ln first second

Жесткие связи абсолютно равноправны. Доказательством этого служит то, что при использовании команды 

ls -l

атрибуты файлов first и second first будут абсолютно одинаковыми. 

Хотя с точки зрения пользователя это два разных файла, изменения внесенные в каждый из этих файлов затронут и другой, ведь имена ссылаются на одни и те же данные файла. Вы можете переместить один из файлов в другой каталог - все равно они будут связаны жесткой связью с данными файла. Легко проверить, что удаление одного из файлов first, second не приведет к удалению самого файла; для этого нужно удалить все связи. Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями можно получить из списка файлов, который выдает команда ls -l:

…

-rw-r--r-- 2 andrei stuff 7245 Jan 17 8:05 second

-rw-r--r-- 2 andrei stuff 7245 Jan 17 8:05 first

…

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

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

Однако давайте все же создадим жесткую связь к файлу . profile (проверьте его наличие в текущем каталоге командой ls, а в случае отсутствия выберите любой из существующих файлов):

ln . profile pr1

Команда

ls -l

убедит Вас, что Вы создали жесткую связь - в списке файлов текущего каталога две строки (.profile и pr1) отличаются лишь названиями файлов.

Попробуйте использовать опцию -v команды ln. Она выводит на экран сообщение о том, что делает команда ln

ln -v .profile pr2

В этом случае результатом работы опции -v будет строка:

ln .profile pr2

означающая, что создана связь pr2 к файлу .profile. А вот, если Вы еще раз введете эту же команду (ln -v .profile pr2), сообщение опции -v будет иным:

ln .profile pr2: File exists

Оно означает, что файл pr2 уже существует.

В том случае, если Вы указываете в качестве имени файла связи имя уже существующего файла, то связь создана не будет. Убедитесь в этом, набрав следующие команды:

ln .kermrc pr2

(Вы хотите создать файл связи pr2 к файлу .kermrc). Но система тут же выдает Вам сообщение

ln .kermrc pr2: File exists

(Файл существует).

ls -l

показывает, что pr2 по-прежнему является жесткой связью к файлу .profile.

1.5.2. Символические связи.

Особым типом файла является символическая связь. В отличие от жесткой связи, символическая связь ссылается не на данные файла, а на его имя. Данные файла, являющегося символической связью, содержат только имя целевого файла.

Команда ln -s создает символическую ссылку на указанный файл. Например, команда 

ln -s first symsecond

создает для файла first файл символической связи symsecond. Сравнить созданные файлы поможет команда ls -l

…

-rw- r- - r - - 2 andrei stuff 7245 Jan 17 8:05 second

-rw- r- - r - - 2 andrei stuff 7245 Jan 17 8:05 first

lrwxrwxrwx 1 andrei stuff 6 Jan 17 8:05 symsecond /first

…

Как Вы видите, файл symsecond (символьная связь) существенно отличается от файла second (жесткая связь). Во-первых, фактическое содержание файла symsecond отнюдь не то же, что и у файла first или second, об этом говорит размер файла байт - ровно столько, сколько занимает имя файла, на который символическая связь ссылается. Во-вторых, файл symsecond не имеет никаких ограничений на доступ - очевидно права доступа к файлу символической связи определяются правами доступа к файлу, на который он ссылается (в нашем примере правами файла first). Также строка файла символьной связи содержит указатель на тип файла (l) в начале строки и имя файла, на который данный файл ссылается. Кроме всего прочего система работает с файлами символьных связей не как с обычными файлами. Например, при выводе на экран содержимого файла symsecond появятся данные файла first.

У команды ln в системе MINIX к сожалению нет опции -s, создающей символическую связь, но зато есть опция -r, которая позволяет создавать жесткие связи к каталогу и всем его файлам и подкаталогам. Об этой опции мы поговорим позже, когда научимся создавать каталоги.

Получение информации о файлах. 

Как узнать тип файла.

UNIX позволяет выяснить тип файла командой file. Она сообщит Вам, является ли файл выполняемым (executable), файлом ASCII, файлом данных и т.д. Однако обратите внимание, что Вы находитесь в корневом каталоге, и команда file требует указания полного имени файла. Если Вы введете неполное имя файла (без указания пути к нему), то команда выполнена не будет, система сообщит Вам cannot start (не могу начать).

Например: 1) file /usr/bin/clr

file /clr 

clr: cannot start

file /usr 

Существует и другая возможность узнать тип файла. Вы уже встречались с командой ls (Вспоминайте, что делает эта команда?) и даже использовали опцию этой команды. Оказывается, у команды ls есть множество полезных опций (посмотрите в man page) и среди них – опция -F, которая позволяет получить информацию о типе файла. Чтобы увидеть, как она работает, введите следующую командную строку: 

ls -F /

В выведенном на экран списке файлов и каталогов после их имен появились новые значки – это проделки опции -F. 

Давайте разберемся с их значениями: 

/ наклонная черта указывает на каталог,

* означает выполняемый файл,

@ означает файл связи,

если значок отсутствует, то это обычный файл (к таким файлам относятся текстовые файлы, бинарные данные, исполняемые программы – в общем, те файлы, содержимое которых интерпретируется прикладной программой, обрабатывающей файл).

Попробуйте для обычных файлов использовать команду file

file /.exrc

file /rty

Другoй пример использования опции –F :

ls -F /usr/bin/

Как получить полную информацию о файле.

Но самую полную информацию о файлах дает опция -l все той же команды ls (Вы с ней уже встречались, так что вспоминайте).

Опция -l показывает тип файла (файл (-), каталог (d) или ссылка (l), символьный файл устройства(c), блочный файл устройства (b)), права, число жестких связей, владельца, группу, размер, дату последнего изменения (или создания) и в том случае, если это символьная связь, отображает имя связанного файла. Попробуйте ввести: 

ls -l /

ls -l /dev

Каталоги и подкаталоги. 

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

Таким образом, каталог – это файл, содержащий имена находящихся в нем файлов. 

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

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

Возвращаясь к примеру с письмами, Вы можете в Вашем основном каталоге организовать подкаталоги, в каждый из которых будете заносить корреспонденцию лишь для одного адресата. Где Вы скорей найдете нужный файл среди нескольких файлов или среди нескольких десятков файлов? 

Просмотр имеющихся каталогов.

Думаю, что Вы уже согласились с удобством такой системы. Но ведь кроме создаваемых Вами файлов в UNIX уже существует множество различных файлов. Как организованы они? Какие файлы в каких каталогах находятся? 

Вы уже встречались с командой UNIX ls (означает list – список). Эта команда позволяет вывести на экран список файлов и подкаталогов текущего каталога. Попытайтесь ввести следующие команды: 

ls

на экране появится список файлов и подкаталогов текущего каталога. 

ls /bin

список файлов и каталогов каталога /bin. 

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

ls -а

список всех файлов и каталогов текущего каталога. 

ls –а /bin 

список всех файлов и подкаталогов каталога /bin. 

ls /

список всех файлов и каталогов корневого каталога (наклонная черта "/" используется для обозначения корневого каталога). 

Другая полезная команда – cd (change directory). Она позволяет изменять текущий каталог.

сd /bin

теперь Вы находитесь в каталоге /bin. 

Если Вы ошибетесь и неправильно укажете имя каталога 

сd bin

то на экране появится надпись

сd: can’t cd to bin

(система не может изменить текущий каталог на каталог bin).

Эти две команды дают возможность исследовать файловую систему. Давайте введем следующие команды: 

cd /

корневой каталог станет текущим. 

ls

на экране появится список всех файлов и подкаталогов корневого каталога. 

cd bin

каталог /bin станет текущим. 

ls -a 

на экране появится список всех файлов и каталогов каталога /bin. 

cd /dev

каталог /dev станет текущим. 

ls 

на экране появится список файлов и подкаталогов каталога /dev. 

cd

команда cd возвратит Вас в Ваш личный каталог (Вы ведь регистрировались при входе систему, поэтому UNIX знает, кто Вы и где находится Ваш личный каталог). 

Создание каталогов.

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

Для создания каталога используется команда mkdir. Предположим, что Вы хотите создать каталог myficat , тогда Вам следует напечатать 

mkdir myficat

и нажать клавишу ENTER. Чтобы убедиться в том, что каталог действительно создан, воспользуйтесь уже хорошо известной Вам командой ls. (Введите ls). Среди файлов и подкаталогов Вашего личного каталога Вы должны найти имя myficat.

Сейчас, когда Вы создали свой первый каталог, давайте сделаем его текущим и создадим еще несколько. Очевидно, что они будут являться подкаталогами Вашего каталога myficat.

Для этого введите следующие команды:

cd myficat 

каталог myficat станет текущим;

mkdir myfpc

будет создан подкаталог myfpc;

mkdir myspc

будет создан подкаталог myspc;

mkdir mytpc

будет создан подкаталог mytpc.

А чтобы убедиться, что подкаталоги созданы, введите команду ls.

Теперь пришло время вспомнить опцию -r команды ln. Вы уже создали свой собственный каталог myficat и его подкаталоги myfpc, myspc, mytpc. Давайте в каталоге mytpc создадим файл vrem:

cd mytpc

date > vrem

и используем опцию -r команды ln для создания жестких связей к каталогу myficat, его подкаталогам и файлу.

cd

ln -vr myficat mfc

Т.к. Вы использовали и опцию -v, то на экране появились строки, поясняющие, что сделала команда ln:

mkdir mfc

mkdir mfc/myfpc

mkdir mfc/myspc

mkdir mfc/mytpc

ln myficat/mytpc/vrem mfc/mytpc/vrem

Во-первых, она создала каталог mfc. В этом каталоге создала подкаталоги с теми же именами, что и в каталоге myficat (т.е. в том каталоге, к которому создается связь). И, наконец, создала жесткую связь к файлу vrem, находящемуся в подкаталоге mytpc, в новом подкаталоге mfc/mytpc опять же используя его прежнее имя. 

Команда

ls -l

показывает, что новый каталог mfc создан и ничем не отличается от каталога myficat.

Дерево каталогов. 

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

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

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

Большинство систем UNIX имеет стандартную структуру каталогов. Подкаталоги корневого каталога "/'' относятся к числу важнейших подкаталогов: среди них /bin, /etc, /dev, и /usr. Эти каталоги в свою очередь содержат другие каталоги, которые содержат системные конфигурационные файлы, программы и т.д.

В частности, каждый пользователь имеет личный (домашний) каталог, который выделяется пользователю для хранения его файлов. Обычно пользовательский личный каталог находится под каталогом /home и называется именем пользователя. Когда Вы входите в систему, Вы автоматически оказываетесь в своем личном каталоге. В системе MINIX Ваш личный каталог является подкаталогом каталога /usr и носит название /usr/<имя пользователя>.

Итак, давайте рассмотрим дерево каталогов типичной файловой системы UNIX. Оно даст вам некоторое представление о том, как организовано дерево каталогов в Вашей системе.





Исследование дерева каталогов системы MINIX.

В формате MS Word 97 

Распределение файлов в основных каталогах.

Мы уже выяснили, что для упрощения работы с файлами существуют каталоги. Но каталогов в UNIX тоже большое количество. Как же ориентироваться среди каталогов? Оказывается, каждый основной каталог UNIX имеет свое общепринятое название и общепринятое назначение. Чем лучше Вы разберетесь в иерархии файлов и каталогов, тем более эффективно сможете ими пользоваться. 

Ниже приводится лишь краткий перечень основных каталогов:

/bin это сокращение от "binaries'' (т.е. двоичные или выполняемые файлы), в этом каталоге находятся программы наиболее часто употребляемых команд и утилит, как правило, общего пользования. Когда, например, Вы используете команду date, Вы выполняете программу /bin/date. Используйте команду ls –F /bin чтобы просмотреть список, имеющихся здесь файлов. Большинство (если не все) файлов в /bin имеют справа от имени звездочку ("*"). Это говорит о том, что файлы выполняемые. 

/dev здесь хранятся специальные файлы устройств, использующиеся для доступа к устройствам и ресурсам системы, таким как диски, модемы, память и т.д. Подкаталоги этого каталога группируют специальные файлы устройств одного типа. Например, /dev/dsk хранит специальные файлы устройств для доступа к гибким и жестким дискам системы. 

Вот перечень некоторых из наиболее используемых файлов устройств.

/dev/console/ относится к системной консоли, т.е. к монитору, напрямую связанному с системой. 

Различные файлы устройств /dev/ttyS и /dev/cua используются для доступа к последовательным портам. Например, /dev/ttyS0 относится к COM1 под MS-DOS. Файлы устройств /dev/cua относятся к "звонящим" ("callout") устройствам, которые используются совместно с модемами. 

Файлы устройств, имена которых начинаются с hd, имеют доступ к жестким дискам. /dev/hda относится ко всему первому жесткому диску, а hda1 только к первому разделу /dev/hda. 

Файлы устройств с именами, начинающимися на fd - это доступ к дисководам гибких дисков. fd0 - первый дисковод, fd1 - второй. 

Файлы устройств lp обеспечивают доступ к параллельным портам. /dev/lp0 относится к LPT1 в MS-DOS. 

/dev/null используется как "черная дыра" - любые данные, посланные сюда, канут в Лету. Если Вы хотите подавить вывод команды на экран, Вы можете перенаправить этот вывод в /dev/null. 

Файлы устройств с именами /dev/tty относятся к "виртуальным консолям" Вашей системы. /dev/tty1 соответствует первой VC, /dev/tty2 соответствует второй и т.д. 

/etc содержит множество всевозможных системных файлов конфигурации. Они включают /etc/passwd (файл паролей), /etc/rc (командный файл инициализации) и т.д. /lib включает библиотечные файлы языка Си и других языков программирования. Вместо того, чтобы каждая программа имела свою собственную копию этих выполняемых файлов, они хранятся в одном общедоступном месте - в /lib. Это позволяет сделать выполняемые файлы меньше и экономит место в системе. 

/home в этом каталоге обычно хранятся личные каталоги пользователей. Например, /home/larry - домашний каталог пользователя "larry".

/lost-found это каталог "потерянных" файлов. Сюда помещаются файлы, которые сохранили свое содержимое и структуру, но утратили имя в каком-либо каталоге вследствие неправильного останова UNIX или аппаратных сбоев.

/tmp каталог хранения временных файлов, создаваемых при выполнении программы. Многие программы нуждаются в создании рабочих файлов, которые нужны короткое время. Каноническое место для этих файлов в /tmp. Например, когда Вы пользуетесь редактором, то он создает в этом каталоге копию файла, что позволяет не работать с оригиналом и в случае аварии избежать создания в Вашем личном каталоге ненужного файла. /usr это очень важный каталог. В этом каталоге находятся подкаталоги различных сервисных подсистем – системы печати, электронной почты и т.д. (/usr/spool/), файлы утилит UNIX (/usr/bin), дополнительные программы, используемые на данном компьютере (usr/local), электронное справочное руководство (/usr/man), справочная информация (/usr/adm). Большинство вещей, содержащихся в /usr необязательны для системы. Но это такие необязательные вещи, которые делают систему полезной и интересной. /usr содержит много больших программных пакетов и конфигурационных файлов, которые их сопровождают. /usr/bin настоящее хранилище для различных программ UNIX. Он содержит большинство выполняемых программ, которых нет ни в каких других местах, например, в том же /bin их нет. /usr/etc точно также, как и /etc, содержит всевозможные системные программы и конфигурационные файлы. /usr/etc содержит даже больше утилит и файлов. В общем, файлы, находящиеся в /usr/etc несущественны для системы, в отличие от тех, которые находятся в /etc, и очень существенны. /usr/man этот каталог содержит страницы справочного руководства. Здесь два подкаталога для каждого раздела руководства. Например, /usr/man/man1 содержит исходные тексты (неотформатированный оригинал) страниц руководства в разделе 1 и /usr/man/cat1 содержит отформатированные страницы для раздела 1. /usr/spool содержит файлы, которые предварительно формируются для других программ. Например, если Ваша машина подключена к сети, входная почта будет помещаться в /usr/spool/mail до тех пор, пока вы не прочитаете ее или не удалите. Входящие и исходящие новости помещаются в /usr/spool/news и т.д. /usr/adm содержит различные файлы, интересные системному администратору, специфические системные файлы, фиксирующие ошибки и проблемы, возникающие в системе. Другие файлы фиксируют входы в систему, как и неудачные попытки войти. /var содержит каталоги, которые часто меняются в размере или имеют тенденцию быстро расти. В некоторых версиях UNIX используется вместо /usr/spool. 

В формате MS Word 97 

Копирование, переименование и перемещение файлов. 

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

	В UNIX все эти проблемы решают команды cp (copy - копировать) и mv (move - перемещать).

Копирование файлов. 

Копирование одиночного файла. 

Для копирования одиночного файла используется команда

cp <имя файла1> <имя файла2 >,

где файл1 – файл, который Вы копируете, а файл2 – файл, в который Вы копируете. 

Скопируйте, например, файл .profile, находящийся в Вашем личном каталоге, для чего введите команду

cp .profile pro

Команда 

ls -l

продемонстрирует Вам, что Вы создали файл pro, который является копией файла .profile. 

Обратите внимание, что, копируя файлы, Вы должны соблюдать осторожность при выборе имен файлов, т.к. команда cp не будет предупреждать Вас, что файл, в который Вы копируете уже существует, а просто заменит его новым: 

cp .kermrc pro

Команда 

ls –l

покажет, что файл pro - копия .profile исчез, а это имя теперь носит копия файла .kermrc.

Однако в разных каталогах можно использовать одинаковые имена файлов.

Копирование нескольких файлов. 

Команда cp позволяет скопировать и несколько файлов одновременно. В этом случае синтаксис команды cp следующий:

cp <имя файла1>… <имя файла N > <имя каталога >,

где файл1 … файл N – копируемые файлы, а последний аргумент является каталогом, в который Вы копируете.

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

cp .kermrc .profile newcat

Вы увидите следующее сообщение:

Usage: cp file1 file2

cp file… dir

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

Поэтому давайте создадим новый каталог в Вашем личном каталоге:

mkdir newcat

Проверьте, появился ли каталог newcat с помощью команды 

ls –F

Среди файлов и подкаталогов текущего каталога Вы должны найти имя newcat, отмеченное косой чертой / (помните, что это значит?).

Теперь, когда каталог создан, можно повторить попытку копирования файлов:

cp .kermrc .profile newcat

На этот раз она должна быть более удачной, проверим это:

cd newcat; ls -а

Команда ls -а вывела на экран список файлов текущего каталога newcat – это файлы .kermrc и .profile.

При копировании нескольких файлов можно использовать шаблоны. Давайте создадим еще один подкаталог Вашего личного каталога:

cd; mkdir secnew

В подкаталоге newcat создадим файлы

echo 'hello' >hel; date>vrem1

А теперь с помощью шаблона * скопируем в подкаталог secnew все файлы подкаталога newcat:

cp newcat/* secnew

Проверьте результаты нашей работы, введя уже знакомые Вам команды:

cd secnew; ls -а

Не удивляйтесь, что не скопировались файлы .kermrc .profile - их имена начинаются с точки, а шаблон * не задает таких имен. (Для задания подобных имен используют шаблон .*)

Копирование файлов и подкаталогов. 

Опция -r команды cp позволяет копировать файлы в каталоге, включая любое количество подкаталогов и входящих в них файлов.

Попробуйте скопировать все файлы и подкаталоги каталога newcat в каталог thnew. Для этого введите следующие команды

cd

cp -r newcat thnew

Команды 

cd thnew

ls –Fa

убедят Вас, что все получилось.

Опция -r также разрешает использовать шаблоны. Командная строка

cd; mkdir fornew; cp -r * fornew 

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

cd fornew 

ls –Fa

Если Вы употребите команду cp без -r, то использование шаблона * приведет лишь к копированию файлов текущего каталога:

cd; mkdir finew

cp * finew

эта команда копирует все файлы Вашего личного каталога в подкаталог finew, исключая все подкаталоги. Когда cp встречает каталог, она выдает сообщение:

cp: fornew: Is a directory

…

(fornew: это каталог). Команды 

cd finew 

ls –Fa

докажут Вам, что скопированы лишь файлы.

Вы можете также скопировать и любой подкаталог 

cp -r fornew sixnew

Команда 

ls –l

укажет Вам, что созданный каталог sixnew является копией каталога fornew.

Перемещение файлов и каталогов. 

Перемещение файлов. 

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

mv <имя файла> <имя каталога>,

здесь, очевидно, первый параметр - имя файла, который Вы перемещаете, а второй - имя существующего каталога, в который Вы перемещаете.

Выведите на экран список файлов и подкаталогов Вашего личного каталога и подкаталога secnew с помощью командной строки:

cd; ls -a . secnew

Заметьте, что файл .profile существует в Вашем личном каталоге, а в подкаталоге secnew такого файла нет. Команда 

mv .profile secnew

переместит файл .profile в каталог secnew. А команда

ls -a . secnew 

подтвердит выполнение команды mv.

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

mv secnew/.profile .

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

ls -a . secnew

С помощью команды mv можно переместить и несколько файлов, но опять же лишь в существующий каталог. Давайте переместим файлы hel и vrem из подкаталога secnew в Ваш личный каталог, для чего используем команду

mv secnew/hel secnew/vrem .

и проверим, что файлы перемещены 

ls -a . secnew

Обратите внимание, что, если до перемещения файлов, в каталоге существуют файлы, имена которых совпадают с именами перемещаемых файлов, то после перемещения такие файлы будут уничтожены, и команда mv не предупредит Вас об этом. 

Чтобы убедиться в вышесказанном введите следующие команды:

cd secnew; echo hi>hel

Вы создали файл hel в каталоге secnew.

ls . newcat; cat hel; cat newcat/hel

Вы вывели на экран списки файлов и подкаталогов каталогов secnew и newcat, а также содержимое файла hel каталога secnew и файла hel каталога newcat.

mv hel newcat; cat newcat/hel

Вы переместили файл hel из каталога secnew в каталог newcat и вывели на экран содержимое файла hel каталога newcat.

Перемещение каталогов. 

Команда mv позволяет также перемещать каталоги со всеми их файлами и подкаталогами. В этом случае вместо имени перемещаемого файла указывается имя каталога. Для перемещения подкаталога newcat в подкаталог secnew используйте команду

mv newcat secnew

Чтобы увидеть результат, лучше воспользоваться следующей командой:

ls -aF secnew .

Использование шаблонов. 

Для перемещения файлов разрешается использовать шаблоны. Попробуйте переместить все файлы подкаталога secnew в новый каталог. Сначала создайте каталог ctmv - в него Вы переместите файлы и проверьте, что каталог создан:

cd; mkdir ctmv; ls -F . secnew ctmv

А затем воспользуйтесь шаблоном *:

mv secnew/* ctmv

Команда

ls -F secnew ctmv

позволит увидеть изменения, произошедшие в каталогах secnew и ctmv.

Переименование файлов.

В формате MS Word 97 

Работа с shell. 

Интерпретатор shell - это наиболее важная программа для пользователей UNIX, быть может, за исключением текстового редактора. Она исполняет запросы на запуск программ и предоставляет дополнительные возможности использования имеющихся команд и даже написания собственных. С некоторыми свойствами shell Вы уже знакомы. Одно из них способность ссылаться сразу более чем на один файл, используя для этого специальные символы - шаблоны; другое - задание списка каталогов, в которых производится поиск команд для запуска по неполному имени, третье - возможность использования нескольких команд в одной командной строке. Сейчас Вы познакомитесь и с некоторыми другими возможностями интерпретатора shell.

Стандартный вход и стандартный выход. 

Многие команды UNIX получают информацию с так называемого стандартного входа и посылают информацию на опять же так называемый стандартный выход. (Для них часто используются сокращения "stdin" и "stdout" соответственно). shell организует дело так, что стандартным входом служит клавиатура, а стандартным выходом - экран.

Рассмотрим, к примеру, использование команды cat. В случае, когда в качестве параметров заданы имена файлов, cat читает данные из файлов, имена которых определены в командной строке и посылает эти данные прямо на stdout. Поэтому при выполнении команды

	cat  .profile .kermrc

на экран будет выведено содержимое файла .profile, а следом за ним содержимое файла .kermrc.

Но если команде cat не заданы имена файлов в качестве параметров, то она читает данные со стандартного входа (клавиатуры) и посылает их на стандартный выход (экран). Вот пример. Введите команду

	cat -u

	Затем напечатайте

	Hello there.

	На экране появится

	Hello there.

	Напечатайте

	Bye.

	Вы получите ответ:

	Bye.

Как видите, каждая строка, которую Вы напечатали, немедленно выдается командой cat на экран. При вводе со стандартного входа команда считает, что ввод закончен тогда, когда Вы нажимаете клавиши CTRL-d. Эта комбинация клавиш посылает команде сигнал EOT (End-Of-Text - конец текста). Поэтому нажмите CTRL-d (должно появиться новое приглашение на ввод $) и давайте рассмотрим другой пример.

Воспользуемся новой для Вас командой sort. Это команда сортировки. Без указания аргументов она сортирует информацию, поступающую со стандартного входа, упорядочивая строки в лексикографическом порядке, и выдает результат на стандартный выход - экран.

Попробуйте так: 

введите команду

	sort

	напечатайте с клавиатуры следующее (для перехода на новую строку используйте ENTER):

	bananas

	carrots

	apples

	Нажмите CTRL-d и Вы увидите измененный список.

	apples

	bananas

	carrots

	В конце появится новое приглашение на ввод команд $.

Перенаправление входа и выхода. 

Теперь, предположим, что Вы хотите послать результат сортировки в файл, чтобы сохранить список планируемых покупок. shell дает возможность перенаправлять стандартный выход в файл, используя символ ">". Вот как это работает: 

напечатайте команду sort и после символа > укажите имя файла, в который хотите сохранить результат выполнения команды (эта процедура должна быть Вам знакома - Вы уже создавали файлы подобным образом)

	sort > shopping-list

	Затем  введите с клавиатуры список предполагаемых покупок (он попадет во входной поток команды, ведь по умолчанию входной поток - клавиатура):

	bananas

	carrots

	apples

	Снова нажмите CTRL-d.

Как Вы можете видеть, результат работы команды sort не отображается на экране (после нажатия клавиш CTRL-d сразу появляется новое приглашение), вместо этого он сохраняется в файле shopping-list (список покупок). Давайте проверим, действительно ли это так с помощью давно знакомой Вам команды cat:

	cat shopping-list

	Если Вы все сделали правильно, то содержимое файла shopping-list будет выглядеть следующим образом:

	apples

	bananas

	carrots

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

Создайте файл pokupki, с помощью команды echo и перенаправления выходного потока:

echo " carrots

bananas

apples "> pokupki

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

После того как Вы создали файл, отсортируйте его и сохраните указанным выше способом:

	sort pokupki > shopping-list

	С помощью команды cat проверьте выполнение введенной команды:

	cat shopping-list

	Результат должен быть аналогичным предыдущему:

	apples

	bananas

	carrots

То же самое можно сделать и по-другому. Перенаправлен может быть не только стандартный выход, но также и стандартный вход. Для этого следует использовать символ "<". Введите, например, такую командную строку: 

	sort < pokupki

	Команда sort выведет на экран (стандартный выход) отсортированные строки файла pokupki:

	apples

	bananas

	carrots

Фактически sort<pokupki эквивалентно sort pokupki, но последний вариант позволяет продемонстрировать сказанное: sort<pokupki ведет себя так, словно читает данные файла pokupki со стандартного входа - клавиатуры (а не из заданного файла), в то время как на самом деле shell перенаправил данные файла в стандартный входной поток. 

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

Использование конвейера. 

Предыдущие примеры предполагали, что Вы ввели данные с клавиатуры своими собственными руками или извлекли их из файла. А что, если данные, которые Вы хотите отсортировать, являются выходными данными другой программы, например, такой как ls? 

Попробуйте получить список файлов и подкаталогов Вашего личного каталога, отсортированный в порядке обратном к лексикографическому. Для подобной сортировки у команды sort существует опция -r. Но ее одной недостаточно - нужно использовать и возможности shell. Можно применить уже полученные Вами знания: 

	ls > file-list

	Эта командная строка перенаправила выходной поток команды ls в файл file-list. При желании Вы можете убедиться в этом с помощью команд cat или more.

	Вторая команда сортирует содержимое файла file-list в указанном порядке и выводит его на экран:

	sort -r file-list

	Такой способ не самый быстрый и требует создания временного файла для сохранения результата работы команды ls.

shell предоставляет и другой вариант - использование "конвейера" (pipeline). "Конвейер" - это замечательное свойство shell, которое позволяет связать последовательность команд в конвейер, где stdout первой команды посылается прямо на stdin второй команды и так далее. 

В нашем примере необходимо направить стандартный выходной поток команды ls в стандартный входной поток команды sort. Символ "|" обозначает конвейер. Поэтому Вам достаточно ввести:

	ls | sort -r

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

Другой полезный пример. 

Команда

	ls /usr/bin

выдает на дисплей длинный список имен файлов, большинство из которых слишком быстро исчезают с экрана, и Вы не успеваете прочитать их. Подключите к просмотру перечня имен файлов каталога /usr/bin команду more:

	ls /usr/bin | more

Теперь Вы можете постранично листать файл в свое удовольствие.

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

	ls | sort -r | head -1

где head -1 просто выдает первую строку (-1) получаемого входного потока (в данном случае это отсортированный в обратном порядке перечень имен файлов текущего каталога, выданных командой ls).

Перенаправление с добавлением. 

Использование ">" для перенаправления выхода смертельно для файла, в который происходит перенаправление (если этот файл уже существует). Например, 

	ls > file-list

	уничтожит прежнее содержимое файла file-list. Убедитесь, что теперь файл file-list  содержит  лишь список имен файлов и подкаталогов текущего каталога в алфавитном порядке, набрав команду

	cat file-list

Если вместо ">" использовать символ перенаправления ">>", выходной поток будет добавлен к содержимому указанного файла (а не записан на место уже хранящейся в нем информации).

	ls >> pokupki

В формате MS Word 97 

Продолжение работы с shell. 

Простейшие циклы shell. 

Типичным считается цикл по последовательности имен файлов, и оператор shell for является единственной структурой управления, которую обычно задают с терминала, а не помещают в файл для последующего выполнения. Синтаксис оператора for таков:

for переменная in список_слов 

do

команды 

done

Например, для вывода на экран имен файлов по одному на строке достаточно задать следующий цикл:

for i in *

do

echo $i 

done

Вместо i можно применять любую переменную shell, но это обозначение традиционно. Заметьте, что обращение к переменной задается с помощью $i, однако в заголовке цикла переменная указывается как i. Значения переменной i определены шаблоном * (для выбора всех файлов текущего каталога). 

Выходной поток цикла можно перенаправить в файл, используя символ перенаправления:

for i in *

do

echo $i 

done > spisok

в результате будет создан файл spisok, содержащий список имен файлов текущего каталога по одному на строке. Проверьте, так ли это?

Выходной поток цикла можно направить и по конвейеру. Чтобы получить на экране отсортированный список файлов достаточно сделать следующее: 

for i in *

do

echo $i

done | sort

Указав соответствующую опцию команды sort, Вы сможете отсортировать список в нужном Вам порядке.

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

Можно использовать другой формат для цикла for. Единственное ограничение заключается в том, что do и done распознаются как ключевые слова только в том случае, если они появляются сразу после перевода строки или точки с запятой. В зависимости от размера цикла for иногда лучше помещать его на одной строке:

for i in список_значений; do команды; done

Список аргументов для цикла for часто получают путем выбора имен файлов по шаблону, но можно получать и любым другим способом, в частности, просто вводом аргументов. 

Например, ранее Вы создали ряд программ для печати в несколько столбцов под именами 2, 3 и т.д. Все программы, кроме 2, являются связями с файлом 2. Поэтому, если скрипт 2 создан, то связи можно установить с помощью цикла for:

for i in 3 4 5 6 7 8; do ln 2 $i; done

Теперь Вы сможете выводить файлы в 3, 4, 5 , 6 , 7 и 8 столбцов.

Совершенствование команды саl.

shell позволяет сделать взаимодействие между пользователем и программой более удобным. В качестве примера рассмотрим команду саl. Вы помните, как используется эта команда: саl [month] year. Однако досадно, что месяц нужно задавать числом:

саl october

Реакция программы на такую команду:

bad argument

(неверный аргумент).

К тому же команда

саl 10

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

Вы можете изменить характер взаимодействия пользователя с программой саl, не меняя самой программы. 

Первый шаг разработки - определить функции усовершенствованной команды саl:

месяц нужно распознавать по названию; 

при наличии двух аргументов команда должна делать то же, что делала прежняя версия, за исключением перевода названия месяца в его номер; 

в случае одного аргумента следует печатать календарь месяца или года (в зависимости от того, что Вам требуется); 

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

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

shell имеет оператор case, который успешно применяется в таких ситуациях:

case слово in 

шаблон) команды ;; 

шаблон) команды ;;

…

esac

В операторе case значение слово сравнивается поочередно со всеми шаблонами от начала до конца, и выполняются команды, связанные с первым (и только первым) шаблоном, соответствующим слову. Шаблоны составляются по правилам соответствия шаблонов, которые в некоторой степени обобщают правила задания имен файлов. Каждое действие завершается двумя символами ;; (для последнего варианта можно обойтись без ;;, но обычно их ставят для удобства редактирования).

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

В переменной интерпретатора $# хранится число аргументов, с которыми была вызвана программа. Символ # в начале слова означает, что вся следующая за ним строка рассматривается как комментарий.

В своем личном каталоге bin с помощью редактора vi создайте файл саl, содержание которого следующее:

# cal: улучшенное взаимодействие с /usr/bin/cal 

case $# in

0) set `date`; m=$2; y=$7;; # нет аргументов: использует текущие

m=$1; set `date`; y=$7;; # 1 аргумент: использует текущий год 

*) m=$1; y=$2;; # 2 аргумента: месяц и год

esac

case $m in

jan* | Jan*) m=1;;

feb* | Feb*) m=2;;

mar* | Mar*) m=3;;

apr* | Apr*) m=4;;

may* | May*) m=5;;

jun* | Jun*) m=6;;

jul* | Jul*) m=7;;

aug* | Aug*) m=8;;

sep* | Sep*) m=9;; 

oct* | Oct*) m=10;; 

nov* | Nov*) m=11;;

dec* | Dec*) m=12;;

[1-9]|10|11|12) ;; # номер месяца

*) y=$m; m=" ";; # обычный год

esac

/usr/bin/cal $m $y # запуск настоящей команды

В первом операторе case проверяется число аргументов $# и выбирается подходящее действие. Последний шаблон в этом операторе задает вариант, выбираемый по умолчанию: если число аргументов не 0 и не 1, будет выполнен последний вариант. (Поскольку шаблоны выполняются по порядку, вариант по умолчанию должен быть последним.) При наличии двух аргументов m и у принимают значения месяца и года, и новая команда должна выполняться как исходная команда.

Первый оператор case включает пару нетривиальных строк, содержащих set `date`. Хотя сразу это и не очевидно, легко установить действие команды, запустив ее. Вы помните, что команда date выводит на экран информацию о дне недели, месяце и числе, времени и годе. Для большей наглядности Вы можете сначала выполнить команду 

date

а затем ввести

set `date`

А после проверьте результаты ее выполнения, введя следующие команды:

echo $1

на эране должно появиться название текушего дня недели;

echo $4

Вы должны увидеть текущее время.

Команда set - встроенная команда интерпретатора, возможности которой многообразны. При отсутствии аргументов она выдает, как Вы помните, значения переменных среды. В случае обычных аргументов переопределяются значения $1, $2 и т.д. Поэтому set `date` присваивает $1 - день недели, $2 - название месяца и т.д. Таким образом, при отсутствии аргументов в первом операторе case месяц и год устанавливаются из текущей даты. Если задан один аргумент, он используется в качестве месяца, год берется из текущей даты.

Теперь осталось только перевести значение месяца, если оно представлено в строковом виде, в число. Это делается с помощью второго оператора case, который практически очевиден. Единственный нюанс состоит в том, что символ | в шаблонах оператора case означает альтернативу: малый | большой соответствует варианту малый или большой. Конечно, эти варианты можно было бы задать с помощью [jJ]an* и т. д. 

Программа допускает задание месяца строчными буквами, поскольку большинство команд работает с входным потоком, где данные записаны строчными буквами, иногда первая буква—прописная, поскольку так выглядит вывод команды date. 

Правила сопоставления шаблонов в интерпретаторе

* задает любую строку, включая пустую

? задает любой одиночный символ 

[ссс] задает любой из символов в ссс [a-d0-3] эквивалентно [abcd0123] 

" ... " задает в точности ...; кавычки защищают от специальных символов. Аналогично действуют '...'

\с задает с буквально (т.е. отвергает специальное значение символа)

a | b только для выражений выбора; задает а или b

Два последних варианта второго оператора case относятся к случаю, когда единственный аргумент может быть годом; напомним, что в первом операторе case предполагалось, что аргументом является месяц. Если это число, которым может быть задан месяц, то ничего не происходит (иначе предполагается, что задан год).

Наконец, в последней строке вызывается /usr/bin/cal (исходная команда
cal) с преобразованными аргументами.

Не забудьте сделать файл выполняемым.

Проверьте, правильно ли работает новая версия команды.

Месяц должен распознаваться по названию, поэтому команды

cal oct

cal octber

обязаны выдать календарь на октябрь месяц текущего года. То же самое должна сделать команда

cal Oct

При наличии двух аргументов команда должна делать то же, что делала прежняя версия, за исключением перевода названия месяца в его номер, поэтому следующие команды 

cal 2 1996

cal feb 1996

cal Feb 1996

обязаны выдать на экран календарь февраля месяца1996 года.

В случае одного аргумента следует печатать календарь месяца или года (в зависимости от того, что Вам требуется), поэтому команда 

cal feb

должна печатать календарь февраля текущего года, а 

cal 1998

- всего 1998 года.

И, наконец, при отсутствии аргументов 

cal

должен быть выдан календарь текущего месяца. 

Если новая версия команды cal находится в подкаталоге bin Вашего личного каталога, а он прописан первым в PATH, то, обращаясь к команде cal, Вы будете использовать новую версию команды. В каком случае при обращении к cal будет использована исходная команда? Как этого избежать? Можно ли назвать новую версию команды иначе?

Печать файлов. 

Прежде чем послать файл на печать, его нужно специальным образом отформатировать. Для подготовки файла к печати служит команда pr. Она записывает в стандартный выходной поток заданные файлы, разбитые по страницам с указанием номера страницы, имени файла и времени создания файла. Если имена файлов (аргументы команды) не заданы, преобразуется стандартный входной поток. Команда pr позволяет осуществлять печать в несколько столбцов; устанавливать ширину страницы равную определенному количеству символов и длину страницы равную указанному количеству строк; начинать печать с заданной страницы; подавлять вывод 5-строчного заголовка и пяти последних строк на каждой странице.

Итак, для того чтобы вывести содержимое всех файлов, перечисленных в списке в виде, подходящем для устройства печати, введите 

pr poem test

Каждый файл будет напечатан с новой страницы с указанием имени файла и нумерацией страниц. 

Для печати каждого из файлов, например, в 3 столбца нужно задать опцию, равную желаемому количеству столбцов:

pr -3 poem test

Можно заменить число 3 любым разумным числом, и команда pr "постарается" исполнить задание.

Следует отметить, что pr - это не программа форматирования текста: она не разбивает текст на строки и не выравнивает поля. 

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

На печатающем устройстве файлы можно распечатывать командой lp (line print — печать строк):

lp [имя файла]...

Если в командной строке не задано имя файла, то lp обеспечивает печать информации со стандартного ввода. Это значит, что lp может стоять на последнем месте конвейера. 

Т.к. программа lp не изменяет печатаемый текст, то при необходимости разбить текст на страницы, снабдить его заголовками и т. д., нужно использовать конвейер из команды pr, обеспечивающей подготовку текста, и команды lp: 

pr -2 file1 | lp

текст разбивается на страницы и размещается в 2 колонки, а затем отправляется на печать. 

lp filel file 2 file3

распечатываются последовательно файлы filel, file 2, file3.

Работа с дискетами. 

Системный администратор root имеет возможность, в отличие от простых пользователей, подмонтировать файловую систему дискеты к некоторому подкаталогу корневого каталога, например, каталогу /vocant. После этого любой пользователь системы может использовать файлы, записанные на дискете, так же как файлы корневой файловой системы. Ссылки на каталог /vocant будут являться ссылками на /dev/fd0 (Вы помните, в UNIX все устройства, в том числе дисководы, представлены специальными файлами).

Однако в некоторых системах UNIX существуют команды доступные обычным пользователям, которые позволяют работать с дискетами DOS. Это команды чтения и записи файлов DOS, а также просмотра файловой системы DOS: dosread, doswrite и dosdir.

Команда dosdir позволяет вывести на экран список файлов и каталогов, сохраненных в формате DOS. Для того чтобы увидеть, какие файлы находятся на дискете DOS, Вам необходимо ввести следующую команду:

dosdir /dev/fd0

на экран будут выведены имена файлов и каталогов (/dev/fd0 – специальный файл устройства, используемый для обращения к первому дисководу для гибких дисков). Если Вы хотите увидеть, какие из файлов являются каталогами, и узнать их содержимое следует воспользоваться опцией -r команды dosdir:

dosdir -r /dev/fd0

Вы также можете вывести на экран список файлов конкретного каталога, указав в качестве параметра команды dosdir его имя:

dosdir /dev/fd0 <имя каталога>

В случае задания имени файла

dosdir /dev/fd0 <имя файла>

Вы увидите сообщение об ошибке:

dosdir: Not a directory: <имя файла>

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

dosread /dev/fd0 <имя файла>

где в качестве второго параметра указано конкретное имя файла.

Используя символ перенаправления, Вы можете сохранить содержимое файла DOS в заданном файле MINIX:

dosread /dev/fd0 <имя файла DOS>  <имя файла MINIX>

Команда doswrite записывает стандартный выходной поток на дискету DOS (дискета должна быть отформатирована). Команда

doswrite /dev/fd0 <имя файла DOS>  <имя файла MINIX>

записывает указанный файл MINIX на дискету DOS с заданным именем. 

Архивация файлов. 

Вы уже знаете, что в UNIX нет команды, восстанавливающей удаленный файл. Поэтому во избежание случайной потери данных, необходимо сохранять копии файлов, т.е. заниматься архивированием. Архивирование - это копирование файлов с целью их восстановления в случае утраты. Наиболее простой способ архивирования - копирование файлов с жесткого диска компьютера на дискету. 

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

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

Следите за своими архивами: фиксируйте дату их создания и информацию о фай