ααΆαααααα½α αααα»αα’αα‘α»αααααααααΆααα αααα»αααααΌαααΆααααα½αααΆ ααΎα’αααααΉαααααΎα’αααΈ ααααα·αααΎα’αααααααΎαααααΆαααααα·αααααΎαααΆα αααααΆαααΆαα’ααααα ααααα»α?
ααΆααΆααα·αααΆαα αααα»αααΆαααααΎαααΆ αααα»αααΉαααΎαα’αααΈαααααΆααααΆαααααααααααααα α αΎαααααα·αααΎα’αΆα
ααααΎαα
ααΆα αααα»αααΉααααα’αΆααααααααααα
αααααΆααααα’ααααααααΆαααααΆααα½αααΆ α
α»αααΎααααΆαααααααααααααα
ααΎααΆαααΆααα ααα»ααααα’ααααααα·αααΎαα―αααΆαααΆαααα’αΆα
αααααααααααααααΆααα’ααααα?
α ααααααΏαααααααα»αααΆααα·ααΆαααΆα’ααααααααα’αΆα ααΎαααΆααα·αααααΆα―αααΆαααΎαα αα α§ααΆα ααααααααααΎααΆααααααααΆ lsof α αΎααααααΆαααααα·ααΈααΆαα½αααΆααααααααααααααααΆααα’ααα αΎααααααΆααααα’αααα’αΆα ααααΎαααααααΆαααΆαααΆααααααα’αΆαααααααΎααΆααΎαα·ααααααααααΌαααΆα .
α’ααααααααΆαααααΆαααααΆααααα»αααΌαααΆαααα α»αααααα αααααααααααΎαααα½αααααααΆααααΆ "α§αααΆααΆααΎααα·αααααΌαααΆααα·αααααα ααΆααααΆααααααΆαααααα ααα»ααααΆααααα α»α ααα»αααααααααα·ααΈαα·αααααΎαααΆααα αααααααΆαα·αα’αΆα αααααααααΆααααα α»αααΆααα"?
"αα·αα’αΈαα" αααα»αααααΎαααΆ "ααΎαα’αΆα
αα·αααΆαααααΆααααα α»ααααα»αααΆαααααααααααα·ααΈ α αΎαα
αΆααααααΎαααΆα‘αΎααα·αα"
α’ααααααααΆαααααΆαααααΆααααΆ "αα ααΎααα·αα’αΆα
α
αΆααααααΎααααααα·ααΈα‘αΎααα·αααΆααα ααΎααα
ααααΆααα·ααααααααααΆαααααααΌαααΆααααααΆαα»ααααα»αα’αααα
αα
αΆα α αΎαα’αα·αα·ααααααΆαααααααΌαααΆαααααΆαααα
ααααΆααααααααααα½αα―α αααααΎααα·αα’αΆα
αααααα±ααααααΆαααααααααααΆαααα"
"αα·αα’αΈαα" αααα»αααΆααα·ααΆαααΆ "ααααα·αααΎααΎααα·αα’αΆα α αΆααααααΎααααααα·ααΈα‘αΎααα·αααΆααα α αΎααα·αααααααα·αααααΆαααααααΆααααΎααα αααααΎαα’αΆα αααα’αΆαα―αααΆαααΎαα αα αααααΆαααααααααα·ααΈαα·αααααΆα―αααΆα αααααΈααΆααΎααα·αααΎαααΆαα αααα»αααΆααααααααΆ ls αααααα αα ααΎααααααααα―αααΆαα"
α’ααααααααΆααααα α·ααα ααα»αααααααα»αα’ααααΆαααα
αα½α
βαααα»αβαα·αβααΆ α ααα»βα’αααΈβααΆαβααΆβα’αααβααααΎβαααααβα
ααααβααΉαβααααβαααα»αβαα·αβαααΈβααααα
? ααα»ααααα
α»ααααΆαααΆααΎαα·ααααααααΆαααΆααααααΆαααααααΆααααΈααΆααα’αα? α
α»αααααα·αααΎααΎααα·αα’αΆα
α
αΆααααααΎαααααΎαααΆαα‘αΎααα·α α αΎαααααΎαααΆαααααααα
ααααααααα―αααΆααα
ααΎααΆαααΆαααααα·αααΆαααα αααααα? α
α»αααΎααΎααα·αα’αΆα
ααΆααααααα·αααααΉααααα·αααααααααααααΌαααΆαααααααα½α
α αΎαααα»ααααααα ααα»αααααααα·αααααααααααααΎαααΆααααααααα α¬ααααΆααΆααααααααα?
ααΌα ααααΈα
αα ααΎαα’αΆααΈααααααααα»α αααα»αααΆαααααΆααΆααααααΎααααααα·ααΈααΌα αα½ααααααααΌαααΆααααααΆαα»αααααααΆαα’αααααααΎααααΆααα α αΎααααααΆαααααααα»ααα·αααΆααΎαααα»αα’αΆα ααααΌααααα’αααααααΎααααΆαααα ααΉααα·ααααααααααααΆαααααααααααΆα α§ααΆα ααααααα»αααΆα Ivanov Ivan Ivanovich α αΎαααΆααααΆαααααααΆαααααααα»ααααααΎαααα»αα’αΆα αααααΎααα·αααααΆαα½ααα½ααααααααααααΆ? αααα»αα’αΆα α ααα’α»ααααα αΆααααααααΆααααΆαααααααααααααΆααααααααΆ "Tuzik" ααΆαααααα·αααα·αααα Ivan αααα ααα»ααααα α»ααααΆαααΆααΎααΆααααααΌααααααααααααΆααα αΎααααα½αα±αα Ivan ααααΆαααΆα§ααΆα ααα Olya? αααααΆααααααΆααΉαααααααΆ Olya Ivanovna Ivanova ααααααΎαααΉααααααΆααααααααα αΎα Tuzik ααααααΎαααΉααα ααααΆαααααα·αααα·αααα Ivan ααααα·αααΆαα ααΌαααααΆααα·αααααααααααΆααααααα±ααα’αααααααΎααααΆααααααΆαααααΌαα§ααααααααααα’ααααααααΆααααα½αααα (ID) ααΆααα½ααααααααΆααααα αΆααα α αΎα Tuzik αααααααα»αααααΌαααΆαααααΆααααΆαα½αααααααααΆααααα αααααΆααα·αααααΆααααααΆααααααααΈααα»αααααα ααΌα ααααααα αΆαααααααΉαα’αΆααααΆαααααααααΆααααα 2 α αΎααα αααααΆαα½α Ivan αααα·ααα αααααααααααααΆαααααα αΎααααααΆαααα Olya αααα·ααα αααααααααααααΆααααΌα ααααΆα αααα αΆααα»αααααΆαα· αα·αααΆαα α·ααα αΉαααααααααΌαααΆααααααααΆααααΆαααΆαααααααα
α’ααααα·αααααΆα―αααΆα
αααα αΆααα―αααΆα αα·ααααααα·ααΈαααααααΎαααΆαααΆαα½αα―αααΆααααααΊαααα αΆαααααα ααααΉααααα αα·αααα»αααααααααΎαα α§αααΆααΆαααα»αααΆαααΎαα―αααΆααα½ααααααααΆ ivan.txt α αΎαα
αΆααααααΎααααααααΆααα tuzik αα
αααα»αααΆ ααα»ααααααααΆααααα’αΆα
αααααα’ααααααααΌα "t" αα
αααα»αα―αααΆα α αΎαα―αααΆααααααααΌαααΆαααααΌαααααααααααααΆααααΆααα§ααΆα ααααα
olya.txt α ααα»ααααα―αααΆααα
αααααα α αΎααααα»ααα
ααα
αααααααααΆαααααΉαα’αΆαααααααααα»ααα
αααα»ααααα ααΆααααααααα―αααΆαααααΌαααΆαααΎααααααΆαα α
ααΆααααααααα
αα
αααα»αααΈαα»α
αααααΆααα libc ααΎαα―αααΆααα·αααααΆα
ααα½α 3 αααααΆαααααααα·ααΈααααααα»αααααΎαααΆαααΈαα½αα (ααααΎαααΆα) αααααΆαααα 0,1,2α ααααααΆαααααααα’αΆα
ααααΆααα
ααΎαααααααΆαα
- αααααα·ααΈαα·αααααΆα―αααΆα 0 ααααΌαααΆαααα α ααΆ STDIN α αΎαααααΌαααΆαααααΆααααΆαα½αααΉαααΆααααα αΌααααααα·ααΈ
- αααααα·ααΈαα·αααααΆα―αααΆα 1 ααααΌαααΆαααα α ααΆ STDOUT α αΎαααααΌαααΆαααααΎααααΆααααααααααα·ααΈααΎααααΈαααα αααα·αααααα ααΌα ααΆααΆααααααααΆααααα»αααααΆααΎαα
- αααααα·ααΈαα·αααααΆα―αααΆα 2 ααααΌαααΆαααα α ααΆ STDERR α αΎαααααΌαααΆαααααΎααααΆααααααααααα·ααΈααΎααααΈαααα ααααΆαααα α»αα
ααααα·αααΎαα αααα»ααααααα·ααΈααααα’ααα α’αααααΎαα―αααΆαααΆαα½ααααααΆααα’αΆα α¬ααααα αααααααααΆα’αααααΉαααα½αααΆαααααααααΆααα₯ααα·αααααααααΌα α αΎαααΆααΉαααΆααααα 3α
αααααΈα’ααααα·αααααΆα―αααΆαα’αΆα ααααΌαααΆαααΎααααααΆααααααΎαααΆαααΆαα½α ααααα·αααΎα’αααααααΆαα PID ααααααΆα
ααΆα§ααΆα ααα ααΌαααΎααα»αααΌα bash α αΎαααΎα PID ααααααΎαααΆαααααααΎαα
[user@localhost ]$ echo $$
15771
αα αααα»ααα»αααΌαααΈααΈαααΌαααααΎαααΆα
[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user 0 Oct 7 15:42 .
dr-xr-xr-x 9 user user 0 Oct 7 15:42 ..
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
α’αααα’αΆα αα·αα’αΎααΎααααα»ααααα·ααΆαααΌαα―αααΆααα·αααααΆααα 255 αααααΆαααααααααααα’αααααααα ααΆααααΌαααΆαααΎααααααΆαααααααΌαααΆαααααααΆααα bash αααα½αααΆααααΆαα αα·ααααααααααααΆααααααααΆαααααΆααααα
α₯α‘αΌαααα α―αααΆααα·αααααΆααΆαα 3 ααααΌαααΆαααααΆααααΆαα½αα§ααααα pseudo terminal
[user@localhost ]$ echo "hello world" > /proc/15771/fd/0
α αΎααα αααα»ααα»αααΌαααααΌαααΎαααΉαααΎα
[user@localhost ]$ hello world
αααααΌααααααα·αααααα
α’αααα’αΆα ααα·αααα―αααΆααα·αααααΆααΆαα 3 ααααααΆαααΆααααα½ααα αααα»αααααΎαααΆαααΆαα½α αα½αααΆαααα αααα»α bash α§ααΆα αααααΆααααααααααααααΆααααααΎαααΆαααΈα ααΌαααΎα
[user@localhost ]$ cat /dev/zero | sleep 10000
α’αααα’αΆα ααααΎαααΆαααΆααααααααΆαααααααααα½αα―αααΆαα½α ααααΌα -f α αΎαααΎαα’αααΈααααααα»αααΎαα‘αΎααα ααΆααααα»α ααα»αααααααα»αααΉαααααΆααα’ααααααααααααα
ααααΎαααΆα bash ααααααααΎαααΆαα½α PID 15771 αααααΆααααααααΆααααααΎα α αΎααααα αααΆααα’αααΈα ααα½αααΆααααααααΆαααααΎαα ααααααΎαααΆα αααα»αααααΈααααααΎαααΆαααΈααααα»αα αααααα½αααα ααααΆ αα·αααΆααααα Bash ααΉαααΆααΆααααΌαααΆααααααΎαααααΎαααΆαααΌαααΈα α αΎααααα αΌαααΆαα αααα»αααααααααα½αα ααα»ααα bash ααΉαααααΌαααΆαααααΎαααΆαααΌα 2 αα·αααααααα½αα
Bash ααααΎαααΆαααΆαα α
ααΆαααααααα αα»αααααααααΎαααααΎαααΆααα»ααΆα
αααααΆααααααΎαααΆααα ααΆα αΆααααΌα ααΆααΆαααααααα½α α αΎα ααα»αααααα·αααΆααααΆαααααΎαααΆαααΌααα α‘αΎαααα
PID command
15771 bash
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
αααααΆααααααααΎααΆαα α
ααΆααααααααα
PID command
15771 bash
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
PID command
9004 bash
lrwx------ 1 user user 64 Oct 7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 255 -> /dev/pts/21
PID command
9005 bash
lrwx------ 1 user user 64 Oct 7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 255 -> /dev/pts/21
αα»αααααα ααΆααααΌαααααΌαααααΎαααΆααα½αααΆαα½αααΉαα―αααΆααααααΆααΆααα’αα ααΌα αααααα½αααΆααΉαααΌα ααααΆαα αααα»αααααΎαααΆααα αα·ααα αααα»αααΌαα ααΆαααΆαααααααΎαααΆαααααΆαα½α PID 15771 ααΊααΎααααΈααΆαααΆαααααΎαααΆααααααα»ααΆα ααΌα ααααααΆααααΆαααααααα αΆαααΆαααααΎαααααΈαα»ααΆαα
ααΌα ααααααΆαα·αααααΌαααΆαααααααα α αΎαααΆαα·αα―αααΆααα·αααααΆααα 3 αα·α 4 α
αα
αααα»αααααΎαααΆα bash ααΌαααααΌαααΆαα½α PID 9004 ααΆαα α
αααααααα
αα αααα»αααααΎαααΆαααΌαααΈααΈαααΆαα½α PID 9005 bash ααααΎ dup2 ααΎααααΈααααΆααααααΌαα―αααΆα descriptor STDIN ααα 0α α₯α‘αΌααααα’αααΈααααααααΆαααα bash ααΈααΈαααααααΎαααΆαα½α PID 9005 ααΉαα’αΆαααΉαααααΌαααΆαα’αΆαα ααααΈαααααα
αααααΆααααΈααα α’ααααααααΆα―αααΆαααα 3 αα·α 4 ααααααΌαααΆααα·ααα αααα»αααααΎαααΆααα»ααΆαααααα αααααααΆαααααααΌαααΆαααααΎαααα αΎαα
αααα»ααααααΎααααααΎαα ααααα―αααΆα descriptor 255 αααα ααααΆ ααΆααααΌαααΆαααααΎαααααΆααααααααααααααααα»αααα bash αααα½αααΆ α αΎαααΉαααααΌαααΆααα·ααα αααα»αααααΎαααΆααα»ααΆααααααα
αααααΆαααα αα
αααα»αααααΎαααΆαααΌαααααΌαααΆαα½α PID 9004 bash α
αΆααααααΎαααααΎααΆαα α
ααΆααααααααα
αα αααα»αααααΎαααΆαααΌαααΈααΈαααΆαα½α PID 9005 bash ααααΎαααΆαααΆαααααα·ααααα·ααΈααΈααααααΎαααΆααααααΆαα αααα»αααααΈααααααΎα /usr/bin/sleep α
ααΆαα α ααΌααααααααααααααααα exec αα·ααα·αα ααα»α ααΆαα―αααΆααα αα»αααααΆαααα½αααΆααααΌαααΆαααΎααααααα O_CLOEXEC αα αααααΆαα α ααΎαα αα ααααΌαααΆαααααΎα‘αΎαα αααα»αααααΈααααααΎα αααααΆααααΈααΎαααααΎαααΆαα―αααΆααααα’αΆα ααααα·ααααα·ααΆα α’ααααα·αααααΆα―αααΆααα αα α»ααααααααΆααα’ααααΉαααααΌαααΆααααααΆαα»αα
αα·αα·αααααΎααα»αααΌαα
[user@localhost ]$ pgrep -P 15771
9004
9005
[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user 0 Oct 7 15:42 .
dr-xr-xr-x 9 user user 0 Oct 7 15:42 ..
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
[user@localhost ]$ ls -lah /proc/9004/fd
total 0
dr-x------ 2 user user 0 Oct 7 15:57 .
dr-xr-xr-x 9 user user 0 Oct 7 15:57 ..
lrwx------ 1 user user 64 Oct 7 15:57 0 -> /dev/pts/21
l-wx------ 1 user user 64 Oct 7 15:57 1 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
lr-x------ 1 user user 64 Oct 7 15:57 3 -> /dev/zero
[user@localhost ]$ ls -lah /proc/9005/fd
total 0
dr-x------ 2 user user 0 Oct 7 15:57 .
dr-xr-xr-x 9 user user 0 Oct 7 15:57 ..
lr-x------ 1 user user 64 Oct 7 15:57 0 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
[user@localhost ]$ ps -up 9004
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 9004 0.0 0.0 107972 620 pts/21 S+ 15:57 0:00 cat /dev/zero
[user@localhost ]$ ps -up 9005
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 9005 0.0 0.0 107952 360 pts/21 S+ 15:57 0:00 sleep 10000
ααΌα αααα’αααα’αΆα ααΎαααΎαα ααα½ααααα½αααααααααααααααααΎαααΊααΌα ααααΆαα αααα»αααααΎαααΆαααΆααααΈαα ααΌα αααα ααΎαααΆαααΆααααααΆαααααΆαααααΎαααΆαααΈααααααααααΆααΆαα½αααααΌα ααααΆα
αααααΆααα’αααααααα·ααααΆαααΉαααΆαα α αααααααααααααααΎ bash αααα»αααΌααααααα’αα»ααΆααααααΆαααααΆααα±ααααααΎαααΆαααΆααααααααΆααΆαααα strace αα·αααΎαα’αααΈααααααα»αααΎαα‘αΎααα ααΆααααα»αα§ααΆα αααααΌα αααα
strace -s 1024 -f bash -c "ls | grep hello"
α αΌαααΎααααααααα αααα αΆααααααΎαααΆαα½αααΉαααα αααΆαααΆα α αΎαααααΆααΆααααααΆαα»ααα·ααααααααααα·αα αΆααααααΎαααααΎαααΆαα‘αΎααα·αα α αΌαααΎαααααααααααα·ααΈααΌα αα½ααααααΉαααααααααα αα 1 ααααΆαααααα»ααα½ααα·ααΆααΈαα ααΆαα ααΆαααααα ααα ααααα·αααΎααΎααα·αα’αΆα ααααααα·αααααααα ααΈααααα ααα»αααα½αα ααα½α ααΎαααΉααα·αα’αΎααΎααΉαααΏαααα α αΎαααααΆααΆαααααααα·ααααααααααααααααα»ααα½ααα·ααΆααΈα αααα»αα§ααΆα αααααααααα»ααααα»αααααΎ Python α’αααα’αΆα ααααΎααΆααΆααααααααααα·ααΈααααααα
[user@localhost ]$ cat openforwrite.py
import datetime
import time
mystr="a"*1024*1024+"n"
with open("123.txt", "w") as f:
while True:
try:
f.write(str(datetime.datetime.now()))
f.write(mystr)
f.flush()
time.sleep(1)
except:
pass
αααααααΎαααΆααααααα·ααΈ α αΎαααΎαα―αααΆααα·αααααΆ
[user@localhost ]$ python openforwrite.py &
[1] 3762
[user@localhost ]$ ps axuf | grep [o]penforwrite
user 3762 0.0 0.0 128600 5744 pts/22 S+ 16:28 0:00 | _ python openforwrite.py
[user@localhost ]$ ls -la /proc/3762/fd
total 0
dr-x------ 2 user user 0 Oct 7 16:29 .
dr-xr-xr-x 9 user user 0 Oct 7 16:29 ..
lrwx------ 1 user user 64 Oct 7 16:29 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 7 16:29 3 -> /home/user/123.txt
ααΌα αααα’αααα’αΆα ααΎα ααΎαααΆαα§ααααααααααΆα―αααΆααααααααΆαα ααα½α 3 ααααααΎα αα·ααα½αααααααααΎαααΆαααΎαα ααααα·αα·αααααΎαααα αα―αααΆαα
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 117M Oct 7 16:30 123.txt
αα·αααααααααα»αααααΌαααΆαααααα ααΎαααααΆααΆαααααΆααααααΌαααΆαα’αα»ααααΆααα ααΎα―αααΆαα
[user@localhost ]$ sudo chown root: 123.txt
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 root root 168M Oct 7 16:31 123.txt
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 root root 172M Oct 7 16:31 123.txt
ααΎαααΎαααΆαα·αααααααα αααααα»αααααΌαααΆαααααα αααααΈααΆα’αααααααΎααααΆααααααααΎααα·αααΆαααΆαα’αα»ααααΆααααα»αααΆαααααααα ααΆααα―αααΆααααααα αααααααΆααΆααα»αααΆα ααα
[user@localhost ]$ sudo rm 123.txt
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory
ααΎαα·ααααααααααΌαααΆαααααααα α―ααΆ? α αΎαβααβαααααβααΆααβα’ααβααααΆβα¬? ααΎααα·αα·αααα
[user@localhost ]$ ls -la /proc/3762/fd
total 0
dr-x------ 2 user user 0 Oct 7 16:29 .
dr-xr-xr-x 9 user user 0 Oct 7 16:29 ..
lrwx------ 1 user user 64 Oct 7 16:29 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 7 16:29 3 -> /home/user/123.txt (deleted)
ααΆα α’ααααααααΆα―αααΆαααααααΎααα ααααΆα α αΎαααΎαα’αΆα α αΆαααα»αα―αααΆααα·αααααΆαααααΌα ααΆα―αααΆαα αΆααααααααΎα ααΎαα’αΆα α’αΆα ααααα αα·αα ααααααΆααΆαα
αααααΎαααα αα―αααΆαα
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 19923457 2621522 /home/user/123.txt
ααα αα―αααΆαααΊ 19923457α αααααααΆααΆααα»αα―αααΆαα
[user@localhost ]$ truncate -s 0 /proc/31083/fd/3
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 136318390 2621522 /home/user/123.txt
ααΌα
αααα’αααα’αΆα
ααΎα ααα αα―αααΆααααα»αααΎαα‘αΎα α αΎααααα’ααααααααΎααα·αααααΎαααΆαααα αααααΎαα―αααΆαα α
αααααααα
with open("123.txt", "w") as f:
ααΎαααααΌαααααΆαα
with open("123.txt", "a") as f:
αα·αα·αααααΆαα½αααα "w"
[user@localhost ]$ strace -e trace=open python openforwrite.py 2>&1| grep 123.txt
open("123.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
αα·αααΆαα½αααα "a"
[user@localhost ]$ strace -e trace=open python openforwrite.py 2>&1| grep 123.txt
open("123.txt", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
ααααΎαααΆααααααα·ααΈααααααα»αααααΎαααΆα
ααΆααΉαααΆαα α’αααααααααααααα·ααΈ αα ααααααααΎα αα·αααΆααααααααααα·ααΈ ααααΎαααααα·ααΈααααΆααααα α»α (α§ααΆα ααα GDB) α¬ααααα·αααααααααααΆαα αΌααα αααα»ααααααα·ααΈα ααΈαα»α αααααααΌααααααααΆααααα»αααΆαααααα αα·αααααΆααααααΌααααααα·ααΈααααααα»αααααΎαααΆααα½α α αΎα α§ααΆα ααα ααααΆααααααΌααααααααα’ααα αααααα ααα»α αααααα
αααααααα αααα½αααΎαα’αααΈααα αααΆααα·ααααααααααΆααααΎααααΈαααααα―αααΆα ααΌαααααΆααΆααααααααααΎαααα αΆα
ααααααααΎαα―αααΆααααααΆααααΆαααΆαααααααΎα αααααΎαααΉαααααααΆααΆαααΆα ααααα‘ααα
[user@localhost ~]$ dd if=/dev/zero of=~/tempfile_for_article.dd bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00525929 s, 2.0 GB/s
[user@localhost ~]$
ααααααααΎαααααααααα―αααΆαα
[user@localhost ~]$ mkfs.ext4 ~/tempfile_for_article.dd
mke2fs 1.42.9 (28-Dec-2013)
/home/user/tempfile_for_article.dd is not a block special device.
Proceed anyway? (y,n) y
...
Writing superblocks and filesystem accounting information: done
[user@localhost ~]$
ααα‘αΎαααααααααα―αααΆαα
[user@localhost ~]$ sudo mount ~/tempfile_for_article.dd /mnt/
[sudo] password for user:
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 172K 7.9M 3% /mnt
ααΎααααααΎαααααΆαα½αααα αΆααααααααΎαα
[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs
αααααΎαα―αααΆααααααΆααααααααααααα»ααααααα·ααΈααααααΎαα
with open("/mnt/logs/123.txt", "w") as f:
ααΎαααααΎαααΆα
[user@localhost ]$ python openforwrite.py
ααΎααααα αΆαααΈαααΈαα·ααΆααΈ
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
ααΌα αααα, ααΎαααΆααααα αΆαααααΆααα·αααααΆαα ααΎαα’ααααααααα ααα αααααα 0, 100% ααΆααααΆααα
ααΎαα αα αΆαααΆααααα ααΆααααααααααααααα αΆ ααΎααααα»αααααΆααΆααααααααΆαα·ααααααααααΆαααααααα·αα’αΆα ααΆαααααααΆαα α αΎααααα»ααααααΆαα½αααααΆααα ααΎαααααΌααα½ααα»αααααΆααααααααα·αα αΆααααααΎαααααΎαααΆαα‘αΎααα·αα
α αΌααα·ααΆαααΆααΎααα ααααΆαααα αααΆα ααα»αααααα αααα»αααΆαααΆααααααααααΆ α§ααΆα ααααα αααα»α /home α
αααααααΆααΆα "αααα αα‘αΎααα·αααααΆαα" ααΌαααααααΎαα
ααΌααααα‘ααααΎα PID ααααααΎαααΆαααααααΎα ααααααΈααα αααΆαααΆααα’ααα
[user@localhost ~]$ ps axuf | grep [o]penfor
user 10078 27.2 0.0 128600 5744 pts/22 R+ 11:06 0:02 | _ python openforwrite.py
ααααΆαααα ααααΎαααΆαααΆαααα gdb
[user@localhost ~]$ gdb -p 10078
...
(gdb)
ααΌααααα‘ααααΎαααΆααα·αααααΆα―αααΆαααΎαα
(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user 0 Oct 8 11:06 .
dr-xr-xr-x 9 user user 0 Oct 8 11:06 ..
lrwx------ 1 user user 64 Oct 8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:09 3 -> /mnt/logs/123.txt
ααΎαααΎαααααααΆαα’αααΈα―αααΆααα·αααααΆααα 3 αααα αΆααα’αΆαααααα
(gdb) shell cat /proc/10078/fdinfo/3
pos: 8189952
flags: 0100001
mnt_id: 482
αααα
αα
αΆαααΆααΎααααααααα α
Python αααααΎαα’αααΈ (ααΌαααΎαααΆαααΎαααααααααααΎαααα strace α αΎαααΆαααααΎαααΆαα α
ααΎαα
αα ) αα
αααααααΎαααΆαααΌαααααααΎαααΎααααΈααΎαα―αααΆα ααΎαααααΎααΌα
ααααΆααααααα½αα―ααααα»αααΆαααααΎαααΆαααααααΎα ααα»ααααααΎαααααΌαααΆα O_WRONLY|O_CREAT| αααΈα O_TRUNC αααα½ααααααααααααα ααΎααααΈααααΎααΌα
αααααΎααααααααΊαααα§ααΆα ααα
#ααααα O_WROONLY 00000001
#ααααα O_CREAT 00000100
#ααααα O_TRUNC 00001000
ααΎαβαα½αβαααα αΌαβαααααβααΆααβα’ααβααΆβαα½α ααΎαβααα½αβααΆα 00001101
ααΎαααααΎαααΆαααΆαα α ααααααΎαααΈ gdb
(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4
ααΌα ααααβααΎαβααα½αβααΆαβα―αααΆαβαααααΆβααααΈβαααβααΆαβααα 4 αα·αβα―αααΆαβααΎαβααααΈβαα βααΎβααΆαβααΆαβαααααβααα ααΎαβαα·αα·αααβααΎαα
(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user 0 Oct 8 11:06 .
dr-xr-xr-x 9 user user 0 Oct 8 11:06 ..
lrwx------ 1 user user 64 Oct 8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:09 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 Oct 8 11:15 4 -> /home/user/123.txt
ααΎαα αα αΆαα§ααΆα αααααΆαα½αααααα - αααα bash ααααΆααααααΌαα’ααααα·αααααΆα―αααΆαα αΎαααΎαααΆααααααΆαα α αααααααα dup2 αα½α α αΎαα
ααΎαααααΆααΆααααα½αα’ααααααααΆα―αααΆααα½αααΆαα½αα―αααΆαααααααααα
(gdb) call dup2(4,3)
$2 = 3
αααα»ααα·αα·ααα:
(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user 0 Oct 8 11:06 .
dr-xr-xr-x 9 user user 0 Oct 8 11:06 ..
lrwx------ 1 user user 64 Oct 8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:09 3 -> /home/user/123.txt
l-wx------ 1 user user 64 Oct 8 11:15 4 -> /home/user/123.txt
ααΎααα·ααααααα·ααΈαα·αααααΆα―αααΆα 4 αααααΆαααΎααα·αααααΌαααΆαααΆα
(gdb) call close (4)
$1 = 0
α αΎαα ααααΈ gdb
(gdb) quit
A debugging session is active.
Inferior 1 [process 10078] will be detached.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/python2.7, process 10078
αα·αα·αααα―αααΆαααααΈα
[user@localhost ~]$ ls -lah /home/user/123.txt
-rw-rw-r-- 1 user user 5.1M Oct 8 11:18 /home/user/123.txt
[user@localhost ~]$ ls -lah /home/user/123.txt
-rw-rw-r-- 1 user user 7.1M Oct 8 11:18 /home/user/123.txt
ααΌα αααα’αααα’αΆα ααΎααα·ααααααααααΌαααΆαααααααα α―αααΆαααααΈ ααΌααα·αα·αααααΎαα―αααΆαα αΆααα
[user@localhost ~]$ ls -lah /mnt/logs/123.txt
-rw-rw-r-- 1 user user 7.9M Oct 8 11:08 /mnt/logs/123.txt
ααααΆααα·ααααααααααΌαααΆαααΆααααα αααααα·ααΈααααΎαααΆα αααααα ααα»ααααΌαααΆαααααααα ααΆααααΈααΆααααααΈα
α αΌαααααΎα±αααα·α αα ααΆααααα»αααααΆαααααα·α
ααΌααααααααΆαα·ααααααααΆαααΆααααααΆαααααααΆααααΎα ααα»ααααααΎααα·αααΆαααα αααΆααα αααα»αααΆαααΆαααΆαα½ααα α αΎαααΎααα·αα’αΆα ααααΆααααΆαααΆαααα
α’αααΈβαααβααΎαβα’αΆα
βααααΎβααΆαβααΊβααααΌαβαα·αβαα·ααααααβααααβααΎαβαα
βααααααβααΆβαα½α α§ααΆα αααβαα
βααααα α αΎαβααααΌαβαα·αβαα·ααααααβααΈβαααααβαα
βαααααΆαβααΆαβαααβαααααα·ααΈβαα½αβα
ααα½αβα§ααΆα ααα netcatα
ααΎαα’αΆα
αααααΎαααααααααααΆαααααααααααααΎααΆααααααααΆ mkfifo α ααΆααΉααααααΎαα―αααΆα pseudo αα
ααΎααααααααα―αααΆα αααααΈααΆαα·αααΆαααααααααααααα
ααΎααΆαααααα
α αΆααααααΎααααααα·ααΈα‘αΎααα·α α αΎααα·αα·αααα
[user@localhost ]$ python openforwrite.py
[user@localhost ~]$ ps axuf | grep [o]pen
user 5946 72.9 0.0 128600 5744 pts/22 R+ 11:27 0:20 | _ python openforwrite.py
[user@localhost ~]$ ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/123.txt
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
αα·αααΆαααα αααΆααα ααα»ααααααΎααααααΎαααααααααααΆαααααααα ααΈααααααααααααα
[user@localhost ~]$ mkfifo /mnt/logs/megapipe
[user@localhost ~]$ ls -lah /mnt/logs/megapipe
prw-rw-r-- 1 user user 0 Oct 8 11:28 /mnt/logs/megapipe
α₯α‘αΌαααα ααΎαα αΆαααΆα αααααΌααα»ααα·ααααααααΆααα’αααααα αΌααα αααα»ααααααααααα ααΆαααααΆαααΈαααααααααααααΆαααααααααΆαα netcat ααΌα ααααΆααΊαααααααααααΆααααΆα
αα ααΎαααΆαααΈααα remote-server.example.com ααΎαααααΎαααΆα
[user@localhost ~]$ nc -l 7777 > 123.txt
αα ααΎαααΆαααΈααααααααΆααααα αΆααααααΎα ααΎαααΎαααααΎαααΆααα αααα»αααααΆααΈαααΆα ααααα‘αααα½αα
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
α₯α‘αΌαααααα·ααααααααΆααα’ααααααααα αααα αααα»ααααααααΉααα stdin αααααααααααααααα·αα αααα»α netcat αααααΉααααααΌαααΆαα αααααΆααα ααΎα ααα 7777 α
α’αααΈαααααΎαααααΌαααααΎααΊα αΆααααααΎαααααααα·ααααααααααααΎααα αααα»αααααααααααΆαααααααααα
ααΎαααΆααααααα·ααΈααααΎαααΆααα½α α αΎαα
[user@localhost ~]$ ps axuf | grep [o]pen
user 5946 99.8 0.0 128600 5744 pts/22 R+ 11:27 169:27 | _ python openforwrite.py
[user@localhost ~]$ ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/123.txt
αααα»αα αααααααααΆααα’αα ααΎαααααΆααααααααΌαααΆα O_WRONLY α αΆααααΆααααΈα―αααΆαααΆααα½α α αΎα α αΎαααΎααα·αα αΆαααΆα ααααα’αΆαααΆαα
[user@localhost ~]$ gdb -p 5946
...
(gdb) call open("/mnt/logs/megapipe", 00000001,0666)
$1 = 4
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 Oct 8 14:20 4 -> /mnt/logs/megapipe
(gdb) call dup2(4,3)
$2 = 3
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/megapipe
l-wx------ 1 user user 64 Oct 8 14:20 4 -> /mnt/logs/megapipe
(gdb) call close(4)
$3 = 0
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/megapipe
(gdb) quit
A debugging session is active.
Inferior 1 [process 5946] will be detached.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/python2.7, process 5946
αααα»ααα·αα·αααααΎααααΆαααΈαααααΈα ααααΆα remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M Oct 8 14:21 123.txt
αα·ααααααααααα ααΎααα·αα·αααααΎααααΆαααΈααααααααΆααααα αΆ
[user@localhost ~]$ ls -lah /mnt/logs/
total 7.9M
drwxr-xr-x 2 user user 1.0K Oct 8 11:28 .
drwxr-xr-x 4 root root 1.0K Oct 8 10:55 ..
-rw-rw-r-- 1 user user 7.9M Oct 8 14:17 123.txt
prw-rw-r-- 1 user user 0 Oct 8 14:22 megapipe
αα·ααααααααααΌαααΆααααααΆαα»α αααα αΆααααΌαααΆααααααααΆαα
αααα»ααααααα±ααΆααααααΎααααΈααααΆααα½ααα·ααααα½αααΆαααΆααααααααα»αααΈ Degiro α
ααααΆααααααΆαα Radio-T α
ααα’αααααΆααααΆααα’ααααααΆα
αααα»αααΆαααΆαα·α αα ααΆααααα αααα»αααααΎα±ααα’ααααα·αα’αααΈα’αααΈαααααΉαααΆααα αααα»αααααΎαααΆαα―αααΆα descriptors cat and sleep ααααα·αααΎα’αααααααΎαααΆαααΆααααααααΆααΆααααααα
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
ααααα: www.habr.com