Командная строка Linux, работа с файлами: команды touch, mkdir, cp, mv, rm

Командная строка Linux, работа с файлами: команды touch, mkdir, cp, mv, rm

Обновлено 23.02.2024

Приветствую!

Это четвертый пост из цикла, посвященного работе в командной строке Linux. Сегодня мы рассмотрим команды по работе с файлами в Linux: touch, mkdir, cp, mv, rm.

Если вы только начинаете изучать Linux, то настоятельно рекомендую посмотреть предыдущие посты:

Практические примеры из постов данного цикла выполнялись в среде дистрибутива Linux Mint 21.

Присоединяйтесь к нашему каналу: t.me/r4ven_me и чату: t.me/r4ven_me_chat в Telegram .

Список команд

Ну а сегодня наш арсенал инструментов пополнится, вероятно, самыми популярными командами (не считая ls и cat) в Linux:

КомандаОписание
touchсоздаёт простые файлы
mkdirсоздает каталог/и
cpкопирует файлы и каталоги
mvперемещает/переименовывает файлы и каталоги
rmудаляет файлы и каталоги

Команда touch – создание простых файлов

Синтаксис:

touch [ключи] <имя_файла>

С этой командой мы уже немного знакомы из прошлого поста. Сегодня мы рассмотрим её подробнее.

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

Часто используемые ключи:

КлючЗначение
-aдля установки только времени доступа (atime) файла
-mдля установки только времени изменения (mtime) файла
-cдля создания файла, только если он не существует

    Примеры использования команды touch:

    1. Создание нового файла:

    touch text_file.txt

    Мы создали пустой файл. Выполним ls для проверки:

    2. Обновление времени доступа и времени изменения файла:

    ls -l text_file.txt
    
    touch text_file.txt
    
    ls -l text_file.txt

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

    3. Создание нового файла с определенными временными метками:

    touch -t 202301011200 time_text_file.txt
    
    ls -l time_text_file.txt

    Тут мы создали новый файл с определенной временной меткой.

    Для получения более подробной информации о команде touch можно обратиться к официальной документации или воспользоваться командой man touch в терминале Linux.

    Команда mkdir (make directory) – создание каталогов

    Синтаксис:

    mkdir [ключи] <имя_каталога>

    Часто используемые ключи:

    КлючЗначение
    pсоздаёт родительские каталоги при необходимости
    vвыводит сообщение о каждой выполненной операции
    mустанавливает права доступа к файлу (как в chmod)

    Давайте создадим директорию для тестов, затем убедимся в её существовании командой ls и выполним в неё переход с помощью cd. Затем проверим текущий рабочий каталог командой pwd. Выполняем в терминале поочередно четыре команды:

    mkdir testdir
    
    ls
    
    cd testdir
    
    pwd

    Если вы не знакомы указанными командами, то пожалуйста прочитайте мои предыдущие посты по командной строке Linux.

    Отлично. Теперь давайте создадим еще один каталог внутри текущего, добавив команде ключ -v (verbose) и посмотрим на вывод команды:

    mkdir -v testdir2

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

    Теперь давайте создадим одной командой несколько вложенных каталогов используя ключ -p (parents):

    mkdir -vp testdir3/testdir4

    Как видно, команда создала два каталога: testdir3 в текущем каталоге и testdir4 внутри testdir3 с помощью ключа -p.

    Если при создании вложенных каталогов не использовать ключ -p команда выдаст ошибку и ничего не создаст.

    Как вы обратили внимание по умолчанию, если не указывать адрес создания нового каталога, команда mkdir создает его в текущем рабочем каталоге.

    Давайте попробуем создать сразу два каталога где-нибудь в другом месте, например создадим каталоги testdir5 и testdir6 в нашем домашнем каталоге находясь при это в каталоге testdir. Для этого перед именем создаваемого каталога необходимо указать путь к нему:

    mkdir -v /home/ivan/testdir5 ~/testdir6

    Как видим, мы передали команде mkdir в качестве аргументов два новых каталога с указанием пути к нашей домашней директории используя два разных способа. Затем находясь в каталоге /home/ivan/testdir вывели содержимое родительского каталога указав в качестве аргумента команде ls относительный путь ..

    Про ключ -m поговорим в другой раз, когда будем разбираться с правами на файлы в Linux.

    Команда cp (copy) – копирование файлов и каталогов

    Синтаксис:

    cp [ключи] <имя_копируемого_файла> <имя_нового_файла>

    Часто используемые ключи:

    КлючЗначение
    -vвыводит выполняемые действия в стандартный вывод
    -iинтерактивный режим (спрашивать перед тем, как перезаписать файл)
    -rрекурсивно копирует каталоги
    -pкопирует файл с сохранением его атрибутов (владелец, группа, права)

    Для практики скопируем созданный нами текстовый файл text_file.txt в директорию testdir, предварительно вернувшись в домашний каталог:

    cd
    
    ls
    
    cp text_file.txt testdir
    
    ls -l testdir

    Теперь давайте создадим и скопируем файл text_file2.txt в директорию testdir используя ключ -v:

    touch text_file2.txt
    
    cp -v text_file2.txt testdir

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

    В качестве аргументов команде cp можно передавать и несколько файлов.

    Перейдём в директорию testdir, создадим новую директорию testdir2 и скопируем лежащие в текущей директории файлы text_file.txt и text_file2.txt в testdir2:

    cd testdir
    
    ls -l
    
    cp -v text_file.txt text_file2.txt testdir2/

    Проверим содержимое каталоге testdir2:

    ls -l testdir2

    Как видим, мы успешно скопировали файлы.

    Теперь попробуем скопировать каталог testdir2:

    cp testdir2 testdir2copy

    Как, видим мы получили ошибку. Дело в том, что каталоги с помощью команды cp необходимо копировать используя ключ -r. На скриншоте ниже, продемонстрирован пример выполнения команды cp -r после получения ошибки.

    cp -r testdir2 testdir2copy

    У данной команды есть одна особенность, о которой нужно всегда помнить. По умолчанию, при копировании файлов/каталогов с помощью cp, если копировать файлы с именем уже существующих файлов, происходит их перезапись! Т.е. существующий файл удаляется, а на его место встанет создаваемая копия.

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

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

    Простой пример. Находясь в директории testdir попробуем скопировать файл text_file.txt в testdir2:

    cp -vi text_file.txt testdir2

    Если в каталоге назначения существует файл с именем копируемого файла, оболочка запросит у нас подтверждение на перезапись. Ответом на запрос должно быть y или yes для подтверждения перезаписи, и соответственно n или no для прерывания операции копирования.

    Последним примером посмотрим команду cp с ключом -p который сохраняет исходные атрибуты файла.

    Для наглядной демонстрации скопируем файл text_file.txt в текущую директорию от имени root пользователя (введя пароль админа после ввода первой команды), а затем выполним такую же команду с ключом -p:

    sudo cp -v text_file.txt root_file.txt
    
    sudo cp -vp text_file.txt root2_file.txt
    
    ls -l

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

    Обратите внимание, что также изменились права доступа к файлу, глобально заданные для пользователя root по умолчанию -rw-r--r--.

    Но при использовании ключа -p исходные атрибуты сохранились.

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

    Команда mv (move) – перемещение/переименование файлов

    Синтаксис (переименование):

    mv [ключи] <имя_файла> <новое_имя_файла>

    Синтаксис (перемещение):

    mv [ключи] <путь/имя_файла> <новый_путь/имя_файла>

    Часто используемые ключи:

    КлючЗначение
    -vвыводит выполняемые действия в стандартный вывод
    -iинтерактивный режим (спрашивать перед тем, как перезаписать)
    -uupdate, перемещает, только если ИСТОЧНИК новее, чем файл назначения

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

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

    Откроем наш файл text_file.txt в текстовом редакторе и наполним его любым содержимым. Например, я добавлю в него “Hello R4ven.me!!!”

    xed text_file.txt

    Теперь находясь в директории testdir/ давайте переименуем файл text_file.txt в new_text_file.txt используя ключ -v которые имеет тот же эффект, что и у команды cp:

    cat text_file.txt
    
    mv -v text_file.txt new_text_file.txt
    
    ls -l
    
    cat new_text_file.txt

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

    Ключ -i у команды mv тут также аналогичен ключу команды cp: он вызывает интерактивный режим, в случае если выполняемая вами команда перезапишет файл.

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

    Для демонстрации возьмем наш файл new_text_file.txt и скопируем его в директорию testdir2:

    cat new_text_file.txt
    
    cp -v new_text_file.txt testdir2

    Затем откроем наш файл new_text_file.txt в текущей директории в текстовом редакторе и изменим содержимое на “Bye R4ven.me!!!” с помощью xed:

    xed new_text_file.txt

    Теперь выполним перенос файла testdir2/new_text_file.txt обратно в нашу текущую директорию testdir используя ключи -u:

    mv -ivu testdir2/new_text_file.txt .

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

    Как видим, наш текущий файл new_text_file.txt не изменился. Потому что временная метка файла в testdir2/new_text_file.txt новее и при использовании ключа -u перезапись не произошла.

    Выполним перемещение наоборот: недавно измененный нами файл new_text_file.txt переместим в testdir2 с теми же ключами:

    mv -ivu new_text_file.txt ./testdir2/
    
    cat testdir2/new_text_file.txt

    Теперь команда с помощью ключа -u обнаружила, что файл назначения старее перемещаемого, и сработал ключ -i, запрашивающий у нас подтверждения на перезапись файла назначения. Нажимаем y или yes и проверяем содержимое файла, для достоверности.

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

    ls -l new_text_file.txt
    
    touch new_text_file.txt
    
    ls -l new_text_file.txt

    Команда rm (remove) – удаление файлов и каталогов

    Синтаксис (удаление файла):

    rm [ключи] <имя_удаляемого_файла>
    
    # или
    
    rm [ключи] </путь/до/удаляемого_файла>

    Часто используемые ключи:

    КлючЗначение
    -vвыводит выполняемые действия в стандартный вывод
    -iинтерактивный режим (спрашивать перед тем, как удалить)
    -rрекурсивно удаляет каталоги и их содержимое
    -fигнорирует несуществующие файлы и аргументы, выполняет удаление ни о чем не спрашивая

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

    Пожалуйста, будьте осторожны с командой rm, так как при удалении файлов с её помощью они удаляются из системы навсегда. Данная команда не подразумевает никакой “корзины”, как в Windows. Восстановить удаленные с помощью rm файлы возможно, но не так просто и без каких-либо гарантий. Всегда используйте ключ -i для интерактивного удаления с подтверждением.

    И так, находясь в директории ~/testdir удалим существующий там файл text_file2.txt:

    ls -l
    
    rm text_file2.txt
    
    ls -l

    Как видим файл был удален. Давайте удалим теперь файл testdir2/new_text_file.txt c помощью ключа -v:

    rm -v testdir2/new_text_file.txt

    Видим подробный вывод.

    Ключ -i тут имеет такой же эффект, как и у команд cp и rm:

    ls -l
    
    rm -vi root2_file.txt

    Для отмены удаления нужно нажать n или no.

    Теперь давайте попробуем удалить каталог testdir3:

    rm -iv testdir3

    Получили ошибку:

    Для удаления каталогов обязателен ключ -r. Попробуем с ним:

    rm -ivr testdir3

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

    Чтобы быстро удалить каталог используйте просто -r. Удалим testdir2copy:

    rm -r testdir2copy

    Теперь про ключ -f (force).

    У нас есть файл root_file.txt владельцем которого является root, а права на запись у данного файла у прочих пользователей, в том числе и нас, отсутствуют. Давайте попробуем удалить этот файл:

    ls -l
    
    rm -v root_file.txt

    Команда предупреждает нас о том, что файл защищен от записи и запрашивает предупреждение. Откажемся удалять этот файл нажатием n и попробуем еще раз только с ключом -f:

    rm -vf root_file.txt

    Вероятно вы часто видели шутки про команду rm -rf / ни в коем случае не выполняйте её, особенно он имени пользователя root.

    С учетом предоставленной выше информации мы теперь понимаем, что она делает:

    rm – команда удаления

    -rf – рекурсивно удаляет каталоги с их содержимым, игнорируя всякие предупреждения и ошибки

    / – это путь, обозначающий корень нашей системы.

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

    К примеру в Linux Mint данная команда не выполнится без определенного ключа:

    Послесловие

    Сегодня мы с вами рассмотрели одни из самых популярных и самых полезных команд в мире консоли Linux – это команды по работе с файлами. Мы научились создать, копировать и удалять файлы и директории. Также обговорили случаи, как удалять систему делать не стоит.

    В следующем посте мы поговорим про отдельный тип файлов в Linux – ссылки (линки). Чем хард линки отличаются от сим линков и какие есть преимущества и недостатки у каждого типа.

    Полезные источники

    Предыдущие посты цикла

    Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии