/sbin/mkfs.fs действует как двоичный файл, хотя это символический файл ссылки

Учитывая вывод команды ls :

 $ ls -l /sbin/mkfs.ext4 lrwxrwxrwx 1 root root 6 Aug 4 00:10 /sbin/mkfs.ext4 -> mke2fs $ type mkfs.ext4 mkfs.ext4 is hashed (/sbin/mkfs.ext4) 

mkfs.ext4 – символическая ссылка, указывающая на команду mke2fs . Ничего странного, все хорошо и прекрасно. Поэтому запуск mkfs.ext4 совпадает с запуском mke2fs . Обратите внимание на фигурные скобки, которые я добавил в выводе следующих команд:

 $ mke2fs Usage: {mke2fs} [-c|-l filename] [-b block-size] [-C cluster-size] --sinp-- $ mkfs.ext4 Usage: {mkfs.ext4} [-c|-l filename] [-b block-size] [-C cluster-size] --sinp-- 

Очевидно, что mke2fs использует имя файла для определения соответствующего типа файловой системы и даже для настройки его списка опций:

 $ ln -s /sbin/mke2fs mkmk $ ls -l mkmk lrwxrwxrwx 1 direprobs direprobs 12 Aug 8 14:25 mkmk -> /sbin/mke2fs $ ./mkmk Usage: mkmk [-c|-l filename] [-b block-size] [-C cluster-size] --sinp-- 

Мне удалось создать файловую систему ext2, используя mkmk , символическую ссылку, которую я создал с ln . Что означает mkmk для mke2fs , это должно быть ничего!

Как mke2fs использует имена файлов, из которых он запускается, чтобы определить тип файловой системы?

См. parse_fs_type в mke2fs.c :

  • если тип файловой системы указан явно (с использованием -t ), используйте
  • если инструмент работает на Hurd, используйте «ext2»;
  • если имя программы – mke3fs , используйте «ext3»;
  • если имя программы – mke4fs , используйте «ext4»;
  • если имя программы начинается с mkfs. , используйте суффикс;
  • в противном случае используйте значение по умолчанию, /etc/mke2fs.conf в /etc/mke2fs.conf , если оно есть;
  • в противном случае используйте «ext2», если только журнал не включен по умолчанию, и в этом случае используйте «ext3».

Полученная текстовая строка используется для поиска определения файловой системы в /etc/mke2fs.conf (кроме «ext2», который обрабатывается внутренне).

Таким образом, ваш mkmk закончил бы использование типа файловой системы ext2.

  • Параметр -t безоговорочно устанавливает тип файловой системы, и с этой опцией единственным эффектом любого имени программы является изменение того, какое имя для программы распечатывается в диагностических сообщениях по мере запуска программы.
  • В Hurd ext2 используется как тип файловой системы независимо от имени, которое вызывается программой, что опять влияет только на диагностические сообщения.
  • В противном случае проверяется базовое имя нулевого аргумента процесса:
    • Если он вызван с mke3fs в качестве базового имени, он создаст файловую систему ext3 с журналом, как если бы был указан -j .
    • Если вы используете mke4fs в качестве базового имени, он создаст файловую систему ext4 .
    • Если базовое имя начинается с 5 символов mkfs. он будет использовать оставшиеся символы в качестве типа файловой системы, безоговорочно. Если базовое имя также является mkfs.ext3 оно создает журнал, как если бы был указан -j .
    • В противном случае, с любым другим именем, он просто действует как простой старый mke2fs , беря тип файловой системы из файла конфигурации и меняя с ext2 на ext3, если -j опция -j .

Большинство из них можно найти в руководствах mke2fs и mke2fs.conf . См. Объяснение fs_type в последнем и разделе описания первого. Единственная часть, отсутствующая в руководствах, заключается в том, что непризнанное имя эффективно mke2fs .