Что такое файл в линукс
Типы файлов Linux
В GNU/Linux как и других Unix-подобных операционных системах понятие типа файла не связано с расширением файла (несколькими буквами после точки в конце имени), как это обстоит в Windows.
Unix-подобная ОС не следит за расширениями файлов. Задача связать расширения файла с конкретным пользовательским приложением, в котором этот файл будет открываться, видимо лежит на какой-либо дополнительной программе. В свою очередь пользовательское приложение анализирует структуру данный файла, расширение ему также безразлично.
Таким образом, среди файловых атрибутов, хранящихся в операционной системе на базе ядра Linux, нет информации о типе данных в файле. Там есть информация о более существенном разделении, связанном с тем, что в Unix-подобных системах все объекты – это файлы. Все объекты весьма разнообразны. Поэтому тип файла в Linux – это скорее тип объекта, но не тип данных как в Windows.
В операционной системе GNU/Linux существуют следующие типы файлов: обычные файлы, каталоги, символьные ссылки, блочные устройства, символьные устройства, сокеты, каналы. Каждый тип имеет собственное обозначение одним символом. Знание этих символов нам пригодится в дальнейшем при изучении командной оболочки Bash.
Обычные файлы (-)
Сюда относятся все файлы с данными, играющими роль ценной информации сами по себе. Linux все-равно текстовый перед ним файл, исполняемый или картинка. В любом случае это будет обычный (regular) файл. Все они обозначаются знаком минус «-«. Остальные типы файлов считаются специальными (special).
Каталоги (d)
В Linux каталог представляет собой такой тип файла, данными которого является список имен других файлов и каталогов, вложенных в данный каталог. Напрямую, то есть через какой-либо редактор, пользователь не может редактировать данные файла-каталога. Редактированием занимается ядро операционной системы, получая, в том числе от пользователя, команды создания файла, удаления и др.
В файле каталога осуществляется связь между именами файлов (словесного обозначения для людей) и их индексными дескрипторами (истинным именем-числом, которым оперирует ОС).
В Unix-подобных системах один и тот же файл может существовать под разными именами и/или в разных каталогах: все имена будут связаны с одним и тем же индексным дескриптором (механизм жестких ссылок).
Также следует, что файлы всегда должны содержаться в каталогах, иначе станут недоступны, так как нигде не будет содержаться записи о них.
Символьные ссылки (l)
Символьная ссылка – это файл, в данных которого содержится адрес другого файла по его имени (а не индексному дескриптору).
Выполнение символьной ссылки приводит к открытию файла, на который она указывает. Это аналог ярлыков в операционной системе Windows.
Если удалить исходный файл, то символьная ссылка продолжит существовать. Она по-прежнему будет указывать на файл, которого уже нет.
Символьные ссылки не содержат атрибутов файлов, на которые они указывают. У них есть собственные атрибуты.
Символьные (c) и блочные устройства (b)
Файлы устройств предназначены для обращения к аппаратному обеспечению компьютера (дискам, принтерам, терминалам и др.). Когда происходит обращение к файлу устройства, то ядро операционной системы передает запрос драйверу этого устройства.
К символьным устройствам обращение происходит последовательно (символ за символом). Примером символьного устройства может служить терминал.
Считывать и записывать информацию на блочные устройства можно в произвольном порядке, причем блоками определенного размера. Пример: жесткий диск.
Сокеты (s) и каналы (p)
Чтобы понять, что такое канал и сокет, необходимо понимание процессов в операционной системе. И каналы и сокеты организуют их взаимодействие. Пользователь с данными типами файлов почти не сталкивается.
Ключевым отличием канала от сокета является то, что канал однонаправлен. Через канал один процесс всегда передает данные второму, но не наоборот. Сокеты позволяют передавать данные в разных направлениях, т. е. осуществляют связь.
Также следует отметить, что канал представлен в структуре каталогов файлом, только если он именован. Когда возникают безымянные каналы, то они существуют только внутри ядра Linux.
Команда file
Хотя выше было сказано, что Линукс не делает предположение о типе данных в обычном файле, есть специальная утилита, которая выполняет эту задачу, – программа file. Для этого она анализирует начало содержимого файла и находит в нем специальные «сигналы», характерные для определенного типа – бинарного файла, текстового, изображения и др.
На скриншоте также показано, что расширение для программы file безразлично. Файл flag – копия flag.png, и программа успешно его идентифицировала как изображение.
Команда file имеет множество различных ключей.
Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.
К почти любой возможности можно обратиться как к файлу, попытаться открыть его с помощью текстового редактора, записать туда данные или сделать что-либо подобное. В этой статье мы подробно рассмотрим что на деле означает эта концепция и немного поэкспериментируем с ней.
Всё есть файл
Давайте сначала разберемся как вообще это может работать. В Linux есть такое понятие как корневая файловая система. В качестве неё монтируется раздел жесткого диска, на котором установлен Linux. В различные подпапки подключаются другие реальные разделы жесткого диска, например, домашний раздел подключается в папку /home, а загрузочный в папку /boot. Но существуют не только реальные файловые системы, но и виртуальные файловые системы, созданные ядром, например в папку /proc монтируется файловая система procfs, которая позволяет получить доступ к параметрам ядра, а в папку /dev монтируется devfs содержащая устройства, подключённые к компьютеру и тоже в виде файлов.
Конечно, в этих файловых системах размещены не совсем обычные файлы. В статье типы файлов Linux мы рассматривали все существующие типы файлов. Если вы посмотрите на обычный файл, например, /etc/passwd с помощью утилиты file, то увидите информацию об этом файле:
Это текстовый файл в реальной файловой системе и вы можете открыть его с помощью текстового редактора, посмотреть содержимое или записать туда данные.
Давайте начнём с устройств. В каталог /dev монтируется файловая система devfs и тут находятся все подключённые к Linux устройства, а также некоторые интерфейсы для доступа к возможностям ядра:
Если попытаться посмотреть информацию, например, о файле /dev/sda1, то утилита сообщит нам что это блочный файл:
Это значит, что такой файл можно открыть с помощью какого-либо редактора разделов диска и настроить этот диск. Конечно, его можно попытаться посмотреть содержимое файла с помощью cat, но из этого ничего хорошего не выйдет потому что там хранятся двоичные данные:
Работает это и в обратную сторону. Вы можете открыть любой обычный файл в редакторе разделов диска и создать в нём файловую систему вместо его содержимого:
Например, здесь я открыл изображение. Важно отметить что всё содержимое файла будет стёрто.
Ещё в каталоге /dev существуют символьные файлы, например, /dev/random, /dev/null и /dev/zero. Открывая первый вы всегда будете получать случайную последовательность данных, во второй можно записывать любые данные и они никуда не будут сохранены, а третий всегда пустой, если копировать из него данные на какой-нибудь раздел, там всегда будут нули.
Информация об операционной системе, ядре и выполняемых в системе процессах находится в директории /proc. Все эти файлы можно посмотреть с помощью утилиты ls:
Например, информация об использовании оперативной памяти размещена в файле /proc/meminfo. Вы можете попытаться посмотреть информацию об этом файле:
Это файл, но утилита сообщает, что он пустой. Однако, если вы попытаетесь прочитать из него данные, то получите вполне интересную информацию о состоянии памяти. Например, откроем его в текстовом редакторе:
Но записать туда ничего не получится, эта файловая система доступна только для чтения. Таких файлов здесь много. Самые интересные из них описаны здесь.
Он тоже вроде как пустой. Но в нём содержаться данные:
И их можно изменить:
echo «0» | sudo tee /proc/sys/net/ipv4/ip_forward
Фактически, можно было просто сделать так:
echo «0» > /proc/sys/net/ipv4/ip_forward
Или даже попытаться редактировать файл в текстовом редакторе. Но такая команда не будет работать, если её не выполнить в оболочке суперпользователя. А текстовый редактор обычно пытается сначала создать резервную копию файла, который он будет менять, а ничего создать в этой папке у него не выйдет.
Для сетевого взаимодействия и взаимодействия между программами используются сокеты. И это тоже файлы, хотя они чуть отличаются от привычных нам файлов. Сокеты используются для того чтобы программно писать и читать их них данные, таким образом программы могут взаимодействовать между собой. Давайте создадим свой сокет. Для этого выполните:
Утилита file сообщит, что это сокет:
Но открыть сокет в текстовом редакторе или с помощью утилиты cat не получится, придется подключится к нему с помощью той же утилиты nc:
После этого любые данные, которые вы будете набирать в одной консоли, будут отображаться в другой. Но это всё ещё файл, потому что вы можете вывести список сокетов из определённой папки с помощью ls.
Выводы
Вот так и работает концепция всё есть файл в Linux. Все возможные функции операционной системы представлены в виде файлов и это удобно, потому что для доступа к любой из функций не надо писать отдельный инструмент, а можно использовать уже существующие и проверенные программы. Такие утилиты для работы с файлами как cat, ls и echo справляются в большинстве случаев.
Типы файлов в Linux
Пространство нашего жесткого диска занято файлами разных типов. Например, взять даже наш корневой раздел (/), при создании файла, файловая система записывает его в определенном формате на нужное физическое место жесткого диска. Всегда, для работы с файлами используется файловая система, но не всегда она записывает файлы на диск, файловая система может работать на лету, генерируя файлы, например, как procfs, с помощью которой может быть выполнена настройка ядра linux или записывать файлы в оперативную память, как tmpfs расположенная в папке /tmp. Но все это не имеет значения, ведь в любом случае мы имеем дело именно с файлами.
В системе Linux нет различий между каталогами и файлами. Но каталоги могут объединять другие файлы в группы, чтобы их было легче найти и использовать. Все аппаратные устройства представлены в виде файлов и находятся в каталоге dev, только через эти файлы программы могут работать с ними.
Преимущество использования файлов как для обычной информации, так и для устройств, в том, что не нужно реализовать отдельный набор API интерфейсов для каждого устройства, с ним могут работать все стандартные утилиты Linux и API интерфейсы.
Типы файлов в Linux
Файлы в операционной системе Linux можно поделить на три основных типа:
Дальше рассмотрим более подробно эти типы файлов linux.
Обычные файлы
Это файлы, с которыми мы привыкли работать каждый день, они могут содержать текст, исполняемые инструкции для программ, изображения или другую информацию. Это самый распространенный тип файлов, которые вы можете найти в системе Linux. Рассмотрим небольшой список относящихся сюда файлов:
Утилита ls может определять тип файла в режиме списка, обычные файлы обозначаются черточкой, например:
Эта статья была бы неполной, если бы мы рассматривали типы файлов, но не упомянули о форматах. Дело в том, что все обычные файлы сохранены в определенном формате, это нужно, чтобы система знала какой программой нужно открывать файл.
Посмотреть форматы файлов linux можно с помощью утилиты file. Например:
Система сообщила что это исполняемый файл, а теперь посмотрим обычный, текстовый:
Утилита умеет распознавать все известные форматы файлов. Чтобы узнать вывести все доступные форматы файлов linux наберите:
Специальные файлы
Специальные файлы намного интереснее, они предназначены для обмена информации с ядром, работы с устройствами или общения между программами. Такие файлы могут тоже быть нескольких типов, в зависимости от назначения.
Утилита ls обозначает блочные файлы буквой b, например, выберем все блочные файлы из каталога /dev:
Утилита file, которую мы рассматривали в предыдущем разделе тоже умеет определять типы файлов:
Символьные файлы обеспечивают не буферизованный доступ к аппаратным компонентам и ядру. Поскольку у них нет буфера, они позволяют передавать только по одному символу за один раз. А в остальном, это такие же файлы устройств, как и блочные файлы.
Вы также можете отфильтровать их с помощью ls. Символьные файлы обозначаются буквой c (character):
Но вернемся к символическим ссылкам. Утилита ls обозначает их буквой l (link):
Создавать символические ссылки можно с помощью утилиты ln. Например:
Обозначаются такие типы файлов linux буквой p (pipe):
Чтобы создать именованный тоннель вы можете использовать утилиту mkfifo:
echo «test test test» > pipe1
После создания туннеля мы передали в него данные, и оболочка стала не интерактивной. Она будет ожидать пока данные будут прочитаны на другом конце туннеля. Открываем другую оболочку и читаем данные:
while read line ;do echo «Data: ‘$line’ «; done
Файлы сокетов обозначаются буквой s:
Создать сокет можно с помощью функции socket() на языке программирования Си, чтение и запись выполняется системными вызовами read() и write(). Но нам сейчас не нужно писать реальную программу, будет достаточно немного поиграться. Поэтому воспользуемся утилитой nc. Создаем Unix сокет:
Подключаемся к нему из другой консоли:
Все данные, которые вы будете набирать в одной из консолей будут отправляться на другую после нажатия Enter, связь работает в обоих направлениях.
Каталоги
Это специальные файлы, которые позволяют объединять другие и каталоги в группы для более простой навигации и поиска. Естественно, они могут содержать как обычные, так и специальные файлы, одним словом любые типы файлов ос linux. В системе Linux, файлы организуются в папки начиная от корня (/)
Обозначаются каталоги буквой d (directory):
Создать каталог в linux можно с помощью команды mkdir:
Заключение
Теперь у вас более четкое представление о том, почему в linux все является файлами, а также какие типы файлов в linux существуют в вашей системе. Вы можете найти более подробную информацию по каждому виду файлов в интернете, но если у вас остались вопросы, можете задать их в комментариях!
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Перед тем как начать, вспомним, что такое файловая система. Прежде всего, это порядок, определяющий способ организации, хранения и именования информации на устройствах хранения, а только потом практическая реализация этого порядка. Т.е. первичен некий свод правил: что где лежит, как называется и т.д. и т.п., а практические реализации файловых систем, например, NTFS или ext4, это технический способ организации информации на определенном типе носителя в соответствии с принятыми правилами.
За примерами далеко ходить не надо, каждый пользователь Windows знает, что файлы лежат в папках, папки на разделах (логических дисках), а систему следует искать в папке Windows системного диска. Точно также любой Linux администратор будет искать настройки в /etc, логи в /var/log, а свои собственные документы в /home.
Так как большинство начинающих Linux администраторов уже имеют достаточный опыт работы с файловой системой Windows, то прежде всего мы рассмотрим, что общего у двух систем, а чем они отличаются. Понимание этих моментов поможет по максимуму использовать уже имеющийся опыт, в тоже время, не совершая глупых ошибок.
Структура файловой системы
Начнем с привычного и понятного.
Этот момент вызывает у новичков множество непониманий. Но на самом деле нет ничего сложного, файловая система в Linux просто организована по-другому, но при этом она по-своему стройна, логична и понятна.
Давайте еще раз рассмотрим схему с Windows. На ней имеется один физический диск для системы, второй для пользовательских данных и компакт диск с музыкой. А теперь взглянем на другую схему, где мы показали аналогичную организацию размещения данных в среде Linux.
У нас также имеется системный диск, на котором расположен корень файловой системы и все системные папки. Пользовательские данные все также располагаются на втором физическом диске, но в системе вы его не увидите. Почему? Да потому что в файловой системе Linux такого понятия нет. Новички на этом месте обычно впадают в панику, считают что диск не определился и начинают судорожно искать его где можно и где нельзя.
Съемные носители, такие как компакт-диски, флешки и т.п. в графической среде монтируются автоматически в предопределенную директорию /media, а в рабочем окружении появляется ярлык, что делает работу с ними неотличимой от Windows. В серверной среде вам потребуется монтировать съемные носители вручную, также вы можете выбрать произвольную точку монтирования, но лучше не изобретать велосипед, а использовать /media.
В Linux процесс выглядит немного посложнее: новый диск временно монтируется, скажем, в /mnt, затем на него переносится содержимое папки /home/Музыка, после чего он монтируется на постоянной основе в точку /home/Музыка. В итоге наша коллекция лежит на отдельном жестком диске, но все плейлисты как работали с /home/Музыка так и продолжают работать.
Эту возможность трудно переоценить, особенно когда надо вынести на отдельный раздел не коллекцию музыки, а базу почтового сервера или содержимое хранилища виртуальных машин.
Имена файлов и расширения
Имена файлов и папок в Linux ограничены длинной в 256 символов и запретом на / (слеш). Отдельно следует упомянуть о символах . (точка) и
Если передать его по SSH то ситуация будет немного получше, подчеркиваниями заменятся только запрещенные символы, а просто перетащив файл из окна виртуальной машины мы получили третий вариант именования файла.
Поэтому, если вы не хотите превращения имени вашего файла в нечто совершенно неожиданное, то не используйте в именах символы:
Также не злоупотребляйте служебными символами в начале имени, например, никто не мешает создать вам файл с именем -text, однако при попытке скопировать его в консоли вы получите неожиданный результат:
Пока вы работаете с такими файлами в среде Linux проблем не будет, но если мы их попытаемся скопировать на флешку FAT32, то сразу возникнут затруднения.
Но это цветочки, ягодки будут тогда, когда вам понадобиться перенести на Windows платформу, скажем, веб-сайт со всем содержимым, куда на протяжении длительного времени заливались многочисленные image.jpg, Image.jpg или image.JPG.
Поэтому примите к сведению и постарайтесь соблюдать еще одно простое правило: все имена файлов набирать только в нижнем регистре, верхний регистр допускается там, где он уместен, например, в именах собственных. Также не забывайте о спецсимволах. Почему? Просто посмотрите на скриншот ниже:
Однако это не говорит, что Linux игнорирует расширения файлов. В графической среде, для удобства пользователя, расширения точно также ассоциируются с приложениями, как и в Windows. Но есть и отличия, вы можете дать файлу несуществующее расширение или оставить его без расширения вообще, система правильно определит тип содержимого и сопоставит его с программой. А вот присвоив ему зарезервированное расширение вы просто сопоставите файл программе, без учета его содержимого.
Как видим документ LibreOffice успешно определяется последним невзирая на «левое» или отсутствующее расширение, но присвоив ему расширение jpg, мы сопоставим его программе просмотра изображений и получим ошибку при открытии.
С изображением и иным медиаконтентом связана еще одна особенность, если у файла есть расширение, то система не будет определять его реальное содержимое и будет пытаться открыть его так, как указано в расширении. Простой пример: мы переименовали файл jpg в png, после чего получили ошибку при попытке его открыть, в тоже время тот же самый файл без расширения вообще открывается нормально.
В Windows jpg переименованный в png (и наоборот) открываться будет нормально, разве что специализированный софт (например, Photoshop) станет ругаться. Поэтому если у вас в Linux перестали открываться мультимедийные файлы, которые нормально открываются в Windows, попробуйте просто удалить им расширение, чтобы система самостоятельно определила содержимое. Для примера мы специально удалили расширения у файлов различных типов, что из этого вышло можно увидеть ниже:
Конечно не со всеми типами файлов все гладко, так документы формата MS Office 2007 и выше (docx, xslx и т.п.) будут определяться как zip-архивы, которыми на самом деле и являются, но мы думаем, что ситуация, когда вы получите офисный документ без расширения на практике вам не встретится.
Жесткие и символические ссылки
Начав работать с Linux вы обязательно столкнетесь с этим типом файлов. Они не имеют прямого аналога в файловой системе Windows и поэтому на них стоит остановиться подробнее.
Начнем с символических ссылок, в первом и достаточно грубом приближении они напоминают ярлыки Windows, это специальный тип файла, который служит указателем на другой файл. Но при этом, в отличии от ярлыка, воспринимается системой прозрачно, т.е. не как файл ярлыка, а как файл типа, на который указывает ссылка. Проще говоря, мы не можем подсунуть Windows приложению ярлык на библиотеку вместо библиотеки, а в Linux это общепринятая практика.
Символические ссылки широко применяются в случаях, когда один и тот-же файл должен быть доступен под разными именами или в разных местах, но при этом его содержимое не должно меняться. Например, некое приложение требует библиотеку lib-1.0.1.so, в то время как есть совместимая библиотека lib-1.0.5.so, в этом случае создаем символическую ссылку на lib-1.0.5.so с именем lib-1.0.1.so и проблема решена. Другой случай, приложение требует lib-1.0.5.so, которая есть в системе, но ищет ее в другом месте, в этом случае делаем символическую ссылку с таким же именем, но в нужное расположение.
Символические ссылки можно создавать не только на файлы, но и на каталоги. Также нет ограничения на физическое расположение символических ссылок в пределах одной физической файловой системы (одного раздела).
Для чего могут понадобиться жесткие ссылки? Самое распространенное их применение, это создание полных копий файла без лишних затрат дискового пространства. Например, инсталляционные пакеты. Допустим нам надо выложить на FTP несколько вариантов ПО, в каждый из наборов которого входят некие общие пакеты и документация, причем нужна синхронизация между этими файлами, например, если мы внесли изменения в документацию, это должно отразиться во всех наборах. Жесткие ссылки отлично решают эту задачу.
В тоже время жесткие ссылки создают дополнительную путаницу, особенно если вам нужно удалить файл во всех местах использования. Поэтому подходите к использованию жестких ссылок с осторожностью и не злоупотребляйте ими, так как в большинстве случаев символических ссылок более чем достаточно.
Жесткие ссылки, так как являются дополнительной записью в inode, могут использоваться только в пределах одного физического раздела. Также спецификации POSIX запрещают создание жестких ссылок для каталогов.
Права доступа
Еще одним неотъемлемым атрибутом любой файловой системы являются права доступа к файлам и папкам. Linux унаследовал классическую UNIX-систему прав, они не так гибки, как хотелось бы, но обеспечивают приемлемый уровень гибкости и безопасности для простых систем.
Права доступа к файлу (а как мы помним, в Linux все есть файл) хранятся в специальном 16-битовом поле атрибутов файла:
Тип объекта | Особые признаки | Права доступа | |||||||||||||
SUID | SGID | sticky | Пользователь | Группа | Остальные | ||||||||||
# | # | # | # | s | s | t | r | w | x | r | w | x | r | w | x |
Первые четыре бита устанавливают флаг типа объекта, они задаются при создании файла и не могут быть изменены. Флаг может иметь следующие значения:
Следующие три бита хранят особые признаки, влияющие на запуск исполняемых файлов и некоторые иные права, к ним мы вернемся несколько позже. И наконец следующие девять бит, разделенные на блоки по три бита содержат права доступа к файлу или директории.
Каждый файл в UNIX должен иметь владельца (пользователь, user), группового владельца (группа, group) и остальных пользователей (остальные, other), каждый из этих пользователей может иметь права на чтение (r), запись (w) и исполнение (x).
Как нетрудно заметить, w без х не имеет никакого смысла и равносильно его отсутствию.
Запись прав может производиться как в символьной, так и в числовой форме, для этого используют двоичное или восьмеричное (что удобнее) значение установленных битов.
OCT | BIN | Символьное | Права на файл | Права на каталог |
0 | 000 | — | отсутствие прав | отсутствие прав |
1 | 001 | —x | право на исполнение | право на доступ к файлам и атрибутам |
2 | 010 | -w- | право на запись | отсутствие прав |
3 | 011 | -wx | право на запись и исполнение | все права, кроме получения имен файлов |
4 | 100 | r— | право на чтение | право на получение имен файлов |
5 | 101 | r-х | право на чтение и исполнение | право на получение имен файлов и доступ к ним |
6 | 110 | rw- | право на чтение и запись | право на получение имен файлов |
7 | 111 | rwx | все права | все права |
В то время, как в системе используются преимущественно символьные обозначения, для целей администрирования обычно используются цифровые восьмеричные значения. Потому что проще, быстрее и удобнее написать, что права на файл должны быть 644, а не rw-r—r—.
На практике из всех сочетаний флагов доступа реально используются только 0, 4, 5, 6, 7 для файлов и 0, 5, 7 для папок.
Разобравшись с основными правами перейдем к особым признакам, таких три:
OCT | BIN | Наименование | Действие |
1 | 001 | sticky | удалить файл может только владелец или root |
2 | 010 | SGID | файл запускается на исполнение с правами группового владельца |
4 | 100 | SUID | файл запускается на исполнение с правами владельца |
Начнем с младшего бита, его установка означает установку sticky-бита для каталога, установка данного флага для файлов в современных системах игнорируется. Дословно sticky обозначает «липкий», что довольно хорошо соответствует его смыслу. После установки данного флага удалить файл из каталога может только его владелец или суперпользователь, даже если на файлы и папку стоят права 777.
Опции SUID и SGID позволяют любому пользователю запускать файл на исполнение с правами его владельца или группы. Для чего это нужно? В обычных условиях файл запускается с правами текущего пользователя, что не всегда достаточно для его работы. Например, таким образом работает утилита passwd, нам нужно чтобы пользователь имел возможность изменить свой пароль без повышения прав, но данная операция требует прав суперпользователя. Как быть? Использовать признак SUID. Если мы проверим права на утилиту, то увидим запись rwsr-xr-x или 4755.
При установке признаков SUID и SGID они заменяют символ x на s в соответствующей группе символьного представления или записываются перед основными правами в восьмеричном виде. Вообще-то в цифровом виде все права следует записывать в четырехзначном формате, так как если особые признаки не установлены, то это 000 BIN или 0 OCT. Т.е. правильно писать не 777, а 0777, но обычно для краткости первый ноль опускают.
Если установлены несколько признаков, то записывается восьмеричное число аналогичное установленным битам в двоичном формате, например, SUID + sticky это 101 BIN или 5 OCT. Установленный sticky-бит заменяет x на t в группе other. Ниже показан каталог с правами 7775 или rwsrwsr-t, что соответствует установке на него SUID, SGID и sticky-бит одновременно.
Данная запись сделана нами исключительно в тестовых целях, так как установка SUID для каталога не имеет смысла, а установка SGID приведет к тому, что групповым владельцем создаваемых в нем файлов будет группа владельца каталога, а не группа создавшего его пользователя, как происходит по умолчанию. Также, ввиду потенциальной опасности, игнорируется установка SUID и SGID для скриптов.
В графической среде установка прав разнится в зависимости от выбранного настольного окружения, например, в Unity настройки выполнены в понятной пользователю форме, но особые признаки не отображаются и не могут быть установлены, а для папок присутствует бесполезный набор прав r—.
В XFCE не потрудились задать понятные и логичные наборы для файлов и папок, ограничившись стандартным перечислением, включая бесполезные -w- и -wx, также отсутствует явное указание признака «исполняемый», вместо этого флаг x автоматически добавляется к любому набору прав владельца.
И наконец KDE сочетает достаточно лаконичный основной набор прав с возможностью установки признака «исполняемый» для файлов и sticky-бит для папок с возможностью явно указывать особые признаки в дополнительных настройках.
В любом случае следует помнить, что графический интерфейс не является основным средством администрирования Linux, а представляет надстройку над средствами командной строки. В следующей части нашей статьи мы как раз уделим внимание приемам работы с файловой системой Linux в консольной среде.
Дополнительные материалы:
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал: