**103.3** Основные операции с файлами

Студент должен уметь управлять файлами и каталогами при помощи основных команд Linux

**Изучаем** :

- копирование, перенос и удаление файлов и каталогов;
- копирование нескольких файлов и каталогов, в том числе рекурсивно;
- удаление файлов и каталогов, в том числе рекурсивно;
- групповые символы (wildcard);
- отбор файлов по типу, размеру, датам и т.д.;
- работу с tar, cpio и dd.

**Термины и утилиты:       **

- cp
- find
- mkdir
- mv
- ls
- rm
- rmdir
- touch
- tar
- cpio
- dd
- file
- gzip
- gunzip
- bzip2
- xz
- групповые символы

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

Для создания директорий используется команда **mkdir**** имя\_каталога **, для удаления пустого каталога -** rmdir ****имя\_каталога**. Просмотр содержимого текущей директории – **ls**. Например:

**ls**  **–**** l**_        (просмотреть содержимое текущего каталога);_

**ls**** fol ****\*** _        (посмотреть содержимого каталогов, имена которых начинаются с &quot; __fol__&quot;);_

Для копирования используется команда **cp**  **что\_копировать куда\_копировать** , например:

**cp**  **–**** R ****Folder**** NewFolder**_        (скопировать директорию &quot; __Folder__&quot; со всем содержимым в текущий каталог с именем новой директории &quot; __NewFolder__&quot;);_

Для переноса используется команда **mv**  **что\_переносить куда\_переносить** , например:

**mv**** file ****.**** txt ****folder**** 1/**  _(перенести &quot; __file__. __txt__&quot; в каталог &quot; __folder__ 1&quot; в текущей директории);_

Для удаления используется команда **rm**** что\_удалить**, например:

**rm**  **–**** rf ****folder**** 1       ** _(удалить каталог_ _folder__1 вместе с содержимым);_

Для создания пустого файла, или обновления метки доступа существующего, используется команда **touch**  **имя\_файла,** а для получения информации о файле – команда **file**** имя\_файла**.

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

- _\*                – любое количество любых символов;_
- **?       ** _        – любой символ;_
- **!                ** _– не (любой символ кроме указанных);_
- **[****ac****]       ** _– __a_ _или_ _c__ ;_
- **[****a ****-**** c****]** _        –_ _a __,_ _b__ ,_ _c__._

Например:

**ls**  **\*               ** _(вывести содержимое всех каталогов);_

**ls**  **?**** at ****.**** txt ****       ** _(вывести содержимое файла с именем: любая первая буква, остальная часть имени &quot; __at__. __txt__&quot;);_

**ls**  **\***** at ****.**** txt ****       ** _(вывести содержимое файла с именем, оканчивающимся на &quot; __at__. __txt__&quot;);_

**ls** **![****ab****]\*       ** _(вывести содержимое файла или каталога с именем, начинающимся с любых символов, кроме &quot; __a__&quot; и &quot; __b__&quot;);_

Для поиска информации используется команда **find** , например:

**find**  **. –**** name ****&quot;\ *****A**** \*&quot;       ** _(искать в текущей директории объекты, имеющие в имени символ &quot; __A__&quot;);_

**find**  **/**** etc **** – ****size**  ** -5**** M ****       ** _(искать в директории &quot;/ __etc__&quot; объекты размером менее 5 Мб);_

**find**  ** .  –**** type ****l**   _(искать в текущей директории ссылки);_

В среде Linux существует несколько распространённых архиваторов, использующихся для распаковки и упаковки объектов в единый файл:

- **с**** pio**                - двоичный архиватор, копирующий информацию в архив и обратно;
- **dd**                 - копирование по блокам;
- **gzip** и **gunzip**         - утилита сжатия и восстановления файлов (контейнер одного файла);
- bzip2 и bunzip2        - утилита сжатия и восстановления файлов (контейнер одного файла);
- xz и unxz                - утилита сжатия и восстановления файлов (контейнер одного файла);
- tar                - архиватор (работает с набором файлов и каталогов).

Например:

**find**  **.  –**** name ****&quot;\*. ****txt****&quot; | **** cpio **** – ****o**  **&gt; ../**** test ****.**** cpio**   _(найти в текущей папке все файлы с расширением &quot;. __txt__&quot; и упаковать их в архив_ _test __.__ cpio__, расположив его на уровень выше текущей_ _директории);_

**cpio**  **-**** id **** &lt; **** test ****.**** cpio**_        (распаковать в текущий каталог архив &quot; __test__. __cpio__&quot;, создавая при необходимости структуру директорий);_

**dd**** if ****=/**** dev ****/**** sdb ****of**** = ****drive****. ****img****        ** _(скопировать носитель / __dev__ / __sdb_ _в образ_ _drive__. __img__ , располагающийся в текущей директории);_

**gzip**** drive ****.**** img ****       ** _(сжать образ &quot; __drive__. __img__&quot; до &quot; __drive__. __img__. __gz__&quot;, удалив исходный файл);_

**bunzip**** 2 **** drive ****.**** img ****.**** bz ****2       ** _(распаковать архив &quot; __drive__. __img__. __bz__ 2&quot; в текущий каталог);_

**unxz**** drive ****.**** img ****.**** xz ****       ** _(распаковать архив &quot; __drive__. __img__. __xz__&quot; в текущий каталог);_

**tar**** cvf ****arch****. ****tar**  ** **** folder**   _(упаковать каталог &quot; __folder__&quot; в архив &quot; __arch__. __tar__&quot;)._

**tar**  **–**** xvf ****archive****. ****tar****        ** _(распаковать архив &quot; __archive__. __tar__&quot;)._