Работаем в терминале: файлы и каталоги + читрости.

Команды терминала для работы с файлами и каталогами

Основной вид работы в терминале помимо выполнения специальных команд по администрированию системы - это работа с файлами и каталогами. Чаще всего это выполнение типовых операций: создание файла и каталога, удаление, копирование файлов либо каталогов, их перемещение из одной директории в другую. Сегодня мы рассмотрим с вами этот набор основных команд и несколько читростей слегка упрощающих работу в терминале. Итак, приступим.

Общие правила и положения

Как и в любой сфере, в 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 соответсвенно в начало и конец документа.
Также, есть несколько вариантов использования:

  1. Для просмотра текста:
    more /path-to-file/file-name.txt
    less /path-to-file/file-name.txt
  2. Для просмотра листинга каталога. Здесь нам уже придётся воспользоваться конвейером:
    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 (обратите внимание на слэш в конце исходного каталога)

Читрости при работе в терминале

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

    mkdir /path-to-dir/dir-name
    cd !$

  2. Использование всех аргументов предыдущей команды. Например, мы создали несколько файлов, и выяснили, что допустили в имени файлов ошибку и теперь нам надо их удалить. Ситуация, конечно гипотетическая, но её легко переносит и в реальную ситуацию.

    touch file1 file2 file3 file4
    rm !*
    rm file1 file2 file3 file4

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

    command-1 && command-2

    Command-2 выполнится только в том случае, если первая команда отработала без ошибок.

    command-1 || command-2

    Command-2 выполнится только в том случае, если первая команда завершилась с ошибкой.
    Ярким примером может служить распространённая комбинация:

    sudo apt update && sudo apt upgrade -y

    В данном случае, если обновление информации о пакетах пройдет без ошибок, то начнётся обновление установленных пакетов.

  4. Выполнение команды в другой директории. Если Вам необходимо выполнить команду в другой директории, но при это не хотите покидать текущую, то просто оберните команду скобками. Скобки запускают subshell, внутри которого и выполняются команды.

    (cd /tmp && ls)

Напоминаю, что эти команды работают не только в Linux, они так же, полностью совместимы и с Mac OS.

На этом всё, до скорых встреч.

Похожие записи

Добавить комментарий