Tag Archive for 'Bash'

Binstats - L’inventaire de vos binaires

Outre le fait de combiner agilement plusieurs fonctions en une, binstats est un shell script qui vous dira quels sont les pauvres petits programmes orphelins foisonnants sur votre systèmes.

Vous aurez ainsi, le nombre d’exécutables classés par types (ELF, QMagic, liés statiquement, …) , les scripts, les binaires non strippés, setuid, partageant des libs absentes, le nombre de partages des libs, les libs inutiles et les packages qui en découlent.

Sous debian :

apt-get install binstats
binstats

Le résultat sera dans un fichier texte : binstats.log


  Partager sur Wikio

Bash - $PATH le chien

Vous connaissez sans doute la variable prédéfinie: $PATH.

>echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/user/bin

Pas trop visible ?

Dans votre .bashrc :
path()
{
oldIFS=$IFS
IFS=:
printf "%s\n" $PATH
IFS=$oldIFS
}

Et PATH le chien :
>path
/usr/local/bin
/usr/bin
/bin
/usr/bin/X11
/usr/games
/home/user/bin


  Partager sur Wikio

Google dans sa coquille

goosh.org propose un shell pour faire vos recherches en ligne de commande.

Vu sur www.mfavez.com.

—————————————————————————————————-


  Partager sur Wikio

OSD - Afficher les prévisions météo sur son écran

Voila comment afficher les prévision météo sur son écran avec OSD (On Screen Display)

  1. Récupérer le flux RSS associé aux informations météo de votre région sur weather.com
  2. Afficher la météo via osd_cat
    Installer le paquet sudo apt-get install xosd-bin
  3. Créer un raccourci clavier dans le ~/.xbindkeysrc
    Installer le paquet sudo apt-get install xbindkeys

Pour ma ville, j’ai ajouté les 2 lignes suivantes dans mon .xbinkeysrc :

"wget 'http://fr.weather.com/rss-Vallauris-FRXX5403' -O /dev/stdout 2> /dev/null | grep '°' | sed -e 's,°C,°C,g' -e 's,.*CDATA\[\(.*\)\]\]>.*,\1,’ | osd_cat -A left -p bottom -c green -o 330 -O 1 -f -*-helvetica-*-r-*-*-24-*-*-*-*-*-*-* -P 50 -d 8″
shift + F2

Appeler le raccourci clavier:
en appuyant sur les touches MAJ+F2, j’ai les prévisions météo qui s’affichent.


  Partager sur Wikio

Sauvegarder un blog wordpress sur une clef usb

Objectif

Sauvegarder/Restaurer un blog de type Wordpress:

  • sauvegarde des fichiers PHP
  • export SQL de la base de données

Langage de script utilisé: Bash

Script de Sauvegarde

wp-backupblog.sh

#!/bin/bash
# wp-backupblog.sh - Backup Wordpress Blog
# version: 0.1
# Author: Benjamin Baudouin
# http://www.benjaminbaudouin.com
DEVICE=/dev/sda1
SRCDIR=/var/www/wordpress
USBKEYDIR=/media/usbkey/
TMPDIR=/tmp/backupblog/
ARCHIVE=blog.$(date +%Y%m%d).tar.gz
ARCHIVE_SQL=blog.$(date +%Y%m%d).sql
MYSQL_USER=root
MYSQL_PASS=*****************
MYSQL_DB=wordpress
#creation du repertoire tmp
if [ ! -e ${TMPDIR} ]
then
mkdir ${TMPDIR}
fi
#evaluation de la taille du blog
echo -e “Taille du blog (non compresse):”
du -sh ${SRCDIR}
#creation de l’archive (fichiers sources)
echo -e “Creation de l’archive ${ARCHIVE} …”
cd ${SRCDIR}
tar cf - ${SRCDIR} | gzip > ${TMPDIR}${ARCHIVE}
echo -e “Taille du blog (archive compresse .tar.gz):”
du -sh ${TMPDIR}${ARCHIVE}
#creation de l’archive (fichier SQL)
echo -e “Creation de l’archive ${ARCHIVE_SQL} …”
mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} > ${TMPDIR}${ARCHIVE_SQL}
echo -e “Taille du blog (archive .sql):”
du -sh ${TMPDIR}${ARCHIVE_SQL}
echo -e “Taille total blog”
du -sh ${TMPDIR}
#si pas d’automount, montage manuel
mount ${DEVICE} ${USBKEYDIR}
#copy
cp -rf ${TMPDIR} ${USBKEYDIR}
echo -e “\nCopie sur la clef usb …”
#demontage
umount ${DEVICE}
if [ $? -eq 0 ]
then
echo -e “\nDone”
fi
exit 0

Script de Restauration

wp-restoreblog.sh

#!/bin/bash
# wp-restoreblog.sh - Restore Wordpress Blog
# version: 0.1
# Author: Benjamin Baudouin
# http://www.benjaminbaudouin.com
DEVICE=/dev/sdb1
USBKEYDIR=/media/usbkey
BACKUPDIR=/media/usbkey/backupblog/
SRCDIR=/var/www/wordpress
SQLFILE=`find ${BACKUPDIR}*.sql`
MYSQL_USER=root
MYSQL_PASS=
#meme si pas d'automount, montage manuel
if [ ! -e ${USBKEYDIR} ]
then
mkdir ${USBKEYDIR}
fi
mount ${DEVICE} ${USBKEYDIR}
cp ${BACKUPDIR}*.tar.gz /
tar xzf /*.tar.gz
chown www-data:www-data ${
SRCDIR}
mysql -u${MYSQL_USER} -p${MYSQL_PASS} < ${SQLFILE}
umount ${DEVICE}


Accéder à la page projet


  Partager sur Wikio

Bash - Raccourcis

tab   <--->   auto complétion pour les fichiers et les dossiers
^[chaîne 1]^[chaîne 2]^   <--->   lance la dernière commande en remplaçant la chaîne 1 par la chaîne 2
!-[n]   <--->   rappelle la commande lancée il y a n commandes
!!   <--->   lance la dernière commande
!?[chaîne]   <--->   lance la dernière commande terminant par la chaîne de caractères
!?[chaîne]?   <--->   lance la dernière commande contenant la chaîne de caractères
![chaîne]   <--->   lance la dernière commande commençant par la chaîne de caractères
![n°]   <--->   rappelle la commande n°... de l'historique
!#   <--->   lance la plus ancienne commande de l'historique
[commande] !^   <--->   lance la commande avec le premier argument de la commande précédente
[commande] !:[n]-[m]   <--->   lance la commande avec les arguments n à m de la commande précédente
[commande] !:[n°]   <--->   lance la commande avec l'argument n°... de la commande précédente
[commande] !$   <--->   lance la commande avec le dernier argument de la commande précédente
Alt + .   <--->   colle le dernier mot de la ligne précédente
Alt + b   <--->   déplace le curseur d'un mot vers la gauche
Alt + c   <--->   met en majuscule la lettre courante, en minuscules les autres lettres du mot courant, puis se place au mot suivant
Alt + d   <--->   efface le mot suivant
Alt + f   <--->   déplace le curseur d'un mot vers la droite
Alt + t   <--->   échange le mot courant et le mot précédent
Ctrl + _   <--->   Annuler les dernières modifications (rester appuyé)
Ctrl + a   <--->   déplace le curseur en début de ligne
Ctrl + c   <--->   envoie le signal SIGINT au processus en cours
Ctrl + d   <--->   efface le caractère courant, ou déconnecte (logout) si la ligne est déjà vide
Ctrl + e   <--->   déplace le curseur en fin de ligne
Ctrl + h   <--->   efface le dernier caractère
Ctrl + k   <--->   coupe tout à droite du curseur
Ctrl + l   <--->   efface l'écran (commande clear)
Ctrl + n   <--->   commande suivante (équivalent à la touche flèche bas)
Ctrl + o   <--->   exécute la commande (touche entrée)
Ctrl + p   <--->   commande précédente (équivalent à la touche flèche haut)
Ctrl + q   <--->   fait apparaître la saisie / relance l'affichage
Ctrl + r   <--->   recherche dans l'historique (Ctrl + r pour remonter à la chaîne précédente)
Ctrl + s   <--->   masque la saisie / arrête l'affichage (touche pause)
Ctrl + t   <--->   permet d'inverser deux lettres
Ctrl + u   <--->   coupe tout à gauche du curseur
Ctrl + w   <--->   coupe le mot à gauche du curseur
Ctrl + y   <--->   colle ce qui a été effacé à gauche du curseur (suite à un Ctrl + u)
Ctrl + z   <--->   passe le processus en cours en arrière plan
Echap, 10, A   <--->   répète 10 fois le caractère A
Echap, 5, Ctrl + q, Ctrl + v, 9   <--->   répète 5 fois le chiffre 9

Source
Autre article : bash-variables-speciales-tests-subsitutions-et-autres


  Partager sur Wikio

Expect pour les rebonds ssh

Aprés un sudo apt-get install expect, voici le contenu du fichier ssh-bound :

#!/usr/bin/expect -f
# des que la chaine de caractère attendu en retour est matché,
# on attend 1 seconde et on envoit notre chaine
set timeout 1
# la 1ere commande qui est executée sur notre machine
# c’est le 1er saut
spawn ssh user@host1
# on “attend” du shell qu’il nous renvoit la chaine “assword”
expect “*?assword :”
# on envoit notre pw, \r pour retour chariot
send — “MON_SUPER_PASS_EN_CLAIR\r”
# le prompt
expect “*05b\$ ”
# 2eme saut
send — “ssh user@host2\r”
expect “*?assword :”
send — “MON_SUPER_PASS_EN_CLAIR\r”
expect “*05b\$ ”
# 3eme saut#!/usr/bin/expect -f
# des que la chaine de caractère attendu en retour est matché,
# on attend 1 seconde et on envoit notre chaine
set timeout 1
# la 1ere commande qui est executée sur notre machine
# c’est le 1er saut
spawn ssh user@host1
# on “attend” du shell qu’il nous renvoit la chaine “assword”
expect “*?assword :”
# on envoit notre pw, \r pour retour chariot
send — “MON_SUPER_PASS_EN_CLAIR\r”
# le prompt
expect “*05b\$ ”
# 2eme saut
send — “ssh user@host2\r”
expect “*?assword :”
send — “MON_SUPER_PASS_EN_CLAIR\r”
expect “*05b\$ ”
# 3eme saut
send — “ssh user@host3\r”
expect “*?assword :”
send — “MON_SUPER_PASS_EN_CLAIR\r”
expect “*05b\$ ”
# expect nous rend la main
interact
send — “ssh user@host3\r”
expect “*?assword :”
send — “MON_SUPER_PASS_EN_CLAIR\r”
expect “*05b\$ ”
# expect nous rend la main
interact

Source


  Partager sur Wikio

Bash - Elément aléatoire d’un tableau


#!/bin/bash
tab=("a" "b" "c")
element=${tab[$RANDOM%${#tab[*]}]}
echo “$element”

Résultats aléatoires:
b
a
a
a
c


  Partager sur Wikio

Bash - Matrice

1. Les datas (pouvant être une sortie de commande) :
>cat matrix.txt
l1c1 l1c2 l1c3
l2c1 l2c2 l2c3
l3c1 l3c2 l3c3

2. Tableau des lignes :
>IFS=$’\n’ tab_lignes=($(cat matrix.txt))

3. Tableau des colonnes :
>IFS=’ ‘ tab_col=(${tab_lignes[0]})

4. Le script :
>ligne=0; while [ $ligne -lt ${#tab_lignes[*]} ]
> do
> col=0; IFS=’ ‘ tab_col=(${tab_lignes[${ligne}]})
> while [ $col -lt ${#tab_col[*]} ]
> do
> printf “ligne %.2d, colonne %.2d, valeur %s\n” $ligne $col ${tab_col[${col}]};
> col=$((col+1))
> done
> ligne=$((ligne+1))
> done
ligne 00, colonne 00, valeur l1c1
ligne 00, colonne 01, valeur l1c2
ligne 00, colonne 02, valeur l1c3
ligne 01, colonne 00, valeur l2c1
ligne 01, colonne 01, valeur l2c2
ligne 01, colonne 02, valeur l2c3
ligne 02, colonne 00, valeur l3c1
ligne 02, colonne 01, valeur l3c2
ligne 02, colonne 02, valeur l3c3


  Partager sur Wikio

Bash - Variables spéciales, Tests, Subsitutions et Autres

Special Shell Variables
Variable Meaning
$0 Filename of script
$1 Positional parameter #1
$2 - $9 Positional parameters #2 - #9
${10} Positional parameter #10
$# Number of positional parameters
“$*” All the positional parameters (as a single word) *
“$@” All the positional parameters (as separate strings)
${#*} Number of command line parameters passed to script
${#@} Number of command line parameters passed to script
$? Return value
$$ Process ID (PID) of script
$- Flags passed to script (using set)
$_ Last argument of previous command
$! Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.

TEST Operators: Binary Comparison
Operator Meaning —– Operator Meaning
Arithmetic Comparison String Comparison
-eq Equal to = Equal to
== Equal to
-ne Not equal to != Not equal to
-lt Less than \< Less than (ASCII) *
-le Less than or equal to
-gt Greater than \> Greater than (ASCII) *
-ge Greater than or equal to
-z String is empty
-n String is not empty
Arithmetic Comparison within double parentheses (( … ))
> Greater than
>= Greater than or equal to
< Less than
<= Less than or equal to

* If within a double-bracket [[ ... ]] test construct, then no escape \ is needed.

TEST Operators: Files
Operator Tests Whether —– Operator Tests Whether
-e File exists -s File is not zero size
-f File is a regular file
-d File is a directory -r File has read permission
-h File is a symbolic link -w File has write permission
-L File is a symbolic link -x File has execute permission
-b File is a block device
-c File is a character device -g sgid flag set
-p File is a pipe -u suid flag set
-S File is a socket -k “sticky bit” set
-t File is associated with a terminal
-N File modified since it was last read F1 -nt F2 File F1 is newer than F2 *
-O You own the file F1 -ot F2 File F1 is older than F2 *
-G Group id of file same as yours F1 -ef F2 Files F1 and F2 are hard links to the same file *
! NOT (inverts sense of above tests)

* Binary operator (requires two operands).

Parameter Substitution and Expansion
Expression Meaning
${var} Value of var, same as $var
${var-DEFAULT} If var not set, evaluate expression as $DEFAULT *
${var:-DEFAULT} If var not set or is empty, evaluate expression as $DEFAULT *
${var=DEFAULT} If var not set, evaluate expression as $DEFAULT *
${var:=DEFAULT} If var not set, evaluate expression as $DEFAULT *
${var+OTHER} If var set, evaluate expression as $OTHER, otherwise as null string
${var:+OTHER} If var set, evaluate expression as $OTHER, otherwise as null string
${var?ERR_MSG} If var not set, print $ERR_MSG *
${var:?ERR_MSG} If var not set, print $ERR_MSG *
${!varprefix*} Matches all previously declared variables beginning with varprefix
${!varprefix@} Matches all previously declared variables beginning with varprefix

* Of course if var is set, evaluate the expression as $var.

String Operations
Expression Meaning
${#string} Length of $string
${string:position} Extract substring from $string at $position
${string:position:length} Extract $length characters substring from $string at $position
${string#substring} Strip shortest match of $substring from front of $string
${string##substring} Strip longest match of $substring from front of $string
${string%substring} Strip shortest match of $substring from back of $string
${string%%substring} Strip longest match of $substring from back of $string
${string/substring/replacement} Replace first match of $substring with $replacement
${string//substring/replacement} Replace all matches of $substring with $replacement
${string/#substring/replacement} If $substring matches front end of $string, substitute $replacement for $substring
${string/%substring/replacement} If $substring matches back end of $string, substitute $replacement for $substring
expr match “$string” ‘$substring’ Length of matching $substring* at beginning of $string
expr “$string” : ‘$substring’ Length of matching $substring* at beginning of $string
expr index “$string” $substring Numerical position in $string of first character in $substring that matches
expr substr $string $position $length Extract $length characters from $string starting at $position
expr match “$string” ‘\($substring\)’ Extract $substring* at beginning of $string
expr “$string” : ‘\($substring\)’ Extract $substring* at beginning of $string
expr match “$string” ‘.*\($substring\)’ Extract $substring* at end of $string
expr “$string” : ‘.*\($substring\)’ Extract $substring* at end of $string

* Where $substring is a Regular Expression.

Miscellaneous Constructs

Expression Interpretation
Brackets
if [ CONDITION ] Test construct
if [[ CONDITION ]] Extended test construct
Array[1]=element1 Array initialization
[a-z] Range of characters within a Regular Expression
Curly Brackets
${variable} Parameter substitution
${!variable} Indirect variable reference
{ command1; command2; . . . commandN; } Block of code
{string1,string2,string3,…} Brace expansion
{a..z} Extended brace expansion
{} Text replacement, after find and xargs
Parentheses
( command1; command2 ) Command group executed within a subshell
Array=(element1 element2 element3) Array initialization
result=$(COMMAND) Command substitution, new style
>(COMMAND) Process substitution
<(COMMAND) Process substitution
Double Parentheses
(( var = 78 )) Integer arithmetic
var=$(( 20 + 5 )) Integer arithmetic, with variable assignment
(( var++ )) C-style variable increment
(( var– )) C-style variable decrement
(( var0 = var1<98?9:21 )) C-style trinary operation
Quoting
“$variable” “Weak” quoting
’string’ ‘Strong’ quoting
Back Quotes
result=`COMMAND` Command substitution, classic style

Source


  Partager sur Wikio