Как проверить наличие каталога в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь использовать основные команды Linux для проверки существования каталога и изучения его свойств. Вы начнете с использования команды test -d для программной проверки существования каталога и поймете, как интерпретировать ее статус завершения для сценариев (скриптов).

После этого вы изучите команду ls -ld для вывода содержимого каталога и просмотра подробной информации о самом каталоге. Наконец, вы используете команду stat для изучения полной метаданных, связанной с каталогом. Эти навыки являются важными для эффективного управления файловой системой и написания сценариев в Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") subgraph Lab Skills linux/test -.-> lab-558676{{"Как проверить наличие каталога в Linux"}} linux/ls -.-> lab-558676{{"Как проверить наличие каталога в Linux"}} end

Проверка существования каталога с использованием test -d

На этом этапе вы научитесь проверять существование каталога с помощью команды test с опцией -d. Это фундаментальный навык для написания сценариев (скриптов) и автоматизации задач в Linux.

Команда test используется для проверки типов файлов и сравнения значений. Часто она применяется в условных операторах в сценариях оболочки (например, в операторах if) для принятия решений на основе результатов проверки.

Опция -d в команде test предназначена для проверки, является ли заданный путь каталогом.

Давайте попробуем это. Ваш текущий каталог - /home/labex/project. Этот каталог существует.

Введите следующую команду и нажмите Enter:

test -d /home/labex/project

После выполнения этой команды вы не увидите никакого вывода, если каталог существует. Это потому, что команда test, при успешном выполнении, возвращает статус завершения 0 (что обычно означает "успех" в Linux) и не выводит ничего на стандартный вывод.

Теперь проверим существование каталога, который не существует. Введите эту команду и нажмите Enter:

test -d /home/labex/nonexistent_directory

Снова вы не увидите непосредственного вывода от команды test. Однако команда вернет ненулевой статус завершения (что означает "неудачу", так как каталог не существует).

Чтобы увидеть статус завершения последней команды, вы можете использовать специальную переменную $?. Введите эту команду и нажмите Enter:

echo $?

После проверки существования /home/labex/project, команда echo $? должна вывести 0.
После проверки существования /home/labex/nonexistent_directory, команда echo $? должна вывести ненулевое число (обычно 1).

Понимание статусов завершения является важным для написания сценариев, которые могут реагировать на успех или неудачу выполнения команд.

Вывод содержимого каталога с использованием ls -ld

На этом этапе вы научитесь выводить содержимое каталога и просматривать подробную информацию о самом каталоге с помощью команды ls с опциями -l и -d.

Команда ls является одной из наиболее часто используемых команд в Linux. По умолчанию она выводит список файлов и каталогов в текущем каталоге.

Опция -l предоставляет "длинный формат вывода", показывая такие детали, как права доступа к файлам, владелец, размер и время последнего изменения.

Опция -d важна, когда вы хотите увидеть информацию о самом каталоге, а не о его содержимом. Без опции -d команда ls -l выведет содержимое каталога в длинном формате. С опцией -d она выведет запись о самом каталоге.

Давайте объединим эти опции, чтобы посмотреть детали вашего текущего каталога /home/labex/project.

Введите следующую команду и нажмите Enter:

ls -ld /home/labex/project

Вы должны увидеть вывод, похожий на следующий:

drwxr-xr-x 2 labex labex 4096 <Date> <Time> /home/labex/project

Разберем этот вывод:

  • d: Первый символ указывает на тип файла. d означает, что это каталог.
  • rwxr-xr-x: Эти символы представляют права доступа к файлу для владельца, группы и других пользователей.
  • 2: Количество жестких ссылок на этот каталог.
  • labex: Владелец каталога.
  • labex: Группа, которой принадлежит каталог.
  • 4096: Размер каталога в байтах.
  • <Date> <Time>: Дата и время последнего изменения.
  • /home/labex/project: Имя каталога.

Теперь попробуйте выполнить команду ls -l без опции -d, чтобы увидеть разницу. Если в каталоге /home/labex/project есть файлы или каталоги, они будут выведены.

ls -l /home/labex/project

Если каталог /home/labex/project пуст, вы не увидите никакого вывода от команды ls -l. Если он содержит элементы, вы увидите длинный список этих элементов.

Использование команды ls -ld - это быстрый способ проверить права доступа, владельца и время последнего изменения конкретного каталога без вывода всего его содержимого.

Проверка метаданных каталога с помощью stat

На этом этапе вы будете использовать команду stat для получения более подробной информации о каталоге, чем предоставляет команда ls -ld.

В то время как команда ls -ld дает хорошее обобщение, команда stat предоставляет обширные метаданные о файлах и каталогах, включая время доступа, изменения и изменения статуса, размер блока и информацию об inode.

Давайте используем команду stat для проверки вашего текущего каталога /home/labex/project.

Введите следующую команду и нажмите Enter:

stat /home/labex/project

Вы увидите вывод, похожий на следующий:

  File: /home/labex/project
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: <device_id>     Inode: <inode_number>  Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: <Date> <Time>.<Nanoseconds> +<Offset>
Modify: <Date> <Time>.<Nanoseconds> +<Offset>
Change: <Date> <Time>.<Nanoseconds> +<Offset>
 Birth: -

Рассмотрим некоторые важные части информации:

  • File: Имя файла или каталога.
  • Size: Размер в байтах.
  • Blocks: Количество выделенных блоков по 512 байт.
  • IO Block: Оптимальный размер блока ввода-вывода.
  • directory: Указывает тип файла.
  • Device: Идентификатор устройства, на котором находится файл.
  • Inode: Номер inode (уникальный идентификатор объекта файловой системы).
  • Links: Количество жестких ссылок.
  • Access: (0755/drwxr-xr-x): Права доступа в восьмеричном и символьном формате.
  • Uid и Gid: Идентификатор пользователя и идентификатор группы владельца.
  • Access, Modify, Change: Метки времени последнего доступа, последнего изменения и последнего изменения статуса.

Команда stat особенно полезна, когда вам нужны точные детали о объектах файловой системы, особенно для написания скриптов или устранения проблем с правами доступа и метками времени.

Резюме

В этом практическом занятии вы научились проверять наличие каталога в Linux с помощью команды test -d. Вы попрактиковались в проверке как существующих, так и несуществующих каталогов и поняли, как проверить статус завершения команды с помощью echo $?, чтобы определить результат проверки. Эта фундаментальная навык важна для написания скриптов и автоматизации задач на основе наличия каталога.

Вы также научились выводить содержимое каталога и просматривать подробную информацию о самом каталоге с помощью команды ls -ld.