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

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



Название* глава доступ к файлам содержание
страница4/6
Дата конвертации20.05.2013
Размер1.03 Mb.
ТипРеферат
скачать >>>
1   2   3   4   5   6

^ ВОЗМОЖНЫЕ МОДИФИКАЦИИ


Данный командный файл открыт для многих различных видов модифика-

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

раммного обеспечения по сопровождению файлов. Эта возможность позволя-

ет нам полагаться на саму программу paths или использовать paths в ка-

честве куска более объемной программы.

При разработке ваших собственных программ следует обратить внима-

ние на гибкость командного файла paths, которая выражается в отличии

между обрабатываемыми форматами. Первые два формата используют отдель-

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

командному файлу paths могут касаться любой из этих строк или могут

комбинировать их. Если есть необходимость, программное обеспечение мо-

жет приспособиться к этому.


^ 2.2. ВЫВОД ИНФОРМАЦИИ


2.2.1. lc - вывод файловой информации на экран по столбцам





ИМЯ: lc




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


НАЗНАЧЕНИЕ


Выдает информацию о файлах в формате колонок, показывая каталоги

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

more.


^ ФОРМАТ ВЫЗОВА


lc [-m] [ls options] file [file ...]


ПРИМЕР ВЫЗОВА


lc -R $HOME


Выдает список всех файлов во всех подкаталогах моего регистра-

ционного каталога.


^ ТЕКСТ ПРОГРАММЫ


1 :

2 # @(#) lc v1.
0 List files in a column Author: Russ Sage

2а Выводит список файлов в колоночном виде


4 if [ "$1" = "-m" ]

5 then MORE="| /usr/bin/more"

6 shift

7 else MORE=""

8 fi


10 eval "/bin/ls -a $@ | /bin/pr -5t" $MORE # pre System V

11 eval /bin/ls -aCF $@ $MORE # System V


^ ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ


MORE Содержит программный канал к команде more


ОПИСАНИЕ


ЗАЧЕМ НАМ НУЖЕН КОМАНДНЫЙ ФАЙЛ lc?


В мире компьютеров многие люди изобретают колесо, а другие люди

изобретают его снова. Если первое колесо не того размера или не того

цвета, делается другое колесо. В нашей конкретной ситуации исходным

колесом является команда ls системы UNIX, которая имеет некоторые не-

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

она печатает имена файлов только в одну колонку, что приводит к нера-

циональному расходованию места и затрудняет чтение имен файлов. Поэто-

му мы создаем версию команды ls, которая отображает распечатки в

несколько колонок.

Как видно из предыдущего листинга, lc имеет две формы. Одна пред-

назначена для систем, более ранних, чем System V, а другая - для

System V и последующих версий UNIX. Причина в том, что System V версии

2 имеет новую команду ls, которая делает именно то, что мы хотим.

Система Berkeley также имеет версию команды ls, которая по умолчанию

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

ранних версий System V мы должны делать это сами. Дело в том, что хотя

в вашей версии UNIX, XENIX или чего-либо еще могут отсутствовать ко-

манды, имеющиеся в других версиях, вы обычно можете построить то, что

вам нужно. Это может потребовать определенных усилий, и ваши программы

могут работать не так быстро и не так эффективно, но вы МОЖЕТЕ полу-

чить нужное средство.

Пользователям интерпретаторов csh и последнего sh, имеющего функ-

ции, видимо, лучше бы заменить весь этот сценарий на то, чтобы сделать

lc псевдонимом (alias). Использовать возможность введения псевдонимов,

чтобы присвоить имя любой корректной командной строке UNIX (например,

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

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

командами или опциями. Это быстрее, так как не создается никаких до-

полнительных процессов.

При работе со старым интерпретатором sh мы должны пройти через

обычную процедуру изготовления командного файла и размещения его в ка-

талоге bin. С другой стороны, SCO XENIX System V решает эту проблему,

связывая эти же имена (lc, lf, l) с обычной командной ls и используя

вызывающее имя для определения формы распечатки.

Итак, зачастую имеется много альтернатив. Мастера UNIX, сталкива-

ясь с какой-либо проблемой, не борются с ней с помощью Си или команд-

ного файла интерпретатора shell. Поскольку они знакомы с существующими

ресурсами системы UNIX, они могут рассмотреть проблему и выбрать стра-

тегию, использующую наименее сложное средство, выполняющее данную ра-

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

сложности, это могут быть непонятная, но существующая команда и/или

опция, псевдоним, командный файл интерпретатора shell или программа на

языке Си.


ЧТО ДЕЛАЕТ lc?


Общий подход к разработке этой команды заключается в том, чтобы

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

интерфейсом. Чтобы достичь этой мощи, мы можем сделать пре- или пост-

процессор для обычной команды системы UNIX.

Главная задача здесь - печать колонок, поэтому мы смотрим на оп-

ции команды ls, чтобы задействовать их. Конечно, мы включаем опцию -C.

Какие еще опции ls нам нужны? Обычно UNIX не печатает файлы, имена ко-

торых начинаются с точек, например, .profile, если только вы не указы-

ваете ls -a. Это забывается при просмотре этих важных файлов, поэтому

мы конструируем нашу команду так, чтобы она печатала их по умолчанию.

Никакие файлы не скрываются от нас. Для пользователей System V и BSD

(или для любого, кто имеет опцию -F), листинг улучшается за счет выво-

да "/" после имени каталога и "*" после исполняемого файла. Ранняя ко-

манда ls системы UNIX не имела возможности печатать в таком стиле. От-

метим, что данное использование термина "исполняемый" означает показ

того, что флаги прав доступа имеют бит "x", а не то, что это файл типа

a.out с магическим числом. Это отличие важно тем, что делает наш ко-

мандный файл более полезным.

Если ожидается длинная распечатка, как это бывает обычно для ре-

курсивных каталогов, то вы хотите иметь доступ к команде more. Мы

встраиваем команду more так, чтобы ее можно было активировать с по-

мощью опции -m. Опция -m должна быть первой опцией после имени коман-

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

передается после первой опции, она переходит к команде UNIX ls и ин-

терпретируется как печать в потоковом формате. Это такой формат, в ко-

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

мы уже отмечали, вы можете сделать интерфейс этого командного файла

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


ПРИМЕРЫ


1. $ lc `path lc`


Получает полное имя для lc и распечатывает файловую информацию в

виде колонок.


2. $ lc -m -R /


Печатает колоночный список ВСЕХ файлов в системе, рекурсивно про-

ходя вниз по иерархии системного дерева и пропуская распечатку через

команду more.

Еще один маленький фокус: этот синтаксис был использован для соз-

дания другой команды, названной expose. Командная строка "lc -m -R $@"

давала бы рекурсивный список всех файлов в любом каталоге по вашему

выбору в приятном постраничном формате.


3. $ lc -m -R /usr/lib


Рекурсивно распечатывает список всех файлов во всех каталогах,

начиная с /usr/lib, и пропускает листинг через команду more.


4. $ lc -m . | more


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

рез команду more, а затем снова пропускает все через more. Работает ли

это ? Никоим образом. Возникает полная путаница, и клавиша прерывания

обычно является наилучшим способом выхода из данной ситуации.


ПОЯСНЕНИЯ


В строках 4-8 проверяется, является ли первым аргументом команд-

ной строки -m - опция команды more. Если эта опция найдена, то в пере-

менную MORE заносится указание конвейера и команда more. Тем самым

устанавливается постобработка, которую следует применить к выходу ко-

манды ls. Затем эта опция убирается из командной строки. Это делается

для того, чтобы остаток командной строки можно было передать команде

ls, не вызвав при этом нежелательных эффектов. Если первой опцией не

является -m, переменной MORE присваивается нулевое значение, чтобы она

впоследствии не влияла на командную строку.

Строка 10 - это командная строка, которую вы бы использовали на

старой UNIX-машине типа Version 7 или System III. Она не имеет ни

встроенной опции для печати символов косой черты (/) и звездочек (*),

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

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

помощью команды pr системы UNIX. Команда pr использована с опцией

"-5t", поэтому она печатает в пять колонок (что обычно приемлемо, но

если встречаются длинные имена файлов, то пяти колонок может оказаться

слишком много) и не печатает верхний и нижний колонтитулы. Благодаря

отказу от колонтитулов, 24-строчный формат не слишком неудобен для

вас.

Отметим, что здесь использована команда eval. Это специальная

встроенная команда интерпретатора shell, которая выполняет перевы-

числение текущей строки, подлежащей выполнению. Интерпретатор shell

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

ных в командной строке и обеспечить распознавание переменных как тако-

вых. Здесь мы перевычисляем переменную MORE. Напомним, что мы помести-

ли в эту переменную конвейер. Если мы не перевычислим командную стро-

ку, то команда pr попытается открыть файлы "|" и "more", которые не

существуют. Для того, чтобы shell вместо этого воспринял эти символы

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

Строка 10 имеет еще одну особенность. В командной строке уже есть

один конвейер. Откуда shell знает, трактовать ли символ "|" как имя

файла или как конвейер? Благодаря тому, что аргумент команды eval зак-

лючен в кавычки. Это указывает команде eval сохранить все, что нахо-

дится в кавычках, без изменений, но раскрыть значение переменной MORE

и поместить его в конец командной строки, находящейся в кавычках.

Несколько непонятно, но если вы думаете об этом пару лет, оно стано-

вится осмысленным.

Для тех из вас, кто имеет новую команду ls (System V, версия 2

или BSD 4.2), не требуется два конвейера в команде. Как показывает

строка 11, мы получаем подходящий колоночный формат из самой команды

ls, вместе с показом всех файлов и специальными символами / и * для

каталогов и исполняемых файлов. Обозначение $@ относится ко всему со-

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

ls и к именам файлов, список которых вы хотите распечатать. Поступая

таким образом, мы создаем фундамент (опции a,C,F), а вы можете

надстраивать его (используя опции R,t и т.д.). Скромный, но элегантный

фокус заставить ls сообщить свои опции заключается в том, чтобы выз-

вать ее с неверной опцией. Большинство команд не используют опции z

или ?, поэтому вызов "ls -z" или "ls -?" приведет к такому результату:





|

| ls: illegal option -- z

| usage: -1ACFRabcdfgilmnopqrstux [files]

|


Все эти опции представляют определенный интерес. Если вы часто

используете какие-либо из них, поместите их в командный файл lc, и вы

получите вашу собственную адаптированную команду.

Вы обратили внимание, что все обычные команды системы UNIX,

используемые в нашем командном файле, имеют полные маршрутные имена?

Это может показаться несколько странным, но причина указания полных

маршрутных имен в том, что когда shell запускает команду, он не должен

возвращаться к анализу переменной PATH и искать, где расположена ко-

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

поиска файлов представляет собой большие накладные расходы. Когда вы

вызываете lc, интерпретатор shell ищет эту команду, затем lc вызывает

ls, которую тоже нужно найти. Если после этого результаты пропускаются

через more или pr, то требуется дополнительный поиск. А полные марш-

рутные имена распознаются интерпретатором shell сразу же (он видит,

что первым символом является /), и нужная команда может быть вызвана

быстро. Издержки на поиск - единственные издержки команды lc.

Использование полных имен, естественно, требует, чтобы вы знали,

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

можете применить команду paths, чтобы получить корректные полные имена

для жесткого указания их в тексте вашего командного файла, а можете

переписать данный командный файл при переходе в другую систему. Это

просто еще одна иллюстрация универсального компромисса между скоростью

и эффективностью, с одной стороны, и гибкостью и мобильностью, с дру-

гой.


2.2.2. ll - вывод файловой информации в длинном формате





ИМЯ: ll




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


НАЗНАЧЕНИЕ


Выдает список файлов в длинном формате (-l). Распечатку можно

пропустить через команду more.


^ ФОРМАТ ВЫЗОВА


ll [-m] [ls options] file [file...]


ПРИМЕР ВЫЗОВА


ll *.c Выдача списка файлов с исходными текстами на

языке Си в длинном формате.


^ ТЕКСТ ПРОГРАММЫ


1 :

2 # @(#) ll v1.0 Long listing of files Author: Russ Sage

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


4 if [ "$1" = "-m" ]

5 then MORE="| /usr/bin/more"

6 shift

7 else MORE=""

8 fi


10 eval /bin/ls -al $@ MORE


^ ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ


MORE Содержит строку передачи результатов по

конвейеру команде more


ОПИСАНИЕ


ЗАЧЕМ НАМ НУЖЕН КОМАНДНЫЙ ФАЙЛ ll?


Мотивы для создания команды ll те же, что мы обсудили ранее для

команды lc. Мы можем использовать ll для нескольких целей. Она умень-

шает количество требуемых нажатий на клавиши, позволяет избежать необ-

ходимости помнить специальные опции и вообще настраивает систему соот-

ветственно нашим требованиям вместо того чтобы нам приспосабливаться к

системе.


ЧТО ДЕЛАЕТ ll?


Основой этой команды является известная команда "ls -l". Она,

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

права доступа, связи, имя владельца, размер и так далее. (Кстати,

программисты, использующие язык Си, могут получить эту информацию при

помощи системного вызова stat(2).) Поскольку такой список при наличии

множества файлов может легко переполнить экран, то предоставляется оп-

ция -m. Она обеспечивает постраничный вывод с помощью команды more.

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

Строка символов, соответствующая этой опции, удаляется командой shift,

так что она не смешивается с именами файлов и обычными опциями команды

ls, которые передаются как аргументы.

После опции -m (если она есть) ll допускает указание любых других

допустимых опций команды ls. Можно также использовать любую комбинацию

имен файлов. Здесь применимы обычные средства порождения имен файлов:

* соответствует любым символам, ? - одному символу, а символы [] зада-

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

ls, которая по умолчанию работает как "ls -l", вызывает команду more с

помощью одной опции вместо необходимости указания конвейера в команд-

ной строке и при этом сохраняет гибкость команды ls.


ПРИМЕРЫ


1. $ ll /etc/*mount*


Выводит список всех файлов в каталоге /etc, имена которых содер-

жат в каком-либо месте слово mount (например, mount, umount,

unmountable).


2. $ ll -i `who|awk '{print "/dev/" $2}'`


Сперва выполняется команда who, затем результат ее работы по кон-

вейеру передается команде awk, которая вырезает имя устройства и при-

писывает ему префикс /dev/. В результате список полных маршрутных имен

ко всем терминальным устройствам, зарегистрированным в настоящий мо-

мент, помещается в командную строку команды ls -li. В распечатке ука-

зана вся информация об индексном дескрипторе файла (inode) для каждого

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


3. $ ll `kind -a /lib`


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

/lib. Этот каталог содержит библиотеки компиляторов всех языков систе-

мы UNIX. (Команда kind, которая отбирает файлы по их типу, рассматри-

вается в следующем разделе.)


4. $ ll -m -i /dev


Выводит всю обычную информацию плюс номер индексного дескриптора

для всех файлов в каталоге /dev. Выдача на экран происходит с помощью

команды more.


ПОЯСНЕНИЯ


Если первым позиционным параметром является -m, то в строке 4

инициализируется переменная MORE для подключения конвейера и программы

/usr/bin/more. (Вопрос о том, почему используется абсолютное маршрут-

ное имя, обсуждался в предыдущем разделе.) Затем символьная строка -m

командой shift убирается из командной строки. Если же первой опцией не

является -m, то переменная MORE устанавливается в нуль, чтобы не вли-

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

ды eval (строка 10).

В строке 10 команда eval использована для получения результирую-

щей командной строки. Команда ls вызывается с опциями -al (выдача

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

чанию. Затем берутся аргументы командной строки (минус первый аргу-

мент, если это был -m, который мы убрали командой shift). Этими аргу-

ментами могут быть дополнительные опции команды ls плюс имена файлов

или каталогов. В конце строки значение переменной MORE обеспечивает

конвейер с командой more, если была указана опция -m. В противном слу-

чае значение переменной MORE равно нулю и не оказывает никакого влия-

ния на анализ содержимого командной строки.

Что произошло бы, если бы пользователь указал опцию -m в качестве

второй (или последующей) опции? В этом случае опция -m передалась бы

команде ls. Команда ls трактовала бы эту опцию как "потоковый вывод",

а это совсем не то, что мы хотели. Однако команда ls была вызвана так-

же с опцией -l, которая отменяет опцию -m в соответствии с текстом

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

выходные данные по-прежнему были бы выведены в правильном формате.


2.2.3. kind - вывод однотипных файлов





ИМЯ: kind




kind Выдача списка имен файлов определенного вида


НАЗНАЧЕНИЕ


Выбирает и выводит имена всех файлов в указанном каталоге (ката-

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

текстовые файлы.

1   2   3   4   5   6




Похожие:

* глава доступ к файлам содержание iconПрограммы-оболочки. Операционные системы windows
Они преобразуют неудобный командный пользовательский интерфейс в дружественный графический интерфейс или интерфейс типа "меню". Оболочки...
* глава доступ к файлам содержание iconАкадемик Н. И. Вавилов Ученицы 11б класса 411 школы Досаевой Екатерины Болонкина Е. В. Петродворец 1999 год. Содержание: Введение Глава I: Становление Глава II: Лысенковщина Глава III: Арест Глава IV: Путешествия Заключение Список литературы Ссылки Приложение Введение: Очень трудно определить границ

* глава доступ к файлам содержание iconСодержание Введение 3 Глава Сущность и содержание маркетинга в туризме 5 Глава Процесс планирования маркетинга в сфере туризма 17 Глава Особенности рекламы в сфере туризма 22 Заключение 27 Список литературы 28 Введение
С развитием межгосударственных контактов сфера услуг вышла за рамки отдельных стран и превратилась в один из важнейших видов мирового...
* глава доступ к файлам содержание iconСодержание. Введение. 2 Глава Что такое недвижимость? 3 Глава Оценка недвижимости. 4 Глава Расчет видов износа. 7 Глава Факторы, негативно влияющие на рынок недвижимости 17 и пути их устранения. Заключение. 19 Список использованной литературы. 20 Введение
Появился слой новых владельцев недвижимости как в сфере личного потребления, так и во многих сферах предпринимательской деятельности....
* глава доступ к файлам содержание iconДокументы
1. /Доступ к информации/book147.doc
2. /Доступ...

* глава доступ к файлам содержание iconС. Ю. Витте Содержание Введение Глава I. Очерк жизни и деятельности С. Ю. Витте Глава II. Время и реформы С. Ю. Витте Денежная реформа 1895-1897 гг

* глава доступ к файлам содержание iconСодержание: Введение. Глава Многообразие видов и форм любви. Их классификации. Глава Становление понимания любви от античности через средневековье к эпохе Возрождения. Глава Философия любви в Новом времени. Заключение. Введение
Необычайно по своему количеству многообразие вариаций проявления любви, однако наиболее часто мы говорим об эротической любви, под...
* глава доступ к файлам содержание iconСовременный гуманитарный университет тверской филиал
Краткое содержание дипломной работы: Ведение. Глава Правовое регулирование прав ребенка. Глава 2 Защита прав ребенка в семейных правоотношениях....
* глава доступ к файлам содержание iconСодержание Введение. 1 Глава Сущность и критерии малого предпринимательства. 4 Глава Организация финансов малого предприятия. 9
Система государственной поддержки и регулирования малого предпринимательства. 16
* глава доступ к файлам содержание iconСодержание. Введение с. 2 Глава Сущность маркетинга. Его элементы с. 3-13 Глава Основные принципы маркетинга с. 13-20 Глава Особенности развития маркетинга в РФ с. 21-27 Заключение с. 27-28 Список использованной литературы с. 29 Введение
«Максвелл-хаус» с двумя чайными ложками сахарного песка «Домино», одновременно жуя сдобную булочку «Сара Ли». Мы покупаем апельсины,...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©rushkolnik.ru 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы