Кто-то мог объяснить, что грязь и как точно grep работает в этом случае?
file $(grep –irl crud /usr/src/linux-2.4)
$(command)
называется «подстановка команд» . Это способ возврата результата команды, по сути, создание переменной, значением которой является вывод этой команды. Например:
$ echo foo
foo
$ var=$(echo foo) ## set the output of 'echo foo' to the variable $var
$ echo "$var"
foo
Теперь, в этом случае, выполняемая команда - grep -irl crud /usr/src/linux-2.4
. Чтобы понять, что это значит, запустите man grep
и посмотрите, что делает каждый из этих трех (i
, r
и l
) вариантов:
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input
files.
-r, --recursive
Read all files under each directory, recursively, following
symbolic links only if they are on the command line. Note that
if no file operand is given, grep searches the working
directory. This is equivalent to the -d recurse option.
-l, --files-with-matches
Suppress normal output; instead print the name of each input
file from which output would normally have been printed. The
scanning will stop on the first match.
Все вместе, что означает «рекурсивный» просмотрите все файлы из /usr/src/linux-2.4
и найдите в каждом из них слово crud
без учета регистра, а затем напечатайте имена любых подходящих файлов ".
Таким образом, эта команда напечатает список имен файлов, содержащих слово crud
. Поскольку мы запускаем file $(grep . . . )
, это означает, что команда file
(которая печатает тип файла и некоторую информацию о рассматриваемом файле) будет выполняться для каждого из файлов, возвращаемых grep
.
Собрав все это вместе, эта команда выведет информацию о базовом файле для всех файлов в /usr/src/linux-2.4
, содержащую строку crud
. На моей машине 14.04 это возвращает:
$ file $(grep -irl crud /usr/src/)
/usr/src/linux-headers-3.16.0-77/include/linux/pktcdvd.h: C source, ASCII text
/usr/src/linux-headers-3.16.0-77/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
/usr/src/linux-headers-3.13.0-108/include/linux/pktcdvd.h: C source, ASCII text
/usr/src/linux-headers-3.13.0-108/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
/usr/src/linux-headers-3.13.0-46/include/linux/pktcdvd.h: C source, ASCII text
/usr/src/linux-headers-3.13.0-46/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
/usr/src/linux-headers-3.16.0-30/include/linux/pktcdvd.h: C source, ASCII text
/usr/src/linux-headers-3.16.0-30/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
file
согласно справке, определяет Тип обработанного файла. Команда $(grep -irl crud /usr/src/linux-2.4)
:
$(<command>)
Получения значение внутренней команды. grep -irl crud /usr/src/linux-2.4
, внутренняя команда, которая ищет строковую грязь, с игнорируют регистр, рекурсивно и печатают только названия файлов, содержащих соответствия. Так, Ваша полная команда, ищет тип файлов, которые соответствуют строковой грязи в каталоге /usr/src/linux-2.4