🐧 Linux Junior. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Linux.
3.21K subscribers
168 photos
2 videos
1 file
101 links
Канал для программистов Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Linux.
ΠŸΠΎΡ‡Ρ‚ΠΈ всС Python Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ€Ρ‹ с Π½Π°ΠΌΠΈ Π½Ρƒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΎΠΆΠ΅ подтянутся.

По Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @jannytg
@anothertechrock
Download Telegram
❓ Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ скрипта?

ΠžΡ‚Π²Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· час.

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
ΠŸΡ€ΠΈ запускС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ скрипта Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ time:

$ time ls -a

ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ основной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ time ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, сколько рСсурсов пошло Π½Π° это.
πŸ‘9πŸ’―1
ΠšΠ°ΠΊΡƒΡŽ ΠΎΠΏΡ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ rmdir a/b/c, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ a, b, c?
Anonymous Quiz
7%
-b
7%
-o
41%
-p
11%
-t
34%
ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚
πŸ‘4🀑1
πŸ‘©β€πŸ’» Команда grep

grep - это ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Linux, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска тСкста Π² Ρ„Π°ΠΉΠ»Π°Ρ…. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π²Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ строку Π² ΠΊΠΎΠ΄Π΅, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² Π»ΠΎΠ³Π°Ρ… ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, grep Π΄Π΅Π»Π°Π΅Ρ‚ это быстро ΠΈ эффСктивно.

βœ… НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования:

1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ поиск:

grep "word" Ρ„Π°ΠΉΠ».txt


2. Поиск с подсвСткой:

grep --color=auto "pattern" file.txt


3. РСкурсивный поиск:

grep -r "pattern" /ΠΏΡƒΡ‚ΡŒ/ΠΊ/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ


4. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²:

grep "pattern" --exclude="*.log" /ΠΏΡƒΡ‚ΡŒ/ΠΊ/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ


5. Поиск с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ строк:

grep -n "pattern" file.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘7
PID процСсса Π² Linux

Π’ ОБ Linux ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Process ID ΠΈΠ»ΠΈ PID. ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса Π΅ΠΌΡƒ автоматичСски присваиваСтся PID.

▢️ЗначСния PID

Π’ зависимости ΠΎΡ‚ значСния PID, сигнал Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ процСссов.

Как ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PID влияСт Π½Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сигнала:

Β«PID > 0Β» - Π‘ΠΈΠ³Π½Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ процСссу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ.

Β«PID = 0Β» - ВсС процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ входят Π² ΠΎΠ΄Π½Ρƒ Π³Ρ€ΡƒΠΏΠΏΡƒ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ сигнал.

Β«PID = βˆ’1Β» - Π’ этом случаС сигнал Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ процСссам (Ссли ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ root, Ρ‚ΠΎ сигнал Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ всСм процСссам, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ init ΠΈ самого kill). Для этой Ρ†Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (UID).

Β«PID < βˆ’1Β» - Π‘ΠΈΠ³Π½Π°Π» пСрСдаСтся процСссам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ входят Π² Π³Ρ€ΡƒΠΏΠΏΡƒ с GID (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹), ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PID (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса) ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

β–ΆοΈΠŸΠΎΠΈΡΠΊ PID

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ процСсс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€.

ps - ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… процСссов с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ….
grep - Π·Π°Π΄Π°Ρ‡Π° выполняСтся вмСстС с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ps, которая занимаСтся поиском ΠΏΠΎ списку, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΡ‚ ps.

Π˜Π·Π²Π»Π΅Ρ‡ΡŒ всС процСссы:

ps axu


Если список процСссов достаточно Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ, Ρ‚ΠΎ Π½Π°ΠΉΡ‚ΠΈ PID ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСсса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ этом случаС стоит Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

ps axu | grep bash


Если ΠΏΡ€ΠΎΡ†Π΅ΡΡ сущСствуСт, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

root 447 0.0 0.4 7932 4708 tty1 S 11:26 0:00 -bash
root 477 0.0 0.0 6268 640 tty1 S+ 11:27 0:00 grep bash


Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½Π° пСрвая строчка. Число послС username ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ PID.

Π”ΠΎΠΏ.Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ поиска:

▫️ pgrep - просматриваСт Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ процСссы ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ PID Ρ‚Π΅Ρ…, Ρ‡ΡŒΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ запросу.

pgrep firefox


▫️ pidof - ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

pidof gcalctool
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯4
This media is not supported in your browser
VIEW IN TELEGRAM
πŸ”₯ ΠŸΠΎΠ½ΡΡ‚Π½Π°Ρ, интСрактивная ΠΈ доходчивая ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ…
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯7
πŸ‘©β€πŸ’» Команда sync

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sync синхронизируСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· кэша Π² ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΅Π΅ примСнСния.

1️⃣ Бинхронизация кэша ΡŽΠ·Π΅Ρ€Π°

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° синхронизируСт Π΄Π°Π½Π½Ρ‹Π΅ кэша с ТСстким диском:

$ sync


2️⃣ Бинхронизация ΡŽΠ·Π΅Ρ€ΡΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Когда Π²Ρ‹ Π΄Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ sudo ΠΊΠΎΠΌΠ°Π½Π΄Π΅ sync, ΠΎΠ½Π° синхронизируСт всС смонтированныС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π½Π° ТСстком дискС:

$ sudo sync


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΡŽΠ·Π΅Ρ€Π°:

$ df


МоТно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, сколько Π΄Π°Π½Π½Ρ‹Ρ… смонтированы Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ "/", Π² Ρ€Π°Π·Π΄Π΅Π» - "/dev/sda3".

3️⃣ Бинхронизация Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°

Команда sync прСдоставляСт ΠΎΠΏΡ†ΠΈΠΈ -d ΠΈΠ»ΠΈ -data для синхронизации/копирования Π΄Π°Π½Π½Ρ‹Ρ… кэша Ρ„Π°ΠΉΠ»Π° Π½Π° ТСсткий диск:

$ sync -d /home/testfile1.txt


4️⃣ Бинхронизация Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Для синхронизации Π΄Π°Π½Π½Ρ‹Ρ… кэша Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ sync -d /home/testfile1.txt ~/Desktop/Samplevideo.mp4


5️⃣ Бинхронизация Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы

ΠžΠΏΡ†ΠΈΠΈ -f ΠΈΠ»ΠΈ -file-system ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡŽΠ·Π΅Ρ€Ρƒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ вмСстС с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ систСмами:

$ sync -f /home/Downloads/testfile2.txt


6️⃣ Бинхронизация Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм

Команда sync ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ/ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ sync -f /home/file1.txt ~/Desktop/Samplevideo.mp4


7️⃣ Бинхронизация Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° систСмы:

$ sudo sync /dev/sda3


8️⃣ Бинхронизация ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²

Для синхронизации ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ "/var/log/syslog" ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ sudo sync /var/log/syslog
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘2
Автоматизация Π·Π°Π΄Π°Ρ‡ с xargs

МногиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Linux Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ xargs, хотя это ΠΌΠΎΡ‰Π½Ρ‹ΠΈΜ† инструмСнт для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ ΠΈ запуска ΠΊΠΎΠΌΠ°Π½Π΄ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· стандартного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π° (STDIN). Они ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΡƒΠ΄Π° ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π»ΠΈΠ±ΠΎ ΠΎΡ‚ сторонних ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ |.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с трСмя Ρ„Π°ΠΈΜ†Π»Π°ΠΌΠΈ:

$ ls -1
file1.txt
file2.txt
file3.txt


ΠŸΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ список Π² xargs, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ слуТил Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΈ wc -l Π² качСствС шаблона ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ ls -1 | xargs wc -l
3 file1.txt
4 file2.txt
1 file3.txt
8 total


Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ xargs ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» шаблон ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ wc -l ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ для подсчСта строк.

НСдостаток ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ xargs Ρ‚ΡƒΡ‚ Π½Π΅ трСбуСтся, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ сопоставлСниСм Ρ„Π°ΠΈΜ†Π»ΠΎΠ² с шаблоном:

$ wc -l *
3 file1.txt
4 file2.txt
...


Π—Π°Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ xargs?

Π•Π΅ ΠΌΠΎΡ‰ΡŒ становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΈΜ†, ΠΊΠΎΠ³Π΄Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ строки Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство строк Π²ΠΎ всСх python скриптах с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π½Π° ".py".

Π’Π°ΠΊΠΎΠΈΜ† список ΠΏΡƒΡ‚Π΅ΠΈΜ† ΠΊ Ρ„Π°ΠΈΜ†Π»Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ find:

$ find . -type f -name \*.py -print

/usr/lib/bup/bup/options.py
/usr/lib/bup/bup/xstat.py
...


Π’Π΅ΠΏΠ΅Ρ€ΡŒ xargs ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ шаблон ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ„Π°ΠΈΜ†Π»Ρƒ:

$ find / -type f -name \*.py -print | xargs wc -l

292 /usr/lib/bup/bup/options.py
112 /usr/lib/bup/bup/xstat.py
...


ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ find ΠΈ xargs, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»ΡŽΠ±ΠΎΠΈΜ† ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠΌ всСй Ρ„Π°ΠΈΜ†Π»ΠΎΠ²ΠΎΠΈΜ† систСмы, затрагивая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ критСриям.

ΠžΠΏΡ†ΠΈΠΈ xargs

Команда xargs ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство ΠΎΠΏΡ†ΠΈΠΈΜ†. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсныС: -n, -I ΠΈ -0.

1️⃣ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "-n" ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π½Π° 1 Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ ls | xargs echo
file1.txt file2.txt

$ ls | xargs -n1 echo
file1.txt
file2.txt


Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС ΠΊΠΎΠΌΠ°Π½Π΄Π° echo выполнится 2 Ρ€Π°Π·Π°: ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

2️⃣ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -I опрСдСляСт мСсто Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… строк Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Π΅Ρ†, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

ПослС -I Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ строку, ΠΈ ΠΎΠ½Π° станСт ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ, ΠΊΡƒΠ΄Π° слСдуСт Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

$ ls | xargs -I XYZ echo XYZ is OK
file1.txt is OK
file2.txt is OK


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ -I ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ xargs ΠΎΠ΄Π½ΠΎΠΈΜ† Π²Ρ…ΠΎΠ΄Π½ΠΎΠΈΜ† строкой Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ пСрСдаСтся "сплошняком", Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подстановка ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, ΠΈΠ½Π°Ρ‡Π΅ вСсь ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

3️⃣ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ символ "\0" Π² качСствС раздСлитСля Π΄Π°Π½Π½Ρ‹Ρ… вмСсто "\n" ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°. Он часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ объСдинСнии find ΠΈ xargs, Ρ‚.ΠΊ., ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ xargs ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ строки Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ.

А Ссли ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π² строках содСрТат Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΈΜ†Π»ΠΎΠ²?

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹Π΅ строки ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

НапримСр, Ссли Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ "file num 1.txt", xargs ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всС ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ, вСроятно, Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ:


$ find ./ -type f -name \*.txt -print | xargs wc -l

wc: ./file: No such file or directory
wc: num: No such file or directory
wc: 1.txt: No such file or directory


Как Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ строки нулями вмСсто символов Π½ΠΎΠ²ΠΎΠΈΜ† строки? К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ find Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° -print0:

$ find ./ -name \*.txt -print0

./file1.txt./file num 1.txt


Π’Π΅ΠΏΠ΅Ρ€ΡŒ xargs Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ "\0" ΠΈ ΠΏΠΎ Π½Π΅ΠΌΡƒ сформируСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для wc -l:

$ find ./ -name \*.txt -print0 | xargs -0 wc -l

0 ./file1.txt
0 ./file num 1.txt
0 total
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘7