Чтобы иметь возможность ориентироваться в файловой системе, нужно знать, что содержится в каждом каталоге. Запомнить всю структуру файловой системы невозможно и не нужно: в любой момент можно просмотреть содержимое любого каталога при помощи утилиты ls
(сокращение от англ. «list» — «список»):
[methody@localhost methody]$ ls
-filename-with- text
[methody@localhost methody]$
Пример 4. Команда ls
Поданная без параметров, команда ls
выводит список файлов и каталогов, содержащихся в текущем каталоге.
Вот пример утилиты, которая по умолчанию работает с файлами в текущем каталоге.
При помощи этой утилиты Мефодий обнаружил, что в его домашнем каталоге (который в данный момент является текущим) содержатся два файла, созданные на прошлой лекции: «-filename-with-
» и «text
».
Утилита ls
принимает один параметр: имя каталога, содержимое которого нужно вывести. Имя может быть задано любым доступным способом: в виде полного или относительного пути. Например, чтобы получить список в файлов в своём домашнем каталоге, Мефодий мог бы использовать команды «ls /home/methody
» и «ls .
» — результат был бы аналогичным.
Кроме параметра, утилита ls
«понимает» множество ключей, которые нужны главным образом для того, чтобы выводить дополнительную информацию о файлах в каталоге или выводить список файлов выборочно. Чтобы узнать обо всех возможностях ls
, нужно, конечно же, прочесть руководство по этой утилите («man ls
»). Почитав руководство по ls
, Мефодий решил изучить содержимое своей файловой системы и начал с начала — с корневого каталога.
[methody@localhost methody]$ ls -F /
bin/ dev/ home/ mnt/ root/ swap/ tmp/ var/
boot/ etc/ lib/ proc/ sbin/ sys/ usr/
[methody@localhost methody]$
Пример 5. Команда ls -F
Мефодий использовал ключ -F
, чтобы отличать файлы от каталогов. При наличии этого ключа ls
в конце имени каждого каталога ставит символ «/
», чтобы показать, что в нём может содержаться что-то ещё. В выведенном списке нет ни одного файла — в корневом каталоге содержатся только подкаталоги.
Кроме того, Мефодий решил получить более подробную информацию о содержимом своего домашнего каталога:
[methody@localhost methody]$ ls -aF
-filename-with- .bash_history .bashrc .lpoptions .rpmmacros Documents/
./ .bash_logout .emacs .mutt/ .xemacs/ text
../ .bash_profile .i18n .pinerc .xsession.d/ tmp/
[methody@localhost methody]$
Пример 6. Команда ls -aF
Внезапно он обнаружил, что файлов в его домашнем каталоге не два, а гораздо больше. Дело в том, что утилита ls
по умолчанию не выводит информацию об объектах, чьё имя начинается с «.
» — в том числе о «.
» и «..
». Для того, чтобы посмотреть полный список содержимого каталога, и используется ключ «-a
» (all).
Такое поведение ls
напоминает принцип работы файловых менеджеров со скрытыми файлами в системах MS-DOS/Windows. Разница в том, что в MS-DOS/Windows скрытые файлы предусмотрены файловой системой — файл может иметь атрибут «скрытый» и при этом называться как угодно. В Linux скрытые файлы — это не свойство файловой системы, а только соглашение по наименованию файлов.
Как правило, с «.
» начинаются имена конфигурационных файлов и конфигурационных каталогов (вроде .bashrc
, описанного в лекции Возможности командной оболочки), работа с которыми (т. е. настройка окружения, «рабочего места») не пересекается с работой над какой-нибудь прикладной задачей (хотя, конечно, эффективность работы зависит от хорошо настроенного окружения). Кроме того, подобных файлов в домашнем каталоге активно работающего пользователя со временем заводится немало (по одному на каждую приличную утилиту) и их присутствие в выдаче ls сильно загромождает её.
Разберёмся подробно в списке файлов в домашнем каталоге Мефодия. Начинём с весьма лаконичных имён «.
» и «..
». Мефодий уже знает, что «.
» — это имя текущего каталога. Следующее имя в списке, «..
» — это ссылка на родительский каталог. Родительский каталог — это тот каталог, в котором находится данный. Родительским каталогом для «/home/methody
» будет каталог «/home
»: он получается просто отбрасыванием последнего имени каталога в полном пути. Иначе можно сказать, что родительский каталог — это один шаг по дереву каталогов по направлению к корню. «..
» — это сокращённый способ сослаться на родительский каталог: пока текущим каталогом является «/home/methody
», относительный путь «..
» (или, что то же самое, «./..
») будет эквивалентен «/home
». С использованием «..
» можно строить сколь угодно длинные пути, такие как «../../usr/../var/log/../run/../../home
»,
Не сразу понятно, что приводит этот путь всё туда же, в «/home
».
однако в действительности они применяются только при автоматической подстановке в программах, а во время работы пользователя необходимости в такого рода усложнениях не возникает.
- родительский каталог
- Каталог, в котором содержится данный. Для корневого каталога родительским является он сам.
Ссылки на текущий и на родительский каталог обязательно присутствуют в каждом каталоге в Linux. Даже если каталог пуст, т. е. не содержит ни одного файла или подкаталога, команда «ls -a
» выведет список из двух имён: «.
» и «..
».
За ссылками на текущий и родительский каталоги следуют несколько файлов и каталогов, имена которых начинаются на «.». В них содержатся настройки командной оболочки (файлы, начинающиеся с «.bash
») и других программ. В домашнем каталоге каждого пользователя Linux всегда присутствует несколько таких файлов. Использование этих файлов позволяет пользователям независимо друг от друга настраивать поведение командной оболочки и других программ — организовывать своё «рабочее место» в системе. Подробнее речь об этом пойдёт в лекции Конфигурационные файлы.