Snippets tagged "linux"
Utiliser un retour charriot dans un remplacement sed
Quand on veut utiliser un retour charriot (\n) dans un remplacement avec sed, on commence généralement par essayer ce genre de truc :
$ echo "one,two,three" | sed "s/,/\n/g"
Mais ça ne fonctionne pas ; il faut donc émuler le retour charriot, ce qui est faisable de cette façon :
$ echo "one,two,three" | sed "s/,/\\`echo -e '\n\r'`/g"
Bannir les cronmails
Si vous utilisez crontab, vous recevez sans doute souvent des emails à l'adresse du propriétaire du compte avec le détail des sorties standards et d'erreurs suite à l'execution des commandes programmées.
Pour éviter ces emails, on peut systématiquement masquer ces sorties lors de l'appel à la ligne, par exemple dans un crontab :
*/10 * * * * ./myprogram 1> /dev/null 2> /dev/null
Extraire toutes les chaînes d'un fichier binaire
En fait, c'est tout bête (mais qu'est ce que ça peut être utilie !) :
$ strings /usr/bin/iconv
Written by %s.
char
UCS-4
conversion from %s unsupported
conversion to %s unsupported
conversion from %s to %s unsupported
try '%s -l' to get the list of supported encodings
[...]
Comparer les différences entre deux répertoires
C'est tout con, mais encore faut-il le savoir :)
$ diff -rq rep1/ rep2/
Dump de toutes les bases d'un serveur MySQL dans des fichiers multiples
Si comme moi vous avez sous la main un serveur abritant plusieurs (dizaines, voir centaines de) bases de données, le jour où une des bases de données plante et qu'on vous demande de la restaurer, je vous souhaite bien du courage si vous n'avez qu'un résultat de mysqldump --all-databases sous la main.
Afin de pallier ce problème, j'ai écris ce script bash qui vous facilitera bien la vie !
Au programme :
sauvegarde des dump de chaque base dans des fichiers séparés compressés en gzip, eux même situés dans un dossier nommé en fonction de la date
suppression automatique du dump effectué il y a 7 jours.
Le script est destiné à être exécuté par un cron, par exemple toutes les nuits.
#!/bin/bash #paramètres de configuration du script #completer ici par le nom d'un utilisateur autorisé à dumper toutes vos bases : strMysqlUser="" #completer ici par le mot de passe de cet utilisateur : strPassword="" # completer ici par le chemin vers le repertoire de travail où va se trouver le dump # il est possible de préfixer le répertoire : # "/rep/de/travail/prefix_" donnera alors /rep/de/travail/prefix_20070505 repTravail="" #mémorisation de la date du jour et de la date d'il y a 7 jours dateActuelle=$(date +%Y%m%d) datePassee=$(date --date '7 days ago' +%Y%m%d) #Suppression de la sauvegarde d'il y a 7 jours echo "["$(date +%F\ %X)"] Suppression des dump du "$datePassee repTravailPasse=$repTravail$datePassee rm -R $repTravailPasse # début du dump echo "["$(date +%F\ %X)"] Dump du : "$dateActuelle repTravailActuel=$repTravail$dateActuelle mkdir $repTravailActuel # récupération de la liste des bdd, "tail -n +2" est présent pour ne pas récupérer le titre "Databases" renvoyé par mysql listDatabase=$(mysql --user=$strMysqlUser --password=$strPassword --exec="SHOW DATABASES;" | tail -n +2) #dump de chaque base dans un fichier for lineDatabase in $listDatabase do echo "["$(date +%F\ %X)"] Debut du dump de la base "$lineDatabase" vers "$repTravailActuel mysqldump --user="$strMysqlUser" --password="$strPassword" "$lineDatabase" | gzip > "$repTravailActuel"/"$lineDatabase".sql.gz echo "["$(date +%F\ %X)"] Dump compressé dans "$repTravailActuel"/"$lineDatabase".sql.gz" done echo "["$(date +%F\ %X)"] Fin de la sauvegarde" exit 0
Raccourcis pour changer de bash rapidement
Beaucoup de monde connait le ctrl+alt+FX (X allant de 1 à 6 pour les sessions de terminal, et au dessus pour les sessions graphiques)
Je viens de découvrir par hasard le alt+super pour passer rapidement à la console suivante. (super étant assigné à la touche windows sur les claviers prévus pour fonctionner avec les systèmes de Microsoft)
Rendre l'execution d'un programme insensible aux déconnexions
On peut utiliser l'utilitaire nohup :
$ nohup batch_script.sh
CTRL+Z + bg mettront la tâche en arrière plan.
Lancer eclipse avec la JVM de Sun
GCJ c'est gentil, mais ça rame. Alors Eclipse avec GCJ... :/
Pour y remédier, on peut lancer Eclipse en forçant la JVM (update-alternatives reste sourd aux incantations à ce niveau)
/usr/bin/eclipse -vm /usr/lib/jvm/java-1.5.0-sun/jre/bin/java -vmargs -Xmx256M
On notera aussi la limitation de mémoire vive utilisable ;)
Pour installer la JVM de Sun si elle n'est pa sprésente sur le système :
sudo apt-get install sun-java5-jre
Lister le matériel de sa machine
Lister toutes les informations de la machine :
$ sudo lshw
Il existe la possibilité d’exporter le résultat dans une page *.html :
$ sudo lshw -html > votre_nom_de_fichier.html
via http://www.pastanque.be/splitsch/ubuntu/106/106.html et le planet ubuntu-fr (http://planet.ubuntu-fr.org)
Vérifier l'empreinte md5 d'une image ISO
Avec md5sum :
$ md5sum feisty-desktop-i386.iso
Comparer l'empreinte de l'image ISO avec celle du CD gravé :
Trouver le périphérique à vérifier :
$ cat /etc/fstab | grep cdrom
Vérification :
$ md5sum /dev/hdb
Sécuriser /tmp
Beaucoup de script-kiddies s'amusent beaucoup avec le répertoire /tmp, par défaut aisément accessible et donc réceptacle à executables falacieux de tous poils.
Voici une méthode permettant de remplacer ce point de montage par un nouveau, de 40Mo mais dont la particularité sera de ne pas autoriser l'execution de programmes (héhé) :
# create a 40MB block device which will be the /tmp file system cd /root dd if=/dev/zero of=/root/tmpMnt bs=1024 count=40000 mkfs.ext3 -F /root/tmpMnt # mount it at /tmp mv /tmp /tmp.backup mkdir /tmp mount -o loop,noexec,nosuid,rw /root/tmpMnt /tmp chmod 0777 /tmp # make it so it is used on boot up if ! grep -qai tmpMnt /etc/fstab ; then echo "/root/tmpMnt /tmp ext3 loop,noexec,nosuid,rw 0 0" >> /etc/fstab fi # check your syntax is ok mount -a # check that programs in /tmp will not run cp /bin/ls /tmp/ /tmp/ls
Pour remonter /tmp avec droits d'execution :
# umount /tmp # mount -o loop,rw /root/tmpMnt /tmp
Et remonter la partition sans les droits d'execution :
# umount /tmp # mount -o loop,noexec,nosuid,rw /root/tmpMnt /tmp
[Ubuntu] Intégrer Subversion dans Nautilus
SVN dans Nautilus via un clic droit, c'est possible :
$ sudo apt-get install nautilus-script-collection-svn
$ nautilus-script-manager enable Subversion
Merci glooze ;)
Ajouter automatiquement tous les nouveaux fichiers et dossiers dans un dépôt Subversion
The command line is my friend.
$ svn stat | grep ? | awk '{ print $2 }' | xargs svn add
Donner les pouvoirs d'administration système à un utilisateur
En admettant l'existance d'un utilisateur toto :
$ sudo adduser toto admin
L'utilisateur toto sera automatiquement ajouté aux sudoers et pourra donc executer le commande sudo en s'identifiant au moyen de son mot de passe.
Compter le nombre d'occurence d'un terme dans un répertoire
Dans tous les fichiers de type texte, calcul du nombre d'occurence d'une chaîne de caractère avec grep et wc :
$ grep -r require_once /path/to/scan | wc -l
1454
On peut aussi exclure certaines ressources ou répertoires, avec grep -v :
$ grep -r require_once /path/to/scan | grep -v .svn | wc -l
735
Changer les caractères <CR> en <LF>
Convertir rapidement et simplement les caractères \r en \n :
$ perl -pi -e 's#\r#\n#gs' /path/to/file
Effacer les fichiers trop volumineux
Find est un outil magnifiquement simple et puissant. Par exemple, pour supprimer tous les fichiers de plus de 500Kb dans le répertoire courant :
$ find . -type f -size +500 | xargs rm
Turn on Bash Smart Completion
Just edit /etc/bash.bashrc
Uncomment the following lines, by removing the # in the beginning of the lines:
#if [ -f /etc/bash_completion ]; then # . /etc/bash_completion #fi
Now, resource the modified file :
$ source /etc/bash.bashrc
Then try to tape apt-cache [TAB][TAB]
You will have this result in replacement of the habitual list of files and directories of your current path :
$ apt-cache
add dotty dumpavail pkgnames rdepends show showsrc unmet
depends dump gencaches policy search showpkg stats xvcg
It works with a lot of functions like cd (it will provide only directories), apt-get,...
It also enable code completion when using the sudo command.
Isn't it useful ?
Nota : The tip I give here is to activate Smart Completion for all users. If you want to activate it for only one user (or if you want to activate it but doesn't have write rights to /etc/bash.bashrc) you can modify your ~/.bashrc file and uncomment the same lines as described upper and resource it with
$ source ~/.bashrc
Trouver tous les fichiers modifiés récemment
To find files modified between the last x days and the last y days (x > y) in the current directory (x and y are integers) :
$ find ./ -ctime -x -ctime +y
Downgrader un package sous Ubuntu
On peut forcer la version d'un paquet à installer :
$ sudo aptitude install nomdupaquet=1.2.3-version2
Effacer les lignes vides d'un fichier
$ sed '/^$/d' fichier.txt
Installer DBDesigner4 sur Ubuntu
$ wget -c http://213.115.162.124/external/DBDesigner4/DBDesigner4-0.5.4-0.i586.rpm
$ wget -c http://prdownloads.sourceforge.net/skychart/libborqt-6.9.0-2.i386.rpm?use_mirror=switch
$ sudo alien DBDesigner4-0.5.4-0.i586.rpm
$ sudo alien libborqt-6.9.0-2.i386.rpm
$ sudo dpkg -i dbdesigner4_0.5.4-1_i386.deb
$ sudo dpkg -i libborqt_6.9.0-3_i386.deb
$ sudo ln -sf /usr/lib/DBDesigner4/*.so /usr/lib
Une dernière chose :
http://forums.mysql.com/read.php?113,59885,59926#msg-59926
Lister les process arboressentiels sous nunux
Au choix :
$ pstree
ou :
$ ps afx
Migrer un dépôt Subversion d'une machine à une autre
Sur l'ancienne machine :
$ svnadmin dump /var/lib/subversion/myproject > ~/myproject.svndump
$ scp ~/myproject.svndump new-server:
Sur la nouvelle machine :
$ svnadmin create /var/lib/subversion/myproject
$ svnadmin load /var/lib/subversion/myproject < ~/myproject.svndump
Via http://fashion.hosmoz.net/blog/post/2006/11/09/Migrer-un-depot-subversion
Compter le nombre de fichiers en fonction d'un pattern
$ ls -R /my/path/ | grep -v monpattern | wc -l
Dumper toutes les bases mysql et les réimporter
Dump :
$ mysqldump -uroot -p --all-databases --opt > export.sql
Reimport :
$ mysql -uroot -p < export.sql
Avec compression bz2 :
Export :
$ mysqldump -uroot -p --all-databases --opt | bzip2 > export.sql.bz2
Réimport :
$ bzcat export.sql.bz2 | mysql -uroot -p
Changer le nom d'une machine
En admettant que l'on veuille renommer la machine "anciennom" par "nouveaunom" :
$ sudo hostname nouveaunom
Puis remplacer anciennom par nouveaunom dans les fichiers /etc/hostname et /etc/hosts
Exporter et réimporter la liste des paquets installés
Genre pour reproduire la config d'un ancien serveur vers un nouveau serveur.
Export :
$ sudo dpkg --get-selections > selections.txt
Réimportation :
$ sudo dpkg --set-selections < selections.txt
Réinstallation des paquets :
$ sudo apt-get dselect-upgrade
Mirrorer un répertoire d'une machine à une autre via SSH
Pour synchroniser un répertoire d'une machine A vers une machine B en passant par SSH (avec preservation des droits) :
$ rsync -avz -e ssh someuser@server1.example.com:/var/www/ /var/www/
Utile également pour migrer une machine vers une autre.
[Ubuntu] Installer wifi-radar et network-manager
La gestion native par défaut du wifi sous Ubuntu laisse un poil à désirer, voici quelques outils intéressants pour y pallier :
$ sudo apt-get install wifi-radar network-manager-gnome
Note concernant Network Manager :
Il faut vider les paramètres de configuration des interfaces réseau dans le fichier /etc/network/interfaces et rebooter pour que le logiciel fonctionne correctement.
Installer les pilotes libres ATI sous Edgy
$ sudo apt-get update
$ sudo apt-get install linux-restricted-modules-$(uname -r)
$ sudo apt-get install xorg-driver-fglrx
$ sudo depmod -a
$ sudo aticonfig --initial
$ sudo aticonfig --overlay-type=Xv
À la fin du fichier /etc/X11/xorg.conf :
Section "ServerFlags" Option "AIGLX" "off" EndSection Section "Extensions" Option "Composite" "Disable" EndSection Section "DRI" Mode 0666 EndSection
Puis :
$ sudo shutdown -r now
Pour confirmer que ça marche :
$ fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: RADEON 9600 Generic
OpenGL version string: 2.0.6011 (8.28.8)
Trouver le nombre de slots mémoires disponibles/occupés sous Linux
Sous linux :
$ dmidecode | grep -i "size"
Ce qui renvoie un truc du genre :
Size: 512 MB Size: 512 MB Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed
Donc là on a 6 slots occupés par deux barrettes de 512Mo.
