Nthawi ina, pakufunsidwa, ndidafunsidwa, mungatani ngati mutapeza kuti ntchito sikugwira ntchito chifukwa diski yatha?
Inde, ndinayankha kuti ndiwona chimene chinali ndi malowa ndipo, ngati nkotheka, ndiyeretse malowo.
Kenako wofunsayo anafunsa, bwanji ngati palibe malo aulere pagawo, koma simukuwonanso mafayilo omwe angatenge malo onse?
Kwa izi ndinanena kuti mutha kuyang'ana nthawi zonse zofotokozera mafayilo otseguka, mwachitsanzo ndi lamulo la lsof, ndikumvetsetsa kuti ndi ntchito iti yomwe yatenga malo onse omwe alipo, ndiyeno mutha kuchitapo kanthu malinga ndi momwe zinthu ziliri, kutengera ngati deta ikufunika. .
Wofunsayo adandisokoneza pa mawu otsiriza, ndikuwonjezera ku funso lake: "Tiyerekeze kuti sitikusowa deta, ndizolemba zowonongeka, koma ntchitoyo siigwira ntchito chifukwa sichikhoza kulemba debug"?
"Chabwino," ndidayankha, "titha kuzimitsa kukonza ndikuyambitsanso."
Wofunsayo adatsutsa kuti: "Ayi, sitingathe kuyambitsanso pulogalamuyo, tikadali ndi zofunikira zomwe zasungidwa m'makumbukidwe, ndipo makasitomala ofunikira amalumikizidwa ndi ntchitoyo, zomwe sitingathe kukakamiza kuti tilumikizanenso."
"Chabwino," ndidati, "ngati sitingayambitsenso kugwiritsa ntchito ndipo chidziwitsocho sichofunikira kwa ife, ndiye kuti titha kuchotsa fayilo yotsegukayi kudzera muzofotokozera zamafayilo, ngakhale sitikuwona mu lamulo la ls. pa file system."
Wofunsayo anasangalala, koma sindinatero.
Kenako ndinaganiza, chifukwa chiyani munthu amene amayesa chidziwitso changa samakumba mozama? Koma bwanji ngati deta ndi yofunika pambuyo pa zonse? Bwanji ngati sitingathe kuyambitsanso ndondomeko, ndipo ndondomekoyi ikulembera ku fayilo pagawo lomwe lilibe malo omasuka? Bwanji ngati sitingathe kutaya deta yomwe yalembedwa kale, komanso deta yomwe ndondomekoyi imalemba kapena kuyesa kulemba?
Tuzik
Kumayambiriro kwa ntchito yanga, ndinayesera kupanga pulogalamu yaying'ono yomwe imayenera kusunga zambiri za ogwiritsa ntchito. Ndiyeno ndinaganiza, ndingafanane bwanji ndi wosuta ndi deta yake. Mwachitsanzo, ndili ndi Ivanov Ivan Ivanovich, ndipo ali ndi zambiri, koma ndingapeze bwanji mabwenzi nawo? Ndikhoza kunena mwachindunji kuti galu wotchedwa "Tuzik" ndi wa Ivan yemweyo. Koma bwanji ngati asintha dzina lake ndipo m'malo mwa Ivan amakhala, mwachitsanzo, Olya? Kenaka zidzawoneka kuti Olya Ivanovna Ivanova sadzakhalanso ndi galu, ndipo Tuzik yathu idzakhala ya Ivan kulibe. Dongosolo lachinsinsi lomwe linapatsa aliyense wogwiritsa ntchito chizindikiritso chapadera (ID) linathandizira kuthetsa vutoli, ndipo Tuzik yanga inamangirizidwa ku ID iyi, yomwe, kwenikweni, inali nambala chabe. Choncho, mwini ace anali ID nambala 2, ndipo pa nthawi ina Ivan anali pansi pa ID, ndiye Olya anakhala pansi pa ID yomweyo. Vuto la umunthu ndi kuweta nyama linathetsedwa kwenikweni.
Fayilo yofotokozera
Vuto la fayilo ndi pulogalamu yomwe imagwira ntchito ndi fayiloyi ndi yofanana ndi ya galu wathu ndi munthu. Tiyerekeze kuti ndinatsegula fayilo yotchedwa ivan.txt ndikuyamba kulemba mawu akuti tuzik mmenemo, koma ndinangotha ββkulemba chilembo choyamba "t" mu fayilo, ndipo fayiloyi inatchedwanso wina, mwachitsanzo, ku olya.txt. Koma fayiloyo imakhala yofanana, ndipo ndikufunabe kulemba ace yanga mmenemo. Nthawi zonse fayilo ikatsegulidwa ndi foni yam'manja
Ku Linux, laibulale ya libc imatsegula mafayilo atatu ofotokozera pa pulogalamu iliyonse (ndondomeko), yowerengedwa 3. Zambiri zitha kupezeka pamalumikizidwe
- Fayilo yofotokozera 0 imatchedwa STDIN ndipo imalumikizidwa ndi kuyika kwa pulogalamu
- Fayilo yofotokozera 1 imatchedwa STDOUT ndipo imagwiritsidwa ntchito ndi mapulogalamu kutulutsa deta, monga kusindikiza malamulo
- Fayilo yofotokozera 2 imatchedwa STDERR ndipo imagwiritsidwa ntchito ndi mapulogalamu kuti atulutse mauthenga olakwika.
Ngati mu pulogalamu yanu mutsegula fayilo iliyonse kuti muwerenge kapena kulemba, ndiye kuti mudzapeza ID yaulere yoyamba ndipo idzakhala nambala 3.
Mndandanda wamafotokozedwe a mafayilo ukhoza kuwonedwa panjira iliyonse ngati mukudziwa PID yake.
Mwachitsanzo, tiyeni titsegule bash console ndikuyang'ana PID ya ndondomeko yathu
[user@localhost ]$ echo $$
15771
Mu console yachiwiri tiyeni tiyendetse
[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
Mutha kunyalanyaza mosamala nambala yofotokozera 255 pazolinga za nkhaniyi; idatsegulidwa pazosowa zake ndi bash yokha, osati ndi laibulale yolumikizidwa.
Tsopano mafayilo onse ofotokozera atatu amalumikizidwa ndi chipangizo cha pseudo terminal
[user@localhost ]$ echo "hello world" > /proc/15771/fd/0
Ndipo mu console yoyamba tiwona
[user@localhost ]$ hello world
Kuwongolera ndi Pipe
Mutha kuwongolera mosavuta mafayilo ofotokozera a 3 mwanjira iliyonse, kuphatikiza mu bash, mwachitsanzo kudzera pa chitoliro cholumikiza njira ziwiri, onani.
[user@localhost ]$ cat /dev/zero | sleep 10000
Mutha kuyendetsa izi nokha ndi mzere -f ndipo muwone zomwe zikuchitika mkatimo, koma ndikuwuzani mwachidule.
Makolo athu a bash ndi PID 15771 amagawa lamulo lathu ndikumvetsetsa ndendende malamulo angati omwe tikufuna kutsata, kwa ife pali awiri a iwo: mphaka ndi kugona. Bash amadziwa kuti ikufunika kupanga njira ziwiri za ana, ndikuziphatikiza mu chitoliro chimodzi. Pazonse, bash adzafunika njira 2 za ana ndi chitoliro chimodzi.
Bash amayendetsa kuyimba kwadongosolo asanapange njira za ana
Pazochitika za makolo, zikuwoneka ngati pali kale chitoliro, koma palibe njira za ana:
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
Kenako kugwiritsa ntchito kuyimba foni
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
Musaiwale kuti clone imagwirizanitsa ndondomekoyi pamodzi ndi zofotokozera zonse za fayilo, kotero zidzakhala zofanana muzochitika za makolo komanso mwa mwana. Ntchito ya makolo ndi PID 15771 ndikuwunika momwe mwana amachitira, chifukwa chake amangodikirira yankho kuchokera kwa ana.
Chifukwa chake, sichifunikira chitoliro, ndipo imatseka zofotokozera zamafayilo 3 ndi 4.
Mu njira yoyamba ya bash ya ana ndi PID 9004, dongosolo limayimba
Mu ndondomeko ya mwana wachiwiri ndi PID 9005, bash amagwiritsa ntchito dup2 kuti asinthe fayilo yofotokozera STDIN nambala 0. Tsopano chirichonse chimene bash yathu yachiwiri ndi PID 9005 idzawerengedwa chidzawerengedwa kuchokera ku chitoliro.
Pambuyo pake, zofotokozera zamafayilo zowerengera 3 ndi 4 zimatsekedwanso munjira zamwana, popeza sizigwiritsidwanso ntchito.
Ndimanyalanyaza mwadala chofotokozera 255; imagwiritsidwa ntchito pazolinga zamkati ndi bash yokha ndipo imatsekedwanso munjira za ana.
Kenako, munjira yamwana woyamba ndi PID 9004, bash akuyamba kugwiritsa ntchito kuyimba foni
Munjira yachiwiri ya mwana ndi PID 9005, bash imayendetsa chachiwiri chomwe tidafotokoza, kwa ife /usr/bin/sleep.
Kuitana kwa exec sikumatseka ma fayilo pokhapokha atatsegulidwa ndi mbendera ya O_CLOEXEC panthawi yomwe kuyimba kotseguka kudapangidwa. Kwa ife, mutayambitsa mafayilo omwe angathe kuchitidwa, zolemba zonse zamakono zidzasungidwa.
Onani mu console:
[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
Monga mukuonera, nambala yapadera ya chitoliro chathu ndi yofanana muzochita zonse ziwiri. Chifukwa chake tili ndi kulumikizana pakati pa njira ziwiri zosiyana ndi kholo limodzi.
Kwa iwo omwe sadziwa ma foni omwe bash amagwiritsa ntchito, ndimalimbikitsa kwambiri kuyendetsa malamulowo kudzera muzitsulo ndikuwona zomwe zikuchitika mkati, mwachitsanzo monga chonchi:
strace -s 1024 -f bash -c "ls | grep hello"
Tiyeni tibwerere ku vuto lathu ndi malo otsika a disk ndikuyesera kusunga deta popanda kuyambitsanso ndondomekoyi. Tiyeni tilembe pulogalamu yaying'ono yomwe ingalembe pafupifupi megabyte 1 pa sekondi imodzi ku disk. Komanso, ngati pazifukwa zina sitinathe kulemba deta ku diski, tidzangonyalanyaza izi ndikuyesera kulembanso deta kachiwiri. Muchitsanzo chomwe ndikugwiritsa ntchito Python, mutha kugwiritsa ntchito chilankhulo china chilichonse.
[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
Tiyeni tiyendetse pulogalamuyi ndikuyang'ana zofotokozera za fayilo
[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
Monga mukuwonera, tili ndi zofotokozera zathu zamafayilo 3 ndi zina zomwe tidatsegula. Tiyeni tiwone kukula kwa fayilo:
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 117M Oct 7 16:30 123.txt
Zomwe zikulembedwa, timayesetsa kusintha zilolezo pafayilo:
[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
Tikuwona kuti deta ikulembedwabe, ngakhale wogwiritsa ntchito alibe chilolezo cholembera fayilo. Tiyeni tiyese kuchotsa:
[user@localhost ]$ sudo rm 123.txt
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory
Kodi deta yalembedwa kuti? Ndipo kodi iwo analembedwa konse? Tikuwona:
[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)
Inde, ofotokozera mafayilo athu akadalipo ndipo tikhoza kuchitira chofotokozera fayiloyi ngati fayilo yathu yakale, tikhoza kuwerenga, kumveketsa ndikuyikopera.
Tiyeni tiwone kukula kwa fayilo:
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 19923457 2621522 /home/user/123.txt
Kukula kwa fayilo ndi 19923457. Tiyeni tiyese kuchotsa fayiloyi:
[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
Monga mukuonera, kukula kwa fayilo kukungowonjezereka ndipo thunthu lathu silinagwire ntchito. Tiyeni tiwone zolembedwa zoyimba foni
with open("123.txt", "w") as f:
tiyenera kuyika
with open("123.txt", "a") as f:
Kuwona ndi mbendera "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
ndi mbendera "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
Kupanga ndondomeko yomwe ikuchitika kale
Nthawi zambiri opanga mapulogalamu, popanga ndi kuyesa mapulogalamu, amagwiritsa ntchito zosokoneza (mwachitsanzo GDB) kapena milingo yosiyanasiyana yolowera mu pulogalamuyi. Linux imapereka kuthekera kolemba ndikusintha pulogalamu yomwe yayamba kale, mwachitsanzo, kusintha makonda amitundu, kukhazikitsa malo opumira, ndi zina zambiri.
Kubwerera ku funso loyambirira loti palibe malo okwanira a disk kuti tilembe fayilo, tiyeni tiyese kutsanzira vutoli.
Tiyeni tipange fayilo ya magawo athu, omwe tidzayika ngati disk yosiyana:
[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 ~]$
Tiyeni tipange fayilo ya fayilo:
[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 ~]$
Konzani fayilo ya fayilo:
[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
Timapanga chikwatu ndi eni ake:
[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs
Tiyeni titsegule fayilo kuti tilembe mu pulogalamu yathu yokha:
with open("/mnt/logs/123.txt", "w") as f:
Yambitsani
[user@localhost ]$ python openforwrite.py
Timadikirira masekondi angapo
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
Choncho, tili ndi vuto lomwe tafotokoza kumayambiriro kwa nkhaniyi. Malo aulere 0, 100% otanganidwa.
Timakumbukira kuti molingana ndi momwe ntchitoyi ikuyendera, tikuyesera kulemba deta yofunika kwambiri yomwe sitingathe kutayika. Ndipo panthawi imodzimodziyo, tiyenera kukonza utumiki popanda kuyambitsanso ndondomekoyi.
Tinene kuti tikadali ndi malo a disk, koma mu magawo osiyanasiyana, mwachitsanzo mkati / kunyumba.
Tiyeni tiyese "kukonzanso mwachangu" khodi yathu.
Tiyeni tiwone PID ya ndondomeko yathu, yomwe yadya malo onse a disk:
[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
Lumikizani ku ndondomekoyi kudzera pa gdb
[user@localhost ~]$ gdb -p 10078
...
(gdb)
Tiyeni tiwone zofotokozera za fayilo yotseguka:
(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
Timayang'ana zambiri za fayilo yofotokozera nambala 3, zomwe zimatisangalatsa
(gdb) shell cat /proc/10078/fdinfo/3
pos: 8189952
flags: 0100001
mnt_id: 482
Kukumbukira zomwe Python imatcha dongosolo (onani pamwambapa pomwe tidathamangira ndikupeza kuyimba kotseguka), pokonza khodi yathu kuti titsegule fayilo, timachita chimodzimodzi m'malo mwa njira yathu, koma timafunikira O_WRONLY|O_CREAT| O_TRUNC bits m'malo ndi nambala. Kuti muchite izi, tsegulani magwero a kernel, mwachitsanzo
# define O_WRONLY 00000001
# define O_CREAT 00000100
# define O_TRUNC 00001000
Timaphatikiza zikhalidwe zonse kukhala chimodzi, timapeza 00001101
Timayimba foni kuchokera ku gdb
(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4
Chifukwa chake tili ndi chofotokozera chatsopano cha fayilo ndi nambala 4 ndi fayilo yatsopano yotseguka pagawo lina, timayang'ana:
(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
Timakumbukira chitsanzo ndi chitoliro - momwe bash amasinthira ofotokozera mafayilo, ndipo taphunzira kale kuyimba kwa dongosolo la dup2.
Timayesa kusintha fayilo imodzi yofotokozera ndi ina
(gdb) call dup2(4,3)
$2 = 3
Kufufuza:
(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
Timatseka chofotokozera 4, chifukwa sitichifuna:
(gdb) call close (4)
$1 = 0
Ndipo tulukani 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
Kuyang'ana fayilo yatsopano:
[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
Monga mukuonera, deta imalembedwa ku fayilo yatsopano, tiyeni tiwone yakale:
[user@localhost ~]$ ls -lah /mnt/logs/123.txt
-rw-rw-r-- 1 user user 7.9M Oct 8 11:08 /mnt/logs/123.txt
Palibe deta yomwe yatayika, ntchitoyo imagwira ntchito, zipika zimalembedwa kumalo atsopano.
Tiyeni tiwunikire ntchitoyi pang'ono
Tiyerekeze kuti deta ndi yofunika kwa ife, koma tilibe malo a disk mu magawo aliwonse ndipo sitingathe kulumikiza disk.
Zomwe tingachite ndikulozeranso deta yathu kwinakwake, mwachitsanzo poyimba, ndikulozeranso deta kuchokera ku chitoliro kupita ku netiweki kudzera mu pulogalamu ina, mwachitsanzo netcat.
Titha kupanga chitoliro chotchedwa ndi lamulo la mkfifo. Idzapanga fayilo ya pseudo pamafayilo ngakhale palibe malo omasuka.
Yambitsaninso pulogalamuyo ndikuwona:
[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
Palibe danga la disk, koma tidapanga bwino chitoliro chotchulidwa pamenepo:
[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
Tsopano tifunika kukulunga mwanjira ina zonse zomwe zimalowa mu chitoliro ichi kupita ku seva ina kudzera pa netiweki; netcat yomweyo ndiyoyenera izi.
Pa seva remote-server.example.com timathamanga
[user@localhost ~]$ nc -l 7777 > 123.txt
Pa seva yathu yovuta timayambitsa mu terminal ina
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
Tsopano deta yonse yomwe imathera mu chitoliro idzapita ku stdin mu netcat, yomwe idzatumiza ku netiweki pa doko 7777.
Zomwe tiyenera kuchita ndikuyamba kulemba deta yathu mupaipi yotchulidwa iyi.
Tili ndi kale kugwiritsa ntchito pulogalamuyi:
[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
Pa mbendera zonse, timangofunika O_WRONLY popeza fayiloyo ilipo kale ndipo sitiyenera kuichotsa.
[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
Kuyang'ana pa seva yakutali remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M Oct 8 14:21 123.txt
Deta ikubwera, timayang'ana vuto la seva
[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
Deta imasungidwa, vuto limathetsedwa.
Ndimatenga mwayi uwu kunena moni kwa anzanga aku Degiro.
Mverani ma podikasiti a Radio-T.
Zabwino zonse.
Monga homuweki, ndikukupemphani kuti muganizire zomwe zidzakhale pakapangidwe ka fayilo ndi kugona ngati mutsatira lamulo ili:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
Source: www.habr.com