31/07/2014 mise à jour 29/09/2020

Not FAQ linux

Table des matières

Dans cet article :

Le shell est bash

moa est le nom de l’utilisateur, son dossier personnel est /home/moa

Script bash acceptant un nombre variable d’arguments

La variable spéciale $@

Cette variable renvoie un chaine contentant les arguments ($1, $2, ...) séparés par des espaces. Cette chaine est facile à parcourir avec for ... in "$@".

Exemple :

#!/bin/bash
echo $@
for x in "$@" 
do
    echo $x
done
Utilisation de shift

Cette commande parcourt les arguments et décrémente leur nombre.

Exemple :

#!/bin/bash
while [ $# -gt 0 ]
do
   echo $1
   shift
done

Table des matières

Créer une clé USB bootable

C’est incroyable les conneries qu’on trouve sur le web !

  1. mettre la clé sur une prise usb de la machine (quand même !)
  2. en root : # fdisk -l. Vous allez trouver quelque chose comme /dev/sbd ou /deb/sbc.
  3. # copy machin-truc-7.1-zob.iso /dev/sbx où /dev/sbx est celui qui a été révélé par fdisk.
  4. # sync pour s’assurer que le tampon a été vidé.

C’est tout !

Table des matières

CDPATH

C’est pénible de devoir tout le temps taper cd /home/moa/src/python/ pour aller dans un dossier qu'on fréquente souvent. En ce moment, pour moi, c'est cpp plutôt que python.

Comme PATH, CDPATH est une variable d’environnement qui permet de mettre à disposition des chemins fréquemment utilisés par la commande cd. Elle a la même syntaxe que PATH : les chemins sont séparés par des deux points.

Exemple :

$ export CDPATH=".:/home/moa:/home/moa/src/python"
$ ls ~/src/python/
classes doc math physique re
$ ls ~/src/python/math
infix2postfix.py  lex.py  __pycache__  symbolic.py  zob.py
$ cd math
/home/moa/src/python/math
~/src/python/math$ pwd
/home/moa/src/python/math
~/src/python/math$ ls
infix2postfix.py  lex.py  __pycache__  symbolic.py  zob.py
Utilisation

Dans vim on peut simplement taper :cd math puis :e symbolic.py

source

The UNIX School

Table des matières

PWD et OLDPWD

Vous connaissez pwd, qui permet de savoir dans quel dossier on se trouve. La variable environnement PWD contient ce dossier. Les commandes pwd et echo $PWD donnent le même résultat.

Il y aussi une variable similaire $OLDPWD qui mémorise le dernier dossier qu’on a fréquenté.

Exemple : vous étiez dans un merdier du genre :

/usr/share/pyshared/numpy/lib/tests

que vous avez quitté pour retourner à votre $HOME/src/python/math. Mince ! vous avez oublié de jeter un œil sur le fichier test_format.py. Tapez :

less $OLDPWD/test_format.py

Un raccourci pour basculer entre les deux derniers répertoires est ~- (tilde tiret).

Table des matières

Renommer en masse

Renommer les fichiers *.dat en *.txt

Methode rename

Pour renommer tous les fichiers *.dat en *.txt :

$ rename  .dat$ .txt *.dat
Méthode sans rename

Renommer les fichiers *.dat en *.txt :

for f in *.dat;do mv "$f" "${f%dat}"txt ;done

Remarque : Avec f=zob.dat :

${f%dat} renvoie zob.

Et ${f#zob.} renvoie dat.

Supprimer un préfixe

Ayant des fichiers préfixés qlam_index.html qlam_listes.html, ... on se propose de supprimer les préfixes pour obtenir index.html, listes.htm, ...

Méthode bash
$ for f in qlam_*.txt; do mv "$f" "${f#qlam_}"; done
Methode find et sed

Cette méthode est récursive, i.e. elle descend dans toute l'arborescence du dossier courant.

$ find . -name "qlam_*.txt" | sed -r 's/\.\/(.*?)qlam_(.+)/mv & \1\2 | bash

Remarque :

Dans la substitution la partie \.\/ supprime les "./" que find renvoie.

La syntaxe de la substitution est un peu obscure. le & fait référence à l'expression régulière qui précède.

Tous les fichiers dans le dossier courant et ses sous dossiers sont renommés.

Expressions régulières

On suppose qu'on a les fichiers :

CR-12042015.pdf CR-28122018.pdf CR-07082017.pdf

où les chffres qui suivent CR- correspondent à des dates au format jjmmaaaa. On voudrait les renommer au format CR-aaaa-mm-jj.pdf, afin de les ordonner par date.

Methode avec sed
$ sed -r 's/CR-(..)(..)(....).*/mv & CR-\3-\2-\1.pdf CR-*.pdf
Methode sans sed
$ for f in *.pdf; do mv "$f" "CR-${f:7:4}-${f:5:2}-${f:3:2}.pdf"; done

Table des matières

La variable $PS1

Elle contient le format (indigeste) du prompt du shell.

On peut la modifier pour changer l’apparence du prompt. echo $PS1 donne quelque chose du genre :

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Si on veut un retour de ligne avant le $, on tape en ligne de commande :

$ export PS1="\u@\h:\w\n$"

On obtient ce genre d’affichage :

grognon@vieux:~/src/python/qlam
$ vim ~/.bashrc
grognon@vieux:~/src/python/qlam
$

Si en plus on veut afficher le prompt en rouge clair, on tape :

$ export PS1="\e[1;31m\u@\h:\w\n$ \e[m"

Pour rendre permanente la modification, ajoutez la ligne à votre .bashrc

Source : thegeekstuff

Table des matières

Vim et le X clipboard

Si vim est compilé avec l’option +clipboard (vim --version), on peut accéder au X clipboard (celui du gestionnaire de fenêtres).

Pour coller depuis le presse-papier système : "*p

Pour copier depuis vim vers le presse-papier système : "*y

Table des matières

Script ftp

Le but est de se passer de filezilla et autre client GUI. On utilise donc exclusivement ftp. Les notations sont les suivantes :

Dossier local : /data/local/
Hôte : ftp.server.net
Utilisateur : grognon

Envoyer un seul fichier à la racine de l'hôte.
#!/bin/bash
cd /data/local/$1
ftp -in ftp.server.net<<FIN2
user grognon
put $1
bye
FIN2
Evoyer un fichier à la racine ou dans un répertoire
#!/bin/bash
   
if [ $# -eq 0 ]
then
  echo Usage : qput [dir/]file
  exit 0
fi
   
bn=$(basename $1)
dn=$(dirname $1)
   
echo upload $1
cd /data/www/grognon/
ftp -in ftp.arad.free.fr << FIN
user username
cd $dn
lcd $dn
put $bn
bye
FIN
Envoyer tous les fichiers du site

L'arborescence est supposée être celle de Qlam

Racine : *.html
Racine/css : *.css
Racine/img : *.img
...

#!/bin/bash
cd /data/local/
ftp -inv ftp.server.net<<FIN
user grognon
mput *.html
lcd qlm
cd qlm
mput *.qlm
cd ../css
lcd ../css
mput *.css
cd ../img
lcd ../img
mput *.*
cd ../doc
lcd ../doc
mput *.*
cd ../script
lcd ../script
mput *.js
bye
FIN

Table des matières

Activer et désactiver les Beep

$ amixer set -c 0 Bepp 80% unmute
$ amixer set -c 0 Beep mute

Table des matières

Fichiers modifiés récemment

Fichiers modifiés ces derniers jours

# aujourd'hui
find . -mtime -1
# les trois derniers jours
find . -mtime -3

Fichiers modifiés ces dernières heures

# la dernière heure
find . -mmin +60 
# les 5 dernières heures 5*60 = 300
find . -mmin +300

Table des matières




Réalisé avec Qlam - LGPL