15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
28.10.2024
1 +1

Як використовувати команду `xargs` в Linux: Повний посібник

Команда xargs є однією з найпотужніших і найуніверсальніших утиліт, доступних у системах Unix/Linux. Вона будує та виконує команди, зчитуючи аргументи зі стандартного введення, ефективно усуваючи розрив між командами, що генерують виведення, і командами, що приймають аргументи. Незалежно від того, чи керуєте ви тисячами файлів, автоматизуєте повторювані завдання оболонки або будуєте складні конвеєри команд, опанування xargs значно підвищить вашу ефективність роботи в терміналі.

У цьому вичерпному посібнику ми розглянемо, як xargs працює зсередини, пройдемося практичними реальними прикладами, пояснимо всі основні параметри та покажемо, як уникнути поширених помилок.

Що таке команда xargs і як вона працює?

По суті, xargs зчитує елементи зі стандартного введення (stdin) — як правило, розділені пробілами або символами нового рядка — і передає їх як аргументи до вказаної команди. Це критично важливо, оскільки багато команд Unix не приймають конвеєрне введення безпосередньо як аргументи; вони очікують аргументи в командному рядку. xargs вирішує цю проблему елегантно.

Основний синтаксис:

command | xargs [options] another_command

Наприклад, щоб знайти всі файли .txt у поточному каталозі та видалити їх:

find . -name "*.txt" | xargs rm

Тут find генерує список імен файлів .txt і записує їх у stdout. xargs зчитує цей список і передає імена файлів як аргументи до rm, який потім видаляє їх — усе в одній ефективній операції.

> Чому б просто не використовувати rm $(find . -name "*.txt")? Підстановка команд може давати збої або поводитися несподівано, коли список аргументів надзвичайно довгий або коли імена файлів містять спеціальні символи. xargs обробляє обидва сценарії безпечніше та ефективніше.

Базове використання xargs

Перш ніж переходити до розширених прикладів, давайте сформуємо чітке розуміння базового шаблону виклику.

Передача простого списку аргументів

echo "file1.txt file2.txt file3.txt" | xargs touch

Ця команда створює три файли — file1.txt, file2.txt і file3.txt — передаючи всі три імені як аргументи до touch. Без xargs вам довелося б або вводити кожне ім’я файлу вручну, або писати цикл.

Перевірка того, що виконає xargs

Перш ніж запускати потенційно деструктивну команду, використовуйте прапорець -t, щоб вивести сформовану команду в stderr перед її виконанням:

echo "file1.txt file2.txt" | xargs -t rm

Виведення:

rm file1.txt file2.txt

Це безцінно для налагодження конвеєрів перед тим, як приступати до виконання.

Практичні приклади використання xargs

1. Видалення файлів, знайдених за допомогою find

Одним із найпоширеніших і найпотужніших застосувань xargs є його поєднання з find для видалення файлів, що відповідають певним критеріям:

find /var/log -name "*.log" -mtime +30 | xargs rm

Це знаходить усі файли .log у /var/log, старші за 30 днів, і видаляє їх. Такий автоматизований очищення є необхідним для обслуговування сервера — з чим адміністратори, що керують VPS Хостингом або Виділеними Серверами, стикаються регулярно, щоб контролювати використання дискового простору.

2. Обмеження кількості аргументів на одне виконання за допомогою -n

За замовчуванням xargs передає якомога більше аргументів команді за один виклик. Параметр -n дозволяє точно контролювати, скільки аргументів передається за одне виконання:

echo "one two three four five six" | xargs -n 2 echo

Виведення:

one two
three four
five six

Це особливо корисно, коли команда має обмеження на кількість аргументів, які вона може прийняти, або коли ви хочете обробляти елементи контрольованими пакетами.

3. Обробка імен файлів із пробілами та спеціальними символами за допомогою -0

Це одна з найважливіших практик безпеки при використанні xargs. Імена файлів, що містять пробіли, символи нового рядка або інші спеціальні символи, порушать роботу наївних конвеєрів. Рішення полягає у використанні find з -print0 (який розділяє імена файлів нульовими байтами замість символів нового рядка) і xargs з -0:

find . -name "*.txt" -print0 | xargs -0 rm

Нульовий байт (

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати