Quondam in colloquio, interrogatus sum, quid facies si officium non invenias operandi ex eo quod orbis ex spatio excurrit?
Sane respondi me videre quid hoc loco teneretur et, si fieri posset, locum purgarem.
Tum Interviewer quaesivit, quid si spatium vacuum in partitione non est, sed etiam tu non vides aliquas tabellas quae totum spatium capiant?
Ad haec dixi te semper videre posse descriptores tabellam apertam, exempli gratia cum praecepto lsof, et intelligere quam applicationem omnia spatium opportunum sumpserit, et tum secundum circumstantias agere potes, prout opus est. .
Interviewer me in verbo ultimo interpellavit, interrogationi eius addens: "Puta nos non egere notitia, iustus est index debug, sed applicatio non operatur quia lusione scribere non potest"?
"Bene," inquam, "debug possumus in applicatione config et sileo eam averte."
Interviewer obiecit: "Immo applicationem sileo non possumus, adhuc habemus notitias magnas in memoria repositas, et clientes magni ad ipsum servitium pertinentes, quod denuo reconnect compellere non possumus".
"Bene," inquam, "si applicationes silere non possumus et notitias nobis non magni momenti esse, tunc simpliciter hunc fasciculum apertum per tabellam descriptorem purgare possumus, etsi in mandato eius non videmus in tabella ratio ".
Interviewer placuit, sed non eram.
Tunc cogitabam, cur non altius fodit homo scientiam meam temptans? Sed quid si notitia momenti est? Quid si processum sileo non possumus, et processus scribit ad systema tabellae in partitione quae spatium liberum non habet? Quid, si non solum notitias quae iam scriptae sunt amittere non possumus, sed etiam notitias quas hic processus scribit vel conatur scribere?
Tuzik
Diluculo in vita mea, parvam applicationem creare conatus sum quae opus erat ad informationem usoris reponendas. Et tunc cogitabam quomodo usori suo datae respondere possum. Exempli gratia, Ivanov Ivan Ivanovich habeo, et aliquid habet, sed quomodo cum illis amicos facere possum? Immediate demonstrare possum canem nominatum "Tuzik" ad ipsum Ivan pertinere. Sed quid si nomen mutat et pro Ivan fit, verbi gratia, Olya? Tunc evenit ut nostra Olya Ivanovna Ivanova canem iam non habebit, et nostra Tuzik adhuc ad Ivan non exsistentem pertinebit. database quod unicuique usor singularem identifier (ID) solvendum adiuvit hanc quaestionem dedit, et meus Tuzik huic ID ligatus est, qui re vera numerus serialis erat. Ita dominus ace dominus ID numerus 2 habebat, et in aliquo puncto temporis Ivan sub hoc ID erat, et tunc Olya sub eodem ID factus est. Solvitur fere quaestio de agricultura et humanitate et pecuaria.
Tabularii descriptor
Problema tabellae et progressio, quae cum hoc fasciculo operatur, eadem fere est ac canis et hominis nostri. Pone limam, quam ivan.txt aperui, et verbum tuzik in eam scribere coepi, sed solum primam litteram "t" in tabella scribere curavi, et hic fasciculus ab aliquo nominatus est, exempli gratia, ad olya.txt. Sed tabella eadem manet, et in ea ace- tionem meam commemorare volo. Quoties lima ratio vocationis aperitur
In Linux, bibliotheca libc 3 descriptorum tabellas ad singulas applicationes currentes (processus), numeratos 0,1,2 aperit. Plura inveniri possunt in nexus
- Tabella descriptor 0 vocatur STDIN et coniungitur cum applicatione initus
- Tabularii descriptor 1 vocatur STDOUT et adhibetur applicationibus ad output data, ut mandata print
- Tabularii descriptor 2 STDERR appellatur et adhibitis applicationibus ad nuntios erroris output adhibetur.
Si in programmate tuo limam aliquam legendi vel scribendi aperies, maxime probabile primum ID liberum habebis et numerus III.
Index descriptorum documenti ad quemlibet processum spectari potest, si eius PID scis.
Exempli causa, vercundus console aperiamus et processus nostri PID aspiciamus
[user@localhost ]$ echo $$
15771
In secundo console curramus
[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
Fasciculi descriptori numero 255 ad fines huius articuli tuto ignorare potes, eius necessitatibus per se, non a bibliotheca coniunctum apertum est.
Nunc omnes III descriptor lima associatur pseudo termino machinam
[user@localhost ]$ echo "hello world" > /proc/15771/fd/0
Et in primo consolatorio videbimus
[user@localhost ]$ hello world
Redirect and Pipe
Facile has 3 descriptores fasciculos in quolibet processu superari potes, incluso in vercundus, exempli gratia per fistulam duobus processibus connectentibus, vide.
[user@localhost ]$ cat /dev/zero | sleep 10000
Hoc mandatum te ipsum currere potes strace -f * et vide quid intus agatur, sed breviter dicam.
Nostra parens processus bash cum PID 15771 parses mandatum nostrum et exacte intelligit quot praecepta quae volumus currere, in casu nostro duo sunt eorum: cattus et somnus. Bash scit quod duos infantes processus creare debet, eosque in unam fistulam confundere. In summa, bash opus erit 2 processibus puer et una fistula.
Bash decurrit ratio vocationis ante partum puer processibus
Processus enim parentis, iam similis tibia est, sed non sunt pueri adhuc processus;
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
Tum per systema vocationis
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
Noli oblivisci quod clones processus cum omnibus descriptoribus fasciculi, ita iidem erunt in processu parentis et in infantibus. Officium processus parentis cum PID 15771 est processus prolis monitorem, ergo simpliciter responsum a filiis expectat.
Ergo fistula non eget, et fasciculus descriptorum numero III et IV claudit.
In puero primo processu vercundus cum PID 9004, ratio vocationis
In secundo processu infantis cum PID 9005, bash dup2 utitur ut tabellam descriptorem STDIN numerum mutet 0. Nunc omnia, quae secundus noster vercundus cum PID 9005 leget, e fistula leget.
Post hoc, fasciculi descriptores 3 et 4 numerati etiam in processibus infantum clauduntur, cum iam non sint usus.
Consulto praetermittendum documentum descriptorem 255, ad usus internos ab ipso vere et etiam in processibus infantum claudendis.
Deinde, in processu primo infantis cum PID 9004, bash incipit vocationis systematis utens
In secundo processu infantis cum PID 9005, vercundus currit alterum exsecutabile quod designavimus, in casu nostro /usr/bin/somnium.
Systema exec vocatio non comminus ansas fasciculi nisi cum vexillum O_CLOEXEC apertae sunt tempore vocatio aperta facta. In nostro casu, deductis documentis exsecutabilibus, omnes descriptores tabellae currentes salvabuntur.
Reprehendo in 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
Ut vides, in utroque processu idem est unicus numerus fistulae nostrae. Sic connexionem habemus inter duos processus diversos cum eodem parente.
Illis qui non sunt nota cum ratio vocat quod verecundus usus, tractet currit mandata per strate et videns ea quae interius fiunt, exempli gratia sic:
strace -s 1024 -f bash -c "ls | grep hello"
Redeamus ad problema orbis tractus humilibus et quaerit notitias servare sine processu restarting. Parva programmata scribamus quae circiter 1 megabyte per alterum ad orbem scribet. Praeterea, si notitias orbis scribere non potuimus, hoc simpliciter dissimulabimus et iterum secundo notitias scribere temptabimus. In exemplo, quo Pythone utor, alia programmandi lingua uti potes.
[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
Progressio curramus et inspiciamus tabellam descriptores
[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
Ut videre potes, descriptores fasciculi nostri III signatores habemus et unum magis quod aperuimus. Sit scriptor reprehendo lima amplitudo:
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 117M Oct 7 16:30 123.txt
Notitia inscripta est, permissiones in tabella mutare conamur;
[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
Notitiam adhuc scribendam esse videmus, cum user noster tabellam scribendam non habet. Conemur auferre;
[user@localhost ]$ sudo rm 123.txt
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory
Ubi est notitia scripta? et omnino scripta sunt? Reprehendimus:
[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)
Ita, fasciculus noster descriptor adhuc exstat et hunc fasciculum descriptorem tractare possumus, sicut vetus fasciculus noster, legere, perspicere et imitari possumus.
Intueamur tabella amplitudo:
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 19923457 2621522 /home/user/123.txt
Tabella amplitudo est 19923457. Scrutare tabellam purgare:
[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
Ut videre potes, magnitudo tabella tantum augetur et corpus nostrum non laboravit. Intueamur ratio vocationem documentorum
with open("123.txt", "w") as f:
debemus ponere
with open("123.txt", "a") as f:
Reprehendo cum "w" vexillum
[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
ac "a" vexillum
[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 iam currit processus
Saepe programmatores, cum programmata creandi et experiendi, debuggers (exempli gratia GDB) vel varios gradus colligationis in applicatione adhibent. Linux facultatem praebet scribendi et mutandi rationem iam currentem, exempli gratia, variabilium valores mutare, punctum interrumpere, etc., etc.
Rediens ad quaestionem originalem de spatio orbis non satis scribendo limam, problema simulare conetur.
Faciamus fasciculum partitionis nostrae, quam in orbem separatum conscendemus:
[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 ~]$
Faciamus lima ratio:
[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 ~]$
Conscende tabella ratio:
[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
Facimus directorium cum possessore nostro:
[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs
Aperiamus tabellam scribendo solum in programmate nostro:
with open("/mnt/logs/123.txt", "w") as f:
Launch
[user@localhost ]$ python openforwrite.py
Expectamus brevi tempore
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
Habemus igitur problema in principio huius articuli descriptum. Spatium liberum 0, 100% occupavit.
Meminimus secundum condiciones negotii, notitias maximas referre conamur quae amitti non possunt. Eodemque tempore opus est ut ministerium defigamus sine processu restarting.
Dicamus nos adhuc habere spatium orbis, sed in alia partitione, exempli gratia in /domo.
Experiamur ut "reprogramma in musca" codice nostro.
Intueamur PID processus nostri, qui totum orbis tractus consumpserit:
[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
Coniungere ad processum per gdb
[user@localhost ~]$ gdb -p 10078
...
(gdb)
Intueamur apertum documentorum descriptores:
(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
Informationes de tabella descriptorum numero III spectamus, quae nobis consulit
(gdb) shell cat /proc/10078/fdinfo/3
pos: 8189952
flags: 0100001
mnt_id: 482
Animo habito quid systema Python vocet (vide supra ubi percurrimus et apertum invenimus vocationem), cum codicem nostrum expediendo ad limam aperiendam, eadem nos facimus pro processu nostro, sed O_WRONLY|O_CREAT| O_TRUNC frena cum valore numerorum repone. Hoc facere, fontes nucleos aperi, e.g
#definire O_WRONLY I
#define O_CREAT 00000100
#define O_TRUNC 00001000
Omnes valores in unum coniungimus, "00001101"
Currimus vocationis nostrae a gdb
(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4
Ita novum fasciculum descriptor cum numero 4 et novam tabulam apertam in alia partitione cepimus, coarguimus:
(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
Exemplum meminimus cum tibia - quam vercundus mutationes tabellarum descriptores, et iam rationem dup2 vocationis didicimus.
Conamur reponere file descriptor ad alterum
(gdb) call dup2(4,3)
$2 = 3
reprehendo:
(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
Descriptor tabellam claudimus 4, quia ea non egemus:
(gdb) call close (4)
$1 = 0
Et exitus 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
Reprehendo novus lima:
[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
Ut videre potes, notitia tabella novo scripta est, veterem reprehendo;
[user@localhost ~]$ ls -lah /mnt/logs/123.txt
-rw-rw-r-- 1 user user 7.9M Oct 8 11:08 /mnt/logs/123.txt
Nulla notitia amittitur, applicatio opera, tigna ad novum locum scripta sunt.
Sit scriptor parum negotium inpediunt
Putamus notitias magnas nobis esse, sed in quibusvis partitionibus spatium orbis non habemus et orbis coniungere non possumus.
Quod facere possumus, notitia nostra alicubi est redirectio, exempli gratia ad tibiam, et vicissim notitia redirecta a fistula ad retem per programmata quaedam, exempli gratia netcat.
Nominatam tibiam cum imperio mkfifo creare possumus. Pseudo fasciculum creabit in systematis tabellae etiamsi spatium liberum in ea non est.
Applicationem sileo et vide:
[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
Non est orbis tractus, sed feliciter nominatam fistulam ibi creamus;
[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
Nunc necesse est aliquo modo involvere omnes notas quae in hanc fistulam alii servo per retiaculum intrant, eadem reticula huic apta sunt.
In calculonis servi remotis-server.example.com deducimus
[user@localhost ~]$ nc -l 7777 > 123.txt
De servo problematico nostro in terminali separato deducimus
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
Nunc omnia notitia quae in fistula desinens statim ad stdin in netcat ibit, quae eam ad retiaculum in portum 7777 mittet.
Omnia facienda sunt, notitias nostras in hanc fistulam nominatam scribere incipimus.
Iam habemus applicationes cursus:
[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
Ex omnibus flagellis O_WRONLY tantum opus est quia tabella iam exstat et eam purgare non oportet.
[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
Reperiens remota servo remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M Oct 8 14:21 123.txt
Data venit, problema reprimimus 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
Notitia servata est, quaestio solvitur.
Hanc occasionem sumo a Degiro collegas meos salve dicere.
Audi radio-T podcasts.
Omnia bona est.
Ut congue sem, admoneo te cogitare quid erit in processu tabellariorum descriptores cat et dormies si hoc mandatum curris:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
Source: www.habr.com