Ib zaug, hauv kev xam phaj, kuv tau nug koj yuav ua li cas yog tias koj pom qhov kev pabcuam tawg vim tias lub disk tau khiav tawm ntawm qhov chaw?
Tau kawg, kuv teb tias kuv yuav pom qhov chaw no ua dab tsi thiab, yog tias ua tau, kuv yuav ntxuav qhov chaw.
Tom qab ntawd tus neeg xam phaj nug, yuav ua li cas yog tias tsis muaj qhov chaw pub dawb ntawm qhov muab faib, tab sis koj kuj tsis pom cov ntaub ntawv uas yuav siv tag nrho qhov chaw?
Txog qhov no, kuv tau hais tias koj tuaj yeem saib cov ntaub ntawv qhib txhua lub sijhawm, piv txwv li, nrog lsof hais kom ua thiab nkag siab tias daim ntawv thov twg tau siv tag nrho cov chaw muaj, thiab tom qab ntawd koj tuaj yeem ua raws li qhov xwm txheej, nyob ntawm seb cov ntaub ntawv xav tau. .
Tus neeg xam phaj cuam tshuam kuv ntawm lo lus kawg, ntxiv rau nws cov lus nug: "Xav tias peb tsis xav tau cov ntaub ntawv, nws tsuas yog lub cav debug, tab sis daim ntawv thov poob vim nws tsis tuaj yeem sau qhov kev debug"?
"ok," Kuv teb tias, "peb tuaj yeem tua kev debugging hauv daim ntawv thov config thiab rov pib dua."
Tus neeg xam phaj tau tawm tsam: "Tsis yog, peb tsis tuaj yeem rov pib dua daim ntawv thov, peb tseem muaj cov ntaub ntawv tseem ceeb hauv kev nco, thiab cov neeg siv khoom tseem ceeb txuas nrog rau qhov kev pabcuam nws tus kheej, uas peb tsis tuaj yeem yuam kom rov txuas dua."
"ok," Kuv hais tias, "yog tias peb tsis tuaj yeem rov pib dua daim ntawv thov thiab peb tsis quav ntsej txog cov ntaub ntawv, ces peb tuaj yeem tshem tawm cov ntaub ntawv qhib no ntawm tus sau cov ntaub ntawv, txawm tias peb tsis pom nws hauv ls. hais kom ua ntawm cov ntaub ntawv system. "
Tus neeg xam phaj tau txaus siab, tab sis kuv tsis yog.
Tom qab ntawd kuv xav tias, vim li cas tus neeg tsis kuaj kuv qhov kev paub khawb tob? Tab sis yuav ua li cas yog tias cov ntaub ntawv tseem ceeb tom qab tag nrho? Yuav ua li cas yog tias peb tsis tuaj yeem rov pib txheej txheem, thiab tib lub sijhawm cov txheej txheem no sau rau hauv cov ntaub ntawv kaw lus ntawm qhov muab faib uas tsis muaj qhov chaw dawb? Yuav ua li cas yog tias peb tsis tuaj yeem poob tsis tsuas yog cov ntaub ntawv uas twb tau sau lawm, tab sis kuj yog cov ntaub ntawv uas cov txheej txheem no sau lossis sim sau?
Tuzik
Thaum pib ntawm kuv txoj haujlwm, kuv tau sim tsim ib daim ntawv thov me me uas yuav tsum tau khaws cov ntaub ntawv hais txog cov neeg siv. Thiab ces kuv xav, yuav ua li cas kuv phim tus neeg siv rau nws cov ntaub ntawv. Piv txwv li, kuv muaj Ivanov Ivan Ivanovich, thiab nws muaj ib co ntaub ntawv, tab sis yuav ua li cas ua phooj ywg nrog lawv? Kuv tuaj yeem taw qhia ncaj qha tias tus dev hu ua "Tuzik" belongs rau tib Ivan. Tab sis yuav ua li cas yog tias nws hloov nws lub npe thiab hloov Ivan ua, piv txwv li, Olya? Tom qab ntawd nws yuav tig tawm tias peb Olya Ivanovna Ivanova yuav tsis muaj ib tug dev, thiab peb Tuzik tseem yuav yog tus uas tsis muaj nyob hauv Ivan. Cov ntaub ntawv tau pab daws qhov teeb meem no, uas tau muab rau txhua tus neeg siv tus cim tshwj xeeb (ID), thiab kuv Tuzik tau khi rau tus ID no, qhov tseeb, tsuas yog tus lej xov tooj xwb. Yog li, tus tswv ntawm tuzik tau nrog tus lej ID 2, thiab nyob rau qee lub sijhawm Ivan nyob hauv daim ID no, thiab tom qab ntawd Olya los ua tus ID tib yam. Qhov teeb meem ntawm noob neej thiab tsiaj ua liaj ua teb tau ua tiav.
Cov ntaub ntawv piav qhia
Qhov teeb meem ntawm cov ntaub ntawv thiab cov kev pab cuam uas ua haujlwm nrog cov ntaub ntawv no yog hais txog tib yam li peb tus dev thiab tib neeg. Piv txwv tias kuv qhib ib cov ntaub ntawv npe hu ua ivan.txt thiab pib sau lo lus tuzik rau hauv nws, tab sis tswj kom sau tsuas yog thawj tsab ntawv "t" rau hauv cov ntaub ntawv, thiab cov ntaub ntawv no tau hloov npe los ntawm ib tug neeg, piv txwv li, rau olya.txt. Tab sis cov ntaub ntawv yog tib yam thiab kuv tseem xav sau kuv ace rau nws. Txhua zaus koj qhib cov ntaub ntawv nrog lub kaw lus hu
Ntawm Linux, lub tsev qiv ntawv libc qhib 3 cov ntaub ntawv piav qhia rau txhua daim ntawv thov khiav (txheej txheem), nrog cov lej 0,1,2. Xav paub ntau ntxiv koj tuaj yeem nrhiav tau ntawm qhov txuas
- Cov ntaub ntawv piav qhia 0 yog hu ua STDIN thiab cuam tshuam nrog cov ntawv thov nkag.
- Cov ntaub ntawv piav qhia 1 yog hu ua STDOUT thiab yog siv los ntawm cov ntawv tso zis xws li cov lus txib luam tawm.
- Cov ntaub ntawv piav qhia 2 yog lub npe STDERR thiab siv los ntawm cov ntawv thov los tso tawm cov lus yuam kev.
Yog tias hauv koj qhov program koj qhib cov ntawv nyeem lossis sau ntawv, feem ntau koj yuav tau txais thawj tus ID dawb thiab nws yuav yog tus lej 3.
Koj tuaj yeem pom cov npe ntawm cov ntaub ntawv piav qhia rau txhua tus txheej txheem yog tias koj paub nws PID.
Piv txwv li, cia peb qhib lub console nrog bash thiab pom PID ntawm peb cov txheej txheem
[user@localhost ]$ echo $$
15771
Hauv qhov thib ob console, khiav
[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
Koj tuaj yeem tsis quav ntsej cov ntaub ntawv piav qhia nrog tus lej 255 nyob rau hauv lub moj khaum ntawm tsab xov xwm no, nws tau qhib rau koj cov kev xav tau los ntawm bash nws tus kheej, thiab tsis yog los ntawm cov tsev qiv ntawv txuas.
Tam sim no tag nrho 3 cov ntaub ntawv piav qhia yog txuam nrog pseudo-terminal ntaus ntawv
[user@localhost ]$ echo "hello world" > /proc/15771/fd/0
Thiab nyob rau hauv thawj console peb yuav pom
[user@localhost ]$ hello world
Redirect thiab yeeb nkab
Koj tuaj yeem yooj yim hla cov 3 cov ntaub ntawv piav qhia hauv txhua txoj kev, suav nrog hauv bash, piv txwv li, los ntawm cov yeeb nkab (pipe) txuas ob txheej txheem, saib
[user@localhost ]$ cat /dev/zero | sleep 10000
Koj tuaj yeem khiav qhov lus txib no koj tus kheej nrog rov -f thiab pom dab tsi tshwm sim hauv, tab sis kuv yuav ua kom luv luv.
Peb niam txiv bash txheej txheem nrog PID 15771 parses peb cov lus txib thiab nkag siab raws nraim pes tsawg cov lus txib peb xav khiav, hauv peb rooj plaub muaj ob ntawm lawv: miv thiab pw tsaug zog. Bash paub tias nws yuav tsum tsim kom muaj ob txoj hauv kev me me, thiab muab tso rau hauv ib lub yeeb nkab. Nyob rau hauv tag nrho, bash yuav xav tau 2 tus me nyuam cov txheej txheem thiab ib lub yeeb nkab.
Ua ntej tsim cov txheej txheem me nyuam, bash khiav lub kaw lus hu
Rau cov txheej txheem niam txiv, nws zoo li cov yeeb nkab twb muaj lawm, tab sis tseem tsis tau muaj cov txheej txheem menyuam yaus:
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
Tom qab ntawd siv qhov system hu
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
Tsis txhob hnov ββββqab tias clone clones cov txheej txheem nrog rau tag nrho cov ntaub ntawv piav qhia, yog li lawv yuav zoo ib yam hauv cov txheej txheem niam txiv thiab cov menyuam. Lub luag haujlwm ntawm cov txheej txheem niam txiv nrog PID 15771 yog saib xyuas cov txheej txheem ntawm tus menyuam, yog li nws tsuas yog tos cov lus teb los ntawm cov menyuam yaus.
Yog li ntawd, nws tsis xav tau cov yeeb nkab, thiab nws kaw cov ntaub ntawv piav qhia nrog tus lej 3 thiab 4.
Hauv thawj bash tus txheej txheem me nyuam nrog PID 9004, lub kaw lus hu
Hauv cov txheej txheem menyuam thib ob nrog PID 9005, bash dup2s cov ntaub ntawv mus rau STDIN descriptor number 0. Tam sim no txhua yam uas peb thib ob bash nrog PID 9005 yuav nyeem yuav nyeem los ntawm cov yeeb nkab.
Tom qab ntawd, cov ntaub ntawv piav qhia nrog tus lej 3 thiab 4 kuj raug kaw hauv cov txheej txheem menyuam yaus, vim lawv tsis siv lawm.
Kuv txhob txwm tsis quav ntsej cov ntaub ntawv descriptor 255, nws yog siv sab hauv los ntawm bash nws tus kheej thiab tseem yuav raug kaw hauv cov txheej txheem menyuam yaus.
Tom ntej no, hauv thawj tus menyuam txheej txheem nrog PID 9004, bash pib nrog kev hu xovtooj
Hauv cov txheej txheem menyuam thib ob nrog PID 9005, bash ua haujlwm thib ob peb tau teev tseg, hauv peb rooj plaub / usr / bin / pw tsaug zog.
Tus exec system hu tsis kaw cov ntaub ntawv piav qhia tshwj tsis yog lawv tau qhib nrog O_CLOEXEC chij thaum lub sijhawm qhib hu raug tua. Hauv peb cov ntaub ntawv, tom qab khiav cov ntaub ntawv executable, tag nrho cov ntaub ntawv piav qhia tam sim no yuav raug cawm.
Tshawb xyuas hauv 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
Raws li koj tuaj yeem pom, tus naj npawb tshwj xeeb ntawm peb cov yeeb nkab yog tib yam hauv ob txoj kev. Yog li, peb muaj kev sib txuas ntawm ob txoj kev sib txawv nrog tib tus niam txiv.
Rau cov neeg uas tsis paub txog lub kaw lus hu uas siv bash, kuv xav kom khiav cov lus txib los ntawm txoj kab thiab pom dab tsi tshwm sim hauv, piv txwv li, zoo li qhov no:
strace -s 1024 -f bash -c "ls | grep hello"
Cia peb rov qab mus rau peb qhov teeb meem nrog khiav tawm ntawm qhov chaw disk thiab sim txuag cov ntaub ntawv yam tsis tau rov pib dua txheej txheem. Cia peb sau ib qho kev pab cuam me me uas yuav sau rau disk txog 1 megabyte ib ob. Ntxiv mus, yog tias vim li cas peb tsis tuaj yeem sau cov ntaub ntawv rau disk, peb tsuas yog tsis quav ntsej qhov no thiab sim sau cov ntaub ntawv dua hauv ib pliag. Hauv qhov piv txwv kuv siv Python, koj tuaj yeem siv lwm yam lus programming.
[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
Khiav qhov program thiab saib cov ntaub ntawv piav qhia
[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
Raws li koj tuaj yeem pom, peb muaj peb tus qauv 3 cov ntaub ntawv piav qhia thiab lwm qhov uas peb tau qhib. Cia peb kuaj cov ntaub ntawv loj:
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 117M Oct 7 16:30 123.txt
cov ntaub ntawv yog sau, peb sim hloov txoj cai rau cov ntaub ntawv:
[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
Peb pom tias cov ntaub ntawv tseem tab tom sau, txawm tias peb cov neeg siv tsis muaj cai sau rau hauv cov ntaub ntawv. Cia peb sim tshem nws:
[user@localhost ]$ sudo rm 123.txt
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory
Cov ntaub ntawv sau nyob qhov twg? Thiab lawv puas tau sau tag nrho? Peb kuaj:
[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)
Yog lawm, peb cov ntaub ntawv piav qhia tseem muaj, thiab peb tuaj yeem ua haujlwm nrog cov ntaub ntawv piav qhia zoo li peb cov ntaub ntawv qub, peb tuaj yeem nyeem nws, ntxuav nws thiab luam tawm.
Saib cov ntaub ntawv loj:
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 19923457 2621522 /home/user/123.txt
Cov ntaub ntawv loj yog 19923457. Sim tshem cov ntaub ntawv:
[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
Raws li koj tuaj yeem pom, cov ntaub ntawv loj tsuas yog nce thiab peb lub cev tsis ua haujlwm. Cia peb tig mus rau cov ntaub ntawv ntawm kev hu xov tooj
with open("123.txt", "w") as f:
peb yuav tsum tso
with open("123.txt", "a") as f:
Kos nrog "w" chij
[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
thiab nrog "a" chij
[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
Programming tus txheej txheem uas twb muaj lawm
Feem ntau, thaum tsim thiab sim ib qhov kev pab cuam, programmers siv debuggers (piv txwv li, GDB) lossis ntau theem ntawm kev nkag rau hauv daim ntawv thov. Linux muab lub peev xwm los sau thiab hloov qhov kev pab cuam uas twb tau ua lawm, xws li hloov cov txiaj ntsig ntawm kev hloov pauv, teeb tsa lub sijhawm tawg, thiab lwm yam.
Rov qab mus rau thawj lo lus nug txog qhov tsis muaj qhov chaw disk los sau cov ntaub ntawv, cia peb sim simulate qhov teeb meem.
Cia peb tsim ib cov ntaub ntawv rau peb muab faib, uas peb yuav mount raws li ib tug cais tsav:
[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 ~]$
Cia peb tsim cov ntaub ntawv system:
[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 ~]$
Cia peb mount cov ntaub ntawv system:
[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
Tsim ib daim ntawv teev npe nrog peb tus tswv:
[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs
Cia peb qhib cov ntaub ntawv rau kev sau ntawv nkaus xwb hauv peb qhov program:
with open("/mnt/logs/123.txt", "w") as f:
Tua tawm
[user@localhost ]$ python openforwrite.py
Tos ob peb feeb
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
Yog li, peb tau txais qhov teeb meem tau piav qhia thaum pib ntawm tsab xov xwm no. Qhov chaw dawb 0, nyob 100%.
Peb nco ntsoov tias raws li cov xwm txheej ntawm qhov teeb meem, peb tab tom sim sau cov ntaub ntawv tseem ceeb heev uas tsis tuaj yeem ploj. Thiab ua li ntawd, peb yuav tsum kho qhov kev pabcuam yam tsis tau rov pib dua txheej txheem.
Cia peb hais tias peb tseem muaj qhov chaw disk, tab sis nyob rau hauv ib qho kev faib sib txawv, piv txwv li, hauv / tsev.
Cia peb sim "reprogram ntawm ya" peb cov cai.
Peb saib PID ntawm peb cov txheej txheem, uas noj tag nrho cov chaw 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
Txuas rau cov txheej txheem nrog gdb
[user@localhost ~]$ gdb -p 10078
...
(gdb)
Peb saib qhib cov ntaub ntawv piav qhia:
(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
Peb saib cov ntaub ntawv hais txog cov ntaub ntawv piav qhia nrog tus lej 3, uas peb nyiam
(gdb) shell cat /proc/10078/fdinfo/3
pos: 8189952
flags: 0100001
mnt_id: 482
Nco ntsoov tias lub kaw lus hu ua Python ua li cas (saib saum toj no qhov twg peb tau khiav strace thiab pom qhov qhib hu), thaum ua peb cov cai qhib cov ntaub ntawv, peb ua tib yam rau peb tus kheej rau peb tus txheej txheem, tab sis peb xav tau O_WRONLY|O_CREAT| O_TRUNC cov khoom hloov nrog tus lej tus nqi. Ua li no, qhib lub kernel qhov chaw, piv txwv li
#define O_WRONLY 00000001
#define O_CREAT 00000100
#define O_TRUNC 00001000
Peb muab tag nrho cov txiaj ntsig \u00001101b\uXNUMXbinto ib qho, peb tau txais XNUMX
Khiav peb hu los ntawm gdb
(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4
Yog li peb tau txais cov ntaub ntawv tshiab nrog tus lej 4 thiab cov ntaub ntawv qhib tshiab ntawm lwm qhov muab faib, kos:
(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
Peb nco ntsoov qhov piv txwv nrog cov yeeb nkab - yuav ua li cas bash hloov cov ntaub ntawv piav qhia, thiab twb tau kawm txog kev hu xov tooj rau dup2.
Sim hloov ib daim ntawv piav qhia nrog lwm tus
(gdb) call dup2(4,3)
$2 = 3
Peb tshawb xyuas:
(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
Kaw cov ntaub ntawv piav qhia 4, vim peb tsis xav tau nws:
(gdb) call close (4)
$1 = 0
Thiab tawm 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
Tshawb xyuas cov ntaub ntawv tshiab:
[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
Raws li koj tuaj yeem pom, cov ntaub ntawv tau sau rau hauv cov ntaub ntawv tshiab, peb tshawb xyuas qhov qub:
[user@localhost ~]$ ls -lah /mnt/logs/123.txt
-rw-rw-r-- 1 user user 7.9M Oct 8 11:08 /mnt/logs/123.txt
Cov ntaub ntawv tsis ploj, daim ntawv thov ua haujlwm, cov ntawv teev lus tau sau rau qhov chaw tshiab.
Cia peb ua tej yam nyuaj me ntsis
Xav txog tias cov ntaub ntawv tseem ceeb rau peb, tab sis peb tsis muaj qhov chaw disk hauv ib qho ntawm cov partitions thiab peb tsis tuaj yeem txuas lub disk.
Qhov peb tuaj yeem ua tau yog redirect peb cov ntaub ntawv nyob qhov twg, piv txwv li, mus rau ib lub yeeb nkab, thiab redirect cov ntaub ntawv los ntawm cov yeeb nkab mus rau lub network los ntawm ib co kev pab cuam, xws li netcat.
Peb tuaj yeem tsim lub npe yeeb nkab nrog mkfifo hais kom ua. Nws yuav tsim cov ntaub ntawv pseudo ntawm cov ntaub ntawv kaw lus, txawm tias tsis muaj qhov chaw dawb ntawm nws.
Pib dua daim ntawv thov thiab kos:
[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
Tsis muaj qhov chaw disk, tab sis peb ua tiav tsim cov yeeb nkab muaj npe nyob ntawd:
[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
Tam sim no peb yuav tsum tau qhwv tag nrho cov ntaub ntawv uas nkag mus rau hauv cov yeeb nkab no mus rau lwm tus neeg rau zaub mov los ntawm lub network, tib netcat tsim nyog rau qhov no.
Ntawm cov chaw taws teeb-server.example.com server, khiav
[user@localhost ~]$ nc -l 7777 > 123.txt
Ntawm peb qhov teeb meem server, khiav hauv ib lub davhlau ya nyob twg
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
Tam sim no tag nrho cov ntaub ntawv uas nkag mus rau hauv cov yeeb nkab yuav cia li mus rau stdin hauv netcat, uas yuav xa mus rau lub network ntawm chaw nres nkoj 7777.
Txhua yam peb yuav tsum tau ua yog pib sau peb cov ntaub ntawv mus rau lub npe yeeb nkab no.
Peb twb muaj ib daim ntawv thov khiav:
[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
Ntawm tag nrho cov chij, peb tsuas yog xav tau O_WRONLY txij li cov ntaub ntawv twb muaj lawm thiab peb tsis tas yuav tshem nws
[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
Tshawb xyuas cov chaw taws teeb chaw taws teeb remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M Oct 8 14:21 123.txt
Cov ntaub ntawv tuaj, peb xyuas cov teeb meem 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
Cov ntaub ntawv tau txais kev cawmdim, qhov teeb meem raug daws.
Kuv siv lub sijhawm no los hais nyob zoo rau kuv cov npoj yaig los ntawm Degiro.
Mloog xov tooj cua-T podcasts.
Txhua yam zoo.
Raws li kev ua haujlwm tom tsev, kuv thov kom xav txog dab tsi yuav muaj nyob rau hauv cov ntaub ntawv piav qhia ntawm tus miv thiab cov txheej txheem pw tsaug zog yog tias koj khiav cov lus txib hauv qab no:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
Tau qhov twg los: www.hab.com