Можно перенаправить все, что Вы хотите 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
команда (обычно пейджер)).
Точные детали могут зависеть от файловой системы, но концептуально, да, ACLs являются метаданными, сохраненными в файле inodes точно так же, как традиционные полномочия, даты, и т.д.
Так как размер ACLs может варьироваться, они могут закончить тем, что были сохранены в отдельных блоках. Однако детали только имеют значение, разрабатываете ли Вы файловую систему или программируете драйвер файловой системы.
Для Ext4:
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes
"Расширенные атрибуты (xattrs) обычно хранятся в отдельном блоке данных на диске и ссылаются от inodes через inode.i_file_acl*".
Смотрите на раздел 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, и т.д. реализуют Каждый.