Операции с файловой системой в оболочке

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

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

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) shell(("Shell")) -.-> shell/VariableHandlingGroup(["Variable Handling"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) shell(("Shell")) -.-> shell/ControlFlowGroup(["Control Flow"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") shell/VariableHandlingGroup -.-> shell/variables_decl("Variable Declaration") shell/VariableHandlingGroup -.-> shell/variables_usage("Variable Usage") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") shell/ControlFlowGroup -.-> shell/if_else("If-Else Statements") shell/ControlFlowGroup -.-> shell/cond_expr("Conditional Expressions") subgraph Lab Skills linux/echo -.-> lab-388821{{"Операции с файловой системой в оболочке"}} shell/variables_decl -.-> lab-388821{{"Операции с файловой системой в оболочке"}} shell/variables_usage -.-> lab-388821{{"Операции с файловой системой в оболочке"}} linux/touch -.-> lab-388821{{"Операции с файловой системой в оболочке"}} linux/chmod -.-> lab-388821{{"Операции с файловой системой в оболочке"}} linux/mkdir -.-> lab-388821{{"Операции с файловой системой в оболочке"}} shell/if_else -.-> lab-388821{{"Операции с файловой системой в оболочке"}} shell/cond_expr -.-> lab-388821{{"Операции с файловой системой в оболочке"}} end

Создание тестового файла

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

  1. Откройте терминал в WebIDE. Именно здесь вы будете вводить свои команды.

  2. Создайте новый файл с именем test_file.txt:

    touch test_file.txt

    Команда touch используется для создания пустого файла. Если файл уже существует, она обновляет временную метку файла без изменения его содержимого.

  3. Добавьте некоторое содержимое в файл:

    echo "This is a test file for our lab." > test_file.txt

    Эта команда использует echo для вывода текста и > для перенаправления этого вывода в файл. Будьте осторожны с >, так как он перезапишет любое существующее содержимое файла.

  4. Проверьте содержимое файла:

    cat test_file.txt

    cat - это сокращение от "concatenate", но часто оно используется для отображения содержимого файла. Вы должны увидеть сообщение "This is a test file for our lab."

Если вы допустили ошибку или хотите начать заново, вы всегда можете удалить файл с помощью команды rm test_file.txt и начать сначала с шага 1.

Проверка существования файла

Теперь, когда мы создали файл, давайте научимся проверять, существует ли файл. Это распространенная задача в сценариях оболочки (shell scripts), особенно когда вам нужно выполнять операции с файлами.

  1. Создайте новый сценарий с именем file_exists.sh:

    touch file_exists.sh
  2. Добавьте следующее содержимое в файл:

    #!/bin/bash
    
    filename="test_file.txt"
    if [ -e "$filename" ]; then
      echo "$filename exists"
    else
      echo "$filename does not exist"
    fi

    Разберем это по частям:

    • #!/bin/bash называется шебанг (shebang). Он сообщает системе, что это сценарий на языке bash.
    • Мы устанавливаем переменную filename равной "test_file.txt".
    • Условный оператор if проверяет, существует ли файл. -e - это проверка, которая возвращает истину, если файл существует.
    • Мы используем echo для вывода сообщения в зависимости от того, существует файл или нет.
  3. Сохраните файл и выйдите из редактора.

  4. Сделайте сценарий исполняемым:

    chmod +x file_exists.sh
  5. Запустите сценарий:

    ./file_exists.sh

    Вы должны увидеть вывод: "test_file.txt exists"

  6. Теперь давайте проверим с несуществующим файлом. Сначала переименуем наш тестовый файл:

    mv test_file.txt non_existent.txt

    Эта команда переименовывает test_file.txt в non_existent.txt.

  7. Измените сценарий, чтобы проверить наличие файла с исходным именем "test_file.txt":

    nano file_exists.sh

    Измените переменную filename на "test_file.txt", если она еще не установлена на это значение.

  8. Запустите сценарий еще раз:

    ./file_exists.sh

    Вы должны увидеть вывод: "test_file.txt does not exist"

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

Проверка существования каталога

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

  1. Создайте новый сценарий с именем dir_exists.sh:

    touch dir_exists.sh
  2. Добавьте следующее содержимое в файл:

    #!/bin/bash
    
    dirname="test_directory"
    if [ -d "$dirname" ]; then
      echo "$dirname exists"
    else
      echo "$dirname does not exist"
    fi

    Этот сценарий очень похож на наш сценарий для проверки существования файла, но он использует -d вместо -e. Проверка -d предназначена специально для проверки существования каталога.

  3. Сохраните файл и выйдите из редактора.

  4. Сделайте сценарий исполняемым:

    chmod +x dir_exists.sh
  5. Запустите сценарий:

    ./dir_exists.sh

    Вы должны увидеть вывод: "test_directory does not exist"

  6. Теперь давайте создадим каталог и запустим сценарий еще раз:

    mkdir test_directory
    ./dir_exists.sh

    Теперь вы должны увидеть вывод: "test_directory exists"

    mkdir - это команда для создания нового каталога.

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

Проверка прав доступа к файлу

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

  1. Сначала переименуем наш файл обратно в его исходное имя:

    mv non_existent.txt test_file.txt
  2. Создайте новый сценарий с именем file_readable.sh:

    touch file_readable.sh
  3. Добавьте следующее содержимое в файл:

    #!/bin/bash
    
    filename="test_file.txt"
    if [ -r "$filename" ]; then
      echo "You have read permission for $filename"
    else
      echo "You do not have read permission for $filename"
    fi

    Этот сценарий использует проверку -r, которая проверяет, может ли текущий пользователь прочитать файл.

  4. Сохраните файл и выйдите из редактора.

  5. Сделайте сценарий исполняемым:

    chmod +x file_readable.sh
  6. Запустите сценарий:

    ./file_readable.sh

    Вы должны увидеть вывод: "You have read permission for test_file.txt"

  7. Теперь удалим право на чтение и запустим сценарий еще раз:

    chmod -r test_file.txt
    ./file_readable.sh

    Теперь вы должны увидеть вывод: "You do not have read permission for test_file.txt"

    chmod -r удаляет право на чтение файла.

  8. Восстановите право на чтение:

    chmod +r test_file.txt

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

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

Резюме

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

Вы практиковались в следующих аспектах:

  1. Понимании своего рабочего окружения
  2. Создании и манипулировании файлами
  3. Написании и выполнении сценариев оболочки
  4. Проверке существования файлов и каталогов
  5. Проверке прав доступа к файлам

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

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