Как проверить, является ли файл исполняемым в Linux

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") subgraph Lab Skills linux/echo -.-> lab-558712{{"Как проверить, является ли файл исполняемым в Linux"}} linux/test -.-> lab-558712{{"Как проверить, является ли файл исполняемым в Linux"}} linux/ls -.-> lab-558712{{"Как проверить, является ли файл исполняемым в Linux"}} linux/chmod -.-> lab-558712{{"Как проверить, является ли файл исполняемым в Linux"}} linux/cd -.-> lab-558712{{"Как проверить, является ли файл исполняемым в Linux"}} end

Проверка исполняемости с помощью test -x

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

Сначала создадим простой текстовый файл в каталоге ~/project. Используем команду echo для записи некоторого текста в файл с именем my_script.sh.

echo "echo 'Hello from the script!'" > ~/project/my_script.sh

Теперь проверим, является ли этот файл исполняемым. По умолчанию, когда вы создаете новый файл таким образом, у него не будут исполняемые разрешения.

Используйте команду test -x, за которой следует путь к файлу:

test -x ~/project/my_script.sh

После выполнения этой команды вы не увидите никакого вывода, если проверка прошла успешно (то есть файл НЕ является исполняемым). Если бы файл был исполняемым, команда test -x вернула бы статус 0, который обычно интерпретируется как "истина" или "успех" в сценариях оболочки (shell scripting), но по умолчанию она не выводит ничего в терминал.

Чтобы увидеть результат команды test, мы можем проверить статус завершения предыдущей команды, используя $?. Статус завершения 0 означает, что проверка дала истинный результат (файл является исполняемым), а не нулевой статус (обычно 1) означает, что проверка дала ложный результат (файл не является исполняемым).

echo $?

Вы должны увидеть вывод 1, что указывает на то, что my_script.sh в настоящее время не является исполняемым.

Теперь сделаем файл исполняемым с помощью команды chmod. Команда chmod используется для изменения разрешений файлов и каталогов. Мы используем +x для добавления исполняемых разрешений для владельца файла.

chmod +x ~/project/my_script.sh

Теперь проверим исполняемость файла еще раз:

test -x ~/project/my_script.sh

И проверим статус завершения:

echo $?

На этот раз вывод должен быть 0, что подтверждает, что файл теперь является исполняемым.

Наконец, попробуем запустить скрипт, чтобы увидеть вывод:

~/project/my_script.sh

Вы должны увидеть:

Hello from the script!

Это подтверждает, что вы успешно сделали файл исполняемым и запустили его.

Проверка разрешений с помощью ls -l

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

Перейдите в каталог ~/project, если вы еще не находитесь в нем. Вы можете использовать команду cd:

cd ~/project

Теперь выведите список файлов в этом каталоге с помощью команды ls -l:

ls -l

Вы должны увидеть вывод, похожий на следующий (точные детали, такие как дата и время, могут отличаться):

-rwxr-xr-x 1 labex labex   30 <date> <time> my_script.sh

Разберем первую часть вывода, которая представляет разрешения файла: -rwxr-xr-x. Эта строка из десяти символов сообщает вам много о том, кто может делать с файлом.

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

  • -: Обычный файл (как наш my_script.sh)
  • d: Каталог
  • l: Символическая ссылка

Следующие девять символов группируются в три группы по три символа, представляющие разрешения для:

  1. Владельца: Пользователь, который владеет файлом (в данном случае, labex).
  2. Группы: Группа, которая владеет файлом (также labex).
  3. Других: Все остальные пользователи системы.

В каждой группе из трех символов разрешения представляются следующим образом:

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

Таким образом, для -rwxr-xr-x:

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

Этот вывод подтверждает, что после использования chmod +x на предыдущем этапе, владельцу (labex) теперь предоставлено разрешение на выполнение (x) для файла my_script.sh.

Вы также можете использовать ls -l для проверки разрешений каталогов. Например, давайте посмотрим на разрешения для самого каталога ~/project:

ls -ld ~/project

Опция -d сообщает команде ls вывести информацию о самом каталоге, а не о его содержимом. Вывод может выглядеть следующим образом:

drwxr-xr-x 2 labex labex 4096 <date> <time> /home/labex/project

Здесь первый символ d указывает, что это каталог. Разрешения rwxr-xr-x означают:

  • Владелец (labex) имеет разрешения на чтение, запись и выполнение в каталоге. Для каталога разрешение на "выполнение" позволяет вам войти в каталог и получить доступ к его содержимому.
  • Группа (labex) и другие имеют разрешения на чтение и выполнение в каталоге, но не на запись.

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

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

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

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

Давайте используем stat для файла my_script.sh, который вы создали на предыдущих этапах. Убедитесь, что вы находитесь в каталоге ~/project или укажите полный путь к файлу.

stat ~/project/my_script.sh

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

  File: /home/labex/project/my_script.sh
  Size: 30              Blocks: 8          IO Block: 4096   regular file
Device: <device_id>     Inode: <inode_number>  Links: 1
Access: (<permissions>/-rwxr-xr-x)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: <date> <time>.<nanoseconds> +<timezone_offset>
Modify: <date> <time>.<nanoseconds> +<timezone_offset>
Change: <date> <time>.<nanoseconds> +<timezone_offset>
 Birth: -

Рассмотрим некоторые ключевые строки в выводе:

  • File: Имя и путь к файлу.
  • Size: Размер файла в байтах.
  • Access: (<permissions>/-rwxr-xr-x): Эта строка показывает разрешения файла как в восьмеричном формате (например, 0755, которое соответствует rwxr-xr-x), так и в символьном формате, который вы видели с помощью ls -l. Также здесь показаны идентификаторы пользователя (Uid) и группы (Gid) владельца файла и его группы.
  • Access: Время последнего доступа (чтения) к файлу.
  • Modify: Время последнего изменения содержимого файла.
  • Change: Время последнего изменения метаданных файла (например, разрешений, владельца и т.д.).
  • Birth: Время создания файла (может отсутствовать на некоторых файловых системах).

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

Вы также можете использовать stat для каталогов:

stat ~/project

Вывод будет аналогичным, но тип File будет указывать, что это каталог.

Попробуйте использовать stat для разных файлов и каталогов в вашем каталоге ~/project, чтобы увидеть различия в выводе.

Резюме

В этом практическом занятии вы научились проверять, является ли файл исполняемым в Linux с помощью команды test -x. Вы создали простой скриптовый файл, использовали test -x и проверили статус завершения (echo $?), чтобы подтвердить его первоначальное состояние неисполняемости (статус завершения 1). Затем вы использовали chmod +x для добавления разрешения на выполнение и проверили изменения с помощью test -x и echo $?, наблюдая статус завершения 0.

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