Linux

/sbin/mkfs.fs 就像一個二進製文件,即使它是一個符號連結文件

  • August 8, 2017

考慮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命令的符號連結。沒什麼奇怪的,一切都很好。因此, runningmkfs.ext4與 running 相同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--

mkmk我設法使用我製作的符號連結來製作 ext2 文件系統ln。to 是什麼mkmk意思mke2fs,應該沒什麼!

如何mke2fs使用執行它的文件名來確定要創建的文件系統類型?

請參閱中的parse_fs_type函式mke2fs.c

  • 如果明確指定了文件系統類型(使用-t),則使用該文件系統類型
  • 如果該工具在 Hurd 上執行,請使用“ext2”;
  • 如果程序名稱為mke3fs,則使用“ext3”;
  • 如果程序名稱為mke4fs,則使用“ext4”;
  • 如果程序名稱以 開頭mkfs.,則使用後綴;
  • 否則,使用 中定義的預設值/etc/mke2fs.conf(如果有);
  • 否則,使用“ext2”,除非預設啟用日誌,在這種情況下使用“ext3”。

生成的文本字元串用於查找文件系統定義/etc/mke2fs.conf(除了內部處理的“ext2”)。

所以你mkmk最終會使用 ext2 文件系統類型。

引用自:https://unix.stackexchange.com/questions/384710