Education 1.1 Help

Манипулирование файловой структурой

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

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

Для примеров этого урока мы создали каталог test в домашней директории. То есть все демонстрируемые команды выполняются в директории по адресу: ~/test.

Основные команды

Для создания файлов принято использовать утилиту touch. Основная задача этой утилиты — поменять время последнего доступа к файлу, но она обладает побочным эффектом.

Если файла не существует, то он будет создан — именно поэтому ее используют для создания файлов, хотя это не основное предназначение:

# В текущей директории создается пустой файл touch empty-file

asciinema

Удалить файл можно командой rm (сокращение от remove):

rm empty-file

asciinema

В *nix-системах не существует понятия «переименовать файл». Переименование всегда равносильно перемещению, которое выполняется командой mv (move):

touch file mv file renamed-file

asciinema

Для копирования файлов и директорий используется утилита cp (copy).

У этой утилиты два аргумента:

  • Имя источника (откуда копируем)

  • Имя приемника (куда копируем)

Посмотрим, как эта утилита работает на практике:

cp renamed-file renamed-file-copy

asciinema

Для копирования директории нужно добавить флаг -r (recursive).

Все эти и последующие утилиты работают с файлами и директориями, расположенными в любом месте файловой системы. Поэтому вы всегда можете передать любой путь: touch /tmp/tempfile.

Утилиты для работы с директориями частично отличаются. Создание директории выполняется командой mkdir (make directory):

mkdir my-dir

asciinema

По умолчанию эта команда не создает вложенных директорий:

mkdir one/two/three mkdir: cannot create directory ‘one/two/three’: No such file or directory

asciinema

В такой ситуации придется создавать каждую директорию отдельно. Но есть и другой способ — воспользоваться флагом -p (--parents), который создает директории рекурсивно:

mkdir -p one/two/three

asciinema

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

rm my-dir/ rm: cannot remove 'my-dir/': Is a directory

asciinema

Чтобы не было ошибки, нужно добавить флаг -r (recursion). Он включает режим рекурсивного удаления содержимого директорий. Другими словами, идет просмотр содержимого во всех вложенных директориях и поддиректориях до самого конца:

rm -r my-dir

asciinema

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

Если вы точно уверены, что удалить нужно все, добавьте флаг -f (--force). Этот флаг позволяет игнорировать несуществующие файлы и не запрашивать подтверждение на удаление. В таком случае rm удалит всю директорию без вопросов:

rm -rf one

asciinema

Вопросы для самопроверки

Какой командой создается пустой файл?

  • create

  • cp

  • file

  • touch

Подставьте команду, которая поможет переименовать файл:

____ source.png dest.png

Добавьте флаг, который поможет удалить директорию:

rm ____ mydir

Last modified: 12 June 2024