Основные операции с файлами в Linux

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

Введение

Linux организует данные в виде дерева каталогов и файлов. Команды работают с объектами этого дерева, поэтому надёжная работа с файлами начинается с трёх вопросов: где я нахожусь? что находится здесь? какой путь указывает на нужный мне объект?

В этой лабораторной работе вы постепенно разберёте эти понятия в каталоге /home/labex/project/file-basics. Вы будете перемещаться по абсолютным и относительным путям, просматривать видимые и скрытые элементы, создавать файлы и каталоги, выбирать имена с помощью подстановочных символов, а также безопасно копировать, перемещать и удалять учебные файлы. В последнем шаге вы познакомитесь с сочетаниями клавиш терминала, которые ускоряют эти операции, не меняя их смысла.

Определите рабочий каталог

На этом шаге вы свяжете приглашение терминала с каталогом, в котором выполняются команды.

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

cd /home/labex/project/file-basics

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

Выведите текущий рабочий каталог:

pwd

Вы должны увидеть:

/home/labex/project/file-basics

Сохраните этот путь как подтверждение. Оператор > перенаправляет вывод в starting-location.txt; поскольку вывод записывается в файл, на этот раз он не отображается в терминале:

pwd > starting-location.txt

Прочитайте файл и проверьте, что было сохранено:

cat starting-location.txt

На экране терминала и в файле должен отображаться один и тот же абсолютный путь.

Перемещайтесь с помощью относительных путей

На этом шаге вы будете перемещаться между соседними каталогами с помощью относительных путей и специальных имён . и ...

При необходимости снова перейдите в рабочий каталог:

cd /home/labex/project/file-basics

Выведите его видимые элементы:

ls

Вы должны увидеть path-map и starting-location.txt. Перейдите в path-map с помощью относительного пути — пути, который интерпретируется относительно текущего каталога:

cd path-map
pwd

Теперь перейдите в north и прочитайте файл со справочной информацией:

cd north
cat reference.txt

Команда выведет north reference. Имя .. обозначает родительский каталог — каталог на один уровень выше текущего:

cd ..

Перейдите из path-map в его дочерний каталог south:

cd south
cat reference.txt

Имя . обозначает текущий каталог. Сохраните текущий абсолютный путь в корне лабораторной работы, объединив pwd с относительным путём назначения, который поднимается на два уровня:

pwd > ../../relative-location.txt

Вернитесь непосредственно в корень лабораторной работы по его абсолютному пути:

cd /home/labex/project/file-basics
cat relative-location.txt

Сохранённый путь должен заканчиваться на /path-map/south. Вы использовали и перемещение по относительному пути, и возврат по абсолютному пути.

Просмотрите содержимое каталога

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

Выполните обычный список содержимого в корне лабораторной работы:

cd /home/labex/project/file-basics
ls

Обычно Linux скрывает имена, начинающиеся с точки. Параметр -a означает «все» и добавляет такие элементы в список:

ls -a

Теперь вы должны увидеть .practice-note, а также . — текущий каталог — и .. — его родительский каталог.

Параметр -l выводит подробный список с правами доступа, владельцем, размером, временем и именем:

ls -l

Объедините параметры и просмотрите все элементы в подробном формате:

ls -la

Каждая строка вывода начинается с поля типа и прав доступа. Символ d в начале обозначает каталог, а символ - в начале — обычный файл. Права доступа подробно рассматриваются в другой лабораторной работе.

Сохраните имена, включая скрытые элементы. В этом контролируемом рабочем пространстве ls уже выводит их в алфавитном порядке, поэтому пока не нужна дополнительная команда сортировки:

ls -A > all-names.txt

В отличие от -a, параметр -A не включает специальные элементы . и .., но сохраняет остальные скрытые имена. Выведите результат:

cat all-names.txt

В списке должны быть .practice-note, path-map и файлы, созданные на предыдущих шагах.

Создайте каталоги и файлы

На этом шаге вы создадите небольшое дерево проекта и запишете текст в обычные файлы.

Команда mkdir создаёт каталог. Её параметр -p также создаёт отсутствующие родительские каталоги, поэтому одной командой можно построить вложенный путь:

cd /home/labex/project/file-basics
mkdir -p workspace/docs workspace/logs

Эта команда создаёт workspace, а внутри него — дочерние каталоги docs и logs. Проверьте результат:

find workspace -maxdepth 2 -type d

Команда touch создаёт пустой файл, если файла с таким именем ещё нет. Создайте сразу два файла:

touch workspace/docs/guide.txt workspace/logs/app.log

Запишите содержимое в файл руководства. Одинарный > заменяет содержимое назначения выводом команды:

echo "Linux file practice" > workspace/docs/guide.txt

Добавьте вторую строку с помощью >>, сохранив уже существующее содержимое:

echo "Paths make locations predictable" >> workspace/docs/guide.txt

Прочитайте файл полностью:

cat workspace/docs/guide.txt

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

Выбирайте имена с помощью подстановочных символов

На этом шаге вы создадите группы файлов и выберете их по шаблонам имён.

Перейдите в каталог logs:

cd /home/labex/project/file-basics/workspace/logs

Раскрытие фигурных скобок формирует несколько буквальных имён до запуска команды. Создайте пронумерованные журналы:

touch app{1..3}.log worker{1..2}.log notes.txt

Оболочка раскрывает {1..3} в 1 2 3, поэтому app{1..3}.log превращается в три аргумента.

Подстановочный символ работает иначе: он сопоставляется с уже существующими именами. Символ * соответствует любой последовательности символов:

ls *.log

В выводе будут все имена, заканчивающиеся на .log, но не notes.txt.

Подстановочный символ ? соответствует ровно одному символу. Выведите только пронумерованные журналы app:

ls app?.log

Оболочка раскрывает шаблоны имён файлов в алфавитном порядке. Команда printf выводит каждое полученное имя на отдельной строке, а > сохраняет эти строки:

printf '%s\n' *.log > matched-logs.txt
cat matched-logs.txt

В сохранённом списке должны быть app.log, app1.log, app2.log, app3.log, worker1.log и worker2.log. Если заключить *.log в кавычки, раскрытие подстановочного символа не произойдёт, поэтому здесь шаблон намеренно указан без кавычек.

Безопасно копируйте, перемещайте и удаляйте файлы

На этом шаге вы сравните действие команд cp, mv и rm, прежде чем использовать их в следующем задании.

Вернитесь в каталог workspace:

cd /home/labex/project/file-basics/workspace

Команда cp SOURCE DESTINATION создаёт ещё один файл, оставляя исходный на месте. Создайте резервную копию руководства:

cp docs/guide.txt docs/guide-backup.txt

Убедитесь, что содержимое двух файлов одинаково. Команда cmp сравнивает два файла побайтно. Если файлы совпадают, команда ничего не выводит; сообщение об ошибке означало бы, что они различаются:

cmp docs/guide.txt docs/guide-backup.txt

Команда mv SOURCE DESTINATION перемещает или переименовывает объект. Переместите резервную копию в корень workspace и дайте ей более понятное имя:

mv docs/guide-backup.txt archived-guide.txt

Выведите содержимое обоих расположений:

ls docs
ls

Вы должны увидеть guide.txt в каталоге docs и archived-guide.txt в текущем каталоге.

Команда rm безвозвратно удаляет указанный файл; обычно в терминале нет корзины. Удалите только ненужный файл с заметками:

rm logs/notes.txt

Снова выведите содержимое каталога, чтобы увидеть результат удаления:

ls logs

notes.txt больше не должен отображаться. Исходное руководство и его перемещённая копия остаются доступными, а явно указанный ненужный файл удалён.

Работайте быстрее с помощью сочетаний клавиш терминала

На этом шаге вы потренируетесь использовать четыре сочетания клавиш терминала, которые сокращают ввод и помогают остановить выполняющуюся команду.

Сначала перейдите в каталог документов:

cd /home/labex/project/file-basics/workspace/docs

Выполните команду, которую вы будете использовать снова:

cat guide.txt

Нажмите стрелку вверх (Up Arrow) один раз. Предыдущая команда cat guide.txt должна снова появиться в приглашении оболочки. Нажмите Enter, чтобы выполнить её повторно. История команд избавляет от повторного ввода и позволяет отредактировать восстановленную строку перед выполнением.

Затем введите cat g, не нажимая Enter, и нажмите Tab. Поскольку этому шаблону соответствует только guide.txt, оболочка должна автоматически дополнить имя файла. Нажмите Enter, чтобы выполнить дополненную команду.

Теперь запустите команду, которая будет непрерывно ожидать данные:

tail -f /dev/null

Команда tail -f следит за файлом и ожидает новые данные. /dev/null не предоставляет полезных строк, поэтому команда выглядит так, будто молча бездействует. Нажмите Ctrl+C, чтобы отправить прерывание и вернуться к приглашению. Это стандартная первая реакция, когда нужно остановить выполняющуюся на переднем плане команду.

Нажмите Ctrl+L, чтобы очистить старый вывод с видимой области экрана. Как и clear, эта комбинация не удаляет файлы и историю команд.

После возвращения к приглашению создайте файл-маркер завершения:

echo "Shortcuts practiced" > /home/labex/project/file-basics/shortcuts-complete.txt
cat /home/labex/project/file-basics/shortcuts-complete.txt

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

Итоги

Вы узнали, как рабочий каталог и пути управляют операциями с файлами. Вы перемещались по абсолютным и относительным путям, просматривали скрытые элементы и метаданные, создавали дерево каталогов и текстовые файлы, выбирали имена с помощью подстановочных символов, а также сравнивали копирование, перемещение и безвозвратное удаление. Кроме того, вы потренировались восстанавливать команды из истории, использовать автодополнение по Tab, сочетания Ctrl+C и Ctrl+L. В следующей лабораторной работе вы узнаете, как находить надёжную справочную информацию, когда встречаете незнакомую команду или параметр.