Commandes et structures utiles GNU/Linux

Suppression de fichiers/dossiers listés dans un fichier

Commande pour supprimer des fichiers/dossiers listés dans un fichier texte. Tout cela en une seule commande.

grep -Ev "^($|#)" /tmp/liste_fichier_a_supprimer_avec_chemin_absolu.txt | xargs -n 1 rm -rf

La commande saute les lignes vides ou celles qui commencent pas un commentaire.

Avant d'exécuter la commande, lancer la même commande avec ls -l au lieu de rm -rf pour s'assurer du résultat.

Diff de deux listes de paquets pour lister les paquets à supprimer

Liste de paquets créée avec la commande suivante.

rpm -qa --qf "%{name}-%{version}-%{release}.%{arch}\n" | sort > /root/20111017-lstpnew

Diff entre les deux fichiers et création de la liste à passer à yum remove par exemple.

diff /root/20111017-lstp /root/20111017-lstpnew | grep ">" | sed -e "s/>//" | sed -e :a -e 'N;s+\n++;ta'

Création de fichiers de test avec dd

Utilisation de dd pour créer des fichiers aléatoires.

Créer un fichier de 100MB avec des blocs de 1MB.

dd if=/dev/urandom of=/chemin/fichier bs=1MB count=100

Commande wget

Récupérer/aspirer un site avec la commande wget en passant par un proxy.

wget -r -l 20 --http-user=user --http-password=mdp http://localhost/site_a_recuperer

Récupération uniquement de l'arborescence d'un site Web.

wget -r -l 20 --http-user=user --http-password=mdp --delete-after http://localhost/site_a_recuperer

Avec l'option –delete-after le téléchargement des fichiers est réalisé mais ils sont immédiatement supprimés. Ceci permet de créer l'arborescence totale des dossiers sans le contenu. C'est un moyen détourné pour exporter uniquement une arborescence de dossier. Cette commande est utilisée à l'origine pour simplement remplir un cache web. Dans ce cas, on veut simplement faire transiter les données dans le cache mais pas les conserver.

Arrêter les processus qui empêchent le démontage

fuser -mv /mnt/destination
fuser -mkv /mnt/destination

Afficher un fichier en octale ou hexadécimal

Afficher un fichier en octal.

od <nom_fichier>

Afficher un fichier en hexadécimal.

od -t x <nom_fichier>

Afficher la liste des modules installés de PHP

php -m

Gérer les librairies partagées

ldconfig -p | grep libXt.so.6

Ping d'une liste d'hôtes d'un réseau

for ip in `seq 1 255` ; do ping -c 2 172.20.15.$ip ; done > machine_list.txt

Version driver réseau

Connaître la version du driver réseau d'une carte Ethernet.

ethtool -i eth0

Substitutions de termes sur une liste de fichiers triés

Commande utilisé pour changer un namespace sur toutes les pages dokuwiki qui contiennent le terme recherché.

grep -i -r -o sub-sys * | awk -F : '{print $1}' | uniq | xargs -n 1 sed -e 's+doc_imf:sub-sys::+imf:docs:+g'

Extended ACL

Modification de l'accès du /home/usertest pour qu'il soit accessible en lecture par le compte usertest2.

setfacl -m user:usertest2:r-x /home/usertest
getfacl /home/usertest
getfacl --omit-header /home/usertest

à tester

Appliquer des ACL d'un dossier vers un autre directement.

getfacl <dossier1> | setfacl <dossier2>
getfacl <file-with-acl> | setfacl -f - <file-with-no-acl>

getfacl /home/stephane.boireau/Docs/stephane.boireau.txt > fichiersteph.acl
se3pdc:~# cd /
se3pdc:/# setfacl --restore=/root/fichiersteph.acl

Changer de clavier en commande

Pour basculer du clavier en Azerty (fr) ou en Qwerty (us) entrer les commandes suivantes.

setxkbmap fr
setxkbmap us

Si il n'y a pas de serveur X sur la machine, on pourra utiliser ces commandes.

loadkeys fr
loadkeys us

Sous Windows, la combinaison est Alt+Shift qui permet de passer d'un mode à l'autre.

Conversion d'un fichier d'un charset vers un autre

iconv --from-code=ISO-8859-1 --to-code=UTF-8 ./oldfile.htm > ./newfile.html

Ventilateur carte graphique ATI

Afficher la vitesse du ventilateur.

aticonfig --pplib-cmd "get fanspeed 0"

Modifier la vitesse à 60%.

aticonfig --pplib-cmd "set fanspeed 0 60"

Défilement écran

Arrêter et reprendre le défilement à l'écran. Pratique pour le boot par exemple.

Ctrl+s (arrête le défilement à l'écran)
Ctrl+q (relance le défilement à l'écran)

Connaitre IP publique

Commande qui récupère l'ip publique depuis une machine.

wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1

Vérifier la validité de structure XML

xmlwf <nom_fichier_xml>

Suppression de paquets de langues inutiles Mandriva

rpm -qa | grep "^aspell" | grep -v aspell-0.60 | grep -v aspell-fr | grep -v aspell-en | xargs -n 1 urpme
rpm -qa | grep "^firefox" | grep -v firefox-5.0.1 | grep -v firefox-fr | xargs -n 1 urpme
rpm -qa | grep "^kde-l10n" | grep -v kde-l10n-fr | grep -v kde-l10n-en | xargs -n 1 urpme
rpm -qa | grep "^libreoffice-l10n" | grep -v libreoffice-l10n-fr | xargs -n 1 urpme
rpm -qa | grep "^mozilla-thunderbird" | grep -v mozilla-thunderbird-5.0.3 | grep -v mozilla-thunderbird-fr | xargs -n 1 urpme
rpm -qa | grep "^myspell" | grep -v myspell-fr_FR | xargs -n 1 urpme
urpme voikko-fi
rpm -qa | grep "^locales" | grep -v locales-2.13 | grep -v locales-fr | grep -v locales-en | xargs -n 1 urpme
urpme --auto-orphans

Affichage processus

ps -eo comm,pid,user
grep --color denied /var/log/audit/audit.log
ps -fu <nom_user>

Bind mount

Test bind mount sur un FS CIFS existant dans l'arborescence d'un compte.

[root@srv01 ]# mkdir -p /data/info/passage/mnt/TRM_DHT
[root@srv01 ]# mount -o bind /mnt/TRM_DHT /data/info/passage/mnt/TRM_DHT/

SElinux

Voir permissions SElinux

ll -Z /var/ftp

Crash commandé

Déclencher un crash de la machine.

echo c > /proc/sysrq-trigger

Informations processus

Voir les infos du processus.

/proc/22413/fd

Structures GNU/Linux

Gestion des logs en shell

Pour intercepter tout ce qui se passe à l'écran dans un ficher de log sans ajouter une redirection (| tee -a $LOG) à chaque instruction.

#!/bin/bash
LOG=/var/log/fichierdelog.log
(
echo -n « Passage de /usr en ro »
mount -o remount, ro /usr
echo -n "Désactivation de l’USB"
modprobe -r USB
) 2>&1 | tee -a $LOG
exit 0

Plus d'informations : http://stackoverflow.com/questions/692000/how-do-i-write-stderr-to-a-file-while-using-tee-with-a-pipe

Script sysv

Fichier qui décrit comment créer un script sysv propre.

/usr/share/doc/initscripts-9.03.40/sysvinitfiles