Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Забродин УНИХ основы командного интерфейса 2010

.pdf
Скачиваний:
160
Добавлен:
16.08.2013
Размер:
1.33 Mб
Скачать

-ключ -f команды rm отменяет необходимость подтверждения для любого удаляемого файла;

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

Все три ключа команды rm могут использоваться в любых сочетаниях. Например:

$ rm -ir /home/user/lev/dira

#требует подтверждения на каждый удаляемый файл

$

3.5.КОМАНДЫ ПОИСКА ФАЙЛОВ

ВСИСТЕМЕ КАТАЛОГОВ

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

find <список_каталогов>< условия_поиска> — определение полных имен файлов в поддереве каталогов, удовлетворяющих заданным условиям поиска.

В команде может быть задано до 18 <условий_поиска>. Необходимые комбинации условий объединяются в булевское выражение с помощью элементарных логических операций (элементарных логических функций). Таким образом, формируется логическая функция, принимающая истинное значение, если значения всех её составляющих истинны. На экран выводятся полные маршрутные имена файлов, свойства которых обеспечивают истинность этой функции:

! <условие>

— отрицание условия;

<пробел>

— соответствует операции "И";

-o

— операция "ИЛИ";

\( выражение \)

— булевское выражение в скобках.

41

При описании команды используются обозначения: n — положительное десятичное число;

-n — любое положительное десятичное число, строго меньшее n; +n — любое положительное десятичное число, строго большее n.

Условия задаются следующими опциями:

name'имя_файла' — истинно для файлов с указанным именем; perm <8-ричный_код> — истинно для файлов с указанным ко-

дом прав доступа;

type {f|d|b|c|p} — истинно для файлов указанного типа; links n — истинно для файлов с числом ссылок n;

user <имя_пользователя> истинно для файлов, принадлежащих данному пользователю;

size n[c] — истинно для файлов с длиной n (число блоков – 1 блок = 512 байт) или с – в символах (байтах);

exec <команда> {} \; — истинно, если команда возвращает нулевой код завершения (true); выполняет <команда> для каждого найденного файла.

Все аргументы команды find разделяются пробелами: $ find lev -type f -links +1

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

Поиск в головном каталоге и во всех нижележащих с выводом листинга атрибутов каждого из найденных файлов:

$ find * -type d -links +3 -exec ls -al {} \;

где {} – “подстановка”, т.е. команда, указанная в скобках будет выполняться для каждого из найденных файлов, имена которых будут подставлены вместо фигурных скобок:

$ find /dev \( -type b -o -type d \)

Выводятся имена каталогов или специальных файлов устройств блок-ориентированного типа из каталога /dev и его подкаталогов.

Пример иллюстрирует форму выходной информации: $ find * -type d,

42

где * — поиск в текущем [.] и во всех нижележащих каталогах [*].

./ira

./petr

./lev1/lev11

$

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

$find / \(-name “fil.*” –o –user petr –exec cat {} \;\).

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

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

grep [-ключи] 'шаблон' <список_файлов> — поиск в файлах из списка_файлов строк, содержащих указанный шаблон (подстрока символов).

Ключи определяют режимы поиска и вывода:

c — выводятся имена всех просмотренных файлов и количество найденных строк, содержащих шаблон;

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

i — игнорируются регистры;

l — выводятся только имена файлов, содержащие найденные строки, и др.

Примеры:

$ grep -c 'aaa' * f.1: 10

f.2: 3 f.3: 1

$

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

43

$ grep -l aaa * f.1

f.2

f.3

...

$

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

$ grep -n bbb *

f.1: 5: aaaaaabbbbaaacc

f.2: 2: bbbbbbbbbbbbbbbbbbbb f.6: 1: bbb

$

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

3.6. УПРАВЛЕНИЕ ФАЙЛАМИ

sort — алфавитная и числовая сортировка файлов или строк файлов; режим сортировки определяется ключами.

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

$sort [-k номер-поля-в-строке] [список-файлов]

d — по алфавиту (или по умолчанию); n — числовая;

u — исключает повторяющиеся строки и т.д. Примеры:

$sort [*] текст вводится со стандартного устройства ввода (0) mmm

bbbb aaaa <Ctrl.D> aaaa bbbb mmm

44

$sort<filt — то же, но текст вводится из файла filt,

$who>filwho

$sort -n 5 filwho — cортировка по началу сеансов работы пользователей.

touch — замена времени модификации на текущее, если файл не существует, то создается новый пустой файл.

touch [-k] имя-файла

Команда может использоваться для создания новых пустых файлов.

Пример:

$touch fil $ls -l

........... .......0 10:12 fil

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

строк (-l), слов (-w), или символов (-c) в указанных файлах: wc [-lwc] список_файлов.

Ключи l, w, c могут употребляться в любых комбинациях и в любом порядке, по умолчанию — lwc. Если не указано имя файла, то команда обрабатывает текст, введенный со стандартного устройства ввода (0):

$ wc f.ddd

3 5 31 f.ddd

$

В примере файл f.ddd содержит 3 строки, 5 слов и 31 символ. Пустойфайлдляпоследующегоиспользованияможнооткрытьтак:

$ > fil.1

 

 

$ ls -l fil.1

 

 

-rw-rw-rw- 1 lev user1

0 Mar 19 18:17

fil.1

$

 

 

Смысл команды заключается в переадресации в fil.1 пустого значения стандартного устройства ввода. Новый пустой файл автоматически создается в текущем каталоге.

45

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

cat [-ключи] [входной_файл1[ входной_файл2 ...]] —

слияние и вывод файлов на стандартное устройство вывода (конкатенация файлов).

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

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

$>fil.1 $>fil.2 $ cat > f

#в файл f помещается текст, набираемый

#пользователем на клавиатуре терминала [0]. text

<Ctrl-D> $ ls

f fil.1 fil.2

$ cat f > fil.1

#содержимое файла f копируется в

#файл fil.1, оставаясь также в f

$ cat fil.1 text

$ cat f fil.1 > fil.2

#два файла: f и fil.1 сливаются в один fil.2 $ cat fil.2

text text

$ cat f fil.1 >> fil.2

#к содержимому fil.2 добавляется fil.1 и f $ cat f fil.2

text text text text

text

46

Команда копирования файлов:

cp [-k] вх_файл_1 [вх_файл_2 [... вх_файл_n]] вых_файл.

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

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

Режим 2. Если вых_файл — каталог, то в него последовательно копируются все указанные вх_файлы со своими атрибутами и именами, но каталог при этом автоматически не создается.

Примеры:

$cd

$ cp fil.c FIL.c

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

$ mkdir petr $ mkdir lev1

$ cp fil.c lev1/prog.c

В том и другом случаях входной файл fil.c сохраняется в исходном текущем каталоге:

$ cp fil.c FIL.c lev1/prog.c petr $ ls petr

fil.c

FIL.c

prog.c

$

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

На следующем, не связанном с предыдущим примере вспомним,

47

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

$ cp f.? fildir

$ cp f.[1-3] fildir $ cp f.[123] fildir

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

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

-r — для копирования каталогов.

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

Схожие с командой cp функции выполняет команда:

mv [-k] вх_ф йл_1 [вх_ф йл_2 [... вх_ф йл_n]] вых_ф йл —

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

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

Пример. Предположим, что существует некоторый подкаталог "a" (относительно текущего) со своими файлами:

$ ls a f1

f2

f3

$ mv a/f? $ ls -l a total 0

$ ls

...

f1

f2

f3

$

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

48

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

$ mv f1 newf1 — файл переименован в том же текущем каталоге. Надо отметить, что фактического перемещения кодов файлов по пространствам памяти не происходит, а пересчитываются только

адресные ссылки на файлы.

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

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

ln [-k] вх_файл_1 [вх_файл_2 [... вх_файл_n]] вых_файл.

В формате команды заложены два режимa ее использования: Режим 1. Если вых_файл — обычный файл, то допускается только один вх_файл_1; в этом случае на него создается ссылка с

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

Количество ссылок на файл в его описателе увеличивается на 1. Режим 2. Если вых_файл — каталог, то в нем создаются элементы, включающие имена перечисленных в команде входных файлов и ссылки на них, после чего в каталоге вых_файл можно

работать с этими файлами, как с файлами этого каталога. Рассмотрим использование команды на примерах (рис. 3.2).

$ pwd

/ /lev $ cd d1

#назначение текущим каталогом d1 $ ls ../d2

#исходное состояние параллельного каталога d2 f21

f22

f23

$ ln ../d2/f21

f1

49

$ ln ../d2/f21 $ ls

#новое состояние текущего каталога f1

f21

$ ln d2/* $ ls

#результирующее состояние текущего каталога d1 f1

f21

f22

f23

$

lev

d1

 

d2

 

 

f21

f1

 

f22

f21

 

f23

f22

 

 

 

f23

 

 

 

 

 

Рис. 3.2. Пример созданных в задаче ссылок

В каталоге d1 созданы элементы, содержащие ссылки на все существующие файлы каталога d2.

Рассмотрим ещё два примера:

$ln a/b c/d — создаётся адресная ссылка d на файл b в параллельных каталогах a и b;

$ln a b ../c — в вышележащем каталоге с созданы две адресные ссылки на два файла в текущем каталоге.

50