20/05/2010

bash and shell tips and tricks

Some of bragon’s tricks

Perfect rsync + remote

#!/bin/sh
time /usr/bin/rsync \
        --rsh="ssh -2 -l root" \
        --verbose \
        --archive \
        --hard-links \
        --numeric-ids \
        --progress \
        --stats \
        --delete \
        --exclude "/proc/*" \
        --exclude "/sys/*" \
        --exclude "/vservers/*/proc/*" \
        --exclude "/vservers/*/dev/*" \
        --exclude "/vservers/*/sys/*" \
        --exclude "/data/*" \
   /vservers/sam/ gerontius:/vservers/sam/

config backup

cp /etc/httpd/conf/httpd.conf{,.bak}
for file in * ; do cp $file $file.bak; done

Afficher un calendrier rapidement

cal -3

La date d’aujourd’hui

date +%d-%b-%Y
16-May-2010

today=$(date +%d-%b-%Y)

echo $today
16-May-2010

repeting an argument

mkdir /path/to/exampledir
cd !$

Majuscule are useless

bragon@shaytan ~ $ shopt -s cdspell
bragon@shaytan ~ $ cd Downloads/
bragon@shaytan ~/Downloads $ cd
bragon@shaytan ~ $ cd downloads
Downloads
bragon@shaytan ~/Downloads $

Socket information sur ta workstation

ss -ari
ss -arn

Change user shell

chsh -s /bin/bash utilisateur # lui definir bash en tant que shell
chsh -s /bin/false utilisateur # pas de shell
chsh -s /bin/zsh utilisateur # zsh

iptables line del

iptables -L -n --line-numbers
iptables -D INPUT 34 # vires la ligne 34

history clean / dmesg clean

history -c
dmesg -c

petit script de screenshot

#!/bin/bash
export DISPLAY=":1"
/usr/bin/firefox --display :1 "$1" > /dev/null 2> /dev/null &
/bin/sleep 10
/usr/bin/import -window root -display :1 "$2"
killall firefox-bin

Se déconnecter d’un ssh quand on a timeout pour récupérer sa console

~.
  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