Связанный вопрос (из автоматической боковой панели):Как предотвратить изменения /sda /sdb между загрузками?
Это гарантирует их назначение в том порядке, в котором они "прощупываются" (или "привязываются" )ядром.
Грег К.Х. выступает за то, чтобы не полагаться на этот приказ. Он любит приводить пример (реального! )Ужасно спроектированная материнская плата, которая повторно -устанавливает порядок PCI между последующими загрузками. Похоже, приведенный выше вопрос касается одного из таких примеров.
Загружаемые модули загружаются пользовательским пространством. udev
распараллеливается с использованием нескольких процессов и не гарантирует загрузку модулей в каком-либо конкретном порядке. Подобная распараллеливание инициализации может иметь реальные преимущества в производительности, поскольку функции инициализации модулей могут выполняться параллельно, и эти функции могут включать длительные задержки в ожидании оборудования.
В настоящее время можно предположить, что ядро по умолчанию должно проверять встроенные -драйверы синхронно и, следовательно, в детерминированном порядке.
As of v4.2 the Linux kernel now sports asynchronous probe support
(по-видимому, эта функция используется ОС Google Chrome ).
https://www.do-not-panic.com/2015/12/linux-asynchronous-probe.html
https://kernelnewbies.org/Linux_4.2#Core
Основываясь на исторических сообщениях , вы могли бы также предположить, что такие усилия вызывают скептицизм/усталость, не в последнюю очередь со стороны Линуса. Основываясь на вышеизложенном, кажется, что какие бы усиленные проверки и/или яростные кричащие сообщения не стояли на пути объединения этого варианта.
Включение его для всего ядра -— это другой вопрос, поскольку «[некоторые] драйверы плохо работают с асинхронным зондированием из-за ошибки драйвера или неоптимальной организации драйвера». Может Линус не взорвался (? )в сообщении объединенной фиксации, в котором говорится, что «конечная цель — сделать зондирование асинхронным по умолчанию», но это только одно мнение, и оно не говорит нам, насколько хорошо оно продвинулось с версии 4.2.
Вы бы предпочли:
grep -rilZ 'first_string'. | xargs -r0 grep -Hi 'second_string'
предполагается, что у вас есть утилиты GNU (, поскольку вы уже используете -r
расширение GNU ).
То есть:
-Z
и xargs -0
для надежной передачи списка путей (, которые в Unix -подобных системах могут содержать любое значение байта, кроме 0, в то время как xargs
без -0
ожидает очень специфический формат ). -r
для xargs
, чтобы избежать запуска второго grep
если первый не найдет никакого файла (опустив его здесь, это не имеет большого значения, это просто приведет к тому, что второй grep
будет grep пустой стандартный ввод ). -H
для второго grep
, чтобы убедиться, что имя файла всегда печатается (даже если ему передается только один путь к файлу ), чтобы мы знали, где находятся совпадения. Для реализаций grep
, которые не поддерживают -H
, альтернативой является добавление /dev/null
в список файлов для grep
поиска. Тогда grep
при передаче более одного имени файла всегда будет печатать имя файла. find. | perl -ne 'open($fh, $_); $s1=0; $s2=0; while($line = <$fh>) { $s1=1 if($line=~/string 1/); $s2=1 if($line=~/string 2/); } ; print $_ if($s1==1 and $s2 ==1); close $fh;' | sort | uniq
(Это немного долго, чтобы увидеть, но это все в 1 строке)
Редактировать:Некоторые пояснения:
find. |
отправляет список всех файлов в каталоге, который вы хотите найти, через(.
)следующей команде(perl
)perl -ne 'COMMANDS'
перебирает все строки, которые он получает на STDIN (, поэтому все файлы )и запускает COMMANDS
на каждом из них. Имя каждого файла будет каждый раз заканчиваться на$_
open($fh, $_); COMMANDS; close $fh;
открывает файл, привязывает его к дескриптору файла $fh
, запускает COMMANDS
и снова закрывает. $s1=0; $s2=0;
эти переменные снова устанавливаются в 0 каждый раз, когда запускается следующий файл (если мы находим строку в текущем файле, она устанавливается в 1)while($line = <$fh>) { COMMANDS } ;
запускает COMMANDS
для каждой строки в файле. $s1=1 if($line=~/string 1/); $s2=1 if($line=~/string 2/);
если string 1
найден в текущем файле, $s1
станет равным 1, то же самое для$s2
print $_ if($s1==1 and $s2 ==1);
печатает имя файла, если строки найдены. | sort | uniq
сортирует имена файлов и отфильтровывает дубликаты (на самом деле в этом нет необходимости)