Материал предоставлен http://it.rfet.ru

Информация о каталоге

Чтобы иметь возможность ориентироваться в файловой системе, нужно знать, что содержится в каждом каталоге. Запомнить всю структуру файловой системы невозможно и не нужно: в любой момент можно просмотреть содержимое любого каталога при помощи утилиты ls (сокращение от англ. ”list” - ”список”):

[ivan@localhost ivan]$ ls
-filename-with- text
[ivan@localhost ivan]$

Пример 4.4. Команда ls

Поданная без параметров, команда ls выводит список файлов и каталогов, содержащихся в текущем каталоге. При помощи этой утилиты Иван обнаружил, что в его домашнем каталоге (который в данный момент является текущим) содержатся два файла, созданные в примере, приведенном в предыдущей лекции: ”-filename-with-” и ”text”.

Утилита ls принимает один параметр: имя каталога, содержимое которого нужно вывести. Имя может быть задано любым доступным способом: в виде полного или относительного пути. Например, чтобы получить список файлов в своем домашнем каталоге, Иван мог бы использовать команды ls /home/ivan и ls . - результат был бы аналогичным.

Кроме параметра, утилита ls ”понимает” множество ключей, которые нужны главным образом для того, чтобы выводить дополнительную информацию о файлах в каталоге или выводить список файлов выборочно. Чтобы узнать обо всех возможностях ls, нужно, конечно же, прочесть руководство по этой утилите (man ls).

Почитав руководство по ls, Иван решил изучить содержимое своей файловой системы и начал с корневого каталога:

[ivan@localhost ivan]$ ls -F /
bin/   dev/  home/  mnt/   root/  swap/  tmp/  var/
boot/  etc/  lib/   proc/  sbin/  sys/   usr/
[ivan@localhost ivan]$

Пример 4.5. Команда ls -F

Иван использовал ключ -F, чтобы отличать файлы от каталогов. При наличии этого ключа ls в конце имени каждого каталога ставит символ /, чтобы показать, что в нем может содержаться что-то еще. В выведенном списке нет ни одного файла - в корневом каталоге содержатся только подкаталоги.

Кроме того, Иван решил получить более подробную информацию о содержимом своего домашнего каталога:

[ivan@localhost ivan]$ ls -aF
-filename-with- .bash_history .bashrc .lpoptions
.rpmmacros  Documents/
./ 		.bash_logout  .emacs  .mutt/   .xemacs/   text
../ 		.bash_profile .i18n  .pinerc   .xsession.d/ tmp/
[ivan@localhost ivan]$

Пример 4.6. Команда ls -aF

Внезапно он обнаружил, что файлов в его домашнем каталоге не два, а гораздо больше. Дело в том, что утилита ls по умолчанию не выводит информацию об объектах, чье имя начинается с . - в том числе о . и ... Для того чтобы посмотреть полный список содержимого каталога, и используется ключ -a (all). Как правило, с . начинаются имена конфигурационных файлов и конфигурационных каталогов (вроде .bashrc, описанного в лекции 8), работа с которыми (т. е. настройка окружения, “рабочего места”) не пересекается с работой над какой-нибудь прикладной задачей (хотя, конечно, эффективность работы зависит от хорошо настроенного окружения). Кроме того, подобных файлов в домашнем каталоге активно работающего пользователя со временем заводится немало (по одному на каждую приличную утилиту) и их присутствие в выдаче ls сильно загромождает выводимые данные.

Разберемся подробно в списке файлов в домашнем каталоге Ивана. Начнем с весьма лаконичных имен . и ... Иван уже знает, что . - это имя текущего каталога. Следующее имя в списке, .. - это ссылка на родительский каталог. Родительский каталог — это тот каталог, в котором находится данный каталог . Родительским каталогом для /home/ivan будет каталог /home: он получается просто отбрасыванием последнего имени каталога в полном пути. Иначе можно сказать, что родительский каталог - это один шаг по дереву каталогов по направлению к корню. .. - это сокращенный способ сослаться на родительский каталог: пока текущим каталогом является /home/ivan, относительный путь .. (или, что то же самое, ./..) будет эквивалентен /home. С использованием .. можно строить сколь угодно длинные пути, такие как ../../usr/../var/log/../run/../../home.

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

Родительский каталог (parent directory) — это каталог, в котором содержится данный. Для корневого каталога родительским является он сам.

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

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

Домашний каталогПеремещение по дереву каталогов