> For the complete documentation index, see [llms.txt](https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/terminal-linux/rabota-s-failami-i-katalogami.md).

# Работа с файлами и каталогами

## touch

Для начала научимся создавать файлы при помощи такой команды, как `touch`. Вообще, эта команда используется для установки временных меток доступа к файлу, но если файла не существует, то создаётся пустой.&#x20;

Чтобы создать пустой файл, нужно ввести `touch`, далее название файла, допустим new, и наконец расширение файла, к примеру .txt. Проверяем содержимое каталога командой `ls`, соответственно, и видим файл new\.txt. Давайте откроем этот текстовый документ и как видно он пустой.

<figure><img src="/files/rKoDLf3Sd7Hp9KcnMQ3z" alt=""><figcaption></figcaption></figure>

Можно создать много файлов одновременно. Для этого нужно после `touch` указать много файлов через пробел. Допустим, `touch test.txt index.html style.css`. Опять проверяем и убеждаемся в правильности результата.

<figure><img src="/files/5tTBsxvcNozLThoRE6aS" alt=""><figcaption></figcaption></figure>

## mkdir

Команда `mkdir` расшифровывается, как «make directory», то есть создать директорию. И как Вы уже, наверно, успели догадаться, смысл команды тот же, создание директории. Чтобы создать директорию с помощью этой команды надо ввести `mkdir`, а после чего название самой директории. К примеру, `mkdir new_folder`. Проверяем. Директория появилась.&#x20;

<figure><img src="/files/hfAet0wk7aRFH3oqby25" alt=""><figcaption></figcaption></figure>

Также можно создавать много директорий одновременно. Надо просто ввести `mkdir` и названия папок через пробел. К примеру, `mkdir New Test` Проверка. Введём `ls` и увидим, что директории создались.

<figure><img src="/files/aLHJoGOZHWWksZKCFtVM" alt=""><figcaption></figcaption></figure>

## nano

Чтобы приступить к изучению следующей команды, я познакомлю Вас с такой утилитой, как nano.&#x20;

*P.S. Для тех, кто не знает, утилита, это как вспомогательная программа.*&#x20;

Nano — это консольный текстовый редактор, который обычно по умолчанию встроен в Ubuntu, да и не только. Мы можем отредактировать файл в графическом текстовом редакторе, и в Терминале, при помощи консольного текстового редактора. И одним из таких является nano. Чтобы отредактировать какой-нибудь файл, нужно ввести в Терминал nano, далее путь к файлу, который мы хотим отредактировать. Пусть у меня это будет new\.txt.&#x20;

<div><figure><img src="/files/mWf96mf8trKHvm26lVlv" alt=""><figcaption></figcaption></figure> <figure><img src="/files/yu4xiaG03ZabLSIUffBF" alt=""><figcaption></figcaption></figure> <figure><img src="/files/sE8s2IDec3l3o3RcNEGf" alt=""><figcaption></figcaption></figure> <figure><img src="/files/ZeOqn0FqaJZjkhW0wP74" alt=""><figcaption></figcaption></figure></div>

Выполняем и видим поле для редактирования, а также вверху есть версия nano и название файла. Давайте напишем «Simple text», что значит простой текст. Ну и ещё напишем «Всем привет!». Внизу написаны действия, которые мы можем выполнять с этим файлом. Давайте сохраним его, здесь это «записать» Ctrl+O. Можно поменять имя файла, что я, конечно же, делать не стану. И отсюда выйдем, «Выход», это Ctrl+X.&#x20;

А если же файла не существует, к примеру file.txt, то создаётся новый файл и все изменения будут происходить с ним. Напишем здесь «Здравствуйте!» и ещё «Приветик!».

<figure><img src="/files/YhJKYsDJyYQr3odFbLXz" alt=""><figcaption></figcaption></figure>

## cat

Ну отредактировали мы файл. И хотим увидеть его содержимое прямо в Терминале. Это можно сделать при помощи такой команды, как `cat`. Вообще, cat в переводе с английского, это «кошка». Но смысл этой команды заключается в выводе содержимого указанного файла на экран Терминала. Сначала вводим cat, а потом путь к файлу. У меня это file.txt. А вот и всё, что я там написал.

<figure><img src="/files/hqJ4BlxcuMl9dQUZScHm" alt=""><figcaption></figcaption></figure>

Давайте рассмотрим один ключ. Вводим `cat -n file.txt`. И видим пронумерованные строчки.

<figure><img src="/files/EbppDKTOPboHOZmzIaET" alt=""><figcaption></figcaption></figure>

## tac

Хм… Произнесите cat наоборот. Получится `tac`. Эта команда обратная `cat`. Выводит содержимое файла с последней строки.

## cp

Предположим, что мы хотим скопировать файл test.txt в каталог Test. Чтобы такое сотворить в Терминале, нужна команда `cp`. Вводим `cp`, название копируемого файла или каталога, в моём случае это test.txt, и то место, куда это всё с копируется, у меня каталог Test. Получается запись `cp test.txt Test`. Жмём Enter и проверяем, посмотрим содержимое каталога Test. Можно увидеть скопированный файл.

<figure><img src="/files/EVWuwSfyQW784B24GMEd" alt=""><figcaption></figcaption></figure>

Также можно переносить больше файлов. Для этого вводим `cp`, файлы, которые мы хотим скопировать и каталог, в который будут скопированы указанные файлы. Вот, что получилось у меня  `cp new.txt index.html style.css Test`. Проверяем и видим, что файлы успешно скопировались.&#x20;

<figure><img src="/files/p3pHXnSFdqbdo9XJ9uCh" alt=""><figcaption></figcaption></figure>

Кстати, если Вы копируете каталоги, то используйте ключ `-r` для их рекурсивного копирования, то есть копирования каталогов с их содержимым.&#x20;

Ещё можно скопировать содержимое одного файла в другой. Посмотрим, что у меня в файлах new\.txt и text.txt. А теперь скопируем данные одного файла в другой. Для этого нужно ввести `cp`, файл, из которого мы хотим скопировать данные, у меня это new\.txt, и файл, в который мы копируем данные, у меня text.txt. Опять посмотрим содержимое этих двух файлов. И можно убедиться в том, что всё скопировалось успешно! А если файла, в который мы копируем содержимое не существует, то создаётся новый.

<figure><img src="/files/n5u6WpTxlgOtYcsz8305" alt=""><figcaption></figcaption></figure>

## mv

А теперь рассмотрим такую команду, как `mv`. Эта команда нужна для переноса файлов и каталогов. Используется она таким же образом, как и команда `cp`, так что долго зацикливаться не буду (mv <файл для переноса> <место, куда переносить>). Если я хочу перенести каталог new\_folder в New, то надо ввести `mv new_folder New`. Проверяем — `ls New`. Всё сработало корректно.&#x20;

<figure><img src="/files/6A2lXwIw26YHMOUYrS6R" alt=""><figcaption></figcaption></figure>

Сейчас я создам ещё два файла с разным содержимым. А команда `mv 1file.txt 2file.txt` переместит содержимое одного файла в другой. Вернее, переместит один файл в другой. Проверяем. И видим, что файла 1file.txt не существует, так как он переместился в 2file.txt, а содержимое файла 2file.txt поменялось на содержимое 1file.txt. Готово!&#x20;

<figure><img src="/files/WGusJM3FOKfqpkQ5bArX" alt=""><figcaption></figcaption></figure>

Но если файла или каталога куда мы перемещаем не будет существовать, то результат выполнения команды будет переименованием. К примеру, `mv 2file.txt file_with_text.txt` . Файла с именем file\_with\_text не существует. Выполняем. Проверяем. Нет 2file.txt, но есть file\_with\_text.txt. И содержимое верное.&#x20;

<figure><img src="/files/RXHIB8es26rZ3XQSsUnv" alt=""><figcaption></figcaption></figure>

А для перемещения большего количества файлов, нужно указать после `mv` несколько файлов, а потом каталог, в который будут перенесены эти файлы. Также и с большим количеством переносимых каталогов.

## rm

Если мы хотим удалить файлы или каталоги, в подмогу приходит команда `rm`. Расшифровывается она, как remove, что в переводе с английского означает удалить. Вводим rm, а после файлы или каталоги, один или больше, которые хотим удалить. Пусть будет `rm file_with_text`. Проверяем. Команда сработала.&#x20;

<figure><img src="/files/egAd6W9LjgjOi3P9o1Mv" alt=""><figcaption></figcaption></figure>

**Ну и так как с этой командой нужно быть предельно осторожными и предельно аккуратными, потому что отменить её уже будет нельзя**, мы разберём аж 4 наиболее часто используемые с этой командой опции. Первой будет `-r` — рекурсивно удалять директории, то есть удалять директории с его содержимым. Удалим таким образом каталог Test. `rm -r Test`. Проверяем и убеждаемся в том, что он действительно удалён.&#x20;

<figure><img src="/files/DvjCi8FCdRaerIinvO0i" alt=""><figcaption></figcaption></figure>

Ещё два ключа разберём сразу. Это `-v` и `-i`. Смысл -v заключается в том, что в процессе удаления выводится всякая информация. А вот с ключом `-i` у Вас запросят подтверждение на удаление перед самим удалением. Используем эти ключи для удаления file.txt. Вводим `rm -iv file.txt`. Вот он нам вывел «удалить обычный файл 'file.txt'?». Если хотим удалить вводим Y(y) или Д(д), а если нет, то N(n) или Н(н). Я, ну конечно же, хочу удалить этот файл и нажму Y, и Enter. Здесь есть вот такая вот надпись «удалён 'file.txt'». Операция успешно выполнена!

<figure><img src="/files/BRwpUVQWb0qN789Ry08S" alt=""><figcaption></figcaption></figure>

Последний ключ, который мы разберём, это `-f`. Этот параметр обычно используют с `-r`. `-f` — не запрашивает подтверждение на удаление и игнорирует несуществующие файлы. Удалю созданные каталоги и файлы. Введём `rm -rf new.txt text.txt index.html style.css New`. И всё. Их теперь нет.

<figure><img src="/files/zci5jnztSEjqpLxt5wFW" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Будьте очень аккуратны и осторожны с этой командой. Всё проверяйте перед её выполнением, потому что отменить её уже будет нельзя.**
{% endhint %}

## grep

Эта утилита предназначена для поиска внутри файла. Синтаксис чаще всего прописывается через символ `|`. Он объединяет выводы команд, прописанных через этот символ. Сейчас разберёмся. Пусть будет файл info.txt. Там будет хранится какой-то текст. Но мы попробуем найти слово из этого текста. Для этого вводим `cat info.txt | grep "Linux"`. Эта команда выведет строку, где найдёт символы, указанные в аргументе к grep, и выделит их.

<figure><img src="/files/SRhWtN0IZtZKr9DJuUH6" alt=""><figcaption></figcaption></figure>

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