Короткий ответ: :Ntpd заменен на chronyd в качестве демона NTP по умолчанию в RHEL 7. Это другая реализация, которая способна синхронизировать системные часы быстрее и с большей точностью.
Длинный ответ: :Согласно Red Hat Solution 2070363
Chrony should be preferred for all systems except for the systems that are managed or monitored by tools that do not support chrony, or the systems that have a hardware reference clock which cannot be used with chrony.
и документация «Настройка NTP с помощью chrony Suite » обсуждает «Различия между ntpd и chronyd ».
Что-то, что будет работать во всех современных системах Unix, — это использовать find
для поиска файлов, а затем grep
для идентификации файлов, содержащих строкуfoo
:
find. -type f -exec grep -l -F -e 'foo' {} +
Приведенная выше команда найдет все обычные файлы в текущем каталоге или ниже него. Для пакетов найденных файлов будет вызываться grep
, чтобы найти строку foo
. При нахождении строки в файле grep
немедленно выводит путь к файлу и продолжает работу со следующим файлом, не читая дальше текущий файл.
-l
, чтобы заставить grep
остановиться и сообщить имя файла в первой строке, соответствующее данному шаблону. Это ускоряет обработку, игнорируя бит файла после первого попадания. -F
, чтобы заставить grep
считать шаблон строкой, а не регулярным выражением. Это потенциально ускоряет обработку, не пытаясь найти совпадения с регулярными выражениями, и позволяет нам сопоставлять строки, которые выглядят как регулярные выражения.-e
с данным шаблоном, на тот случай, если он начинается с дефиса. В данном случае этого не происходит, но замена этой статической строки foo
переменной даст возможность сопоставления с шаблоном, начинающимся с дефиса, который, следовательно, будет ошибочно принят за командную строку -вариант. Однако список имен файлов обычно бесполезен. Вероятно, вы захотите что-то сделать с этими файлами. Если это так, вы должны сделать это как часть утилиты, которая find
выполняется через -exec
:
find. -type f -exec sh -c '
for pathname do
grep -q -F -e "foo" "$pathname" || continue
# Do something with "$pathname" here
done' sh {} +
Здесь мы вызываем скрипт с короткой строкой -для пакетной обработки найденных файлов. Мы проверяем каждый файл отдельно на наличие строки foo
и игнорируем файлы, не содержащие строку. Там, где я добавил комментарий в скрипте строки -, вы должны обработать файл, на который ссылается "$pathname"
.
Вы также можете написать вышеприведенное с find
выполнением grep
отдельно перед вызовом встроенного скрипта -:
find. -type f -exec grep -q -F -e 'foo' {} \; -exec sh -c '
for pathname do
# Do something with "$pathname" here
done' sh {} +
Обратите внимание, что первый -exec
действует как тест для текущего файла перед вызовом sh -c
с файлами, прошедшими этот тест.
Я считаю, что утилита ack
сделает именно то, что вам нужно. Возможно, он уже установлен в вашей системе. Если нет, то его можно скачать с https://beyondgrep.com/.
Одной из приятных особенностей ack
является то, что он по умолчанию игнорирует двоичные файлы и может иметь параметры командной строки для ограничения типов файлов, которые ищутся с помощью определенного фильтра или типа файла (, например. по языку программирования:--type=cc
будет искать .c
, .h
, .xs
файлы, --type=awk
будет искать любые файлы, которые соответствуют /awk/
в первой строке ). Эти типы также могут быть расширены пользователем в командной строке или более постоянно в файле ~/.ackrc
.