IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Utilisation de grep


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Utilisation de grep
    Bonjour à tous,

    Je souhaiterais rechercher une ligne particulière dans tous les fichiers du serveur. Cette ligne est du genre :

    /usr/lib64/extensions/no-debug-non-zts-20060613/ssh2.so
    J'ai vu que la commande GREP pouvait faire ce genre de choses. J'ai essayé avec l'option -x mais on dirait que ça rame et que rien ne sort. Mais je voulais éviter les fichiers "permission denied" et autres inaccessibles.

    Quelle serait la bonne méthode ?
    Peut-être pas GREP ? Une autre option ?
    Merci de vos lumières.

  2. #2
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /CHEMIN  -type f -exec grep -l LIGNERECHERCHEE {} \; 2> /dev/null

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonsoir et merci de ta réponse,

    Comme je suis débutant, peux tu me préciser :

    find /CHEMIN -type f -exec grep -l LIGNERECHERCHEE {} \; 2> /dev/null
    CHEMIN : si je veux une recherche complète, je dois mettre /root ?

    Ce qui donnerait, pour mon exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /root  -type f -exec grep -l /usr/lib64/extensions/no-debug-non-zts-20060613/ssh2.so  {} \; 2> /dev/null
    Ni guillemets ni apostrophe autour de LIGNE RECHERCHEE ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Par défaut
    bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -lR '/usr/lib64/extensions/no-debug-non-zts-20060613/ssh2.so' / 2>/dev/null

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonsoir, merci de ton passage.

    Ton expression est différente. Du coup...


    Je suis un peu paumé.
    Je la teste. C'est sans danger pour le serveur ?

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Bonsoir, merci de ton passage.

    Ton expression est différente. Du coup...


    Je suis un peu paumé.
    Je la teste. C'est sans danger pour le serveur ?
    grep ne fait que "lire" du contenu et l'afficher il ne modifie rien.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Je la teste. C'est sans danger pour le serveur ?
    Salut
    Aucune action que tu peux faire n'est dangereuse pour le serveur (ou pour toute machine Unix) si
    1) les droits ont bien été positionnés (ou simplement pas été ouverts par rapport aux droits mis par défaut)
    2) si tu prends soin de ne jamais bosser sous root (devenir root ponctuellement pour un besoin précis oui, mais pas bosser de façon généralisée sous root)

    Citation Envoyé par renaud26 Voir le message
    Ton expression est différente. Du coup...


    Je suis un peu paumé.
    becket a utilisé un mix de 2 commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /chemin-type f -exec grep -l LIGNERECHERCHEE {} \; 2> /dev/null
    1) la commande find qui permet de rechercher des fichiers à partir d'un point de départ "/chemin". Ici il demande la recherche de tout fichier classique "-type f" (on n'espère pas trouver une chaine dans un dossier ou un fichier spécial).
    2) chaque fichier trouvé sera passé via "-exec" à la commande "grep" qui cherchera "lignecherchée" dans le fichier trouvé par find, fichier symbolisé par les accolades {}. Pour que find sache où s'arrête la commande "grep", il faut la terminer par un point-virgule mais ce point-virgule ne doit pas être intercepté par ton interpréteur shell donc on le protège par un backslash.

    Et enfin il se peut que tu n'aies pas accès à toute l'arborescence (cause droits). Dans ce cas, find n'y a pas accès non plus et te renvoie un message disant qu'il ne peut pas y accéder, ce message transitant par le canal des erreurs n° 2. Pour ne pas que ce message te gêne, on le redirige dans /dev/null

    chardclo utilise une commande grep un peu plus élaborée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -lR '/usr/lib64/extensions/no-debug-non-zts-20060613/ssh2.so' / 2>/dev/null
    Il demande ici à grep d'assurer lui-même la recherche récursive avec l'option "-R". Bref il demande à grep de faire le travail de find.
    Certaines commandes ont été en effet reprises pour faire un peu plus que les commandes d'origine.

    La syntaxe de becket est une syntaxe généraliste, très dans le principe Unix qui dit qu'une commande ne fait qu'un travail mais le fait bien et c'est en les mixant ou les reliant plusieurs commandes les unes aux autres qu'on peut faire des traitements complexe. Cette syntaxe marchera sur tous les Unix du monde quel que soit ton besoin.
    La syntaxe de chardclo est une syntaxe utilisant certaines commandes souvent utilisées dans certaines configuration qui ont alors été optimisées pour pouvoir intégrer elles-mêmes la configuration en question sans passer par une autre commande préalable. Ca ne marchera que dans des cas très spécifiques (sur les Unix récents pour une configuration précise)

    Citation Envoyé par renaud26 Voir le message
    Et ce matin, 12h00 plus tard, le curseur est toujours sous l'instruction et rien ne s'est affiché, comme si il devait "scanner" 1 milliard de lignes. Pourtant le serveur n'a encore aucun site installé...
    Normal ou étrange?
    Pour moi c'est normal. chardclo a oublié que sa commande allait scanner tous les fichiers de l'arborescence, y compris les pipes. Or, tout processus qui lit un pipe reste bloqué tant qu'un autre processus ne vient pas y écrire dedans...
    A moins que grep -R sache éviter les pipes et dans ce cas mon hypothèse n'est pas bonne (je ne connais pas les détails de l'option "-R"). Mais tu devrais essayer la syntaxe de becket pour voir car avec la sienne, en ne demandant que les fichiers de type f, tu es sûr de ne pas choper les fichiers de type p...

    Citation Envoyé par renaud26 Voir le message
    CHEMIN : si je veux une recherche complète, je dois mettre /root ?
    Si tu mets /root ta recherche ne débutera qu'à partir de /root. Si tu veux une recherche sur toute l'arborescence, il faut mettre la base de l'arborescence donc "/"

    Citation Envoyé par renaud26 Voir le message
    Je ne vois pas défiler de lignes, façon "scanner"
    Unix est un système de professionnels et non une série grand guignolesque à la façon des experts Miami. Il ne t'affiche que les infos que tu demandes et les infos d'échec...

    Citation Envoyé par renaud26 Voir le message
    Mais ça fait maintenant 36 heures... Il y a tant que ça de fichiers à passer au crible ?
    36 heures !!!??? Si une commande aussi basique qu'un grep tourne plus de 10 minutes tu peux l'arrêter, c'est qu'il y a un problème ; probablement le coup des pipes. Comme quoi parfois, les principes de nos sages ancêtres Unixiens avaient du bon et essayer de vouloir "gonfler" artificiellement certaines commandes en oubliant certains détails amène plus de malheurs qu'autre chose...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Utilisation de grep -v
    Par chtorrel dans le forum AIX
    Réponses: 4
    Dernier message: 09/07/2008, 14h08
  2. [debutant] utilisation de grep
    Par john stedd dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 17/11/2007, 11h14
  3. utiliser commande grep
    Par salim81 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 01/07/2007, 21h52
  4. Problème avec l'utilisation de grep
    Par fgalves dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 07/11/2006, 23h49
  5. Utilisation de grep
    Par julien.63 dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/08/2006, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo