sed как сбежать [

Да, файловые системы в Linux могут быть реализованы как модули ядра. Но есть также интерфейс FUSE (Filesystem in USErspace ), который позволяет обычному пользовательскому процессу -пространства выступать в качестве драйвера файловой системы. Если вы создаете прототип новой файловой системы, ее реализация сначала с использованием интерфейса FUSE может упростить тестирование и разработку. Как только вы проработаете внутреннюю часть файловой системы в форме FUSE, вы можете приступить к реализации оптимизированной по производительности -версии модуля ядра.

Вот некоторая основная информация о реализации файловой системы в пространстве ядра. Он довольно старый (1996 года выпуска! ), но это, по крайней мере, должно дать вам общее представление о том, что вам нужно будет делать.

Если вы решите пойти по маршруту FUSE, вот libfuse, эталонная реализация пользовательской стороны интерфейса FUSE.

Драйвер файловой системы как модуль ядра

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

Когда монтируется файловая система, и либо тип файловой системы указан в соответствии с вашим драйвером, либо выполняется автоматическое определение типа файловой системы -, виртуальная файловая система ядра (VFS для краткости )слой вызывает эта функция. По сути, он говорит: «Вот указатель на представление на уровне ядра -стандартного блочного устройства Linux. Взгляните на него, посмотрите, сможете ли вы с ним справиться, а затем скажите мне, что вы можете с ним сделать».

В этот момент ваш драйвер должен прочитать все, что ему нужно, чтобы убедиться, что это правильный драйвер для файловой системы, а затем вернуть структуру, которая включает указатели на дополнительные функции, которые ваш драйвер может выполнять с этой конкретной файловой системой. Или, если драйвер файловой системы не распознает данные на диске, предполагается, что он вернет соответствующий результат ошибки, а затем VFS либо сообщит об ошибке в пространство пользователя, либо -, если выполняется автоматическое определение типа файловой системы --попросит попробовать другой драйвер файловой системы.

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

Уровень VFS ожидает, что драйвер файловой системы сделает ряд стандартных функций доступными для уровня VFS; некоторые из них являются обязательными для того, чтобы уровень VFS мог делать что-либо значимое с файловой системой,другие являются необязательными, и вы можете просто вернуть NULL вместо указателя на такую ​​необязательную функцию.

1
08.05.2020, 08:46
1 ответ

Все, что вам нужно, это выйти из [с помощью\:

sed -i 's/\[/linux/' txtfile

Для полноты другой вариант заключается в том, чтобы поместить это [в квадратное выражение [...]:

sed -i 's/[[]/linux/' txtfile
10
28.04.2021, 23:15

Теги

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