Pipe
為什麼我不能吹管?
來自關於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
我也試過
chown
和chown -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 屬性比它實際返回的要多。