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/
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
16-May-2010
today=$(date +%d-%b-%Y)
echo $today
16-May-2010
repeting an argument
mkdir /path/to/exampledir
cd !$
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 $
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
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
~.
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
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
iptables -D INPUT 34 # vires la ligne 34
history clean / dmesg clean
history -c
dmesg -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
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
~.
Sympa mais la Fork Bomb n’a pas vraiment lieu d’être là, surtout en 2eme position…
Lire ligne par ligne un fichier:
Lire un fichier ligne par ligne et stocker chaque “colonne” dans une variable (IFS correspond au délimiteur):
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.
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.
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}
@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/