Работаем в терминале: файлы и каталоги + читрости.
Команды терминала для работы с файлами и каталогами
Основной вид работы в терминале помимо выполнения специальных команд по администрированию системы - это работа с файлами и каталогами. Чаще всего это выполнение типовых операций: создание файла и каталога, удаление, копирование файлов либо каталогов, их перемещение из одной директории в другую. Сегодня мы рассмотрим с вами этот набор основных команд и несколько читростей слегка упрощающих работу в терминале. Итак, приступим.
Общие правила и положения
Как и в любой сфере, в UNIX подобных системах существуют общие правила и положения относящиеся как к операционной системе в целом, так и к работе в терминале в частности. Рассмотрим некоторые из них:
ПРЕДУПРЕЖДЕНИЕ: не используйте команду, если чётко не представляете результат её выполнения. НИКОГДА, Никогда не авторизуйте в системе как root пользователь (всегда исползайте sudo для выполнения административных команд) во избежание случайных, неаккуратных действий, которые могут привести к неисправимым последствиям, потому что команда
rm -rf /
выполненная root'om уничтожит Вашу систему, в то время как та же команда запущена от имени простого пользователя, никакого вреда Вашей системе не насёт.
- Все скрытые файлы и каталоги в UNIX-подобных системах в начале имени файла или каталога имеют ".". Пример:
.bashrc .bash_profile .ssh и т.д.
- Если в имени каталога или имени файла присутствует пробел, то при обращении к нему (файлу или каталогу) в терминале, пробел необходимо экранировать символом - обратный слэш "\". Пример:
path-to-dir/file\ name.txt
- Для того, чтобы вывод одной команды передать на вход другой, достаточно эти команды ввести в терминале последовательно, разделив их конвейером "|". Символ "|" — это и есть конвейер. Его можно понимать как канал, в который один процесс может только писать, а другой — только читать из него.
Обзор команд
ls
В прошлой статье мы кратко ознакомились с этой командой. Мы уже знаем, что ls
запущенная без ключей (аргументов), покажет нам содержимое текущего каталога, но у этой команды имеются ключи, которые значительно расширяют функциональные возможности утилиты. Рассмотрим некоторые из них:
-a - (all) показывает все файлы и каталоги внутри директории, в том числе и скрытые, которые начинаются с "."
-l - (long) подробный вывод: показываются атрибуты файла, владелец, группа, размер файла и время модификации
-h - (human) показывает размер файлов в "человеческом" виде
-p - добавить слэш "/" к имени, если это каталог
-R - (Recursive) рекурсивная обработка каталогов
Ключи можно компоновать между собой в одну строку. Более подробную информацию, можно получить вызвав команду ls с ключом
--help
ls -alhp
more и less
Две команды с похожим функционалом: они позволяют пролистывать не помещающийся в окно терминала текст. Команда more
была создана раньше и поэтому текст может листать только вперёд с помощью Enter построчно и Пробелом постранично. Выход из режима просмотра - клавиша q
. Подсказка - в режиме просмотра клавиша h
. Команда less
более молодая, поэтому функционал немного расширен и удобнее в использовании: с помощью клавиш вверх и вниз можно перемещаться построчно вверх и вниз по тексту, а PgUp и PgDw постранично вверх и вниз, и с помощью Home и End соответсвенно в начало и конец документа.
Также, есть несколько вариантов использования:
- Для просмотра текста:
more /path-to-file/file-name.txt less /path-to-file/file-name.txt
- Для просмотра листинга каталога. Здесь нам уже придётся воспользоваться конвейером:
ls /usr/bin/ | more ls /usr/bin/ | less
mkdir
Команда mkdir
- (от англ. Make Directory - создать каталог) предназначена для создания каталогов (директорий, папок - кому как удобно называть). Для создания каталога, необходимо терминале вызвать команду mkdir
и как аргумент, передать ей путь и имя нового каталога. У команды mkdir
имеется несколько очень полезных ключей, которые облегчают использование утилиты.
-m - (mode) - сразу, при создании каталога задать права доступа.
-p - (parents) - не выводить сообщение об ошибке, если целевой каталог существует, НО этот же ключ позволяет создавать родительские каталоги, если они не существуют.
mkdir /path-to-directory/new-directory
touch
Команда touch - (от англ. Touch - касание) создание или изменение временных атрибутов файла.
touch /path-to-file/new-file.txt
touch -t 201903182015 /path-to-file/file.txt
ключ -t подразумевает изменение времени корректировки файла. Формат временной строки - ВекГодМесяцДеньЧасМинута
cd
Команда cd - (от англ. Change Directory - изменить каталог) предназначена для смены текущего каталога. Формат команды прост:
cd /path-to-directory/
использование cd без аргумента или cd ~ (тильда) - быстрый переход в домашнюю директорию пользователя.
cd - (тире) некий аналог кнопки назад, т.е. быстрый возврат в предыдущую директорию.
rm
Команда rm - (от англ. Remove - удалять) предназначена для удаления файлов и каталогов. Формат команды очень прост - для удаления файла, команде rm, необходимо передать как аргумент имя файла или файлов:
rm /path-to-file/file.txt
или для удаления нескольких файлов
rm /path-to-file/{file.txt,file-1.txt,file-2.txt}
или всех файлов определенного типа
rm /path-to-file/*.txt
Для удаления каталога, команде rm, необходимо передать дополнительные ключи:
-r - рекурсивно обработать каталог
-f - игнорировать несуществующие файлы и ни о чём не спрашивать
Удалить всё внутри каталога
rm -rf /path-to-dir/*
Удалить весь каталог целиком
rm -rf /path-to-dir
cp
Команда cp - (от англ. Copy - Копировать) предназначена для копирования файлов и каталогов. Формат также прост как и у команды rm:
cp /path-from-copy /path-to-copy
У команды существуют ключи расширяющие функционал команды, но наиболее часто используемые это:
-a - сохранение атрибутов файла (режим доступа, владелец, и временная метка).
-r - рекурсивная обработка для копирования каталогов
Несколько примеров:
Копирование нескольких файлов
cp /path-from-copy/{file-1.txt,file-2.txt} /path-to-copy
Копирование каталога целиком
cp -r /path-from-copy /path-to-copy
Копирование только содержимого каталога
cp -r /path-from-copy/ /path-to-copy (обратите внимание на слэш в конце исходного каталога)
Читрости при работе в терминале
-
Использование аргумента предыдущей команды. Бывают ситуации, когда для выполнения очередной команды, нам необходимо использовать аргумент от предыдущей команды, а он бывает очень длинен и его необходимо заново набирать. Допустим, нам необходимо создать каталог, а затем перейти в него.
mkdir /path-to-dir/dir-name cd !$
-
Использование всех аргументов предыдущей команды. Например, мы создали несколько файлов, и выяснили, что допустили в имени файлов ошибку и теперь нам надо их удалить. Ситуация, конечно гипотетическая, но её легко переносит и в реальную ситуацию.
touch file1 file2 file3 file4 rm !* rm file1 file2 file3 file4
-
Двойной амперсанд и двойной вертикальный слэш между командами добавляют примитивную логику в выполнение команд в терминале.
command-1 && command-2
Command-2 выполнится только в том случае, если первая команда отработала без ошибок.
command-1 || command-2
Command-2 выполнится только в том случае, если первая команда завершилась с ошибкой.
Ярким примером может служить распространённая комбинация:sudo apt update && sudo apt upgrade -y
В данном случае, если обновление информации о пакетах пройдет без ошибок, то начнётся обновление установленных пакетов.
-
Выполнение команды в другой директории. Если Вам необходимо выполнить команду в другой директории, но при это не хотите покидать текущую, то просто оберните команду скобками. Скобки запускают subshell, внутри которого и выполняются команды.
(cd /tmp && ls)
Напоминаю, что эти команды работают не только в Linux, они так же, полностью совместимы и с Mac OS.
На этом всё, до скорых встреч.