J'ai du mal à chercher en /var
raison d'un blocage /var/run
. J'ai essayé d' exclure/var/run
, mais cela ne produit pas les résultats escomptés:
$ sudo grep -IR --exclude-dir="/var/run" '45.78.157.165' /var | egrep -v '(audit|access)'
/var/log/secure:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
grep: /var/run/saslauthd/mux: No such device or address
grep: /var/run/dbus/system_bus_socket: No such device or address
grep: /var/run/rpcbind.sock: No such device or address
grep: /var/run/udev/control: No such device or address
J'ai essayé les deux -exclude-dir=/var/run
et -exclude-dir="/var/run"
. Les deux produisent les mêmes résultats.
Pourquoi mon grep échoue?
Comment exclure /var/run
d'un grep récursif?
CentOS 7.2, avec Grep:
$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
--exclude-dir=/var/run
sans les guillemets?grep
processus ne voit pas les guillemets dans les deux cas. Bash les développe et il n'y a aucune substitution à effectuer, ils sont donc simplement supprimés. C'est le cas pour tous les obus que je connais.Réponses:
Je pense que c'est probablement parce que vous demandez explicitement
grep
une recherche récursive à partir de/var
, et/var/run
ne correspond pas à un sous-répertoire sous/var
.Voir la page de manuel grep, qui indique:
RÉPARER
Par conséquent, pour corriger votre commande, modifiez le modèle d'exclusion, c'est-à-dire:
la source
grep -r --exclude-dir=./root/js sometext .
pour exclure un sous-dossier de l'emplacement actuel?/
s fassent quoi que ce soit. grep va dans chaque dossier et commence la recherche à ce point. En fait, il recherche toujours le dossier actuel. Si vous souhaitez exclure un sous-dossier (par exemple/home/me/dev/project1/js
) et que vous recherchez à partir de nombreux dossiers (par exemple à partir de/home/me
), vous devez spécifier le nom du dossier de base que vous souhaitez exclure (par exemple--exclude-dir=js
). Malheureusement, cela exclura également TOUT sous-dossier du même nom, ailleurs dans la hiérarchie. Si vous voulez quelque chose avec plus de contrôle, vous pouvez essayer d'utiliserfind
avecgrep
.