Shell

ls 說文件存在,但文件說沒有這樣的文件或目錄

  • July 29, 2020

所以當我調整我的筆記本觸摸板輸入時,我遇到了這個目錄,我發現了一些奇怪的東西。

也許檢查命令輸出比我試圖描述它更好:

[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. 尤其是其中很多需要在一次操作中讀取,並且它們的表觀長度往往在現實中沒有依據。

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