В предыдущем параграфе мы научились ориентироваться в файловой системе: перемещаться между каталогами (cd), смотреть их содержимое (ls) и определять своё текущее положение (pwd).
В этом параграфе мы познакомимся с файлами и каталогами поближе: научимся создавать собственные файлы и каталоги, а также разберёмся, как ими управлять — копировать, перемещать и удалять.
Ключевые вопросы параграфа
- Как создать файл и каталог?
- Как копировать, перемещать и переименовывать файлы и каталоги?
- Как удалять файлы и каталоги и почему нужно быть осторожным?
- Что такое шаблоны
globи для чего они нужны?
Как создать файл
Ранее мы познакомились с очень важной командой touch, которая позволяет создать пустой файл.
1alice@ubuntu:~$ touch newfile.txt
При помощи команды ls -l мы можем убедиться, что в нашем текущем каталоге действительно появился файл newfile.txt.
1alice@ubuntu:~$ ls -l
2
3-rw-rw-r-- 1 alice alice 0 Oct 13 05:03 newfile.txt
А что, если файл с таким именем уже существует? Команда touch просто обновит время его последнего изменения.
Давайте воспользуемся новой командой stat, для того чтобы это проверить:
1alice@ubuntu:~$ touch newfile.txt
2alice@ubuntu:~$ stat newfile.txt
3
4 File: newfile.txt
5 Size: 0 Blocks: 0 IO Block: 4096 regular empty file
6Device: 253,1 Inode: 524298 Links: 1
7Access: (0664/-rw-rw-r--) Uid: ( 1000/ alice) Gid: ( 1000/ alice)
8Access: 2025-10-13 05:06:07.331938494 +0000
9Modify: 2025-10-13 05:06:07.331938494 +0000
10Change: 2025-10-13 05:06:07.331938494 +0000
11 Birth: 2025-10-13 05:03:40.075421090 +0000
Мы видим, что файл был создан в 05:03 (Birth), а затем изменён — в 05:06 (Modify), когда мы выполнили команду touch во второй раз.
Команда stat очень полезна и показывает подробную информацию о файле или каталоге, такую как метки времени, номер inode, тип файла и другие его свойства.
|
Поле |
Что показывает |
|
File |
Имя файла |
|
Size |
Размер файла в байтах |
|
Blocks |
Количество выделенных блоков на диске |
|
Inode |
Уникальный номер объекта в файловой системе |
|
Access (права) |
Права доступа к файлу |
|
UID/GID |
Владельца файла (пользователя и группу) |
|
Access (atime) |
Когда файл в последний раз открывали для чтения |
|
Modify (mtime) |
Когда изменяли содержимое файла |
|
Change (ctime) |
Когда изменялись метаданные файла (права, имя, владелец) |
|
Birth |
Когда файл был создан (не все файловые системы поддерживают) |
Команда touch — это не единственный метод создания файла, и на самом деле мы уже встречали ещё один:
1alice@ubuntu:~$ echo "Hello" > hello.txt
Перенаправляя вывод (>), мы тоже можем создать файл, если его не существует. Но отличие от touch в том, что мы ещё и записываем в файл данные — не создаём его пустым.
Как и у многих других команд, у команды touch есть опции, с которыми можно познакомиться при помощи touch --help. Но мы остановимся на самой используемой из них, которая позволяет задавать произвольное время изменения файла, — touch -d:
1alice@ubuntu:~$ touch -d "2025-01-01 00:00" newfile.txt
Посмотрим на файл ещё раз:
1alice@ubuntu:~$ stat newfile.txt
2
3 File: newfile.txt
4 Size: 0 Blocks: 0 IO Block: 4096 regular empty file
5Device: 253,1 Inode: 524298 Links: 1
6Access: (0664/-rw-rw-r--) Uid: ( 1000/ alice) Gid: ( 1000/ alice)
7Access: 2025-01-01 00:00:00.000000000 +0000
8Modify: 2025-01-01 00:00:00.000000000 +0000
9Change: 2025-10-13 05:46:58.502080204 +0000
10 Birth: 2025-10-13 05:03:40.075421090 +0000
Мы видим, что время доступа (Access) atime и изменения содержимого (Modify) mtime установлено на заданную нами дату — 2025-01-01.
Однако время изменения метаданных (Change) ctime показывает текущие время и дату.
Это связано с тем, что touch -d изменяет метаданные файла (inode), записывая в них новые значения времени.
А любое изменение метаданных — даже установка «старых» значений времени — считается действием, поэтому ctime всегда обновляется на текущее время выполнения команды.
Стоит заметить, что команда touch только на первый взгляд кажется простой. Но она используется во множестве сценариев: например, в системах сборки программного обеспечения, где важно время последнего изменения файлов, или в автоматизации и скриптах, где touch помогает «помечать» этапы выполнения скриптов, выставляя время изменения, чтобы заставить систему обработать файл без его реального изменения.
Допустим, вы запускаете долгую обработку данных и хотите, чтобы в конце скрипт создавал «флажок» — файл done.flag, по которому другие процессы поймут, что работа завершена:
1# обработка данных...
2touch done.flag
Такой приём используется во множестве автоматизированных систем — от CI/CD до систем сборки кода, где время последнего изменения файлов определяет, нужно ли что-то пересобирать сначала.
А команда touch -d позволяет подобные сценарии тестировать, выставляя необходимое время изменения на файле done.flag. Это помогает запускать другие процессы без прогона перед этим всего скрипта.
Как создать каталог
Для создания каталога используется команда mkdir — сокращение от make directory:
1alice@ubuntu:~$ mkdir myfolder
После выполнения команда ls покажет, что в текущем каталоге появился новый каталог — myfolder.
Важно: если вы создаёте каталоги с пробелами в названии, заключайте путь в кавычки.
1mkdir "My Projects"
Но если нам нужна более сложная структура из папок, мы можем создать сразу несколько вложенных каталогов при помощи опции -p:
1alice@ubuntu:~$ mkdir -p projects/2025/january
Команда mkdir -p создаст всю цепочку каталогов, даже если промежуточные папки ещё не существуют.
Без этой опции mkdir выдаст ошибку, если родительский каталог отсутствует.
1mkdir: cannot create directory ‘projects/2025/january’: No such file or directory
Как и у файлов, у каталогов есть свои временные метки — и мы также можем увидеть их командой stat и даже изменить командой touch.
1alice@ubuntu:~$ touch myfolder
1alice@ubuntu:~$ stat myfolder
2
3 File: myfolder
4 Size: 4096 Blocks: 8 IO Block: 4096 directory
5Device: 253,1 Inode: 524306 Links: 2
6Access: (0775/drwxrwxr-x) Uid: ( 1000/ alice) Gid: ( 1000/ alice)
7Access: 2025-10-13 06:41:19.061064443 +0000
8Modify: 2025-10-13 06:41:19.061064443 +0000
9Change: 2025-10-13 06:41:19.061064443 +0000
10 Birth: 2025-10-13 06:41:11.586997527 +0000
В Linux каталог — это файл особого типа, который хранит список имён и номеров inode, указывающих на другие файлы и каталоги.
Поэтому каталоги имеют те же свойства, что и обычные файлы: права доступа, владельца, временные метки и собственный inode.
touch используется для создания файлов, а mkdir — для создания каталогов. Эти команды помогают быстро подготовить файловую структуру для работы.
Копирование, перемещение и переименование
Мы научились создавать файлы и каталоги, а теперь разберёмся, как их копировать, перемещать и переименовывать.
Эти операции часто используются вместе и помогают поддерживать порядок в файловой системе.
Копирование
Команда cp создаёт копию файла или каталога.
При копировании исходный объект остаётся без изменений, а новая копия объекта появляется в указанном месте.
1alice@ubuntu:~$ cp file.txt backup.txt
Команда создаёт новый файл backup.txt с тем же содержимым, что и file.txt.
В качестве аргумента мы можем указать каталог, и тогда новый файл появится в нём с тем же именем:
1alice@ubuntu:~$ cp file.txt ~/Documents
2# создаст файл ~/Documents/file.txt
Помимо файлов, мы можем копировать и каталоги целиком, и используется для этого опция -r (или --recursive):
1alice@ubuntu:~$ cp -r Documents/ Backup/
Опция -r означает рекурсивное копирование, то есть cp обходит все подкаталоги и файлы внутри, копируя их по цепочке.
Без этой опции команда сможет скопировать только файл, но не каталог.
1alice@ubuntu:~$ cp Documents/ Backup/
2cp: -r not specified; omitting directory 'Documents/'
Помимо -r, у команды cp есть и другие полезные в работе опции:
-v(англ. verbose) — показывает, что именно копируется;-i(англ. interactive) — запрашивает подтверждение перед перезаписью уже существующего файла;-u(англ. update) — копирует файл, только если исходный файл новее (то есть время его последнего измененияmtimeболее позднее), чем уже существующий файл.
Опция -u особенно полезна для резервного копирования: она копирует только те файлы, которые были изменены с момента последнего копирования. Это позволяет быстро обновлять вашу резервную копию файлов без дублирования уже существующих данных.
Перемещение или переименование
Команда mv (англ. move) используется для перемещения и переименования файлов и каталогов.
Она перемещает объект в новое место, а если в качестве нового пути указано другое имя — просто меняет имя файла.
Это как команда «вырезать и вставить» в графических файловых менеджерах: файл перемещается, а не дублируется.
Переименование файла выглядит следующим образом:
1alice@ubuntu:~$ mv oldname.txt newname.txt
Файл остаётся в том же каталоге, но получает новое имя.
Это эквивалентно функции «переименовать файл» в графическом интерфейсе.

Но если мы укажем в качестве аргумента каталог, файл будет перемещён в него:
1alice@ubuntu:~$ mv report.txt ~/Documents/
2# появится файл ~/Documents/report.txt
Важно: если в целевом каталоге уже существует файл с таким именем, он будет заменён без предупреждения.
Как же команда mv понимает, когда ей нужно переместить файл, а когда — переименовать?
Команда mv анализирует второй аргумент (целевой путь) и действует по-разному, в зависимости от того, существует ли он и что он собой представляет:
- если второй аргумент — существующий каталог, файл или каталог перемещается внутрь него;
- если второй аргумент — существующий файл, он заменяется новым содержимым;
- если второй аргумент — несуществующий путь и это просто имя (например,
newname.txt), выполняется переименование; - если же путь содержит несуществующий каталог (
Backups/file.txt) — будет ошибка, потому чтоmvне создаёт каталоги.
Давайте посмотрим на примере. У нас есть следующая структура:
1~
2├── file.txt
3└── Documents
4 └── file.txt
1# 1) Перемещение файла с указанием полного пути — заменит существующий файл в каталоге Documents
2mv ~/file.txt Documents/file.txt
3
4# 2) Перемещение файла в каталог Documents — файл окажется внутри каталога и заменит существующий
5mv ~/file.txt Documents
6
7# 3) Каталог Backups не существует — файл будет переименован в Backups
8mv ~/file.txt Backups
9
10# 4) Каталог Backups не существует, а путь содержит подкаталог — ошибка
11mv ~/file.txt Backups/file.txt
12# mv: cannot move '~/file.txt' to 'Backups/file.txt': No such file or directory
13
mv никогда не создаёт каталоги автоматически. Он лишь перемещает или переименовывает, в зависимости от текущего состояния файловой системы.
Давайте подытожим по командам mv и cp:
|
Команда |
Назначение |
Исходный объект остаётся? |
Создаётся копия? |
Что происходит с метаданными (владелец, права, время) |
Типичные случаи использования |
|
cp |
Копирует файл или каталог |
Да |
Да |
По умолчанию часть метаданных может измениться (например, время и владелец). При копировании с флагом |
Создание резервных копий, шаблонов, дубликатов файлов или каталогов |
|
mv |
Перемещает или переименовывает файл или каталог |
Нет |
Нет |
Метаданные сохраняются полностью, так как объект не копируется, а перемещается |
Перенос файлов между каталогами, организация структуры, переименование |
Нюанс
При перемещении в пределах одной файловой системы команда mv просто меняет запись о местоположении файла. Сам файл при этом не копируется, а значит, сохраняет владельца, права и время. Но если вы перемещаете между разными дисками или разделами, фактически происходит копирование с последующим удалением исходного файла.
Давайте попробуем составить команду для копирования каталога projects/ в каталог backups/ целиком:
Удаление файлов и каталогов
После того как мы научились создавать, копировать и перемещать файлы, остаётся понять, как от них избавляться.
Для этого в Linux используется команда rm (англ. remove), которая удаляет файлы и каталоги.
Самый простой случай — удалить обычный файл:
1alice@ubuntu:~$ rm file.txt
Файл file.txt будет удалён безвозвратно.
После выполнения rm данные становятся недоступны для системы. Восстановить их можно только специальными средствами низкоуровневого восстановления — утилитами, которые напрямую читают содержимое диска, минуя файловую систему. Обычными средствами Linux вернуть удалённый файл невозможно.
По умолчанию rm не удаляет каталоги, чтобы избежать случайного удаления их содержимого.
Чтобы удалить каталог и всё, что находится внутри него, нужно использовать опцию -r (или --recursive):
1alice@ubuntu:~$ rm -r myfolder
Команда рекурсивно обходит каталог и удаляет все вложенные файлы и подкаталоги.
После этого сам каталог myfolder также исчезает.
Иногда полезно добавить защиту от ошибок. Опция -i заставляет rm запрашивать подтверждение перед удалением каждого файла:
1alice@ubuntu:~$ rm -i file.txt
2rm: remove regular file 'file.txt'? <y>
Для подтверждения удаления необходимо ввести y или yes и нажать клавишу Enter.
Эта же логика сохранится и при рекурсивном удалении, для каждого файла или каталога будет запрашиваться подтверждение:
1alice@ubuntu:~$ rm -ri myfolder
2rm: descend into directory 'myfolder'? <y>
3rm: remove regular file 'myfolder/file1.txt'? <y>
Опция -r говорит команде рекурсивно обходить каталог и удалять всё внутри. Но rm -r всё ещё может остановиться с ошибкой в некоторых случаях:
- если файл защищён от записи (нет прав на удаление);
- если файла или каталога не существует;
- если владелец — другой пользователь (и вы не являетесь администратором системы или
root); - если используется
alias rm='rm -i'в вашей оболочке (а он может быть включён в некоторых дистрибутивах Linux); - если файлов очень много и процесс прерывается ошибкой на одном из них.
В этих ситуациях rm -r выдаст сообщения вроде:
1rm: remove write-protected regular file 'important.txt'?
2rm: cannot remove 'old_backup/logs': Permission denied
3rm: cannot remove 'temp': No such file or directory
— и остановится или попросит дополнительное подтверждение.
В таких случаях мы можем использовать опцию -f — она делает команду rm максимально бескомпромиссной:
- не запрашивает подтверждение, даже если файл защищён от удаления;
- не выдаёт ошибок, если файла или каталога не существует;
- игнорирует алиасы типа
rm -i; - продолжает удаление, даже если встречает проблемы с правами (в пределах возможного).
Сравним запуск команды без опции -f и с ней:
1alice@ubuntu:~$ rm -r protected/
2rm: remove write-protected regular file 'protected/conf.txt'?
1alice@ubuntu:~$ rm -rf protected/
2# ничего не спрашивает, просто удаляет
Опция -f особенно важна в скриптах и автоматизации, где получить подтверждение от пользователя невозможно.
Команда rm — мощный инструмент, который требует внимания и дисциплины. В Linux нет встроенной корзины на уровне всей системы: всё, что удалено через rm, исчезает сразу и безвозвратно.
Поэтому запомните:
- Всегда проверяйте путь перед использованием
rm -r <путь>илиrm -rf <путь>. Наберитеls <путь>и убедитесь, что это именно тот каталог, который вы хотите удалить. - Не запускайте команду от суперпользователя:
sudo rm -rf /— это приведёт к полному удалению всех файлов в системе и к её неработоспособности. - Если сомневаетесь — используйте
-iили создайте резервную копию при помощи командыcp.
Давайте проверим, как вы разобрались с управлением файлами и каталогами:
Шаблоны glob
В терминале часто нужно работать сразу с несколькими файлами.
Например, удалить все .tmp, скопировать все .txt или вывести список всех логов или журналов.
Чтобы работать сразу с несколькими файлами, оболочка использует механизм глоббинга (англ. globbing) — автоматическую подстановку имён файлов по шаблонам glob.
Эти шаблоны позволяют выбирать несколько файлов по имени, не указывая их вручную.
Часто используемые шаблоны выглядят так:
|
Шаблон |
Что выбирает |
Пример |
Совпадения |
|
|
Любое количество символов (включая ноль) |
|
Все файлы, заканчивающиеся на |
|
|
Ровно один любой символ |
|
|
|
|
Любой символ из набора или диапазона |
|
|
Например, мы можем удалить все файлы .txt при помощи команды:
1alice@ubuntu:~$ rm *.txt
Или скопировать все файлы, которые начинаются с data:
1alice@ubuntu:~$ cp data* backup/
Или даже показать все текстовые файлы, имена которых состоят ровно из пяти символов:
1alice@ubuntu:~$ ls ?????.txt
Важно понимать, что шаблоны обрабатывает сама оболочка (shell) — ещё до того, как команда (ls, rm, cp) вообще запустится.
То есть когда вы пишете:
1ls *.txt
— на самом деле оболочка сначала разворачивает *.txt в список файлов. Например:
1ls report.txt notes.txt todo.txt
И уже эту команду выполняет ls.
Поэтому глоббинг — это не функция команды, а механизм самой оболочки.
Важно: глоббинг не видит «скрытые» файлы (начинающиеся с .), если шаблон не указан явно, например * не совпадёт с .bashrc.
Давайте проверим, насколько хорошо вы разобрались с шаблонами glob:
Что дальше
Теперь, когда вы научились создавать, копировать, перемещать и удалять файлы и каталоги, пора перейти к следующей теме — просмотру содержимого файлов и работе с текстом в терминале.
В следующем параграфе вы узнаете:
- Как вывести содержимое файла на экран.
- Как посмотреть только начало или конец файла.
- Как следить за обновлением логов в реальном времени.
- Как работать с архивами файлов.
После этого вы сможете уверенно работать с любыми текстовыми файлами в Linux — просматривать их, анализировать, искать нужные строки и наблюдать за изменениями в реальном времени.
А пока закрепите материал на практике:
- Отметьте, что урок прочитан, при помощи кнопки ниже.
- Пройдите мини-квиз, чтобы проверить, насколько хорошо вы разобрались с управлением файлами и каталогами.
- Перейдите к задачам этого параграфа и потренируйтесь.
- Перед этим — загляните в короткий гайд о том, как работает система проверки.
Ключевые выводы по параграфу
- При помощи команды
touchможно создать пустой файл или обновить время его изменения. - Команда
mkdirсоздаёт новый каталог, а с опцией-p— цепочку вложенных каталогов. - Команда
statпозволяет получить подробную информацию о метаданных файла, включая его размер,inode, временные метки. - Команда
cpсоздаёт копию файла или каталога, командаmvиспользуется для перемещения или переименования файлов или каталогов. - При помощи команды
rmможно удалить файл или каталог безвозвратно. Используйте её с осторожностью, так как в Linux нет системной корзины: файлы нельзя будет восстановить стандартными средствами после удаления. - Шаблоны
*,?,[ ]позволяют работать с группой файлов.
