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

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

	ls -l display<CR>
на экране появится информация:
	-r-xr-xr-x  1  owner  group  9346  Nov 1 08:06 display 
Чтобы изменить ваш ID на чей-либо другой (например, sara) вы должны ввести:
	chown sara display<CR>
Если вы введете:
	ls -l display<CR>
на экране появится сообщение:
	-r-xr-xr-x  1  sara   group  9346  Nov 1 08:06 display 

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

	id<CR>
то система отобразит ID пользователей и ваш действительный групповой ID (gid). В зависимости от начальной установки системы вы можете принадлежать более чем к одной группе. Чтобы определить, членом какой группы вы являетесь, введите:
	groups<CR>
На экране появится список тех групп, членом которой вы являетесь. Таким образом вы имеете доступ к файлам тех пользователей, чьи групповые ID совпадают с вашими групповыми ID.

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

3.10.7.1. Команда diff

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

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

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

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

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

	3, 6c3, 6
	< Mr. Ron Johnson
	< Layton Printing
	< 52 Hudson Street
	< New York, N.Y.
	---
	> Mr. J.J.McDonough
	> Ubu Press
	> 37 Chico Place
	> Springfield, N.J.
	9c9
	< Dear Mr. Johnson:
	---
	> Dear Mr. McDonough:
Первая строка команды diff:
	3, 6c3, 6
Это означает, что если вы хотите, чтобы johnson соответствовал mcdonough, вы должны изменить (c) строки с 3-й по 6-ю в файле johnson на строки с 3-й по 6-ю из файла mcdonough. Команда diff затем отобразит оба набора строк. Если вы выполните эти изменения (с помощью таких редакторов как ed или vi), файл johnson будет идентичен файлу mcdonough. Помните, что команда diff ищет различия только между двумя указанными файлами.

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

	a - добавить;
	c - изменить;
	d - удалить.

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

3.10.7.2. Команда grep

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

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

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

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

grep automation johnson<CR>

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

	$ grep automation johnson<CR>
	and office automation software
	$

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

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

	$ grep 'office automation' johnson<CR>
	and office automation software
	$

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

	$ grep 'office automation' johnson sanders<CR>
	johnson:and office automation software
	$

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

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

3.10.7.3. Команда sort

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

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

	sort файл(ы)<CR>

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

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

	$ cat group1<CR>
	Smith, Allyn
	Jones, Barbara
	Cook, Karen
	Moore, Peter
	Wolf, Robert
	$ cat group2<CR>
	Frank, H. Jay
	Nelson, James
	West, Donna
	Hill, Chales
	Morgan Kristina
	$

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

	$ cat group1 group2<CR>
результат будет такой же.

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

	$ cat group1 group2<CR>
	Cook, Karen
	Frank, H. Jay
	Hill, Chales
	Jones, Barbara
	Moore, Peter
	Morgan, Kristina
	Nelson, James
	Smith, Allyn
	West, Donna
	Wolf, Robert
	$

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

Назад | Содержание | Вперед