Выбрать главу

$ touch file

Теперь примените к этому файлу команду ls -l. Вы должны увидеть результат, подобный приведенному ниже. Символом отмечены дата и время запуска команды touch:

$ ls -l file

-rw-r—r— 1 juser users 0 May 21 18:32 file

2.3.5. Команда rm

Чтобы удалить файл, воспользуйтесь командой rm (от англ. remove — «удалить»). После удаления файла он исчезает из системы и, как правило, не может быть восстановлен.

$ rm file

2.3.6. Команда echo

Команда echo выводит свои аргументы в стандартный вывод:

$ echo Hello again.

Hello again.

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

2.4. Перемещение по каталогам

Иерархия каталогов в системе Unix начинается с каталога /, который иногда называют корневым каталогом. Каталоги разделяются с помощью символа «слеш» (/), но не с помощью обратного слеша (\). В корневом каталоге присутствует несколько стандартных подкаталогов, например /usr, как вы узнаете из раздела 2.19.

Когда вы ссылаетесь на файл или каталог, вы указываете путь или имя пути. Когда путь начинается с символа / (например, /usr/lib), такой путь называется полным или абсолютным.

Часть пути, которая представлена двумя точками (..), указывает на родительский каталог по отношению к данному. Если, например, вы работаете в каталоге /usr/lib, то в этом случае путь .. будет означать /usr. Подобным же образом ../bin означает /usr/bin.

Одна точка (.) ссылается на текущий каталог. Если, например, вы сейчас в каталоге /usr/lib, то путь . по-прежнему означает /usr/lib, а путь ./X11 будет значить /usr/lib/X11. Вам не придется слишком часто применять точку, поскольку для большинства команд по умолчанию указан текущий каталог, если путь не начинается с символа / (в предыдущем примере вы могли бы использовать X11 вместо ./X11).

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

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

2.4.1. Команда cd

Текущий рабочий каталог — это каталог, в котором в данный момент находится процесс (например, оболочка). Команда cd изменяет текущий рабочий каталог оболочки:

$ cd dir

Если вы опустите параметр dir, оболочка вернет вас в домашний каталог, с которого вы начали работу при входе в систему.

2.4.2. Команда mkdir

Команда mkdir создает новый каталог с именем dir:

$ mkdir dir

2.4.3. Команда rmdir

Команда rmdir удаляет каталог с именем dir:

$ rmdir dir

Если каталог dir не пуст, эта команда не сработает. Чтобы удалить каталог со всем его содержимым, используйте команду rm -rf dir. Однако будьте осторожны! Это одна из немногих команд, которая может причинить существенный вред, особенно если вы работаете как superuser. Параметр –r задает рекурсивное удаление, которое последовательно удаляет все, что находится внутри каталога dir, а параметр -f делает эту операцию принудительной. Не используйте флаги -rf с такими джокерными символами, как звездочка (*). Перепроверяйте команды перед их запуском.

2.4.4. Универсализация файловых имен (джокерные символы)

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

$ echo *

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

• at* — развертывается во все имена файлов, которые начинаются с символов at;

• *at — развертывается во все имена файлов, которые заканчиваются символами at;

• *at* — развертывается во все имена файлов, которые содержат символы at.

Если ни один из файлов не удовлетворяет шаблону, оболочка не выполняет развертывание и вместо него буквально использует указанные символы, в том числе и *. Попробуйте, например, набрать такую команду, как echo *dfkdsafh.

примечание

Если вы привыкли к работе в системе MS-DOS, то вы могли бы инстинктивно набрать символы *.*, которые подходят для всех файлов. Расстаньтесь теперь с этой привычкой. В системе Linux и других версиях системы Unix вы должны использовать символ *. В оболочке Unix комбинация *.* соответствует только тем файлам и каталогам, названия которых содержат точку. Для названий файлов в системе Unix расширения не являются обязательными, и файлы часто обходятся без них.

Еще один джокерный символ, вопросительный знак (?), указывает оболочке на то, что необходимо подставить только один произвольный символ. Например, комбинации b?at будут соответствовать имена boat и brat.

Если вы желаете, чтобы оболочка не развертывала джокерный символ в команде, заключите его в одиночные кавычки (' '). Так, например, команда '*' выдаст символ звездочки. Вы увидите, что это удобно применять в некоторых командах, например grep и find (они рассматриваются в следующем разделе, подробности об использовании кавычек вы узнаете из раздела 11.2).

примечание

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

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

2.5. Вспомогательные команды

В приведенных ниже разделах рассмотрены наиболее важные вспомогательные команды системы Unix.

2.5.1. Команда grep

Команда grep выдает строки из файла или входного потока, которые соответствуют какому-либо выражению. Например, чтобы напечатать строки из файла /etc/passwd, которые содержат текст root, введите следующее:

$ grep root /etc/passwd

Команда grep чрезвычайно удобна, когда приходится работать одновременно с множеством файлов, поскольку она выдает название файла в дополнение к найденной строке. Например, если вы желаете отыскать все файлы в каталоге /etc, которые содержат слово root, можно применить данную команду так:

$ grep root /etc/*

Двумя наиболее важными параметрами команды grep являются –i (для соответствий, нечувствительных к регистру символов) и –v (который инвертирует условие поиска, то есть выдает все строки, не отвечающие условию). Существует также более мощный вариант команды под названием egrep (это всего лишь синоним команды grep -E).