tee和tty的組合
我嘗試了以下命令,我從一本書中讀到它
sudo ls | tee /dev/tty3a
這個命令給了我權限被拒絕,即使是
sudo
.這裡 tty 是電傳打字機,我已經知道了。但是 tty 的 3a 是什麼意思?
設備文件的名稱
/dev
因 Unix 變體而異。您可以在任何地方找到一些,例如/dev/tty
目前終端。這似乎/dev/tty3a
是某些 Unix 變體(包括 Solaris 和 SCO OpenServer)上的第四個串列埠¹的名稱。Linux 等價物是/dev/ttyS3
. 因此ls|tee /dev/tty3a
將輸出複製ls
到第四個串口。如果沒有設備插入串列埠,您將收到錯誤消息(“輸入/輸出錯誤”)。如果沒有串列埠的驅動程序,你會得到一個不同的錯誤(“沒有這樣的設備”)。如果設備節點甚至不存在,您當然會得到“沒有這樣的文件或目錄”。
如果設備節點存在但您無權訪問它,您將收到錯誤“訪問被拒絕”。除非您以 root 身份執行,或者該串列埠上插入了硬體終端並且您已在該終端上登錄,否則您可能無權訪問該設備。
假設設備存在,如果您想以 root 身份訪問它,則需要以 root 身份執行命令
tee
,例如使用ls | sudo tee /dev/tty3a
請注意,
sudo ls | tee /dev/tty3a
這不起作用,因為它僅以ls
root 身份執行,該命令tee
不是原始使用者的參數sudo
並以原始使用者身份執行。在此命令中,管道由原始 shell 創建,對 的呼叫sudo
構成管道的左側。如果您想同時以 root 身份執行ls
,則tee
需要編寫sudo ls | sudo tee /dev/tty3a
(管道創建仍在原始 shell 中)。如果您想以 root 身份執行這兩個命令並以 root 身份執行管道設置,則需要以 root 身份呼叫 shell 來設置管道:sudo sh -c 'ls | tee /dev/tty3a'
¹串列埠從 0 開始編號。