• Accueil
  • Curriculum vitae
  • Contact
David Mercereau Le savoir n'est rien s'il n'est pas partagé

Tag Archives: Bash

[FredgniX] diff et patch en dix minutes

21 mars 2013 10 h 34 min / 1 Comment / David

Je me permets ici de reprendre un article du blog de FredgniX, qui a été fermé (ce que je trouve bien dommage, je revenais souvent sur cet article) je le pose donc ici pour en garder trace… (retrouvé sur webarchive)

Le guide de dix minutes sur diff et patch

[...]

Voici un guide rapide sur diff et patch qui vous aidera dans ces situations en décrivant les outils de la façon la plus communément utilisée. Il vous en dira suffisamment pour commencer de la bonne façon. Plus tard, vous pourrez apprendre les tenants et les aboutissants de diff et patch à votre guise, en utilisant les pages de manuel.

Appliquer des patchs avec patch

Pour appliquer un patch à un seul fichier, mettez vous dans le dossier où se trouve le fichier à modifier, le patch et appelez patch :

1
patch < foo.patch

Ces instructions assument que le patch est distribué dans un format unifié, qui identifie le fichier sur lequel appliquer le patch. Sinon, vous pouvez le préciser avec la commande :

1
patch foo.txt < bar.patch

Appliquer des patches à un dossier complet (sûrement le cas le plus commun) est similaire, mais vous devez faire attention en identifiant le « niveau p ». Cela signifie que, dans les fichiers de patch, les fichiers à patcher sont identifiés par des noms de chemins qui peuvent être différents maintenant que les fichiers se trouvent sur votre ordinateur plutôt que sur l’ordinateur où le patch a été créé. Le niveau de profondeur p est fait pour ignorer les parties du nom de chemin afin qu’il puisse identifier les fichiers correctement. Le plus souvent un niveau de 1 fonctionnera, vous utiliserez donc :

1
patch -p1 < bar.patch

Vous devriez changer le répertoire source de haut niveau avant d’exécuter cette commande. Si un niveau p n’identifie pas correctement les fichiers à patcher, inspecter le patch pour repérer les noms complets d’accès aux fichiers. Si vous voyez un nom comme :

1
/users/stephen/package/src/net/http.c

Et que vous souhaitez modifier le fichier net/http.c, utilisez :

1
patch -p5 < baz.patch

En général, compter jusqu’à un pour chaque séparateur de chemin (barre oblique) que vous supprimez à partir du début du chemin, jusqu’à ce que ce que le chemin qui reste existe dans votre répertoire de travail. Le nombre atteint est le niveau p.

Pour effacer les effets d’un patch, utilisez l’option -R, comme ceci :

1
patch -p5 -R < baz.patch

Créer des patchs avec diff

L’utilisation de diff est simple si vous travaillez avec des fichiers ou des répertoires individuels entiers. Pour créer un patch pour un seul fichier que vous avez copié, renommé puis modifé, utilisez la commande :

1
diff -u original.c new.c > original.patch

Pour créer un patch pour une arborescence complète des sources, faire une copie de l’arbre :

1
cp -R original new

Apportez les modifications nécessaires dans le répertoire copié. Ensuite, créez un patch avec la commande suivante :

1
diff -rupN original/ new/ > original.patch

C’est tout ce dont vous avez besoin pour commencez à travailler avec diff et patch. Pour de plus amples informations, utilisez les pages de manuel :

1
2
man diff
man patch

Posted in: Informatique / Tagged: bash, diff, linux

[MiniTrick] Désactiver l’historique bash

29 janvier 2013 10 h 01 min / 2 Comments / David

Il est pratique de pouvoir désactiver l’historique du BASH. temporairement. Il vous suffit pour cela de taper la commande suivante :

Shell
1
unset HISTFILE

 

Posted in: Informatique / Tagged: bash, linux, mini, trick

Script de sauvegarde Mysql par base “mysql_dump.sh”

5 décembre 2012 12 h 00 min / David

EDIT – 13/05/2013 : v0.3 du script avec prise en compte des suggestions d’améliorations de David M + Trap

EDIT – 06/12/2012 : v0.2 du script avec prise en compte des commentaires de l’article

Un énième script de sauvegarde à plat de bases Mysql sur internet. Celui-ci crée un fichier texte (.sql) par base et compresse le tout ensuite.

J’utilise ce script depuis plus de 3 ans, ça tourne bien et surtout ça dépanne bien !

Attention : ce script est à coupler avec un système de sauvegarde complet et distant…

Préparation

Il faut créer un utilisateur Mysql (appelé dump) avec des droits restreints en lecture sur toutes les bases :

Shell
1
2
$ mysql -u root -p -e "CREATE USER 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE';"
$ mysql -u root -p -e "GRANT SELECT , SHOW DATABASES , LOCK TABLES , SHOW VIEW ON * . * TO 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;"

Le script

Copier le contenu du script dans un fichier mysql_dump.sh puis faite un chmod +x mysql_dump.sh afin de le rendre exécutable. Ajouter ensuite ce script dans vos tâches crons pour qu’il s’exécute toutes les nuits (par exemple).

Note : les remarques sont les bienvenus…

mysql_dump.sh
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
 
# Inspiré d'un script trouvé sur phpnews.fr (plus en ligne)
# Version 0.3 13/05/2013
 
# Script sous licence BEERWARE
 
set -eu
 
## Paramètres
USER='dump'
PASS='LEMOTDEPASSE'
# Répertoire de stockage des sauvegardes
DATADIR="/var/backups/mysql"
# Répertoire de travail (création/compression)
DATATMP=$DATADIR
# Nom du dump
DATANAME="dump_$(date +%d.%m.%y@%Hh%M)"
# Compression
COMPRESSIONCMD="tar -czf"
COMPRESSIONEXT=".tar.gz"
# Rétention / rotation des sauvegardes
RETENTION=30
# Exclure des bases
EXCLUSIONS='(information_schema|performance_schema)'
# Email pour les erreurs (0 pour désactiver
EMAIL=0
# Log d'erreur
exec 2> ${DATATMP}/error.log
 
## Début du script
 
ionice -c3 -p$$ &>/dev/null
renice -n 19 -p $$ &>/dev/null
 
function cleanup {
    if [ "`stat --format %s ${DATATMP}/error.log`" != "0" ] && [ "$EMAIL" != "0" ] ; then
        cat ${DATATMP}/error.log | mail -s "Backup MySQL $DATANAME - Log error" ${EMAIL}
    fi
}
trap cleanup EXIT
 
# On crée sur le disque un répertoire temporaire
mkdir -p ${DATATMP}/${DATANAME}
 
# On place dans un tableau le nom de toutes les bases de données du serveur
databases="$(mysql -u $USER -p$PASS -Bse 'show databases' | grep -v -E $EXCLUSIONS)"
 
# Pour chacune des bases de données trouvées ...
for database in ${databases[@]}
do
    echo "dump : $database"
    mysqldump -u $USER -p$PASS --quick --add-locks --lock-tables --extended-insert $database  > ${DATATMP}/${DATANAME}/${database}.sql
done
 
# On tar tous
cd ${DATATMP}
${COMPRESSIONCMD} ${DATANAME}${COMPRESSIONEXT} ${DATANAME}/
chmod 600 ${DATANAME}${COMPRESSIONEXT}
 
# On le déplace dans le répertoire
if [ "$DATATMP" != "$DATADIR" ] ; then
    mv ${DATANAME}${COMPRESSIONEXT} ${DATADIR}
fi
 
# Lien symbolique sur la dernier version
cd ${DATADIR}
set +eu
unlink last${COMPRESSIONEXT}
set -eu
ln ${DATANAME}${COMPRESSIONEXT} last${COMPRESSIONEXT}
 
# On supprime le répertoire temporaire
rm -rf ${DATATMP}/${DATANAME}
 
echo "Suppression des vieux backup : "
find ${DATADIR} -name "*${COMPRESSIONEXT}" -mtime +${RETENTION} -print -exec rm {} \;

Posted in: Informatique / Tagged: auto-hebergement, bash, debian, linux, mysql, planet-libre, sauvegarde, script, serveur, shell

Partage de mon fichier ~/.bash_aliases

30 novembre 2012 12 h 40 min / David

Le bash_aliases  grossomodo c’est un fichier qui se trouve dans votre $HOME qui contient des raccourcis de commandes. C’est très pratique quand on passe beaucoup de temps dans sont terminal…

Je partage le mien qui n’est ni plus ni moins qu’une compile de ce qu’on peut trouver ici où là et deux trois petites choses maison dont je ne suis pas peu fier…

~/.bash_aliases
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Eliminer les commentaires d'un fichier
alias cgrep="grep -E -v '^(#|$|;)'"
alias nocomment='cgrep'
 
# Reviens à faire  cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
function cpb() { cp $@{,.bak} ;}
# Crée une sauvegarde du fichier passé en paramètre, en rajoutant l'heure et la date
function bak() { cp "$1" "$1_`date +%Y-%m-%d_%H-%M-%S`" ; }
alias bak="bak"
alias back="bak"
 
# Êtres gentil avec les ressources de son système
function nicecool() {
    if ! [ -z "$1" ]
    then
        # Prendre en paramètre un pid
        ionice -c3 -p$1 ; renice -n 19 -p $1
    else
        # Si il n'y a pas de paramètre on nice le pid courant (le bash)
        ionice -c3 -p$$ ; renice -n 19 -p $$
    fi
}
alias niceprod="nicecool"
alias np="niceprod"
 
function extract() {
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)  tar xjf $1      ;;
            *.tar.gz)   tar xzf $1      ;;
            *.bz2)      bunzip2 $1      ;;
            *.rar)      rar x $1        ;;
            *.gz)       gunzip $1       ;;
            *.tar)      tar xf $1       ;;
            *.tbz2)     tar xjf $1      ;;
            *.tgz)      tar xzf $1      ;;
            *.zip)      unzip $1        ;;
            *.Z)        uncompress $1   ;;
            *)          echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}
alias extract="extract"
alias unall="extract"
 
# Bannir l'IP d'un méchant rapidement
function ban() {
    if [ "`id -u`" == "0" ] ; then
        iptables -A INPUT -s $1 -j DROP
    else
        sudo iptables -A INPUT -s $1 -j DROP
    fi
}
alias ban="ban"
 
# Divers petits raccourcis :
alias q='exit'
alias maj='sudo aptitude update && sudo aptitude safe-upgrade'
alias c='clear'
alias rm='rm --interactive --verbose'
alias wget='wget -c'
alias mv='mv --interactive --verbose'
alias cp='cp --verbose'
alias grepr='grep -r'
alias grep='grep -i --color'
alias tree="find . | sed 's/[^/]*\//|   /g;s/| *\([^| ]\)/+--- \1/'"
alias mkdir='mkdir -pv'
alias pg='ps aux | grep'
alias pl='ps faux | less'
#function mkcd () { mkdir $1 && cd $1 }
function mkcd() { mkdir -p "$@" && cd "$_"; }
alias mkcd="mkcd"
 
# Sources :
#  - http://root.abl.es/methods/1504/automatic-unzipuntar-using-correct-tool/
#  - http://forum.ubuntu-fr.org/viewtopic.php?id=20437&p=3

Si aucun de ces raccourcis ne s’applique une fois que vous avez relancé votre terminal vérifier que vous avez une référence au .bash_aliases dans votre fichier ~/.bashrc

~/.bashrc
Shell
1
2
3
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Et si vous avez des alias que vous jugez indispensable n’hésitez pas à les posters en commentaire…

Posted in: Informatique / Tagged: bash, linux, planet-libre, shell

Cours, apprentissage de la programmation shell

1 mars 2012 13 h 08 min / David

Pendant très longtemps j’ai chercher un site, un cours sur l’apprentissage du shell mais les moteurs de recherches ne me donnant pas pleine satisfaction, ayant toujours soif de plus plus plus de fonctionnalité, de savoir je commençais à désespérer.. jusqu’au jour ou je suis tomber par hasard sur le Guide avancé d’écriture des scripts Bash et la.. j’ai compris que le petit jésus existait… Donc si comme moi vous êtes une feignasse qui veut tous automatiser apprenez le shell

==> http://abs.traduc.org/

Posted in: Informatique / Tagged: bash, cours, shell

Scanner des ports en bash

1 mars 2012 13 h 08 min / David

Évite d’installer un logiciel… petit truc pratique..

HOST=127.0.0.1
for((port=1;port<=65535;++port));do echo -en "$port ";if echo -en "open $HOST $port\nlogout\quit" | telnet 2>/dev/null | grep 'Connected to' > /dev/null;then echo -en "\n\nport $port/tcp is open\n\n";fi;done

Source

Posted in: Informatique / Tagged: bash, linux, port, script, sécurité

Mémo – Couteau suisse linux

29 février 2012 18 h 55 min / David

htop : Un top mais en mieux (monitoring en temps réel coloré)

clamtk : Scanner les clés USB de vos utilisateurs Windows Clamtk

grep -E -v '^(#|$)' fic.conf : Décommenter un fichier de conf

trickle : Limite la bande passante d’une application!

cp /etc/apache2/apache2.conf{,.bak} Reviens a faire  cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak

tsocks : Faire passer le flux réseau dans un proxy socks netcat :

nc pour faire du client / serveur en bash

Posted in: Informatique / Tagged: bash, commande, linux

Post Navigation

1 2 Suivant »

Pas d’Anti-pub ?

Vous ne semblez pas disposer d'un filtre anti-pub sur votre navigateur. Je vous encourage à en installer un, c'est gratuit :

Télécharger un anti-publicité

Comprendre la démarche...

Articles récents

  • LA Licence Beerware
  • [FredgniX] diff et patch en dix minutes
  • pongSmtp.pl – Tester le bon fonctionnement de votre serveur mail
  • Linutop 3 – Adaptateur alimentation disque 2,5 pouces
  • Fabriquer un jeu de “Dames Chinoises”
  • [MiniTrick] Désactiver l’historique bash
  • Créer/publier un plugin wordpress simple : “Adblock invite”
  • Incitateur anti-pub… Pourquoi faire ?

Mots-clefs

anti-pub apt auto-hebergement bash bricolage commande contributions cours debian dep dns dovecot emailPoubelle grub hebergement ispconfig ldap libre linutop linux mail musique mysql ménage navigateur perl php planet-libre port postfix proxy publicité script serveur shell socks spam squid ssh sécurité ubuntu vie-privée windows wordpress xsshfs

Liens

  • Forge Zici Ma bébé forge
  • Xsshfs Interface Graphique pour sshfs
  • Zici.fr Services gratuits

Commentaires récents

  • David dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • David M. dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • David M. dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • David M. dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • Fred dans LA Licence Beerware
  • alexnogard dans [FredgniX] diff et patch en dix minutes
  • Nicolas dans pongSmtp.pl – Tester le bon fonctionnement de votre serveur mail
  • David dans [MiniTrick] Désactiver l’historique bash

Licence Beerware

Le contenu de ce blog est sous licence Beerware

Si on se rencontre un jour et que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en retour.

Le contenu de ce blog est sous licence Beerware
Infinity Theme by DesignCoral / WordPress