についての議論で猫の無駄な使用。
私はパイプの所有者を変更することで問題を回避できるかどうかを調べることにしました。だから私はこれをしました:
# 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
でした。私はこれが不可能だと確信しています。ところで、なぜそうなのでしょうか?明らかにインデックスノードがあります。 931613はアノード番号です。
本当に興味があれば、右側のプロセスはより低い権限で実行され、プロセスを再び開くことができるように独自のハンドルを持っていると思います。
答え1
私は注文を台無しにしたことがわかりましたls
。
# ls -lL
lr-x------ daemon root 0 -> pipe:[931613]
lrwx------ root root 1 -> /dev/tty1
lrwx------ root root 2 -> /dev/tty1
これはタイプミスではありません。これは正確に1文字で修正された論理エラーでした。あなたは私を見る知るこれらのノードは実際のシンボリックリンクではありません。これはchroot刑務所で開かれていても、それを開くと正しいファイルが生成され、出力に誤ったパスが生成されるためですls -l
。どういうわけか、カーネルシステムコールが実際に返されるよりも基本的なinodeのより多くの属性を返すと思います。