Управление файлами в Red Hat Enterprise Linux

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

Введение

В этой лабораторной работе вы получите практический опыт управления файлами и каталогами с использованием основных инструментов командной строки в среде RHEL. Вы научитесь исследовать текущее местоположение и выводить содержимое с помощью pwd и ls, перемещаться по каталогам и создавать файлы с помощью cd и touch, а также эффективно организовывать файлы и каталоги с помощью mkdir, cp, mv и rm.

Кроме того, вы узнаете, как создавать ссылки между файлами с помощью ln (как жесткие, так и символические ссылки) и эффективно выбирать файлы с помощью расширений оболочки, что даст вам фундаментальные навыки управления файлами в командной строке.

Исследуйте текущее местоположение и выведите содержимое с помощью pwd и ls

На этом этапе вы научитесь исследовать свое текущее местоположение в файловой системе и выводить ее содержимое с помощью команд pwd и ls. Понимание текущего рабочего каталога и возможность просмотра его содержимого являются фундаментальными навыками для навигации и управления файлами из командной строки.

Сначала определим ваш текущий рабочий каталог с помощью команды pwd. pwd означает "print working directory" (вывести рабочий каталог) и отображает полное имя пути вашего текущего местоположения в файловой системе.

pwd

Вы должны увидеть вывод, похожий на этот, указывающий ваш текущий каталог:

/home/labex

Далее вы используете команду ls для вывода содержимого вашего текущего каталога. ls означает "list" (список) и выводит содержимое каталога для указанного каталога или, если каталог не указан, для текущего рабочего каталога.

ls

Вы должны увидеть вывод, показывающий содержимое вашего домашнего каталога:

project

Команда ls имеет несколько полезных опций для отображения дополнительной информации о файлах и каталогах.

  1. Опция -l (long listing format - формат длинного списка) предоставляет подробную информацию о каждом файле и каталоге, включая права доступа, количество жестких ссылок, владельца, группу, размер и время последнего изменения.

    ls -l
    

    Вы должны увидеть вывод, похожий на этот:

    total 0
    drwxr-xr-x 2 labex labex 6 Aug 27  2024 project
    
  2. Опция -a (all files - все файлы) выводит все файлы, включая скрытые. В Linux имена файлов, начинающиеся с точки (.), считаются скрытыми. Кроме того, . ссылается на текущий каталог, а .. ссылается на родительский каталог.

    ls -a
    

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

    .  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .tmux.conf  project
    
  3. Комбинация -l и -a как -la дает длинный список всех файлов, включая скрытые.

    ls -la
    

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

    total 20
    drwx------ 1 labex labex  72 Jun  4 03:12 .
    drwxr-xr-x 1 root  root   19 Aug 27  2024 ..
    -rw------- 1 labex labex  31 Jun  4 03:13 .bash_history
    -rw-r--r-- 1 labex labex  18 Feb 15  2024 .bash_logout
    -rw-r--r-- 1 labex labex 141 Feb 15  2024 .bash_profile
    -rw-r--r-- 1 labex labex 877 Jun  4 03:12 .bashrc
    -rw-r--r-- 1 labex labex  68 Aug 27  2024 .tmux.conf
    drwxr-xr-x 2 labex labex   6 Aug 27  2024 project
    
  4. Опция -R (recursive - рекурсивно) рекурсивно выводит содержимое всех подкаталогов. Чтобы продемонстрировать это, сначала создадим подкаталог.

    mkdir mydir
    

    Теперь используйте ls -R для просмотра рекурсивного списка.

    ls -R
    

    Вы должны увидеть списки каталогов mydir и project, за которыми следует их содержимое:

    .:
    mydir  project
    
    ./mydir:
    
    ./project:
    

    Наконец, удалим каталог mydir, чтобы очистить среду для следующих шагов.

    rmdir mydir
    

    Эта команда работает только для пустых каталогов. Вы узнаете больше о rmdir и rm на следующем шаге.

Пример вывода ls в командной строке

Перемещение по каталогам и создание файлов с помощью cd и touch

На этом этапе вы научитесь изменять текущий рабочий каталог с помощью команды cd и создавать пустые файлы с помощью команды touch. Эти команды необходимы для эффективной организации файлов и навигации по файловой системе.

Сначала проверим ваше текущее местоположение и перейдем в каталог project, который был показан на шаге 1.

pwd

В качестве вывода вы должны увидеть /home/labex (ваш домашний каталог).

Теперь перейдем в каталог project с помощью команды cd:

cd project

Проверим ваше новое местоположение:

pwd

Теперь в качестве вывода вы должны увидеть /home/labex/project.

Теперь создадим новый каталог с именем documents внутри вашего текущего каталога project. Вы будете использовать команду mkdir, с которой вы кратко познакомились на предыдущем шаге.

mkdir documents

Проверим, что каталог documents был создан:

ls

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

Далее вы используете команду cd, чтобы изменить текущий рабочий каталог вашей оболочки на только что созданный каталог documents.

cd documents

После смены каталога хорошей практикой является подтверждение вашего нового местоположения с помощью pwd:

pwd

Вывод теперь должен быть /home/labex/project/documents.

Команда cd предлагает несколько удобных опций для навигации:

  1. cd -: Эта команда переключает вас в предыдущий каталог, в котором вы находились. Давайте попробуем.

    cd -
    

    Вы должны вернуться в /home/labex/project. Проверьте с помощью pwd:

    pwd
    

    Теперь снова используйте cd -, чтобы вернуться в /home/labex/project/documents:

    cd -
    

    И проверьте с помощью pwd:

    pwd
    
  2. cd ..: Эта команда использует скрытый каталог .. (две точки) для перехода на один уровень вверх к родительскому каталогу, без необходимости знать точное имя родителя.

    cd ..
    

    Теперь вы должны находиться в /home/labex/project. Проверьте с помощью pwd:

    pwd
    

    Вы можете использовать цепочку .. для перехода на несколько уровней вверх. Например, чтобы перейти в /home/labex из /home/labex/project:

    cd ../
    

    Проверьте ваше местоположение:

    pwd
    

    Вы должны находиться в /home/labex.

  3. cd (без аргументов): Эта команда всегда вернет вас в ваш домашний каталог, который для пользователя labex является /home/labex.

    cd
    

    Проверьте ваше местоположение:

    pwd
    

    Вы должны находиться в /home/labex.

Теперь вернемся в ваш каталог ~/project/documents, чтобы создать некоторые файлы.

cd ~/project/documents

Проверьте ваше местоположение:

pwd

Вывод должен быть /home/labex/project/documents.

Теперь вы будете использовать команду touch. Команда touch обновляет временную метку файла до текущей даты и времени, не изменяя его иным образом. Эта команда также очень полезна для создания пустых файлов.

Создадим два пустых файла с именами report.txt и notes.txt в каталоге ~/project/documents.

touch report.txt notes.txt

Проверим, были ли созданы файлы, с помощью ls -l:

ls -l

Вы должны увидеть вывод, похожий на этот, показывающий недавно созданные файлы:

total 0
-rw-rw-r--. 1 labex labex 0 Mar  7 HH:MM report.txt
-rw-rw-r--. 1 labex labex 0 Mar  7 HH:MM notes.txt

Наконец, создадим новый каталог с именем drafts внутри ~/project/documents, а затем создадим в нем файл.

mkdir drafts
cd drafts
touch draft_v1.txt

Проверим создание файла:

ls -l

Вы должны увидеть draft_v1.txt в списке.

Теперь вернитесь в ваш каталог ~/project с помощью одной команды cd.

cd ~/project

Проверьте ваше местоположение:

pwd

Вывод должен быть /home/labex/project.

Организация файлов и каталогов с помощью mkdir, cp, mv и rm

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

Сначала убедитесь, что вы находитесь в каталоге ~/project.

cd ~/project

Проверьте ваше текущее местоположение:

pwd

Вывод должен быть /home/labex/project.

mkdir: Создание каталогов

Вы уже использовали mkdir для создания одного каталога. Теперь давайте рассмотрим более продвинутые опции mkdir.

Вы можете создать несколько каталогов одновременно, перечислив их в качестве аргументов:

mkdir reports presentations

Проверьте их создание:

ls

Вы должны увидеть documents, presentations и reports в списке.

Опция -p (parents - родительские) команды mkdir очень полезна для создания любых отсутствующих родительских каталогов для запрошенного назначения. Это предотвращает ошибки, если вы попытаетесь создать подкаталог внутри несуществующего родительского каталога.

Создадим вложенную структуру каталогов: projects/alpha/docs.

mkdir -p projects/alpha/docs

Теперь используйте ls -R, чтобы увидеть недавно созданную вложенную структуру:

ls -R projects

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

projects:
alpha

projects/alpha:
docs

projects/alpha/docs:

cp: Копирование файлов и каталогов

Команда cp копирует файлы и каталоги. При копировании файла она создает дубликат либо в текущем каталоге, либо в другом указанном каталоге.

Скопируем report.txt из documents в каталог reports.

cp documents/report.txt reports/

Проверьте копирование, выведя содержимое каталога reports:

ls reports

Вы должны увидеть report.txt в каталоге reports.

Если в целевом каталоге существует файл с таким же именем, cp по умолчанию перезапишет его.

Чтобы скопировать каталог и его содержимое, необходимо использовать опцию -r (recursive - рекурсивно). По умолчанию cp игнорирует каталоги, если -r не указана.

Скопируем весь каталог documents в projects/alpha/.

cp -r documents projects/alpha/

Проверьте рекурсивное копирование:

ls -R projects/alpha/documents

Вы должны увидеть содержимое каталога documents (включая notes.txt, drafts и drafts/draft_v1.txt), которое теперь дублируется внутри projects/alpha/documents.

projects/alpha/documents:
drafts  notes.txt  report.txt

projects/alpha/documents/drafts:
draft_v1.txt

mv: Перемещение и переименование файлов и каталогов

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

Переименуем notes.txt в каталоге documents в meeting_notes.txt.

mv documents/notes.txt documents/meeting_notes.txt

Проверьте переименование:

ls documents

Теперь вы должны увидеть meeting_notes.txt вместо notes.txt.

Теперь переместим report.txt из каталога reports в documents/drafts.

mv reports/report.txt documents/drafts/

Проверьте перемещение:

ls reports

Каталог reports теперь должен быть пустым.

ls documents/drafts

Вы должны увидеть draft_v1.txt и report.txt в каталоге documents/drafts.

Опция -v для mv отображает подробный вывод операций команды, что может быть полезно для подтверждения.

mv -v documents/meeting_notes.txt documents/final_notes.txt

Вы увидите вывод, подобный этому:

renamed 'documents/meeting_notes.txt' -> 'documents/final_notes.txt'

rm: Удаление файлов и каталогов

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

Создадим временный файл для практики использования rm.

touch temp_file.txt

Теперь удалим temp_file.txt:

rm temp_file.txt

Проверьте его удаление:

ls

temp_file.txt больше не должен быть в списке.

По умолчанию rm не удаляет каталоги. Если вы попытаетесь удалить непустой каталог без соответствующей опции, вы получите ошибку.

rm presentations

Вы увидите ошибку:

rm: cannot remove 'presentations': Is a directory

Чтобы удалить каталоги и их содержимое, необходимо использовать опцию -r (recursive - рекурсивно). Команда rm -r сначала обходит каждый подкаталог и индивидуально удаляет его файлы, прежде чем удалить каждый каталог.

Удалим каталог presentations и его содержимое (который в настоящее время пуст, но -r все равно требуется для каталогов).

rm -r presentations

Проверьте его удаление:

ls

presentations больше не должен быть в списке.

Опция -i для rm интерактивно запрашивает подтверждение перед удалением каждого файла. Это хорошая мера безопасности.

Создадим еще несколько временных файлов, а затем удалим их интерактивно.

touch file1.txt file2.txt
rm -i file1.txt file2.txt

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

rm: remove regular empty file 'file1.txt'? y
rm: remove regular empty file 'file2.txt'? y

Введите y и нажмите Enter для каждого запроса, чтобы подтвердить удаление.

Опция -f (force - принудительно) принудительно удаляет без запроса подтверждения у пользователя. Если вы укажете и -i, и -f, приоритет будет иметь -f. Используйте -f с крайней осторожностью.

Наконец, очистим каталог projects.

rm -r projects

Проверьте, что projects удален:

ls

rmdir: Удаление пустых каталогов

Вы также можете использовать команду rmdir для удаления пустых каталогов. Она завершится ошибкой, если каталог не пуст.

Создадим пустой каталог и удалим его с помощью rmdir.

mkdir empty_dir
rmdir empty_dir

Проверьте его удаление:

ls

empty_dir больше не должен быть в списке.

Если вы попытаетесь удалить непустой каталог с помощью rmdir, это не удастся:

mkdir test_dir
touch test_dir/test_file.txt
rmdir test_dir

Вы увидите ошибку:

rmdir: failed to remove 'test_dir': Directory not empty

Помните, что для непустых каталогов следует использовать rm -r.

rm -r test_dir

Создание ссылок между файлами с помощью ln (жесткие и символические ссылки)

На этом этапе вы узнаете о создании ссылок между файлами с помощью команды ln. Файловые системы Linux поддерживают два типа ссылок: жесткие ссылки и символические (или мягкие) ссылки. Понимание различий между ними имеет решающее значение для эффективного управления файлами.

Сначала убедитесь, что вы находитесь в каталоге ~/project.

cd ~/project

Проверьте ваше текущее местоположение:

pwd

Вывод должен быть /home/labex/project.

Создадим новый файл с именем original_file.txt с некоторым содержимым для работы.

echo "This is the content of the original file." > original_file.txt

Проверьте содержимое файла:

cat original_file.txt

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

Вы можете определить, имеет ли файл несколько жестких ссылок, используя команду ls -l. Второй столбец в выводе ls -l показывает количество жестких ссылок на файл.

Изначально original_file.txt имеет одну жесткую ссылку (саму себя):

ls -l original_file.txt

Вы должны увидеть вывод, похожий на этот, где число 1 указывает на одну жесткую ссылку:

-rw-rw-r--. 1 labex labex 35 Mar  7 HH:MM original_file.txt

Теперь создадим жесткую ссылку на original_file.txt с именем hard_link.txt с помощью команды ln.

ln original_file.txt hard_link.txt

Проверьте количество жестких ссылок для обоих файлов:

ls -l original_file.txt hard_link.txt

Теперь вы должны увидеть количество жестких ссылок 2 для обоих файлов, что указывает на то, что они ссылаются на одни и те же данные:

-rw-rw-r--. 2 labex labex 35 Mar  7 HH:MM hard_link.txt
-rw-rw-r--. 2 labex labex 35 Mar  7 HH:MM original_file.txt

Чтобы убедиться, что они указывают на одни и те же данные, вы можете использовать опцию ls -i для вывода номера inode каждого файла. Если файлы находятся в одной файловой системе и их номера inode совпадают, то файлы являются жесткими ссылками, указывающими на одно и то же содержимое файла данных.

ls -i original_file.txt hard_link.txt

Номера inode должны быть идентичны:

1234567 original_file.txt  1234567 hard_link.txt

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

echo "Adding new line." >> hard_link.txt
cat original_file.txt

Вы увидите:

This is the content of the original file.
Adding new line.

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

Удалим original_file.txt:

rm original_file.txt

Теперь попробуем получить доступ к hard_link.txt:

cat hard_link.txt

Вы по-прежнему увидите содержимое:

This is the content of the original file.
Adding new line.

Количество жестких ссылок для hard_link.txt теперь должно быть 1:

ls -l hard_link.txt

Ограничения жестких ссылок:

  • Жесткие ссылки можно использовать только с обычными файлами. Вы не можете использовать команду ln для создания жесткой ссылки на каталог или специальный файл.
  • Жесткие ссылки можно использовать только в том случае, если оба файла находятся в одной файловой системе. Вы можете использовать команду df для вывода списка файловых систем.

Символическая ссылка (также называемая "мягкой ссылкой" или "symlink") — это специальный тип файла, который указывает на другой файл или каталог по его пути. Это похоже на ярлык в Windows. В отличие от жестких ссылок, символические ссылки не указывают напрямую на данные; они указывают на имя целевого файла или каталога.

Создадим новый файл с именем target_file.txt для нашей символической ссылки.

echo "This is the target file for the symbolic link." > target_file.txt

Теперь создадим символическую ссылку с именем sym_link.txt, указывающую на target_file.txt, используя команду ln -s.

ln -s target_file.txt sym_link.txt

Проверим детали символической ссылки с помощью ls -l:

ls -l target_file.txt sym_link.txt

Вы заметите несколько отличий:

  • Первый символ в длинном списке для sym_link.txt — это l (буква l), указывающая, что это символическая ссылка.
  • В выводе показано sym_link.txt -> target_file.txt, явно указывая, на что она ссылается.
  • Размер символической ссылки очень мал (это просто длина целевого пути), а не размер целевого файла.
  • Количество жестких ссылок для sym_link.txt равно 1.
-rw-rw-r--. 1 labex labex 45 Mar  7 HH:MM target_file.txt
lrwxrwxrwx. 1 labex labex 14 Mar  7 HH:MM sym_link.txt -> target_file.txt

Вы можете получить доступ к содержимому target_file.txt через sym_link.txt:

cat sym_link.txt

Вы увидите:

This is the target file for the symbolic link.

Ключевые различия и поведение символических ссылок:

  • Межфайловые ссылки: Символические ссылки могут связывать два файла в разных файловых системах.

  • Ссылки на каталоги: Символические ссылки могут указывать на каталог, а не только на обычный файл. Создадим символическую ссылку на ваш каталог documents.

    ln -s documents doc_shortcut
    

    Теперь вы можете перейти в doc_shortcut, как если бы это был сам каталог documents:

    cd doc_shortcut
    

    Проверьте ваше местоположение. Обратите внимание, что pwd по умолчанию показывает путь символической ссылки:

    pwd
    

    Вывод: /home/labex/project/doc_shortcut

    Если вы хотите, чтобы pwd показывал фактический путь каталога, на который указывает символическая ссылка, используйте опцию -P:

    pwd -P
    

    Вывод: /home/labex/project/documents

    Теперь вернитесь в ~/project:

    cd ~/project
    
  • Висячие символические ссылки (Dangling symbolic links): Когда исходный обычный файл (цель) удаляется, символическая ссылка остается, но указывает на отсутствующий файл. Это называется "висячей символической ссылкой".

    Удалим target_file.txt:

    rm target_file.txt
    

    Теперь проверьте sym_link.txt с помощью ls -l:

    ls -l sym_link.txt
    

    Вы увидите, что sym_link.txt все еще существует, но его цель target_file.txt отображается красным или другим цветом (в зависимости от конфигурации вашего терминала), чтобы указать, что она повреждена:

    lrwxrwxrwx. 1 labex labex 14 Mar  7 HH:MM sym_link.txt -> target_file.txt
    

    Если вы попытаетесь выполнить cat для висячей символической ссылки, это не удастся:

    cat sym_link.txt
    

    Вывод:

    cat: sym_link.txt: No such file or directory
    

Наконец, очистим файлы и ссылки, созданные на этом шаге.

rm hard_link.txt sym_link.txt doc_shortcut
ls

Из предыдущих шагов должны остаться только каталоги documents и reports.

Эффективный выбор файлов с помощью расширений оболочки (Shell Expansions)

На этом шаге вы узнаете, как эффективно выбирать файлы и каталоги, используя различные возможности расширения оболочки (shell expansion), включая сопоставление с шаблоном (globbing), расширение тильдой (~), расширение фигурными скобками ({}), расширение переменных и подстановку команд. Эти возможности позволяют выполнять операции над несколькими файлами с помощью лаконичных команд.

Сначала убедитесь, что вы находитесь в каталоге ~/project.

cd ~/project

Проверьте ваше текущее местоположение:

pwd

Вывод должен быть /home/labex/project.

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

mkdir data
cd data
touch file1.txt file2.log file_a.txt file_b.log report_2023.txt report_2024.log
touch image.jpg document.pdf archive.zip
mkdir dir1 dir2 dir3
cd ..

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

ls data

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

archive.zip  dir1  dir2  dir3  document.pdf  file1.txt  file2.log  file_a.txt  file_b.log  image.jpg  report_2023.txt  report_2024.log

Сопоставление с шаблоном (Globbing)

Сопоставление с шаблоном, также известное как globbing, позволяет выбирать файлы на основе шаблонов с использованием специальных символов, называемых метасимволами.

Метасимвол Соответствует Пример
* Любая строка из нуля или более символов. *.txt соответствует всем файлам, оканчивающимся на .txt.
? Любой один символ. file?.txt соответствует file1.txt, fileA.txt и т.д.
[abc...] Любой один символ из перечисленных в классе. file[12].txt соответствует file1.txt или file2.txt.
[!abc...] Любой один символ, не входящий в перечисленный класс. file[!1].txt соответствует fileA.txt, но не file1.txt.
[[:alpha:]] Любой алфавитный символ. file[[:alpha:]].txt соответствует fileA.txt.
[[:digit:]] Любая одиночная цифра от 0 до 9. file[[:digit:]].txt соответствует file1.txt.

Давайте попробуем несколько примеров в каталоге data.

  1. Использование *: Вывести все файлы, оканчивающиеся на .txt:

    ls data/*.txt
    

    Вывод:

    data/file1.txt  data/file_a.txt  data/report_2023.txt
    

    Вывести все файлы, содержащие file в имени:

    ls data/*file*
    

    Вывод:

    data/file1.txt  data/file2.log  data/file_a.txt  data/file_b.log
    
  2. Использование ?: Вывести файлы, у которых ровно один символ перед .log:

    ls data/file?.log
    

    Вывод:

    data/file2.log
    
  3. Использование [] для наборов символов: Вывести файлы, начинающиеся с report_ и содержащие 2023 или 2024 в имени:

    ls data/report_[2][0][2][34].*
    

    Вывод:

    data/report_2023.txt  data/report_2024.log
    
  4. Использование {} для расширения фигурными скобками: Вывести файлы, начинающиеся с file и оканчивающиеся на .txt или .log:

    ls data/file*.{txt,log}
    

    Вывод:

    data/file1.txt  data/file2.log  data/file_a.txt  data/file_b.log
    

Расширение тильдой ~

Символ тильды (~) расширяется до домашнего каталога текущего пользователя (/home/labex). Если за ним следует имя пользователя, он расширяется до домашнего каталога этого пользователя.

echo ~

Вывод:

/home/labex
echo ~root

Вывод:

/root
echo ~/project/data

Вывод:

/home/labex/project/data

Расширение фигурными скобками {}

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

  1. Список, разделенный запятыми: Создать файлы report_jan.txt, report_feb.txt, report_mar.txt:

    touch data/report_{jan,feb,mar}.txt
    

    Вывести их:

    ls data/report_*.txt
    

    Вывод:

    data/report_2023.txt  data/report_jan.txt  data/report_feb.txt  data/report_mar.txt
    
  2. Диапазон чисел или букв: Создать файлы doc1.txt, doc2.txt, doc3.txt:

    touch data/doc{1..3}.txt
    

    Вывести их:

    ls data/doc*.txt
    

    Вывод:

    data/doc1.txt  data/doc2.txt  data/doc3.txt
    

    Создать каталоги chapterA, chapterB, chapterC:

    mkdir data/chapter{A..C}
    

    Вывести их:

    ls data/chapter*
    

    Вывод:

    data/chapterA  data/chapterB  data/chapterC
    

Расширение переменных

Переменные оболочки хранят значения, которые могут быть раскрыты в командах. Вы определяете переменную с помощью VARNAME=value и получаете доступ к ее значению с помощью $VARNAME или ${VARNAME}.

MY_DIR=data
echo "My directory is: $MY_DIR"

Вывод:

My directory is: data

Вы можете использовать переменные в командах:

ls $MY_DIR

Вывод будет содержать содержимое каталога data.

Подстановка команд (Command Substitution)

Подстановка команд позволяет использовать вывод команды как часть другой команды. Это достигается путем заключения команды в $(command) или обратные кавычки `command`. Синтаксис $(command) обычно предпочтительнее, так как его можно вкладывать.

Получим текущую дату и используем ее в имени файла.

touch data/log_$(date +%Y-%m-%d).txt

Выведите каталог data, чтобы увидеть новый файл:

ls data/log_*.txt

Вывод будет примерно таким:

data/log_2024-03-07.txt

Вы также можете использовать это для подсчета файлов:

echo "There are $(ls data | wc -l) items in the data directory."

Вывод будет примерно таким:

There are 19 items in the data directory.

Защита аргументов от расширения

Иногда необходимо предотвратить раскрытие определенных символов оболочкой. Это можно сделать с помощью:

  1. Обратный слэш (\): Экранирует следующий одиночный символ.

    echo "The value of \$HOME is your home directory."
    

    Вывод:

    The value of $HOME is your home directory.
    
  2. Одинарные кавычки (''): Предотвращают любое расширение оболочки внутри кавычек.

    echo 'The current date is $(date +%Y-%m-%d).'
    

    Вывод:

    The current date is $(date +%Y-%m-%d).
    
  3. Двойные кавычки (""): Предотвращают большинство расширений оболочки, но разрешают расширение переменных ($VAR) и подстановку команд ($()).

    MY_DATE=$(date +%Y-%m-%d)
    echo "Today's date is $MY_DATE."
    

    Вывод:

    Today's date is 2024-03-07.
    

    Сравнение с одинарными кавычками:

    echo 'Today is $MY_DATE.'
    

    Вывод:

    Today's date is $MY_DATE.
    

Наконец, давайте очистим каталог data.

rm -r data

Резюме

В этой лабораторной работе вы изучили основные инструменты командной строки для управления файлами и каталогами в RHEL. Вы начали с освоения команды pwd для определения текущего рабочего каталога и ls для вывода содержимого каталога, включая использование таких опций, как -l для подробной информации и -a для отображения скрытых файлов. Затем вы перешли к навигации по файловой системе с помощью cd и созданию новых файлов с помощью touch.

Кроме того, вы приобрели навыки организации файловой системы с помощью mkdir для создания каталогов, cp для копирования файлов и каталогов, mv для их перемещения или переименования, и rm для их удаления. Лабораторная работа также охватила создание жестких и символических ссылок с помощью ln, а также эффективный выбор файлов с использованием расширений оболочки, что повысило вашу способность эффективно управлять файлами и каталогами из командной строки.