/etc/init.d
сохраняется на человечности для обратной совместимости с материалом sysvinit. Если Вы на самом деле смотрите на /etc/init.d/rc.local
Вы будете видеть (также с 12.04 Серверов LTS):
#! /bin/sh
### BEGIN INIT INFORMATION
# Provides: rc.local
# Required-Start: $remote_fs $syslog $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO
И "Выполненный/etc/rc.local" точно, что он делает. Полнота /etc/rc.local
:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
Я предположил бы цель в выполнении, это должно обеспечить, очень простое место для помещения оболочки управляет, чтобы Вы хотели выполненный при начальной загрузке, не имея необходимость иметь дело с stop|start сервисным материалом, который находится в /etc/init.d/rc.local
.
Таким образом, это - на самом деле сервис и может быть выполнено как таковое. Я добавил a echo
строка к /etc/rc.local
и:
»service rc.local start
hello world
Однако я не полагаю, что на это ссылается что-либо в выскочке /etc/init
(не init.d!) каталог:
»initctl start rc.local
initctl: Unknown job: rc.local
В выскочке существует несколько "емкостно-резистивных" сервисов:
»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting
Но ни один из тех, кажется, не имеет никакого отношения к rc.local.
Почему Вы не можете просто использовать -r
переключатель к grep
рекурсивно вызывать файловую систему вместо использования find
? Существует 2 дополнительных переключателя, которые я использовал бы также, вместо -n
переключатель.
$ grep -rHn PATTERN <DIR> | cut -d":" -f1-2
$ grep -rHn PATH ~/.bashrc | cut -d":" -f1-2
/home/saml/.bashrc:25
-r
- рекурсивно переройте файлы + каталоги-H
- печатает название файла, если это соответствует (менее строгий, чем -l
) т.е. это работает с grep
другие переключатели-n
- отобразите номер строки соответствия$ grep -rHn PATH ~/.bash* | cut -d":" -f1-2
/home/saml/.bash_profile:10
/home/saml/.bash_profile:12
/home/saml/.bash_profile_askapache:99
/home/saml/.bash_profile_askapache:101
/home/saml/.bash_profile_askapache:118
/home/saml/.bash_profile_askapache:166
/home/saml/.bash_profile_askapache:218
/home/saml/.bash_profile_askapache:250
/home/saml/.bash_profile_askapache:314
/home/saml/.bash_profile_askapache:2317
/home/saml/.bash_profile_askapache:2323
/home/saml/.bashrc:25
$ find . -exec sh -c 'grep -Hn PATTERN "$@" | cut -d":" -f1-2' {} +
$ find ~/.bash* -exec sh -c 'grep -Hn PATH "$@" | cut -d":" -f1-2' {} +
/home/saml/.bash_profile:10
/home/saml/.bash_profile:12
/home/saml/.bash_profile_askapache:99
/home/saml/.bash_profile_askapache:101
/home/saml/.bash_profile_askapache:118
/home/saml/.bash_profile_askapache:166
/home/saml/.bash_profile_askapache:218
/home/saml/.bash_profile_askapache:250
/home/saml/.bash_profile_askapache:314
/home/saml/.bash_profile_askapache:2317
/home/saml/.bash_profile_askapache:2323
/home/saml/.bashrc:25
Если Вы действительно хотите использовать find
можно сделать что-то вроде этого должностному лицу grep
после нахождения использования файлов find
.
grep -n PATTERN `find . -type f`
Это плохо, потому что вывод замены команды интерпретируется как разделенный от пробела список подстановочных шаблонов имени файла. Если какие-либо из имен файлов содержат пробел или один из \[*?
, этот отрывок не работает. Кроме того, если будет много файлов соответствия, то это в конечном счете приведет к командной строке, которая является слишком длинной.
find . -exec grep -n PATTERN '{}' \;
Это прекрасно и надежно, но grep
вызывается однажды на файл. Поэтому это настолько медленно.
Использовать -exec … {} +
выполнить команду в пакетах как можно большего количества файлов. Обратите внимание, что это могло произойти, что последний пакет (или в других теории) состоит из единственного файла, таким образом, grep
не распечатает имя файла; передайте -H
опция всегда распечатать имя файла или добавить аргумент /dev/null
(который никогда не содержит соответствий, но гарантирует это grep
видит по крайней мере два имен файлов).
find . -type f -exec grep -Hn PATTERN {} +
GNU grep не имеет опции распечатать числа согласующего отрезка длинной линии, но не текст согласующего отрезка длинной линии. Можно разделить совпавший текст и подкачать номера строки с именем файла с sed.
find . -type f -exec grep -Hn PATTERN {} + | sed 's/^\([^:]*\):\([^:]*\):.*/\2:\1/'
Если Вы хотите к выравниванию по правому краю, номера строки, awk намного более прост, чем какая-либо альтернатива, о которой я могу думать.
find . -type f -exec grep -Hn PATTERN {} + | awk -F : '{printf "%8d:%s", $2, $1}'
Можно получить больше контроля путем выполнения соответствия в awk вместо grep. Awk склонен быть немного медленнее, потому что это - больше универсального инструмента с интерпретируемым языком. Одно преимущество - то, что можно выбрать, что сделать с именами файлов, содержащими двоеточие или новую строку, которые приводят к неоднозначному выводу от grep. Следующий отрывок использует awk, чтобы сделать поиск и справляется с именами файлов, содержащими :
(и даже новые строки, но для них это производит неоднозначный вывод). Обратите внимание, что awk использует расширенные регулярные выражения, как grep -E
(с незначительными изменениями, но не действительно больше, чем Вы добираются между реализациями grep или awk).
find . -type f -exec awk '/PATTERN/ {printf "%d:", FNR; print FILENAME}' {} +
-h
, --no-filename
Подавите добавление префикса имен файлов на выводе. Это - значение по умолчанию, когда существует только один файл (или только стандартный вход) для поиска “. Если Вы хотите корректный вывод для имен файлов, содержащих двоеточия, Вы не можете использовать grep, не без сложной обертки оболочки. Можно использовать awk, видеть мое редактирование.
– Gilles 'SO- stop being evil'
17.10.2013, 16:02
grep -r something /etc
на Debian/Ubuntu и плачут). – Gilles 'SO- stop being evil' 17.10.2013, 02:54find
пример также. – slm♦ 17.10.2013, 02:56grep
: "Вздор grep-rHn $1 1/1/1/1.txt:1:blah" – slm♦ 17.10.2013, 16:05-H
это вызываетgrep
всегда печатать имя файла. При предоставленииgrep
единственное имя файла это не печатает название файла в выводе. – slm♦ 17.10.2013, 16:12