ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Пути и каталоги Linux: pwd, cd, ls и карта файловой системы

Автор: · Обновлено

Путь указывает, где искать объект относительно корня или текущего каталога. Большинство ошибок «файл не найден» начинаются с неверной исходной точки, регистра букв или…

Путь указывает, где искать объект относительно корня или текущего каталога. Большинство ошибок «файл не найден» начинаются с неверной исходной точки, регистра букв или пропущенных кавычек. Разберём навигацию на временном дереве, которое не зависит от ваших документов.

Абсолютный путь, относительный путь и домашний каталог

Абсолютный путь начинается с /, относительный — разрешается от текущего рабочего каталога. . обозначает текущий каталог, .. — родительский. Shell раскрывает ~ в домашний каталог; cd без аргументов использует HOME, а cd - возвращает в предыдущий каталог. /home — обычный родитель домашних каталогов, но ваш дом не обязан находиться именно там; домашний каталог root обычно /root.

navigation_lab=$(mktemp -d)
mkdir -p "$navigation_lab/project/source" "$navigation_lab/project/docs"
touch "$navigation_lab/project/.env" "$navigation_lab/project/source/main.txt"
(
  cd "$navigation_lab/project" || exit
  pwd
  cd source || exit
  printf 'relative: '; pwd
  cd .. || exit
  ls -la
)

Подоболочка в скобках изолирует смену каталога. После блока исходная оболочка остаётся на прежнем месте. Вывод pwd внутри заканчивается на /project, затем /project/source; ls -la включает .env. Не копируйте случайную часть пути mktemp как постоянную настройку.

Каталог загрузок может называться Downloads, Загрузки или иначе. Проверяйте ls -l ~; в графической среде с xdg-user-dirs путь показывает xdg-user-dir DOWNLOAD. cd ~/Downloads корректен только если такой каталог существует. Регистр обычно значим: Downloads и downloads — разные имена.

Что именно показывает ls

КомандаЧто меняется
ls -1Одно имя на строку; это цифра один
ls -lТип, права, число ссылок, владелец, группа, размер, время
ls -laПодробный список, включая скрытые имена
ls -lhРазмеры в удобных единицах
ls -ld pathМетаданные самого каталога, а не его содержимого
ls -R pathРекурсивный просмотр подкаталогов

Размер каталога в ls -ld не равен сумме всех вложенных данных. Для этого используют du; свободное место файловой системы показывает df. Имена с переводами строк делают построчный разбор ls ненадёжным, поэтому для автоматической обработки файлов применяют find с NUL-разделителями.

tree -a -L 2 "$navigation_lab" показывает дерево глубиной два, включая скрытые имена. Если tree отсутствует, поставьте одноимённый пакет штатным менеджером, например sudo apt install tree в Debian/Ubuntu, либо используйте find "$navigation_lab" -maxdepth 2 -print. Устанавливать tree для понимания дерева необязательно.

Стек каталогов и символические пути

pushd переходит в каталог и сохраняет стек, popd возвращает сохранённую позицию, dirs -v показывает стек. Это удобно при чередовании каталога исходников и результатов. Bash обычно сохраняет логический путь через символические ссылки: pwd -L и pwd -P могут отличаться. Физический вариант разрешает ссылки, что полезно перед операцией с конкретным деревом.

(
  pushd "$navigation_lab/project/source" >/dev/null || exit
  pushd ../docs >/dev/null || exit
  dirs -v
  popd >/dev/null || exit
  pwd -P
)

Последняя строка указывает на source. Команда sudo cd не меняет каталог родительского shell: cd — встроенная операция над текущим процессом. При разрешённой административной задаче можно выполнить sudo -u account sh -c 'cd /нужный/каталог && команда', но такая оболочка имеет отдельное состояние. Для просмотра чаще достаточно точно адресованной команды без смены каталога.

Где Linux хранит разные данные

ПутьНазначение и типичные примеры
/etcНастройки: hosts, group, apt/sources.list; environment и default читаются разными потребителями
/usr, /usr/local, /optПакетные программы, локально установленные программы и отдельные дополнительные приложения
/home, /rootПользовательские домашние каталоги и дом администратора
/srvДанные, которые предоставляет служба
/var/log, /var/lib, /var/cacheЖурналы, постоянное состояние приложения, восстанавливаемый кеш
/run, /var/runСостояние текущей загрузки; второй путь часто ссылка на первый
/tmp, /var/tmpВременные данные; политика очистки различается, /var/tmp обычно переживает перезагрузку
/devУстройства и специальные объекты: null, диски sda, loop, mapper, USB-устройства
/proc, /sysВиртуальные сведения и интерфейсы ядра, процессов и устройств

/var/www — распространённое соглашение веб-сервера, а не обязательное место любого сайта. /bin и /sbin в системах с объединённым /usr могут быть ссылками; это не повреждение. /etc/hosts сопоставляет имена с адресами, /etc/resolv.conf часто управляется службой resolver. Файлы /etc/network/interfaces и /etc/networks не взаимозаменяемы: первый может описывать интерфейсы для ifupdown, второй — именованные сети для NSS. Их наличие не доказывает, что сеть настраивается именно ими.

/dev/loopN позволяет обращаться к обычному файлу как к блочному устройству, например для образа ФС. /dev/mapper содержит именованные отображения device mapper, применяемые LVM и шифрованием. /dev/sda обычно обозначает целый диск, /dev/sda1 — раздел; NVMe использует другие имена. USB-устройство не обязано появиться в /dev/usb: узлы доступа могут находиться в /dev/bus/usb, а USB-накопитель становится блочным диском.

Нельзя очищать /var/lib как кеш или вручную удалять устройства из /dev. Перед очисткой /tmp учитывайте активные процессы и штатную политику tmpfiles; возраст файла сам по себе не подтверждает, что он никому не нужен.

Практика и ошибка поиска пути

В учебном дереве выведите только метаданные project/docs, затем его родителя и скрытый .env. Объясните разницу между ls -l и ls -ld. Добавьте каталог с пробелом и перейдите в него одним аргументом. При No such file or directory сравните pwd, ls -ld родительского пути, регистр и кавычки. При Permission denied проверьте execute-доступ на каждом родительском каталоге; это отдельная причина.

После упражнения выполните rm -r -- "$navigation_lab": переменная должна по-прежнему указывать на созданный mktemp-каталог. Удаление завершает только этот стенд и не затрагивает текущий рабочий проект.

Источники