Где данные ACL технически хранятся?

Можно перенаправить все, что Вы хотите echo но это ничего не сделает с ним. echo не читает его стандарт ввел. Все, что это делает, записать в стандартный вывод его аргументы, разделенные пробелом и завершенные символом новой строки (и с некоторыми echo реализации с некоторыми escape-последовательностями в них расширенный и/или аргументы, запускающиеся с - возможно рассматриваемый как опции).

Если Вы хотите echo для отображения содержания файла необходимо передать то содержание как аргумент echo. Что-то как:

echo "$(cat my_file.txt)"

Отметьте это $(...) разделяет запаздывающие символы новой строки от вывода этого cat команда, и echo добавляет тот назад.

Также отметьте это кроме с zsh, Вы не можете передать символы NUL в аргументах команды, так, чтобы выше обычно не работал с двоичными файлами. yash также удалит байты, которые не являются частью допустимых символов.

Если причина желания сделать, который является, потому что Вы хотите echo расшириться \n, \b, \0351... escape-последовательности в файле (как совместимый UNIX echo реализации делают, но не все), затем Вы использовали бы printf вместо этого:

printf '%b\n' "$(cat my_file.txt)"

Вопреки echo, тот является портативным и не будет иметь проблем, если содержание файла запускается с -.


Как альтернатива $(cat file), с ksh, zsh и bash, можно также сделать: $(. Это - специальный оператор посредством чего оболочка в противоположность cat читает содержание файла для составления расширения. Это все еще разделяет запаздывающие новые строки и дроссели на байтах NUL кроме zsh. В bash, это все еще разветвляет дополнительный процесс. Также обратите внимание, что одно различие - то, что Вы не получите ошибки при попытке считать файл каталога типа тот путь. Кроме того, в то время как $(< file) является особенным, $(< file; other command) не (в zsh, если не эмулируя другую оболочку, которая все еще развернула бы содержание file, путем выполнения неявного $READNULLCMD команда (обычно пейджер)).

7
04.10.2013, 03:51
3 ответа

Точные детали могут зависеть от файловой системы, но концептуально, да, ACLs являются метаданными, сохраненными в файле inodes точно так же, как традиционные полномочия, даты, и т.д.

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

9
27.01.2020, 20:16

Для Ext4:

https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes

"Расширенные атрибуты (xattrs) обычно хранятся в отдельном блоке данных на диске и ссылаются от inodes через inode.i_file_acl*".

2
27.01.2020, 20:16

Смотрите на раздел Extended Attributes данной статьи, названной: Списки управления доступом POSIX на Linux.

выборка

ACLs являются сведениями переменной длины, которые связаны с объектами файловой системы. Специализированные стратегии хранения ACLs в файловых системах могли бы быть разработаны, как Солярис делает в файловой системе UFS [13]. Каждый inode в файловой системе UFS имеет поле, названное i_shadow. Если inode имеет ACL, это поле указывает на тень inode. В файловой системе тень inodes используется как регулярные файлы. Каждая тень inode хранит ACL в своих блоках данных. Несколько файлов с тем же ACL могут указать на ту же тень inode.

Поскольку другое ядро и расширения пространства пользователя в дополнение к преимуществу ACLs от способности связать сведения с файлами, Linux и большинством других подобных UNIX операционных систем реализуют более общий механизм под названием Расширенные Атрибуты (EA). В этих системах ACLs реализованы как EA.

После раздела Extended Attributes это get's в специфические особенности того, как различные файловые системы, ext2/ext3, JFS, и т.д. реализуют Каждый.

2
27.01.2020, 20:16

Теги

Похожие вопросы