2012-06-29 5 views
1

Mon fichier .htaccess dans mon dossier htdocs ne fonctionne pas. J'ai essayé de rediriger vers Google lors de l'accès à un nom de fichier. Je veux savoir où sont les paramètres pour mon httpd.conf, donc je peux activer mod_rewrite. Je l'ai fait la commande UNIX suivante pour savoir si un fichier httpd.conf existait sur mon disque dur:Utilisation de grep pour rechercher un fichier contenant une chaîne

find * -name "httpd.conf" 

Le fichier n'existe pas. Je pense qu'il y a peut-être un autre fichier qui contrôle mod_rewrite. Je veux voir si "AllowOverride" existe dans n'importe quel répertoire. J'ai entré la commande UNIX suivante:

grep -r "AllowOverride" * 

Mais il est difficile à lire car il imprime autant de dossiers. Le message qui accompagne les dossiers sont "Autorisation refusée" ou "Aucun fichier ou répertoire". Comment puis-je obtenir uniquement les chemins d'accès aux fichiers contenant AllowOverride?

+1

Essayez supprimer stderr avec '2>/dev/null' –

+3

Y Vous utilisez incorrectement 'find'. N'utilisez pas '*' pour votre chemin; utilisez '.' ou'/'ou autre chose à la place. Un seul chemin ... – sarnold

Répondre

5

De nombreux systèmes Unix et similaires fournissent une commande locate(1) qui utilise une base de données pour accélérer la recherche de fichiers individuels. Essayez ceci:

locate httpd.conf 

Notez, bien sûr, que les configurations Apache sont stockées dans des fichiers de toutes sortes de noms; J'ai vu apache.conf, httpd.conf, httpd2.conf, et puis il y a la pile géante de /etc/apache2/conf.d/ - des structures de répertoires entières mises de côté pour la configuration d'Apache. Votre distribution peut varier.

Peut-être que apachectl configtest affichera les chemins? (actuellement pas installé sur ma machine, donc je ne peux pas facilement tester.)

3

Essayez cette commande:

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

le 2>1 entonnoirs stderr à stdout de sorte que les deux peuvent être canalisé dans l'utilitaire grep. grep à son tour imprimer anyline qui ne dispose pas de la chaîne « Permission refusée » dans (le -v/annule la mise en correspondance de inversent la chaîne de recherche)

Si vous ne réorientent pas stderr à stdout, la sortie de stderr à la console contournerait le reste de la ligne de commande.

Vous pouvez étendre la ligne de commande ci-dessus par annexant ceci:

| grep -v "No such file or directory" 

si cette chaîne était à venir et que vous vouliez supprimer aussi. Ce message vous indique all about io redirection. Et voici un joli quick summary.

+0

Une autre bonne option consiste à jeter toutes les erreurs: 'find/-name httpd.conf 2>/dev/null'. – sarnold

+0

@sarnold .. c'est vrai, j'aime bien les avoir, au cas où je voudrais les filtrer (et je suis fainéant, donc je vais utiliser la même ligne de commande). 'locate' est une bonne solution tant que' updatedb' fonctionne régulièrement. J'ai déjà travaillé dans un endroit qui n'avait pas de job cron et je n'avais pas de sudo pour l'exécuter :-( – Levon

+0

Eeep, pas de base de données 'updatedb', ça serait tellement fatiguant ... hourra pour' locate' . :) – sarnold

0

Utilisez les éléments suivants:

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

Pour analyser les fichiers contenant la chaîne « AllowOverride » de la racine, si vous souhaitez exécuter la recherche dans un répertoire particulier, utilisez ce qui suit à la place:

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

la sortie ne doit imprimer les fichiers contenant la chaîne spécifiée ainsi que le numéro de la ligne correspondant

Questions connexes