20/05/2010

bash and shell tips and tricks

Le but de cet l’article est de partager avec vous des petits “trucs”, que nous rédacteur geekfault utilisons dans nos consoles préférées tous les jours, et souhaitons échanger avec vous petits scarabées.

En faite mon idée est partie de ce petit délire que m’a sorti khemael :

tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"

Les astuces sont livrées de façon brute de fonderie.
Noob s’abstenir.

Nota Noob : Ne tappe pas une commande sur ton shell que tu ne comprends pas.

Some of madx’s tricks

Redirections

commande 1> fichier : Redirige stdout dans fichier
commande 2> fichier : Redirige stderr dans fichier
commande 2>&1       : Redirige stderr vers stdout
commande &> fichier : Redirige stdout et stderr dans fichier

Fork bomb ! Warning, ne pas utiliser ça sur un serveur non protégé :)

 f(){ f|f&};f

Bash and perl regexp

 for i in * ; do mv "$i" "`echo $i | perl -pe 's/foo_regex/bar/' `"; done
 for i in *.gif ; do convert "$i" "`echo $i | perl -pe 's/gif$/png/' `"; done

scp resume

 rsync --partial --progress -e ssh file user@host:/dir

Remote backup

 tar -cv / | ssh user@host -T -e none "cat > backup.tar"
 ssh root@host "tar -c /" | cat > backup.tar

burning

 mkisofs -v -R -r -V "dvd title" -o dvd.iso file1 file2 ...
 cdrecord -v -dao -fs=500m -dev=/dev/sg1 -data dvd.iso
 cdrecord -dev=/dev/sg1 blank=fast

perl regex sur un fichier

perl -pi -e 's/^(#)?TIMEZONE=.*$/TIMEZONE="Europe\/Paris"/' /etc/conf.d/clock

encode to theora/ogg

 ffmpeg -i whatever.avi -f ogg -vcodec libtheora -vb 2000k -acodec libvorbis -ab 128k -y whatever.ogg
  1. Tycale
    | #1

    Sympa mais la Fork Bomb n’a pas vraiment lieu d’être là, surtout en 2eme position…

  2. sd76
    | #2

    Lire ligne par ligne un fichier:

    while read i
    do
    echo $i
    done < fichier.txt

    Lire un fichier ligne par ligne et stocker chaque “colonne” dans une variable (IFS correspond au délimiteur):

    while IFS=; read col1 col2
    do
    echo “$col1 $col2”
    done < fichier.txt

  3. Mick_
    | #3

    il semble que la commande pour youtube ne marche pas. une erreur “404” apparait.
    (j’ai bien mis un champs dans la variable youtube_url)

    et oui, la commande fork est un peu mal placé…
    faudrait mettre un article pour “comment se protéger d’un fork” voir un lien pour en prévenir.

  4. | #4

    dans /etc/security/limits.conf :

    # Limit user processes to 100 processus
    * soft nproc 100
    * hard nproc 100

    # limits size of any one of users’ files” /etc/security/limits.conf
    * hard fsize 50000

    Grace à ça un utilisateur de ton système ne peux pas avoir plus de 100 processus.
    Un utilisateur de ton système ne peut pas posséder de fichiers supérieur à 50Mo.

  5. noob
    | #5

    for i in * ; do mv “$i” “`echo $i | perl -pe ‘s/foo_regex/bar/’ `”; done

    -> man rename

    `echo $i | perl -pe ‘s/gif$/png/’ `

    -> ${i/gif/png}

  6. madx
    | #6

    @noob
    “-> ${i/gif/png}”
    si le fichier s’appèle “gifts.gif” ça le renomme en “pngts.gif”

    De plus l’exemple donné est très basique mais l’intérêt de passer par perl est d’utiliser la puissance des regex, exemple : s/\D*(\d+)\.(gif|bmp|jpg|svg)$/plop_\1.png/

  1. Pas encore de trackbacks