[shell] script pour extraire les modules
Résolu
laguigne
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour et joyeux noel à tous,
je suis en train de me mettre a linux et pour avoir la liste des modules de mon kernel je lance un :
find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'
et suite avec les modules trouvé je remplis /etc/modules.autoload.d/kernel-2.6 avec le nom des modules sans le .o ou .ko
alors pour cette nouvelle année, je voudrais essayer de bricoler un script qui puisse a l'issue du find conserver uniquement le nom du module et remplir le bon fichier.
sachant que je suis debutant, je pense que la bonne commande ça doit etre awk j'imagine.
comment est ce que je pourrais faire ça?
merci de vs conseil
je suis en train de me mettre a linux et pour avoir la liste des modules de mon kernel je lance un :
find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'
et suite avec les modules trouvé je remplis /etc/modules.autoload.d/kernel-2.6 avec le nom des modules sans le .o ou .ko
alors pour cette nouvelle année, je voudrais essayer de bricoler un script qui puisse a l'issue du find conserver uniquement le nom du module et remplir le bon fichier.
sachant que je suis debutant, je pense que la bonne commande ça doit etre awk j'imagine.
comment est ce que je pourrais faire ça?
merci de vs conseil
A voir également:
- [shell] script pour extraire les modules
- Extraire une video youtube - Guide
- Classic shell - Télécharger - Personnalisation
- Extraire le son d'une vidéo - Guide
- Script vidéo youtube - Guide
- Extraire image pdf - Guide
4 réponses
Salut,
find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' -exec basename {} \; | sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'devrait le faire ;-))
arf merci :) c'est sympa de ta part, mais par contre, je n'ai pas compris.
moi je suis arrivé là:
find /lib/modules/2.6.26-gentoo-r4 -type f -iname '*.o' -or -iname '*.ko' | awk -F "/" '{print $NF}'
ça me donne le nom_du_module.ko
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
par exemple avec /lib/modules/2.6.26-gentoo-r4/video/nvidia.ko
ce que j'ai fais me donne nvidia.ko puis que j'ai le / en séparateur, je sais que je pourrais enlever les 3 derniers caractères avec une option, mais la bonne démarche c'est plus extraire le champ entre / et . plutot sortir $NF -3 caractères.
toi tu prefères sed je vois, c'est une preference subjective ou c'est mieux de awk pour ce genre de manip?
je pose plein de questions :p j'apprends
merci en tout cas
moi je suis arrivé là:
find /lib/modules/2.6.26-gentoo-r4 -type f -iname '*.o' -or -iname '*.ko' | awk -F "/" '{print $NF}'
ça me donne le nom_du_module.ko
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
par exemple avec /lib/modules/2.6.26-gentoo-r4/video/nvidia.ko
ce que j'ai fais me donne nvidia.ko puis que j'ai le / en séparateur, je sais que je pourrais enlever les 3 derniers caractères avec une option, mais la bonne démarche c'est plus extraire le champ entre / et . plutot sortir $NF -3 caractères.
toi tu prefères sed je vois, c'est une preference subjective ou c'est mieux de awk pour ce genre de manip?
je pose plein de questions :p j'apprends
merci en tout cas
arf merci :) c'est sympa de ta part, mais par contre, je n'ai pas compris.
-exec basename {} \;
Demande à find d'exécuter (-exec) la commande du shell "basename" (Éliminer le chemin d'accès et le suffixe d'un nom de fichier - man basename pour plus de détails) pour chaque argument trouver "{}"
| sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'
Puis de filtrer la sortie avec "sed" qui élimine (s/\..*//) tout ce qui se trouve derrière le point final, point y compris, et de l'écrire dans le fishier donné en paramètre à l'option "w" (write = écrire), dans ton cas le fichier "kernel-2.6" qui se trouve dans le répertoire "/etc/modules.autoload.d/"
L'as-tu essayé au moins ? A la limite, change le "w /etc/modules.autoload.d/kernel-2.6" par un fichier de test :
sed -n 's/\..*//w fichierètest.txt'
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
-exec basename {} \;
Demande à find d'exécuter (-exec) la commande du shell "basename" (Éliminer le chemin d'accès et le suffixe d'un nom de fichier - man basename pour plus de détails) pour chaque argument trouver "{}"
| sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'
Puis de filtrer la sortie avec "sed" qui élimine (s/\..*//) tout ce qui se trouve derrière le point final, point y compris, et de l'écrire dans le fishier donné en paramètre à l'option "w" (write = écrire), dans ton cas le fichier "kernel-2.6" qui se trouve dans le répertoire "/etc/modules.autoload.d/"
L'as-tu essayé au moins ? A la limite, change le "w /etc/modules.autoload.d/kernel-2.6" par un fichier de test :
sed -n 's/\..*//w fichierètest.txt'
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
awk -F"/" 'split($NF,t,".") { print t[1] }';-))
Salut,
find /lib/modules/$(uname -r) -type f -iname '*.o' -or -iname '*.ko' | sed 's/\.k*o//'