Как вложить кавычки в четыре кавычки?

Из связанной inode вики-страницы:

Файловая система полагается не только на содержимое файла, но и на структуры данных о файлах. Первые называются метаданными - данными, описывающими данные. Каждый файл связан с индексным дескриптором, который идентифицируется целым числом, часто называемым i-номером или номером индексного дескриптора.

Inodes хранят информацию о файлах и каталогах (папках), такую ​​как права собственности на файлы, режим доступа (права на чтение, запись, выполнение) и тип файла. Во многих типах реализаций файловых систем максимальное количество inodes фиксируется при создании файловой системы, ограничивая максимальное количество файлов, которое может содержать файловая система. Типичная эвристика распределения для индексных дескрипторов в файловой системе составляет один процент от общего размера.

Номер индексного дескриптора индексирует таблицу индексных дескрипторов в известном месте на устройстве; от номера inode драйвер файловой системы ядра может получить доступ к содержимому inode, включая расположение файла, разрешающего доступ к файлу. Номер inode файла можно найти с помощью команды ls -i . Команда ls -i печатает номер i-узла в первом столбце отчета.

Как отмечалось выше, ls -i может дать вам номер inode - скорее всего, это место, где находится ссылка. ls -l предоставит вам путь к цели ссылки. Для последнего потребуется системный вызов stat () , но, поскольку список каталогов файла - его dentry - будет содержать его номер inode и имя файла, ls -i ] форма скорее всего не будет. По крайней мере, в зависимости от файловой системы, он, скорее всего, не потребует stat () для любого файлового объекта, кроме содержащего его каталога.

Вы можете изменить способ ls отчета о ссылках со следующими параметрами, как , указанными в POSIX :

-F - Не переходить по символическим ссылкам с именем операнды, если не указаны параметры -H или -L. Напишите косую черту ('/') сразу после каждого пути, являющегося каталогом, звездочку ('*') после каждого исполняемого файла, вертикальную черту ('|') после каждого имени FIFO и знак at ( '@') после каждого, что является символической ссылкой. Для других типов файлов могут быть написаны другие символы.

-H - Если в командной строке указана символическая ссылка, ссылающаяся на файл типа «каталог», ls должен оценить информацию о файле и тип файла как те, на которые ссылается ссылка, а не ссылку. сам; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка.

-L - Оценить информацию о файле и тип файла для всех символических ссылок (названных в командной строке или встречающихся в файловой иерархии), чтобы они соответствовали файлу, на который ссылается ссылка, а не самой ссылке. ; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка. Когда -L используется с -l, записывать содержимое символических ссылок в длинном формате (см. Раздел STDOUT).

А как ссылка может быть быстрой ? Из той же связанной вики-страницы :

Встраивание

Может иметь смысл хранить очень маленькие файлы в самом inode, чтобы сэкономить как пространство (блок данных не нужен), так и время поиска (нет требуется дополнительный доступ к диску). Эта функция файловой системы называется встраиванием. Таким образом, при использовании современных файловых систем нельзя предполагать строгое разделение индексных дескрипторов и файловых данных.

Если данные файла умещаются в пространстве, выделенном для указателей на данные, это пространство можно удобно использовать. Например. ext2 хранит данные символических ссылок (обычно имена файлов) таким образом, если размер данных не превышает 60 байт («быстрые символические ссылки») .

Ext4 имеет параметр файловой системы inline_data, который, если он включен во время создания файловой системы, позволяет ext4 выполнять встраивание. Поскольку размер inode ограничен, это работает только для очень маленьких файлов.

Это метод, описанный выше, и я считаю, что другой отличный ответ здесь называется тот же трюк ...

1
13.04.2017, 15:36
1 ответ

Будет легче, если ты немного расскажешь:

watch -ben5 '
    lsof /mnt/unfs &&
    ps    -o tty= -p "$(lsof -F p0 /mnt/unfs | sed -e "s/p//")" |
    xargs -I terms sudo sh -c '\''
        printf "\n\33[97;101m%s\33[31;49m%s\33[97;101m%s\33[39;49m\n" \
               "GET OUT OF UNFS" " cd ~ " "NOW!" >/dev/terms'\'''

Мне довольно трудно понять, что именно здесь происходит. Но если вы хотите добавить это в псевдоним, все довольно просто: просто добавьте еще один '. Вот трюк:

alias myalias="$(cat <<\IN
watch -ben5 '
    lsof /mnt/unfs &&
    ps    -o tty= -p "$(lsof -F p0 /mnt/unfs | sed -e "s/p//")" |
    xargs -I terms sudo sh -c '\''
        printf "\n\33[97;101m%s\33[31;49m%s\33[97;101m%s\33[39;49m\n" \
               "GET OUT OF UNFS" " cd ~ " "NOW!" >/dev/terms'\'''
IN
)"

Here-document - это еще одна форма оболочки-цитаты. И все кавычки могут содержаться в твердых кавычках, кроме твердых. Таким образом, вы можете пройти столько уровней, сколько захотите, найдя каждое появление твердой котировки и скрывшись от нее. Под этим я подразумеваю превращение каждой ' в '\'. После этого вы можете обернуть все утверждение в другой слой котировок. И на самом деле, псевдоним делает это за Вас:

alias myalias

myalias='    watch -ben5 '\''
    lsof /mnt/unfs &&
    ps    -o tty= -p "$(lsof -F p0 /mnt/unfs | sed -e "s/p//")" |
    xargs -I terms sudo sh -c '\''\'\'\''
        printf "\n\33[97;101m%s\33[31;49m%s\33[97;101m%s\33[39;49m\n" \
               "GET OUT OF UNFS" " cd ~ " "NOW!" >/dev/terms'\''\'\'\'\'
1
27.01.2020, 23:50

Теги

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