Shell
ls 說文件存在,但文件說沒有這樣的文件或目錄
所以當我調整我的筆記本觸摸板輸入時,我遇到了這個目錄,我發現了一些奇怪的東西。
也許檢查命令輸出比我試圖描述它更好:
[root@T480-arch serio1]# pwd -P /sys/devices/platform/i8042/serio1 [root@T480-arch serio1]# file ./* ./bind_mode: ASCII text ./description: ASCII text ./driver: symbolic link to ../../../../bus/serio/drivers/psmouse ./drvctl: writable, regular file, no read permission ./firmware_id: ASCII text ./id: directory ./modalias: ASCII text ./power: directory ./protocol: ASCII text ./rate: ERROR: cannot read `./rate' (No such file or directory) ./resetafter: ERROR: cannot read `./resetafter' (No such file or directory) ./resolution: ERROR: cannot read `./resolution' (No such file or directory) ./resync_time: ERROR: cannot read `./resync_time' (No such file or directory) ./subsystem: symbolic link to ../../../../bus/serio ./uevent: ASCII text [root@T480-arch serio1]# ls -alFtr | grep -iE "rate|resetafter|resolution|resync_time" -rw-r--r-- 1 root root 4096 Jul 30 02:28 resync_time -rw-r--r-- 1 root root 4096 Jul 30 02:28 resolution -rw-r--r-- 1 root root 4096 Jul 30 02:28 resetafter -rw-r--r-- 1 root root 4096 Jul 30 02:28 rate
如圖所示,
bash
兩者ls
都知道有 4 個 r-something 文件,並且root
具有權限,但file
命令無法辨識它們。此外,如果我嘗試使用以下方法編輯它們
vim
:"rate" [READ ERRORS] 0L, 0C
我的問題是,有哪些可能的原因會導致這種情況發生?具體來說,我在處理什麼“文件”?
由於它在 下
/sys/
,我想它本身不是真正的文件,而是像我們通常在 下看到的一些抽象/dev/
,這要歸功於一切都是文件
*nix 系統的哲學。但在那種情況下,
file
應該告訴我這是一個設備文件或其他東西,這裡不是這種情況。
/sys
是一個虛擬文件系統,其中的文件不是真正的文件,它們是核心的介面。您遇到的四個文件由驅動程序處理,如果正在檢查的設備具有“SMBus 伴侶”psmouse
,它們具有返回ENOENT
讀取的異常行為。(這是筆記型電腦觸控板的一個共同特徵——它們作為 PS/2 設備公開以實現向後兼容性,也作為其他匯流排上的設備公開,以提供對其所有功能的訪問。)作為一般規則,您不能期望大多數文件訪問工具在
/sys
. 尤其是其中很多需要在一次操作中讀取,並且它們的表觀長度往往在現實中沒有依據。