четверг, 16 июля 2015 г.

Управление файлами в Linux

Рекомендуется использовать в именах файлов только буквы, цифры и символы (.), (-), (_).
Пробелы в именах файлов при  работе в командной строке должны предваряться символом "\" или имя файла должно быть взято в кавычки.

Вывести список файлов в директории: ls -a (отобразить все файлы, втч с названием, начинающимся с точки), --color (элементы списка разных типов (файлы, директории, символические ссылки) обозначаются разыми цветами), -l (отобразить разрешения, владельца, группу, размер, дату создания), -F (отобразить типы файлов: / - директория, @ - символическая ссылка, = - сокет, | - пайп)

Копировать файлы: cp -f  (перезапись без предупреждения), -i (выдвать запрос на перезапись), -p (сохранять владельца и разрешения - по умолчанию владельцем скопированного файла становится пользователь от имени которого выполняется команда), -R (копировать поддиректории), -a (аналог -R, но сохраняет владельца, и копирует линки а не файлы, на которые они ссылаются),  -u (файл копируется только если оригинал новее конечного файла или конечный файл не существует)

Переместить или переимновать файл: mv (если для файла указать ту же директорию, где он находится - файл будет перименован, если в целевой директории уазать другое имя файл, фал будет перенесес с другим именем, имена директорий рекомендуется завешать символом /). Диектории также можно переносить и переименовывать.

Удалить файл: rm -R (удалить рекурсивно)

Изменить атрибуты файла (время последнего изменения файла, время последнего изменения inode, время последнего обращения к файлу): touch

Tar (tape archiver) создание архивов (не сжатие!) с - создать архив, A - добавить к архиву другой архивный файл, r - добавить к архиву неархивный файл, d - сравнить архив с файлами на диске, t - содержимое архива, x - извлечь архив. Также позволяет делать инкрементальные бэкапы, восстанавливать данные из таких бэкапов, создавать многотомные архивы, осуществлять сжатие а архивирование одновременно (см. опции)
Эффективность сжатия: gz - самая низкакая, выше - bz2, xz - самая высокая.
Сжатиые архивы иногда используют специальные расширения tgz, tbz
Распаковать сжатый архив: tar xvfz /media/usb/my-work.tgz
Создать сжатый архив: tar cvfz /media/pen/my-work.tgz ~/my-work
Схожим функционалом обладает cpio

Создать низкоуровневую копию раздела: dd. Может быть полезно, например, чтобы создать точную копию съемного носителя, или раздела, для которого у линукс нет драйверов, или для установки ОС на идентичное железо.
Также позволяет создать пустой файл нужного размера, на котором после можно содать отдельную файловую сисему: dd if=/dev/zero of=empty-file.img bs=1024 count=720

Ссылки в линукс похожи по сути на ярлыки в Windows и альясы в MacOS.
Создать ссылку: ln [опции] источник (по умолчанию создается жесткая ссылка) -s создать символическую ссылку
Жесткая ссылка представляет собой 2 записи, указывающих на один и тот же файл (точнее на один и тот же inode), оба имени файла одинаково "реальные". Чтобы удалить файл следует удалить обе ссылки. Обе жесткие ссылки должны располагаться в пределах одной фс (например если / и /home находятся на разных разделах, нельзя создать жескую ссылку из /  в /home и наоборот). Файловая система должна поддерживать создание жестких ссылок.
Символическая ссылка является особым типом файла. Это отдельный файл, содержимое которого указывает на целевой файл. В большинстве случаев, доступ к символической ссылке работает так же, как доступ к целевому файлу. Символические ссылки, в отличие от жестких, могут указывать на файл на другом разделе. Поиск файла по символической ссылке занимает некоторое время, поэтому они работают немного медленне, чем жеские. Примеры использования: команды, известные под разыми именами доступны по ссылкам, загрузочный скрипт StartV использует символические ссылке в runlevel директориях.

Создать директорию: mkdir -p (создать родительскую директорию, если она не существует)
Удалить директорию: rmdir -p (удалить дерево)
Удаление директорий, в которых находятся файлы: rm -R

Просмотреть владельца файла: ls -l. На некоторых сервервах существуют специальные учетные записи не совпадающие с именами, используемыми для входа в систему. Если учетная запись удалена, вместа владельца будет отображен номер. Такой файл можно заархивировать, удалить или сменить пользователя на существующего.
Сменить владельца файла: [options] [newowner][:newgroup] filenames -R (сменить для всего дерева директорий). Может использоавться только рутом. Пользователи могут сменить группу для файла, если они принадлежат к этой группе.

Сменить группу: chgrp [options] newgroup filenames

Разрешения (permissions)
Пример строки разрешений: -rwxr-xr-x.
Первый симво код типа файла:
"-" - обычный файл данных (программа, графика, архив и т.п.)
"d" - директория. директория является файлом, но они содержат имена файлов и указатели на inodes. Следует иметь ввиду, что директорию нельзя просмотреть как традиционный файл. Она скорее представляет собой массив, содержащий сопоставление имен файлов и inodes http://unix.stackexchange.com/questions/18605/how-are-directories-implemented-in-unix-filesystems
"l" - символические ссылки. когда линукс обращается к символической ссылке, он пытается прочитать целевой файл.
"p" - пайп (pipe) - файл, который позволяет взаимодействовать двум запущенным программам. Одна открывает пайп для чтения, другая - для записи.
"s" - сокет. сокет схож с пайпом, но допускает сетевые и двунаправленные соединения
"b" - блочное устройство (block device) - файл, соответствующий аппаратному устройству, с которых и на которые информация передается блоками больше одного байта, например жесткие диски, дискеты, cd-диски
"c" - символьное устройство (character device) - файл, соответсвующий устройству, с которого или на которое информация передается частями по 1 байту, например параллельные порты, последовательный порт RS-232, аудио устройства.

Оствшиеся 9 символов являются непосредственно разрешениями. Первые три символа регулируют доступ для владельца, вторые три - для группы, последние три - для всех остальных (т.н. world permissions). Строка разрешений показывает наличие или отсутствие разрешений на чтение (r), запись (w), выполнение (x). Если файл не имеет разрешения на выполнение, он не может быть запущен как программа. Если разрешение на определенное действие отсутствует, с  вместо буквы отображается символ "-".
Отдельные разрешения иногда называются битами разрешений (permission bits) и могут также записываться в числовом (восьмиричном виде): 1 - разрешение на выполнение, 2 - разрешние на запись, 4 - разрешение на чтение. Например:
751 - выполнение, запись, чтение для владельца(1+2+4), выполнение чтение для группы (1+4), выполнение для всех остальных (1).

Разрешение выполнения имеет смысл только для обычных файлов данных и бесполезен для других типов, кроме директорий. Наличие у директории разрешения на выполнение позволяет проводить в ней поиск.
Для символических ссылок разрешения, как правило 777. Это означает что любой пользователь может просмотреть содержимое ссылки, но сможет ли он прочитать/записать/выполнить целевой файл зависит от разрешений целевого файла.

Рут может получить доступ и сменить разрешение на любой файл.

Специальные разрешения:
SUID (Set user id) - опция, используемая с исполняемыми файлами, которая сообщает ОС что программу следует запускать с правами рута, а не пользователя, который ее запустил. SUID обозначается символом "s" в позиции бита "выполнение" владельца: rwsr-xr-x
SGID (Set group id) - опция, схожа с SUID. Устанавливает группу запущенной программы соответсвенно с группой файла. Например: rwxr-sr-x. Если SGID установлен в разрешениях директории, файлы в ней унаследуют группу директории, а не пользователя выполнившего команду.
Sticky bit - если установлен в разрешениях директории, файлы в ней не могут быть удалены владельцем файла, директории или рутом. Например: rwxr-xr-t

Доступ к файлам также можно ограничивать с помощью списков доступа (ACL).

Изменение разрешений: chmod [options] [mode[,mode. . .]] filename. . . -R (рекурсивно для всех файлов в директории)

Настроить разрешения, которые устанавливаются по умолчанию при создании файла: umask
Ввод команды предстваляет собой три восьмиричных значения, которые изымаются из устанавливаемых по умолчанию разрешений файла (666) или директории (777) при создании. Например, с командой umask 022 разрешения у вновь созданного файла будут 644 (rw-r--r--), у директории 755 (rwxr-xr-x)
Umask можно прописать в /etc/profile, но заданное значение имеет более низкий приоритет, чем конфигурационные файлы пользователей.

Дополнительные атрибуты файлов (поддерживаются не всеми ФС):
Append Only (флаг a) - разрешает доступ файлу на запись только для добавления данных, может быть полезно как метод защиты для файлов журналов.
Compressed (флаг c) - ядро автоматически сжимает данные, записываемые в такой файл и распаковывает, когда файл читается
Immutable (флаг i) - делает файл "неизменным": запрещает запись в файл, удаление, создание ссылок на файл. Такой файл не может быть напрямую удален даже рутом (рут может удалить только после снятия атрибута).
Data journaling (флаг j) - сигнализирует ядру о необходимости журналировать все данные, записываемые в файл. Повышает возможность восстановления файла после сбоя системы, но снижает производительсность. Нельзя применить в ext2
Secure Deletion Ordinarily (флаг s) - когда файл удаляется, удаляется запись о нем в директории и его inode помечается как доступный для использования. Сами данные не удаляются. Для файлов с флагом s система перезаписывает файл нулями, что может быть полезно для файлов, содержащих данные, которые могут быть скомпрометированы, в случае воостановления.
No Tail-Merging (флаг t)-   Tail-Merging это процесс в результате которого, небольшие кусочки данных на конце файлов, которые не занимают целый блок на жестком диске соединяются с такими же кусочками других файлов. В результате уменьшается объем занятого пространства на диске, особенно, если на нем хранится много маленьких файлов. Установка флага t отключает эту функцию, что бывает полезно, если фс будет читаться драйверами, не принадлежащими ядру, нампример драйверами GRUB
No Access Time Updates (флаг A) - если установлен этот атрибут, линукс не будет обновлять информацию о времени, когда к файлу осуществлялся доступ. Это понижает объем информации которая читается/записывается на диск, что, в частности, полезно для продления времени работы ноутбука от батареи.
Другие флаги: man chattr
Сменить атрибуты: chattr + (добавить атрибут) -(удалить атрибут) =(удалить имеющиеся атрибуты, установить перечисленные)
chattr +i important.txt

Дисковые квоты. Для работы дисковых квот требуется поддержка данной функции на уровне ядра и фс, а также ряд утилит (например, пакет quota). Большинство дистрибутивов поставляется с поддержкой квотирования на уровне ядра, однако, в некоторых случаях, может потребоваться перекомпиляция ядра.
В файле /etc/fstab для партиций, на которых включается квотирование следует добавить атрибут usrquota/grpquota, например: /dev/sdc5 /home ext3 usrquota,grpquota 1 1
В зависимости от используемого дистрибутива может понадобится редактирование скриптов, выполняющихся при запуске системы.
Установить квоты: edquota
Проверить и обновить информацию по квотам: quotachek

FSSTND - стандарт расположения файлов в линукс, выпущен в 1994г. После 1995г замене FHS (http://www.pathname.com/fhs/)
/bin - важные исполняемые файлы
/sbin - схожа с /bin, но хранит в основнм файлы, которые выполняются только администратором, например fdisk
/lib - программные библиотеки
/lib/modules - модули ядра - драйверы, который могут загружаться и выгружаться по необходимости
/usr - программы
/usr/local - дублирует структуру /usr. в эту директорию устанвливаются локальные файлы, например, пакеты, скомпилированные на данном компьютере. Центральная идея - выделить директорию, на которую не будет распространяться автоматическое обновление системы. Иногда ее выделяют на отдельную партицию, чтобы сохранить содержимое при переустановке системы.
/usr/X11R6 - файлы, связанные с оконной системой X

Поиск файлов: find [path. . .] [expression. . .] -name поиск по имени, -permmode поиск по разрешениям, -size поиск по размеру, -gid поиск по группе, --uid - по владельцу, -maxdepthlevels - ограничить глубину поиска
Также можно использовать регулярные выражения: /home -name "*.c"

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

whereis предназначена для поиска исполняемых файлов,  мануалов, конфигурационных файлов. Не ищет в пользовательских директориях.

which - ищет в директориях, указанных в переменной PATH текущего пользователя и возвращает полные путь к первому найденному совпадению.

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

Источник: Roderick W. Smith - LPIC study guide, 3d edtition

Комментариев нет:

Отправить комментарий