Blogounage

Aller au contenu | Aller au menu | Aller à la recherche

Linux Tips

Un bon titre dans la langue de Molière. En fait, c'est surtout pour faire plus court qu'Astuces.

Fil des billets - Fil des commentaires

vendredi 7 octobre 2005

Renommer une série de fichiers avec des majuscules en minuscules

Un peu pour pour toi lecteur chéri, mon amour, mais surtout pour moi parce que j'ai souvent besoin de ça et que ça me fera un bon endroit pour retrouver l'info. Voici une petite commande très rapide pour renommer facilement un ensemble de fichiers possédant des majuscules de façon plus ou moins "désordonnées".

Mon problème, en l'occurrence, est que IMG_3.jpg est différent sous Linux de img_3.jpg ou encore de ImG_3.jpg. Ce n'est pas très grave en soi, je préfère cette différenciation majuscules/minuscules. Mais lorsque tout n'est pas en minuscules, ou en majuscules, ça peut parfois être chiant : ma copine a un répertoire de photos, listées sous windows. Je suis censé avoir les mêmes, mais il semble m'en manquer une parce qu'elle en a 76 et moi 75... Alors, je trie par ordre alphabétique les photos... Le problème c'est que A vient après le z et non après le a sur mon système, contrairement à windows qui trie sans regarder la casse.

Un peu chiant pour comparer une liste de photos à l'oeil nu, vous en conviendrez. Donc, je me décide à renommer d'un coup toutes les photos de mon disque (au nombre de 1700 actuellement). De toute façon, ça fait longtemps que je le prévoyais, je préfère : ce sera plus homogène.

La commande qui permet de faire ça d'un coup d'un seul :

$ rename 'y/A-Z/a-z/' *

mercredi 5 octobre 2005

Comment savoir quel processus utilise telle socket ou tel périphérique

Plusieurs commandes permettent de répondre à cette question.

Netstat

J'utilise en général la commande netstat -ntap pour voir quels sont les ports ouverts. La dernière colonne indique quels sont les noms des programmes qui utilisent les ports. Vous devez lancer cette commande en tant qu'utilisateur root, sinon vous n'aurez pas les droits pour savoir quels sont tous les processus en jeu.

Exemple :

$ netstat -ntap
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:1476            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN     -
tcp        0      0 10.31.99.3:3306         0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:1099            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:8083            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:33370           0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:8091            0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:33371           0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:33372           0.0.0.0:*               LISTEN     -
tcp        0      0 0.0.0.0:4444            0.0.0.0:*               LISTEN     -
tcp        0    248 10.31.99.3:22           10.31.0.162:2301        ESTABLISHED-
tcp        0      0 10.31.99.3:22           10.31.0.162:4268        ESTABLISHED-

En lancant la commande en étant root :

$ sudo netstat -ntap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:1476            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 10.31.99.3:3306         0.0.0.0:*               LISTEN     11969/mysqld
tcp        0      0 0.0.0.0:1099            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN     5614/apache2
tcp        0      0 0.0.0.0:8083            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     2034/xinetd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     968/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     838/exim4
tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:33370           0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:8091            0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:33371           0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:33372           0.0.0.0:*               LISTEN     11485/java
tcp        0      0 0.0.0.0:4444            0.0.0.0:*               LISTEN     11485/java
tcp        0    148 10.31.99.3:22           10.31.0.162:2301        ESTABLISHED6839/1
tcp        0      0 10.31.99.3:22           10.31.0.162:4268        ESTABLISHED11874/0

lsof

L'avantage de cette commande est qu'elle n'est pas limitée aux sockets. Elle s'occupe de tout descripteur de fichier. De la même façon que pour netstat, vous devrez lancer cette commande en root pour pouvoir connaître les utilisateurs de tout descripteur.

Je fais tourner un apache2 sur le port 81 de la machine sur laquelle je travaille. Pour utiliser lsof avec les sockets, voici la commande à utiliser :

$ sudo lsof -i :81
COMMAND  PID     USER   FD   TYPE DEVICE SIZE NODE NAME
apache2 5614     root    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 5628 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 5631 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 5632 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 5633 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 5639 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 7572 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)
apache2 7586 www-data    3u  IPv4  13850       TCP *:81 (LISTEN)

Je pense que ce sont tous les processus/threads qui peuvent accéder à la socket qui sont montrés. Cette commande reste donc toutefois très utile pour avoir une réponse exhaustive à la question qui utilise ce port ? lorsque vous voulez le savoir.

Là, j'ai choisi un port pour lequel peu de lignes sont affichées. Pour information, je fais aussi tourner un serveur J2EE JBOSS sur le port 8080, et lorsque je lance la commande sudo lsof -i :8080, le résultat fait 59 lignes...

Je préfère donc netstat qui offre une réponse plus synthétique, ce dont j'ai le plus souvent besoin.

Liens externes

jeudi 19 mai 2005

Supprimer les bips bips de la console

Ou comment éviter d'entendre les réflexions de votre entourage : 'tain, mais c'est chiant ce bip ! Tu peux pas l'enlever ?. Et là, ou vous baissez les yeux en disant que vous savez pas faire, ou vous savez le faire. Ne vous inquiétez plus, maintenant vous saurez. :-)

Il y a deux cas : soit vous êtes sous X, soit vous êtes en mode console.

Sous X

$ xset -b 0

En mode console

$ setterm -blength 0

Merci à pouet de ccm qui m'a appris ce truc il y a deux ou trois ans.

vendredi 17 décembre 2004

Unable to compile kernel

Ce billet sera aussi en anglais mais je mettrais aussi les messages d'erreurs produits par le noyau en français. En bref, gcc-3.4 : pas glop pour la compilation du noyau (2.4.27).

Well, this one will be in english too although I'm going to put french error messages too. It will let french users find the information in typing the message in google.

If you're trying to compile the Linux kernel with gcc 3.4, you may have noticed that it generates an error. I didn't find quickly because I had forgotten I had changed the symbolic link to point to gcc-3.4 instead of the default 3.3 version. To be able to compile, just be sure you're not using gcc 3.4, it worked for me :-)

In english :

sched.c:213: error: conflicting types for 'reschedule_idle'
sched.c:210: error: previous declaration of 'reschedule_idle' was here
sched.c:213: error: conflicting types for 'reschedule_idle'
sched.c:210: error: previous declaration of 'reschedule_idle' was here
sched.c:371: error: conflicting types for 'wake_up_process'
/usr/src/kernel-source-2.4.27/include/linux/sched.h:603: error: previous declaration of 'wake_up_process' was here
sched.c:371: error: conflicting types for 'wake_up_process'
/usr/src/kernel-source-2.4.27/include/linux/sched.h:603: error: previous declaration of 'wake_up_process' was here
sched.c:409: error: conflicting types for 'schedule_timeout'
/usr/src/kernel-source-2.4.27/include/linux/sched.h:148: error: previous declaration of 'schedule_timeout' was here
sched.c:409: error: conflicting types for 'schedule_timeout'
/usr/src/kernel-source-2.4.27/include/linux/sched.h:148: error: previous declaration of 'schedule_timeout' was here
sched.c:739: error: conflicting types for '__wake_up'
/usr/src/kernel-source-2.4.27/include/linux/sched.h:595: error: previous declaration of '__wake_up' was here
...
make[3]: *** [sched.o] Error 1
make[3]: Leaving directory `/usr/src/kernel-source-2.4.27/kernel'
make[2]: *** [first_rule] Error 2
make[2]: Leaving directory `/usr/src/kernel-source-2.4.27/kernel'
make[1]: *** [_dir_kernel] Error 2
make[1]: Leaving directory `/usr/src/kernel-source-2.4.27'
make: *** [stamp-build] Error 2

In french :

sched.c:213: erreur: types conflictuels pour « reschedule_idle »
sched.c:210: erreur: déclaration précédente de « reschedule_idle » était ici
sched.c:213: erreur: types conflictuels pour « reschedule_idle »
sched.c:210: erreur: déclaration précédente de « reschedule_idle » était ici
sched.c:371: erreur: types conflictuels pour « wake_up_process »
/usr/src/kernel-source-2.4.27/include/linux/sched.h:603: erreur: déclaration précédente de « wake_up_process » était ici
sched.c:371: erreur: types conflictuels pour « wake_up_process »
/usr/src/kernel-source-2.4.27/include/linux/sched.h:603: erreur: déclaration précédente de « wake_up_process » était ici
sched.c:409: erreur: types conflictuels pour « schedule_timeout »
/usr/src/kernel-source-2.4.27/include/linux/sched.h:148: erreur: déclaration précédente de « schedule_timeout » était ici
sched.c:409: erreur: types conflictuels pour « schedule_timeout »
/usr/src/kernel-source-2.4.27/include/linux/sched.h:148: erreur: déclaration précédente de « schedule_timeout » était ici
sched.c:739: erreur: types conflictuels pour « __wake_up »
...
make[3]: *** [sched.o] Erreur 1
make[3]: Leaving directory `/usr/src/kernel-source-2.4.27/kernel'
make[2]: *** [first_rule] Erreur 2
make[2]: Leaving directory `/usr/src/kernel-source-2.4.27/kernel'
make[1]: *** [_dir_kernel] Erreur 2
make[1]: Leaving directory `/usr/src/kernel-source-2.4.27'
make: *** [stamp-build] Erreur 2

mercredi 3 novembre 2004

Comment savoir qui utilise un périphérique ?

C'est un problème que je rencontre assez fréquemment. Je n'utilise pas encore ALSA, je suis toujours à OSS par manque de temps pour changer, c'en est peut-être la cause. Bref, lorsqu'un logiciel plante il peut arriver qu'il subsiste en mémoire sans qu'on s'en aperçoive et occupe /dev/dsp...

Et là, paf, lorsqu'on essaie d'écouter de la musique, et ben non !

Comment faire pour retrouver ce fichu processus qui m'empêche de faire qu'est-ce que je veux ?

fuser ou lsof vous listent les processus en cours d'utilisation :

Exemple :

baptiste@presario:~$ fuser -v /dev/dsp

                     USER        PID ACCESS COMMAND
/dev/dsp             baptiste   4414 f....  xmms
                     baptiste   4416 f....  xmms
                     baptiste   4417 f....  xmms
                     baptiste   4418 f....  xmms
                     baptiste   4577 f....  xmms
                     baptiste   4578 f....  xmms
baptiste@presario:~$ lsof  /dev/dsp
COMMAND  PID     USER   FD   TYPE DEVICE SIZE  NODE NAME
xmms    4414 baptiste   11w   CHR   14,3      80916 /dev/dsp
xmms    4416 baptiste   11w   CHR   14,3      80916 /dev/dsp
xmms    4417 baptiste   11w   CHR   14,3      80916 /dev/dsp
xmms    4418 baptiste   11w   CHR   14,3      80916 /dev/dsp
xmms    4577 baptiste   11w   CHR   14,3      80916 /dev/dsp
xmms    4578 baptiste   11w   CHR   14,3      80916 /dev/dsp
Je vais essayer d'ajouter un billet dans cette catégorie plus régulièrement à partir d'aujourd'hui.

samedi 22 mai 2004

Remplacement de commande

Lire la suite...