Linux Terminal ч.3 | cp, mv, man и кое-что ещё

<100 full reads
118 story viewsUnique page visitors
<100 read the story to the endThat's 69% of the total page views
4 minutes — average reading time

Предыдущая часть доступна по следующей ссылке: https://zen.me/1IQJegx1
Первая часть находится здесь:
https://zen.me/1gzRs6x3

Копирование и перемещение файлов

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

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

mkdir /tmp/tutorial
cd /tmp/tutorial
mkdir --parents dir1/dir1_1/dir1_1_1
mkdir --parents dir2/dir2_1/dir2_1_1
mkdir --parents dir1/dir2_1/dir1_2_1
Получившееся дерево каталогов
Получившееся дерево каталогов
Получившееся дерево каталогов

Поместим вывод команды tree в файл 'out_tree.txt' и переместим получившийся файл в каталог dir1:

Вместо & лучше использовать &&
Вместо & лучше использовать &&
Вместо & лучше использовать &&
& позволяет объединить несколько команд так, чтобы они выполнялись друг за другом
mv (сокр. move - двигать) — команда перемещения файлов или папок. Аргументы с первого до предпоследнего — объекты перемещения, последний аргумент — каталог назначения.

Теперь попробуем переместить dir1_2_1 в текущий каталог (/tmp/tutorial):

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

Будьте осторожны! По умолчанию mv не запрашивает подтверждение на перезапись, если в каталоге назначения имеется файл с таким же именем. Чтобы включить такой запрос, используйте параметр '-i'

Если Вы внимательно отнеслись к изучению предыдущей части, то запомнили, что параметры (опции) записываются, как правило, сразу после команды. Более подробно о параметрах каждой команды можно узнать, используя man (от англ. manual - инструкция), например, man mv.

Для закрепления навыков работы с командой mv, а также чтобы лучше разобраться в использовании мануала, можете выполнить следующее упражнение:

Создайте в /tmp/tutorial файл out_tree.txt. Затем переместите туда же одноименный файл из dir1 таким образом, чтобы у файла, который будет заменён, автоматически создалась резервная копия.

Также c помощью mv можно переименовать файлы. Для этого в качестве второго аргумента укажите новое имя файла.

Для копирования файлов служит команда 'cp' (от англ. copy - копировать). Её использование аналогично mv. Также в интернете она часто встречается как инструмент для создания резервных копий файлов:

Создание резервной копии файла out_tree.txt
Создание резервной копии файла out_tree.txt
Создание резервной копии файла out_tree.txt
Старайтесь избегать перемещения или создания копий файлов из-под sudo, т.к. в этом случае внести в них изменения может только суперпользователь. Если Вы случайно выполнили копирование от имени администратора и хотите, чтобы изменение файла было доступно обычному пользователю, выполните 'chmod 777 filename'

Для особо любознательных скрины ниже:

Копируем файл из-под sudo и смотрим список прав и владельцев

Удаление файлов и папок с помощью терминала в Linux

Удаление при помощи терминала происходит БЕЗВОЗВРАТНО, то есть без помещения файлов в корзину, поэтому перед выполнением очередной команды лишний раз убедитесь, что текущая рабочая директория - '/tmp/tutorial'

Для удаления нам понадобится команда 'rm' (от англ. remove - удалить).

При попытке удаления каталога dir1 с помощью rm Вы столкнётесь с ошибкой, которая сообщит, что dir1 - это каталог.

Linux Terminal ч.3 | cp, mv, man и кое-что ещё

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

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

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

Если упрощённо, здесь рекурсия - это "обход" программой текущего каталога и всех его подкаталогов для удаления его самого и его содержимого.
Для рекурсивного удаления служит любой из следующих параметров:
'-r, -R, --recursive'
Linux Terminal ч.3 | cp, mv, man и кое-что ещё

Передача данных из одной команды в другую

Давайте подсчитаем количество слов в выводе команды 'ls ~'. Можно, конечно, сделать это вручную, но удобнее использовать команду 'wc' (word count - подсчёт количества слов) с параметром '-w' . Чтобы последняя знала что именно считать, перенаправим вывод команды ls на ввод wc. Делается это при помощи обычной вертикальной черты: '|'

Подробно об аргументах написано в мануале (man wc)
Подробно об аргументах написано в мануале (man wc)
Подробно об аргументах написано в мануале (man wc)

Используем полученные знания для оформления более понятного вывода результатов и сортировки:

Linux Terminal ч.3 | cp, mv, man и кое-что ещё
echo '' && echo '' && echo 'Количество слов в ls:' && echo '' && ls ~ | wc -w && echo ' ' && echo '' && echo 'Содержимое домашней папки:' && echo && ls ~ && echo '' && echo '' && echo 'Остортированное содержимое домашней папки:' && echo '' && ls ~ | sort | cat

К счастью или сожалению, но на этом я завершаю введение в Linux Terminal. Да, осталось ещё колоссальное количество возможностей, о которых я, возможно, расскажу в другой раз (если Вы этого хотите, конечно). Спасибо, что дочитали этот гайд до конца. Будьте здоровы!

UPD от 31.05.2021: Ссылка на четвёртую часть: https://zen.me/U4lWH