Pipe

為什麼我不能吹管?

  • May 2, 2019

來自關於cat 無用使用的討論。

我決定看看是否可以通過更換管道的所有者來避免一些麻煩。所以我做了:

# cat | cat &
[1] 16500
# cd /proc/16500/fd
# ls -l
lr-x------ root root 0 -> pipe:[931613]
lrwx------ root root 1 -> /dev/tty1
lrwx------ root root 2 -> /dev/tty1
# chown --dereference daemon 0
# ls -l
lr-x------ root root 0 -> pipe:[931613]
lrwx------ root root 1 -> /dev/tty1
lrwx------ root root 2 -> /dev/tty1

我也試過chownchown -L。不去。我確信這根本不可能,但為什麼呢?他們顯然有 inode。那 931613 是 inode 號。

在我真正感興趣的情況下,右側的程序將以較低的權限執行,我希望它擁有自己的句柄,以便它可以重新打開它們。

原來我弄錯了我的ls命令。

# ls -lL
lr-x------ daemon root 0 -> pipe:[931613]
lrwx------ root   root 1 -> /dev/tty1
lrwx------ root   root 2 -> /dev/tty1

這不是一個錯字。這是一個邏輯錯誤,恰好用一個字元來解決。你看,我知道這些節點並不是真正的符號連結,因為打開它們會產生正確的文件,即使它是在 chroot 監獄中打開的,這會在ls -l輸出中產生不正確的路徑。不知何故,我認為核心系統呼叫返回的底層 inode 屬性比它實際返回的要多。

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