I se tasi taimi, i le taimi o se faatalanoaga, na fesiligia ai aʻu, o le a se mea e te faia pe a e mauaina se auaunaga e le o galue ona o le mea moni o le disk ua leai se avanoa?
Ioe, sa ou tali atu o le a ou vaai po o le a le mea o nofoia e lenei nofoaga ma, afai e mafai, o le a ou faamamaina le nofoaga.
Ona fesili lea o le tagata fai faatalanoaga, e faapefea pe a leai se avanoa avanoa i luga o le vaeluaga, ae e te le o vaaia foi ni faila e alu uma ai le avanoa?
I lenei mea na ou fai atu e mafai ona e vaʻavaʻai i faila faila tatala, mo se faʻataʻitaʻiga ma le lsof command, ma malamalama po o le a le talosaga na faʻaaogaina avanoa avanoa uma, ona mafai lea ona e galue e tusa ai ma tulaga, faʻatatau i le manaʻomia o faʻamatalaga. .
Na faʻalavelaveina aʻu e le tagata faʻatalanoaina i le upu mulimuli, faʻaopoopo i lana fesili: "Faʻapea tatou te le manaʻomia le faʻamaumauga, ua naʻo se faʻailoga faʻapipiʻi, ae e le aoga le talosaga ona e le mafai ona tusia se debug"?
“Ua lelei,” sa ou tali atu ai, “e mafai ona matou tapeina le debug i le seti o talosaga ma toe amata.”
Na tetee le tagata fai faatalanoaga: "Leai, e le mafai ona matou toe amataina le talosaga, o loʻo i ai pea a matou faʻamaumauga taua o loʻo teuina i le manatua, ma o tagata taua e fesoʻotaʻi i le auaunaga lava ia, lea e le mafai ona matou toe faʻamalosia e toe faʻafesoʻotaʻi."
"Ua lelei," na ou fai atu ai, "afai e le mafai ona toe amataina le talosaga ma e le taua ia i matou faʻamatalaga, ona mafai lea ona matou faʻamamaina lenei faila tatala e ala i le faila faila, e tusa lava pe matou te le vaʻaia i le ls command i luga o le faila faila."
Sa fiafia le tagata fai faatalanoaga, ae sa ou le fiafia.
Ona ou mafaufau lea, aisea e le suʻesuʻe ai e le tagata loʻu malamalama loloto? Ae faʻafefea pe afai e taua le faʻamatalaga pe a uma? Ae fa'afefea pe a le mafai ona toe amataina se faagasologa, ma tusi le faagasologa i le faila faila i luga o se vaeluaga e leai se avanoa avanoa? Ae faʻapefea pe afai e le mafai ona tatou leiloa e le gata o faʻamaumauga ua uma ona tusia, ae faʻapea foʻi ma faʻamaumauga o loʻo tusia e lenei faagasologa pe taumafai e tusi?
Tuzik
I le amataga o laʻu galuega, sa ou taumafai e fai se tamaʻi talosaga e manaʻomia e teu ai faʻamatalaga faʻaoga. Ona ou mafaufau lea, faʻafefea ona ou faʻafetaui le tagata faʻaoga i ana faʻamatalaga. Mo se faʻataʻitaʻiga, o loʻo ia te aʻu Ivanov Ivan Ivanovich, ma e iai ni ana faʻamatalaga, ae faʻapefea ona ou faauo ia i latou? E mafai ona ou faʻasino saʻo atu o le taifau e igoa ia "Tuzik" e patino i lenei lava Ivan. Ae faapefea pe afai na te suia lona igoa ae nai lo Ivan e avea, mo se faataitaiga, Olya? Ona oo mai lea o le a le toe i ai se taifau a le matou Olya Ivanovna Ivanova, ma o le a avea pea le matou Tuzik ma le Ivan e le o iai. O se faʻamaumauga na tuʻuina atu i tagata taʻitoʻatasi se faʻamatalaga tulaga ese (ID) na fesoasoani e foia lenei faʻafitauli, ma o laʻu Tuzik na nonoa i lenei ID, lea, o le mea moni, na o se numera telefoni. O le mea lea, o le tagata e ona le tuzik sa i ai le ID numera 2, ma i se taimi i le taimi na i ai Ivan i lalo o lenei ID, ona avea ai lea o Olya i lalo o lenei ID tutusa. O le faʻafitauli o tagata soifua ma faʻatoaga manu na mafai ona foia.
Fa'amatalaga faila
O le faʻafitauli o le faila ma le polokalame o loʻo galue i lenei faila e foliga tutusa ma le matou taifau ma le tagata. Faapea na ou tatalaina se faila e taʻua o ivan.txt ma amata ona tusia le upu tuzik i totonu, ae na o le mafai ona tusia le mataitusi muamua "t" i le faila, ma o lenei faila na toe faaigoa e se tasi, mo se faataitaiga, i le olya.txt. Ae o loʻo tumau pea le faila, ma ou te manaʻo e faʻamaumau laʻu ace i totonu. Soo se taimi lava e tatalaina ai se faila i se telefoni feaveaʻi
I Linux, e tatalaina e le faletusi libc 3 faʻamatalaga faila mo taʻaloga taʻitasi (faʻagasologa), faʻanumera 0,1,2. E mafai ona maua nisi fa'amatalaga i luga ole so'oga
- Fa'amatalaga faila 0 ua ta'ua o le STDIN ma e feso'ota'i ma fa'aoga talosaga
- Fa'amatalaga faila 1 ua ta'ua o le STDOUT ma e fa'aogaina e tusi talosaga e fa'ailoa ai fa'amaumauga, e pei o le lolomi tulafono
- Fa'amatalaga faila 2 ua ta'ua o le STDERR ma e fa'aaogaina e tusi talosaga e fa'aulu ai fe'au sese.
Afai i lau polokalama e te tatalaina se faila mo le faitau poʻo le tusitusi, e foliga mai o le ae mauaina le ID muamua e leai se totogi ma o le numera 3.
O le lisi o faila faila e mafai ona vaʻaia mo soʻo se faagasologa pe afai e te iloa lona PID.
Mo se faʻataʻitaʻiga, seʻi o tatou tatalaina le bash console ma vaʻai i le PID o la tatou gaioiga
[user@localhost ]$ echo $$
15771
I le faamafanafana lona lua tatou tamoe
[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
E mafai ona e le amanaiaina ma le saogalemu le faila faila numera 255 mo faamoemoega o lenei tusiga; na tatalaina mo ona manaoga e ala i le bash lava ia, ae le o le faletusi fesoʻotaʻi.
O le taimi nei o faila faʻamatalaga uma e 3 e fesoʻotaʻi ma le masini faʻailoga pseudo
[user@localhost ]$ echo "hello world" > /proc/15771/fd/0
Ma i le faʻamafanafanaga muamua o le a tatou vaʻaia
[user@localhost ]$ hello world
Toe fa'atonu ma Pipe
E faigofie ona e fa'amalo nei 3 fa'amatalaga faila i so'o se faiga, e aofia ai i le bash, mo se fa'ata'ita'iga e ala i se paipa e fa'afeso'ota'i faiga e lua, va'ai
[user@localhost ]$ cat /dev/zero | sleep 10000
E mafai ona e faia lenei poloaiga oe lava ia fa'ailoga -f ma vaʻai poʻo le a le mea o loʻo tupu i totonu, ae o le a ou taʻu atu ia te oe puupuu.
O a matou matua faʻasolosolo faʻatasi ma le PID 15771 faʻasalalau la matou poloaiga ma malamalama lelei i le tele o poloaiga matou te mananaʻo e tamoʻe, i la matou tulaga e lua o latou: pusi ma moe. Ua iloa e Bash e mana'omia ona faia ni faiga a tamaiti se lua, ma tu'u fa'atasi i le paipa e tasi. I le aofaʻi, o le a manaʻomia e le bash 2 tamaiti faiga ma le paipa e tasi.
Bash e fa'atautaia se telefoni a'o le'i faia faiga a tamaiti
Mo le faagasologa o matua, e foliga mai ua uma ona i ai se paipa, ae e leʻi iai ni faiga a tamaiti:
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
Ona faʻaaogaina lea o le system call
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
Aua neʻi galo o loʻo faʻapipiʻi e clone le faagasologa faatasi ai ma faila faila uma, ina ia tutusa i le faagasologa o matua ma le tamaititi. O le galuega a le matua i le PID 15771 o le mataʻituina lea o gaioiga a tamaiti, o lea e faʻatali mo se tali mai tamaiti.
O le mea lea, e le manaʻomia le paipa, ma e tapunia faʻamatalaga faila faanumera 3 ma le 4.
I le faiga muamua o tamaiti bash ma le PID 9004, o le telefoni feaveaʻi
I le faagasologa o le tamaititi lona lua ma le PID 9005, e faʻaaoga e le bash le dup2 e sui ai le faila faila STDIN numera 0. O le taimi nei o mea uma o le a faitauina e le matou bash lona lua ma le PID 9005 mai le paipa.
A maeʻa lenei, faila faʻamatalaga faʻanumera 3 ma 4 ua tapunia foi i faiga a tamaiti, talu ai e le o toe faʻaaogaina.
Ou te le amanaiaina ma le loto i ai le faila faila 255; e faʻaaogaina mo faamoemoega i totonu e ala i le bash lava ia ma o le a tapunia foi i faiga a tamaiti.
I le isi, i le faʻagasologa muamua o tamaiti ma le PID 9004, o le bash e amata faʻaaogaina se telefoni
I le faʻasologa lona lua o tamaiti ma le PID 9005, e faʻatautaia e le bash le faʻaaogaina lona lua na matou faʻamaonia, i la matou tulaga /usr/bin/sleep.
O le exec system call e le tapunia faila faila se'i vagana ua tatalaina i le fu'a O_CLOEXEC i le taimi na tatala ai le valaau. I la matou tulaga, pe a uma ona faʻalauiloa faila faila, o faila faila uma o loʻo iai nei o le a faʻasaoina.
Siaki i totonu o le fa'amafanafanaga:
[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
E pei ona e vaʻai, o le numera tulaga ese o le matou paipa e tutusa i faiga uma e lua. O lea ua i ai se tatou sootaga i le va o faiga eseese e lua ma le matua e tasi.
Mo i latou e le masani i le faiga o loʻo faʻaaogaina e le bash, ou te fautuaina tele le faʻatinoina o poloaiga e ala i le vaʻaia ma vaʻai i mea o loʻo tupu i totonu, mo se faʻataʻitaʻiga pei o lenei:
strace -s 1024 -f bash -c "ls | grep hello"
Sei o tatou toe foʻi i la tatou faʻafitauli i le maualalo o le disk space ma taumafai e teu faʻamaumauga e aunoa ma le toe amataina o le faagasologa. Se'i o tatou tusia se polokalame la'ititi e tusi pe tusa ma le 1 megabyte ile sekone ile tisiki. E le gata i lea, afai mo nisi mafuaaga na le mafai ai ona matou tusia faʻamatalaga i le disk, matou te le amanaiaina lenei mea ma taumafai e toe tusi faʻamaumauga i le lua. I le faʻataʻitaʻiga o loʻo ou faʻaogaina le Python, e mafai ona e faʻaogaina soʻo se isi gagana polokalame.
[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
Tatou fa'agasolo le polokalame ma va'ai i fa'amatalaga faila
[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
E pei ona e vaʻaia, o loʻo i ai a matou faʻamatalaga faila faila 3 ma le isi na matou tatalaina. Sei o tatou siaki le tele o faila:
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 117M Oct 7 16:30 123.txt
O loʻo tusia faʻamaumauga, matou te taumafai e sui faʻatagaga i luga o le faila:
[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
Matou te vaʻai o loʻo tusia pea faʻamaumauga, e ui lava e leai se faʻatagaga a le matou tagata faʻaoga e tusi ai i le faila. Tatou taumafai e aveese:
[user@localhost ]$ sudo rm 123.txt
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory
O fea o lo'o tusia ai fa'amaumauga? Ma pe ua tusia uma? Matou te siaki:
[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)
Ioe, o loʻo i ai pea la matou faʻamatalaga faila ma e mafai ona matou faʻaogaina le faila faila e pei o la matou faila tuai, e mafai ona matou faitau, faʻamama ma kopi.
Se'i tatou va'ai i le tele o le faila:
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 19923457 2621522 /home/user/123.txt
Ole tele ole faila ole 19923457. Tatou taumafai e fa'amama le faila:
[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
E pei ona e vaʻaia, o le faila faila ua faʻateleina ma e leʻi galue le matou ogalaau. Se'i o tatou va'ai ile fa'amaumauga ole system call
with open("123.txt", "w") as f:
e tatau ona tatou tuu
with open("123.txt", "a") as f:
Siaki i le fu'a "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
ma le fu'a "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
Fa'apolokalameina se fa'agasologa o lo'o fa'agasolo
E masani lava o le au fai polokalame, pe a fatuina ma suʻeina polokalame, faʻaaoga debuggers (mo se faʻataʻitaʻiga GDB) poʻo tulaga eseese o le faʻapipiʻiina o le talosaga. Linux e maua ai le tomai e tusi moni ai ma suia se polokalame ua uma ona taʻavale, mo se faʻataʻitaʻiga, suia le tau o fesuiaiga, seti se vaeluaga, ma isi, ma isi.
Toe fo'i i le fesili muamua e uiga i le le lava o le disk space e tusi ai se faila, tatou taumafai e fa'atusa le fa'afitauli.
Sei o tatou fatuina se faila mo la tatou vaeluaga, lea o le a tatou faʻapipiʻiina o se tisiki ese:
[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 ~]$
Sei o tatou faia se faiga faila:
[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 ~]$
Fa'amau le faiga faila:
[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
Matou te fatuina se lisi ma lo matou pule:
[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs
Sei o tatou tatalaina le faila mo le tusitusi na o la tatou polokalama:
with open("/mnt/logs/123.txt", "w") as f:
Fa'alauiloa
[user@localhost ]$ python openforwrite.py
Matou te faatali mo ni nai sekone
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
O lea la, o loʻo ia i matou le faʻafitauli o loʻo faʻamatalaina i le amataga o lenei tusiga. Avanoa avanoa 0, 100% nofoia.
Matou te manatua e tusa ai ma tulaga o le galuega, matou te taumafai e faʻamaumau faʻamaumauga taua tele e le mafai ona leiloa. Ma i le taimi lava e tasi, matou te manaʻomia le faʻaleleia o le auaunaga e aunoa ma le toe amataina o le faagasologa.
Fa'apea o lo'o i ai pea le matou va'a va'aiga, ae i se isi vaeluaga, mo se fa'ata'ita'iga ile /home.
Sei o tatou taumafai e “reprogram on the fly” a tatou code.
Se'i o tatou va'ai i le PID o la tatou fa'agasologa, lea na 'ai uma ai le avanoa tisiki:
[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
Faʻafesoʻotaʻi i le faagasologa e ala ile gdb
[user@localhost ~]$ gdb -p 10078
...
(gdb)
Se'i tatou va'ai i fa'amatalaga faila faila:
(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
Matou te vaʻavaʻai i faʻamatalaga e uiga i faila faila numera 3, lea e fiafia i ai i matou
(gdb) shell cat /proc/10078/fdinfo/3
pos: 8189952
flags: 0100001
mnt_id: 482
I le manatuaina o le mea e fai e le Python (vaai i luga o le mea na matou tamoe ai ma maua ai le valaau tatala), pe a faʻagasolo a matou code e tatala ai se faila, matou te faia lava e tasi e fai ma sui o la matou faagasologa, ae matou te manaʻomia le O_WRONLY|O_CREAT| O_TRUNC bits e sui i se tau numera. Ina ia faia lenei mea, tatala le kernel puna, mo se faʻataʻitaʻiga
#define O_WRONLY 00000001
#define O_CREAT 00000100
#define O_TRUNC 00001000
Matou te tuʻufaʻatasia uma tau i le tasi, matou te maua 00001101
Matou te faʻatautaia la matou telefoni mai le gdb
(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4
O lea na matou maua ai se faila faila fou ma le numera 4 ma se faila fou tatala i luga o se isi vaeluaga, matou te siaki:
(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
Matou te manatua le faʻataʻitaʻiga i le paipa - faʻafefea ona suia e le bash faila faila, ma ua uma ona matou aʻoaʻoina le dup2 system call.
Matou te taumafai e sui le tasi faila faila i le isi
(gdb) call dup2(4,3)
$2 = 3
Matou siaki:
(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
Matou te tapunia faila faʻamatalaga 4, talu ai matou te le manaʻomia:
(gdb) call close (4)
$1 = 0
Ma alu ese mai le 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
Siaki le faila fou:
[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
E pei ona e vaʻaia, o faʻamaumauga ua tusia i se faila fou, seʻi o tatou siaki le mea tuai:
[user@localhost ~]$ ls -lah /mnt/logs/123.txt
-rw-rw-r-- 1 user user 7.9M Oct 8 11:08 /mnt/logs/123.txt
Leai se faʻamatalaga e leiloa, o le talosaga e galue, ogalaau e tusia i se nofoaga fou.
Sei o tatou faafaigata teisi le galuega
Sei o tatou mafaufau e taua le faʻamatalaga ia i tatou, ae leai so matou vaʻa vaʻaia i soʻo se vaega ma e le mafai ona matou faʻafesoʻotaʻi le disk.
O le mea e mafai ona matou faia o le toe faʻafeiloaʻi o matou faʻamatalaga i se mea, mo se faʻataʻitaʻiga i le paipa, ma faʻafeiloaʻi faʻamatalaga mai le paipa i le fesoʻotaʻiga e ala i se polokalame, mo se faʻataʻitaʻiga netcat.
E mafai ona tatou fatuina se paipa igoa ma le mkfifo poloaiga. O le a faia ai se faila pseudo i luga o le faila faila tusa lava pe leai se avanoa avanoa i luga.
Toe amata le talosaga ma siaki:
[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
E leai se avanoa tisiki, ae matou faia ma le manuia se paipa igoa iina:
[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
Ole taimi nei e tatau ona tatou afifi uma faʻamatalaga e alu i totonu o lenei paipa i se isi faʻaumau e ala ile fesoʻotaʻiga; ole netcat tutusa e talafeagai mo lenei.
I luga o le server remote-server.example.com matou te tamoe
[user@localhost ~]$ nc -l 7777 > 123.txt
I luga o la matou 'au'aunaga fa'afitauli matou te fa'asolo i se isi nofoaga
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
O le taimi nei o faʻamatalaga uma e faʻamutaina i le paipa o le a otometi lava ona alu i le stdin i le netcat, lea o le a tuʻuina atu i le fesoʻotaʻiga i luga o le taulaga 7777.
Pau lava le mea e tatau ona matou faia o le amata tusia o matou faʻamatalaga i totonu o le paipa lea e igoa.
Ua uma ona matou fa'aogaina le talosaga:
[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
Mai fu'a uma, matou te mana'omia lava O_WRONLY talu ai o lo'o iai le faila ma matou te le mana'omia le kilia.
[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
Siaki le server mamao remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M Oct 8 14:21 123.txt
O loʻo oʻo mai faʻamatalaga, matou te siakiina le faʻafitauli o le server
[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
Ua fa'asaoina fa'amaumauga, ua fo'ia le fa'afitauli.
Ou te faʻaaogaina lenei avanoa e faʻafeiloaʻi ai i aʻu uo mai Degiro.
Faalogo i le Radio T podcasts.
Lelei i tagata uma.
I le avea ai ma meaaoga, ou te fautua atu e te mafaufau pe o le a le mea o le a i ai i le faagasologa o faila faila pusi ma moe pe afai e te faʻatinoina le poloaiga lenei:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
puna: www.habr.com