Главная » Программирование для UNIX » Каким должно быть имя файла?

0

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

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

гут иметь другое значение. Например, в команде ls, рассмотренной ра-

нее, ls –t означает вывод  списка, упорядоченного по времени. Так  что

1        Современные версии  операционных  систем  семейства  UNIX   позволяют присваивать файлам и каталогам имена, длина которых достигает 255 символов. – Примеч. науч. ред.

если  дать  файлу имя –t, тяжело будет  добиться его вывода по имени. (Кстати, как это  сделать?)  Кроме знака минус в начале слова  есть  и другие символы со специальным значением. Чтобы избежать недоразумений,    пока    не    разберетесь    во    всем     досконально,    лучше ограничиться буквами, цифрами, точками и знаками подчеркивания. (Точками и символами подчеркивания принято разделять имя  файла на части, как в примере про precious.save.) И последнее – не забудьте о том,  что регистр также имеет  значение: junk, Junk и JUNK  – это три разных имени.

Несколько полезных команд

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

Чтобы конкретизировать обсуждение, будем использовать файл с именем  poem,  который  содержит знаменитое стихотворение Огастеса  Де Моргана (Augustus De Morgan). Создадим файл с помощью ed:

$ ed

a

Great  fleas  have  little  fleas upon  their  backs  to  bite  ‘em,

And little  fleas  have  lesser  fleas, and so  ad  infinitum.

And the  great  fleas  themselves,  in  turn, have  greater fleas  to  go on;

While these  again  have  greater  still, and  greater  still, and  so  on.

.

w  poem

263

q

$

Первой рассмотрим команду wc, подсчитывающую количество строк, слов и символов в одном или нескольких файлах; она получила имя  за свою деятельность – подсчет слов (word-counting):

$ wc poem

8         46       263 poem

$

Это означает, что в poem 8 строк, 46 слов и 263 символа. Понятие «слово» определяется чрезвычайно просто: любая строка символов, не содержащая пробелов, знаков табуляции и разделителей строк.

Команда wc может обсчитать несколько файлов (и вывести общие  результаты), может также  исключить подсчет какой-либо категории. См. описание wc(1).

Следующая команда называется grep; она просматривает файл в поиске строк, соответствующих шаблону. (Имя команды происходит от названия  команды   g/regular5expression/p   (g/регулярное5выражение/p) редактора ed,  о  которой рассказано в приложении 1.)  Предположим, что требуется найти слово «fleas» в файле poem:

$ grep  fleas poem

Great  fleas have little  fleas

And  little  fleas have lesser fleas,

And  the  great  fleas  themselves,  in  turn, have  greater fleas  to  go on;

$

Если  указать параметр –v, то grep будет искать строки, не соответствующие  шаблону. (Параметр назван «v» по имени команды редактора; можно считать, что он меняет смысл соответствия на обратный.)

$ grep  -v  fleas  poem

upon  their  backs  to  bite  ‘em, and  so  ad  infinitum.

While these  again  have  greater  still, and  greater  still, and  so  on.

$

Команда grep  может быть  использована для  просмотра нескольких файлов; в этом  случае перед  началом каждой строки, удовлетворяющей  шаблону, будет  выведено имя  файла,  чтобы  было  понятно, где найдено соответствие. Существуют также параметры для подсчета, нумерации и т. д. Также grep может обрабатывать шаблоны гораздо более сложные, чем просто слово  (как «fleas»), но оставим обсуждение этой возможности до главы 4.

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

$ sort poem

and greater still, and so  on.

and so  ad infinitum.

have  greater  fleas  to  go  on; upon  their  backs  to  bite  ‘em,

And  little  fleas have lesser fleas,

And  the  great  fleas  themselves, in  turn, Great  fleas have  little fleas

While these again  have greater  still,

$

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

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

sort –r               Порядок, обратный обычному

sort –n              Сортировать по значениям чисел

sort –nr             По значениям чисел в обратном порядке

sort –f               Игнорировать различие регистров1

sort +n              Сортировать начиная с n+15го поля

Более  подробная информация о команде sort представлена в главе 4.

Еще  одна  команда для работы с файлом – это  tail. Она  выводит последние 10 строк файла. Это слишком для стихотворения из 8 строчек, но для  больших файлов это хорошо. Кроме  того, у tail есть параметр, задающий количество строк для просмотра, поэтому чтобы напечатать последнюю строку стихотворения:

$ tail -1  poem

and greater still, and so  on.

$

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

$ tail +3  имя5файла

Вывод  начнется со строки 3. (Обратите внимание на естественную инверсию соглашения о знаке минус в аргументе.)

И  последняя пара   команд, которая служит для  сравнения файлов.

Предположим, что вариант poem хранится в файле new_poem:

$ cat  poem

Great  fleas  have  little  fleas upon  their  backs  to  bite  ‘em,

And  little  fleas have lesser fleas,

and so  ad infinitum.

And  the  great  fleas  themselves,  in  turn, have  greater fleas  to  go on;

While these  again  have  greater  still, and  greater  still, and  so  on.

$ cat  new_poem

Great  fleas  have  little  fleas upon  their  backs  to  bite  them,

And  little  fleas  have  lesser  fleas, and so  on  ad  infinitum.

1        При этом b сортируется как B: b раньше, чем D, но B всегда  будет выведено раньше, чем b. – Примеч. науч. ред.

And  the  great  fleas  themselves,  in  turn, have  greater fleas  to  go on;

While these again  have greater  still,

and greater still, and so  on.

$

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

$ cmp  poem new_poem

poem  new_poem  differ: char  58,  line 2

$

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

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

$ diff poem new_poem

2c2

<     upon their backs  to  bite ‘em,

–––

>     upon  their  backs  to  bite  them, 4c4

<     and so  ad infinitum.

–––

>     and so  on ad infinitum.

$

Это означает, что строка 2 первого файла (poem) должна быть  заменена на строку 2 второго файла (new_poem), аналогично для строки 4.

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

Команды обработки файлов: резюме

Краткий перечень рассмотренных команд обработки файлов представлен в табл. 1.1.

1        Сравнив двоичные файлы, diff  скажет: «Binary  files первый and  второй

differ» или, если они не отличаются, не скажет ничего. – Примеч. науч. ред.

Таблица 1.1. Основные команды, относящиеся к файловой системе

Команда

Действие

ls

ls имена5файлов

ls –t ls –l ls  –u

ls –r

ed имена5файлов

cp file1 file2

mv  file1 file2

rm имена5файлов cat  имена5файлов pr  имена5файлов

pr  –n имена5файлов

pr  –m  имена5файлов

wc  имена5файлов

wc  –l  имена5файлов

grep  шаблон имена5файлов grep  –v  шаблон имена5файлов sort  имена5файлов

tail имена5файлов tail –n  имена5файлов tail +n  имена5файлов cmp  file1 file2

diff file1 file2

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

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

вывести список, упорядоченный по времени, начиная с самого нового

вывести  список  с  более  подробной  информацией; также ls  –lt

вывести  список,  упорядоченный  по  времени последнего    использования;    также    ls –lu, ls –lut

вывести список в обратном порядке; также ls

–rt,  ls  –rlt и т. д.

редактировать указанные файлы

копировать  file1  в  file2,  перезаписывая  старый file2, если он существовал

переместить  file1  в  file2,  перезаписывая  старый file2, если он существовал

безвозвратно удалить указанные файлы вывести содержимое указанных файлов вывести  содержимое  с  заголовком,  66  строк

на странице

вывести в n колонок

вывести указанные файлы рядом  друг с другом (несколько колонок)

сосчитать количество строк, слов и символов в каждом файле

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

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

Источник: Керниган Б., Пайк Р., UNIX. Программное окружение. – Пер. с англ. – СПб: Символ-Плюс, 2003. – 416 с., ил.

По теме:

  • Комментарии