Linux

ls 顯示“沒有這樣的文件”,但為什麼呢?

  • September 21, 2020

我有一些我不明白的奇怪行為。我只是想列出目錄中的一些文件:

sudo find /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root產生:

/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/trustdb.gpg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/private-keys-v1.d
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.extra
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx~
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.browser
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.ssh

所以我知道 .gnupg 目錄存在,並且裡面有文件。

sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root產生:

total 12
drwx------ 3 root root 4096 Sep 21 14:54 .
drwxr-xr-x 3 root root 4096 Aug 24 18:30 ..
drwxr-xr-x 3 root root 4096 Sep 21 14:54 .gnupg

所以目錄本身就有 rwx 權限。

但命令sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*給出:

ls: cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*': No such file or directory

我一遍又一遍地檢查路徑,看不出有什麼問題。我有 rwx 權限和根級訪問權限。還有什麼可以阻止我列出這個目錄?

我的最終目標是做一個chmod 600 /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*,這也失敗了。但現在我會滿足於ls。

編輯:它剛剛擊中了我。這是否與文件萬用字元有關。* 是否在 sudo 之前擴展,因此沒有 root 訪問權限?

正如您正確指出的那樣,擴展順序是您問題的根源。與文件名 glob 相關的步驟是“文件名擴展”。雖然它在擴展順序上相當晚(參見這裡例如),但它是在實際呼叫命令*之前執行的。*這意味著例如ls *在包含 的目錄中file1.txtfile2.txt並且file3.txt實際上被稱為ls file1.txt file2.txt file3.txt

現在的問題是呼叫使用者沒有進入.gnupg目錄的必要權限。因此,*文件名 glob 的擴展將失敗。在這種情況下,除非設置了特定的 shell 選項,否則*將在命令行上保持原,以便 shell 會嘗試在ls原名*. 因此錯誤消息

cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*'

如您所見,它嘗試訪問名為*inside的文件/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/

您可以做的是編寫一個執行相關操作的 shell 腳本,然後將其呼叫為rootusing sudo。您需要將腳本放置在可從任何地方訪問的路徑下,例如/usr/local/bin.

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