Файловую структуру можно не только просматривать, но и всячески модифицировать. В прошлом уроке мы научились создавать файлы через перенаправление потоков, а сейчас обсудим, как это делать напрямую.
Учтите, что возможность модифицировать файловую структуру завязана на правах пользователя. Если у вас нет соответствующих прав, вы получите ошибку доступа. Место, где вы гарантированно можете экспериментировать — ваша домашняя директория. Внутри нее все доступно на запись.
Для примеров этого урока мы создали каталог test
в домашней директории. То есть все демонстрируемые команды выполняются в директории по адресу: ~/test
.
Основные команды
Для создания файлов принято использовать утилиту touch
. Основная задача этой утилиты — поменять время последнего доступа к файлу, но она обладает побочным эффектом.
Если файла не существует, то он будет создан — именно поэтому ее используют для создания файлов, хотя это не основное предназначение:
# В текущей директории создается пустой файл
touch empty-file
Удалить файл можно командой rm
(сокращение от remove):
rm empty-file
В *nix-системах не существует понятия «переименовать файл». Переименование всегда равносильно перемещению, которое выполняется командой mv
(move):
touch file
mv file renamed-file
Для копирования файлов и директорий используется утилита cp
(copy).
У этой утилиты два аргумента:
- Имя источника (откуда копируем)
- Имя приемника (куда копируем)
Посмотрим, как эта утилита работает на практике:
cp renamed-file renamed-file-copy
Для копирования директории нужно добавить флаг -r
(recursive).
Все эти и последующие утилиты работают с файлами и директориями, расположенными в любом месте файловой системы. Поэтому вы всегда можете передать любой путь: touch /tmp/tempfile
.
Утилиты для работы с директориями частично отличаются. Создание директории выполняется командой mkdir
(make directory):
mkdir my-dir
По умолчанию эта команда не создает вложенных директорий:
mkdir one/two/three
mkdir: cannot create directory ‘one/two/three’: No such file or directory
В такой ситуации придется создавать каждую директорию отдельно. Но есть и другой способ — воспользоваться флагом -p
(--parents
), который создает директории рекурсивно:
mkdir -p one/two/three
Удаление директорий выполняется той же командой, что и удаление файлов, но без флагов оно выдает предупреждение:
rm my-dir/
rm: cannot remove 'my-dir/': Is a directory
Чтобы не было ошибки, нужно добавить флаг -r
(recursion). Он включает режим рекурсивного удаления содержимого директорий. Другими словами, идет просмотр содержимого во всех вложенных директориях и поддиректориях до самого конца:
rm -r my-dir
Теперь представим такую ситуацию: внутри директории содержатся файлы или директории с ограниченными правами доступа, например, доступные только для чтения. В таком случае команда rm
начнет задавать вопрос по каждому из них, нужно ли удалять файл.
Если вы точно уверены, что удалить нужно все, добавьте флаг -f
(--force
). Этот флаг позволяет игнорировать несуществующие файлы и не запрашивать подтверждение на удаление. В таком случае rm
удалит всю директорию без вопросов:
rm -rf one
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты