π§ Linux Junior. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Linux.
ΠΡΠΊΡΡΡΡ Π² Telegram
ΠΠ°Π½Π°Π» Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ Linux. ΠΠΎΡΡΠΈ Π²ΡΠ΅ Python Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ Π½Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΠΆΠ΅ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡΡ. ΠΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠ΅: @jannytg @anothertechrock
ΠΠΎΠ»ΡΡΠ΅3 095
ΠΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ
-224 ΡΠ°ΡΠ°
-37 Π΄Π½Π΅ΠΉ
-1130 Π΄Π΅Π½Ρ
ΠΡΡ
ΠΈΠ² ΠΏΠΎΡΡΠΎΠ²
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ»ΠΎΠΊ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ?
ΠΡΠΈΠ½Π°ΡΠΎΠΌ β ΠΠ’-ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΎΡ Π ΠΎΡΠ°ΡΠΎΠΌΠ° β ΠΈΡΠ΅Ρ ΡΠΊΡΠΏΠ΅ΡΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Linux Π² Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π΅!
π¨βπ»ΠΠ°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΠ‘ Linux ΠΈ Windows, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ
ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ Π·Π°Π΄Π°Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
π€ΠΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Π² Π°ΠΊΠΊΡΠ΅Π΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΠ’-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Β«Π±Π΅Π»ΡΡ Π·Π°ΡΠΏΠ»Π°ΡΡΒ» 2 ΡΠ°Π·Π° Π² ΠΌΠ΅ΡΡΡ, ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π’Π ΠΈ ΠΠΠ‘ (ΡΠΎ ΡΡΠΎΠΌΠ°ΡΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ) Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΄Π½Ρ. ΠΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² ΠΆΠ΄ΡΠΌ Π½Π°Π²ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΈ ΠΎΠΏΡΡ Π² ΠΈΠΌΠΏΠΎΡΡΠΎΠ·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠΈ ΠΎΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
π» Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ 2>&1?
ΠΡΠΎ ΠΏΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ:
stdout β 1 (ΠΎΠ±ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°)
stderr β 2 (ΠΏΠΎΡΠΎΠΊ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ)
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ (2>&1) = stderr > stdout β Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠΈΠ±ΠΊΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅.
π€ ΠΠΎΠ³ΠΈΡΠ½ΡΠΌ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ 2>1. ΠΠΎ ΡΠ²Ρ, ΡΡΠ° ΡΡ
Π΅ΠΌΠ° ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΡΡΠ³ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΠΎΡΠΎΠΊ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ stderr Π±ΡΠ΄Π΅Ρ ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ», Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ 1.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»
& (Π°ΠΌΠΏΠ΅ΡΡΠ°Π½Π΄) ΠΏΠ΅ΡΠ΅Π΄ stdout. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π° Π½Π΅ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ».
π€ Π ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΎΠ³Π΄Π° Π½Π΅ &2>&1 ?
Π‘ΠΈΠΌΠ²ΠΎΠ» & ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ command &2>&1 Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. command & 2>&1 β ΠΊΠΎΠΌΠ°Π½Π΄Π° command Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. Π Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠ½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° 2 Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ stdout.
ΠΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ |&.
|& ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΎΡ 2>&1 |
ΠΡΠΈΠΌΠ΅Ρ:
script.sh |& tee -a /var/log/script.log
ΠΡΠ΅ ΡΡΠΎ script.sh Π²ΡΠ²Π΅Π΄Π΅Ρ Π² ΠΏΠΎΡΠΎΠΊΠΈ stdout ΠΈ stderr, Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π² ΡΠ°ΠΉΠ» script.log.
Π ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΡ ΡΡΡΠΊΡ.ΠΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π²:
ΠΠ°ΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² (Π½Π° ΠΏΡΠΈΠ½ΡΠ΅ΡΠ΅)?
ΠΠ°ΠΊΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²?
ΠΡΠ°Π²Π° Π½Π° ΡΠ°ΠΉΠ» -rwxr--r-- ΠΈΠ½Π°ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ:
ΠΠΎΠΌΠ°Π½Π΄Π° find / -name '*'
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ /dev/null ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠ΄Π° Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅?
ΠΡΠ»ΠΈ Π²Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ°ΠΉΠ» /dev/null Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ΅Π»Π΅ΠΉ:
1οΈβ£ Π£Π±ΡΠ°ΡΡ ΠΈΠ· Π²ΡΠ²ΠΎΠ΄Π° Π²ΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΡ ΠΈΠ½ΡΡ (ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ, ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ Ρ.Π΄.):
$ find / -name "*.conf" 2>/dev/null
2οΈβ£ ΠΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΠ΅ ΠΏΡΡΡΠΎΠΉ ΡΠ΅ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ΅Π»Π°ΡΡΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ΅Π»ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ² ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
$ picom --config /dev/null
3οΈβ£ ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΈΡΡΠΈΡΡ ΡΠ°ΠΉΠ»:
$ cat /dev/null > bigfile
β ΠΠΊΠ΅ΠΉ, ΠΏΡΠΈΠ½ΡΡΠΎ, Π° ΡΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΎΡ ΡΠ°ΠΌΡΠΉ /dev/null?
Π ΡΡΡΠ½ΠΎΡΡΠΈ - ΡΡΠΎ cΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
:
$ ls -l crw-rw-rw- 1 root root 1, 3 Sep 6 08:37 nullΠ ΡΠΈΠΏΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π±ΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°ΠΉΠ»Π° -
c "character".
Π Π΅ΡΡΡΡ ΡΠ΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² Π½Π΅Π³ΠΎ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ EOF (End of File). ΠΠΎΠ³Π΄Π° ΠΌΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅ΠΌ Ρ /dev/null, Π½Π΅ΡΠ²Π½ΠΎ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΡΠ΄ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ Π·Π°ΡΠΈΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°.
ΠΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΡΡΡ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ
Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ: drivers/char/mem.c. ΠΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ /dev/null, Π½ΠΎ ΠΈ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ.
Π Π°Π·Π²Π΅ΡΠ½Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
$ stat /dev/null
File: /dev/null
Size: 0 Blocks: 0 IO Block: 4096 character special file
Access: (0666/crw-rw-rw-) Uid: (0/ root) Gid: (0/ root)
Access: 2025-01-25 14:42:20.101000002 +0300
...
ΠΡΠΎΡ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 0 Π±Π°ΠΉΡ, Π΄Π»Ρ Π½Π΅Π³ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ 0 Π±Π»ΠΎΠΊΠΎΠ² Π½Π° Π΄ΠΈΡΠΊΠ΅, Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ = Π΄Π°ΡΠ° Π·Π°ΠΏΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ:
$ who -b
system boot 2025-01-25 14:42
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π½Π΅Π³ΠΎ, Π½ΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ:
$ echo hello | /dev/null
-bash2: /dev/null: Permission denied
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΉΠ» Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ |. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² >, >>.ΠΡΠ»ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π΅ΡΡΡ ΡΠ°ΠΉΠ»Ρ fileA, fileB, fileAB, fileBC ΠΈ fileABC, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ
ΠΏΠΎΠ΄ΠΏΠ°Π΄ΡΡ ΠΏΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½ file[ABC]?
π©βπ» ΠΠΎΠΌΠ°Π½Π΄Π° rsync
rsync - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π±ΡΡΡΡΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ².
βοΈ ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π±ΡΠΊΠ°ΠΏ:
rsync -av /source/directory/ /destination/directory/
βοΈ ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π±ΡΠΊΠ°ΠΏ ΡΠ΅ΡΠ΅Π· ssh:
rsync -av -e ssh /source/directory/ user@remote_host:/destination/directory/
Rsync ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π·Π΅ΡΠΊΠ°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄ scp, sftp ΠΈ cp.
βοΈ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
sudo apt install rsync
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΎΠΏΡΠΈΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅, Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ man.ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ Π²Ρ
ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ...
π± ΠΠ°ΠΊ Π²Π΅ΡΠ½ΡΡΡ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ/ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΠ»ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ bash-ΡΠΊΡΠΈΠΏΡ.
Π§ΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π²ΡΠ΅Π³Π΄Π° Ρ
ΡΠ°Π½ΠΈΡΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ Π² git β ΡΡΠΎ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎ, Π½ΠΎ Π±Π΅ΠΊΠ°ΠΏΡ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΎΡΠΌΠ΅Π½ΡΠ».
Π‘ΠΊΡΠΈΠΏΡ ΡΠ΄Π°Π»ΡΠ½ Ρ Π΄ΠΈΡΠΊΠ°, Π½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠΎΠ½Π΅, Π·Π½Π°ΡΠΈΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡΠ΄Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠΏΡΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ.
touch /tmp/script.sh:
#!/bin/bash
sleep 1000
exit
ΠΠ΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ chmod +x /tmp/script.sh ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² ΡΠΎΠ½Π΅ /tmp/script.sh &.
Π‘ΠΈΠΌΠ²ΠΎΠ» & ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ command & command, Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ.
Π‘ΠΊΡΠΈΠΏΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ, ΠΎΠ½ ΠΊΡΡΡΠΈΡΡΡ Π² ΡΠΎΠ½Π΅. Π£Π΄Π°Π»ΠΈΠΌ ΡΠ°ΠΌ ΡΠ°ΠΉΠ»:
rm -f /tmp/script.sh
ΠΠ»ΡΡ -f ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ΄Π°Π»ΠΈΡΡ Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ
Π²ΠΎΠΏΡΠΎΡΠΎΠ².
ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ:
lsof -c 'script.sh'
ΠΠ° ΡΠΊΡΠ°Π½ Π²ΡΠ²Π΅Π΄Π΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ½Ρ. ΠΠ°ΠΌ Π½ΡΠΆΠ½Π° ΡΡΡΠΎΠΊΠ°, Π³Π΄Π΅ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠΊΠ°Π·Π°Π½ ΠΏΡΡΡ ΠΊ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠΊΡΠΈΠΏΡΡ:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.shΠΠ΅ΡΠ΅ΠΌ PID = 261899, Π±Π΅ΡΠ΅ΠΌ FD = 255 ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ:
cat /proc/261899/fd/255
Π Π²ΠΎΡ ΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊ ΡΠΊΡΠΈΠΏΡΠ°:
File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit
ΠΠΎΡ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΈΠ½ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π² Π³Π°ΠΉΠ΄Π΅:
man 5 proc # /proc/[pid]/fd/
man lsof