以絕對文件路徑開始,我希望獲得以下信息:如何獲取Linux上的文件路徑詳細的設備/分區信息(如UUID,串口硬盤等)
- 的掛載點文件系統的存儲位置(爲了計算相對於安裝點的路徑)
- 文件系統的UUID和標籤
- 硬件的類型(或供應商名稱)和序列號包含分區的驅動器
我知道2和3在許多情況下可能是不確定的(例如,用於回送,ramfs,encyrpted設備),這是完全沒問題的。 我也知道如何使用外殼和系統工具(如df
和/sys
或/proc
文件系統)獲取該信息。請參閱this question以供參考。
但是,我正在尋找最簡單的方法來用Python 3.5編程。這意味着:
- 身高系統調用的
/proc
或/sys
解析內容,而不是 - 避免調用子流程和分析它們的輸出(煩瑣的定義)(可能隨時更改或依賴於內核配置?)
到目前爲止,我在路徑上使用os.stat()
從stat_result.st_dev
獲取塊設備的主要和次要號碼。但是,有什麼正確的方法呢?
有例如
/proc/mounts
/proc/partitions
/sys/dev/block/<major>:<minor>
注: 關於安裝塊設備的分區,/proc/mounts
和/proc/partitions
似乎是規範的信息源(這是OK)。對於的UUID,標籤,連續等我目前使用udevadm
和解析輸出:
def get_udev_properties(dev_name):
cmd = ["udevadm", "info", "--query=property", "--name", dev_name]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
return parse_properties(result.stdout)
此外應注意:從我acutal抽象的問題,人們可能要問更普遍的:
- 對於Linux系統調用和內核文件系統,塊設備的規範標識或表示是什麼?
- 什麼是通過主要和次要號碼獲得表示的正確方法?
- 獲取有關塊設備的詳細信息的正確方法是什麼?
當前'/斌/ mount'工作的版本中找到。 [這裏解釋文件的結構](https://www.kernel.org/doc/Documentation/filesystems/proc.txt)。 [問題的答案如何使用C](http://stackoverflow.com/questions/9280759/linux-function-to-get-mount-points)表示沒有更好的選擇。 – Phillip
@Phillip如果從'/ proc'解析文件是規範的方式,那麼這是一個有效的答案。我發現很難找到關於我想獲得的數據的規範性參考資料/最佳實踐。 –
'os.stat'很好,沒有什麼不妥之處。 –