Операции с файловой системой в Shell

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

Введение

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

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

Прежде чем приступать к операциям, важно понимать контекст рабочей среды. В 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 и повторить шаги.

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

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

  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

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

  7. Убедитесь, что в скрипте file_exists.sh переменная filename по-прежнему ссылается на "test_file.txt":

    nano file_exists.sh
  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

    Этот скрипт почти идентичен предыдущему, но вместо -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

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

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

Резюме

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

Вы закрепили на практике:

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

Эти знания станут вашим подспорьем в дальнейшем изучении систем Linux. Помните: всегда проверяйте наличие объектов перед выполнением операций с ними — это поможет избежать ошибок в ваших программах. Также всегда учитывайте права доступа при работе с системными или конфиденциальными данными.

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