Linux
如何通過 bash 腳本確定文件系統的可用性?
如果我的腳本依賴於以下其中一項存在:overlayfs、aufs、unionfs - 確定 bash 腳本中可用的最佳方法是什麼?我想使用overlayfs,但如果它不可用,則回退到aufs 或unionfs。我可以將核心版本視為猜測-但僅僅因為它是> = 3.18核心並不意味著內置了overlayfs-是否有一種合理的萬無一失的檢查方法?
在 Linux 下,您可以在文件
/proc/filesystems
. 這個文件的內容是核心在讀取時實時建構的,所以它反映了目前的狀態。這個文件的格式有點煩人:每行要麼包含 8 個空格,後跟一個文件系統類型,要麼nodev
是 3 個空格,後跟一個文件系統類型。去掉每行的前 8 個字元以獲得可用的文件系統類型,或使用grep -w
(只要您不是在尋找名為 的文件系統類型nodev
)。if grep -qw aufs /proc/filesystems; then echo aufs is available fi
這不是完整的故事,因為文件系統驅動程序可能以目前未載入的模組的形式提供。假設您可以載入模組,如果文件系統不可用,請嘗試載入它。文件系統模組有一個別名形式(實際的模組名稱通常是文件系統類型的名稱,但並非總是如此)。
fs-*FSTYPE*
if grep -qw aufs /proc/filesystems; then echo aufs is available elif modprobe fs-aufs; then echo now aufs is available fi
這是針對核心文件系統的。對於 FUSE 文件系統,檢查
fuse
文件系統是否可用,並查找實現文件系統的執行檔。雖然您可以fuse
在中查找/proc/filesystems
,但這只會告訴您它是否可用,而不是您的程序是否有足夠的權限來使用它。在實踐中更可靠的測試是檢查您是否可以寫入/dev/fuse
.if [ -w /dev/fuse ]; then echo FUSE is available if type unionfs-fuse >/dev/null 2>/dev/null; then echo unionfs-fuse is available fi fi