Как проверить, можно ли прочитать файл в Linux

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/InputandOutputRedirectionGroup(["Input and Output Redirection"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") linux/InputandOutputRedirectionGroup -.-> linux/redirect("I/O Redirecting") subgraph Lab Skills linux/echo -.-> lab-558713{{"Как проверить, можно ли прочитать файл в Linux"}} linux/test -.-> lab-558713{{"Как проверить, можно ли прочитать файл в Linux"}} linux/ls -.-> lab-558713{{"Как проверить, можно ли прочитать файл в Linux"}} linux/pwd -.-> lab-558713{{"Как проверить, можно ли прочитать файл в Linux"}} linux/redirect -.-> lab-558713{{"Как проверить, можно ли прочитать файл в Linux"}} end

Проверка возможности чтения с использованием test -r

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

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

Создадим простой файл для проверки этого. Мы будем использовать команду echo, чтобы поместить некоторый текст в файл с именем my_file.txt в каталоге ~/project.

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

echo "This is a test file." > ~/project/my_file.txt

Эта команда создает файл ~/project/my_file.txt и записывает в него строку "This is a test file." Символ > перенаправляет вывод команды echo в указанный файл.

Теперь используем test -r для проверки, можно ли прочитать этот файл. Команда test сама по себе не выводит результат, если условие истинно. Обычно мы комбинируем ее с другими командами, такими как echo, чтобы увидеть результат.

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

test -r ~/project/my_file.txt && echo "File is readable."

Оператор && означает "выполнить команду справа только в том случае, если команда слева завершилась успешно (вернула нулевой статус выхода)". Если test -r ~/project/my_file.txt возвращает истину (то есть файл доступен для чтения), команда echo будет выполнена.

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

File is readable.

Теперь попробуем проверить файл, который не существует.

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

test -r ~/project/non_existent_file.txt && echo "This won't be printed."

Поскольку файл ~/project/non_existent_file.txt не существует, команда test -r вернет ненулевой статус выхода (ошибку), и команда echo не будет выполнена. Вы не должны увидеть никакого вывода от этой команды.

Команда test является основным инструментом для написания скриптов в Linux. Понимание того, как использовать ее различные опции, такие как -r, является важным для написания надежных скриптов, которые могут проверять права доступа и существование файлов перед выполнением операций.

Нажмите Продолжить, чтобы перейти к следующему шагу.

Проверка прав доступа с помощью ls -l

На предыдущем этапе вы использовали команду test -r для проверки, можно ли прочитать файл. Теперь давайте воспользуемся командой ls с опцией -l, чтобы посмотреть подробные права доступа к файлу.

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

Давайте посмотрим на права доступа к файлу my_file.txt, который вы создали на предыдущем этапе. Убедитесь, что вы находитесь в каталоге ~/project. Вы можете проверить текущий каталог с помощью команды pwd:

pwd

Вы должны увидеть /home/labex/project.

Теперь введите следующую команду и нажмите Enter:

ls -l my_file.txt

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

-rw-rw-r-- 1 labex labex XX Month XX XX:XX my_file.txt

Разберём первую часть вывода, которая представляет тип файла и права доступа:

-rw-rw-r--

Эта строка из десяти символов содержит много информации о правах доступа к файлу.

  1. Первый символ указывает на тип файла:

    • - означает, что это обычный файл.
    • d означает, что это каталог.
    • l означает, что это символическая ссылка.
    • (Существуют и другие типы, но эти наиболее распространены).
  2. Следующие девять символов разделены на три группы по три символа:

    • Первая группа (rw-) показывает права доступа владельца файла.
    • Вторая группа (rw-) показывает права доступа группы, к которой принадлежит файл.
    • Третья группа (r--) показывает права доступа других (всех остальных).

В каждой группе из трех символов:

  • Первый символ указывает на право чтения (r). Если присутствует дефис (-), право на чтение запрещено.
  • Второй символ указывает на право записи (w). Если присутствует дефис (-), право на запись запрещено.
  • Третий символ указывает на право исполнения (x). Если присутствует дефис (-), право на исполнение запрещено.

Таким образом, для файла my_file.txt с правами -rw-rw-r--:

  • Владелец (labex) имеет права на чтение (r) и запись (w), но не имеет права на исполнение (-).
  • Группа (labex) имеет права на чтение (r) и запись (w), но не имеет права на исполнение (-).
  • Другие имеют право на чтение (r), но не имеют прав на запись (-) и исполнение (-).

Этот вывод подтверждает, что владельцу (labex) есть право на чтение, поэтому команда test -r сработала на предыдущем этапе.

Понимание вывода команды ls -l является фундаментальным для управления файлами и каталогами в Linux и контроля доступа к ним.

Нажмите Продолжить, чтобы перейти к следующему этапу.

Проверка доступа к файлу с помощью stat

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

В то время как команда ls -l дает хорошее представление о правах доступа, команда stat позволяет более детально изучить метаданные файла.

Давайте применим команду stat к файлу my_file.txt, который вы создали ранее в каталоге ~/project.

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

stat ~/project/my_file.txt

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

  File: /home/labex/project/my_file.txt
  Size: XX          Blocks: X          IO Block: XXXX   regular file
Device: XXh/XXd Inode: XXXXXXXX    Links: X
Access: (0664/-rw-rw-r--)  Uid: (  XXXX/   labex)   Gid: (  XXXX/   labex)
Access: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Modify: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
Change: XXXX-XX-XX XX:XX:XX.XXXXXXXXXX +XXXX
 Birth: -

Рассмотрим некоторые важные строки в выводе:

  • File: Имя файла.
  • Size: Размер файла в байтах.
  • Access: (0664/-rw-rw-r--): Эта строка показывает права доступа в двух форматах:
    • 0664: Это числовое (восьмеричное) представление прав доступа. Каждая цифра представляет права доступа владельца, группы и других соответственно.
      • 6 для владельца: rwx (чтение = 4, запись = 2, выполнение = 0) -> 4 + 2 + 0 = 6
      • 6 для группы: rwx (чтение = 4, запись = 2, выполнение = 0) -> 4 + 2 + 0 = 6
      • 4 для других: rwx (чтение = 4, запись = 0, выполнение = 0) -> 4 + 0 + 0 = 4
      • Предшествующая 0 часто используется для обозначения восьмеричной записи.
    • -rw-rw-r--: Это символьное представление прав доступа, о котором вы узнали с помощью команды ls -l.
  • Uid и Gid: Идентификатор пользователя и идентификатор группы владельца файла и группы, а также их имена.
  • Access, Modify, Change: Эти строки показывают временные метки файла:
    • Access: Время последнего доступа (чтения) к файлу.
    • Modify: Время последнего изменения содержимого файла.
    • Change: Время последнего изменения метаданных файла (например, прав доступа, владельца, группы).

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

Теперь вы узнали три разных способа проверки прав доступа к файлам и информации о доступе в Linux: test -r, ls -l и stat. Это важные инструменты для работы с файлами в командной строке.

Нажмите Продолжить, чтобы завершить этот практический урок.

Резюме

В этом практическом уроке вы узнали, как проверить, можно ли прочитать файл в Linux, используя команду test с опцией -r. Вы практиковались в создании файла и использовании команды test -r в сочетании с оператором && для условного вывода сообщения в зависимости от возможности чтения файла. Вы также заметили, что команда test -r возвращает ложное значение для несуществующих файлов, предотвращая выполнение последующих команд. Этот этап продемонстрировал фундаментальный метод проверки прав доступа к файлам программно в оболочке (shell scripting).