Файловая система Linux
Linux поддерживает множество систем, в том числе и используемые Windows файловые системы FAT, FAT32 и NTFS, но при установке ОС Linux желательно выбрать родную ей систему: Ext2, Ext3, Ext4* или ReiserFS (это название часто сокращают до Reiser). Система ReiserFS является диковиной, потому что используется нечасто, но она наиболее предпочтительна по сравнению с Ext2, поскольку включает журналирование, которое делает систему более устойчивой и позволяет быстро восстанавливать ее после сбоев.
Рассмотрим, как работают эти файловые системы, чтобы вы смогли выбрать оптимальный вариант.
В файловой системе Ext2 данные сначала кэшируются и только потом записываются на диск, за счет чего достигается высокая производительность. Но если возникнут проблемы с питанием или произойдет аварийный выход из системы, то компьютер может не успеть сохранить данные. При следующей загрузке ОС обнаружит нарушение целостности жесткого диска, и запустится программа сканирования диска fsck (аналог scandisk в Windows), которая восстановит его работоспособность. Однако воссоздать утерянные данные уже не удастся. Сканирование занимает много времени, и это может сказаться на скорости возобновления работы сервера. Будьте готовы к тому, что следующая загрузка будет происходить дольше обычного.
В файловой системе ReiserFS также выполняется запись с предварительным кэшированием, после чего проверяется целостность данных и, если данные записаны верно, кэш очищается. В противном случае ОС при запуске с помощью созданного журнала быстро найдет проблемные места и с минимальными’поте-рями времени восстановит работоспособность диска.
Файловая система Ext3 также принадлежит к новому поколению журналируемых систем и работает аналогично ReiserFS. До появления Ext4 она являлась системой по умолчанию в большинстве современных дистрибутивов Linux. Трудно сравнить по производительности ReiserFS и Ext3, но с точки зрения надежности советую использовать последнюю. Разные специалисты придерживаются различных мнений, но я думаю, что стоит согласиться с мнением разработчиков и выбрать Ext3 или ее логическое продолжение Ext4.
Четвертое пришествие Extended File System (Ext4) принесло возможность создавать диски размером в 1 эксбибайт (2 в 60-й степени) при размере блока в 4 килобайта. Но более интересным, на мой взгляд, является механизм, который позволяет заранее выделить место под файл и дописывать новые данные в конецуже существующего. Таким образом уменьшается фрагментация данных и повышается производительность файловой системы.
Давай посмотрим на структуру каталогов, которую ты увидишь почти в любом Linux:
/
— корневая папка, или, как ее еще называют, root directory — папка, в которой хранится все остальное содержимое файловой системы;/bin
(от слова binary) — здесь лежат двоичные исполняемые файлы со всеми основными командами;/boot
— здесь расположен загрузчик и ядро ОС (файлыvmlinuz
— это как раз оно и есть);/dev
— файлы в этой папке — это порты и устройства. Работая с этими файлами, приложения и драйверы могут обмениваться информацией напрямую с оборудованием. Впрочем, некоторые файлы — это не настоящие устройства, а виртуальные. Например, знаменитый/dev/null
принимает любую информацию и ничего с ней не делает, а/dev/random
генерирует случайные числа;/etc
— в этой папке содержатся общесистемные файлы конфигурации (тогда как пользовательские файлы конфигурации находятся в домашнем каталоге каждого пользователя). Если ты администратор системы, то сюда придется часто заглядывать при настройке разных программ;/home
— в этой папке содержатся домашние каталоги пользователей Linux. Например, если твое имя пользователя —xakep
, твоя домашняя папка будет называться/home/xakep/
;/lib
— папка для хранения библиотек, необходимых исполняемым файлам в папкахbin
иsbin
;/lost+found
— в эту папку сохраняются восстановленные в случае системного сбоя файлы;/media
— в некоторых системах дополнительный каталог, где отображаются все смонтированные в системе съемные носители информации. В старых ОС может называться/cdrom
;/mnt
— папка, содержащая временные точки монтирования: сюда монтируются файловые системы для временного использования;/opt
— каталог содержит подкаталоги для дополнительных пакетов программного обеспечения. Обычно используется проприетарным ПО, которое не подчиняется стандартной иерархии файловой системы Linux;/proc
— каталог со специальными файлами, которые предоставляют информацию о системе и процессах;/root
— домашний каталог суперпользователя root;/run
— этот каталог предоставляет приложениям стандартное место для файлов, существующих только во время работы системы (отсюда название), таких как сокеты и идентификаторы процессов;/sbin
— эта папка по своему назначению аналогична папкеbin
. Здесь лежат двоичные исполняемые файлы, которые обычно предназначены для запуска пользователемroot
в целях системного администрирования;/tmp
— папка для хранения временных файлов по умолчанию;/srv
— содержит данные о сервисах, предоставляемых системой;/usr
— в этой папке содержатся приложения и файлы пользователей системы. В старых Unix это был аналог/home
, но затем эти вещи разделили. Условно: в/usr/
— программы, в/home
— всякое барахло. Находящиеся здесь каталоги/usr/bin
,/usr/sbin
и/usr/lib
раньше имели то же назначение, что и аналоги, лежащие в корне, но для файлов пользователей (в то время как папки в корне — для файлов, используемых самой системой). А еще есть каталог/usr/local
, где есть своиbin
,sbin
иlib
! Когда‑то подразумевалось, что здесь будут программы, специфичные для конкретного компьютера, то есть в теории зависящие от его железа. На практике софт сюда попадает по самым разным причинам;/var
— от слова variable, то есть что‑то, что может меняться. Здесь лежат бэкапы, кеши, библиотеки, логи и тому подобные вещи. Одна из важных директорий — это/var/www
, где хранятся данные веб‑сайтов, если на машине установлен веб‑сервер.
В современной Ubuntu /bin, /sbin и /lib — это символические ссылки на соответствующие каталоги в /usr
Основные команды
Давайте рассмотрим основные команды файловой системы, которые мы будем использовать, и заодно подробнее познакомимся с файловой системой Linux.pwd
Эта команда выводит на экран полный путь к текущему каталогу. С ее помощью выможете в любой момент узнать, где находитесь, если вдруг заблудитесь в этом прекрасном пингвиньем лесу.ls
Команда is выводит список файлов и подкаталогов указанного каталога. Если имя каталога (файла) отсутствует в параметрах команды, то отображается содержимое текущего каталога. По умолчанию все настроечные файлы (имена которых начинаются с точки) являются скрытыми. Чтобы их вывести, нужно указать ключ -а:ls -а
Если мы, кроме этого, хотим увидеть не только имена (сжатый формат), но и полную информацию о файлах в каталоге, нужно добавить ключ -1. То есть выполнить команду:ls -al
Однако такая команда отобразит файлы текущего каталога, и не факт, что мы сейчас находимся, например, в каталоге /etc, который хотим просмотреть. Чтобы увидеть его содержимое, после ключей (а можно и до них) нужно указать требуемую папку:ls -al /etc
Дата и время изменения
Самый простейший способ контроля — наблюдение за датой/временем редактирования. Чтобы узнать, что было изменено, можно с помощью команды find запустить поиск всех файлов, у которых дата корректировки позже этого времени.
Cделать это легко, но не очень эффективно, потому что можно изменить дату/время редактирования файла с помощью команды touch, которая выглядит так:touch параметры ММДДччммГГ файл
Рассмотрим пример. Допустим, что вы хотите установить на файл /etc/passwd дату изменения 11:40 21 января. Для этого выполняем следующую команду:touch 01211140 /etc/passwd
Теперь воспользуйтесь командой is -1 /etc/passwd, чтобы убедиться, что дата ивремя изменения установлены верно.
С помощью команды touch можно и создавать файлы, сразу же указывая необходимую дату.
Как видите, даты создания и редактирования файлов легко меняются.
Итак, найти все файлы, дата изменения которых позже 11:40 21 января текущего года, можно следующим образом:touch 0121114010 /tmp/tempfile
find /etc \(-newer /tmp/tempfile \) -ls
find /etc \(-cnewer /tmp/tempfile \) -ls.
find /etc \(-anewer /tmp/tempfile \) —ls
В первой строке мы создаем во временном каталоге /tmp файл с необходимой датой изменения, по которой и будет происходить поиск.
Следующие три строки производят поиск файлов. Каждая из них имеет следующую структуру:find каталог \( -сравнение файл \) -ls
Рассмотрим по частям эту строку:
- find — программа поиска файлов;
- каталог — каталог, в котором нужно искать. В нашем случае указан системный каталог /etc, в котором хранятся все настроечные файлы;
- параметр \ ( -сравнение файл ) состоит из файла для сопоставления и критерия поиска файлов, который может принимать различные значения:
- -newer — дата изменения позже, чем у заданного файла в параметре файл;
- -cnewer — состояние изменено позже, чем у сопоставляемого файла в параметре файл;
- -anewer— дата последнего доступа превосходит аналогичный параметр сравниваемого файла;
- параметр -ls — отображает на экране список файлов (как при выполнении команды ls).
Контрольные суммы
На даты изменения можно надеяться, но необходимо иметь дополнительное средство проверки. Наилучшим методом является подсчет контрольной суммы. Допустим, что вы хотите отслеживать изменения в каталоге /etc. Для этого выполните следующую команду:find каталог \( -сравнение файл \) -ls
Утилита md5sum подсчитывает контрольную сумму указанных в качестве параметра файлов. На экране вы получите результат выполнения команды примерно такого вида:783fd8fc5250c439914e88d490090ael /etc/DIR_COLORS
e2eb98e82a51806fe310bffdd23ca851 /etc/Muttrc
el043de2310c8dd266eb0ce007ac9088 /etc/a2ps-site.cfg
4543eebd0f473107e6e99ca3fc7b8d47 /etc/a2ps.cfg
cO 9badb7 774 9eecbeafd8 cb21c5 62bd6 /etc/adj time
70abal6e0d529c3db01a20207fd66blf /etc/aliases
c3e3a40097daed5c27144f53f37de38e /etc/aliases.db
3e5bb9f9e8616bd8a5a4d7247f4d858e /etc/anacrontab
fe4aad090adcd03bf686103687d69f64 /etc/aspldr.conf
Результат отображается в две колонки: первая содержит контрольную сумму, а вторая — имя файла. Контрольные суммы подсчитываются только для файлов. Для каталогов будет выведено сообщение об ошибке.
В нашем случае показаны все файлы каталога /etc/*. Результат расчета выведен на экран, но запомнить столько данных невозможно, поэтому логично будет записать их в файл, чтобы потом использовать его содержимое для анализа изменений. Следующая команда выполняет расчет контрольных сумм и сохраняет результат расчета в файл /home/username/md:md5sum /etc/* >> /home/username/md
Чтобы сравнить текущее состояние файлов каталога /etc с содержимым файла /home/flenov/md, необходимо выполнить команду:md5sum -c /home/username/md
На экране появится список всех файлов, и напротив каждого должна стоять надпись Success (Успех). Это означает, что изменений не было. Давайте модифицируем какой-нибудь файл, выполнив, например, следующую команду:groupadd test
Пока не будем вдаваться в подробности этой команды, сейчас достаточно знать, что она изменяет файл /etc/group. Снова выполняем команду проверки контрольных сумм файлов:md5sum -c /home/username/md
Теперь напротив файла /etc/group будет выведено сообщение об ошибке, поскольку его контрольная сумма изменилась. Таким образом, даже если дата корректировкифайла осталась прежней, по контрольной сумме легко определить наличие вмешательства.
Программа md5sum входит в пакет ucommon-utils, который по умолчанию в Ubuntu-сервер не устанавливается. Если у вас этот пакет отсутствует, то для его установки следует выполнить команду:sudo apt-get install ucommon-utils
Можно контролировать изменения как конфигурационных файлов, так и всех системных программ и библиотек. Я бы добавил мониторинг каталогов /etc и /bin.
Следить за пользовательскими файлами просто не имеет смысла, потому что эти файлы изменяются часто, и в тысячах изменений найти что-либо существенное будет проблематично. Системные библиотеки также изменяются с каждой установкой обновлений. А вот конфигурационные файлы и программы в настроенной системе не изменяются и не должны изменяться, поэтому любые их корректировки указывают на возможную проблему или вторжение.
- Разница между «>» и «»» в Linux
Оба оператора являются операторами направления вывода. Основное отличие указано ниже:
> : Перезаписывает существующий файл или создает файл, если файл с указанным именем отсутствует в каталоге.
>> : добавляет существующий файл или создает файл, если файл с указанным именем отсутствует в каталоге.
ПОЛЬЗОВАТЕЛИ, ПРАВА НА ФАЙЛЫ
Linux изначально задумывался как многопользовательская система, а потому разделение файлов и профилей пользователей здесь организовано на высочайшем уровне. Пользователь с ограниченными правами в системе может взаимодействовать с теми или иными файлами и каталогами.
Важно помнить, что в Linux существует суперпользователь с именем root
, обладающий полными администраторскими привилегиями в операционной системе, — так сказать, самый главный босс всех боссов. Он может создавать и удалять учетки других юзеров и вообще менять глобальные настройки ОС. Любой юзер может временно побывать в роли root
с помощью команды sudo
(Substitute User and do, дословно «подменить пользователя и выполнить»). Но сработает этот sudo, только если ты знаешь пароль от учетной записи суперпользователя.
Каждому файлу в Linux назначается набор разрешений, определяющих, кто и что может делать с этим файлом. Эти разрешения обозначаются специальными буквами:
r
(read) — разрешение на чтение файла;w
(write) — разрешение на запись в файл;x
(execute) — разрешение на запуск файла;- `` (прочерк) — разрешение не установлено.
Важно помнить, что каталоги Linux тоже считает файлами, поэтому для них действительны все те же разрешения и ограничения. Однако указанные разрешения не имели бы большого смысла, если бы они распространялись на всех пользователей операционной системы. К счастью, это не так: в Linux имеется три категории пользователей, для каждой из которых можно устанавливать свои собственные разрешения доступа к файлам:
- владелец — пользователь, который создал этот файл или назначен его владельцем. Владельцем файла может быть не только учетная запись, но и сама операционная система или приложение, которое создало файл;
- группа — группа пользователей, «привязанная» к данному файлу. Ты можешь узнать, к какой группе пользователей относится твоя учетная запись, с помощью консольной команды
groups <username>
. Список всех зарегистрированных в системе групп обычно хранится в папке/etc/group
; - другие — все, кто не относится к владельцу файлового объекта или группам пользователей.
Таким образом, разрешения доступа к любому файлу или папке можно записать в виде строки, состоящей из девяти символов и имеющей следующий вид:rwxrwxrwx
Первые три символа здесь определяют разрешения для владельца файлового объекта, вторые — для группы, к которой относится владелец файла или папки, последние три — для всех остальных. Разрешения всегда следуют именно в таком порядке: «чтение, запись, запуск», то есть rwx
. Например, обозначение вида rwxrw-r--
означает, что владелец этого файла может делать с ним что угодно, члены его группы — только читать и писать в файл, но не запускать его (разрешение x
не установлено), а всем остальным пользователям системы файл доступен только на чтение.
Если эти разрешения установлены для папки, это означает, что пользователи группы также не смогут запускать хранящиеся в ней файлы, а прочим пользователям открыт доступ к содержимому папки исключительно в режиме read only.
Просмотреть права и разрешения файлов и папок можно с помощью консольной команды ls
, снабженной ключом -l
.
Чтобы изменить права доступа, существует команда chmod
(Change Mode). При помощи этой команды можно даже не прописывать все требуемые разрешения вручную: для лентяев в Linux предусмотрены цифровые обозначения стандартных наборов разрешений. Например, команда chmod 755 filename
присвоит файлу filename
разрешения rwxr-xr-x
(каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать), chmod 777 filename
даст на выходе rwxrwxrwx
(все могут делать все, что захотят), а «дьявольская» команда chmod 666 filename
— вернет rw-rw-rw-
(все пользователи могут читать и редактировать файл).
В современном Linux существуют еще так называемые специальные разрешения, но их мы рассматривать не будем: для начала информации вполне достаточно, чтобы чувствовать себя в системе более‑менее уверенно.
ССЫЛКИ
В Windows существуют ярлыки — что это такое, объяснять, думаем, никому не нужно. В Linux вместо них ссылки, причем двух видов — жесткие и символические.
Жесткая ссылка — это, считай, название файла. Просто в Linux их у файла может быть несколько, причем находиться они могут в разных каталогах. Следовательно, если ты создашь жесткую ссылку, а потом удалишь исходный файл, то он по‑прежнему будет доступен по ссылке — ведь она ничем не хуже исходного названия, которое ты стер!
Если же ты удалишь последнюю жесткую ссылку, файловая система больше не будет считать, что файл существует, и признает место, где он расположен, пригодным для записи другой информации.
Символические ссылки больше похожи на стандартные ярлыки Windows. Они содержат адрес целевого файла или каталога (жестких ссылок на каталог не бывает), и если он исчезнет, то ссылка будет вести «в никуда».
Жесткие ссылки создаются командой ln файл ссылка
, а если нужно сделать символическую ссылку, добавь ключ -s
.
Полезные шпаргалки
Вся мощь команд Linux — в дополнительных параметрах, которые ты можешь указать. Чтобы узнать о них, нужно читать справку (man), но есть способы схитрить и облегчить себе жизнь.
- tldr pages — сокращенная версия man, в которой дотошные описания покромсали до абсолютного минимума (подробнее);
- cheat.sh — онлайновая база данных с примерами популярных вариантов команд (подробнее);
- Marker — похожая штука, но офлайновая и с подсказками «на лету» (подробнее);
- explainshell.com — сервис, который автоматически разбирает сложную команду и объясняет значение ее составных частей;
- DevDocs — если предпочитаешь все же работать с графическим интерфейсом, то, возможно, тебе приглянется браузер документации.
Запомнить все параметры всех команд невозможно, поэтому даже заядлые линуксоиды прибегают к таким хитростям (и неустанно изобретают всё новые)!👽