Ранее мы уже немного ознакомились с командами позволяющими нам управлять файлами и репозиториями в Linux. Теперь мы углубимся в эту тему более подробно! Статья очень большая, но при этом обладает особой важностью. К тому же ее можно использовать как справочный материал.
Работа с файловой системой, директориями и файлами в Linux.
1 |
<strong>Синтаксис: ls [-acltuFR] [файлы_или_каталоги]</strong> |
При указании в аргументах файла Linux выведет информацию о файле согласно указанным опциям, в случае каталога — то же для файлов каталога. Если аргументов нет, — выдается листинг текущего каталога Linux-a.
Опции:
-a — выводит информацию обо всех файла в каталоге (по системному соглашению файлы, имя которых начинается с точки, являются скрытыми и командой ls не показываются)
-c — использовать время последней модификации i-node, связанного с файлом (создание файла, изменение прав, и т.д.), а не время модификации
-i — выдать номер i-node, связанного с файлом
-l — выдает полную информацию о файлах в длинном формате: тип файла (обычный файл -, каталог d, сокет s, символьная ссылка l, символьное устройство c, блочное устройство b, FIFO[1] p), права доступа (чтение –r, запись –w, исполнение –x,; первые 3 символа относятся к владельцу, следующие 3 — к членам группы, владеющей файлом, и последние 3 — ко всем остальным), владелец, группа, размер в байтах, дата модификации, имя файла
-t — сортировка листинга по времени
-u — использование времени последнего доступа к файлу, а не время модификации
-F — после каждого имени выдавать значок, характеризующий тип последнего каталог(/), исполняемый файл (*), FIFO (|), символьная ссылка (@), сокеты семейства AF_UNIX (=)
-R — выдает листинг рекурсивно[2] по подкаталогам
Пример: ls –la — позволит получить полный просмотр текущего каталога, включая скрытые файлы.
1 |
Синтаксис: cd [каталог] |
Позволяет сменить текущий каталог на указанный в аргументе. Если не указан ни один каталог в аргументе, то происходит переход в домашний каталог пользователя $HOME.
Пример: переход из текущего каталога в каталог /usr/share/doc
cd /usr/share/doc
При этом мы не указываем каталог, в котором находимся, т.к. из него мы и выполняем команду.
1 2 |
Синтаксис: pwd Простая команда, которая выводит имя текущего каталога |
Пример:
pwd
/home/guest (это результат выполнения команды)
1 |
Синтаксис: cp [-i] файл … файл_или_каталог |
cp –r [-i] каталог … каталог
Данная команда выполняет копирование файлов или каталогов, указанные в первых параметрах, в файл или каталог, указанные в последнем.
Опции:
-i — интерактивно- запрашивается подтверждение на перезапись существующих файлов
-r — рекурсивное копирование каталога
Примеры:
Рекурсивное копирование каталога a B b:
1 |
cp –r a b |
Интерактивное копирование файлов из каталога a B b:
1 2 3 4 |
cp –i a/* b cp: overwrite b/1 (yes/no)? y cp: overwrite b/2 (yes/no)? n cp: overwrite b/2 (yes/no)? y |
Синтаксис: ln [-fs] файл_или_каталог … [ссылка_или_каталог]
Устанавливает ссылку в файловой системе (символьную или жесткую). Если второй операнд является уже существующим каталогом, то ссылки создаются внутри него. В случае, если второй аргумент отсутствует, ссылка создается в текущем каталоге с именем источника.
Опции:
-f — устанавливает ссылку вместо существующего файла
-s — символьная ссылка
Примеры:
Сделать символьную ссылку b на a:
1 2 3 4 5 |
ln –s a b ls –l итого 8 -rw-rw-r-- 1 guest guest 0 Map 21 18:57 a lrwxrwxrwx 1 guest guest 1 Map 21 18:57 b -> a |
Сделать жесткую ссылку между a и c:
1 2 3 4 5 |
ln a c итого 12 -rw-rw-r-- 2 guest guest 0 Map 21 18:57 a Lrwxrwxrwx 1 guest guest 1 Map 21 18:57 b -> a -rw-rw-r-- 2 guest guest 0 Map 21 18:57 c |
1 2 3 4 5 |
ls –il итого 12 4247456 –rw-rw-r-- 2 guest guest 0 Map 21 18:57 a 4247457 lrwxrwxrwx 1 guset guest 1 Map 21 18:57 b -> a 4247456 –rw-rw-r-- 2 guest guest 0 Map 21 18:57 c |
Синтаксис: rm [-f] [-i] файл…
1 |
rm –r [-f] [-i] каталог… |
Эта команда позволяет удалять файлы или каталоги. Если права доступа не позволяют этого сделать немедленно, то последние выводятся в восьмеричной форме и требуется подтверждение операции
Опции:
-f — не спрашивает подтверждений, удаляет все, что возможно
-i — запрашивает подтверждение на каждый удаляемый файл
-r — выполняет удаление рекурсивно, включая каталоги
Пример: Рекурсивное удаление каталога .mozilla/firefox/gb16cbr1.default/Cache в принудительном режиме:
1 |
rm –rf .mozilla/firefox/gb16cbr1.default/Cache |
Синтаксис: mkdir [-p] каталог
Одна из простейших команд, которая создает пустой каталог.
Опции:
-p — данная опция создает также и все несуществующие к этому моменту родительские каталоги указанного места.
Пример:
1 |
mkdir /tmp/a/b/c |
Синтаксис: rmdir [-p] каталог
Удаляет пустой каталог.
Опции:
-p — удаляет также и все пустые родительские каталоги
Пример: удаление каталога /tmp/a/b/c:
1 |
rmdir –p /tmp/a/b/c |
Внимание! Прежде, чем удалять какой либо каталог и его вложения используйте команду «ls –R каталог» для просмотра файлов и существующих подкаталогов, дабы не удалить что то лишнее.
Для создания каталога необходимо иметь права на запись в родительский каталог.
Синтаксис: chmod [-R] ### файл_или_каталог
1 |
сhmod [-R] [ugoa] [+-=] [rwxst] файл_или_каталог |
Данная команда позволяет сменить права доступа к файлам или каталогам, владельцем которых являетесь вы. Мода доступа представляет собой права владельца, группы и всех остальных на чтение, запись и исполнение.
Опции:
-R — выполнение рекурсивной операции
### — трехзначное восьмеричное число, определяющее права доступа
u — для владельца
g — для группы
o — для остальных
a — для всех
+ — добавить права
= — установить права
-(минус) — отменить права
r — чтение
w — запись или создание/удаление файлов в каталоге
x — исполнение или возможность перейти в каталог
s — установка бита set-uid, set-gid
t — файлы из каталога может удалять только их владелец
Пример:
1 |
chmod –R g+w,o-rx b |
Синтаксис: chown [-R] владелец[:группа] файл_или_каталог…
Позволяет сменить владельца (и группу, если указана) файла или каталога.
Опции:
-R — рекурсивное выполнение операции
Пример:
Поменяем у файла test владельца на oracle, а группу на dba:
1 |
chown oracle:dba test |
Следующий подраздел работы с файлами и каталогами это просмотр содержимого файла, мы с вами ранее ознакомились с командой cat и принципами ее работы, т.к. существуют дополнительные команды и их не мало, то я ниже указываю ссылку на ресурс, где вы можете более подробно ознакомиться с ними:
http://www.linux—ink.ru/static/Docs/Courses/adv—user—guide/adv—user—guide/ch07s03.html
Команды архивации, компрессии и декомпрессии в Linux
В своем руководстве данный раздел хочу выделить особенно, т.к. он содержит в себе описание трех команд, но эти команды имеют большое количество опций, которые мы с вами разберем. Поехали…
Первая команда — tar — она позволяет проводить архивацию на внешних устройствах или в файлах.
1 |
Синтаксис: tar [-]c|r|t|u|x[wvz] [f файл] файл_или_каталог… (данный синтаксис используется для GNU-систем) |
Опции:
Здесь в отличии от других команд, предназначенных для работы с файлами и каталогами опции разбиваются на 2 части обязательные и необязательные.
Обязательные:
с — создать
r — дописать файлы в конец архива
t — вывести листинг архива
u — добавить файл, если его в архиве нет
x — извлечение указанных файлов из архива (по умолчанию — все)
Необязательные:
f myfile — работать с файлом myfile, вместо устройства, установленного по умолчанию. Символ ‘-‘ в качестве имени файла означает стандартный вывод или ввод, в зависимости от контекста. Т.к. у нас GNU-версия, мы можем использовать данную команду в сети. Полное имя архива в этом случае — пользователь@хост:/файл, но необходимо иметь права доступа на архивный хост по r-службам.
w — запрашивает разрешение
v — отображение большей информации (verbose)
z — использовать компрессию gzip
j — использовать компрессию bzip2
Примеры: создать архив test.tar из каталогов a и b:
1 |
tar cvf test.tar a b |
Оценить содержимое test.tar:
1 |
tar tvf test.tar |
Извлечь файл a/a из архива test.tar:
1 |
tar xvf test.tar a/a |
Вторая команда — cpio — она позволяет проводить архивацию на внешних устройствах или в файлах.
Синтаксис: cpio –i[cdkmrtuv] [-H формат]
1 2 |
cpio –o[acvAL] [-O файл] [-H формат] cpio –p[lmuvL] каталог |
Опции данной команды так же делятся на 2 типа, как и у предыдущей команды:
Обязательные:
-i (Copy-In mode) — читает список файлов из стандартного ввода и выводит созданный архив на стандартный вывод
-o (Copy-Out mode) — читает архив из стандартного ввода и распаковывает содержащиеся в нем файлы
-p (Copy-Pass mode) — совмещает в себе Copy-In и Copy-Out, используется для копирования набора файлов в каталог.
Необязательные:
-a — переустанавливает access time таким образом, чтобы они не выглядели только что прочитанными
-c — использовать старый переносимый SRV4 ASCII формат
-d — создает каталоги в случае необходимости
-k — пропускает сбойные заголовки при ошибках ввода/вывода
-l — предпочтительное создание ссылки, а не копирование
-m — восстановление modification time при извлечении файлов
-r — переименование файлов интерактивно
-t — выводит содержимое архива, при этом сами файлы НЕ извлекаются
-u — безусловное копирование (по умолчанию новые файлы не замещаются старыми)
-v — выдавать больше информации
-A — добавляет файлы в архив, требует опции –o. Работает только с файлами, но не устройствами
-L — следование символьным ссылкам
-O myfile — Имя myfile архива. В нашей GNU-версии можно использовать в сети. Полное имя архива будет таким — пользователь@хост:/файл, не необходимо иметь права доступа на архивный хост по r-службам
-H формат — использовать архив указанного формата. О типах форматов, поддерживаемых данной версией cpio, вы можете ознакомиться в официальной документации.
Третья и четвертая команды — gzip и gunzip
Синтаксис: gzip [-cdv] [файл…]
1 |
Gunzip [-cv] [файл…] |
Сжатие и разжатие файлов. Стандарт для GNU-проекта. Сжимает по алгоритму LZ77. Сейчас разработаны и другие программы, предназначенные для той же цели, например bzip2, bunzip2, осуществляющие более эффективное сжатие по алгоритму Burrows-Wheeler’a и имеющие аналогичные опции.
Опции:
-c — произведение операций с потоками стандартного ввода и вывода
-d — разжатие
-v — выдача большей информации
Примечание:
В комплекте с GNUzip поставляются так же утилиты zcat, zmore, zless, работающие как и соответствующие им обычные UNIX-команды, а так же gzexe, осуществляющая компрессию исполняемых файлов.
Подсчет контрольных сумм в Linux
В связи с тем, что данные команды являются важными, при администрировании серверов и их сравнения, они были вынесены в отдельный раздел, при этом их всего 2 и они достаточно просты в использовании:
1 2 |
sum myfile – выводит контрольную сумму и размер файла md5sum myfile – выводит контрольную сумму MD5. |
Поиск и проверка состояния файлов в Linux
В данном разделе стоит упомянуть, тот факт, что опции команд предназначенных для поиска и проверки состояния файлов имеют больший синтаксис нежели предыдущие команды. Поэтому при вводе каких-либо опций будьте внимательны.
Синтаксис: find каталог… выражение
Поиск файлов[3] в указанном списке каталогов согласно выражению.
Опции: Выражение может быть составлено из следующих операторов:
-name myfile — поиск по заданному имени (возможно использование метасимволов)
-perm права_доступа — поиск по правам доступа в виде 3-хзначного восьмеричного числа, которые мы разбирали ранее (9 младших бит моды). Если первым символом прав является ‘-‘, используются младшие 11 бит
-type [b|c|d|p|f] — истинно, если тип файла — специальный блок-ориентированный, специальный байт-ориентированный каталог, FIFO-канал или обычный файл
-links число_связей — истинно, если файл имеет указанное число_связей
-user пользователь — владельцем файла является пользователь
-group группа — файл принадлежит группе
—size размер[c] — размер файла равен числу блоков (по 512 байт), указанному в аргументе размер. Если после числа стоит с, — размер указан в байтах
-atime дней — к фалу в последние дней осуществлялся доступ. Сама команда find тоже переустанавливает atime
-mtime дней — файл модифицировался в течение дней
-ctime дней — у файла в течение дней производилась смена атрибутов
-exec команда — истинно, если при выполнении команды был возвращен код 0. Аргумент {} заменяется именем текущего файла
-ok команда — аналогично –exec, но перед исполнением команды требуется подтверждение
-print — всегда истинно. Печатает имя файла на стандартный вывод
-newer myfile — истинно, если текущий файл модифицировался позже, чем myfile
(выражение) — истинно, если все атомарные выражения в выражении истинны
Выражения, записанные подряд, комбинируются по И. Атомарные выражения могут комбинироваться с помощью следующих логических операторов:
! — унарное отрицание
-o — выражения комбинируются по ИЛИ
Команды which и type
Синтаксис:
1 2 |
which команда type команда |
Выводят полный путь до команды, если она находится в пути поиска $PATH, причем which — исполняемый файл, а type — встроенная команда некоторых интерпретаторов.
Примеры:
Определить местоположение команды which
1 2 |
which which type which |
Команда file
Синтаксис: file файл…
Данная команда выводит типы указанных файлов. Типы файлов определяются согласно описанию в файле magic, обычно находящемся в /etc или /usr/lib
Например, команда file * выведет на экран общую информацию о директориях и файлах, указывая их тип.
Команда test
Синтаксис: test выражение
[выражение]
Эта команда вычисляет условные выражения
Операнды выражения:
-r файл — файл существует и доступен для чтения
-w файл — файл существует и доступен для записи
-x файл — файл существует и доступен для исполнения
-f файл – файл существует и является обычным файлом
-d файл — файл существует и является каталогом
-c файл — файл существует и является байт-ориентированным[4] устройством
-b файл — файл существует и является блочно-ориентированным[5] устройством
-p файл — файл существует и является FIFO-файлом
-u файл — файл существует и у него установлен атрибут set—user—id
-g файл — файл существует и у него установлен атрибут set—group—id
-s файл — файл существует и его размер > 0
-t [файловый дескриптор] — файловый дескриптор[6] (по умолчанию 1) — терминал
файл1 –nt файл2 — время модификации файла1 больше времени модификации файла2
файл1 –ot файл2 — время модификации файла1 меньше времени модификации файла2
файл1 –ef файл2 — файл1 и файл2 — один и тот же файл
-n строка — длина строки не равна 0
строка1 = строка2 — равенство строк
строка1 != строка2 — неравенство строк
строка ~ образец — строка соответствует образцу
строка !~ образец — строка не соответствует образцу
строка1 < строка2 — строка1 лексикографически[7] меньше строки2
строка1 > строка2 — строка1 лексикографически больше строки2
выражение1 –a выражение2 — объединение выражений по И
выражение1 –o выражение2 — объединение выражений по ИЛИ
!выражение –a выражение2 — унарное отрицание[8] выражения
[1] FIFO (акроним First In, First Out — «первым пришел — первым ушел») — способ организации и манипулирования данными относительно времени и приоритетов в Linux.
[2] Рекурсия Linux — это способ организации вспомогательного алгоритма (подпрограммы), при котором эта подпрограмма (процедура или функция) в ходе выполнения ее операторов обращается сама к себе. Вообще, рекурсивным называется любой объект, который частично определяется через себя.
[3] В наборе Linux GNU Utilites существуют средства, облегчающие эту задачу — locate и updatedb
[4] Байт-ориентированные устройства — не имеют адреса и не позволяют производить операцию поиска, они генерируют или потребляют последовательность байтов.
[5] Блочно-ориентированные устройства — хранят информацию в блоках фиксированного размера, каждый из которых имеет свой собственный адрес.
[6] Файловый дескриптор — это неотрицательное целое число. Когда создается новый потом ввода-вывода, ядро возвращает процессу, создавшему поток ввода-вывода, его файловый дескриптор. В операционной системе Debian таким дескриптором является сам терминал/консоль.
[7] Лексикографический порядок — отношение линейного порядка на множестве слов длины над некоторым упорядоченным алфавитом.
[8] Унарная операция — это операция над одним операндом (побитовое отрицание, унарный минус — меняет знак числа).
Не забывайте подписываться на наши ресурсы! А именно, группу ВК, страницу Facebook, Twitter, и конечно же наш Youtube-канал!
Предыдущая статья — Linux — Краткий путь к системе Debian 8.x (Часть 3)