Как проверить, доступен ли файл для записи в Linux

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") subgraph Lab Skills linux/echo -.-> lab-558714{{"Как проверить, доступен ли файл для записи в Linux"}} linux/test -.-> lab-558714{{"Как проверить, доступен ли файл для записи в Linux"}} linux/ls -.-> lab-558714{{"Как проверить, доступен ли файл для записи в Linux"}} linux/touch -.-> lab-558714{{"Как проверить, доступен ли файл для записи в Linux"}} linux/cd -.-> lab-558714{{"Как проверить, доступен ли файл для записи в Linux"}} end

Проверка возможности записи с помощью команды test -w

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

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

Создадим простой файл в каталоге ~/project. Для этого используем команду touch, которая создает пустой файл, если он не существует.

Перейдите в каталог проекта, если вы еще не находитесь в нем:

cd ~/project

Теперь создайте файл с именем my_test_file.txt:

touch my_test_file.txt

Вы можете проверить, что файл был создан, используя команду ls:

ls

В выводе вы должны увидеть my_test_file.txt.

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

test -w my_test_file.txt && echo "Writable" || echo "Not writable"

Разберем эту команду:

  • test -w my_test_file.txt: Эта часть команды проверяет, можно ли записывать в файл my_test_file.txt.
  • && echo "Writable": Если команда test возвращает истину (статус завершения 0), оператор && выполняет следующую команду, которая выводит "Writable".
  • || echo "Not writable": Если команда test возвращает ложь (статус завершения 1), оператор || выполняет следующую команду, которая выводит "Not writable".

Поскольку вы создали файл как пользователь labex в своем домашнем каталоге, у вас должны быть права на запись, и вывод должен быть следующим:

Writable

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

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

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

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

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

Убедитесь, что вы находитесь в каталоге ~/project:

cd ~/project

Теперь выполните команду ls -l, чтобы увидеть детали файлов в этом каталоге. Вы должны увидеть файл my_test_file.txt, который вы создали на предыдущем этапе.

ls -l

Вывод будет выглядеть примерно так:

-rw-rw-r-- 1 labex labex    0 Month Day HH:MM my_test_file.txt

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

-rw-rw-r--

Эта строка из десяти символов сообщает о типе файла и его правах доступа для разных пользователей.

  1. Первый символ (- в данном случае) указывает на тип файла.
    • -: Обычный файл
    • d: Каталог
    • l: Символическая ссылка
    • И другие...
  2. Следующие девять символов разделены на три группы по три символа:
    • Первая группа (rw-): Права доступа для владельца файла.
    • Вторая группа (rw-): Права доступа для группы, к которой принадлежит файл.
    • Третья группа (r--): Права доступа для остальных (всех остальных пользователей системы).

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

  • r: Право на чтение (позволяет просматривать содержимое файла или список файлов в каталоге).
  • w: Право на запись (позволяет изменять файл или создавать/удалять файлы в каталоге).
  • x: Право на выполнение (позволяет запускать файл как программу или входить в каталог).
  • -: Указывает, что право доступа не предоставлено.

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

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

Этот вывод подтверждает, почему команда test -w на предыдущем этапе вернула "Writable" для пользователя labex – потому что владелец (labex) имеет право на запись (w).

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

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

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

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

Убедитесь, что вы находитесь в каталоге ~/project:

cd ~/project

Теперь применим команду stat к файлу my_test_file.txt, который вы создали ранее:

stat my_test_file.txt

Вывод будет довольно подробным и может выглядеть примерно так:

  File: my_test_file.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: ---h/---d       Inode: ---         Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Modify: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Change: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
 Birth: -

Рассмотрим некоторые важные части информации, предоставляемые командой stat:

  • File: Имя файла.
  • Size: Размер файла в байтах.
  • Access: (0664/-rw-rw-r--): Эта строка показывает права доступа как в восьмеричном (0664), так и в символьном (-rw-rw-r--) форматах. Это соответствует правам доступа, которые мы видели с помощью команды ls -l.
  • Uid: ( 5000/ labex): Идентификатор пользователя (User ID, UID) и имя пользователя владельца файла.
  • Gid: ( 5000/ labex): Идентификатор группы (Group ID, GID) и имя группы, к которой принадлежит файл.
  • Access: Время последнего доступа (чтения) к файлу.
  • Modify: Время последнего изменения содержимого файла.
  • Change: Время последнего изменения метаданных файла (например, прав доступа, владельца и т.д.).
  • Birth: Время создания файла (может отсутствовать на некоторых файловых системах).

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

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

stat -c "%a" my_test_file.txt

Эта команда использует опцию -c для указания пользовательского формата. "%a" - это спецификатор формата для прав доступа в восьмеричном виде. Вывод должен быть следующим:

664

Это соответствует восьмеричным правам доступа 0664, показанным в полном выводе команды stat (ведущий ноль часто опускается).

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

Резюме

В этом практическом уроке мы научились проверять, можно ли записать в файл в системе Linux с помощью команды test -w. Эта команда представляет собой простой и эффективный способ определения прав на запись и часто используется в оболочках скриптов для предотвращения ошибок. Мы практиковались в создании файла и использовании команды test -w в сочетании с операторами && и || для отображения информации о том, доступен ли файл для записи.

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