Ответ прост: потому что они обладают мощностью и гибкостью. Несмотря на то что простые операции с файлами легко выполняются в диспетчере файлов с графическим интерфейсом, сложные задачи проще решать с помощью программ командной строки. Например, как скопировать файлы HTML из одного каталога в другой, причем только те, что отсутствуют в каталоге назначения или имеют более позднюю дату последнего изменения? Сделать это в диспетчере файлов очень сложно, но легко в командной строке:
cp -u *.html destination
Групповые символы
Прежде чем приступать к использованию обсуждаемых команд, необходимо сначала поговорить об одной особенности командной оболочки, которая делает эти команды такими мощными. Так как имена файлов используются в командной оболочке повсеместно, она поддерживает специальные символы, помогающие быстро определять группы имен файлов. Эти специальные символы называют групповыми символами (wildcards). Групповые символы (также известны как символы подстановки (globbing)) позволяют выбирать имена файлов по шаблону. В табл. 4.1 перечислены групповые символы и их соответствия.
Таблица 4.1. Групповые символы
Групповой символ
Соответствует
*
Любая последовательность любых символов
?
Любой один символ
[символы]
Любой один символ из указанного множества символов
[!символы]
Любой один символ, не принадлежащий указанному множеству символов
[[:класс:]]
Любой один символ, принадлежащий указанному классу
В табл. 4.2 представлены наиболее часто используемые классы символов.
Таблица 4.2. Наиболее часто используемые классы символов
Класс символов
Соответствует
[:alnum:]
Любой алфавитно-цифровой символ
[:alpha:]
Любой алфавитный символ
[:digit:]
Любой цифровой символ
[:lower:]
Любая буква в нижнем регистре
[:upper:]
Любая буква в верхнем регистре
диапазоны символов
Если у вас уже есть опыт работы с другим Unix-подобным окружением или вам приходилось читать другие книги по этой теме, вы встречали форму записи диапазонов символов [A-Z] или [a-z]. Это традиционные для Unix формы записи, и они прекрасно работают в старых версиях Linux. Более того, они все еще работают в новых версиях, но будьте очень осторожны при их использовании, потому что они не всегда дают ожидаемый результат без правильной настройки. А вообще, старайтесь избегать их и использовать классы символов.
Групповые символы позволяют конструировать сложные критерии выбора имен файлов. В табл. 4.3 перечислены некоторые примеры шаблонов и их соответствия.
Таблица 4.3. Примеры использования групповых символов
Шаблон
Соответствует
*
Все имена файлов
g*
Все имена файлов, начинающиеся с символа «g»
b*.txt
Все имена файлов, начинающиеся с символа «b», за которым следует любое число других символов, и заканчивающиеся на «.txt»
Data???
Все имена файлов, начинающиеся с символов «Data», за которыми следуют ровно три любых символа
[abc]*
Все имена файлов, начинающиеся с символа «a», «b» или «c»
BACKUP.[0-9][0-9][0-9]
Все имена файлов, начинающиеся с символов «BACKUP.», за которыми следуют ровно три цифровых символа
[[:upper:]]*
Все имена файлов, начинающиеся с буквы в верхнем регистре
[![:digit:]]*
Все имена файлов, не начинающиеся с цифры
*[[:lower:]123]
Все имена файлов, заканчивающиеся буквой в нижнем регистре или цифрой «1», «2» или «3»
Групповые символы можно использовать с любыми командами, принимающими имена файлов в виде аргументов, но подробнее об этом мы поговорим в главе 7.
групповые символы также действуют в графическом интерфейсе
Групповые символы имеют особую ценность не только потому, что часто используются в командной строке, но и потому, что поддерживаются некоторыми диспетчерами с графическим интерфейсом.
• В Nautilus (диспетчер файлов для GNOME) можно выбирать файлы с помощью диалога Edit (Правка) —> Select Pattern (Выделить по шаблону). Просто введите шаблон для выбора файлов с групповыми символами, и в текущем каталоге будут выделены файлы, соответствующие шаблону.
• В некоторых версиях Dolphin и Konqueror (диспетчеры файлов для KDE) групповые символы можно вводить непосредственно в адресную строку. Например, если понадобится увидеть все файлы с именами, начинающимися с буквы «u» в нижнем регистре, в каталоге /usr/bin, просто введите в адресной строке текст: /usr/bin/u*, и вы получите желаемый результат.
Большинство идей, первоначально реализованных в интерфейсе командной строки, перекочевали и в графический интерфейс. Это одно из множества обстоятельств, которые делают настольный компьютер с Linux таким мощным инструментом.
mkdir — создание каталогов
Команда mkdir используется для создания каталогов. Вызывается она следующим образом:
mkdir каталог...
Примечание к форме записи: В этой книге три точки в описании команды, следующие за аргументом (как в примере выше), говорят о том, что аргументов может быть несколько; то есть в данном случае команда
mkdir dir1
создаст один каталог с именем dir1, а команда
mkdir dir1 dir2 dir3
создаст три каталога с именами dir1, dir2 и dir3.
cp — копирование файлов и каталогов
Команда cp копирует файлы и каталоги. Ее можно использовать двумя разными способами:
cp item1 item2
чтобы скопировать один файл или каталог item1 в файл или каталог item2, и
cp элемент... каталог
чтобы скопировать несколько элементов (файлов или каталогов) в указанный каталог.
В табл. 4.4 и 4.5 перечислены некоторые параметры (короткие и эквивалентные им длинные), наиболее часто используемые с командой cp.
Таблица 4.4. Параметры команды cp
Параметр
Значение
-a, --archive
Скопировать файлы и каталоги со всеми атрибутами, включая идентификаторы владельцев и права доступа. Без этого параметра копии обычно получают значения атрибутов по умолчанию, определенных для пользователя, выполняющего копирование
-i, --interactive
Запрашивать у пользователя подтверждение перед перезаписью существующего файла. Если этот параметр отсут-
ствует, команда cp просто перезапишет существующие файлы
-r, --recursive
Рекурсивно копировать каталоги и их содержимое. Это обязательный параметр (или параметр -a) при копировании каталогов
-u, --update
При копировании файлов из одного каталога в другой копировать только файлы, отсутствующие в каталоге назначения или более новые
-v, --verbose
Выводить информационные сообщения в процессе копиро-
вания
Таблица 4.5. Примеры использования команды cp
Команда
Результат
cp file1 file2
Скопирует file1 в file2. Если file2 существует, он будет затерт новым файлом file1. Если file2 отсутствует, он будет создан
cp -i file1 file2
То же, что и выше, но если файл file2 существует, у пользователя будет запрошено подтверждение перед перезаписью файла
cp file1 file2 dir1
Скопирует file1 и file2 в каталог dir1. Каталог dir1 должен существовать
cp dir1/* dir2
С использованием группового символа. Скопирует все файлы из каталога dir1 в каталог dir2. Каталог dir2 должен существовать
cp -r dir1 dir2
Скопирует каталог dir1 (и все его содержимое) в каталог dir2. Если каталог dir2 не существует, он будет создан и заполнен содержимым каталога dir1
mv — перемещение и переименование файлов
Команда mv выполняет операции перемещения и переименования файлов в зависимости от особенностей использования. В любом случае исходный файл исчезает после операции. Команда mv используется почти так же, как команда cp:
mv item1 item2
перемещает или переименовывает файл или каталог item1 в item2.
mv элемент... каталог
перемещает один или более элементов из одного каталога в другой.
Команда mv поддерживает множество тех же параметров, что и команда cp, как показано в табл. 4.6 и 4.7.
Таблица 4.6. Параметры команды mv
Параметр
Значение
-i, --interactive
Запрашивать у пользователя подтверждение перед перезаписью существующего файла. Если этот параметр отсутствует, команда mv просто перезапишет существующие файлы