[shell] script pour extraire les modules

Résolu/Fermé
laguigne - 26 déc. 2008 à 09:20
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 déc. 2008 à 14:34
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
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
26 déc. 2008 à 10:06
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 ;-))
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
26 déc. 2008 à 11:17
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 .
awk -F"/" 'split($NF,t,".") { print t[1] }'
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
26 déc. 2008 à 11:20
Salut,
find /lib/modules/$(uname -r) -type f -iname '*.o' -or -iname '*.ko' | sed 's/\.k*o//'
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
26 déc. 2008 à 11:26
Fainéant ;-))

Le k* ne sert à rien, tu t'es fatigué pour rien ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
26 déc. 2008 à 11:30
Ben, je ne pense pas.

Comme il suppose avoir des .ko et des .o alors k*o permet de reconnaître soit ko soit o (vu que le quantificateur * reconnaît zéro, une fois, autant de fois qu'il peut)
Je ne sait pas si le quantificateur ? (facultatif) existe en sed, puisque j'aurais écrit \.k?o
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
26 déc. 2008 à 11:44
Ben vu la gourmandise des regex, peu importe ce qui se trouve derrière, ko ou o, car je ne pense pas qu'on trouve des noms de modules composés avec des points (nvidia.3.6.ko), non ?

;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
26 déc. 2008 à 11:47
Tu proposes quoi alors?
Ca (point suit de n'importe quel caractère, n'importe combien de fois) ? \..*
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
26 déc. 2008 à 11:50
Ben oui, c'est d'ailleurs la regex que j'ai employée dans mon 1er post :
sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'
;-))
0
ah merci c'est super.

j'ai tout compris :)
0