Иллюстрированный самоучитель по RedHatLinux

         

Работа с файлами


Копирование и удаление файлов

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

Создание файлов

Создание символических ссылок

Краткое введение в подстановочные символы



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

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



Копирование файлов


Любой, у кого есть хотя бы небольшой опыт работы в DOS или окне DOS системы Windows, знает, что перетаскивание файлов из окна в окно— не единственный способ их копирования. Команда DOS copy предоставляет дополнительные возможности - например, использование подстановочных символов, - которые могут ускорить, упростить процесс и сделать его более эффективным, чем в Диспетчере файлов или Проводнике.

В Linux для копирования применяется команда ср (/bin/cp).

Основные операции копирования

Безусловно, простейшее применение команды ср - копирование файла из одного каталога в другой или создание дубликата в том же каталоге. Например, чтобы создать копию файла ThisFile, поместив ее в том же каталоге под именем ThisFile-Acopy, необходимо ввести следующую команду:

$ ср ThisFile ThisFile-Acopy

Если теперь заглянуть в указанный каталог при помощи команды 1s -1, то в нем окажется два файла абсолютно одинакового объема, но с разными датами создания. Дата создания нового

файла совпадет с датой копирования, первоначальный же останется неизменным. Изменение файлаThisFile-Acopy не затронет файл ThisFile.

Аналогично, можно копировать файл ThisFile в каталог /tmp (например, чтобы предоставить к нему доступ другому пользователю). Для этого воспользуйтесь следующей командой.

$ ср ThisFile /tmp

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

$ ср ThisFile /tmp/NewFileName

Не записывайте поверх существующего файла

Все дистрибутивы Linux имеют один существенный недостаток: при копировании файлов существует опасность записи копии поверх существующего файла, Предположим, у вас есть два файла- ThisF%le и NewFile. Если вы решите создать копию одного из них, введя команду

$ ср ThisFile NewFile

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

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


Irwxrwxrwx 1 userl users 16992 Apr 5 12:10 TheFile OtherFile

то результат ввода команды

$ ср /tmp/TheFile -/NewFile

был бы следующим:

-rw-rw-r-- 1 user2 users 16992 Apr 5 13:10 NewFile

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

Irwxrwxrwx 1 user2 users 2 Apr 5 13:10 NewFile /tmp/OtherFile

В команде ср для этого предусмотрен флажок.

Флажок

-d отменяет разыменование ссылки. Команда копирования принимает вид:



S ср -d /tmp/TheFile -/NewFile



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



$ ср -pdR TheDirectory /backups



создается точная копия каталога TheDirectory в каталоге /backups /TheDirectory.



$ ср

-a.

TheDirectory /backups





Предотвращение ошибок

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

Один из них - установка флажка -Ь для создания резервных копий файлов и каталогов, поверх КОТОРЫХ производится копирование. По умолчанию резервной копии присваивается имя файла- оригинала с добавленным в конце знаком тильды (~). Таким образом, если воспользоваться командой



$ ср -b FileOne FileTwo



для копирования файла FileOne в существующий файл FileTwo, будет создана резер'вная копия последнего с именем FileTwo-.

Правило присвоения имен резервным копиям можно изменять установкой флажка -S или. Флажок -S служит для замены тильды в конце имени резервной копии другим символом. Например, по команде



$ ср -b -S _ FileOne FileTwo



резервной копии файла FileTwo будет присвоено имя FileTwo_.

Флажок — backup позволяет выбрать одну из трех возможных схем присвоения имен.



t

или

numbered.

Последовательная нумерация резервных копий: при многократном копировании образуется их последовательность вида FileName . ~1~, FileName . ~2~ и т.д.





nil или existing

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



never



или simple

. Создание обычной резервной копии с тильдой в имени или другим символом, указанным флажком -S.

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

необходимо ввести команду



$ ср — backup= t FileOne FileTwo или



$ ср -backup=numbered FileOne FileTwo

Аналогично, вводом команды



$ ср -backup=never FileOne FileTwo и





$ ср --backup=simple FileOne FileTwo

создаются обычные резервные копии.

Флажок -b в Red Hat Linux 7.1 с этими опциями не работает.



Примечание

В Red Hat Linux 7.1 по-прежнему можно использовать флажок -v для управления схемой присвоения имен. Однако в будущих версиях ср этот флажок уже будет недоступен.



Альтернативные формы флажков

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



Краткая форма





Длинная форма



-I

— interactive (интерактивное)

-R

--recursive (рекурсивное)



— preserve (предохранить)



— no-dereference (без разыменования)



— archive (архивное)



— backup (резервное)

-S

--suffix (суффикс)

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

$ ср -i -Ь -V simple -S _ -R ThisDir /tmp

Эта же команда с длинными флажками:



$ ср --interactive —backup --version-control simple --suffix _



->



—recursive ThisDir /tmp

Безусловно, вторая команда более удобочитаема, но кто же возьмется набрать такое на клавиатуре!


Копирование и удаление файлов


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

Копирование файлов

Любой, у кого есть хотя бы небольшой опыт работы в DOS или окне DOS системы Windows, знает, что перетаскивание файлов из окна в окно— не единственный способ их копирования. Команда DOS copy предоставляет дополнительные возможности - например, использование подстановочных символов, - которые могут ускорить, упростить процесс и сделать его более эффективным, чем в Диспетчере файлов или Проводнике.

В Linux для копирования применяется команда ср (/bin/cp).

Основные операции копирования

Безусловно, простейшее применение команды ср - копирование файла из одного каталога в другой или создание дубликата в том же каталоге. Например, чтобы создать копию файла ThisFile, поместив ее в том же каталоге под именем ThisFile-Acopy, необходимо ввести следующую команду:

$ ср ThisFile ThisFile-Acopy

Если теперь заглянуть в указанный каталог при помощи команды 1s -1, то в нем окажется два файла абсолютно одинакового объема, но с разными датами создания. Дата создания нового

файла совпадет с датой копирования, первоначальный же останется неизменным. Изменение файлаThisFile-Acopy не затронет файл ThisFile.

Аналогично, можно копировать файл ThisFile в каталог /tmp (например, чтобы предоставить к нему доступ другому пользователю). Для этого воспользуйтесь следующей командой.

$ ср ThisFile /tmp

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

$ ср ThisFile /tmp/NewFileName

Не записывайте поверх существующего файла

Все дистрибутивы Linux имеют один существенный недостаток: при копировании файлов существует опасность записи копии поверх существующего файла, Предположим, у вас есть два файла- ThisF%le и NewFile. Если вы решите создать копию одного из них, введя команду




$ ср ThisFile NewFile



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

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



$ ср -i ThisFile NewFile



ср: overwrite 'ThisFile'?

Чтобы обезопасить себя от подобных неприятностей, создайте алиас (псевдоимя) команды ср следующей командой:



$ alias cp='cp -i



Теперь при каждом обращении к команде ср последняя автоматически будет превращаться в команду ср —i. Следовательно, будет выводиться предупреждение о-каждом случае копирования поверх существующего файла. Как показано в гл. 16, модифицированием файла . bashrc можно конфигурировать оболочку Bash так, чтобы указанный псевдоним устанавливался при каждом входе в систему. (Оболочка - программа, управляющая средой командной строки,)

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



Копирование нескольких файлов одной командой

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



$ copy file /temp



происходит копирование файла file в каталог / temp. Другой вариант: $ copy *.tsct /temp

В этом случае, в каталог /temp копируются все текстовые файлы из текущего каталога. Если необходимо скопировать три отдельных файла, придется вводить команду трижды. Для копирования всех текстовых и выполняемых (. ехе) файлов текущего каталога команду придется вводить дважды.

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



Рассмотрим пример. Предположим, нам надо скопировать файлы FileOne, FileTwo и FileThree из текущего каталога в каталог /trap. Естественно, это можно сделать, введя команду копирования трижды.



$ ср FileOne /tmp





$ ср FileTwo /tmp





$ ср FileThree /tmp



Можно упростить задачу, объединив три команды в одну. $ ср FileOne FileTwo FileThree /tmp

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



$ ср *.txt *.doc *.bak /tmp



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



Примечание

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

ср: when copying multiple files, last argument must be a directory. Try 'cp —help'for more information. (При копировании нескольких файлов последним надо указывать каталог. Для получения дополнительной информации введите 'ср --help'.)

Для копирования целого каталога со всеми подкаталогами введите команду ср с флажком -R. Если в текущем каталоге существует подкаталог SomeDir, то для рекурсивного копирования этого подкаталога (со всем его содержимым) в подкаталог / tmp воспользуйтесь следующей командой.



$ ср -R SomeDir /tmp



При копировании будет создан новый каталог /tmp/SomeDir, в который и будет скопировано содержимое исходного подкаталога SomeDir.



Дополнительные возможности

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



Обеспечение идентичности копии и оригинала

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



Владельцем копии файла обычно становится пользователь, выполнивший копирование, а не создатель файла-оригинала. Предположим, файл TheFile был создан пользователем userl и помещен в каталог /tmp, чтобы пользователь user2 смог копировать его оттуда в свой исходный каталог. В списке файлов этот файл выглядит примерно так:

-rw-r—r-- 1 userl users 16992 Apr 5 12:10 TheFile

После того, как пользователь user2 скопирует этот файл командой

$ ср /tmp/TheFile -/NewFile

он становится владельцем файла-копии.

-rw-rw-r-- I user2 users 16992 Apr 5 13:10 NewFile

Файлу, созданному в некотором каталоге, назначается набор разрешений по умолчанию. Но его копия наследует не эти разрешения, а разрешения, назначенные каталогу, в который выполнялось копирование. Обратите внимание на различия в разрешениях файла-оригинала и копии в приведенном примере. Если для оригинала определено разрешение только чтения группами пользователей, то для копии разрешена запись. Изменению подверглась и дата. В копии она совпадает со временем копирования, а с датой оригинала.

Иногда в копии необходимо сохранить все атрибуты файла-оригинала. Предположим, что корневой пользователь создает на съемном диске резервную копию некоторого набора файлов. В отличие от обычного архивирования на магнитную ленту, требующего других средств, в этом случае можно воспользоваться командой ср. Но резервные копии должны полностью соответствовать оригиналам. Самое время вспомнить о флажке -р, установка которого позволяет сохранить в копии все атрибуты оригинала. Если, возвращаясь к предыдущему примеру, вести команду

$ ср -р /tmp/TheFile

копия будет неотличима от оригинала:

-rw-r--r-- I userl users 16992 Apr 5 12:10 TheFile

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



При обычном копировании символической ссылки происходит копирование не ее самой, ,а файла, на который она указывает. Например, если бы в предыдущем примере TheFile было именем символической ссылки:

Irwxrwxrwx 1 userl users 16992 Apr 5 12:10 TheFile OtherFile

то результат ввода команды

$ ср /tmp/TheFile -/NewFile

был бы следующим:

-rw-rw-r-- 1 user2 users 16992 Apr 5 13:10 NewFile

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

Irwxrwxrwx 1 user2 users 2 Apr 5 13:10 NewFile /tmp/OtherFile

В команде ср для этого предусмотрен флажок.

Флажок

-d отменяет разыменование ссылки. Команда копирования принимает вид:



S ср -d /tmp/TheFile -/NewFile



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



$ ср -pdR TheDirectory /backups



создается точная копия каталога TheDirectory в каталоге /backups /TheDirectory.



$ ср

-a.

TheDirectory /backups





Предотвращение ошибок

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

Один из них - установка флажка -Ь для создания резервных копий файлов и каталогов, поверх КОТОРЫХ производится копирование. По умолчанию резервной копии присваивается имя файла- оригинала с добавленным в конце знаком тильды (~). Таким образом, если воспользоваться командой



$ ср -b FileOne FileTwo



для копирования файла FileOne в существующий файл FileTwo, будет создана резер'вная копия последнего с именем FileTwo-.

Правило присвоения имен резервным копиям можно изменять установкой флажка -S или. Флажок -S служит для замены тильды в конце имени резервной копии другим символом. Например, по команде



$ ср -b -S _ FileOne FileTwo





резервной копии файла FileTwo будет присвоено имя FileTwo_.

Флажок — backup позволяет выбрать одну из трех возможных схем присвоения имен.



t

или

numbered.

Последовательная нумерация резервных копий: при многократном копировании образуется их последовательность вида FileName . ~1~, FileName . ~2~ и т.д.



nil или existing

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



never



или simple

. Создание обычной резервной копии с тильдой в имени или другим символом, указанным флажком -S.

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

необходимо ввести команду



$ ср — backup= t FileOne FileTwo или



$ ср -backup=numbered FileOne FileTwo

Аналогично, вводом команды



$ ср -backup=never FileOne FileTwo и





$ ср --backup=simple FileOne FileTwo

создаются обычные резервные копии.

Флажок -b в Red Hat Linux 7.1 с этими опциями не работает.



Примечание

В Red Hat Linux 7.1 по-прежнему можно использовать флажок -v для управления схемой присвоения имен. Однако в будущих версиях ср этот флажок уже будет недоступен.



Альтернативные формы флажков

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



Краткая форма





Длинная форма



-I

— interactive (интерактивное)

-R

--recursive (рекурсивное)



— preserve (предохранить)



— no-dereference (без разыменования)



— archive (архивное)



— backup (резервное)

-S

--suffix (суффикс)

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

$ ср -i -Ь -V simple -S _ -R ThisDir /tmp

Эта же команда с длинными флажками:



$ ср --interactive —backup --version-control simple --suffix _



->



—recursive ThisDir /tmp

Безусловно, вторая команда более удобочитаема, но кто же возьмется набрать такое на клавиатуре!


Краткое введение в подстановочные символы


Рассмотрим еще одну важную тему, посвященную

подстановочным символам.

Подробно она

изложена в гл. 16 при изучении оболочки Unix, но поскольку мы уже неоднократно использовали эту технику, разумно будет сказать о ней несколько слов.

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

.txt

a.txt

file.txt

txt.txt

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

?. Соответствует любому одному символу, так что выражению file.? соответствует файл file, с, но не file. txt.

[Список]. Соответствует любому одному символу, указанному в списке, так что выражению file, [abc] соответствуют файлы file.a, file.b и file.с, ноне file.d или file.txt.



Основная операция перемещения


Рассмотрим основную операцию перемещения.

$ mv FlleOne /tmp

По этой команде файл FileOne перемещается в каталог /trap.



Перемещение и переименование


Одновременно с перемещением в каталог /tmp, файл можно переименовать, воспользовавшись следующей командой.

$ mv FileOne /tmp/NewFileName

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

$ mv FileOne NewFileName

Как видим, перемещение и переименование - одна и та же операция.



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


Перемещение и переименование файлов - операции родственные, поэтому мы рассмртрим их в одном параграфе. В отличие от систем DOS/Windows и Macintosh, где эти операции вполне независимы, в Linux переименование файлов рассматривается как частный случай перемещения.



Перемещение нескольких файлов


Перемещение, как и копирование, может производиться сразу над несколькими файлами, поскольку в команде mv допустимо наличие более двух аргументов. В этом случае последний аргумент указывает каталог назначения (перемещать, как и копировать, несколько файлов в один нельзя). Рассмотрим ситуацию, в которой необходимо переместить в каталог /tmp все файлы текущего каталога с расширениями .bak, .tmp и .old. Воспользуемся командой

$ mv *.bak *.tmp *.old /tmp

По этой простой команде все файлы текущего каталога с расширениями . bak, .tmp и .old будут перемещены в каталог / tmp.

Командой mv можно перемещать целые каталоги, причем для этого не надо устанавливать флажки. Если в текущем каталоге есть подкаталог TheDir, который надо переместить в каталог / tmp, введите команду

$ mv TheDir//tmp

Аналогично, каталог TheDir превращается в подкаталог каталога NewDir:

$ mv TheDir/ /NewDir

Примечание

Как и для двух команд, рассмотренных выше, для команды mv необходимо установить алиас mv -i, чтобы предотвратить случайную запись перемещаемых файлов поверх уже .существующих. Для этого введите команду $ alias mv='mv -i'. В учетной записи суперпользователя такой алиас для команд ер, rm и mv установлен по умолчанию.



Работа с файлами


Копирование и удаление файлов

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

Создание файлов

Создание символических ссылок

Краткое введение в подстановочные символы

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

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



Создание файлов


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

Но иногда требуется создать пустой файл нулевого объема. Пример такой ситуации - создание пустого файла сценарием для отметки особого состояния или прием программирования, называемый захватом файла

(file locking).

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

(lock file).

Блокировочный файл показывает другим программам и сценариям, что данный файл открыт для редактирования, а потому не может редактироваться другими программами или сценариями. Завершив редактирование файла и закрыв его, сценарий уничтожает блокировочный файл, вновь открывая доступ к отредактированному файлу.

Чтобы быстро и эффективно создавать блокировочные файлы, не выделяя значительный дисковый объем, нужен рациональный способ создания пустого файла. Для этого применяется команда touch. Например, по команде

$ touch

NewFile

создается файл нулевого объема NewFile.

-rw-rw-r-- 1 armand armand 0 Apr 6 21:06 NewFile

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



Создание каталогов


Каталоги относятся к числу специальных разновидностей файлов в Linux. Их специфика в том, что они содержат другие файлы. Для каталога вы можете установить такие ограничения на доступ, что другие пользователи даже не смогут посмотреть, какие файлы в нем содержатся Примерами каталогов может служить корневой каталог верхнего уровня (/) или ваш личный (домашний) каталог (например, /home/mj).

Но создать каталог той же командой, которой вы создаете файлы, нельзя. Для этого предусмотрены специальные команды mkdir и rmdir. Если вы хотите создать подкаталог для документов в вашем каталоге, можете воспользоваться следующей командой:

$ mkdir documents

Но эта команда не даст ожидаемого результата, если вы не находитесь в своем каталоге. Для пущей уверенности задайте полный путь создаваемого каталога:

$ mkdir /home/mj/documents

Будет ли эта команда работать или нет, зависит от предоставленных вам прав и доступности корневого каталога. К примеру, как рядовой пользователь вы, вероятно, не сможете создать новый каталог /golf, но корневому пользователю эта задача по силам.

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

$ rmdir /home/mj/documents

Будет ли эта команда работать, зависит от ваших прав для каталога /home/mj и от того, есть ли что-нибудь в этом каталоге. Конечно, можно использовать рассмотренную выше в этой главе команду rm -r для удаления непустого каталога.



Создание символических ссылок


Иногда приходится создавать не файлы, а символические ссылки.

Символические ссылки -

это указатели на реальные файлы в других каталогах. Обычно они используются системными администраторами и разработчиками прикладных программ. Представьте себе программиста, работающего над несколькими версиями одной программы. В конкретный момент времени тестирование проходит версия progS, progS или proglO - в зависимости от того, на какой стадии разработки находится проект. Чтобы гарантировать запуск для тестирования последней версии, можно создать на нее символическую ссылку prog. Каждый запуск prog будет приводить к запуску последней версии программы.

Есть два способа создания символических ссылок. Первый - ввод команды In с флажком

-s,

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

Например, чтобы создать в текущем каталоге ссылку МуСору на файл /bin/cp, введите следующую команду.

$ 1n

-a

/bin/ср МуСору

После этого команда 1s -1 покажет наличие символической ссылки.

1rwxrwxrwx 1 armand armand 7 Apr 6 22:50 МуСору -> /bin/cp

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

$ ср

-8

/bin/cp МуСору



Удаление файлов


Конечно же, Linux предоставляет не менее надежное средство удаления файлов. Это команда rm с соответствующим выполняемым файлом /bin/rm.

В простейшей форме команда применяется для удаления одного или нескольких файлов из текущего каталога. Командой

$ rm ThisFile

из текущего каталога удаляется файл ThisFile. Если из текущего каталога надо удалить все текстовые файлы, введите следующую команду.

$ rm *.txt

Подобно команде копирования, rm может иметь несколько аргументов. Например, две предыдущие команды можно заменить одной.

$ rm ThisFile *.txt

Как и команда копирования, rm несет в себе не только удобство, но и опасность. Нетрудно представить последствия случайного ввода команды

$ rm thesis.doc

вместо

$ rm thesis. bak

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

Чтобы избежать этого, установите в команде rm флажок -i, известный нам по команде ср, для вывода предупреждений об удалении файлов.

$ rm

-i

thesis.doc

rm: remove 'thesis.doc'?

Можно также создать псевдоимя команды rm, обеспечив вывод предупреждений по умолчанию.

$ alias rm='rm-i'



Удаление каталогов


Пользователям часто приходится удалять целиком каталоги. Предположим, у вас есть каталог, созданный в результате разархивирования файла, загруженного из Internet. После установки и тестирования программы, содержавшейся в загруженном файле, вы решите этот каталог удалить, для чего в команде rm необходимо установить флажок -r. Например, команда удаления каталога

$ rm -r Templnstall

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

$ rm -r Templnstall

rm: descend directory 'templnstall'? у

rm: remove

v

TempInstall/File1'? у

rm: remove 'Templnstall/File2'? у

rm: remove directory 'Templnstall'? у

Представьте, что вам предстоит удалить несколько сот файлов. Невыполнимая задача. Для этих случаев предусмотрен флажок -f . Если вы уверены, что при удалении всего каталога не удалите ничего лишнего, отмените вывод предупреждений об удалении, установив в команде rm флажок -f.

$ rm -rf Templnstall

Напоминание

К использованию флажка -f следует относиться осторожно. Это средство не только мощное, но и опасное.

Учетная запись суперпользователя конфигурирована с установкой алиаса (псевдоимени) команды rm по умолчанию rm -i. Эта установка очень важна, поскольку малейшая ошибка суперпользователя может иметь катастрофические последствия для системы. Нетрудно догадаться чтo произойдет, если при попытке удалить каталог /tmp между "/" и "tmp" каким-то образом

окажется пробел.

$ rm -r / tmp

Это команда удаления всех файлов и каталогов диска. И еще одно подтверждение важности алиаса команды rm -i.

Естественно, использование флажка - f требует от суперпользователя большой осторожности, да и само использование учетной записи суперполъзователя следует свести к минимуму. В конце концов, команда

$ rm -rf / tmp

опасна даже при наличии нужного алиаса.



Альтернативные средства конфигурирования


По большому счету существует две достойных альтернативы утилиты Printconf: PrintTool и Apsfilter. PrintTool представляет собой утилиту, использовавшуюся в Red Hat вплоть до версии 7.0. Apsfilter рассматривается в гл. 18. Если вы ранее пользовались Red Hat Linux, вероятно, вы будете увереннее чувствовать себя с PrintTool. Чтобы установить PrintTool, сначала удалите Printconf. Для этого можно воспользоваться следующими rpm-командами в режиме корневого пользователя:

#

rpm -e printconf-gui

#

rpm -в printconf

Установить PrintTool можно с диска Red Hat Linux 7.0 CD-ROM или загрузив его исходные тексты с узла www. rpmf ind. net. Необходимы следующие два пакета:

rhs-printfilters-1.81-1.1386.rpm

pnnttool-3 .54-1.1386.rpm

Загрузив эти пакеты в каталог / tmp, можно затем установить их с помощью следующих rpm-команд в режиме корневого пользователя:

#

rpm -i /tmp/rhs-printfilters-1.81-1.1386.rpm

#

rpm -i /tmp/printtool-3.54-1.1386.rpm



Добавление модулей


При первом «запуске утилиты Linuxconf доступны не все необходимые средства. Процедура добавления модулей, впрочем, достаточно проста. Чтобы увидеть доступные модули, щелкните на вкладке Control (Управление), а затем выберите Control Files And Systems/Configure Linuxconf Modules (Файлы и системы управления/Конфигурирование модулей Linuxconf), чтобы открыть вкладку List Of Modules (Список модулей), показанную на рис. 15.7.

Необходимо добавить, по крайней мере, инструмент конфигурирования модема modemconf, поскольку он потребуется вам далее в этой главе. Для активизации этого инструмента, выберите modemconf и щелкните на кнопке Accept (Принять), расположенной под вкладкой List Of Modules

(Список модулей). Затем на панели инструментов следует выбрать File/Act Changes (Файл/Изменить), после чего выбрать File/Quit (Файл/Выход). После перезапуска утилиты Linuxconf, на вкладке Config (Конфигурация) в группе Peripherals (периферийные устройства) появится опция Modem (Модем).

Рис. 15.7.

Вкладка List Of Modules утилиты Linuxconf

Примечание

Предусмотрены две команды выхода из Linuxconf: File/Quit (Файл/Выход) и File/Quit (no check) (Файл/Выход (без проверки)). Вторая команда выполняет перекрестную проверку конфигурации на соответствие состоянию системы Linux. Если обнаруживаются различия, то Linuxconf предлагает обновить систему.



Добавление принтера


Для запуска процедуры щелкните на кнопке New (Новый) в панели инструментов Printconf. В результате откроется окно диалога Edit Queue (Редактирование очереди), показанное на рис. 15.2. В текстовом поле Queue Name (Имя очереди) введите имя вашего принтера. Если необходимо несколько имен, можете задать один или несколько псевдонимов (алиасов). Щелкните на кнопке Add (Добавить) и введите соответствующий псевдоним. Повторите операцию для других псевдонимов, если они необходимы. На рис. 15.2 в качестве имени принтера задано test, а в качестве псевдонима указан hp I j 4.

Рис. 15.2.

Задание имен и псевдонимов



И группами пользователей


Рассмотрим использование программы LinuxConf для управления пользователями и группами пользователей. Соответствующие параметры находятся в подразделе Normal (Обычные) подраздела Users Accounts (Учетные записи пользователей) вкладки Config (Конфигурация) дерева разделов в левой панели окна программы LinuxConf.



Конфигурирование драйвера принтера


Следующий шаг ставит себе целью конфигурирование драйвера, обеспечивающего обмен системы Linux с принтером. В диалоговом окне Edit Queue (Редактирование очереди) щелкните на опции Printer Driver (Драйвер принтера) и выберите одну из четырех разновидностей принтеров, три из которых показаны на рис. 15.4.

Postscript Printer (Postscript-принтер).

В большинстве случаев для работы с различными Postscript-принтерами вполне подходит стандартный Postscript-драйвер.

Text Only Printer (Text Only-принтер).

Если необходима только распечатка текстовой информации из стандартных текстовых файлов, или если ваш принтер может обрабатывать только стандартные текстовые ASCII-коды, следует выбрать эту опцию.

Raw Print Queue (Raw Print Queue-принтер).

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

Brand Specific (Brand Specific-принтер).

Утилита Printconf включает множество принтерных драйверов, ориентированных на обслуживание соответствующих моделей принтеров. Если у вас не Postscript-принтер, то следует выбрать в списке фирму и модель подключенного к компьютеру- принтера.

Рис. 15.4.

Выбор драйвера принтера

Примечание

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

Можно даже установить один и тот же принтер с разными драйверами. Например, если одна из используемых вами программ выдает на печать данные уже непосредственно в формате принтера, то принтер для нее не нужен, и вы можете воспользоваться опцией raw print queue. Для остальных программ можно установить тот же самый принтер с подходящим драйвером. Не забудьте при этом использовать для разных установок разные имена, псевдонимы и принтерные устройства.


Выбрав принтерный драйвер, следует настроить его, задав необходимые параметры. Например, рис. 15.5 иллюстрирует доступные для настройки параметры принтера HP Laser Jet 4L.

При настройке доступно множество параметров. Наиболее часто используются следующие опции конфигурирования принтерного драйвера:



Send EOT.

EOT — это сокращение для "End of Transmission" (Конец передачи). Если принтер некорректно отрабатывает запуск или завершение задания в очереди заданий, следует установить эту опцию.



Rerender Postscript.



Этот параметр обеспечивает передачу вашего файла на печать в виде Postscript. Некоторые принтеры требуют формата Postscript для обработки графики. Но иногда эта опция не работает, так как ряд моделей принтеров не воспринимает данные в postscript' формате.



Page Size (Размер страницы).



Для этой опции следует задать размер бумажного листа принтера.

Прочие опции в общем случае специфичны для конкретного драйвера. Более подробные сведения можно получить в документации на принтер и/или принтерной Linux-документации по адресу www. linuxprinting. org.

Завершив конфигурирование, щелкните на кнопке ОК для выхода из диалогового окна Edit Queue (Редактирование очереди).



Рис. 15.5.

Параметры драйвера принтера


Конфигурирование модема


С помощью утилиты Linuxconf можно также сконфигурировать модем. Откройте окно Linuxconf. воспользовавшись описанным выше способом. Если модуль modemconf установлен так, как это описано ранее, то можно использовать утилиту Linuxconf для конфигурирования модема. На вкладке Config выберите элемент Peripherals/Modem (Периферийные устройства Модем), в

результате будет открыта вкладка Modem Configurator, показанная на рис. 15.17.

Рис. 15.17.

Вкладка конфигурирования модема

В этом окне нет обилия параметров: надо лишь указать порт подключения модема (для встроенного модема - порт конфигурирования). Так создается необходимая связь между логическим устройством /dev/modem и физическим адресом модема.

Можно также поручить утилите Linuxconf определить порт, к которому подключен ваш модем. Подсоедините модем к телефонной линии и щелкните на кнопке Detect (Разыскать). Как только модем обнаружен, об этом выдается соответствующее сообщение с указанием порта, в противном случае появляется сообщение No Modem Detected (Модем не обнаружен).

Этот процесс не зависит от конфигурации программ, использующих модем для доступа в Internet или пересылки факсов. (Они рассмотрены в гл. 22).

Совет

Если Modem Configurator утилиты Linuxconf не может распознать ваш модем, проверьте, подключен ли он к телефону и есть ли сигнал станции на линии. В противном случае используйте описанные в гл. 22 средства, чтобы помочь системе распознать модем.



Конфигурирование принтеров


Пожалуй, самая сложная задача в Unix - заставить работать принтер, вручную редактируя системные конфигурационные файлы. Особенно, если это принтер стандарта PCL (Printer Control Language - Язык управления печатью).

Компания Red Hat добилась замечательного результата, сделав эту задачу выполнимой (даже нетрудной) с помощью утилиты Printconf. Эта утилита запускается выбором в главном меню GNOME команды Programs/System/Printer Configuration (Профаммы/Системные/Конфигурирование принтера). Если вы вошли в систему не как корневой пользователь, то появляется запрос пароля корневого пользователя.

В результате на экран выводится окно утилиты конфигурирования принтеров, показанное на рис. 15.1.

Рис. 15.1.

Окно утилиты конфигурирования принтеров

Примечание

Эту утилиту можно также вызвать из КDЕ, выбором опции System/Printer Configuration в главном меню КDЕ.

Утилита Printconf представляет собой наиболее удобное средство настройки конфигурационного файла /etc/printcap. Фактически, используя Printconf, вы избавляетесь от необходимости ручного редактирования файла /etc/printcap. Если же вы работаете с принтерами, которые поддаются только ручной настройке, можете задать их параметры в файле /etc/printcap. local.

Процедура установки нового принтера состоит из четырех шагов: вначале задается имя. Оно может включать алиасы (псевдонимы) для упрощения запоминания имени нового принтера. Далее устанавливается очередь. Она может быть локальной или удаленной (в сети). Созданная очередь ассоциируется с принтером. Третий шаг посвящен установке драйвера, который обеспечит обмен системы Linux с принтером. В завершение необходимо сохранить внесенные настройки и перезапустить Демон Line Printer Daemon, вызываемый как lpd.



Конфигурирование системы средствами LinuxConf и панели управления


Конфигурирование принтеров

Запуск программы LinuxConf

Добавление модулей

Управление пользователями и группами пользователей

Конфигурирование модема

Установка даты и времени

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

трудным.

Ручное редактирование конфигурационных файлов - крайне сложный процесс, и именно это послужило причиной оценки Linux, в отличие от Windows, как недружественной пользователю системы.

Однако компания Red Hat уже не первый год работает над тем, чтобы оградить пользователя от конфигурационных файлов основной рабочей станции Linux. На сегодняшний день доступен ряд утилит конфигурирования, позволяющих управлять пользователями, принтерами, системными часами, модемами, сетями, пакетами программ и т.п.

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

Примечание

В других дистрибутивах Linux также предусмотрены конфигурационные утилиты с графическим интерфейсом, подобные Linuxconf, например, Control Center фирмы Corel, WebMin от Caldera, YaST от S.u!S.E.

В этой главе рассмотрены функции графических конфигурационных утилит Red Hat Linux 7.1, в частности, Printconf и Linuxconf, причем ряд особенностей утилиты Linuxconf разобран детально.



Тестирование конфигурации


Перед тем, как приступать к тестированию конфигурации, ее следует сохранить в конфигурационном файле /etc/printcap. Вернувшись в основное окно утилиты Printconf, выберите команду File/Save Changes (Файл/Сохранить изменения), чтобы сохранить изменения в указанном файле. Затем выберите команду File/Restart/Lpd (Файл/Перезапустить/Lpd), чтобы демон Line Printer Daemon прочитал этот конфигурационный файл.

Теперь можно приступать к тестированию конфигурации. В меню Test (Тест) содержатся три опции:

Print Postscript Test Page (Печатать тестовую страницу Postscript).

Стандартная тестовая Postscript-страница Red Hat включает текст, цветной фрагмент и рамки на расстоянии 0,5 и 1,0 дюйма от края страницы размером 8,5 х 11 дюймов.

Print А4 Postscript Test Page (Печатать тестовую страницу А4 Postscript).

Это стандартная тестовая Postscript-страница Red Hat, ориентированная на бумагу формата А4, являющуюся стандартной в Европе.

Print ASCII Test Page (Печатать тестовую страницу ASCII).

Это стандартная тестовая страница, которая содержит только текст без графики.



Управление группами


Другой аспект управления пользователями и группами - управление группами пользователей, осуществляемое на вкладке Config в подразделе /Users Accounts/Normal/Group Definitions (Определение групп) дерева разделов в левой панели окна программы LinuxConf. На вкладке конфигурирования групп приведен их список и ряд функциональных кнопок (рис. 15.13). Подробнее группы рассмотрены в гл. 17.

Рис. 15.13.

Управление группами

Создание группы

Чтобы добавить новую группу в список, щелкните на кнопке Add (Добавить). Откроется вкладка, показанная на рис. 15.14.

Рис. 15.14.

Создание группы

Эта вкладка выглядит как уменьшенный вариант вкладки создания учетной записи пользователя. На ней указываются следующие параметры.

Имя группы.

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

В поле Alternate Members (Члены группы) - список членов группы, разделенных пробелами.

Редактирование или просмотр групп

Для редактирования или просмотра группы щелкните на ее имени в списке. Откроется вкладка, показанная на рис. 15.15.

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



Управление пользователями


Для управления пользователями перейдите в LinuxConf а вкладку Config, на ней выберите элемент Users Accounts, в нем - Normal, а в нем - Users Accounts. В правой части окна откроется вкладка управления пользователями (рис. 15.8) со списком пользователей и рядам функциональных КНОПОК.

На этой панели можно выполнять следующие операции.

Ввод новых пользователей.

Просмотр и редактирование свойств существующих пользователей.

Временное блокирование и разблокирование пользователей.

Удаление пользователей из системы.

Рис. 15.6.

Панель управления пользователями

Ввод новых пользователей

Чтобы добавить в список нового пользователя, щелкните на кнопке Add (Добавить). Откроется вкладка User Account Creation (Создание учетной записи пользователя), показанная на рис. 15.9, Большинство полей этой вкладки пусты: в них надо ввести сведения о новом пользователе. Покончив с заполнением полей, создайте учетную запись щелчком на кнопке Accept (Принять).

Ниже описаны поля вкладки User Account Creation.

Login Name (Имя пользователя)

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

Например, пользователю Арману Данешу (Arrnan Danesh) подошло бы одно из следующих имен:

armand

adanesh

arman

danesh

arman_danesh

ArmanDanesh

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

Рис. 15.9.

Ввод нового пользователя

Full Name (Полное имя)

В это поле вводится полное имя пользователя, которое указывается, например, в поле сообщений электронной почты "От", вместе с адресом, формируемым по имени пользователя. Это имя может содержать пробелы.

Group (Группа) и Supplementary Groups (Дополнительные группы)

В этом поле пользователь включается в определенную группу. Если это поле не заполнено, то Linux Red Hat создает для данного пользователя отдельную группу, идентификационный номер которой совпадает с его идентификационным номером. Численные значения, установленные программой LinuxConf, лучше не менять.


В поле Supplementary Groups можно указать дополнительные группы, в которые будет добавлен новый пользователь для решения некоторых проблем управления безопасностью и доступом. В большинстве небольших Систем и сетей необходимости в этом не возникает.



Home Directory (Исходный каталог)

В этом поле указывается полный путь к исходному каталогу пользователя. В Linux Red Hat по умолчанию это подкаталог каталога /home, имя которого совпадает с именем пользователя. Linux автоматически назначает исходный каталог. Но можно задать исходный (домашний) каталог в поле Home Directory по своему усмотрению.

Например, пользователю armand должен быть назначен исходный каталог /home/armand. Если у вас не огромный сервер с множеством пользователей, и вы не намерены реализовать на нем собственную систему назначения исходных каталогов, оставьте это поле как есть.



Command Interpreter (Интерпретатор команд)

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

По умолчанию для всех новых пользователей Linux Red Hat устанавливается оболочка Bash. Если щелкнуть на кнопке рядом с полем Command Interpreter, то откроется список альтернативных оболочек, среди которых разновидности оболочки Bash - Ash, C-Shell и Enhanced C-Shell (/bin/ tcgh). Как правило, нет необходимости менять оболочку по умолчанию.



Создание учетной записи

Закончив ввод сведений для новой учетной записи, введите ее в систему щелчком на кнопке Accept (Принять). После этого программа дважды потребует указать пароль пользователя (второй раз - для подтверждения). Вкладка, в которой вводится пароль, показана на рис. 15.10.



Рис. 15.10.

Ввод нового пароля

После того, как новый пароль введен дважды (каждый раз - со щелчком на кнопке Accept (Принять)), откроется главная вкладка управления пользователями (см. рис. 15.8), в списке которой будет только что введенный пользователь.



Примечание

Если вы используете в качестве пароля слово, которое есть в словаре, утилита Linuxconf выдаст соответствующее сообщение об ошибке. Если вы все-таки хотите использовать это слово в качестве пароля, щелкните на кнопке Accept (Принять), а затем повторно введите то же самое слово в поле Retype New UNIX Password.





Совет

Хорошие пароли состоят из комбинаций букв и цифр. Например, пароль, подобный Itr29tmr гораздо сложнее подобрать, чем любое слово из словаря. Запомнить такой пароль совсем не сложно, если иметь в виду, что Itr29tmr означает "I take route 29 to my restaurant" ("Я езжу в ресторан по дороге 29").



Редактирование и просмотр учетной записи

Для просмотра или редактирования учетной записи пользователя, щелкните на его имени в списке пользователей главной вкладки управления пользователями. Откроется вкладка (рис. 15.11) практически идентичная той, в которой происходило определение нового пользователя. Единственное исключение - все поля содержат информацию о пользователе, выделенном в списке. При необходимости в эту информацию можно внести изменения.

Чтобы задействовать внесенные изменения, щелкните на кнопке Accept (Принять), а чтобы выйти без сохранения изменений - на Cancel (Отмена).



Рис. 15.11.

Просмотр и редактирование учетной записи



Включение и выключение учетных записей

Это очень удобное средство. Смысл его - временное прекращение доступа пользователя в систему без удаления учетной записи. Через некоторое время доступ можно восстановить. Пример ситуации, в которой удобно использовать это средство - временное прекращение доступа провайдером Internet (ISP) за неуплату.

Чтобы выключить учетную запись, щелкните на имени пользователя в списке и в окне редактирования учетной записи сбросьте флажок The Account is Enabled (Учетная запись включена). Запись будет выключена после щелчка на кнопке Accept.



Включение учетной записи

Чтобы включить учетную запись, щелкните на имени пользователя в списке, и в окне редактирования учетной записи установите флажок The Account is Enabled. Запись будет включена после щелчка на кнопке Accept.



Удаление пользователя

Это последняя из операций управления пользователями. Чтобы восстановить удаленного пользователя, нужно заново создать его

учетную

запись. Чтобы удалить пользователя, щелчком на его имени в списке откройте вкладку редактирования учетной записи, затем щелкните на кнопке Del (Удалить) внизу вкладки. Откроется окно подтверждения удаления, показанное на рис. 15.12.



В этом окне находится переключатель на три положения.



Archive the Account's Data (Архивировать данные учетной записи).

Данные учетной записи пользователя (исходный каталог, выделенные ресурсы и т.п.) архивируются и сжимаются для использования в дальнейшем в каталоге /home/oldaccounts.



Delete the Account's Data (Удалить данные учетной записи).

Данные учетной записи пользователя удаляются.



Leave the Account's Data in Place (Оставить данные учетной записи на месте).

Учетная запись уничтожается, но ее данные сохраняются.

Чтобы удалить пользователя, установите нужное положение переключателя и щелкните на кнопке Accept.



Рис. 15.12.

Окно подтверждения удаления пользователя


Управление существующими принтерами


После установки принтера внесение изменений в его конфигурацию не составляет трудностей. Выберите необходимый принтер и щелкните на Edit (Изменить) на панели инструментов. Появится уже знакомое вам диалоговое окно.



Установка даты и времени


С помощью утилиты Linuxconf можно настроить часы и календарь вашего компьютера. Откройте окно Linuxconf, воспользовавшись описанным выше способом. На вкладке Control выберите элемент Date & Time. В результате появится вкладка Workstation Date & Time Configurator, показанная на рис. 15.18.

Время и дата указаны в средней и нижней части окна. Для установки даты или времени щелкните на любой части значения даты или времени (часах, минутах, секундах, месяце, дне или годе).

В системе Linux используется стандартное время по Гринвичу Greenwich Mean Time (GMT). Это позволяет упростить синхронизацию Linux-серверов, расположенных в различных часовых поясах. Чтобы выполнить такую синхронизацию на вашем компьютере, система Linux должна знать его часовой пояс. Указать этот пояс можно с помощью меню, вызываемого щелчком на кнопке, расположенной справа от поля Zone.

Если на вашем компьютере установлена только система Linux, выберите опцию Store Date In CMOS (Сохранить данные в CMOS). В результате GMT-версия времени, установленного вами будет занесена в аппаратные часы компьютера. В противном случае вам придется вручную изме

нять время системы Linux при изменении времени в вашем часовом поясе (например, при переходе на летнее/зимнее время).

Рис. 15.18.

Вкладка Workstation Date & Time Configurator

Этот инструментарий также можно использовать для синхронизации часов вашего компьютера с часами сервера, который указывается в поле Get Date From Server(s) (Получить данные с сервера). Этот механизм базируется на команде netdate или сервере времени xntp. Ни одна из этих утилит не входит в состав Red Hat Linux 7.1.

Завершив установку параметров, щелкните на кнопке Accept (Принять) и выполните активизацию внесенных изменений так, как это описано выше в данной главе.

Примечание

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

http://www.eecis.udel.edu/

~ntp/ntp_spool/html/ntpdate.htm.



Установка очереди


Теперь необходимо установить очередь для настраиваемого принтера. В диалоговом окне Edit Queue (Редактирование очереди) щелкните на кнопке Queue Type (Тип очереди). Как показано на рис. 15.3, подлежат конфигурированию два параметра: дислокация принтера и связанное с принтером устройство.

Рис. 15.3.

Выбор очереди и устройства

Существует пять разновидностей очередей. Простейшая - Local Printer (Локальный принтер), когда принтер непосредственно подключен в вашему компьютеру через параллельный или USB-порт. После щелчка на Local Printer (Локальный принтер), утилита Printconf показывает все пять

доступных опций Queue Type (Тип очереди). Остальные четыре опции предполагают, что принтер подключен через сеть одним из следующих способов:

UNIX Printer (Ipd Queue) (UNIX-принтер).

Если устанавливаемый принтер подключен в сети к компьютеру, управляемому системой Unix или Linux, и ваш компьютер использует протокол Network File System (NFS) для связи с ним, то вам нужна именно эта опция. Вам потребуется имя принт-серверного компьютера и имя очереди подключаемого принтера на нем.

Windows Printer (SMB Share) (Windows-принтер).

Если устанавливаемый принтер подключен в сети к компьютеру, управляемому системой Microsoft Windows, или системой Linux и/или Unix с использованием Samba, то вам следует выбрать эту опцию для установки принтера. Вам потребуется имя, используемое для доступа к принтеру, и IP-адрес, назначенный компьютеру, к которому подключен принтер. Для получения доступа к принтеру вам, в зависимости от способа организации сетевого доступа, может потребоваться имя рабочей группы Windows, имя пользователя и/или пароль.

Совет

Имя, используемое для доступа к принтеру, состоит из полного пути принтера, подключенного к компьютеру, управляемому Microsoft Windows. Например, если имя Windows-компьютера Mswi.nl, а имя, используемое для доступа к принтеру HPLaser j, то необходимое вам имя будет выглядеть так / /MSWinl/HPLaser J.

Novell Printer (NCP




Queue) (Novell -принтер).

Если в вашей сети для связи используется какая-либо разновидность протокола Novell Network, то опция NCP queue вполне вам подходит. Для принтера, подключенного этим способом, необходимо задать имя принт-серверного компьютера, имя очереди на нем, а также имя пользователя и пароль.



JetDirect Printer (JetDirect-принтер).



Опция JetDirect Printer предназначена для HP и HP-совместимых принтеров, подключенных непосредственно к сети, без прямого подключения к одному из компьютеров сети. Вам потребуется IP-адрес принтера и номер порта, если он отличается от используемого по умолчанию номера 9100,

После установки -принтерной очереди можно приступать к выбору принтерного устройства. В Red Hat Linux 7.1 для принтеров, подключенных к параллельным и USB-портам доступен ряд устройств, включая /dev/lp0, /dev/lpl и /dev/lp2 для стандартных LPT-принтеров, и от /dev/usb/lpO до /dev/usb/lpl5 для USB-принтеров.


Выход и сохранение результатов


Завершив все конфигурационные операции в LinuxConf, необходимо выйти из этой программы, активизировав изменения конфигурационных параметров. Для этого выберите команду File/Act|Changes (Файл/Активизировать изменения). Если потребуются дополнительные изменения, то появится окно подтверждения, подобное изображенному на рис. 15.16. В этом окне указано, что необходимо сделать для сохранения внесенных изменений в системных файлах Linux.

Рис. 15.16.

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

Задействовать внесенные изменения кнопкой Do It.

Отменить выход из LinuxConf щелчком на кнопке Do Nothing (He выходить). Теперь выйдите из программы LinuxConf, выполнив команду File/Quit (Файл/Выход).



Запуск программы LinuxConf


Начиная с Red Hat Linux 7.1, Linuxconf больше не устанавливается по умолчанию. Фактически, соответствующие rpm-пакеты даже не включены в CD-ROM, поставляемый с книгой. Но если вы располагаете полным дистрибутивом на двух или более CD-ROM, можете установить пакет Linuxconf, linuxconf-1.24r2-10.1386. rpm со второго дистрибутивного диска CD-ROM.

В некоторых из конфигураций CD-ROM может монтироваться автоматически после установки компакт-диска в привод. Чтобы проверить, так ли эти, наберите команду mount. Если в ответ вы получаете что-либо наподобие следующей строки, то CD-ROM уже смонтирован:

/dev/hdb on /mnt/cdrom type iso9660

Если необходимо, смонтируйте CD-ROM в каталоге /mnt/cdrom. Выполнив монтирование, можно установить Linuxconf с помощью следующих команд:

$ rpm -I /mnt/cdrom/RedHat/RPMS/linuxconf-1.24r2-10.1386.rpm

$ rpm -i /mnt/cdrom/RedHat/RPMS/gnome-linuxconf-0.64-1.1386.rpm

Примечание

Если второй дистрибутивный диск Red Hat Linux 7.1 вам недоступен, можно загрузить эти пакеты из Интернета, например, с узлов ftp. redhat. com или www. rpmfind. net.

После установки Linuxconf можно запустить эту утилиту из командной строки, введя следующую команду в ответ на подсказку в окне xterm:

$ linuxconf-auth

Если вы не корневой пользователь, Red Hat Linux 7.1 выдаст запрос пароля корневого пользователя перед запуском Linuxconf.

После запуска Linuxconf на экране появляется окно, подобное показанному на рис. 15.6.

Рис. 15.6.

Окно утилиты Linuxconf

Примечание

При первом запуске утилиты Linuxconf, появляется окно приветствия. Для перехода к работе с Linuxconf следует нажать Quit (Выход), как это ни странно звучит.

Утилиту Linuxconf можно использовать для управления многими параметрами Linux, включая сетевую конфигурацию и контроль пользователей и групп. Эти и другие секции можно выбрать в окне Linuxconf из иерархии параметров, расположенной в центре окна. Эта иерархия представлена в виде дерева, отдельные ветви которого можно разворачивать/сворачивать, подобно тому, как вы разворачиваете/сворачиваете папки в Проводнике Windows 98/Ме и NT/2000.



Алиас команды


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

$ ps -aux | more

Чтобы не набирать каждый раз довольно длинную команду, можно определить ее алиас. Допустим, мы ходим создать алиас с именем psa для проверки всех выполняемых процессов. Это можно сделать командой

$ alias psa="ps aux | more"

После этого ввод в командной строке Bash команды psa будет аналогичен вводу ps aux | more. Алиас остается в памяти до конца текущего сеанса оболочки Bash. После выхода из оболочки все алиасы теряются.

Чтобы алиасы не утрачивались с окончанием сеансов, их следует определять в файле . bashrc, аналогично тому, как ранее мы устанавливали текстовый редактор по умолчанию emacs.

Применение алиасов позволяет не только облегчить работу с командной строкой, но и избежать множества опасных ошибок. Например, если войти в систему как корневой пользователь, становятся опасными самые простые операции копирования, перемещения или удаления файлов и каталогов. Любая ошибка может привести к удалению файлов, каталогов и даже файловых систем, причем виновник может этого не заметить. Поэтому в оболочке Bash учетная запись корневого пользователя конфигурирована с установкой по умолчанию следующих алиасов.

alias cp='cp -i' alias mv='mv -i' alias rm='rm -i

1

Флажок -i указывает на необходимость подтверждения удаления или перезаписи файлов во всех трех операциях. Отменить действие флажка - i можно только установкой другого флажха i например, rm - f ).



Bourne Again Shell (bash)


Это оболочка, устанавливаемая в дистрибутивах Linux чаще других. Известная как Bash, она является производной от Bourne Shell (что следует из названия), но имеет дополнительные функции: редактирование командной строки, хронологический список и дополнение частично введенных имен файлов. В Bash можно писать сложные сценарии на синтаксисе, близком к синтаксису Bourne Shell. Поскольку в настоящее время Bash - наиболее распространенная оболочка Linux, большая часть главы посвящена именно ей. Она же подразумевается во всех примерах, приводимых в книге.



Bourne Shell (sh)


Bourne Shell (sh) считается исходной оболочкой Unix. Во многих отношениях эта довольно ограниченная оболочка, в которой недостает таких средств, как хронологический список или редактирование командной строки. Но многие средства Bourne Shell, именно как исходной версии, входят в ряд современных оболочек. Пример - основной набор команд. В современных системах Bourne Shell, как оболочка по умолчанию, применяется редко. В большинстве дистрибутивов Linux установлены Bourne Again Shell или Enhanced С Shell.

Оболочка Bourne Shell - источник множества концептуальных новшеств: например, проверки успешного или аварийного завершения работы программ, что позволяет писать сложные сценарии. Теперь это средство - стандарт оболочек Unix.



Дополнение частично введенных имен


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

$ /usr/lo

В большинстве систем этого достаточно для идентификации единственного объекта - каталога /usr/local/. Нажмите клавишу Tab, и Bash попытается дополнить недостающую часть имени. Если существует единственный объект (файл, каталог или команда) с именем, начинающимся с /usr/lo, то Bash дополнит это имя. В нашем случае до /usr/local/.

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

$ /usr/1

это может соответствовать /usr/local/ или /usr/lib/. Если нажать клавишу Tab, оболочка Bash будет не в состоянии выбрать единственный вариант и выдаст список всех возможных.

lib local

Пользователь может набрать еще несколько символов и снова нажать Tab. В данном примере достаточно набрать "о". После нажатия клавиши Tab Bash дополнит имя до /usr/local / .

Вероятно, вам не дает покоя вопрос: что произойдет, если набрать неполное имя файла, находящегося в локальном каталоге или любом другом, включенном в путь по умолчанию, без указания полного пути? Сможет ли Bash дополнить его? Ответ - да. При дополнении имени файла или каталога, указанных без полного пути, как в команде

Bash проводит поиск имен, совпадающих с введенной частью строки, в каталогах, указанных в пути по умолчанию. В большинстве систем для дополнения указанной команды найдется лишь несколько имен, в том числе grep и groff , так что предложенный список возможных вариантов будет выглядеть примерно так:

grep groff grotty

Чтобы выбрать команду grep, достаточно набрать букву "е" и нажать Tab.



Другие оболочки


Существует множество других оболочек, каждая из которых обеспечивает интерфейс командной строки, обладающий уникальными свойствами. Но ни одна из них не завоевала достаточной популярности, чтобы быть включенной в большинство дистрибутивов Linux. Среди них можно упомянуть Adventure Shell (ash), представляющую подмножество Bourne Shell, полностью перепрограммируемую Extensible Shell (es), эргономичную ERGO Shell (esh), Z Shell (zsh), объединившую, подобно оболочке Bash, функции многих оболочек, что, в конце концов, привело к некоторому подобию Korn Shell.

Совет

Превосходным источником альтернативных оболочек для системы Linux служит архив Linux SunSite с каталогом оболочек

ftp://metalab.unc.edu/pub/Linux/system/sheiIs

.

Здесь можно найти все распространенные оболочки, а также и малоизвестные ish, pash или pdksh.



Хронологический список


Идея, положенная в основу этого средства, крайне проста. После ввода каждой команды (после нажатия Enter, а не Ctrl+C), последняя заносится в список, из которого команды можно извлекать в порядке, обратном вводу.

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

Рассмотрим первое. Предположим, вы предприняли попытку просмотреть содержимое файла testf ile, для чего ввели команду

$ moer testfile

После нажатия Enter, на экране появится сообщение об ошибке.

bash: moer: command not found.

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

Другая ситуация - конфигурирование некоторой программы. При этом обычно приходится несколько раз подряд редактировать конфигурационный файл и запускать программу. А для таких повторов нет средства лучше хронологического списка.

Существует быстрый способ доступа к хронологическому списку - при помощи восклицательного знака (!). Если ввести восклицательный знак с несколькими следующими за ним начальными буквами одной из команд из хронологического списка, то эта команда будет выполнена (будет повторено последнее обращение к ней).

Например, если ранее была выполнена команда

$ ps aux | grep httpd | more

ее выполнение можно повторять вводом

$ !ps

если только после нее не вводилась другая команда, начинавшаяся с "ps". После ввода ! ps выполняется последняя команда из хронологического списка, начинающаяся с "ps".

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

Из перечисленных комбинаций наиболее интересна Ctrl+R. Это динамичный, интерактивный обратный поиск в списке. По мере набора строки Bash ищет в хронологическом списке команду с совпадающим фрагментом, введенную последней. Чем длиннее набранная строка, тем меньше область поиска нужной команды.


Предположим, необходимо ввести уже вводившуюся сложную поисковую команду. Включите режим поиска, нажав Ctrl+R. На экране появится строка интерактивного поиска.

(reverse-i-search)' ':



Табл. 16.2.

Функциональные комбинации клавиш для хронологического списка



Комбинация клавиш



Функция

Ctrl+P Ctrl+N Esc,

<

Esc,>

Ctrl+R

Ctrl+O

Переход к предыдущей команде в хронологическом списке

Переход к следующей команде в хронологическом списке

Переход к началу хронологического списка (команде, введенной первой) Переход в конец хронологического списка (к команде, введенной последней) Поиск по списку в обратном направлении Выполнение текущей команды хронологического списка и вывод

(

следующей для редактирования или выполнения

По мере набора символов в этой строке Bash отыскивает в хронологическом списке команду с совпадающим фрагментом, введенную последней. Например, набор одной буквы "f" может дать следующий результат.

(reverse-i-search)`f: pico info/.signature

Если продолжить и набрать "fi", можно получить

(reverse-i-search)`fi': rm -rf StarOffice-3.1

Наконец, после набора

"fin",



получаем то, что искали:

(reverse-i-search)`fin': find / -name 'foo' -print

Для ввода найденной команды достаточно нажать Enter.






Эксперименты с различными оболочками


Вероятно, вам уже интересно, как опробовать все эти оболочки, не устанавливая каждую по умолчанию. Оболочка запускается как обычная программа в среде оболочки по умолчанию. Например, Enhanced С Shell устанавливается при установке системы, но по умолчанию всеми пользователями используется Bash. Чтобы запустить Enhanced С Shell, введите следующую команду.

$ tcsh

В этой команде подразумевается, что программа tcsh находится в одном из каталогов пути по умолчанию, в противном случае придется указывать путь к оболочке, например /bin/ tcsh. После ввода команды запускается оболочка Enhanced С Shell, и работа продолжается уже в среде ее командной строки. Возврат в оболочку по умолчанию происходит после ввода команды exit.

В большинстве систем Linux есть.символическая ссылка /bin/sh на /bin/tcsh, так что оболочку Enhanced С Shell можно запустить следующей командой.

$ csh

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

Представьте ситуацию, в которой пользователь someuser работает с установленной по умолчанию оболочкой /bin/bash (Bourne Again Shell). Соответствующая запись в файле паролей имеет примерно следующий вид.

someuser::790:103:Some User:/home/someuser:/bin/bash

В ее конце указана оболочка по умолчанию /bin/bash. После ввода команды

$ chsh

-a

/bin/tcsh someuser

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

someuser::790:103:Some User:/home/someuser:/bin/tcsh

При следующем входе в систему вместо оболочки Bourne Again Shell будет запущена Enhanced С Shell.



Коm Shell (ksh)


Еще одна оболочка, производная от Bourne Shell. По некоторым оценкам, это наиболее популярная оболочка Unix, но в дистрибутивах Linux она редко устанавливается по умолчанию. Оболочка Korn Shell была, вероятно, одной из первых, в которой впервые появилось множество популярных функций, реализованных в настоящее время в Bash, в том числе редактирование командной строки. Она же помогла перенести в мир Bourne Shell многие функции, введенные в С Shell.



Оболочка Bash


Рассмотрим наиболее популярную оболочку Linux - Bash. Для понимания ее места в мире Linux важно понять сам процесс входа в систему. В результате ввода имени и пароля пользователя происходит несколько важных процессов. Прежде всего, запуск оболочки (в нашем случае Bash), затем - считывание конфигурационного файла, созданного для создания собственной среды Bash.

Чтобы обеспечить персонифицированную конфигурацию Bash, необходимо создать в исходном каталоге файл с именем .bashrc. Это простейший текстовый файл, выполняемый оболочкой Bash при ее запуске (обычно при входе в систему).

Примечание

В Red Hat Linux 7.1 параметры персонифицированной конфигурации входят также в состав файла .bash_prof lie, который хранится в исходном каталоге пользователя.

Файл . bashrc может содержать любой разрешенный набор команд и функций оболочки Bash, которые можно вводить в командной строке, а также сложные команды, применяемые в сценариях.

Именно в файле .bashrc конфигурируются параметры оболочки, устанавливаются переменные среды (например, путь по умолчанию) и запускаются программы, предназначенные для автоматического запуска с оболочкой Bash. Ниже приведены команды, образующие простой файл . bashrc, который задает оригинальную подсказку командной строки, устанавливает алиас команды с именем which и некоторые переменные среды.

PS1=" [\u@\h \W]\\$ " alias which="type -path" export PATH=$PATH:.:~/bin export EDITOR=emacs

В этом простом примере задействованы несколько важных функций оболочки Bash.

Установка переменных среды.

Алиасы команд.

Подстановочные символы.

Все это мы рассмотрим в оставшейся части главы вместе со следующими функциями оболочки Bash.

Переадресация ввода и вывода.

Дополнение частично введенных имен.

Полный набор функций редактирования командной строки.

Хронологический список.

Управление заданиями.



Обзор оболочек


Оболочка ранних версий Unix была довольно примитивной, без хронологического списка, средств редактирования командной строки и управления заданиями. Однако в семидесятые годы, с появлением Bourne Shell и С Shell, оболочки стали превращаться в объекты серьезного внимания в мире Unix. Сейчас пользователям Unix предлагается на выбор множество оболочек, каждая из которых имеет уникальный набор средств.

Существует два основных семейства оболочек. Одно из них берет начало от оболочки Bourne Shell, другое - от С Shell. Прежде чем приступить к основательному изучению оболочки Bourne Again Shell, устанавливаемой по умолчанию в большинстве дистрибутивов Linux, рассмотрим основные оболочки Unix.

Совет

Чтобы быть в курсе новейших разработок в области оболочек Unix, подпишитесь на группу новостей сотр.unix.shell.



Переадресация ввода и вывода


Одна из наиболее полезных концепций в мире Unix - стандартный ввод/вывод. Невзаимодействующие программы могут получать данные от стандартного устройства ввода, как правило, клавиатуры. Результаты выводятся на стандартное устройство вывода (обычно, это экран). ,

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

$ ls -1 | more

результаты выполнения команды Is -1 направляются не на стандартное устройство вывода, а на стандартный ввод команды more.

Другой способ переадресации стандартного ввода/вывода в оболочке Bash - при помощи символов переадресации "<" и ">". Рассмотрим ситуацию, когда надо записать в файл список содержимого каталога. Для этого можно воспользоваться следующей командой.

$ ls -1 > filelist

По этой команде стандартный вывод команды Is -1 будет переадресован в файл с именем filelist. В следующей команде происходит переадресация ввода.

$ mail user@juxta.com < filelist

Здесь файл filelist используется в качестве стандартного устройства ввода для команды mail, образуя текст сообщения электронной почты.



Подстановочные символы


Одно из мощных средств современных оболочек (в том числе Bash) - подстановочные символы, позволяющие задавать несколько имен команд или файлов в одном выражении. Рассмотрим простой пример. Если ввести команду,

$ ls -1

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

$ Is -1 z*

в которой аргумент z * означает все файлы, имена которых начинаются на букву "z". Пользователям

DOS

или Windows такое применение звездочки, вероятно, знакомо. После ввода команды оболочка Bash составляет список всех файлов, имена которых начинаются на "z" и заменяет аргумент z * этим списком. Имена файлов из списка передаются в качестве аргументов команде Is -1. В оболочке Bash возможности подстановочного символа "*" значительно шире, чем в DOS или окне DOS системы Windows.

Подстановочные символы в обозначении каталогов и файлов

Одно из применений

подстановочных символов -

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

Табл. 16.3.

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

Символ

Описание

?

[...]

[A-F]

[

..

.] или [!...]

[

A

A-F] или [IA-F]

Любой единичный символ

Любой единичный символ, заключенный в скобки

Любой единичный символ, попадающий в указанный диапазон

Любой единичный символ, кроме заключенных в скобки

Любой единичный символ, не попадающий в указанный диапазон

Рассмотрим несколько примеров.

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

$ Is -1 a?z

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


$ Is -I a*z

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

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

$ Is -1 а* Ь* с* d*

Однако такая форма несколько громоздка. Гораздо удобнее воспользоваться следующей: $ Is -I [abed]*

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

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

$ Is -I [a-d]*

Наконец, иногда необходимо исключить один или несколько символов, включив все остальные, Рассмотрим создание сжатого архива всех исходных каталогов системы. Предположим, нужно архивировать все каталоги кроме тех, имена которых начинаются с буквы "m". Для этого можно воспользоваться командой,

$ tar czvf home.tar.gz /home/[a-1]* /home/[n-z]*

но гораздо удобнее следующая форма этой же команды:

$ tar czvf home.tar.gz /home/[!m]*

Здесь выражение в квадратных скобках обозначает любой символ, кроме буквы "m".

Можно усложнить задачу, исключив архивирование каталогов, имена которых начинаются с букв m, n или о. Соответствующая команда будет иметь вид



$ tar czvf home.tar.gz /home/[^mno]*



или



$ tar czvf home.tar.gz /home/[!m-o]*



Фигурные скобки

Подстановочные символы в

фигурных скобках

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

$ mkdir testdir{1,2,3,4}

По этой команде создаются четыре каталога с именами testdirl, testdir2, testdir3 и testdir4.

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



$ mkdir testdir{01,02,03,04}

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

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

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



$ mkdir newdir/{firstdir,firstdir/'dir<01,02}}



По этой команде создаются следующие кащлоги.

firstdir

firstdir/dir0l

firstdir/dir02

В приведенной команде выражение {01,02} вложено в другое выражение в фигурных скобках.

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



$ chmod 644 testfile.{tx?,bak,0[0-9]}



происходит изменение разрешений доступа к серии файлов, в том числе ко всем файлам, соответствующим выражениям testfile. tx?, testfile.bak и от testfile.00 до testfile.09.



Подстановка команд

Еще один вариант применения подстановочных символов -

подстановка команд,

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

Для примера, рассмотрим ситуацию, в которой необходимо сжать все файлы с расширением . bak. Список этих файлов можно получить, введя команду



$ find / -name '*.bak' -print



Этой же командой с флажком exec можно воспользоваться для сжатия всех файлов.



$ find / -name '*.bak

r

-exec gzip {} \;



Другой вариант - подстановка команды, как в следующем примере.



$ gzip "find / -name '*.bak' -print"



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

Существует альтернативная форма этой конструкции - без обратных кавычек:



$ gzip $(find / -name \*.bak -print)



Основное различие между двумя конструкциями - смысл обратной косой (\) в первой из них. Этот смысл сохраняется, если не указаны символы "$","'" или "\".



Примечание

Приведенный перечень подстановочных символов оболочки Bash не полон. Полный список, наряду с подробным описанием, можно найти на странице руководства Bash. Однако и то, что мы описали, рбеспечивает немалые возможности. Если вам понадобятся дополнительные средства- связанные с подстановочными символами, обратитесь к странице руководства, воспользовавшись командой man bash.


Редактирование командной строки


Одна из возможностей Bash, отсутствовавшая в более ранних оболочках (Bourne Shell или С Shell) - редактирование командной строки. Без этого допущенную в наборе команды ошибку можно было исправить, только удалив все символы после нее. Например, если в команде

$ /usr/kocal/bin/mycommand

ошибочно набрано "kocal" вместо "local", то вернуть курсор к "k" можно только удалив все последующие символы, которые придется набрать вновь после исправления ошибки. Надо ли объяснять, насколько это неэффективно!

В современных оболочках, в том числе и Bash, предусмотрен полный набор средств редактирования командной строки. Курсор можно перемещать по строке при помощи клавиш со стрелками, при необходимости удаляя или вставляя символы. Ввод команды нажатием клавиши Enter можно выполнять, не перемещая курсор в конец строки. По умолчанию, командная строка Bash находится в режиме вставки, так что набираемые символы не замещают существующие, а вставляются между ними.

Чтобы ускорить редактирование командной строки, особенно при наборе длинных команд, в Bash предусмотрено несколько функциональных комбинаций клавиш, перечисленных в табл. 16.1.

Табл. 16.1.

Функциональные комбинации клавиш для редактирования командной строки

Комбинация клавиш

Функция

Ctrl+A

Переход в начало строки

Ctrl+E

Переход в конец строки

Ctrl+B

Переход на один символ влево

Ctrl+F

Переход на один символ вправо

Esc, В

Переход на одно слово влево

Esc,F

Переход на одно слово вправо

Ctrl+L

Очистка экрана с выводом командной строки вверху

Ctrl+D

Удаление символа в текущей позиции курсора

Backspace

Удаление символа слева от курсора

Ctrl+T

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

Esc, Т

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

Esc, U

Перевод текущего слова в верхний регистр

Esc.L

Перевод текущего слова в нижний регистр

Esc, С

Перевод текущего слова в нижний регистр с заглавной первой буквой

Ctrl+K

Удаление символов от позиции курсора до конца строки

Тот, кто работает в редакторе emacs, сразу обратит внимание, что в приведенной таблице перечислены функциональные комбинации клавиш именно этого редактора. Действительно, набор функциональных клавиш оболочки Bash позаимствован из emacs. Можно установить альтернативный набор из редактора vi, но последний, как и его набор функциональных клавиш, менее популярен среди программистов и опытных системных администраторов, поэтому в данной книге не рассматривается.

Список команд из табл. 16.1 - лишь незначительная часть всех команд редактирования, предоставляемых оболочкой Bash. Однако это основные функции, необходимые большинству пользователей для эффективной работы. Более подробный список функций редактирования можно найти в разделе HEADLINE страницы руководства оболочки Bash, для вывода которой необходимо ввести в командной строке man bash.



С Shell (csh)


С Shell (csh) - ранняя оболочка Unix с набором команд и языком сценариев на основе синтаксиса популярного языка программирования С. Как и в ранней Bourne Shell, в С Shell отсутствуют некоторые важные функции, наподобие редактирования командной строки. Однако в этой оболочке впервые реализовано несколько важных идей, например, алиасы команд и хронологические списки. Усовершенствованный вариант Enhanced С Shell (tcsh) с редактированием командной строки и другими функциями, позаимствованными из Bash, входит в большинство дистрибутивов Linux как альтернативная оболочка.

Оболочка С Shell известна рядом концептуальных нововведений, вошедших даже в оболочки, производные от Bourne Shell. Среди прочих, идея реализации в оболочке некоторых арифметических функций и сравнительной проверки. В Bourne Shell для этого требовалось обращение к внешним программам.



Установка переменных среды в Bash


У каждой оболочки свой синтаксис установки переменных среды. Обычно в Bash это выполняется в два этапа: присвоение переменной значения и экспорт переменной в среду. Например, чтобы задать по умолчанию текстовый редактор emacs, можно присвоить переменной среды EDITOR значение emac s:

$ EDITOR=emacs

затем экспортировать ее следующей командой.

$ export EDITOR

Обе команды можно объединить в одну.

$ export EDITOR=emacs

При рассмотрении подстановочных символов мы покажем, что на значение переменной среды можно сослаться, указав символ "$" как префикс имени этой переменной в командной строке Bash. Так можно дополнять значение переменной среды. Например, если переменная пути по умолчанию PATH равна

/bin:/usr/bin:/usr/X11R6/bin

к ней можно добавить составляющую /usr / local/bin, введя следующую команду.

$ export PATH=$PATH:/usr/local/bin

В этой команде текущее значение переменной PATH представлено выражением $РАТН. Новое значение переменной следующее:

/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin



Введение в оболочки


Обзор оболочек

Оболочка Bash

После изучения основных команд Unix, полезно освоить среду командной строки, в которой эти команды используются, -

оболочку.

Оболочка аналогична окну DOS в системе Windows 3.1 или Windows 98, в котором можно вводить команды, запускать программы и выполнять операции с файлами.

В отличие от окон DOS, представляющих собой среду с ограниченной гибкостью, оболочки Unix - это небольшие программы, запускаемые как процессы при входе в систему и обеспечивающие богатый набор средств в соответствии с потребностями различных пользователей и программ.

В мире Unix - следовательно, и Linux - большой выбор оболочек, каждая из которых имеет собственный набор средств и возможностей, зачастую и собственный язык сценариев для создания сложных, самостоятельно выполняемых, программ, аналогичных bat-файлам DOS (с привычным расширением . ВАТ), но более мощным. »

В начале главы дан обзор основных оболочек Unix, в том числе Bourne Shell, С Shell и Korn Shell, затем мы перейдем к углубленному изучению оболочки Bourne Again Shell, известной как Bash, устанавливаемой по умолчанию в большинстве дистрибутивов Linux.