ФАЙЛОВАЯ СИСТЕМА ОС UNIX

Лекція 2

ФАЙЛОВАЯ СИСТЕМА ОС UNIX.

КОМАНДЫ ОС UNIX

Файловая система ОС UNIX

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

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

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

Справочники являются суперфайлами, которые могут содержать файлы или другие справочники. Обычно файлы, содержащиеся в них, устанавливают отношения каким-либо способом. Например, справочник, названный sales может хранить файлы, содержащие цифры ежемесячных продаж, названные jan, feb, mar, и т.д. Вы можете создать каталоги, добавить или удалить файлы из них или удалить каталоги.

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

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

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

Символические каналы связи - это файлы, которые указывают на другие файлы. Для системы UNIX все файлы одинаковы. Это делает файловую структуру UNIX легкой в использовании. Например, пользователю нет необходимости указывать требования к памяти для своих файлов, т.к. система автоматически это сделает. Или если для написанной пользователем программе необходим доступ к определенному устройству (например, принтеру) он указываете устройство также как любой из файлов. В системе UNIX существует только один интерфейс для всего ввода и вывода; это упрощает взаимодействие с системой. Считается, что устройство «0» - это устройство ввода – клавиатура. Устройство «1» -это устройство вывода результата выполнения команды – терминал. И устройство «2» - это устройство выводе сообщения об ошибке выполнения команды – терминал.

Рассмотрим файловую систему UNIX . Файловая система UNIX характеризуется:

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

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

Рисунок 1.1. Пример древовидной структуры файловой системы

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

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

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

Пример файлов терминальных устройств, которые выглядят так же, как обычные файлы, за исключением того, что команда "ls -l" показывает, как называются старший и младший номера устройства, которые не являются частью обычных файлов.

| crw--w--w- 1 russ tricks 0, 0 Jun 22 02:34 /dev/console

| crw--w--w- 1 russ tricks 0, 1 Jun 22 00:41 /dev/tty02

| crw-rw-rw- 2 root root 5,136 Feb 18 17:09 /dev/tty14

|

Регистрационный каталог" пользователя

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

Когда пользователь регистрируется в системе, то он можете попасть в любое место древовидной структуры. Регистрационный каталог пользователя хранится в файле паролей. Можно получить эту информацию, обратившись к значению системной переменной $HOME, которая является одной из предопределенных переменных командного языка (shell). Теперь у пользователя есть персональная древовидная структура под этим именем каталога. Она полностью его и может быть сделана недоступной для кого угодно, кроме root (администратора системы).

Общее файловое дерево

Для того чтобы лучше понять мир UNIX, посмотрите пример распечатки структуры UNIX на рис.2. Это наглядное представление полного дерева корневой файловой системы. Любые другие расширения файловой системы монтируются на эту файловую систему. Точкой временного монтирования является /mnt. Более постоянные точки монтирования должны быть созданы администратором, например /0, /1 и т.д. или /usr1, /usr2 и т.д.

ПЕРВЫЙ СЛОЙ ФАЙЛОВОЙ СИСТЕМЫ

Самым левым каталогом является /bin, который содержит все главные двоичные утилиты. Это наибольший из двух основных каталогов двоичных модулей.

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

Административные утилиты и конфигурационные файлы хранятся в /etc. Примерами являются getty и gettydef, init и inittab, а также файл паролей (/etc/passwd).

Следующий каталог - /lib, где размещены библиотеки компилятора.

Здесь могут храниться и другие типы библиотек.

Каталог /lost+found используется утилитой fsck (главное средство поддержания файловой системы) для хранения логически удаленных файлов. Если на самом деле вы хотите сохранить эти файлы, они могут быть извлечены из этой удерживающей области после завершения уборки файловой системы.

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

Главным временным рабочим каталогом системы является /tmp. Многие утилиты, такие как vi, fsck, интерпретаторы shell и программы резервного копирования, используют /tmp для хранения рабочих файлов. Пользователям не рекомендуется создавать в этом каталоге файлы.

Следующий каталог - /usr, второй слой системы, который применяется как точка монтирования. Файловая система, смонтированная здесь, содержит дополнительную системную информацию (в некоторых реализациях ОС создаются и каталоги пользователей). Это разделение между загружаемой файловой системой и пользовательской файловой системой было сделано, чтобы сбалансировать загрузку диска. Если бы все важные файлы были в одном разделе, он был бы слишком большим. Производительность может быть ухудшена, если все действия направлены в одну логическую область диска. Благодаря разбивке всей системы на две, каждая файловая система поддерживает разумное количество свободного пространства. Далее будем рассматривать каталог /usr более подробно.

Последний файл - это само ядро, /unix. Весь /unix (это соответствет структуоре ОС SCO ODT, для других реализаций ОС может быть другое имя и другая организация) фактически существует и представляет собой большой a.out (скомпилированный объектный файл). Машина запускается с первых 512 байтов корневой файловой системы. Программа начальной загрузки, которая находится здесь, загружает программу загрузки большего размера, иногда называемую /boot. /boot загружает и запускает /unix.

Второй слой

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

Первым каталогом является adm, для администрирования. Он содержит учетные файлы и регистрационный файл для su (суперпользователя), а также другие административные файлы.

В каталоге bin имеются исполняемые модули, которые используются менее часто, чем модули в двоичном каталоге корневого уровня (/bin).

Почти все исполняемые модули распределены между этими двумя каталогами. Другие исполняемые модули рассеяны по всей системе, например /usr/lib/uucp/uucico и /usr/lib/ ex3.7preserve.

Каталог include содержит все файлы-заголовки. Файлы-заголовки используются в программах на языке Си для определения структур и системных присваиваний, полезных для программирования. Здесь имеется подкаталог sys, который содержит все файлы- заголовки, относящиеся к системе. Читая эти файлы-заголовки, можно многое узнать о системе UNIX.

Следующий каталог - lib, который содержит библиотечные файлы для всех видов "имущества": файлы печатающих устройств, файлы поддержки утилиты vi, другие языки и uucp. Каталог /usr/lib представляется складом всяких библиотек, которые имеются в системе, отличных от библиотек компилятора.

Каталог lost+found находится здесь для той же цели, что и одноименный каталог корневого уровня. Каждая файловая система должна иметь такой файл. Без него fsck не имеет временного места для размещения полуудаленных файлов и поэтому удаляет их навсегда.

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

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

В каталоге news хранятся все файлы новостей. Эти файлы именованы в соответствии с порядком, в котором они были введены в каталог. Команда news смотрит на дату файла $HOME/.news_time, чтобы сообщить, какие новости вы еще не читали.

Каталог preserve предназначен для файлов, связанных с утилитой vi. Они помещаются сюда, когда вы работаете с vi или с редактором ex и пропадает питание машины либо ваш сеанс работы прерывается в виде "зависания". Когда в системе восстанавливается питание, /tmp содержит файлы редактора ex. Из каталога /etc/rc запускается утилита /usr/lib/ex3.7preserve, которая просматривает /tmp, преобразует его в сохраненный файл и помещает его в /usr/preserve. Когда вы входите в систему, вы получаете почту о том, что у вас имеется сохраненный файл редактора, который вы можете восстановить и поместить его на исходное место.

Каталог pub не содержит ничего особенного, обычно в нем просто некоторые информационные файлы вроде таблицы ASCII или греческих символов.

Каталог spool - это главная точка входа для всех буферизованных файлов в системе. В этом каталоге имеется много подкаталогов, содержащих специфические типы буферизованных файлов. Некоторыми типичными подкаталогами являются lp, uucp и uucppublic.

Каталог sys традиционно хранит файлы, необходимые для генерации нового ядра. Это файлы-заголовки, конфигурационный файл, библиотеки и командный файл для создания нового ядра из всех этих файлов.

Последний каталог - tmp. Это вторичная временная область хранения, которая используется не так часто, как /tmp. Ее, однако, использует утилита sort.

Символические каналы связи

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

Имя пути

Каждый файл и справочник системы UNIX идентифицируется уникальным именем пути. Имя пути показывает местоположение файла или справочника и обеспечивает направление поиска его. Существует 2 типа имени пути: полное и родственное.

Полное имя пути

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

Так как полное имя пути всегда начинается со справочника root, то это имя начинается с символа косая черта (/). Последнее имя в полном имени пути может быть либо именем файла либо именем справочника. Все другие имена пути должны быть справочниками.

Чтобы понять, как полное имя пути строится, обратитесь к следующему примеру. Предположим, что вы работаете в справочнике startship, расположенном в /home. Вы задаете команду pwd и система печатает полное имя пути вашего рабочего справочника:

/home/startship

где

/ - это корневой справочник (root);

home - системный справочник, расположенный на один уровень ниже справочника root;

/ - разделяет имена справочников root и startship;

startship - текущий рабочий справочник.

Родственное имя пути

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

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

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

Например, вы находитесь в справочнике startship, который содержит справочники draft, letters и bin и файл mbox. Родственным именем пути для каждого из них является просто его имя.

Справочник draft, принадлежащий справочнику startship, содержит файлы outline и table. Родственное имя пути от startship к файлу outline:

draft/outline

Обратите внимание, что косая черта в этом имени пути разделяет имя справочника draft и имя файла outline. Здесь наклонная черта показывает, что outline является подчиненным справочнику draft, т.е. draft является родителем outline.

Чтобы подняться к родителю вашего текущего справочника, вы можете ввести две точки (..). Это означает, что если вы находитесь в справочнике draft, то .. является именем пути к startship, и ../.. является именем пути к родительскому справочнику для startship, т.е. к home.

Из справочника draft вы также можете проследить путь к файлу sanders, указав имя пути ../letters/sanders. Две точки (..) приводит вас к starship. Затем имена letters и sanders ведут вас вниз через справочник letters к файлу sanders.

Табл. 1 приводит примеры полного и родственного имени пути.

Таблица Примеры имен пути

Имя пути

Значение

/

Полное имя пути справочника root

/usr/bin

Полное имя пути справочника bin, который принадлежит справочнику usr, и который в свою очередь принадлежит справочнику root

/home/startship/bin/tools

Полное имя пути справочника tools, принадлежащего справочнику bin, который принадлежит справочнику startship, а он в свою очередь - справочнику home, а home - справочнику root

bin/tools

Родственное имя пути к файлу или справочнику tools в справочнике bin. Если текущим справочником является root (/), то система UNIX ищет /usr/bin/tools Если текущим справочником является startship, то система ищет полный путь: /home/startship/bin/tools

tools

Родственное имя пути файла или справочника tools в текущем справочнике

Правила именования справочников и файлов

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

  • допустимы все символы, за исключением /;
  • некоторые символы лучше не использовать, такие как пробел, табуляция и следующие: ? " # $ ^ ( ) ; < > [ ] | \ * @ ' ~ &. Если вы воспользуетесь символами пробел или табуляция в имени файла или справочника, то вы должны заключить имя в двойные кавычки в командной строке;
  • избегайте использования знаков + - или . в качестве первого символа в имени файла;
  • система UNIX различает большие и маленькие буквы. Например, система предполагает, что справочник (или файл) названный draft отличается от DRATF.
  • имя файла или каталога лучше ограничивать 14 символами т.к. в различных ОС длина имени может иметь вариации ( смотри документацию ).

В следующем примере приведены допустимые имена справочников или файлов:

Пример.

memo MEMO section2 raf:list

file.d chap3+4 item1_10 outline

Дополнительная информация по файловой системе

Справочник root содержит несколько важных системных справочников ( в различных версиях ОС имеется некоторое отличие приведенных имен ):

/sbin - содержит основные исполняемые программы, используемые в процессе загрузки и при восстановлении системы;

/home - корневой справочник поддерева для справочника пользователя;

/tmp - содержит временные файлы;

/var - поддерево для изменяемых файлов (например, файлы регистрации);

/var - корневой справочник поддерева для изменяющихся файлов (например, файлы log);

Перечень специальных символов

< > - ввод, который не появляется на экране (например, пароль, табуляция, RETURN) в тексте приводится в угловых скобках;

<^char> - управляющие символы приводятся тоже в угловых скобках, т.к. они не появляются на экране во время ввода. Символ ^ означает управляющую клавишу (обычно она называется CTRL). Управляющую клавишу и символ char необходимо нажимать одновременно;

[] - ключи и аргументы команды, которые являются необязательными, заключаются в квадратные скобки;

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

command [arg1|arg2]

вы можете выбрать либо arg1 либо arg2, когда выдаете команду;

... - многоточие после аргумента означает, что более чем один аргумент может быть использован в одной командной строке;

- стрелка на экране представляет курсор.

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

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


Структура команды операционной системы

Структуру любой команды ОС можно представить следующей схемой:

< ім’я команди > [ < розподільник > < опція(ії) команди >] [< розподільник > < аргумент(и) команди >] [< признак кінця команди – “ enter ” або “;” або “&” (що вказує на виконання команди у фоновому режимі) або “|” (що вказує на наявність команди «приймача» результату виконання першої команди)] [ < вказівка на перепризначення пристрою вводу/виводу на ім’я файлу >]

Эта схема позволяет четко выделить имя команды, её опции и аргументы, условия исполнения и производимые переназначения ввода-вывода.

Минимальный набор команд

Команды и основные понятия

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

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

$

Это символ называется приглашением командной строки и показывает, что система готова к приему команд. Конечно, если вы не имеете опыта работы с UNIX, вы испытаете в этот момент смущение. Но после того как вы узнаете, что символ $ является приглашением к вводу и означает, что система ожидает команд от вас и UNIX уже не будет такой пугающей. (В качестве приглашения могут использоваться различные символы, в зависимости от того, какой интерпретатор командной строки вы используете. Если вы пользуетесь Korn shell или Bourne shell, то в качестве приглашения будет использоваться символ $; в С shell используется % и т.д.)

Команды

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

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

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

Обычная командная строка выглядит примерно так:

$ ls -1

Вторая часть командной строки, -1, называется параметром.

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

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

$ ls

data financials

personnel misc

newdata

Какие именно имена файлов будут выведены — неважно, главное для нас в настоящий момент то, что они выведены в столбец.

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

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

Команда cat — одна из часто используемых в UNIX команд. Если вы запустите эту команду саму по себе, результат будет следующим:

$ cat

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

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

При указании в командной строке имени файла команда cat становится более полезной. Она позволяет вывести на экран содержимое файла:

$ cat kevin.report

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

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

$ cat > report.1997

В этом примере cat выступает в роли простейшего текстового редактора. Вы можете вводить текст строка за строкой. Закончив ввод, нажмите на клавиатуре Ctrl-D. (Сочетание клавиш Ctrl-D сообщает UNIX, что ввод закончен.)

Можно использовать cat в качестве альтернативного метода копирования файлов:

$ cat report.1997 > report.1998

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

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

cat report.1998 » report.1997

Эта команда присоединит содержимое файла report.1998 к содержимому файла report.1997. Если вы хотите дописать несколько строк в конец файла с клавиатуры, используйте такую команду:

$ cat » report.1997

Описанные выше операции перенаправления приведены ниже:

Символ Использование Результат

> команда > файл Вывод команды записывается в файл

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

Вывод команды дописывается в конец файла команда! [ команда2 Выполняется команда!, затем ее стандартный вывод подается на стандартный ввод команды2

Внимательный читатель может заметить, что символ <, описываемый в табл. 1, может быть использован аналогично разобранному нами ранее примеру:

$ cat kevin.report

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

$ cat < kevin.report

Разница заключается в том, каким образом командный интерпретатор UNIX обрабатывает эти команды. В первом примере имя файла kevin.report является аргументом команды cat. Во втором случае интерпретатор командной строки производит перенаправление стандартного ввода команды cat.

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

$ команда < файл! > файл2

При этом стандартный ввод команды берется из файла файл1, а стандартный вывод записывается в файл файл2.

Потоки

Все преимущества возможности перенаправления ввода/вывода становятся ясны при использовании еще одного мощного инструмента UNIX— потоков. Потоком называется использование стандартного вывода одной команды в качестве стандартного ввода другой. Выглядит это так:

$ команда! ¦ команда2

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

$ sort textfile | lp

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

$ cat *.1994 ¦ grep profits | lp

Эта командная строка произведет поиск в текущем каталоге файлов, имена которых заканчиваются на 1994, отправит список таких файлов на ввод команды grep, которая произведет поиск в этих файлах слова profits. Затем строки, содержащие это слово, будут напечатаны.

КРАТКАЯ СПРАВКА ПО КОМАНДАМ UNIX

Эта информация поможет пользователям, знающим, что они хотят сделать, найти соответствующую команду UNIX. Левый столбец приведенной ниже таблицы содержит описания часто встречающихся задач: ключевые слова выделены полужирным шрифтом. Соответствующие задаче команды UNIX приведены в правом столбце. Многие команды встречаются несколько раз; например, команду Is вы можете найти как по ключевому слову список, так и по ключевому слову файл.

создание файлового архива

tar, cpio

архивация файла

compress, pack

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

time, timex

запуск программы в указанное время

at

вывод файла на экран

cat, page, dtpad, textedit. xedit

постраничный вывод файла на экран

more

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

head

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

tail

вывод содержимого заархивированного файла

peat

выполнение вычислений

be, dc

вывод даты и времени

date

изменение даты модификации файла на текущую

touch

деархивация файла

unpack, uncompress

декодирование UU-кода

uudecode

вывод объема свободного дискового пространства

df

вывод объема дискового пространства, занятого данным каталогом

du

завершение работы

exit

печать заголовка

banner

захват изображения на экране

xv, xwd

печать изображений

xdpr, xpr

вывод имени системы

uname

запуск интерпретатора командной строки

sh, csh, ksh

запуск интерпретатора командной строки на удаленной системе

rsh

личный календарь

cm, dtcm

вывод календаря

cal, cm, dtcm

калькулятор

calctool, dtcalc, xcalc

создание каталога

mkdir, filemgr, dtfile

вывод размера каталога

du

вывод списка файлов и подкаталогов данного каталога

Is

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

cd

печать заголовка

banner

персональный календарь

calendar, cm, dtcm

подсчет количества слов в текстовом файле

we

выполнение повторяющихся задач

crontab

поиск текстовых строк

egrep, grep, fgrep

поиск и замена символов

tr

поиск в файле

awk, nawk

поиск файлов

find

вывод списка пользователей

listusers

вывод информации о других пользователях системы

who

поиск информации о других пользователях системы

finger

выполнение последовательности команд

batch

запуск команды с пониженным приоритетом

nice

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

spell

прерывание процесса

kill

вывод списка процессов

ps

присоединение содержимого файлов к существующему файлу

cat

разбиение файла на части

csplit, split

редактирование текстового файла  

vi, ed, dtpad, textedit, xedit

резервирование информации

tar, cpio

поиск и замена символов

tr

вывод списка известных систем

uuname

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

id

вывод системных сообщений

news

подсчет числа слов в файле

we

вывод состояния службы UUCP

uustat

создание нового текстового файла

cat, dtpad, textedit,

 

xedit

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

ct

установка соединения с удаленной UNIX-системой

cu

разрешение/запрет вывода сообщений на терминал

mesg

вывод сообщений

news

сортировка файла

sort

сортировка и обработка файла

awk, nawk

вывод состояния машин в сети

ruptime

вывод списка файлов в каталоге

Is

сравнение содержимого двух каталогов

dircmp

сравнение содержимого двух отсортированных файлов

comm

сравнение трех файлов

diff3

сравнение двух файлов и вывод отличающихся строк

diff, bdiff

сравнение двух файлов

cmp

сравнение двух файлов и вывод

 

отличающихся и совпадающих строк

sdiff

создание ссылок

In

печать на стандартный вывод

echo

запись стандартного вывода в файл

tee

вывод столбца из отсортированного файла

cut

поиск текстовых строк в бинарном файле

strings

поиск текстовых строк

egrep, grep, fgrep

табличный процессор

tbi

настройка табуляции

tabs

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

cd

вывод имени текущего каталога

pwd

открытие окна терминала  

xterm, dtterm, shelltool

вывод информации о терминале

tput

настройка конфигурации терминала

stty

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

tty

определение типа файла

file

удаление из очереди заданий, созданных командой at

atrm

удаление заданий из очереди печати

cancel

удаление каталога

rmdir, filemgr, dtfile

удаление файла  

rm, filemgr, dtfile

удаление форматирующих символов из файла

 col

копирование файлов с удаленной системы  

rep, uucp, ftp

выполнение команды на удаленной системе

uux

запуск интерпретатора командной строки на

удаленной системе

rsh

вход в удаленную систему  

telnet, riogin

вывод информации о соединениях с удаленными системами

uulog

создание нового текстового файла 

cat, dtpad, textedit, xedit

изменение даты модификации файла на

 

текущую

touch

вывод полного имени файла

basename

вывод файла на экран

cat, page, dtpad, textedit, xedit

постраничный вывод файла на экран

more

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

head

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

tail

вывод списка файлов в каталоге

Is

копирование файла

cat, cp, filemgr, dtfile

определение типа файла

file

поиск файла

find

разбиение файла

split

редактирование файла

vi, ed, dtpad. textedit, xedit

удаление файла

rm

шифрование файла

crypt

печать формул

eqn, neqn

отображение шрифта

xfd, xfontsel

вывод списка доступных шрифтов

xlsfonts, fslsfonts

отправка и чтение электронной почты

mailx, dtmail, mailtool

уведомление о получении новых писем по электронной почте

notify, xbiff

Информацию по приведеному списку команд можно получить активировав файл index.htm из каталога Unix Man Рages (см. электронный носитель информации)

Описание некоторых команд системы

Организация справочника/каталога

Далее приведены 4 системные команды, позволяющие организовывать и использовать структуру справочника/каталога:

mkdir - создать новый справочник/каталог или подсправочник в вашем текущем справочнике;

ls - напечатать список имен всех каталогов и файлов в справочнике;

cd - изменить местоположение в файловой системе, т.е. перейти из одного справочника в другой;

rmdir - удалить пустой справочник. Эти команды могут использовать либо полное имя пути, либо родственное. Две команды могут применяться без имени пути.

Команда mkdir - создать справочник/каталог

Рекомендуется создавать каталог в собственном справочнике в соответствии с логической схемой, которая будет облегчать восстановление информации. Если поместить все файлы, относящиеся к одной теме, в один справочник, то вы будете знать, где их затем найти. Для создания справочника воспользуйтесь командой mkdir.

Синтаксис команды:

$ mkdir имя справочника(ов)<CR>

Например, подсправочник draft создается при помощи следующей команды, выдаваемой из справочника home (/home/startship):

$ mkdir draft<CR>

$

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

Также, находясь в справочнике home, можно создать другие подкаталоги, такие как letters и bin, таким же способом:

$ mkdir letters<CR>

$ mkdir bin<CR>

$

Пользователь может создать все три подкаталоги (draft, letters и bin) одновременно, перечислив их всех в одной командной строке:

$ mkdir draft letters bin<CR>

$

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

Команда ls - напечатать содержимое справочника/каталога

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

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

Обратимся к примеру. Предположим, что вы зарегистрировались в системе UNIX под именем startship и задали команду pwd. Система напечатает имя пути /home/startship. Чтобы отобразить имена файлов и справочников в этом текущем справочнике, введите команду ls и нажмите клавишу <RETURN>. После того, как вы выполните последовательность этих команд, экран будет выглядеть следующим образом (один из вариантов вывода результата):

$ pwd<CR>

/home/startship

$ ls<CR>

bin

draft

letters

list

mbox

$

Обратите внимание, что система выдает перечень справочников в алфавитном порядке. Если первым символом имени файла или справочника будет цифра или большая буква, то оно будет напечатано первым.

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

Синтаксис команды:

ls имя пути <CR>

Имя пути может быть либо полным именем пути требуемого справочника, либо родственным. Например, вы можете получить содержание справочника draft, когда вы работаете в справочнике startship, если введете команду ls draft. Экран терминала будет выглядеть следующим образом:

$ ls draft<CR>

outline

table

$

В этом примере draft является родственным именем пути от родителя (starship) к подчиненному справочнику (draft).

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

$ ls ..<CR>

jmrs

mary2

startship

$

Вы получите тот же результат, если зададите полное имя пути от root к home:

ls /home<CR>

Вы можете распечатать содержимое любого системного справочника, к которому имеете право доступа, выполнив команду ls с полным или родственным именем пути.

Команда ls особенно полезна, если вы имеете много файлов и пытаетесь определить, существует ли определенный файл в вашем текущем справочнике. Например, вы находитесь в справочнике draft и хотите определить, есть ли в нем файлы outline и notes. Задайте команду ls следующим образом:

$ ls outline notes<CR>

outline

notes: No such file or directory

$

Система сообщит, что файл outline существует в этом справочнике, а вот файл notes не найден.

Команда ls не распечатывает содержимое файла. Для этих целей воспользуйтесь командами cat, pg, pr.

Часто используемые ключи команды ls

Команда ls может содержать ключи, которые перечисляют специфичные атрибуты файла или подсправочника. Чаще всего используются ключи -a и -l.

  1. Перечислить все файлы в справочнике.

Имена некоторых файлов в вашем собственном справочнике начинаются с точки (например, .profile). Когда имя файла начинается с точки, он не включается в список, распечатываемый командой ls. Чтобы распечатать такие файлы, введите команду ls с ключом -a.

Например, чтобы распечатать информацию о всех файлах в вашем текущем справочнике (starship), включая и файлы, имя которых начинается с точки, введите команду ls -a и нажмите клавишу <RETURN>. Экран будет выглядеть следующим образом:

$ ls -a<CR>

.

..

.profile

bin

draft

letters

list

mbox

$

  1. Распечатать содержание в укороченном формате.

Ключи -C и -F команды ls используются достаточно часто. Вместе эти ключи распечатывают подсправочники и файлы справочников и помечают исполняемые файлы символом *, справочники - символом /, символическую связь(каналы) - символом @.

Например, вы можете распечатать информацию о всех файлах вашего рабочего справочника startship, выполнив команду:

$ ls -CF<CR>

bin/ letters/ mbox

draft/ list*

$

  1. Распечатать содержание в расширенном формате.

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

$ ls -l<CR>

total 30

drwx-xr-x 3 startship project 96 Oct 27 08:16 bin

-rw------ 1 startship project 40 Oct 27 10:00 mbox

Первая выводная строка (total 30) показывает объем дискового пространства в байтах. Последующие строки дают представление о справочниках и файлах в справочнике startship. Первый символ в каждой строке (d, -, l, b или c) говорит о типе файла:

d = справочник

- = обыкновенный файл

l = символическая связь(канал)

b = специальный блочный файл

c = специальный символьный файл

Таким образом на экране вы можете видеть, что справочник startship содержит три справочника и два обычных файла.

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

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

Следующим является регистрационное имя владельца файла (в данном случае startship), и за ним - групповое имя файла или справочника (project).

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

Команда cd - изменить текущий справочник

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

Сиснтаксис команды:

cd имя-пути-нового-справочника<CR>

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

Например, чтобы перейти из справочника startship в подчиненный draft, введите команду cd draft и нажмите клавишу RETURN. После получения подсказки вы можете проверить ваше новое местоположение, введя команду pwd. Экран терминала будет выглядеть следующим образом:

$ cd draft<CR>

$ pwd<CR>

/home/startship/draft

$

Теперь, находясь в справочнике draft, вы можете создать подсправочники в нем, задав команду mkdir, и новые файлы, используя редактор ed или vi.

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

Вы также можете использовать полное имя пути в команде cd. Например, чтобы перейти из справочника draft в справочник letters, введите:

cd /home/startship/letters<CR>

Так как letters и draft являются подчиненными справочнику srartship, то вы можете использовать родственное имя пути ../letters в команде cd. Две точки (..) перемещают вас в справочник startship и /letters перемещает вас в letters.

Итак, команда cd изменяет ваш рабочий справочник. Аргументом команды cd является новое имя справочника. Если аргумент отсутствует, команда cd помещает вас в ваш собственный справочник.

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

Команда rmdir - удалить справочник

Если вам больше не нужен справочник, вы можете удалить его с помощью команды rmdir.

Синтаксис команды:

rmdir имя(имена) справочника(ов)<CR>

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

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

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

имя-справочника not empty

Например, предположим, что вы имеете справочник memos, который содержит один подсправочник: tech и два файла june.30 и july.31. Если вы попытаетесь удалить справочник memos, то получите сообщение:

$ rmdir memos<CR>

rmdir: memos not empty

$

Чтобы удалить справочник memos, вы должны сначала удалить его содержимое: подсправочник tech и файлы june.30 и july.31. Удалив содержимое справочника memos, можете удалить и его. Однако сначала переместитесь в родительский справочник (ваш собственный). Команда rmdir не отработает, если вы будете находиться в том же справочнике, который удаляете. Из своего собственного справочника задайте команду:

rmdir memos<CR>

Если справочник memos пуст, то эта команда его удалит и возвратит вам подсказку.

Доступ к файлу и работа с ним

Здесь описываются несколько команд системы UNIX, которые осуществляют доступ к файлу и производят обработку его в структуре файловой системы. Команды разделены на две группы: основные и advanced(?).

Основные команды являются фундаментальными в использовании файловой системы; advanced команды предполагают сложную технику обработки информации при работе с файлами.

Основные команды

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

Таблица2 Основные команды

Команда

Функция

cat

Печатает содержимое указанного файла на терминал

pg

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

pr

Печатает частично отформатированную версию указанного файла на терминал

cp

Создает копию существующего файла

mv

Перемещает или удаляет файлы

rm

Удаляет файл

wc

Распечатывает информацию о числе строк, слов и символов в файле

chmod

Изменяет режим доступа к файлу (или справочнику)

Команды cat, pg, pr - распечатать содержимое файла

В системе UNIX существует три команды для распечатки содержимого файлов: cat, pg, pr (more – команда используется для форматированного вывода содержимого файла на терминал). Команда cat выводит содержимое файла на экран терминала или, если вы укажете, в другой файл или новую команду.

Команда pg (more) особенно полезна, если вы хотите прочитать содержимое большого файла, т.к. она отображает текст файла постранично.

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

Команда cat

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

$ cat johnson<CR>

March 5, 1986

I enjoyed with you this morning

about your company's plans to

your business.

If I can be of furtther assistance to you,

please don't besitate to call.

John Home

$

Чтобы отобразить содержимое двух или более файлов, перечислите имена этих файлов в командной строке. Например, чтобы распечатать содержимое файлов johnson и sanders, введите команду:

$ cat johnson sanders<CR>

Команда cat прочитает файлы johnson и sanders и распечатает их содержимое на терминале.

Синтаксис команды:

cat ключи имя-файла(ов)<CR>

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

cannot open имя-файла

Команда pg

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

Таблица3 Инструкции команды pg

Команда

Функция

h

Помощь. Распечатывает список допустимых инструкций команды pg

q или Q

Прекращает режим команды pg

<CR>

Отображает следующую страницу текста

l

Отображает следующую строку текста

d или ^d

Отображает дополнительную половину страницы текста

. или ^l

Вновь отображает текущую страницу текста

f

Пропускает одну страницу текста и распечатывает следующую за ней

n

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

p

Отображает предыдущий указанный в командной строке файл

s

Отображает последнюю страницу текста текущего файла

/pattern

Осуществляет поиск вперед указанного шаблона символов

?pattern

Осуществляет поиск назад указанного шаблона символов

Примечание. Некоторые команды могут быть введены с цифрой впереди. Например:

+1<CR> - отображает следующую страницу;

-1<CR> - отображает предыдущую страницу;

1<CR> - отображает первую страницу текста.

Команда pg особенно полезна, если вы читаете большой файл или серию файлов, т.к. пауза после каждой страницы дает возможность для анализа информации. Размер отображаемой страницы зависит от типа терминала. Например, терминал способен отображать 24 строки; значит страница текста определяется 23 строки плюс одна строка для двоеточия.

Если файл имеет менее 23 строки, то длина страницы будет равна числу строк в файле плюс одна строка (для двоеточия).

Синтаксис команды:

pg имя-файла(ов)<CR>

Например, чтобы отобразить содержимое файла outline из справочника draft, введите комнаду:

pg outline<CR>

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

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

$ pg outline<CR>

Aftar you analyze the subject for your

report, you must consider organizing and

arranging the material you want to use in

writing it.

.

.

An outline is an effective method of

organizing the material. The outline

is a type of blueprint or skaleton,

a framework for you the buildar-writer

of the report, in a sense it is a recipe

:<CR>

Когда весь файл будет прочитан, в последней строке появится:

(EOF):

Подсказка : (двоеточие) предлагает вам ввести новую команду.

Если вы в ответ на подсказку : нажмете клавишу <RETURN>, то вновь появится подсказка. Вы можете воспользоваться одной из ранее перечисленных допустимых команд.

Успешное выполнение команды pg зависит от типа терминала, который вы используете. Это связано с тем, что программа pg достаточно гибкая и может быть запущена на различных терминалах; то, как она запускается, зависит от конкретного типа терминала. Указав тип терминала, вы говорите команде:

  • сколько строк печатать;
  • сколько колонок печатать;
  • как очистить экран;
  • как высветить подсказку или другие слова;
  • как стереть текущую строку.

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

В команде pg могут применяться все допустимые ключи.

Команда pr

Команда pr используется для форматирования и печати содержимого файла. Она формирует заголовки, количество страниц и печатает файл на экране терминала.

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

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

Команда pr часто используется с командой lp для получения копии текста на бумаге в том виде, в каком он был введен в файл.

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

$ pr johnson<CR>

На экране будет следующая информация:

$ cat johnson<CR>

March 5, 1986

I enjoyed with you this morning

about your company's plans to

your business.

Enclosed please find

the material you requested

about AB&C's line of computers

and office automation software.

John Home

$

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

В этом случае воспользуйтесь:

^s - для прерывания потока выводимого на терминал

и

^q - для продолжения вывода на экран.

Команда cp - сделать копию файла

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

Чтобы скопировать файл outline в файл new.outline в справочнике draft, введите команду: cp outline new.outline. Когда система скопирует файл, то вернет подсказку. Чтобы проверить существование нового файла, введите команду:

ls<CR>

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

$ cp outline new.outline<CR>

$ ls<CR>

new.outline

outline

table

$

Система UNIX не позволяет иметь в одном справочнике два файла с одним именем. Если бы файл new.outline уже существовал в этом справочнике, то он был бы заменен на копию файла outline, предыдущая версия файла new.outline будет удалена.

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

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

$ cp outline new.outline<CR>

cp: outline and outline are identical

$ ls<CR>

outline

table

$

Система UNIX разрешает иметь файлы с одинаковыми именами в разных справочниках. Например, вы можете скопировать файл outline из справочника draft в файл outline в справочнике letters. Если вы находитесь в справочнике draft, то сможете воспользоваться одной из перечисленных ниже 4-х командных строк. В первых двух строках вы указываете имя нового файла при выполнении копирования.

cp outline /home/startship/letters/outline<CR>

(указано полное имя пути)

cp outline ../letters/outline<CR>

(указано родственное имя пути)

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

cp outline /home/startship/letters<CR>

(указано полное имя пути)

cp outline ../letters<CR>

(указано родственное имя пути)

Если вы хотите дать другое имя новому файлу, то обязательно укажите это имя. Например, чтобы скопировать файл outline (справочник draft) в файл с именем outlin.vers2 в справочник letters, нужно задать одну из сдедующих команд:

cp outline /home/startship/letters/outlin.vers2<CR>

(указано полное имя пути)

cp outline ../letters/outlin.vers2<CR>

(указано родственное имя пути)

Синтаксис команды:

cp ключи имя-файла1 имя-файла2<CR>

cp ключи имя-файла(ов) справочник<CR>

Команда mv - переименование файла

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

Синтаксис команды:

mv имя-файла1 имя-файла2<CR>

Команда mv изменяет имя-файла1 на имя-файла2 и удаляет файл1. Имя-файла1 и имя-файла2 могут быть любыми допустимыми именами, включая имя пути. Имя-файла2 может быть справочником.

Например, если вы находитесь в справочнике draft и хотите переименовать файл table на new.table, введите команду:

mv table new.table<CR>

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

$ mv table new.table<CR>

$ ls<CR>

outline

new.table

$

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

mv имя-файла(ов) справочник<CR>

Например, вы хотите переписать файл table из текущего справочника draft (который имеет полное имя пути /home/startship/draft) в файл с тем же именем в справочник letters (который имеет родственное имя пути из draft ../letters и полное имя пути /home/startship/letters). Для этого можете воспользоваться одной из следующих командных строк:

mv table /home/startship/letters<CR>

mv /home/startship/draft/table /home/startship/letters<CR>

Теперь, предположим вы хотите переименовать файл table в table2 и переписать в справочник letters. Для этого воспользуйтесь одной из следующих командных строк:

mv table /home/startship/letters/table2<CR>

mv table ../letters/table2<CR>

Когда вы переписываете файл с именем имя-файла1 в имя-файла2 и файл с именем имя-файла2 уже существует, команда mv перезапишет новую версию файла. Старая версия файла удаляется.

Команда rm - удалить файл

Чтобы удалить файл, введите следующую команду:

rm файл(ы)<CR>

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

rm файл1 файл2 файл3 ... <CR>

Чтобы проверить, успешно ли выполилась команда, выполните команду ls. Например, предположим, что в вашем справочнике находятся файлы outline и table. Вы хотите удалить оба файла. Если команда rm выполнится успешно, то справочник будет пустой. Проверьте, задав команду ls. Экран будет выглядеть следующим образом:

$ rm outline table<CR>

$ ls

$

Подсказка говорит о том, что файлы outline и table удалены.

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

rm –r *

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

Команда wc - подсчет строк, слов и символов

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

Синтаксис команды:

wc имя-файла<CR>

Система отвечает строкой в следующем формате:

l w c файл

где l -число строк в файле;

w - число слов в файле;

c - число символов в файле.

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

$ wc johnson<CR>

24 66 406 johnson

$

Система отвечает, что в файле johnson 24 строки, 66 слов и 406 символов.

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

wc файл1 файл2<CR>

Система отвечает следующим образом:

l w c файл1

l w c файл2

l w c total

Число строк, слов и символов для файл1 и файл2 отображается на отдельных строках. На последней строке отображается общее число строк, слов и символов в двух файлах.

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

$ wc johnson sanders<CR>

24 66 406 johnson

28 92 559 sanders

52 158 965 total

$

Последняя строка показывает, что файлы johnson и sanders вместе имеют 52 строки, 158 слов и 965 символов.

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

wc -l файл<CR> (число строк)

wc -w файл<CR> (число слов)

wc -c файл<CR> (число символов)

Например, если вы используете ключ -l, то система напечатает только число строк в файле sanders:

$ wc -l sanders<CR>

28 sanders

$

Команда chmod - изменить статус файла

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

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

r -

разрешает пользователям системы читать файл или копировать его содержимое;

w -

разрешает пользователям системы вносить изменения в файл или копировать его содержимое;

x -

позволяет пользователям системы запускать файл на выполнение.

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

u -

владелец файла и справочника;

g -

член вашей группы;

o -

все пользователи системы.

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

Как определить права

Пользователь может определить права доступа к файлу или справочнику, воспользовавшись командой ls -l. Например, если вы находитесь в справочнике startship/bin, и введете команду ls -l, то получите следующую информацию:

$ ls -l<CR>

total 35

-rwxr-xr-x 1 startship project 9346 Nov 1 08:06 display

-rw-r--r-- 1 startship project 6428 Dec 2 10:26 list

drwxr-x--x 2 startship project 32 Nov 8 15:32 tools

$

В левой части экрана отображены права доступа для файлов display и list и справочника tools:

-rwxr-xr-x для файла display

-rw-r--r-- для файла list

drwxr-x--x для справочника tools

Первый символ описывает тип файла (например, символ "-" говорит, что это обыкновенный файл, символ "d" - справочник). Дальнейшие девять символов описывают права доступа. Первые три символа из девяти устанавливают права доступа для владельца, вторые три - для группы, третьи - для всех пользователей. Каждый набор символов r,w,x показывает текущие установленные права доступа для каждой категории пользователей. Если вместо символа стоит "-", то соответствующее право отсутствует.

Существует два ограничения. Случайно могут появиться буквы l или s в строке вместо r, w или x. Буква s представляет специальное право на выполнение файла. Она появляется на том месте, где обычно стоит буква r в наборах для владельца или для группы пользователей и это означает специальное право на выполнение файла. Она имеет значение только для программистов и системных программистов. Буква l указывает, что блокировка будет появляться при обращении к файлу. Это не означает, что файл защищен.

Как изменить существующие права

Изменить существующие права можно с помощью команды chmod.

Синтаксис команды:

chmod кто+права файл(ы)<CR>

или

chmod кто-права файл(ы)<CR>

где

chmod -

имя программы;

кто -

одна их трех групп пользователей:

u -

владелец;

g -

группа;

o -

все пользователи;

"+" или "-" -

наличие или отсутствие права;

право -

одно из трех прав:

r -

право на чтение;

w -

право на запись;

x -

право на выполнение;

файл(ы) -

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

Примечание. Команда chmod не будет выполняться, если вы поставите пробел между "кто", символами "+", "-" и "право".

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

chmod u-w display<CR>

После того как получите подсказку, введите команду:

ls -l<CR>

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

$ chmod u-w display<CR>

$ ls -l<CR>

total 35

-r-xr-xr-x 1 startship project 9346 Nov 1 08:06 display

-rw-r--r-- 1 startship project 6428 Dec 2 10:26 list

drwxr-x--x 2 startship project 32 Nov 8 15:32 tools

$

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

Теперь обратимся к другому примеру. Право на запись в файл display не разрешено вашей группе и всем пользователям системы. Однако им предоставлено право на чтение. Это означает, что они могут копировать файл в свой собственный справочник и затем вносить в него изменения. Чтобы предотвратить эти действия, вы должны отменить право на чтение. Для этого введите команду:

chmod go-r display<CR>

где g и o обозначают права для группы и для всех пользователей системы;
-r - запрещает читать или копировать файл.

Проверьте результат и введите команду ls -l. Экран будет выглядеть следующим образом:

$ chmod go-r display<CR>

$ ls -l<CR>

total 35

-rwx--x--x 1 startship project 9346 Nov 1 08:06 display

-rw-r--r-- 1 startship project 6428 Dec 2 10:26 list

drwxr-x--x 2 startship project 32 Nov 8 15:32 tools

$

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

Например, вы предоставили право на чтение справочника себе (u), членам вашей группы (g) и всем пользователям системы. Каждый пользователь, имеющий доступ к системе, будет иметь право читать имена файлов, содержащихся в этом справочнике, задав команду ls -l. Аналогично, предоставление права на запись позволяет пользователям создавать новые файлы в справочнике и удалять в нем существующие файлы. Предоставленное право на выполнение в справочнике позволяет обозначенным пользователям перемещаться в этот справочник (и делать его своим текущим справочником) с помощью команды cd.

Альтернативный метод

Существует два метода, с помощью которых может быть выполнена команда chmod. Способ, описанный выше, в котором символы r, w и x используются для указания права, называется символическим методом.

Альтернативным методом является восьмиричный метод. Его формат требует от вас указать права с использованием трех восьмиричных цифр (от 0 до 7) для соответствующей группы пользователей.

0

Все права отсутствуют

1

Право на выполнение

2

Право на запись

4

Право на чтение

Все для пользователя разрешено – восьмиричная цифра 7.

Дополнительные команды

В этом пункте описаны три команды, которые могут вам пригодиться при работе с файлами: chown, id, groups. Если вы владелец файла, ваше регистрационное имя размещается в категории owner. Команда chown позволяет владельцу файла изменить собственный ID на любой другой. Например, если вы введете команду:

ls -l display<CR>

на экране появится информация:

-r-xr-xr-x 1 owner group 9346 Nov 1 08:06 display

Чтобы изменить ваш ID на чей-либо другой (например, sara) вы должны ввести:

chown sara display<CR>

Если вы введете:

ls -l display<CR>

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

-r-xr-xr-x 1 sara group 9346 Nov 1 08:06 display

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

id<CR>

то система отобразит ID пользователей и ваш действительный групповой ID (gid). В зависимости от начальной установки системы вы можете принадлежать более чем к одной группе. Чтобы определить, членом какой группы вы являетесь, введите:

groups<CR>

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

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

diff - найти различия между двумя файлами;

grep - поиск в файле по шаблону;

sort - сортировка и слияние файлов.

Команда diff

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

Синтаксис команды:

diff файл_1 файл_2<CR>

Если файл_1 и файл_2 идентичны, то система возвращает подсказку. Если есть различия между ними, то команда diff инструктирует вас, как изменить первый файл (с помощью редактора ed), чтобы он соответствовал второму файлу. Система UNIX помечает строки в файл_1 (которые будут изменены) символом < (меньше), и строки в файл_2 (шаблон текста) символом > (больше).

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

3, 6c3, 6

< Mr. Ron Johnson

< Layton Printing

< 52 Hudson Street

< New York, N.Y.

---

> Dear Mr. McDonough:

Первая строка команды diff:

3, 6c3, 6

Это означает, что если вы хотите, чтобы johnson соответствовал mcdonough, вы должны изменить (c) строки с 3-й по 6-ю в файле johnson на строки с 3-й по 6-ю из файла mcdonough. Команда diff затем отобразит оба набора строк. Если вы выполните эти изменения (с помощью таких редакторов как ed или vi), файл johnson будет идентичен файлу mcdonough. Помните, что команда diff ищет различия только между двумя указанными файлами.

В первой выводной строке команды diff могут появиться следующие буквы:

a - добавить;

c - изменить;

d - удалить.

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

Команда grep

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

Синтаксис комнды:

grep шаблон файл(ы)<CR>

Например, чтобы отыскать любую строку, содержащую слово automation в файле johnson, введите:

grep automation johnson<CR>

Система ответит:

$ grep automation johnson<CR>

and office automation software

$

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

Если шаблон содержит много слов или любых символов, которые имеют специальное значение для системы UNIX (например, $, |, *, ? и т.д.) вводимый шаблон должен быть заключен в кавычки. Например, вы хотите найти строки, содержащие шаблон office automation. Ваша командная строка и ответ системы будут выглядеть следующим образом;

$ grep 'office automation' johnson<CR>

and office automation software

$

Но если вы не знаете, какое письмо содержит шаблон office automation, письмо johnson или sanders, можете ввести команду в следующем виде:

$ grep 'office automation' johnson sanders<CR>

johnson:and office automation software

$

Выводная строка говорит вам, что шаблон office automation найден только в файле johnson.

Дополнительно к команде grep система UNIX обеспечивает разновидности этой команды - это команды egrep и fgerp с несколькими ключами, облегчающими поиск.

Команда sort

Система обеспечивает эффективное средство для сортировки и слияния файлов.

Синтаксис команды:

sort файл(ы)<CR>

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

  • строки, начинающиеся с цифры, будут отсортированы по цифрам и перечислены после строк, начинающихся с буквы;
  • строки, начинающиеся с большой буквы, перечисляются до строк, начинающихся с маленькой буквы;
  • строки, начинающиеся с таких символов, как "%", "*" сортируются на основе символьного представления ASCII.

Например, вы имеете 2 файла group1 и group2, каждый из которых содержит перечень имен. Вы хотите отсортировать каждый список по алфавиту и затем объединить два списка в один. Вначале отобразите содержание файлов, выполнив команду cat для каждого файла. Экран будет выглядеть следующим образом:

$ cat group1<CR>

Smith, Allyn

Jones, Barbara

Cook, Karen

Moore, Peter

Wolf, Robert

$ cat group2<CR>

Frank, H. Jay

Nelson, James

West, Donna

Hill, Chales

Morgan Kristina

$

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

$ cat group1 group2<CR>

результат будет такой же.

Теперь отсортируйте и слейте эти два файла, выполнив команду sort. Результат выполнения команды sort будет распечатан на экране терминала, если вы не укажете иначе.

$ cat group1 group2<CR>

Cook, Karen

Frank, H. Jay

Hill, Chales

Jones, Barbara

Moore, Peter

Morgan, Kristina

Nelson, James

Smith, Allyn

West, Donna

Wolf, Robert

$

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

Команда ln

Для того чтобы понять действие команды рассмотрим системную функцию LINК, которая участвует в реализации команды. Аналогично поступим и с командой unlink, с помощью которой удаляем элемент из файлового дерева.

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

link(source file name, target file name);

где source file name - существующее имя файла, а target file name – новое (дополнительное) имя, присваиваемое файлу после выполнения функции link.

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

link("/usr/src/uts/sys","/usr/include/sys");

link("/usr/include/realfile.h","/usr/src/uts/sys/testfile.h");

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

"/usr/src/uts/sys/testfile.h", "/usr/include/sys/testfile.h" и

"/usr/include/realfile"

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

UNLINК

Системная функция unlink удаляет из каталога точку входа для файла. Синтаксис вызова функции unlink:

unlink(pathname);

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

ФАЙЛОВАЯ СИСТЕМА ОС UNIX