2012-06-29 3 views
1

Мой .htaccess файл в моей папке htdocs не работает. Я пытался перенаправить на Google при доступе к имени файла. Я хочу узнать, где настройки для моего httpd.conf, поэтому я могу включить mod_rewrite. Я сделал следующую команду UNIX, чтобы узнать, если httpd.conf файл существует на жестком диске:Использование grep для поиска файла, содержащего строку

find * -name "httpd.conf" 

Файл не существует. Я думаю, что, возможно, есть еще один файл, который управляет mod_rewrite. Я хочу посмотреть, существует ли «AllowOverride» в любом каталоге. Я вошел в следующую команду UNIX:

grep -r "AllowOverride" * 

Но это трудно читать, потому что оно печатает так много папок. Сообщение, которое прилагается к папкам, это «Permission denied» или «Нет такого файла или каталога». Как получить только пути к файлам, содержащим AllowOverride?

+1

Попробуйте подавляя STDERR с '2>/разработчика/null' –

+3

Y неправильно использовать 'find'. Не используйте '*' для вашего пути; используйте '.' или '/' или что-то еще вместо этого. Один путь только ... – sarnold

ответ

5

Многие Unix и аналогичные системы предоставляют команду locate(1), которая использует базу данных для быстрого поиска отдельных файлов. Попробуйте следующее:

locate httpd.conf 

Обратите внимание, что конфигурации Apache хранятся в файлах всех видов имен; Я видел apache.conf, , httpd2.conf, а затем есть гигантская куча /etc/apache2/conf.d/ - целые структуры каталогов, предназначенные для настройки Apache. Ваше распределение может отличаться.

Возможно, apachectl configtest покажет пути? (в настоящее время не установлен на моей машине, поэтому я не могу легко проверить.)

3

Попробуйте эту команду:

find/-name "httpd.conf" 2>1 | grep -v "Permission denied" 

2>1 воронок stderr в stdout так, что оба могут быть передан в утилиту grep. grep в свою очередь, будет печататься anyline, который не имеет строку «Отказано в доступе» в нем (в -v отрицает/инвертирует соответствия строки поиска)

Если вы не перенаправлять stderr на stdout, выход stderr на консоль будет обходить остальную часть командной строки.

Вы можете продлить выше командной строки с помощью добавляющим это:

| grep -v "No such file or directory" 

, если эта строка подходило, и вы хотели, чтобы подавить его тоже.

Об этом сообщает all about io redirection. И вот хороший quick summary.

+0

Еще один приятный вариант - просто выбросить все ошибки: 'find/-name httpd.conf 2>/dev/null'. – sarnold

+0

@sarnold .. это правда, мне нравится иметь их, хотя на всякий случай я хочу отфильтровать их (и я ленив, поэтому я просто использую ту же начальную командную строку). 'locate' является хорошим решением, если' updatedb' работает регулярно. Я когда-то работал в месте, где не было задания cron, и у меня не было sudo для его запуска :-( – Levon

+0

Eeep, без базы данных 'updatedb', это было бы так утомительно ... hooray for' locate' . :) – sarnold

0

Используйте следующее:

find/-type f -exec grep -n "AllowOverride" {} \; -print 2>/dev/null 

Для сканирования файлов, содержащих строку «AllowOverride» от корня, если вы хотите, чтобы запустить поиск в определенном каталоге, используйте вместо этого следующее:

find /path/to/directory -type f -exec grep -n "AllowOverride" {} \; -print 2>/dev/null 

Вывод должен печатать только файлы, содержащие указанную строку вместе с номером согласующей линии

Смежные вопросы