2016-10-31 2 views
1

Question: Comment trouver tous les fichiers accessibles en écriture référencés dans les scripts de démarrage présents dans le répertoire /etc/init.d d'un RHEL 5 serveur?BASH - Trouver tous les fichiers inscriptibles du monde référencés dans un ensemble de fichiers

Contraintes:

  • solutions BASH seulement (ce qui fait partie d'un script plus)
  • Aucun outil supplémentaire/packages peuvent être installés

Voici ce que j'ai jusqu'à présent.

worldWritable=$(find/-type f -perm -002) 
startupScripts=$(ls -l /etc/init.d/* | tr '\011' ' ' | tr -s ' ' | cut -f 9,9 -d " ") 
for file in $worldWritable 
do 
    for line in $startupScripts 
    do 
     grep -w "$file" $line | grep -v "^#" >> outFile 
    done 
done 

Ce genre de travaux, mais il prend beaucoup de temps, et il comprend beaucoup de choses qui n'est pas correcte (au moins pas ce que je suis à la recherche). J'ai juste besoin de "outFile" pour contenir une liste des fichiers inscriptibles dans le monde trouvés référencés dans n'importe quel script dans le répertoire /etc/init.d.

Cela ne me dérange pas complètement d'abandonner cette approche si quelqu'un peut offrir une meilleure solution. J'ai juste besoin de quelque chose de plus rapide et de plus fiable. Merci!

+0

Je ne suis pas sûr exactement mais peut-être quelque chose comme 'find/-type f -perm -002 -exec grep -l 'searchstring' {} \;' pourrait réduire la durée. –

Répondre

0

La plus grande lenteur vient certainement du find /, en analysant l'ensemble du système de fichiers. Il sera plus rapide de faire l'inverse:

  • Extrait tous les chemins absolus des scripts d'initialisation
    • Utilisation d'un regex approprié, par exemple matchs à l'exception où # se produit plus tôt sur la même ligne
  • Pour chaque chemin potentiel extrait, vérifier que:
    • Le fichier existe
    • Le fichier est accessible en écriture

Le résultat devrait être beaucoup plus rapide.

+0

Ouais j'ai eu une pensée similaire, mais j'ai testé le 'find /' et cela ne prend qu'un peu plus d'une minute. Le grand ralentissement est la boucle - il a fallu un peu moins d'une heure. Je vais essayer l'approche inverse que vous suggérez et voir si j'ai plus de chance. –

+0

Oui, ça a fini par être une bien meilleure approche. Merci pour les commentaires. –