Commande Bash
Remarque : “~$ ” est le prompt du terminal qu'il ne faut pas saisir.
Avertissement: Certains scripts agissent sur un ensemble de fichiers et sont donc à utiliser avec prudence.
Convertir les espaces dans le nom des fichiers en caractère souligné "_"
~$ for i in *\ *; do mv "$i" `echo $i | tr " " "_"`; done pour faire l'inverse ~$ for i in *_*; do mv "$i" "`echo $i | tr "_" " "`"; done
Si voulez tester cette commande sans que les modifications soient faites: ~$ for i in *\ *; do printf "$i\n" | tr " " "_"; done
affichera les nouveaux noms des fichiers.
Pour “cibler” les fichiers on peut modifier la commande; par exemple pour n'agir que sur les mp3:
~$ for i in *\ *.mp3; do mv "$i" `echo $i | tr " " "_"`; done
Convertir les fichiers flac en mp3
for file in *.flac; do $(flac -cd "$file" | lame -h - "${file%.flac}.mp3"); done
Convertir les fichiers aif en mp3
for file in *.aif ; do ffmpeg -i $file -f mp3 -ab 192 -ar 44100 $file.mp3 ; done
Convertir les espaces dans le nom des dossiers en caractère souligné "_"
# pour faire une liste de test avant $ find . -type d | while read f ; do echo $f; done # pour faire la convertion (lancer plusieurs fois ...) $ (IFS=$'\n';for f in `find . -type d `; do folder=$(echo $f | tr [:blank:] '_'); [ -e $f ] && [ ! -e $folder ] && mv "$f" $folder;done;unset IFS)
Mettre les noms de fichiers en minuscule
~$ for i in *; do mv “$i” `echo $i | tr [:upper:] [:lower:]`; done
Rechercher fichiers en fonction de leur taille
# 1024k est la taille en kilo-octet (1 mega) $ find / -size +1024k -print
Effacer tous les repertoires vides
$ find -depth -type d -empty -exec rmdir {} \;
Effacer tous sauf un dossier ou un fichier
# remplacer la variable NOM_DU_FICHIER $ find . -maxdepth 1 -not -name NOM_DU_FICHIER -exec rm -rf '{}' \; 2>/tmp/NULL
Effacer la fin d'un fichier MP3
# Pour effacer la fin d'un fichier MP3 avec une chaine similaire $for file in *.mp3 > do > mv "$file" "${file%\[www.gwadanina.net\].mp3}.mp3" > done
Convertir des videos en flash extrait de Youtube en fichier MP3
for file in *.flv; do $(mencoder "$file" -o "${file%.flac}.mp3" -of rawaudio -oac mp3lame -lameopts cbr:br=192 -ovc copy); done
Changer les extensions des tous les fichiers d'un dossier
~$ for i in *.EXT1; do mv $i `basename $i EXT1`EXT2; done
EXT1 est l'extension à modifier ; EXT2 est la nouvelle extension Par exemple pour remplacer l'extension php3 de vos scripts par php: ~$ for i in *.php3; do mv $i `basename $i php3`php; done
Remplacer un mot dans plusieurs fichiers
Par exemple pour remplacer le mot windows par linux dans vos fichier texte: perl -i.bak -pe 's/windows/linux/g' *.txt
Une fois vérifié que tout va bien vous pouvez effacer les fichiers de sauvegarde (.bak)
Rechercher une expression dans un ensemble de fichiers:
grep -rn “expression” *.txt
Affichera le nom du fichier est le numéro de ligne ou l'expression a été trouvée.
Transformer une page man en fichier texte:
~$ man emacs | col -b > man_emacs.txt
Ecrire dans un fichier texte sans passer par un éditeur
Crée ou remplace le fichier mon_fichier si il existe: ~$ cat >mon_fichier.txt <<"EOF" >Le fichier contiendra les lignes >que vous tapez jusqu'à ce qu'au >EOF ~$
Ajoute le texte à la fin du fichier ou le crée s'il n'existe pas: ~$ cat >>mon_fichier.txt <<"EOF" >Ajout à la fin du fichier ou création >de celui-ci >EOF ~$
Transformer un fichier texte dos/windows en fichier linux
~$ tr -d “\015” < fich_dos >fich_unix
fich_dos étant le fichier dos et fich_unix le fichier obtenu après conversion
Découper un fichier pour le mettre sur disquettes
~$ split -b 1457664 mon_fichier part.
mon_fichier est le nom du fichier à découper part. est le préfixe de sortie. Les fichier s'appelleront part.aa, part.ab,... -b 1456664 demande à split de couper le fichier en morceaux de 1456664 octets ce qui correspond à la capacité d'une disquette.
Le recollage se fait de la manière suivante (une fois les fichiers regroupés dans un même dossier):
~$ cat part.* >mon_fichier
Signature avec une citation aléatoire
Créez un fichier sign_al.sh contenant:
#!/bin/sh SIGFIFO=$HOME/.signature rm -f $SIGFIFO mkfifo $SIGFIFO while true; do ( printf "Votre nom\n\nCitation :\n" >>$SIGFIFO | fortune -s >> $SIGFIFO ); sleep 1; done
Rendez ce fichier exécutable avec chmod +x sign_al.sh. Puis exécutez le fichier sign_al en arrière plan (./sign_al.sh &). A chaque accés au fichier ~/.signature son contenu est changé. Vous pourrez le constater en utilisant cat sur celui-ci. Il ne vous reste plus qu'à dire à votre logiciel de mail d'utiliser .signature pour signer vos messages.
Rediriger les messages d'erreurs (stderr) vers un fichier
~$ commande 2>err.log
2 correspond à stderr c'est à dire la sortie standard pour les erreurs Exemple d'utilisation: ~$ gcc -o mon_prog main.c 2>err.log ~$ cat err.log main.c: In function `main': main.c:47: warning: unused variable `editor_display'
Autre exemple: Version "améliorée" de la commande pour mettre les noms de fichiers en minuscule ~$ for i in *; do mv "$i" `echo $i | tr [:upper:] [:lower:]` 2>/dev/null; done
Évite d'avoir des message du style:" mv: `abcdef' et `abcdef' identifient le même fichier " pour les fichiers dont le nom ne contient pas de lettres majuscules.
Rediriger les erreurs vers la sortie standard (stdout)
commande 2>&1
Ceci peut être utile pour certains programmes (comme cdrecord ou mkisofs) qui envoient l'aide vers stderr ce qui empêche d'utiliser less pour la faire d�filer.
Exemple:
~$ cdrecord --help | less (END)
ne fonctionne pas par contre : ~$ cdrecord --help 2>&1 | less cdrecord: Usage: cdrecord [options] track1...trackn Options: -version print version information and exit -v increment general verbose level by one -V increment SCSI command transport verbose level by one -debug print additional debug messages dev=target SCSI target to use as CD/DVD-Recorder timeout=# set the default SCSI command timeout to #. driver=name user supplied driver name, use with extreme care -checkdrive check if a driver for the drive is present -prcap print drive capabilities for MMC compliant drives -inq do an inquiry for the drive end exit -scanbus scan the SCSI bus end exit -reset reset the SCSI bus with the cdrecorder (if possible) -ignsize ignore the known size of a medium (may cause problems) donne le résultat attendu !
Réinitialiser la console
~$ reset
Erase is delete. Kill is control-U (^U). Interrupt is control-C (^C). ~$
Monitoring
# Liste les processus en cours d'exécution et leur identifiant (PID) $ top # Tue un processus grâce à son PID $ kill # Liste des connexions au serveur FTP $ ftptop # Top des interfaces réseau (installation par aptitude install iftop) $ iftop # Top Apache (installation par aptitude install apachetop) $ apachetop # Top MySQL (installation par aptitude install mtop) $ mtop ##Pour le réseau : # Liste les connexions établies $ netstat -tap # Liste les ports en écoute $ netstat -tulp # Liste les ports en écoute $ lsof -n | grep LISTEN # Liste les connexions UDP $ lsof -n | grep UDP
Connaitre la version de Debian
# Connaitre la version de Debian installée $ cat /etc/debian_version # Connaitre la version du noyau installée $ uname -a # cat /proc/version
Convertir des fichiers JPG en pdf
# Installation de image magick $ urpmi imagemagick # Convertir les fichier jpg en pdf $ convert *.jpg new_file.pdf
Enregister un Flux mms
$ mplayer -dumpstream mms://video.gwadanina.net/video.wmv -dumpfile video.wmv