Вместо «текущий каталог в настоящий момент соответствует такому-то» часто говорят «оболочка (или даже пользователь) находится в таком-то каталоге», а вместо «сменить текущий каталог на такой-то» – «перейти в такой-то каталог».
Подавая команду перехода в каталог, Алиса использовала его относительное имя, совпадающее в данным случае с его кратким именем. Но она могла указать и его полное имя.
Вернуться обратно (т.е. сменить текущий каталог снова на «/home/alice/») она может, указав его полное имя. На самом деле, есть способ проще. «Подняться» на одну ступень по иерархии каталогов можно, использовав специальное имя каталога «..», содержащееся в любом каталоге. Выше Алиса не видела его в списках файлов, выводившихся по команде «ls», поскольку это имя начинается с точки и, соответственно, файл является «скрытым». Увидеть имена скрытых (наряду с прочими) файлов можно командой «ls -a» (Рис. 1-17).
В данном случае «пустой» каталог содержит два файла-каталога «.» и «..», первый из которых является самим каталогом, в котором он содержится, а второй – каталогом на ступень выше в иерархии. Обратите внимание, что два ключа (например, «-a» и «-l») можно указать и в сокращенной форме – дефис и следующие за ним буквы ключей без пробела (в данном случае, «-al»).
И, наконец, перейти в домашний каталог из любой вершины в файловой структуре можно командой «cd» без параметров.
Копирование, перемещение, переименование файлов
Командой «cp» можно скопировать файлы, командой «mv» – переименовать (переместить) их. Обе эти команды имеют два отличающихся по семантике варианта.
1) Если последним операндом является имя существующего каталога, то файлы, имена которых указаны в качестве предшествующих операндов, копируются или перемещаются в этот каталог.
2) Если последним операндом является имя обычного файла, то файл, имя которого указано в качестве предшествовавшего операнда, копируется или переименовывается в этот файл.
Указание в этих командах единственного операнда, а также указание более двух операндов в случае, если последний из них не является именем существующего каталога – ошибка.
Приведенный на Рис. 1-18 пример демонстрирует действие команд «cp» и «mv».
Чтобы избежать случайного удаления файлов в случае, если при копировании или перемещении файлов имена копируемых или переименовываемых файлов совпадают с именами существующих, можно использовать ключ «-i» (Рис. 1-19).
Генерация имен файлов
В качестве операндов чаще всего выступают имена файлов, и во многих случаях операцию желательно выполнить не над одним, а над целым списком файлов. Стандартная оболочка реализует особый механизм для указания списков имен файлов, если эти имена формально-синтаксически схожи (начинаются с одной буквы, заканчиваются одним расширением и т.п.). Этот механизм называется «глоббингом», генерацией имен файлов или раскрытием метасимволов в именах. Он заимствован и многими альтернативными системами, но в отличие от большинства из них, в открытых системах раскрытие метасимвола осуществляется оболочкой, а не командой.
Вопросительный знак («?») соответствует любому одному символу в имени файла. Если у нас в каталоге присутствуют файлы «a1», «a2», «a3», «b1», «b2», «b3», «aa1», шаблон имени (метаимя) «a?» раскроется в список «a1 a2 a3», а шаблон «?1» – в «a1 b1».
Звездочка (астериск, «*») соответствует последовательности из нуля или большего количества любых символов. В том же каталоге «a*» раскроется в список «a1 a2 a3 aa1», а «*1» – в «a1 b1 aa1».
Метаконструкция из последовательности символов, заключенных в квадратные скобки («[» и «]»), соответствует любому одному символу из этой последовательности. В том же каталоге «[abc]2» раскроется в список «a2 b2».
В квадратных скобках могут содержаться диапазоны, разделенные дефисом («-»). Они означают любой символ, входящий в этот диапазон с учетом алфавитного порядка следования символов. В нашем каталоге «[a-c]3» раскроется в «a3 b3».
Список может быть предварен знаком отрицания (сиркумфлекс, «^»), в этом случае он означает любой символ, не входящий в список. Если в шаблон нужно буквально включить символ «-», его следует поставить на первое или последнее место, а «^» – на любое место, кроме первого.
Конструкция в квадратных скобках может быть сколь угодно сложной (например, «[a-ckw-z]» означает «любой символ с “a” по “c”, или “k”, или с “w” по “z”»), и она всегда соответствует одному символу в раскрываемых именах.
Вопросительные знаки, звездочки и квадратно-скобочные конструкции могут произвольно сочетаться. Список всегда раскрывается в алфавитном порядке.
В примере на Рис. 1-20 Алиса создает каталог с перечисленными выше файлами и получает списки файлов, соответствующих некоторым из перечисленных шаблонов.
Еще одним полезным метасимволом является тильда («~»), выступающая в качестве такового только в случае, когда стоит первой в аргументе. Отдельная тильда раскрывается в полное имя домашнего каталога текущего пользователя. Тильда, за которой следует (без пробела) регистрационное имя пользователя, раскрывается в полное имя его домашнего каталога. Если оболочке не удается раскрыть метасимвол, он передается команде в буквальном виде (Рис. 1-21).
Экранирование специальных символов
Специальное значение символов «?», «*», «[», «]», «~» при указании имен файлов и является причиной, по которой их (а также другие символы, имеющие специальное значение для оболочки) не рекомендуется вводить в имена файлов. Однако пользователь может столкнуться с ситуацией, в которой ему все же нужно выполнить некоторые действия с файлом, чье имя содержит такие символы.
Алиса перенесла в каталог «Старые_файлы/» файл «Домашняя страница[13].htm» из системы, которой ранее пользовалась.