ProCloud Yandex
15.01.2024
читать 4 минуты

Команда Xargs в Linux: Эффективные приемы применения

/upload/iblock/6dc/r7ty3pxitfzyvva670oaw63ur0682od5/Sover_opt.jpeg

В мире системного администрирования, где каждая минута имеет значение, наличие инструментов для оптимизации процессов - это золото. Одним из таких универсальных инструментов в мешке сисадминов является команда xargs в операционной системе Linux.

Разбор Потоков данных в Linux

На Linux есть три стандартных потока данных: stdin, stderr и stdout. Stdin принимает текст из пользовательского ввода или файла. Программы отправляют результаты в stdout, а сообщения об ошибках в stderr.

Когда одной программе нужно передать результаты другой, встает вопрос о передаче данных. Для этого Linux предоставляет команду pipe (|), которая перенаправляет стандартный вывод одной команды на вход другой. Это позволяет объединять команды в цепочки для создания конвейера команд. Например:

cat example.com.conf | grep ErrorLog ErrorLog  /var/www/html/example.com/log/error.log

Однако не все команды могут принимать данные от pipe, и вот тут на помощь приходит команда xargs.

Практическое Применение Команды xargs

Команда xargs решает проблему передачи данных от pipe к командам, которые принимают их в виде аргументов. Она принимает входные данные из любого источника, включая файл или другую команду, и преобразует их в строку аргументов. Затем она вызывает целевую команду, предоставляя ей строку в качестве аргументов. Если целевая команда не указана, xargs вызывает echo.

Для использования xargs, используйте символ | для передачи результатов начальной команды в xargs. За ключевым словом xargs следуют необязательные параметры и целевая команда. В следующем примере результаты команды find передаются через xargs в rm:

find /путь -type f -name '*.txt' | xargs rm

Когда xargs получает входные данные от pipe, он преобразует их в список или серию списков, каждый из которых содержит один или более элементов. Количество элементов ограничено системным лимитом и значениями параметров -n или -s. Он вызывает целевую команду один раз для каждого списка и предоставляет этот список в качестве аргумента.

Общие Сценарии Использования xargs

1. Обход Ограничений по Аргументам

Xargs часто используется для обхода ограничений по размеру аргументов в командах. Например, если у ядра есть ограничение на максимальный размер массива аргументов, xargs разделит результаты ls или find на более короткие списки и передаст их второй команде.

2. Параллельное Исполнение Операций

С параметром -P (или maxprocs) xargs может выполнять операции параллельно, запуская множество процессов одновременно, каждый работающий с отдельными данными.

3. Замена Команд через -I

Параметр -I позволяет xargs заменять все вхождения строки замены списком аргументов. Это особенно полезно при замене строки в целевой команде.

4. Вызов Shell-скриптов

Xargs может вызывать shell-скрипты, что добавляет гибкость и сложность в целевую команду.

5. Обработка Имен Файлов с Спецсимволами

С опциями -0 и -print0 xargs может обрабатывать файлы с спецсимволами и символами новой строки.

Опции Командной Строки xargs

Использование различных опций командной строки xargs может радикально изменить ее поведение. Вот несколько распространенных опций:

-0: Используется для использования символа null в качестве разделителя вместо символов новой строки и пробелов. Обычно используется с опцией -print0.

-a: С указанием имени файла читает данные из файла вместо стандартного ввода.

-d: Указывает символ в качестве разделителя строк.

-I: Следует за строкой-заполнителем, используется для замены.

-L: Задает максимальное количество строк в каждом списке.

-n: Указывает максимальное количество аргументов при каждом вызове целевой команды.

-o: Ассоциирует команду xargs с консолью ввода.

-P: Опция maxprocs, позволяет xargs запускать до указанного количества процессов одновременно.

-p: Предупреждает пользователя перед выполнением каждой команды.

-s: Указывает максимальное количество символов для каждой команды.

-t: Печатает каждую выполняемую команду.

Примеры Использования xargs

1. Простое Использование xargs

Простейший способ использования xargs без дополнительных опций. В следующем примере подсчитывается количество слов в каждом файле текущего каталога.

ls | xargs -t wc

2. Использование xargs и Замены Команд

В этом примере xargs вызывает команду cp для каждого файла .txt в каталоге /path. Символ % заменяется именем файла.

find /path -type f -name '*.txt' | xargs -t -I % cp % ~/backups

3. Работа с Файловыми Именами с Спецсимволами

В следующем примере удаляются все директории в каталоге /path, исключая спецсимволы в именах. Опции -print0 и -0 используются для обработки спецсимволов и символов новой строки.

find /path -type d -name '*_*' -print0 | xargs -t -0 rmdir

4. Запуск Нескольких Процессов Параллельно

Опция -P позволяет xargs запускать несколько процессов параллельно. В следующем примере распаковываются четыре архива одновременно.

find /xargstest -name '*.zip' | xargs -t -P 4 -L 1 -I % unzip -u %

5. Вызов xargs для Shell-скрипта

Пример вызова xargs для выполнения сложной команды, представленной shell-скриптом. В этом случае xargs подает результаты как входные данные в скрипт, выполняя его для каждого файла.

ls *.txt* | xargs -t -I % sh -c 'wc %; cp % archive'

6. Ограничение Количества Аргументов и Запуск Пошагово

Опции -n и -L используются для ограничения количества аргументов и выполнения команд пошагово. В следующем примере xargs сравнивает два файла в каждом вызове команды diff.

find /archive -type f -name '*.txt*' -print0 | xargs -0 -t -n 2 diff

Дополнительные Сведения

Вот несколько ресурсов для дополнительной информации по теме:

Пользуйтесь командой xargs с умом, она открывает двери для оптимизации и эффективного управления данными. И помните, экспериментируйте с параметрами, чтобы лучше адаптировать xargs к вашим потребностям.

Новости
27 декабря 202327.12.2023
Продуктовый дайджест 2023
20 декабря 202320.12.2023
читать 2 минутычитать 2 мин
Новые тарифы и возможности