ГЛАВА 3 ПРИНЦИПЫ РАБОТЫ В ФАЙЛОВОЙ СИСТЕМЕ СОДЕРЖАНИЕ ВВЕДЕНИЕ 2 3.1 СТРУКТУРА ФАЙЛОВОЙ СИСТЕМЫ 3 3.2 МЕСТО ПОЛЬЗОВАТЕЛЯ В ФАЙЛОВОЙ СИСТЕМЕ 5 3.2.1 Основной каталог пользователя 5 3.2.2 Текущий каталог 7 3.2.3 Маршрутные имена 8 3.2.3.1 Полные маршрутные имена 8 3.2.3.2 Относительные маршрутные имена 11 3.2.3.3 Именование каталогов и файлов 16 3.3 ОРГАНИЗАЦИЯ КАТАЛОГА 17 3.3.1 Создание каталогов: команда mkdir 17 3.3.2 Просмотр содержимого каталога: команда ls 18 3.3.2.1 Часто используемые опции команды ls 20 3.3.2.1.1 Вывод всех имен, содержащихся в каталоге 20 3.3.2.1.2 Вывод в коротком формате 21 3.3.2.1.3 Вывод в длинном формате 21 3.3.3 Изменение текущего каталога: команда cd 23 3.3.4 Удаление каталогов: команда rmdir 25 3.4 ДОСТУП К ФАЙЛАМ И УПРАВЛЕНИЕ ИМИ 27 3.4.1 Основные команды 27 3.4.1.1 Вывод содержимого файла: команды cat, pg и pr 28 3.4.1.1.1 Объединение файла и вывод его содержимого: команда cat 28 3.4.1.1.2 Разбиение файла на страницы: команда pg 30 3.4.1.1.3 Форматирование вывода: команда pr 34 3.4.1.2 Вывод файла на печать: команда lp 36 3.4.1.3 Копирование файла: команда cp 38 3.4.1.4 Перемещение и переименование файла: команда mv 41 3.4.1.5 Удаление файла: команда rm 43 3.4.1.6 Подсчет числа строк, слов и символов в файле: команда wc 44 3.4.1.7 Защита файлов: команда chmod 46 3.4.1.7.1 Как определить текущие права доступа 48 3.4.1.7.2 Как изменить существующие права доступа 49 3.4.1.7.3 Права доступа к каталогам 51 3.4.1.7.4 Альтернативный метод 51 3.4.2 Дополнительные команды 53 3.4.2.1 Определение различий между файлами: команда diff 53 3.4.2.2 Поиск в файле по шаблону: команда grep 55 3.4.2.3 Сортировка и слияние файлов: команда sort 57 ЗАКЛЮЧЕНИЕ 60 ВВЕДЕНИЕ Для эффективного использования файловой системы UNIX необходимо быть хорошо осведомленным о ее структуре и иметь представление о перемещении по ней пользователя. В процессе изучения содержа- ния главы вы подготовитесь к использованию файловой системы UNIX'а. Первые два раздела главы посвящены структуре файловой системы. В оставшейся части рассматриваются команды системы UNIX, кото- рые дают возможность пользователю создать собственную структуру каталогов, иметь доступ и управлять подкаталогами и файлами в пределах этой структуры, а также просматривать содержимое дру- гих каталогов файловой системы, к которым он имеет право досту- па. Каждая команда описывается в отдельном подразделе. В конце под- разделов приводится по таблице, содержащей краткое описание ко- манды. Эти таблицы позволяют пользователю бегло просматривать синтаксис и возможности команд. Многие команды, представленные в этом разделе, имеют более широкие возможности, которые расс- читаны на более опытных пользователей и описываются в другой документации по системе UNIX. Все представленные здесь команды являются базовыми для эффективного и достаточно легкого исполь- зования файловой системы. По мере чтения описания каждой коман- ды, делайте попытку тут же ее применить. 3.1 СТРУКТУРА ФАЙЛОВОЙ СИСТЕМЫ Файловая система включает в себя обычные файлы, специальные файлы и каталоги. Эти компоненты обеспечивают организацию, пос- ледующее использование и управление информацией. Обычный файл - это набор байт, хранящихся на диске. Он может содержать текстовую информацию или программу. Специальному файлу соответствует физическое устройство, такое как терминал или диск. Каталог - это совокупность ссылок на файлы или другие каталоги (называемые подкаталогами). Каталоги использу- ются для группирования файлов на основе какого-нибудь выбираемого пользователем критерия. Например, можно создать каталог для каждого продаваемого фирмой изделия или для каждой из записей о студентах. Множество всех каталогов и файлов имеет древовидную иерархичес- кую структуру. На рисунке ниже Вы видите пример файловой систе- мы. В основании ее находится каталог, называемый корневым (/). Перемещаясь вниз по ветвям, исходящим из корневого каталога, можно попасть в основные системные каталоги, а из них, опуска- ясь дальше по ветвям, можно достигнуть любых каталогов и файлов системы. В этой иерархии файлы и каталоги, которые являются подчиненными по отношению к некоторому каталогу, имеют связь, называемую от- ношением отец/сын. Этот тип отношения возможен для многих уров- ней файлов и каталогов. В системе не существует каких-либо ог- раничений на число файлов и каталогов, которое может создать пользователь в любом своем каталоге. Не существует таких огра- ничений и для числа уровней каталогов, которое он может соз- дать. Тем самым пользователь имеет возможность организовывать свои файлы самыми разными способами. 3.2 МЕСТО ПОЛЬЗОВАТЕЛЯ В ФАЙЛОВОЙ СИСТЕМЕ Свое взаимодействие с системой UNIX пользователь осуществляет, находясь в определенном месте структуры файловой системы. ОС UNIX автоматически, при каждом входе пользователя в систему, помещает Вас в некоторую точку файловой системы. Из этой точки Вы можете перемещаться в иерархии структуры для работы с любым из своих каталогов или файлов или для доступа к тем каталогам или файлам, которые принадлежат другим пользователям, но дос тупны Вам. В последующих разделах описывается местоположение и перемещение пользователя по структуре файловой системы. 3.2.1 Основной каталог пользователя При успешном входе в систему UNIX, Вы попадаете в определенную точку структуры файловой системы, которая называется входным или основным каталогом. Имя основного каталога пользователя обычно совпадает с входным именем. Каждый пользователь, имеющий уникальное входное имя, обладает единственным входным катало гом. Система UNIX сохраняет все эти основные каталоги в одном или нескольких системных каталогах. Например, основные каталоги с входными именами petrov, mary2 и jmrs включены в системный ка- талог с именем user1. На рисунке ниже демонстрируется положение системного каталога user1 по отношению к другим важным катало- гам системы UNIX, рассмотренным в гл.1. В своем основном каталоге пользователь может создавать файлы и дополнительные каталоги (их иногда называют подкаталогами). Он может перемещать и удалять свои файлы и каталоги, управлять доступом к ним. Пользователь несет полную ответственность за все, что создается в его основном каталоге, поскольку является его владельцем. Основной каталог пользователя служит исходной точкой, из которой можно обозреть все содержащиеся в нем файлы и каталоги, и из которой все пути вверх по иерархии ведут к корневому каталогу. 3.2.2 Текущий каталог До тех пор, пока Вы работаете в своем основном каталоге, он считается текущим рабочим каталогом. Если же Вы перейдете в другой каталог, то текущим будет последний. По команде системы UNIX pwd (сокращение от "print working di- rectory") выводится имя того каталога, в котором в данный мо- мент находится пользователь. Например, если входным именем пользователя служит имя petrov, и он в ответ на первое пригла- шение после входа в систему выполняет команду pwd, система UNIX ответит следующим образом: |$ pwd |/user1/petrov |$ Ответ системы содержит в себе как имя каталога, в котором поль- зователь работает (petrov), так и местоположение этого каталог в файловой системе. Строка /user1/petrov означает, что корневой каталог (обозначается первым знаком / в строке) содержит ката- лог user1, который, в свою очередь, включает в себя каталог petrov. Знаки косой черты (кроме первого) используются также в качестве разделителей имен каталогов и файлов, отражая позицию каждого каталога по отношению к корневому. Имя файла, в котором таким образом перечислены имена вышестоящих каталогов (вплоть до корневого), называется полным именем каталога или маршрутным именем. Ниже это маршрутное имя будет подробно рассмотрено с тем, чтобы научить пользователя перемещаться по всей файловой системе. Помните, что для определения своего местонахождения в файловой системе нужно воспользоваться командой pwd. Это бывает необхо- димо, например, если пользователь хочет прочитать или скопиро вать файл, а система UNIX отвечает, что файл, к которому проис- ходит обращение, не существует. Дело может заключаться в том, что пользователь оказался не в том каталоге, в котором предпо- лагал. В таблице дано краткое описание синтаксиса и возможностй коман- ды pwd. | +---------------------------------------------------------------+ | | Краткое описание команды | | | | | | pwd - вывести полное имя рабочего каталога | | +---------------------------------------------------------------| | | команда опции аргументы | | +---------------------------------------------------------------| | | pwd отсутствуют отсутствуют | | +---------------------------------------------------------------| | | Описание: pwd выводит полное имя каталога, в котором в | | | текущий момент работает пользователь | | +---------------------------------------------------------------+ 3.2.3 Маршрутные имена В системе UNIX каждый файл или каталог определяется уникальным маршрутным именем. Это имя отражает местоположение файла или каталога и определяет направление для доступа к нему. Знание того, каким образом следовать направлениям, задаваемым маршрут- ным именем, является основополагающим для успешного перемещения внутри файловой системы. Первым шагом в познании является зна комство с двумя типами маршрутных имен: полным и относительным. 3.2.3.1 Полные маршрутные имена Полное маршрутное имя (иногда называемое абсолютным маршрутным именем) задает направление, которое начинается в корневом ката- логе и ведет вниз по иерархии через единственную последователь- ность каталогов к определенному каталогу или файлу. Используя маршрутное имя, можно достичь любого файла или каталога в сис- теме UNIX. Поскольку полное маршрутное имя всегда начинается с корневого каталога файловой системы, то первым его символом всегда явля- ется знак / (косая черта, или слэш). Последним именем в полном маршрутном имени может быть либо имя файла, либо имя каталога. Остальные части имени должны быть именами каталогов. Чтобы понять, каким образом строится полное маршрутное имя и как оно направляет пользователя, рассмотрим следующий пример. Пусть пользователь работает в каталоге petrov, размещенном в /user1. После выполнения команды pwd выводится полное имя рабо чего каталога: /user1/petrov. Проанализируем элементы этого полного имени: | +----------------------------------------------------------------------- | | / (первый) знак косой черты, являющийся первым | | | символом маршрутного имени, соответст- | | | вует корневому каталогу файловой сис- | | | стемы | | | | | | user1 системный каталог на уровень ниже кор- | | | невого в иерархии | | | | | | / (последующий) последующий знак косой черты разделяет | | | имена каталогов user1 и petrov | | | | | | petrov текущий рабочий каталог | | +-----------------------------------------------------------------------+ Чтобы проследить полный маршрут к каталогу /user1/petrov, обра- тите внимание на выделенные линии на рисунке ниже. 3.2.3.2 Относительные маршрутные имена Относительное маршрутное имя задает направление, которое начи- нается в текущем рабочем каталоге и ведет вверх или вниз по файловой системе (через ряд каталогов) к определенному файлу или каталогу. Перемещаясь вниз по файловой системе из текущего каталога, пользователь может получить доступ к собственным фай- лам и каталогам. Перемещаясь вверх из текущего каталога, Вы проходите через уровни родительских каталогов к прародителю всех системных каталогов - корневому каталогу, откуда доступно любое место файловой системы. Относительное маршрутное имя может начинаться: именем каталога или файла; знаком . (произносится "точка"), который представля- ет собой краткое определение текущего каталога; знаком .. (про- износится "точка-точка"), который обозначает каталог, находя- щийся непосредственно над текущим каталогом в иерархии файловой системы (надкаталог текущего каталога). Допустим, пользователь находится в каталоге petrov, а сам ката- лог petrov содержит каталоги с именами class, letters и bin и файл с именем mbox. Тогда относительное маршрутное имя для лю- бого из них будет соответствовать просто их имени, такому как class или mbox. На рисунке ниже выделен относительный маршрут из каталога petrov в каталог class. Каталог class, входящий в каталог petrov, содержит файлы les- sons и table. Относительным маршрутным именем из petrov к файлу lessons является class/lessons. На следующем рисунке этот относительный маршрут выделен. Следу- ет заметить, что знак косой черты в этом маршрутном имени отде ляет имя каталога class от файла lessons, показывая, что les- sons является подчиненным по отношению к class. Чтобы подняться в надкаталог текущего каталога, можно использо- вать нотацию .. ("точка-точка"). Это означает, что если пользователь находится в каталоге с име- нем class, то .. - это маршрутное имя к каталогу petrov, а ../ .. - маршрутное имя к надкаталогу каталога petrov, т.е. катал гу user1. С помощью маршрутного имени ../letters/sanders можно задать маршрут из каталога class к файлу sanders. Знак .. поднимает в каталог petrov, а затем имена letters и sanders опускают через каталог letters к файлу sanders. Помните, что всегда вместо относительного можно использовать полное маршрутное имя. В таблице показано несколько примеров полных и относительных маршрутных имен. | +----------------------------+------------------------------------------+ | | Маршрутное имя | Смысл | | +----------------------------+------------------------------------------| | | / | полное маршрутное имя корневого ка- | | | | талога | | +----------------------------+------------------------------------------| | | /bin | полное маршрутное имя каталога bin | | | | (содержит большинство исполняемых | | | | программ и утилиты) | | +----------------------------+------------------------------------------| | | /user1/petrov/bin/tools | полное маршрутное имя каталога | | | | tools, входящего в каталог bin, | | | | принадлежащий каталогу petrov, | | | | содержащемуся в user1, который вхо- | | | | дит в корневой каталог | | +----------------------------+------------------------------------------| | | bin/tools | относительное маршрутное имя файла | | | | или каталога tools в каталоге bin | | | | | | | | Если текущим каталогом является | | | | корневой каталог /, то система UNIX | | | | ищет /bin/tools. Однако, если теку- | | | | щим каталогом служит каталог | | | | petrov, система ищет по полному | | | | маршруту: /user1/petrov/bin/tools. | | +----------------------------+------------------------------------------ | | tools | относительное маршрутное имя файла | | | (каталога) tools в текущем каталоге. | +----------------------------+------------------------------------------+ 3.2.3.3 Именование каталогов и файлов Файлам и каталогам можно присваивать любые имена в соответствии со следующими правилами: Имя каталога (или файла) может иметь длину от одного до четырнадцати символов. Допустимы все символы, за исключением /. Некоторых символов лучше всего избегать: таких как про- бел, табуляция, забой, а также ? @ # $ ^ & * ( ) ` [ ] \ | ; ' " < > Если в имени каталога или файла используются символы пробела или табуляции, это имя в командной строке необ- ходимо заключать в кавычки. Избегайте использования знаков + или - в качестве пер- вого символа имени файла. Символы верхнего и нижнего регистров в системе UNIX различаются. Например, система считает каталоги с име- нами class и CLASS различными. Ниже представлены примеры правильных имен файлов или каталогов: |memo MEMO section2 ref:list file.d chap3+4 item1-10 Далее в главе рассматриваются команды системы UNIX, предназна- ченные для работы в файловой системе. 3.3 ОРГАНИЗАЦИЯ КАТАЛОГА В этом разделе рассматриваются четыре команды системы UNIX, позволяющие работать с каталогами: mkdir, ls, cd и rmdir. mkdir дает возможность создавать новые каталоги и подкаталоги в текущем каталоге пользователя ls выдает список имен всех подкаталогов и файлов каталога cd дает возможность пользователю перемещаться в файловой системе из одного каталога в другой rmdir дает возможность удалять пустой каталог Эти команды допускают задание как полных, так и относительных маршрутных имен каталогов. Две из них (ls и cd) могут использо- ваться вообще без аргументов. Далее подробно описывается каждая из команд. 3.3.1 Создание каталогов: команда mkdir Пользователю рекомендуется создавать подкаталоги своего основ- ного каталога в соответствии с логической и смысловой схемой которая облегчит последующее использование информации из фай- лов. Если свести все файлы, имеющие отношение к одному предме- ту, в один каталог, то потом их легче будет найти. Для создания каталога используйте команду mkdir (сокращение от "make directory"). С этой целью, просто введите имя команды, за которым следует имя нового каталога. Так, в уже рассмотренном примере файловой системы, владелец подкаталога class создал его, находясь в основном каталоге (/user1/petrov): |$ mkdir class |$ Второе приглашение говорит о том, что команда успешно заверше- на, подкаталог class создан. Точно так же, оставаясь в основном каталоге, этот пользователь создал и другие подкаталоги (letters и bin): |$ mkdir letters |$ mkdir bin |$ Пользователь мог создать все три подкаталога (class, letters и bin) с помощью одной командной строки: |$ mkdir class letters bin |$ Аналогично, перейдя в созданный подкаталог, можно построить в нем дополнительный подкаталог. При построении каталогов или создании файлов их можно именовать произвольным образом в соот- ветствии с правилами, приведенными выше (см. "Именование ката- логов и файлов"). В таблице дано краткое описание синтаксиса и возможностей ко- манды mkdir. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | mkdir - создать новый каталог | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | mkdir отсутствуют имя(имена)_каталога(ов) | | +-----------------------------------------------------------------------| | | Описание: mkdir создает новый каталог (подкаталог). | | | | | | Примечание: Система выдает приглашение (по умолчанию $), если | | | каталог успешно создан. | | +-----------------------------------------------------------------------+ 3.3.2 Просмотр содержимого каталога: команда ls Каталоги файловой системы содержат информацию о всех имеющихся в них файлах и каталогах: имя, размер, дата последней модифика- ции. Эту информацию о содержимом текущего каталога и других системных каталогах можно получить, выполняя команду ls (сокра щение от "list"). Команда ls выводит список всех файлов и подкаталогов указанного каталога. Если каталог не указан, выдается список имен файлов и каталогов текущего каталога. Чтобы понять действие команды ls, снова обратимся к примеру ранее рассмотренной файловой системы. Пусть пользователь вошел в систему UNIX и выполнил команду pwd. Система ответила выводом маршрутного имени /user1/petrov. Чтобы вывести имена файлов и каталогов, содержащихся в этом текущем каталоге, пользователю следует ввести команду ls. Терминал бу- дет иметь вид: |$ pwd |/user1/petrov |$ ls |bin |class |letters |list |mbox |$ Как видно, система отвечает выводом списка имен файлов и ката- логов текущего каталога petrov в алфавитном порядке. (Если бы первым символом каких-либо имен файлов или каталогов была бы цифра или буква верхнего регистра, то они были бы выведены в начале списка.) Чтобы вывести имена файлов и подкаталогов из каталога, не явля- ющегося текущим, и при этом не перемещаться из текущего катало- га, следует в команде задать имя требуемого каталога: |ls имя_каталога Имя требуемого каталога может быть как полным, так и относи- тельным. Например, путем ввода ls class можно просмотреть со- держимое каталога class, работая в каталоге petrov. На термина- ле появится следующее: |$ ls class |lessons |table |$ Здесь class является относительным маршрутным именем от роди- тельского каталога petrov. Можно употребить относительное маршрутное имя и для вывода со- держимого надкаталога (находясь в каталоге-потомке). Используем обозначение .. ("точка-точка"). Например, в следующей командной строке задано относительное маршрутное имя от petrov к user1: |$ ls .. |jmrs |mary2 |petrov |$ Тот же результат можно получить, используя полное маршрутное имя (от корневого каталога к каталогу user1). Если ввести к манду ls /user1, система ответит тем же самым списком. Аналогично, пользователь, выполняя команду ls и задавая полное или относительное маршрутное имя, может получить список содер- жимого любого системного каталога (если имеет разрешение на доступ к нему). Команда ls удобна тогда, когда у пользователя длинный список файлов и требуется определить, существует ли в его рабочем ка талоге некоторый файл. Например, если пользователь находится в каталоге class и хочет определить, есть ли там файлы с именами lessons и notes, он может ввести следующую команду ls: |$ ls lessons notes |lessons |notes not found |$ Система подтверждает существование файла lessons выводом его имени и сообщает, что файл notes не найден. Команда ls не выводит содержимое файла. Для просмотра следует воспользоваться командами cat, pg или pr (они описываются в этой же главе в разделе "Доступ к файлам и управление ими"). 3.3.2.1 Часто используемые опции команды ls Команда ls допускает использование опций, которые вызывают включение в выводимый список специфических атрибутов файла или каталога. С командой ls употребляется более дюжины опций. Из них наиболее ценными при выполнении основных действий в системе UNIX, вероятно, будут опции -a и -l. Для ознакомления с другими опциями следует обратиться к разд. ls(1) в Справочнике пользо- вателя. 3.3.2.1.1 Вывод всех имен, содержащихся в каталоге В основном каталоге пользователя некоторые имена важных файлов начинаются с точки, например, .profile. Имена таких файлов не включаются в список файлов, выводимых по команде ls. Если же необходимо включить в список и файлы с именами, начинающимися с точки, следует в командной строке ls использовать опцию -a. Например, для получения списка всех файлов текущего каталога petrov пользователя (включая и те файлы, имена которых начина- ются с точки) необходимо ввести команду ls -a. |$ ls -a |. |.. |.profile |bin |class |letters |list |mbox |$ 3.3.2.1.2 Вывод в коротком формате В команде ls часто используются опции -C и -F. Совместно эти опции формируют список подкаталогов и файлов каталога в нес- колько колонок и помечают выполняемые файлы с помощью символа *, а каталоги - символа /. Таким образом, список всех файлов своего рабочего каталога petrov пользователь может вывести ко- мандой: |$ ls -CF |bin/ letters/ mbox class/ |list* |$ 3.3.2.1.3 Вывод в длинном формате Наиболее информативной опцией команды ls является опция -l, по которой содержимое каталога выводится в длинном формате, вклю- чающем в себя для каждого файла режим доступа, число связей, имя владельца и группы, размер в байтах и время последней моди- фикации. Допустим, пользователь ввел команду ls -l, находясь в каталоге petrov: |$ ls -l |total 30 |drwxr-xr-x 3 petrov project 96 Oct 27 08:16 bin |drwxr-xr-x 2 petrov project 64 Nov 1 14:19 class |drwxr-xr-x 2 petrov project 80 Nov 8 08:41 letters |-rwx------ 2 petrov project 12301 Nov 2 10:15 list |-rw------- 1 petrov project 40 Oct 27 10:00 mbox |$ Первая строка на экране (total 30) соответствует объему исполь- зуемой дисковой памяти в блоках. Каждая последующая строка со- держит в себе сведения о каталоге или файле из каталога petrov. Первый символ каждой строки (d, -, b или c) указывает на тип файла. d каталог - обычный файл b специальный блочный файл c специальный символьный файл Имея в виду эти обозначения, можно увидеть, что каталог petrov содержит в себе три каталога и два обычных файла. Последующие несколько символов, которые являются буквами или дефисами, оп- ределяют права доступа к файлу или каталогу. (Права доступа рассматриваются при описании команды chmod в разделе "Доступ к файлам и управление ими" в этой же главе.) Затем указывается число, являющееся счетчиком связей. Для файла это число эквивалентно количеству пользователей, связанных с ним; для каталога - числу каталогов, непосредственно содержа- щихся в данном, плюс два (сам каталог и его надкаталог). После этого в строке выдается имя владельца файла (здесь pet- rov), за которым следует имя группы пользователей для файла или каталога (в данном примере project). Следующее число определяет длину файла или каталога, измеренную в единицах информации или памяти, называемых байтами. Затем указываются месяц, день и время последней модификации файла. Наконец, в последней колонке выводится имя каталога или файла. На рисунке ниже надписана каждая из колонок в строке вывода ко- манды ls -l. | число имя объем в | использованных владельца байтах | блоков | число | имя | имя | | связей | группы | файла | v | | | +-+total 30 v v v v v | |d|rwxr-xr-x 3 petrov project 96 Oct 27 08:16 bin | тип |d|rwxr-xr-x 2 petrov project 64 Nov 1 14:19 class | >|d|rwxr-xr-x 2 petrov project 80 Nov 8 08:41 letters | файла |-|rwx------ 2 petrov project 12301 Nov 2 10:15 list | |-|rw------- 1 petrov project 40 Oct 27 10:00 mbox | +-+ ^ ^ | | | | права дата и время | доступа последней модификации В таблице дано краткое описание синтаксиса и возможностей ко- манды ls. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | ls - вывести содержимое каталога | | +-----------------------------------------------------------------------| | | команда опции * аргумент | | +-----------------------------------------------------------------------| | | ls -a, -l и другие имя(имена)_каталога(ов)| | +-----------------------------------------------------------------------| | | Описание: Команда ls выводит список файлов и подкаталогов | | | указанного каталога. Если аргумент не задан, выво- | | | дится содержимое текущего рабочего каталога. | | | | | | Опции: -а Включает в список все элементы каталога (в том | | | числе и с именами, начинающимися с точки). | | | | | | -l Выводит содержимое каталога в длинном формате, | | | включающем тип файла, права доступа, размер в | | | байтах и время последней модификации. | | | | | | Примечание: Для чтения содержимого файла следует использовать | | | команду cat. | | +-----------------------------------------------------------------------+ * Описание всех имеющихся опций и их действие см. в ls(1) Справочника пользователя. 3.3.3 Изменение текущего каталога: команда cd При входе систему UNIX пользователь попадает в свой основной каталог. Пока Вы работаете в этом каталоге, он служит текущим рабочим каталогом. Однако, с помощью команды cd (сокращение от "change direrctory") можно перейти в другие каталоги. Чтобы ис- пользовать эту команду, следует ввести cd и маршрутное имя ка- талога, в который необходимо перейти. |cd имя_нового_каталога В качестве аргумента команды cd может быть использовано любое допустимое маршрутное имя (полное или относительное). Если в команде отсутствует аргумент, то она возвращает пользователя в основной каталог. Каталог, в который перемещает пользователя команда cd, становится текущим. Например, чтобы перейти из каталога petrov в его каталог-пото- мок class (в примере файловой системы, приведенном выше), сле- дует ввести cd class. (Здесь class является относительным марш- рутным именем требуемого каталога.) После получения приглашения можно проверить свое местонахождение в файловой системе с по- мошью команды pwd. На экране терминала появится примерно следу- ющее: |$ cd class |$ pwd |/user1/petrov/class |$ Совсем необязательно, находясь в каталоге class, обращаться к файлам только этого каталога. Можно получить доступ к файлу в любом другом каталоге, если задать для него полное маршрутное имя. Например, чтобы вывести на экран содержимое файла sanders, расположенного в каталоге letters (/user1/petrov/letters), на- ходясь в это время в каталоге class (/user1/petrov/class), в командной строке следует задать полное маршрутное имя файла sanders: |cat /user1/petrov/letters/sanders Можно использовать полные маршрутные имена и в команде cd. Нап ример, для перехода из каталога class в каталог letters, укажи те в командной строке имя /user1/petrov/letters: |cd /user1/petrov/letters Поскольку каталоги letters и class являются потомками каталога petrov, в команде cd можно использовать относительное маршрут- ное имя ../letters. При этом сначала происходит перемещение в каталог petrov, а затем уже в каталог letters. В таблице приводится краткое описание синтаксиса и возможностей команды cd. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | cd - сменить рабочий каталог | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | cd отсутствуют имя_каталога | | +-----------------------------------------------------------------------| | | Описание: cd осуществляет переход из текущего каталога в | | | указанный (изменяя местоположение пользователя в | | | файловой системе). Если аргумент не задан, команда | | | переводит пользователя в его основной каталог. | | | | | | Примечания: После перемещения пользователя в указанный каталог, | | | на экране появляется приглашение системы. Для пере- | | | хода в каталог, который не является рабочим катало- | | | гом пользователя, необходимо задавать полное или | | | относительное маршрутное имя вместо простого имени | | | каталога. | | +-----------------------------------------------------------------------+ 3.3.4 Удаление каталогов: команда rmdir Если каталог больше не нужен, его можно удалить с помощью ко- манды rmdir (сокращение от "remove a directory"). Стандартный формат этой команды: |rmdir имя(имена)_каталога(ов) В командной строке можно указать несколько имен каталогов. Командой rmdir нельзя удалить каталог, если он не пуст. Если Вы хотите удалить файл в каталоге другого пользователя, владелец должен предоставить Вам разрешение на запись в надкаталог уда- ляемого файла. Если попытаться удалить каталог, который еще содержит файлы или подкаталоги (т.е. не пуст), команда rmdir выдает сообщение: имя_каталога not found. Необходимо удалить все подкаталоги; только после этого команда завершится успешно. Пусть, например, есть каталог с именем memos, который содержит один подкаталог (tech) и два файла (june.30 и july.31). (Соз- дайте этот каталог у себя в основном каталоге, и Вы сможете посмотреть, как работает команда rmdir.) Если попытаться уда- лить каталог memos (выполняя команду rmdir из основного катало- га), то команда ответит следующим образом: |$ rmdir memos |rmdir: memos not empty |$ Прежде чем удалять каталог memos, следует сначала удалить его содержимое: подкаталог tech и файлы june.30 и july.31. Подката- лог tech можно удалить этой же командой rmdir. Способ уничтоже- ния файла описан в разд. "Доступ к файлам и управление ими" этой главы. Если удалено содержимое каталога memos, то он и сам может быть удален. Однако сначала необходимо перейти в его надкаталог (в данном случае - основной каталог). Команда rmdir не будет вы- полняться, если пользователь все еще остается в каталоге, кото- рый он хочет удалить. Теперь для удаления каталога memos следу- ет ввести из основного каталога: |rmdir memos Если memos пуст, команда rmdir удалит его, а затем будет выдано приглашение. В таблице приводится краткое описание синтаксиса и возможностей команды rmdir. | +------------------------------------------------------------------------+ | | Краткое описание команды | | | | | | rmdir - удалить каталог | | +------------------------------------------------------------------------| | | команда опции аргументы | | +------------------------------------------------------------------------| | | rmdir отсутствуют имя(имена)_каталога(ов)| | +------------------------------------------------------------------------| | | Описание: rmdir удалает указанные каталоги, если они не со- | | | держат файлов и/или каталогов | | | | | | Примечания: Если каталог пуст, он удаляется, и система выдает | | | приглашение. Если в нем содержатся файлы или катало- | | | ги, выдается сообщение: | | | rmdir: имя_каталога not empty. | | +------------------------------------------------------------------------+ 3.4 ДОСТУП К ФАЙЛАМ И УПРАВЛЕНИЕ ИМИ В этом разделе рассматривается ряд команд системы UNIX, пос- редством которых осуществляется доступ к файлам и управление ими. Информация раздела разбита на две части: основную и допол- нительную. Часть, посвященная основным командам, является базо- вой для работы с файловой системой. Дополнительные команды ори- ентированы на более сложные способы обработки файлов. 3.4.1 Основные команды В данном разделе описаны команды системы UNIX, которые необхо- димы для доступа к файлам и работы с ними. Эти команды перечис- лены в таблице. | +-------------------+---------------------------------------------------+ | | Команда | Функция | | +-------------------+---------------------------------------------------| | | cat | выводит содержимое указанного файла на терминал | | +-------------------+---------------------------------------------------| | | pg | выводит на терминал содержимое указанного файла | | | | страницами | | +-------------------+---------------------------------------------------| | | pr | выводит на терминал указанный файл в частично | | | | отформатированном виде | | +-------------------+---------------------------------------------------| | | lp | выводит копию файла на печатающее устройство | | +-------------------+---------------------------------------------------| | | cp | создает копию существующего файла | | +-------------------+---------------------------------------------------| | | mv | перемещает и переименовывает файл | | +-------------------+---------------------------------------------------| | | rm | удаляет файл | | +-------------------+---------------------------------------------------| | | wc | выводит число строк, слов и символов в файле | | +-------------------+---------------------------------------------------| | | chmod | изменяет режимы доступа к файлу (или каталогу) | | +-------------------+---------------------------------------------------+ В последуюших разделах сначала приводится подробное описание каждой команды, а затем ее краткое описание дается в таблице. Эти таблицы позволяют пользователю бегло просматривать синтак- сис и возможности команд. 3.4.1.1 Вывод содержимого файла: команды cat, pg и pr Система UNIX предоставляет в распоряжение пользователя три ко- манды для отображения содержимого файла (или файлов): cat, pg и pr. Команда cat (сокращение от "concatenate") выводит содержи- мое указанного файла (или файлов). Если в команде cat не ис- пользуется переадресация вывода на другой файл или другой ко- манде, этот вывод направляется на экран терминала. Команда pg особенно удобна в тех случаях, когда пользователь собирается просмотреть содержимое длинного файла, поскольку она осуществляет вывод на экран постранично. Команда pr форматирует указанные файлы и отображает их на терминале или, если задано в команде, направляет форматированный вывод на устройство печати (см. команду lp в данной главе). Далее описывается каждая из этих команд cat, pg и pr. 3.4.1.1.1 Объединение файла и вывод его содержимого: команда cat Команда cat выводит содержимое файла или файлов. Например, по- ложим пользователь находится в каталоге letters (в рассмотрен- ной ранее файловой системе) и хочет вывести содержимое файла johnson. После ввода показанной на экране командной строки он получит следующее: |$ cat johnson |5 марта, 1989 |Мистеру Рону Джонсону |Лейтон Принтинг |52 Гудзон стрит |Нью-Йорк |Дорогой мистер Джонсон! |Я получил большое удовлетворение от нашего |утреннего разговора по поводу |планов компании по автоматизации |коммерческой деятельности. |В пакете Вы найдете требуемый |Вам материал, касающийся этого типа ЭВМ |и описывающий программное обеспечение для |поддержки коммерческой деятельности. |Если Вам в дальнейшем потребуются |мои услуги, пожалуйста, не стесняйтесь обращаться. |С уважением | |Джон Хоум |$ Для вывода содержимого двух (или более) файлов следует включить их имена в командную строку. Например, чтобы отобразить на тер- минале файлы johnson и sanders, введите: |$ cat johnson sanders Команда cat прочитает файлы johnson и sanders и выведет их со- держимое в этом же порядке на терминал пользователя. |$ cat johnson sanders |5 марта, 1989 |Мистеру Рону Джонсону |Лейтон Принтинг |52 Гудзон стрит |Нью-Йорк |Дорогой мистер Джонсон! |Я получил большое удовлетворение от нашего |. |. |С уважением | |Джон Хоум |5 марта, 1989 | Миссис Сандерс |Сандерс Рисерч,Inc |43 Нассау стрит |Принсетон, Нью Джерси |Дорогая миссис Сандерс! |Мои коллеги и я с большим интересом |. |. |Искренне Ваш |Джон Хоум |$ Каким образом направить вывод команды cat в другой файл или другой команде описывается в тех разделах гл. 5, в которых об- суждается переадресация ввода и вывода. В таблице приводится краткое описание синтаксиса и возможностей команды cat. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | cat - объединить и вывести содержимое файлов | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | cat возможны* имя(имена)_файла(ов)| | +-----------------------------------------------------------------------| | | Описание: Команда cat считывает имя каждого указанного в команд-| | | ной строке файла и выводит его (файла) содержимое. | | | | | | Примечания: Если указанный файл существует и может быть прочитан, | | | его содержимое отображается на экране терминала; в | | | противном случае на экран выводится сообщение: | | | cat: cannot open имя_файла. | | | | | | Для вывода содержимого каталога используйте команду | | | ls. | | +-----------------------------------------------------------------------+ * Полный набор опций команды и описание их действия см. в разд. cat(1) Справочника пользователя. 3.4.1.1.2 Разбиение файла на страницы: команда pg Команда pg (сокращение от "page") позволяет выполнять на терми- нале постраничный просмотр одного или нескольких файлов. Коман- да pg отображает текст файла страницами (порциями), за которыми следует приглашение (:), означающее, что программа ожидает ко- манду пользователя. Эти команды могут включать в себя запросы на продолжение постраничного вывода содержимого файла и запросы на поиск в файле по указанному символьному шаблону. В представ- ленной ниже таблице приводятся некоторые из таких команд. | +---------------+----------------------------------------------------+ | | Команда | Функция | | +---------------+----------------------------------------------------| | | h | справка; вывести список имеющихся команд pg | | | | | | | q или Q | выйти из режима постраничного листания | | | | команды pg | | | | | | | | вывести следующую страницу текста | | | | | | | l | вывести следующую строку текста | | | | | | | d или D | вывести дополнительную половину страницы | | | | текста | | | | | | | . или <^l> | повторно вывести текущую страницу текста | | | | | | | f | пропустить следующую страницу текста | | | | | | | n | начать вывод следующего файла, указанного | | | | в командной строке | | | | | | | p | вывести предыдущий файл, указанный в | | | | командной строке | | | | | | | $ | вывести последнюю страницу отображаемого | | | в текущий момент файла | | | | | /шаблон | найти указанный символьный шаблон в | | | файле (в направлении к концу файла) | | | | | ?шаблон | найти указанный символьный шаблон в | | | файле (в направлении к началу файла) | +---------------+----------------------------------------------------+ Большинство указанных в таблице команд может быть введено с предшествующим им числом. Например, +1 (вывести следующую стра- ницу), -1 (вывести предшествующую страницу) или 1 (вывести пер- вую страницу). Подробное описание всех имеющихся команд pg при- водится в Справочнике пользователя. Команда pg удобна в тех случаях, когда пользователь собирается прочитать один длинный файл или несколько файлов, поскольку она делает паузу после вывода каждой страницы, давая возможность пользователю просмотреть ее. Размер отображаемой страницы зави- сит от типа терминала. Например, для терминала, способного вы- водить на экран 24 строки, длина страницы составляет 23 строки, а последняя строка содержит двоеточие. Но если файл содержит меньше 23 строк, размер страницы для него будет равен числу строк файла плюс еще одна строка (для двоеточия). Для просмотра содержимого файла с помощью команды pg, ее следу- ет ввести в следующем формате: |pg имя(имена)_файла(ов) Например, для вывода содержимого файла lessons, имеющегося в рассмотренной выше файловой системе, введите: |pg lessons На экране появится первая страница файла. Поскольку файл содер жит больше строк, чем их имеется на одной странице, на нижней строке экрана появляется двоеточие. Оно служит напоминанием пользователю о том, что конец файла не достигнут. Для вывода следующей страницы необходимо нажать клавишу возврата каретки. Ниже демонстрируется действие команды pg в указанном режиме. |$ pg lessons |После анализа предмета для своего |доклада Вам следует подобрать и |систематизировать материал, |который Вы хотите использовать |при его написании. | . | . | . |Хорошим способом для подбора |материала служит его изложение |в виде тезисов. Эти тезисы могут |явиться основой, скелетом при |написании доклада; в известном смысле |: После нажатия на клавишу возврата каретки команда pg возобновит вывод содержимого файла на экран. |он является рецептом, который содержит |названия компонентов и порядок, |в котором их применять. | . | . | . |Ваши тезисы не должны быть очень |подробными; они просто служат в |качестве руководства при написании |доклада. В то же время их можно |дополнить или расширить, если |появились какие-либо новые идеи. |(EOF): Обратите внимание на нижнюю часть экрана, содержащую строку (EOF):. Выражение (EOF): означает, что достигнут конец файла. Приглашение в виде двоеточия служит напоминанием о том, что следует ввести следующую команду. Если просмотр файла закончен, необходимо нажать клавишу возвра- та каретки; на экране вновь появится приглашение $. К тому же результату приводит ввод q или Q. При необходимости можно ис- пользовать и какую-либо другую из имеющихся команд. Кроме того, в командной строке pg можно указать ряд опций (см. разд. pg(1) в Справочнике пользователя). Правильность выполнения команды pg зависит от точности задания типа используемого терминала. Это связано с тем, что программа, реализующая команду pg, может работать с различными терминала- ми, при этом характер ее выполнения меняется. При описании типа терминала следует определить: сколько строк выводить сколько колонок в строке выводить как очищать экран как выделять знаки приглашения или другие слова как стирать текущую строку Чтобы задать тип терминала, пользователю необходимо присвоить соответствующее значение переменной TERM в файле .profile. (Бо- лее подробные сведения о переменной TERM и файле .profile см. в гл. 5, а инструкции по установке значения переменной TERM - в Приложении D.) В таблице приводится краткое описание синтаксиса и возможностей команды pg. | +---------------------------------------------------------------------------+ | | Краткое описание команды | | | | | | pg - вывести содержимое файла по страницам | | +---------------------------------------------------------------------------| | | команда опции аргументы | | +---------------------------------------------------------------------------| | | pg возможны* имя(имена)_файла(ов) | | +---------------------------------------------------------------------------| | | Описание: Команда pg выводит содержимое указанного файла по стра- | | | страницам. | | | | | | Примечания: После вывода страницы текста команда pg ждет указаний | | | от пользователя, чтобы выполнить одно из следующих дей- | | | ствий: продолжить вывод текста, осуществить поиск по | | | по символическому шаблону, выйти из режима построчного | | | листания файла. Кроме того, в команде можно задать ряд | | | опций. Например, можно вывести часть файла, начинающуюся | | | с указанной строки, содержащей определенную последова- | | | тельность символов (шаблон). Можно также вернуться | | | назад и просмотреть текст, который уже выводился. | | +---------------------------------------------------------------------------+ * Описание всех имеющихся опций и их действие см. в разд. pg(1) Справочника пользователя. 3.4.1.1.3 Форматирование вывода: команда pr Команда pr используется для подготовки файла к печати. Она снабжает файл заголовком, разбивает его на страницы с различной длиной и шириной и выводит на экран терминала. Пользователь имеет возможность потребовать, чтобы вывод команды pr направ- лялся на другое устройство, например, печатающее устройство (см. описание команды lp в этом же разделе). Можно направить вывод команды pr в другой файл (см. разделы переадресации ввода и вывода в гл.5). Если пользователь не задал ни одну из возможных опций, команда pr форматирует файл в одну колонку по 66 строк в странице с ко- ротким начальным заголовком. Заголовок состоит из пяти строк: двух пустых строк, строки, содержащей дату, время, имя файла и номер страницы, и еще двух пустых строк. В конце отформатиро- ванного файла вставляется пять пустых строк. Команда pr для получения твердой копии текста файла часто ис- пользуется вместе с командой lp. (См. раздел, описывающий ко- манду lp.) Однако команду pr можно применять и для форматирова- ния и вывода содержимого файла на терминал пользователя. Напри- мер, чтобы просмотреть содержимое файла johnson, имеющегося в рассмотренной выше файловой системе, следует ввести: |pr johnson Ниже представлен пример вывода на экран после выполнения эт команды. |$ pr johnson |Mar 5 15:43 1989 johnson Page 1 |5 марта, 1989 | |Мистеру Рону Джонсону |Лейтон Принтинг |52 Гудзон стрит |Нью-Йорк |Дорогой мистер Джонсон! | |Я получил большое удовлетворение от нашего |утреннего разговора по поводу |планов компании по автоматизации |коммерческой деятельности. |В пакете Вы найдете требуемый |Вам материал, касающийся этого типа ЭВМ |и описывающий программное обеспечение для |поддержки коммерческой деятельности. |Если Вам в дальнейшем потребуются |мои услуги, пожалуйста, не стесняйтесь обращаться. | |С уважением |Джон Хоум |. |. |$ Точки после последней строки файла соответствуют пустым стро- кам, которые команда pr добавляет к выводимой информации с тем, чтобы каждая страница файла содержала 66 строк. Если пользова- тель работает на терминале, допускающем вывод на экран только 24 строк, все 66 строк страницы файла будут выведены без оста- новки. Это означает, что первые 44 строки пробегут по экрану и исчезнут за его верхним краем, и пользователь не сможет их про- читать, если нет возможности возврата назад содержимого одного или двух экранов. Однако, если файл, с которым работает пользо- ватель, очень длинный, даже наличие этой возможности может быть недостаточным, чтобы позволить ему прочитать файл. В этих слу- чаях для приостановки вывода на экран следует ввести <^s>, а для его возобновления - <^q>. В таблице приводится краткое описание синтаксиса и возможностей команды pr. | +----------------------------------------------------------------------------+ | | Краткое описание команды | | | | | | pr - вывести отформатированное содержимое файла | | +----------------------------------------------------------------------------| | | команда опции аргументы | | +----------------------------------------------------------------------------| | | pr возможны* имя(имена)_файла(ов) | +----------------------------------------------------------------------------| | | Описание: Команда pr создает отформатированную копию файла (или | | | файлов) и выводит ее на экран терминала (если не указан | | | другой способ вывода). Файлы выводятся страницами по 66 | | | строк в каждой; в конец каждой страницы помещается пять | | | пустых строк, а в начало - заголовок из пяти строк. За- | | | головок включает в себя: две пустые строки; строку, со- | | | держащую дату, время, имя файла и номер страницы; еще | | | две пустые строки. | | | | | | Примечания: Если указанный файл существует, его содержимое формати- | | | руется и выводится; если нет - выдается сообщение: | | | pr: can't open имя_файла. | | | | | | Для получения распечатки текста файла команда pr часто | | | используется вместе с командой lp. Команда pr может | | | применяться и для просмотра файла на экране терминала. | | | Для приостановки и последующего возобновления вывода | | файла на экран следует вводить соответственно <^s> | | и <^q>. --------------+ * Описание всех имеющихся опций и их действие см. в разд. pr(1) Справочника пользователя. 3.4.1.2 Вывод файла на печать: команда lp Некоторые терминалы имеют встроенные печатающие устройства, что позволяет получать твердые копии файлов. Если есть такой терми- нал, то распечатку файла можно получить просто включив печата- ющее устройство и выполнив команду cat или pr. Однако, если у пользователя имеется только видеотерминал, для распечатки файла необходимо посылать запрос печатающему устройству. Это позволя- ет сделать команда lp (сокращение от "line printer"). Команда lp имеет следующий формат: |lp имя_файла Например, для вывода файла johnson на печатающее устройство следует ввести командную строку: |lp johnson Система отвечает выводом имени (или типа) печатающего устройст- ва, на котором будет распечатан файл, и номер идентификатора (ID) запроса пользователя: |$ lp johnson |reqest id is laser-6885 (1 file) |$ Ответ системы означает, что файл подлежит распечатке на лазер ном печатающем устройстве (этот тип устройства не всегда есть в системе), запрос имеет номер 6885, и выводу подлежит один файл. Опция -ddest (сокращение от "destination") в командной строке вызывает печать файла на другом имеющемся в системе устройстве, которое указывается с помощью аргумента dest. При наличии опции -m пользователь извещается о завершении печати. Чтобы аннулиро- вать запрос на печать, следует ввести команду cancel с указани- ем номера идентификатора запроса. Например, для отмены запроса на печать файла johnson (идентификатор запроса laser-6885) не- обходимо задать командную строку: |cancel laser-6885 Для проверки стадии, на которой находится обслуживание запроса на печать, или для получения номера идентификатора запроса слу- жит команда lpstat. Эта же команда выдает полный список печата- ющих устройств, имеющихся в системе. Какие из них доступны конкретному пользователю зависит от его полномочий в системе UNIX. Узнать о доступных печатающих устройствах можно у адми- нистратора системы или с помощью команды: |lpstat -v В таблице приводится краткое описание синтаксиса и возможностей команды lp. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | lp - получить твердую копию файла на печатающем устройстве | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | lp -d, -m и другие* файл(ы) | | +-----------------------------------------------------------------------| | | Описание: Команда lp требует распечатки указанных файлов | | | на печатающем устройстве. | | | | | | Опции: -ddest Позволяет пользователю выбрать уст- | | | ройство для печати файла. dest оп- | | | ределяет имя или тип устройства; | | | при отсутствии этого аргумента, | | | программа, выполняющая команду lp, | | | сама назначает пользователю печа- | | | тающее устройство. | | | | | | -m Посылает пользователю через элект- | | | ронную почту mail сообщение о за- | | | вершении печати. | | | | | | Примечания: Запрос на печать можно аннулировать путем ввода | | | команды cancel и идентификатора ID запроса, ко- | | торый выдается системой при подтверждении полу- | | чения запроса на печать. | | | | О командах для работы с печатающими устройствами, | | доступнми пользователю при его статусе в системе, | | Вы можете узнать у администратора системы. -------+ * Описание всех имеющихся опций и их действие см. в разд. lp(1) Справочника пользователя. 3.4.1.3 Копирование файла: команда cp При работе в системе UNIX может потребоваться создание копии файла. Например, пользователю нужно внести исправления в файл, оставляя при этом исходную версию файла без изменений. Копиро- вание содержимого одного файла в другой выполняет команда cp (сокращение от "copy"). Кроме этого, команда cp позволяет ско- пировать один или более файлов из одного каталога в другой без изменения местоположения исходного файла или файлов. Для копирования файла с именем lessons в файл с именем new.les- sons, в рассмотренном ранее каталоге, необходимо ввести cp les- sons new.lessons. После окончания копирования система выдаст приглашение. Для проверки существования нового файла можно вы- полнить команду ls. Эта команда выведет имена всех файлов и ка- талогов текущего каталога (в данном случае class). Результаты этих действий отражены ниже. |$ cp lessons new.lessons |$ ls |lessons |new.lessons |table |$ Система UNIX не допускает наличия в одном каталоге двух файлов с одинаковыми именами. В данном случае, поскольку при вводе ко- манды cp не существовал файл с именем new.lessons, система соз- дает новый файл с таким именем. Но если бы файл new.lessons уже существовал, он был бы заменен на копию файла lessons, а преды- дущая версия файла new.lessons была бы удалена. Если бы пользователь попытался скопировать файл lessons в дру- гой файл с именем lessons в том же каталоге, система указала бы, что имена файлов идентичны, и затем вывела бы приглашение. Если бы после этого пользователь запросил содержимое каталога, чтобы определить сколько копий файла lessons существует, то по- лучил бы следующий ответ: |$ cp lessons lessons |cp: lessons and lessons are identical |$ ls |lessons |table |$ Система UNIX разрешает иметь два файла с одинаковыми именами, если они находятся в разных каталогах. Например, система позво- лила бы копирование файла lessons из каталога class в файл с именем lessons в каталоге letters. Если пользователь находится в каталоге class, он может воспользоваться любой из четырех ни же приведенных командных строк. В первых двух командных строках явно указывается имя файла, который создается при копировании. |cp lessons /user1/petrov/letters/lessons | (указывается полное маршрутное имя) |cp lessons ../letters/lessons | (указывается относительное маршрутное имя) Однако команда cp не требует обязательного указания имени нов го файла. Если пользователь не включит в командную строку это имя, команда cp по умолчанию присвоит новому файлу имя исходно- го файла. Поэтому можно использовать также любую из следующих командных строк: |cp lessons /user1/petrov/letters | (указывается полное маршрутное имя) |cp lessons ../letters | (указывается относительное маршрутное имя) В любом из этих четырех вариантов команда cp создаст копию фай- ла lessons в каталоге letters и присвоит ему то же имя lessons. Конечно, если пользователь хочет присвоить новому файлу другое имя, он должен указать его. Например, чтобы скопировать файл lessons из каталога class в файл с именем lessons.vers2 в ката- логе letters, он может использовать любую из следующих команд- ных строк: |cp lessons /user1/petrov/letters/lessons.vers2 | (пол |cp lessons ../letters/lessons.vers2 | (относительное маршрутное имя) При назначении новых имен помните о соглашениях по именованию каталогов и файлов, описанных в разделе "Именование каталогов и файлов" данной главы. В таблице приведены синтаксис и возможности команды cp. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | cp - создать копию файла | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | cp отсутствуют файл(ы) каталог | | +-----------------------------------------------------------------------| | | Описание: Команда cp позволяет создавать копию файла файл1 | | | с именем файл2 без изменения файла файл1 или копи- | | | ровать один или несколько файлов в другой каталог. | | | | | | Примечания: При копировании файл1 в файл2 в случае, когда файл | | | с именем файл2 уже существует, команда cp изменяет | | | исходное содержимое файл2 на содержимое файла | | | файл1 и назначает ему имя файл2. Исходная версия | | | файл2 удаляется. | | | | | | С помощью команды cp нельзя копировать каталоги. | | +-----------------------------------------------------------------------+ 3.4.1.4 Перемещение и переименование файла: команда mv Команда mv (сокращение от "move") позволяет переименовывать файл в одном и том же каталоге или перемещать файл из одного каталога в другой. Если файл перемещается в другой каталог, то он может быть либо переименован, либо может остаться с первона- чальным именем. Для переименования файла внутри одного каталога следует исполь- зовать следующий формат команды: |mv файл1 файл2 Команда изменяет имя файла с файл1 на файл2 и удаляет имя файл1. Запомните, что имена файл1 и файл2 могут быть любыми разрешенными именами, включая маршрутные имена. Например, если пользователь находится в каталоге class (см. рассмотренный выше пример файловой системы) и хотел бы переиме- новать файл table в файл new.table, ему следует ввести mv table new.table. При успешном выполнении команды на экране появится приглашение. Проверить существование файла new.table можно с помощью команды ls. В результате описанных действий на экране будет следующее: |$ mv table new.table |$ ls |lessons |new.table |$ Командой mv можно перемещать файл из одного каталога в другой, сохраняя при этом его исходное имя или изменяя его. Для переме щения файла без изменения его имени следует использовать следу- ющую командную строку: |mv файл(ы) каталог Имена файла и каталога могут быть любыми разрешенными именами, включая и маршрутные имена. Предположим, что пользователь хочет переместить файл table из текущего каталога с именем class (полное маршрутное имя /user1/petrov/class) в файл с тем же именем в каталоге letters (относительным маршрутным именем которого из каталога class яв- ляется ../letters, а полным маршрутным именем - /user1/petrov/ letters). Для этого он может использовать несколько командных строк, именно: |mv table /user1/petrov/letters |mv table /user1/petrov/letters/table |mv table ../letters |mv table ../letters/table |mv /user1/petrov/class/table /user1/petrov/letters/table Теперь предположим, что пользователь собирается переименовать файл table в table2, перемещая его в каталог letters. Для этого можно использовать любую из следующих командных строк: |mv table /user1/petrov/letters/table2 |mv table ../letters/table2 |mv /user1/petrov/class/table /user1/petrov/letters/table2 Результаты работы команды можно проверить с помощью команды ls, которая выводит содержимое каталога. В таблице приводится краткое описание синтаксиса и возможностей команды mv. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | mv - переместить или удалить файлы | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | файл1 файл2 | | | mv отсутствуют файл(ы) каталог | | +-----------------------------------------------------------------------| | | Описание: Команда mv позволяет изменять имя файла или пере- | | | мещать файл (или файлы) в другой каталог. | | | | | | Примечания: Когда файл1 перемещается в файл2, но файл с именем | | | файл2 уже существует, команда mv заменяет первона- | | | чальную версию файла файл2 на файл1 и переиме- | | | новывает его в файл2. Первоначальная версия файла | | | файл2 удаляется. | | +-----------------------------------------------------------------------+ 3.4.1.5 Удаление файла: команда rm Ненужный файл пользователь может удалить из своего каталога с помощью команды rm (сокращение от "remove"). Команда имеет сле- дующий основной формат: |rm файл(ы) Команда дает возможность удалить одновременно несколько файлов. Для этого в командной строке необходимо указать имена этих фай- лов, разделяя их пробелами: |rm файл1 файл2 файл3 Система не сохраняет копию удаляемого файла, поэтому после вы- полнения команды rm файл уничтожается навсегда. После ввода команды rm успешность ее завершения пользователь может проверить, выполнив команду ls. Поскольку команда ls вы- водит список файлов каталога пользователя, он сразу же может увидеть по содержимому списка, завершилась ли команда rm успеш- но. Предположим, что у пользователя есть каталог, содержащий два файла с именами lessons и table. Эти файлы можно удалить одной командой rm. Если она завершается успешно, каталог пользователя станет пустым. Проверить это можно с помощью команды ls: |$ rm lessons table |$ ls |$ Последнее приглашение означает, что файлы lessons и table уда- лены. В таблице приводится краткое описание синтаксиса и возможностей команды rm. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | rm - удалить файл | | +-----------------------------------------------------------------------| | | команда опции * аргументы | | +-----------------------------------------------------------------------| | | rm возможны файл(ы) | | +-----------------------------------------------------------------------| | | Описание: Команда rm позволяет удалить один или несколько | | | файлов. | | | | | | Примечание: Файлы, указанные как аргументы команды rm, уда- | | | ляются навсегда. | | +-----------------------------------------------------------------------+ * Описание всех имеющихся опций и их действие см. в разд. rm(1) Справочника пользователя. 3.4.1.6 Подсчет числа строк, слов и символов в файле: команда wc Команда wc (сокращение от "word count") выводит число строк, слов и символов, содержащихся в файле, имя которого указано в командной строке. Если в команде wc задается несколько имен файлов, то подсчитывается число строк, слов и символов для каж- дого из них, а затем суммарное их количество. ИспользуяС опции -l, -w или -c с командой wc можно получить что-нибудь одно: или число строк, или число слов, или число символов соответственно. Для определения числа строк, слов и символов одного файла ис- пользуйте следующий формат командной строки: |wc файл1 Ответ системы выводится в виде строки следующего формата: |l w c файл1 где l соответствует числу строк в файле файл1; w соответствует числу слов в файле файл1; c соответствует числу символов в файле файл1. Например, чтобы подсчитать число строк, слов и символов в файле johnson, находящемся в текущем каталоге letters, следует ввести следующую командную строку: |$ wc johnson |24 66 406 johnson |$ Ответ системы означает, что файл johnson содержит 24 строки, 66 слов и 406 символов. Для подсчета числа строк, слов и символов в нескольких файлах используется такой формат: |wc файл1 файл2 Ответ системы выводится в следующем виде: |l w c файл1 |l w c файл2 |l w c total Количества строк, слов и символов для файлов файл1 и файл2 вы- водятся на отдельных строках, а суммарные числа - на последней строке рядом со словом total. Например, пусть команда wc подсчитает число строк, слов и сим- волов в файлах johnson и sanders текущего каталога. |$ wc johnson sanders | 24 66 406 johnson | 28 92 559 sanders | 52 158 965 total |$ Первая строка означает, что в файле johnson 24 строки, 66 слов и 406 символов. Вторая строка показывает, что файл sanders име- ет 28 строк, 92 слова и 559 символов, а последняя строка сооб- щает, что вместе оба файла содержат 52 строки, 158 слов и 965 символов. Для получения только числа строк, числа слов или числа символов необходимо выбрать одну из следующих командных строк: |wc -l файл1 (число строк) |wc -w файл1 (число слов) |wc -c файл1 (число символов) Например, если в следующей команде использовать опцию -l, сис тема выведет только число строк в файле sanders: |$ wc -l sanders | 28 sanders |$ Если вместо опции -l указать опции -w или -c, то будет выдано соответственно число слов или символов в файле. В таблице приводится краткое описание синтаксиса и возможностей команды wc. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | wc - подсчитать число строк, слов и символов в файле(файлах) | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | wc -l, -w, -c файл(ы) | | +-----------------------------------------------------------------------| | | Описание: Команда wc подсчитывает число строк, слов и символов | | | в указанном файле (файлах); в случае задания несколь- | | | ких файлов дополнительно выводится суммарное коли- | | | чество строк, слов и символов во всех файлах. | | | | | | Опции: -l выводит только кол-во строк в указанном файле | | | (файлах) | | | -w выводит только кол-во слов в указанном файле | | | (файлах) | | | -c выводит только кол-во символов в указанном файле | | | (файлах) | | | | | | Примечание: Вместе с требуемыми числовыми характеристиками | | | выводится указанное в командной строке имя файла. | | +-----------------------------------------------------------------------+ 3.4.1.7 Защита файлов: команда chmod Команда chmod (сокращение от "change mode") позволяет пользова- телю устанавливать, кому разрешать чтение, запись или использо- вание его файлов, а кому нет. Поскольку система UNIX является многопользовательской системой, то обычно пользователь работает в ней не один. Пользователи системы могут получать доступ к различным каталогам, читать или использовать файлы, принадлежа- щие друг другу, пока они имеют на это право. Если пользователь является владельцем файла, он сам может ре- шать, кто имеет право читать этот файл, записывать в него (де- лать в нем изменения) и, если это программа, выполнять его. С помощью команды chmod он может ограничивать также права доступа к каталогам. Когда пользователь предоставляет кому-либо право на выполнение для каталога, он тем самым разрешает указанным пользователям переходить в этот каталог с помощью команды cd и выводить его содержимое командой ls. Для назначения типов прав доступа используются следующие симво- лы: r разрешает пользователям системы читать файл или копиро- вать его содержимое; w разрешает пользователям системы вносить изменения в файл (или его копию); x разрешает пользователям системы запускать выполняемый файл. Для указания пользователей, которым предоставляются (или не предоставляются) эти типы прав, используются следующие три сим- вола: u владелец файлов и каталогов (сокращение от "user"); g члены группы, к которой принадлежит владелец (груп может состоять из бригады, работающей над проектом, сотрудников отдела или группы пользователей, произволь- но составленной администратором системы UNIX); o все остальные пользователи системы. При создании файла или каталога система автоматически предос- тавлает (или запрещает) права доступа самому пользователю, чле- нам его группы и остальным пользователям системы. Пользователь может изменить эти автоматические установки путем видоизменения своего окружения (более подробно см. в гл. 5). Несмотря на то, какие права доступа были предоставлены при создании файла, вла- делец файла или каталога всегда имеет возможность изменить их. Например, он может хранить некоторые файлы как секретные и за- резервировать их исключительно для своего использования. Он мо- жет предоставить право на чтение и запись в файл членам своей группы, а также остальным пользователям системы. Или, например, владелец может использовать программу совместно с членами своей группы, предоставляя им право на ее выполнение. 3.4.1.7.1 Как определить текущие права доступа Пользователь может определить, какими правами доступа к файлам и каталогам он обладает в текущий момент, с помощью команды ls -l, которая выводит содержимое файла в длинном формате. Напри мер, если ввести команду ls -l, находясь в каталоге petrov/bin рассмотренного ранее примера файловой системы, система выведет следующее: |$ ls -l |total 35 |-rwxr-xr-x 1 petrov project 9346 Nov 1 08:06 display |-rw-r--r-- 1 petrov project 6428 Dec 2 10:24 list |drwx--x--x 2 petrov project 32 Nov 8 15:32 tools |$ Права доступа для файлов display и list и каталога tools распо ложены в левой части экрана под строкой total 35 и выглядят следующим образом: |-rwxr-xr-x (для файла display) |-rw-r--r-- (для файла list) |drwx--x--x (для каталога tools) За первым символом, который определяет тип файла (- (тире) со- ответствует обычному файлу, а d - каталогу), следуют 9 симво- лов, устанавливающие права доступа, задаваемые тремя наборами по три символа. Первый набор из трех символов относится к вла- дельцу, второй - к членам группы, а третий - ко всем остальным пользователям системы. В каждом наборе символоы r, w и x пока- зывают права доступа, предоставленные в текущий момент каждой из категорий пользователей. Если вместо символа r, w или x поя- вится тире, то соответственно чтение, запись или выполнение запрещено. Ниже рассматриваются права доступа к файлу display. | остальные | владелец группа пользователи | | | | | | +-------+ | +----+ | --v- -v- -v- | r w x r - x r - x | ^ ^ ^ ^ ^ | +-----+ | | +-----+--------- право на запись | | +----+ в файл отсутствует | чтение | у группы и остальных | запись пользователей | выполнение Как видно из этой диаграммы, владелец обладает правами r, w и x, а члены группы и остальные пользователи системы имеют только права r и x. Иногда в поле прав доступа вместо r, w или x могут появляться символы s или l. Символ s (сокращение от "set user ID" или "set group ID") представляет специальный тип права на выполнение файла и устанавливается на месте x (или -) для владельца и группы (первый и второй наборы символов прав доступа). С точки зрения пользователей символ s эквивалентен x в той же позиции; он подразумевает существование права на выполнение и имеет зна- чение только для программистов и администраторов системы. (Бо- лее подробные сведения об установке ID владельца и группы см. в Руководстве администратора.) Символ l служит символом разреше- ния блокировки. Это не значит, что файл заблокирован, а просто говорит о том, что функция блокировки разрешена, т.е. возможна для данного файла. Файл может быть заблокирован, либо не забло- кирован, но это нельзя определить по наличию или отсутствию символа l. 3.4.1.7.2 Как изменить существующие права доступа Определив свои действующие права доступа, пользователь может изменить их с помощью команды chmod, задавая ее в следующем формате: |chmod кто+право файл(ы) или |chmod кто=права файл(ы) Ниже описаны компоненты этих командных строк. chmod имя программы, выполняющей команду; кто любая комбинация из трех категорий пользова телей: u - владелец; g - группа; o - осталь- ные; +, - или = операция, которая предоставляет (+) , отби- рает (-), устанавливает (=) права; права любая комбинация из трех типов прав: r - читать; w - писать; x - выполнять; файл(ы) имя(имена) файла(ов) или каталога(ов); в предположении, что он(они) принадлежат теку- щему каталогу пользователя, в противном слу- чае необходимо использовать полные маршрут- ные имена. Примечание В команде chmod не должно быть пробелов между компонен- том кто, операцией, которая предоставляет (+) или отни- мает (-) право, и компонентом право. Следующие примеры демонстрируют возможные способы использования команды chmod. Если пользователь является владельцем файла display, он может читать его, записывать в него и выполнять этот исполняемый файл. Пользователь может защитить файл от слу чайных изменений, если отберет у себя право на запись (w). Это можно сделать с помощью командной строки: |chmod u-w display Чтобы проверить, что право действительно изменено, после полу- чения приглашения необходимо ввести команду ls -l. Ниже показан полученный на экране результат: |$ chmod u-w display |$ ls -l |total 35 |-r-xr-xr-x 1 petrov project 9346 Nov 1 08:06 display |-rw-r--r-- 1 petrov project 6428 Dec 2 10:24 list |drwx--x--x 2 petrov project 32 Nov 8 15:32 tools |$ Можно заметить, что теперь право на запись изменений в файл от сутствует. Пользователь не сможет изменить его до тех пор, пока сам не восстановит право на запись в этот файл. Рассмотрим другой пример. Обратите внимание, что право на за- пись в файл display отобрано у членов группы и остальных поль- зователей системы, но они имеют право на чтение. Это значит, что они могут скопировать файл в свои собственные каталоги и затем внести в него изменения. Чтобы запретить копирование фай- ла всем пользователям системы, необходимо отобрать у них право на чтение файла, т.е. выполнить команду: |chmod go-r display g и o подразумевают соответственно членов группы и остальных пользователей системы, а -r отбирает у них право на чтение или копирование файла. Проверьте этот результат командой ls -l: |$ chmod go-r display |$ ls -l |total 35 |-rwx--x--x 1 petrov project 9346 Nov 1 08:06 display |-rw-r--r-- 1 petrov project 6428 Dec 2 10:24 list |drwx--x--x 2 petrov project 32 Nov 8 15:32 tools |$ 3.4.1.7.3 Права доступа к каталогам Команду chmod можно использовать для предоставления и лишения прав доступа к каталогам таким же образом, как и для файлов. Для этого в командной строке вместо имени файла просто необхо- димо указать имя каталога. Рассмотрим влияние изменения прав доступа к каталогам на раз- личных пользователей системы. Допустим, что владелец предостав- ляет право доступа к каталогу самому себе (u), членам своей группы (g) и остальным пользователям системы (o). Каждый поль- зователь, имеющий доступ к системе, сможет прочитать имена фай- лов, которые содержатся в каталоге, выполнив команду ls -l. Аналогично, предоставление права на запись позволяет определен- ным пользователям создавать новые файлы в каталоге и удалять существующие. Наконец, предоставление права на выполнение для каталога означает, что имеющие это право пользователи с помощью команды cd могут переходить в этот каталог, делая его своим те- кущим каталогом. 3.4.1.7.4 Альтернативный метод Существует два метода выполнения команды chmod. Описанный выше метод, в котором для определения прав доступа используются сим- волы r, w и x, называется символическим методом. Другим методом является восьмеричный метод. В нем для определе- ния прав доступа необходимо использовать три восьмеричных чис ла, лежащих в пределах от 0 до 7. Познакомиться с восьмеричным методом можно в разд. chmod(1) Справочника пользователя. В таблице приводится краткое описание синтаксиса и возможностей команды chmod. | +-------------------------------------------------------------------------+ | | Краткое описание команды | | | | | | chmod - изменить права доступа к файлам (и каталогам) | | +-------------------------------------------------------------------------| | | команда операция аргументы | | +-------------------------------------------------------------------------| | | chmod кто+-право имя(имена)_файла(ов) | | | имя(имена)_каталога(ов)| | +-------------------------------------------------------------------------| | | Описание: Команда chmod предоставляет (+) или отбирает (-) право | | | на чтение, запись и выполнение файлов для трех кате- | | | горий пользователей системы: пользователь u (владелец), | | | группа g (члены группы владельца) и остальные o (все | | | остальные пользователи, работающие в системе). | | | | | | Примечание: Набор операций для команды может быть представлен в | | | восьмеричном или символьном виде. | | +-------------------------------------------------------------------------+ 3.4.2 Дополнительные команды Использование уже рассмотренных команд прививает навыки работы с файловой системой. По мере дальнейшего развития этих навыков может возникнуть необходимость в применении более сложных средств обработки информации при работе с файлами. В данном разделе вводятся три команды, ориентированные как раз на это: diff осуществляет поиск различий между файлами grep осуществляет поиск в файле по шаблону sort сортирует и сливает файлы Дополнительные сведения об этих командах содержатся в Справоч- нике пользователя. 3.4.2.1 Определение различий между файлами: команда diff Команда diff устанавливает различия между двумя файлами, изве- щает о них пользователя, а также указывает, как изменить первый файл, чтобы получить дубликат второго файла. Команда имеет сле- дующий основной формат: |diff файл1 файл2 Если файлы файл1 и файл2 идентичны, система просто выводит приглашение. Если же это не так, команда diff подсказывает, как изменить первый файл, чтобы получить второй, с помощью команд редактора ed (построчный редактор). Система UNIX помечает стро- ки файла файл1 (подлежащие изменению) символом < (меньше), а строки файла файл2 (текст модели) символом > (больше). Предположим, что пользователь выполняет команду diff для опре- деления различий между файлами johnson и mcdonough. Файл mcdo- nough содержит то же самое послание, что и файл johnson, но с соответствующими изменениями для другого получателя. Команда diff обнаружит следующие различия: |3,6c3,6 |<Мистеру Рону Джонсону |<Лейтон Принтинг |<52 Гудзон стрит |<Нью-Йорк |--- |>Мистеру Макдонаву |>Юбу Пресс |>37 Чико Плейс |>Спрингфилд, Нью Джерси |9c9 |<Дорогой мистер Джонсон! |--- |>Дорогой мистер Макдонав! В первой строке командой diff выведено: |3,6c3,6 Это означает, что если пользователь хочет файл johnson преобра- зовать в файл mcdonough, ему необходимо изменить (символ c) строки с 3 по 6 в файле johnson на строки с 3 по 6 файла mcdo- nough. Далее команда diff выводит оба набора строк. Если внести эти изменения с помощью текстового редактора, файл johnson станет идентичен файлу mcdonough. Запомните, что коман- да diff определяет различие между указанными файлами, но если необходимо создать идентичную копию файла, следует использовать команду cp. В таблице приводится краткое описание синтаксиса и возможностей команды diff. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | diff - определить различие между двумя файлами | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | diff возможны* файл1 файл2 | | +-----------------------------------------------------------------------| | | Описание: Команда diff дает сведения о том, какими строками | | | различаются два файла и что следует сделать с | | | первым файлом, чтобы он стал идентичен второму. | | | | | | Примечания: Операции, посредством которых первый файл может быть | | | преобразован во второй, указываются в виде команд | | | построчного редактора ed: a (дополнить), c (изменить) | | | и d (удалить). Числа, выводимые совместно с a, c или | | | d, определяют подлежащие модификации строки. Кроме | | | того, используются символы < (указывающий на строку | | | из первого файла) и > (указывающий на строку из вто- | | | рого файла). | | +-----------------------------------------------------------------------+ * Описание всех имеющихся опций и их действие см. в разд. diff(1) Справочника пользователя. 3.4.2.2 Поиск в файле по шаблону: команда grep С помощью команды grep (сокращение от "globally search for a regular expression and print) система UNIX может осуществлять поиск в файле по указанному слову, фразе или группе символов. Положим для простоты, что регулярным выражением является любая совокупность символов (будь то слово, фраза или уравнение), ко- торую определяет пользователь. Команда имеет следующий основной формат командной строки: |grep шаблон файл(ы) Например, чтобы определить строки файла johnson, содержащие слово автоматизации, следует ввести: |grep автоматизации johnson Ответ системы будет следующим: |$ grep автоматизации johnson |планов компании по автоматизации |$ Команда выводит все строки файла johnson, содержащие шаблон, по которому осуществлялся поиск (автоматизации). Если шаблон состоит из нескольких слов или содержит какой-либо символ, имеющий в системе UNIX специальный смысл (такой, как $, |, *, ? и т.д.), весь шаблон должен быть заключен в апострофы. (Объяснение специального смысла приведенных и других символов см. в разделе "Метасимволы" гл. 5.) Предположим, что пользова- тель хочет определить строки файла, содержащие шаблон программ- ное обеспечение. Вводимая командная строка и ответ системы бу- дут иметь вид: |$ grep 'программное обеспечение' johnson |и описывающий программное обеспечение для |$ Но как быть, если пользователь не может вспомнить, какое из пи- сем содержало ссылку на программное обеспечение, письмо к мис- теру Джонсону или письмо к миссис Сандерс? Чтобы узнать это, следует ввести следующую командную строку: |$ grep 'программное обеспечение' johnson sanders |johnson: и описывающий программное обеспечение для |$ Это значит, что шаблон программное обеспечение найден только в файле johnson. Существуют разновидности команды grep с именами egrep и fgrep и рядом опций, которые повышают возможности поиска команды. Более подробные сведения об этих командах можно найти в разд. grep(1), egrep(1) и fgrep(1) Справочника пользователя. В таблице приводится краткое описание синтаксиса и возможностей команды grep. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | grep - осуществить поиск в файле по шаблону | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | grep возможны* шаблон файл(ы) | | +-----------------------------------------------------------------------| | | Описание: Команда grep выполняет поиск в указанном файле (или | | | файлах) строк, содержащих шаблон, и затем выводит | | | эти строки. Если указаны несколько файлов, выводится | | | еще и имя файла, в котором найден шаблон. | | | | | | Примечание: Если задаваемый в команде шаблон состоит из несколь- | | | ких слов или содержит специальные символы, его сле- | | | дует в командной строке заключить в апострофы. | | +-----------------------------------------------------------------------+ * Описание всех имеющихся опций и их действие см. в разд. grep(1) Справочника пользователя. 3.4.2.3 Сортировка и слияние файлов: команда sort Система UNIX обладает эффективным инструментом для сортировки и слияния файлов. Эта команда имеет следующий формат: |sort файл(ы) Команда sort осуществляет сортировку и слияние строк указанных файлов в следующем порядке. Строки, начинающиеся с чисел, выводятся в порядке воз- растания номеров и помещаются перед строками, которые начинаются с букв. Строки, начинающиеся с прописных букв, помещаются перед строками, которые начинаются со строчных букв. Строки, начинающиеся с символов типа *, % или @, сорти- руются на основе их представления в коде ASCII. Допустим, что имеется два файла с именами group1 и group2, ко- торые содержат списки имен. Каждый из этих списков необходимо упорядочить по алфавиту, а затем объединить их в один список. Сначала выведем содержимое обоих файлов с помощью команды cat. |$ cat group1 |Smith, Allyn |Jones, Barbara |Cook, Karen |Moore, Peter |Wolf, Robert |$ cat group2 |Frank, M. Jay |Nelson, James |West, Donna |Hill, Charles |Morgan, Kristine |$ (Вместо поочередного вывода этих двух файлов разными командами это можно было бы сделать в одной командной строке. Если ввести cat group1 group2, результат будет тем же самым.) Теперь проведем сортировку и слияние содержимого двух файлов, выполнив команду sort. Результат работы команды sort будет отображаться на экране терминала, если не указан другой способ вывода. |$ sort group1 group2 |Cook, Karen |Frank, M. Jay |Hill, Charles |Jones, Barbara |Morgan, Kristine |Nelson, James |Smith, Allyn |West, Donna |Wolf, Robert |$ Кроме простого объединения списков (как в данном примере), ко- манда sort может переупорядочивать строки и части строк (назы- ваемые полями) в соответствии с рядом спецификаций, которые указываются в командной строке. Возможные спецификации довольно сложны и здесь не рассматриваются. Полное описание опций содер- жится в Справочнике пользователя. В таблице приводится краткое описание синтаксиса и возможностей команды sort. | +-----------------------------------------------------------------------+ | | Краткое описание команды | | | | | | sort - выполнить сортировку и слияние файлов | | +-----------------------------------------------------------------------| | | команда опции аргументы | | +-----------------------------------------------------------------------| | | sort возможны* файл(ы) | | +-----------------------------------------------------------------------| | | Описание: Команда sort объединяет и сортирует строки | | | указанного файла (или файлов) и выводит их на | | | экран терминала. | | | | | | Примечание: Если в командной строке не определены опции, | | | строки сортируются и объединяются в соответствии | | | с представлениями символов в коде ASCII. | | +-----------------------------------------------------------------------+ * Описание всех имеющихся опций и их действие см. в разд. sort(1) Справочника пользователя. ЗАКЛЮЧЕНИЕ В данной главе описана структура файловой системы и рассмотрены способы использования и перемещения по файловой системе с по- мощью команд системы UNIX. В следующей главе дается обзор неко- торых возможностей системы UNIX: использование shell'а как ко- мандного языка и как языка программирования, установление электронной связи с другими пользователями системы.