Введение
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. В следующей лабораторной работе вы узнаете, как находить надёжную справочную информацию, когда встречаете незнакомую команду или параметр.



