4. Операции с файлами и каталогами
Теперь мы готовы приступить к настоящей работе! В этой главе будут представлены следующие команды:
• cp — копирует файлы и каталоги.
• mv — перемещает/переименовывает файлы и каталоги.
• mkdir — создает каталоги.
• rm — удаляет файлы и каталоги.
• ln — создает жесткие и символические ссылки.
Эти пять команд относятся к числу наиболее часто используемых в Linux. Они применяются для управления файлами и каталогами.
Справедливости ради следует заметить, что некоторые задачи, выполняемые этими командами, гораздо проще решаются с помощью графического диспетчера файлов. В диспетчере файлов можно мышью перетаскивать файлы из одного каталога в другой, вырезать и вставлять файлы, удалять файлы и т.д. Но зачем тогда использовать эти старые программы командной строки?
Ответ прост: потому что они обладают мощностью и гибкостью. Несмотря на то что простые операции с файлами легко выполняются в диспетчере файлов с графическим интерфейсом, сложные задачи проще решать с помощью программ командной строки. Например, как скопировать файлы 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:]]*
|
Все имена файлов, не начинающиеся с цифры
|
Читать дальше