Эта статья дает вам основу для управления файлами в среде Linux.

Введение

Системы Linux организованы в виде древовидной структуры, основанной на корне. Таким образом мы получаем доступ ко всем файлам и каталогам.

Предпосылки

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

Пути к файлам

Имена файлов могут быть абсолютными или относительными. Абсолютные пути начинаются с /. Мы разделяем каждый каталог в пути с помощью /. Вы всегда можете сказать, где вы находитесь, несколькими способами. Мы достигаем этого, используя переменную «$ pwd» и просто используя команду «pwd» в вашем терминале.

Список сведений о файле

Информация о файле записывается в inode. Инод даст вам много информации, когда вы его запросите. Некоторые из них включают владельца, дату создания, размер и права доступа. Когда вы используете команду «ls» с опцией «l», она в любом случае даст вам часть этого.

ls -l
total 231
-rw-r--r-- 1 Jason 197121     9 Jul 14 18:04  README.md
-rw-r--r-- 1 Jason 197121    64 Jul 14 18:04 'compiling and running'
-rw-r--r-- 1 Jason 197121   160 Jul 14 22:15  variables1.cpp
-rwxr-xr-x 1 Jason 197121 44458 Jul 14 22:15  variables1.exe*
-rw-r--r-- 1 Jason 197121   170 Jul 14 22:21  variables2.cpp
-rwxr-xr-x 1 Jason 197121 44599 Jul 14 22:21  variables2.exe*
-rw-r--r-- 1 Jason 197121   415 Jul 14 22:38  variables3.cpp
-rwxr-xr-x 1 Jason 197121 45334 Jul 14 22:38  variables3.exe*
-rw-r--r-- 1 Jason 197121   175 Jul 14 22:43  variables4.cpp
-rwxr-xr-x 1 Jason 197121 44511 Jul 14 22:43  variables4.exe*
-rw-r--r-- 1 Jason 197121   373 Jul 14 22:54  variables5.cpp
-rwxr-xr-x 1 Jason 197121 44934 Jul 14 22:54  variables5.exe*

Вы можете видеть, что опция «-l» дает вам гораздо больше полезной информации. Это также представлено в более приятном виде.

Команда «ls» не выводит список скрытых файлов, если вы не спросите об этом. Вы используете опцию «a» с «ls», чтобы увидеть скрытые файлы и каталоги. Чтобы получить наилучшее представление файлов, используйте «ls -al» в своем терминале. Это покажет вам все файлы и даст вам много информации о каждом.

ls -al
total 243
drwxr-xr-x 1 Jason 197121 0 Jul 14 22:54 ./
drwxr-xr-x 1 Jason 197121 0 Jul 14 18:04 ../
drwxr-xr-x 1 Jason 197121 0 Jul 14 18:04 .git/
-rw-r--r-- 1 Jason 197121 9 Jul 14 18:04 README.md
-rw-r--r-- 1 Jason 197121 64 Jul 14 18:04 'compiling and running'
-rw-r--r-- 1 Jason 197121 160 Jul 14 22:15 variables1.cpp
-rwxr-xr-x 1 Jason 197121 44458 Jul 14 22:15 variables1.exe*
-rw-r--r-- 1 Jason 197121 170 Jul 14 22:21 variables2.cpp
-rwxr-xr-x 1 Jason 197121 44599 Jul 14 22:21 variables2.exe*
-rw-r--r-- 1 Jason 197121 415 Jul 14 22:38 variables3.cpp
-rwxr-xr-x 1 Jason 197121 45334 Jul 14 22:38 variables3.exe*
-rw-r--r-- 1 Jason 197121 175 Jul 14 22:43 variables4.cpp
-rwxr-xr-x 1 Jason 197121 44511 Jul 14 22:43 variables4.exe*
-rw-r--r-- 1 Jason 197121 373 Jul 14 22:54 variables5.cpp
-rwxr-xr-x 1 Jason 197121 44934 Jul 14 22:54 variables5.exe*

Вы можете увидеть скрытые каталоги вверху. Git отслеживает этот каталог, поэтому мы видим там наш обычный файл «.git».

Еще один хороший вариант, который можно использовать при просмотре структуры каталогов, — это параметр «-h». Это для удобочитаемого формата, а не для машины. Большой разницы нет, но размеры файлов легче читать.

ls -lh
total 231K
-rw-r--r-- 1 Jason 197121   9 Jul 14 18:04  README.md
-rw-r--r-- 1 Jason 197121  64 Jul 14 18:04 'compiling and running'
-rw-r--r-- 1 Jason 197121 160 Jul 14 22:15  variables1.cpp
-rwxr-xr-x 1 Jason 197121 44K Jul 14 22:15  variables1.exe*
-rw-r--r-- 1 Jason 197121 170 Jul 14 22:21  variables2.cpp
-rwxr-xr-x 1 Jason 197121 44K Jul 14 22:21  variables2.exe*
-rw-r--r-- 1 Jason 197121 415 Jul 14 22:38  variables3.cpp
-rwxr-xr-x 1 Jason 197121 45K Jul 14 22:38  variables3.exe*
-rw-r--r-- 1 Jason 197121 175 Jul 14 22:43  variables4.cpp
-rwxr-xr-x 1 Jason 197121 44K Jul 14 22:43  variables4.exe*
-rw-r--r-- 1 Jason 197121 373 Jul 14 22:54  variables5.cpp
-rwxr-xr-x 1 Jason 197121 44K Jul 14 22:54  variables5.exe*

Вы заметите, что в большинстве этих списков некоторая основная информация отображается снова и снова. Это характеристика команды «ls».

В этом листинге показаны следующие атрибуты:

  • файл или каталог
  • ссылки на файл
  • владелец файла
  • группа владельцев
  • размер файла в байтах
  • отметка времени
  • последняя модификация
  • имя файла или каталога

Другой полезный вариант — «i» вместе с «ls». Это даст вам информацию об индексе файла.

ls -li
total 231
104427216359722182 -rw-r--r-- 1 Jason 197121     9 Jul 14 18:04  README.md
 24206847997189317 -rw-r--r-- 1 Jason 197121    64 Jul 14 18:04 'compiling and running'
  9851624184970397 -rw-r--r-- 1 Jason 197121   160 Jul 14 22:15  variables1.cpp
  3659174697337710 -rwxr-xr-x 1 Jason 197121 44458 Jul 14 22:15  variables1.exe*
 17169973579462677 -rw-r--r-- 1 Jason 197121   170 Jul 14 22:21  variables2.cpp
  8444249301432886 -rwxr-xr-x 1 Jason 197121 44599 Jul 14 22:21  variables2.exe*
 56576470318862464 -rw-r--r-- 1 Jason 197121   415 Jul 14 22:38  variables3.cpp
  2533274790509358 -rwxr-xr-x 1 Jason 197121 45334 Jul 14 22:38  variables3.exe*
  5348024557584218 -rw-r--r-- 1 Jason 197121   175 Jul 14 22:43  variables4.cpp
  7036874417879868 -rwxr-xr-x 1 Jason 197121 44511 Jul 14 22:43  variables4.exe*
 27866022694408530 -rw-r--r-- 1 Jason 197121   373 Jul 14 22:54  variables5.cpp
 13510798882225059 -rwxr-xr-x 1 Jason 197121 44934 Jul 14 22:54  variables5.exe*

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

Вы можете перечислить каталоги и их дочерние каталоги, используя «ls -R». Здесь перечислены только каталоги, а не файлы внутри них.

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

ls -lS
total 231
-rwxr-xr-x 1 Jason 197121 45334 Jul 14 22:38  variables3.exe*
-rwxr-xr-x 1 Jason 197121 44934 Jul 14 22:54  variables5.exe*
-rwxr-xr-x 1 Jason 197121 44599 Jul 14 22:21  variables2.exe*
-rwxr-xr-x 1 Jason 197121 44511 Jul 14 22:43  variables4.exe*
-rwxr-xr-x 1 Jason 197121 44458 Jul 14 22:15  variables1.exe*
-rw-r--r-- 1 Jason 197121   415 Jul 14 22:38  variables3.cpp
-rw-r--r-- 1 Jason 197121   373 Jul 14 22:54  variables5.cpp
-rw-r--r-- 1 Jason 197121   175 Jul 14 22:43  variables4.cpp
-rw-r--r-- 1 Jason 197121   170 Jul 14 22:21  variables2.cpp
-rw-r--r-- 1 Jason 197121   160 Jul 14 22:15  variables1.cpp
-rw-r--r-- 1 Jason 197121    64 Jul 14 18:04 'compiling and running'
-rw-r--r-- 1 Jason 197121     9 Jul 14 18:04  README.md

Сортировка вывода

У вас есть несколько вариантов того, как ls выдает вам вывод. В алфавитном порядке это вывод по умолчанию. Однако это легко изменить. Чтобы изменить по времени, используйте ‘ls -t’, что весьма полезно. Вы можете добавить опцию «r», чтобы изменить этот список времени, что дает вам большую гибкость.

Копирование файлов

Копирование файлов — это задача, которая происходит часто. Для этого мы используем команду «cp». Он может делать копии файлов или каталогов. Копирование нескольких файлов или каталогов за раз также является простой задачей. Чтобы использовать «cp», вы должны указать источники и имя цели. Источник должен включать путь.

$ cp file1 dir1

Если вашей целью является каталог, то ваши исходники будут помещены внутрь него.

Рекурсивное копирование тоже простая задача. Для этого вы используете «cp -R». Однако вы не можете использовать исходный каталог в качестве цели.

Перемещение файлов

Я делаю это с помощью команды «mv». Он используется для перемещения или переименования файлов и каталогов. В основном она следует тем же правилам, что и команда «cp». Поведение примерно такое же, как при копировании файла и последующем удалении оригинала.

mv file1 dir2

Этот простой пример просто перемещает «file1» в каталог «dir2». Все это было в одной папке. Однако просто добавьте пути к файлу и каталогу, если вы не находитесь в одном каталоге.

Удаление файлов

Вы удаляете файлы с помощью команды «rm». Он может удалять файлы или каталоги и несколько одновременно. Вы всегда должны быть осторожны при этом и делать резервные копии на всякий случай. Основное использование таково.

rm filename

В Интернете появилось много историй о людях, которые использовали «rm» для удаления системных файлов и убили свою систему. Это произошло потому, что они действительно не понимали, что удаляли.

$ ls -l
total 0
-rw-r--r-- 1 Jason 197121 0 Jul 16 08:13 file1
$ rm file1
$ ls -l
total 0

Это красиво и просто, но опять же, добавьте пути, если вам нужно. Удаление каталогов делается так:

$ rm -R dir1

По умолчанию каталоги могут быть удалены только тогда, когда они пусты. Итак, если вам нужно что-то стереть, информация о том, как это сделать, находится на «справочных» страницах. Я позволю тебе поискать его там. Большинству людей никогда не понадобится это делать.

Команда и параметр «rm -i» — хорошая защита, и вы должны ее использовать. Вы можете установить псевдоним для «rm», равный «rm -i», что будет дополнительной мерой предосторожности.

Создание каталогов

Вы создаете каталоги с помощью команды «mkdir». Это может быть что-то простое, например, «mkdir music». Создавайте несколько каталогов одновременно, используя mkdir music videos. Вы можете увидеть вновь созданные каталоги, выполнив команду «ls», чтобы убедиться, что это произошло правильно.

mkdir music
[email protected] MINGW64 ~/Documents/atom/cpp (main)
$ ls -l
total 231
-rw-r--r-- 1 Jason 197121 9 Jul 14 18:04 README.md
-rw-r--r-- 1 Jason 197121 64 Jul 14 18:04 'compiling and running'
drwxr-xr-x 1 Jason 197121 0 Jul 16 08:22 dir1/
drwxr-xr-x 1 Jason 197121 0 Jul 16 08:17 dir2/
drwxr-xr-x 1 Jason 197121 0 Jul 16 08:28 music/
-rw-r--r-- 1 Jason 197121 160 Jul 14 22:15 variables1.cpp
-rwxr-xr-x 1 Jason 197121 44458 Jul 14 22:15 variables1.exe*
-rw-r--r-- 1 Jason 197121 170 Jul 14 22:21 variables2.cpp
-rwxr-xr-x 1 Jason 197121 44599 Jul 14 22:21 variables2.exe*
-rw-r--r-- 1 Jason 197121 415 Jul 14 22:38 variables3.cpp
-rwxr-xr-x 1 Jason 197121 45334 Jul 14 22:38 variables3.exe*
-rw-r--r-- 1 Jason 197121 175 Jul 14 22:43 variables4.cpp
-rwxr-xr-x 1 Jason 197121 44511 Jul 14 22:43 variables4.exe*
-rw-r--r-- 1 Jason 197121 373 Jul 14 22:54 variables5.cpp
-rwxr-xr-x 1 Jason 197121 44934 Jul 14 22:54 variables5.exe*

Создайте вложенные каталоги, используя «mkdir -p /music/albums/BigBang». Это создает каталог BigBang вместе с двумя родительскими каталогами.

$ mkdir -p music/albums/BigBang

Удаление каталогов

Удалить каталоги легко с помощью команды «rm». Он также имеет опцию «-p». Любое использование команды «rm» должно использоваться с осторожностью. Удаление каталогов и их файлов может быть опасным, поэтому сделайте резервные копии. Каталоги по умолчанию должны быть пустыми, прежде чем их можно будет удалить.

rmdir dir1

Удаление каталогов также может быть выполнено рекурсивно. Я делаю это с помощью команды «rmdir -R». Опять же, пожалуйста, будьте осторожны, делая это. Вам не нужно делать это очень часто, если вообще. Я нерешительно добавлю опцию «-f», чтобы заставить все пройти. Я делаю это, если система нуждается в очистке, а я не владею всеми файлами.

Прикосновение к файлам

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

$ touch SuperJunior

Используйте «touch», чтобы обновить время модификации файла. Я делаю это, используя «touch» с именем файла в качестве параметра. Это устанавливает метку времени на текущее время.

$ touch -a SuperJunior

Если файл, который вы используете в качестве параметра, не существует, тогда «touch» создаст файл для вас. Если вы не хотите, чтобы он создавал файл для вас, вы можете указать параметр «-c». Это скажет ему не создавать для вас пустой файл. Это выглядит как «touch -c file1».

$ touch -c SuperJunior

Вы можете использовать «touch», чтобы установить время модификации файла на любое желаемое. Он использует формат «ГГММддччммсс». Таким образом, вы можете быть очень точны при настройке. Команда выглядит как «touch -t ГГММддччммсс имя файла».

Использование поиска

Вы используете «найти», чтобы быть очень точным в своем поиске. Существует несколько критериев, которые вы можете указать. К ним относятся имя, отметка времени, владелец, дата создания и размер. Выбор остается за вами. Когда вы используете имя для поиска, это может быть полное имя или его часть. Вы также можете использовать подстановочные знаки в шаблонах поиска.

$ find . -name variables1.cpp
./cpp/variables1.cpp

Find покажет вам путь к файлу, который вы ищете. Вы также можете искать каталоги.

$ find / -type d -name cpp

Поиск размера прост и имеет несколько вариантов. Найти файл определенного размера вполне возможно. Вы также можете установить нижнюю и верхнюю границы, чтобы найти что-либо в этом диапазоне. При использовании «размера» параметр «-c» предназначен для байтов, а параметр «-k» — для килобайт. Затем вы также можете искать пустые файлы, например, «найти . -размер 0’.

Получить сведения о файле

Чтобы получить информацию о файле, вы используете команду «файл». Поскольку файлы Linux не имеют расширения, которое идентифицирует их, вам будет полезно узнать о них. Это потому, что вам нужно знать, какую программу использовать для открытия файла.

$ file music
music: directory

Для этого команда «файл» выполняет несколько тестов. По сути, он проверяет, пуст ли файл и какие данные находятся внутри.

Теперь давайте посмотрим на файл, чтобы увидеть, что это такое.

$ file variables1.cpp
variables1.cpp: C source, ASCII text, with CRLF line terminators

Это говорит нам много информации. Без сомнения, это должно сказать нам, что это за файл. Я дал этому файлу расширение, но если бы у него его не было, эта информация была бы жизненно важна для понимания того, что это за файл. Я довольно забывчивый, так что это мне очень помогает.

Сжатие файлов

Сжатие и распаковка файлов — необходимый навык в любой операционной системе. Сжатие файлов полезно каждый раз, когда вы хотите сделать резервную копию или отправить файлы куда-то. Одной из лучших утилит для сжатия и распаковки файлов является «gzip».

Текстовые файлы проще всего сжимать, и они дают наибольший эффект. Однако двоичные файлы и файлы изображений не имеют такого же эффекта, если они успешны. Используйте команду «gzip filename», чтобы сжать файл. Затем вы можете использовать «имя файла gunzip», чтобы распаковать его.

Архив файлов

Файлы, каталоги и файловые системы должны быть заархивированы. Есть две основные команды, которые выполняют эту работу. Это команды «tar» и «dd».

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

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

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

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

Тар Команда

«Tar» означает ленточный архив. Он создаст файл архива из списка исходных файлов или каталогов. Восстановить легко, команда ‘tar’ тоже делает это. Таким образом, вы можете управлять всеми процессами архивирования с помощью одной команды. Еще одна приятная вещь, когда в архиве подкаталоги автоматически включаются, когда исходным источником является каталог.

Вывод может быть файлом, аппаратным обеспечением или «stdout». Это делает его очень гибким, вы можете использовать его так, как вам нужно. Вы выбираете вариант вывода с помощью ‘-f’. Чтобы извлечь архив, вы используете опцию «-x». Давайте начнем с быстрого примера.

$ tar -cfv cpp.tar /home/cpp/

Есть еще пара вариантов, о которых я не упомянул. Опция «-c» означает создание нового архива, а опция «-v» покажет нам прогресс. Созданный архив будет называться cpp.tar. Это архив каталога «cpp».

Мы можем создать файл архива и одновременно сжать его. Это популярный способ сделать это. Мы добавим параметр «-z» в команду «tar».

$ tar -cvfz cpp.tar.gz /home/cpp/

Параметр «-z» сжимает файл «tar» с помощью «gzip», о котором мы упоминали ранее.

Когда мы хотим извлечь файлы из файла «tar», мы используем параметр «-x». Теперь команда будет выглядеть так.

$ tar -vfx cpp.tar

Это извлечет заархивированные файлы в текущий каталог.

Тот же процесс работает, когда вы хотите распаковать файл архива. Опять же, вы используете опцию «-x».

$ tar -vfx cpp.tar.gz

Это извлечет файлы из-за опции «-x» и распакует их.

Вы всегда можете перечислить содержимое файла «tar», если забыли. Вы используете опцию «-t», чтобы сделать это. Теперь команда выглядит так.

$ tar -vft cpp.tar

Это работает точно так же со сжатым архивом.

$ tar -vft cpp.tar.gz

Это показывает нам, какие файлы мы изначально заархивировали и сжали.

Команда ДД

Команда «dd» — это еще один тип команды копирования. Тем не менее, он может сделать гораздо больше, чем утилита «cp». Это довольно мощно. Команда «dd» может выполнять некоторые базовые преобразования файлов и записывать на необработанные устройства.

Основное использование: «dd if=source of=target». Он будет использовать «stdin» и «stdout», если вы этого захотите, но его настоящая сила заключается в выборе того, что он делает. Любое из исходного или целевого назначения может быть необработанным устройством. Это позволяет легко работать с дисками.

Вы можете сжать свой архив с помощью «gzip», используя конвейер, чтобы уменьшить размер. Мы можем сделать это в той же команде. Архивация займет намного больше времени, если вы одновременно выполняете сжатие. Итак, просто знайте об этом.

Давайте сделаем базовый пример, чтобы увидеть, как это работает.

$ dd if=/dev/sdb of=/dev/sdc

Это просто сделает прямую копию одного устройства на другое. Устройство вывода должно быть больше, чем устройство ввода.

Следующий вариант — создание образа с помощью команды «dd». Это очень удобно при резервном копировании. Вы можете сделать это с устройствами или файлами.

$ dd if=/dev/sdb of=/backups/sdb.img

Это создает резервную копию файла «img» устройства «sdb». У вас не может быть слишком много резервных копий.

Мы также можем сжимать, пока делаем резервную копию. Это делается путем передачи в утилиту «gzip».

$ dd if=/dev/sdb | gzip -c >/backups/sdb.img.gz

Как видите, это создает файл img, который также сжат. Команда передала вывод в «gzip», который сжимает файл «img».

Теперь нам нужно перейти к восстановлению файлов. Вы просто обращаете процесс вспять.

$ dd if=/backups/sdb.img of=/dev/sdb

Это прямая копия на оригинальное устройство.

Мы можем сделать тот же процесс, чтобы восстановить сжатый файл «img». Похоже на это.

$ gzip -dc /backups/sdb.img.gz | dd of=/dev/sdb

Эта команда использует утилиту «gzip» для распаковки файла «img» и передачи его команде «dd». Затем команда «dd» восстанавливает распакованный файл обратно на исходное устройство. На самом деле с помощью команды «dd» вы можете сделать гораздо больше, это определенно одна из моих любимых команд Linux.

Вывод

Это было интересное руководство для работы. В нем мы обсудили перечисление содержимого каталогов, копирование файлов, перемещение файлов, поиск файлов и каталогов, сжатие файлов и архивирование файлов. Я еще многое упустил, но эта информация находится на справочных страницах, если вам интересно.

Спасибо за чтение

Если вы дочитали до этого места, я вам очень признателен. Я надеюсь, что мои руководства помогут другим, и я также люблю распространять знания о Linux.

Если вы хотите подписаться на мою рассылку, вы можете сделать это здесь.

Если вы не знаете, что читать дальше, попробуйте следующие варианты:

Как начать работу с Linux

Начало работы с C++

Использование переменных в C++

Первоначально опубликовано на https://aindien.com 15 июля 2021 г.