Certaines commandes Linux sont très pratiques, voir indispensables. Parce qu'il est impossible de retenir toutes les commandes, je vous propose à travers ce billet celles que j'utilise le plus souvent, ou qui sont tout simplement intéressantes et peu courantes. Voici mon mémo ou memento personnel, en libre accès. Ce billet est régulièrement mis à jour, n'hésitez pas à revenir, les dernières commandes ajoutées sont en haut.
Yum sans installer les mises à jour
yum list updates
yum list updates package-name
yum list updates "*apache*"
Effacer la console
clear effacera en laissant la possibilité de scroller alors que reset sera plus "radical" et ne le permet pas.
Appliquer des droits identiques à un dossier/fichier
Il est possible répliquer les droits sur un dossier / fichier sur un autre :
chown --reference=fichiersource fichiercible
chmod --reference=fichiersource fichiercible
Trouver des paquets (toutes distributions)
clé (NO_PUBKEY)
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C1289A29
ou :
wget -O- "http://pgp.mit.edu/pks/lookup?op=get&search=0x8382C95C29023DF9" | sudo apt-key add -
gpg --keyserver keyring.debian.org --recv-keys 3D36E936
awk, grep, sed, head, tail, sort, uniq, fmt, pr, tr, more, less
En bref toutes les commandes de filtrage.
Parser du html ou xml en bash : lire la 1ère occurrence "blabl" <domain>blabla<domain :
grep -m1 '<domain>' config-pf-bm.xml | awk 'gsub(/<domain>|<\/domain>/,x)' | xargs
équivalent :
grep -m1 '<domain>' config-pf-bm.xml | cut -f2 -d">"|cut -f1 -d"<" | xargs
xargs : supprime les espaces
Voici un autre exemple qui fonctionne uniquement avec des chiffres :
grep -Po '<div class="indice">\K[[:digit:]]*' monfichier.html
git
Cloner un dépôt (crée un répertoire "coucou" dans le répertoire courant) :
git clone https://git.server.tld/xxxxx/coucou.git
Mettre à jour à partir de git (se placer à la racine du répertoire local)
git pull
systemd
recharger systemd après modification d'un service :
systemctl daemon-reload
lancer un service :
systemctl start nginx.service
consulter le journal des erreurs :
journalctl -xn
journal avec avec plus de détails :
systemctl status nginx.service -l
Masquer commentaires et lignes vides :
avec sed :
more file.txt | sed '/ *#/d; /^ *$/d'
avec grep :
grep -v -e ^# -e ^$ file.txt
en prenant en compte d'autres caractères de commentaire :
grep -E -v '^(#|;|$|[ ]*#)' file.txt
Sauver les données d'un disque hors service
Bien utiliser netcat (nc) - en français
Savoir si une variable est vide et/ou définie
Recherche récursive d'une occurrence dans un répertoire
Supprimer les lignes en double
Répéter une commande
A l'aide de la commande watch. Pratique si vous attendez la création d'un fichier, etc. C'est l'équivalent du "tail -f" qui fonctionnerait avec n'importe quelle commande.
Installer Sudo sur Debian
Les meilleurs pratiques pour OpenSSL Server
Lister les cron (crontab) pour tous les utilisateurs
Adresse IP
Toutes distributions : configuration minimaliste.
QoS
Quelques mods connus pour servir HTTP : mod_bw, mod_cband, moq_qos
Sous Debian avec traffic control (tc) inclut dans le paquet iproute (qdisc, etc)
Rsnapshot
Bien utiliser la commande cd
Pour revenir au répertoire précédent :
cd -
+d'infos
Gestion des ACL (accesslist)
L’enchainement des commandes ("&&" ou "||" ou ";")
rsync (classique et via ssh)
Copie entre deux serveurs :
rsync -avz chemin_local/ root@remote:/chemin_distant/
Distant vers local :
rsync -avzh root@remote:/chemin/distant /chemin/local
Man Page [FR]
Informations sur la suppression "--delete'"
DNS
DNSmasq : Configuration de base (particularité "--domain-needed")
Masque la signature Apache/PHP (powered by...)
Activer SMART avec smartctl
smartctl --smart=on --offlineauto=on --saveauto=on /dev/sdX
Pour utiliser gsmartcontrol avec un disque USB qui ne remonte pas la table SMART :
smartctl -d sat,12 /dev/sdb
Correspond à :
gsmartcontrol --add-device /dev/sdb::sat,12
The format of the device is "<device>::<type>::<extra_args>", where type and extra_args are optional. This option is useful with --no-scan to list certain drives only. You can specify this option multiple times. Example: --add-device /dev/sda --add-device /dev/twa0::3ware,2 --add-device '/dev/sdb::::-T permissive'
Réglage d'heure décalée
Debian/Ubuntu (tz pour TimeZone) :
dpkg-reconfigure tzdata
Vérifier ensuite le fichier /etc/timezone
En cas de pépin modifier le fichier (UTC=no) :
/etc/default/rcS
Vider le contenu d'un fichier existant
> /mon/fichier.ext
ou :
cat /dev/null > /mon/fichier.ext
Lire des fichiers volumineux
php.ini
Recommandations des fonctions PHP à désactiver
Générer facilement un .htaccess
Expressions régulières (regex)
PHP (adaptable)
Connaitre les dépendances d'un .deb
dpkg-deb -I package.deb | grep Depends
Utiliser gdebi pour en résoudre un maximum :
apt-get install gdebi && gdebi package.de
Apt-get vs Aptitude
Installer une version spécifique d'un paquet (package)
apt-get install package_name=2.2.3
Lister les services qui tournent
initctl list
Pour vérifier qu'un service est en écoute :
nc -z -u HOSTNAME 514
-u = udp
Envoyer du contenu dans un serveur rsyslog :
echo "blogmotion" | ncat -u SERVERNAME 514
iotop, screen, dtach, multitail...
De nombreux outils comme le multitail sont peu connus et pourtant très pratiques : liste des outils.
Effectuer un reboot d'urgence à distance
Avant de prendre la voiture et d'aller au DC, procédure d'urgence à tenter pour le reboot :
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
Source
pensez aussi à utiliser les touches magiques "Sys Key" (+info)
Plus de réseau après changement matériel
Linux (Debian) stocke la relation entre adresse MAC et l’interface (eth0, eth1, etc), si changement hardware et donc d’adresse MAC, le système ne trouve plus l’adresse MAC associée à eth0. La nouvelle adresse MAC du système est alors associée à eth1, ce qui pose problème. Il faut donc reconfigurer le système en exécutant la commande suivante afin de supprimer le fichier contenant les correspondances MAC-ethX (ce fichier sera automatiquement recréé au prochain redémarrage) :
rm /etc/udev/rules.d/70-persistent-net.rules && reboot
Rechercher une occurrence dans un fichier
# grep -ri "*ma chaine*" *.log
motion/blog.log:bbbma chaineccc
blog/motion.log:ma chaine
ilove/blogmotion.log:ma chaine zzz
r : récursif dans les répertoires i : non sensible à la casse
Rechercher une occurrence dans un répertoire
Recherche dans un chemin absolu :
grep -lR "coucou" /var/www/
Dans un chemin relatif :
grep -lR "coucou" *
ou :
find . | xargs grep 'coucou' -sl
/etc/sources.list
Correspondance des sources : deb : Adresse de paquets binaires (compilés) deb-src : Adresse de paquets sources main : Les paquets principaux contrib : Les paquets plus vraiment supportés non-free : Les paquets de logiciels non libres (propriétaires) source
Synology
Astuces et tutoriels de config Commandes CLI (ligne de commande) Gérer la base de données d'indexation Vérifier table SMART d'un disque (sdx = lettre du disque: sda, sdb, ...)
smartctl -a /dev/sdx -d sat
Récupérer des données d'un RAID
Editer des partitions pas dans l'ordre dans la table
Paginer un résultat MySQL en ligne de commande
Redémarrer inetd (restart inetd)
Sur Debian :
/etc/init.d/openbsd-inetd restart
Pour le killer violemment (toutes distributions) :
killall -HUP inetd
UserMod
Ajouter un utilisateur dans un groupe : doc.
Serveur FTP chrooté avec ProFTPD
Serveur SFTP chrooté avec rssh
sur Debian Etch / Lenny
Manipuler les partitions
Trois commandes fondamentales:
Lister les UUID des partitions :
ls -l /dev/disk/by-uuid/
En affichant en plus le type de partition (système de fichier) :
blkid
ou :
lsblk
Voir l'espace disque restant :
df -h
Ajout d'une nouvelle partition ou d'un nouveau disque avec point de montage fstab (doc debian)
findmnt
Problèmes de Grub
Réinstaller Grub :
grub-install /dev/sda dpkg-reconfigure grub-pc
ou plus complet : http://ubuntuforums.org/showthread.php?t=1581099 il y a une différence importante entre Grub et Grub2 dans la numérotation des partitions (source):
- Sur Grub, la numérotation démarre à 0 pour les disques physiques ET pour les partitions. Exemple : /dev/hda1 ou /dev/sda1 sera nommé hd(0,0) par grub.
- Sur Grub2, elle démarre à 0 pour les disques physiques et à 1 pour le numéro de la partition. Exemple : /dev/hda1 ou /dev/sda1 sera nommé hd(0,1) par grub-pc.
Précaution pour éviter un panic à distance lors de le compilation à distance de GRUB.
Chrooter un environnement
Tout est là En version rapide depuis un LiveCD comme Ubuntu :
- sudo fdisk -l (pour déterminer le nom du disque depuis le LiveCD Ubuntu, exemple “/dev/sdxy″ - avec x le disque dur et y la partition.). Personnellement je préfère la commande blkid
- sudo mount /dev/sdxy /mnt
- sudo mount --bind /dev /mnt/dev
- sudo mount --bind /proc /mnt/proc
- sudo mount --bind /sys /mnt/sys
- sudo chroot /mnt
- apt-get install grub-pc (facultatif, seulement si vous êtes sous Ubuntu/Debian et souhaitez réinstaller)
- grub-mkconfig -o /boot/grub/grub.cfg (assurez-vous qu'aucun message d'erreur ne soit renvoyé)
- grub-install /dev/sdx (essayer grub-install --recheck /dev/sdxy si cela ne fonctionne pas)
- Ctrl+D (pour quitter le chroot)
- sudo umount /mnt/dev
- sudo umount /mnt
Compiler un noyau Debian
http://www.chicoree.fr/w/Compiler_un_noyau_Linux_sous_Debian
Comparer le contenu de deux répertoires (non récursif)
comm -3 <(ls /rep1/) <(ls /rep2/)
source
Récupérer la sortie d'une commande dans une variable
var=$(command-name-here
var=$(command-name-here arg1)
var=$(/path/to/command)
var=$(/path/to/command arg1 arg2)
Ou :
var=`command-name-here`
var=`command-name-here arg1`
var=`/path/to/command`
var=`/path/to/command arg1 arg2`
source
Récupérer la date et l'heure dans une variable
madate=$(date +"%d/%m/%Y %T")
source
Vérifier si un fichier existe en une seule ligne
[ -f /etc/hosts ] && echo "Existe" || echo "N'existe PAS"
source
Changer de shell
chsh -s /bin/bash
Lister les shells :
chsh --list-shells
Copier rapidement un fichier/dossier
Méthode "Brace Expansion"
Garder sa Debian à jour
Sans se fatiguer Appliquer les màj de sécurité automatiquement Gestionnaire de màj à distance
Montage et démontage CIFS
Monter une ressource (partage windows) depuis Linux:
mount.cifs //serveur/partage /mnt/cifs/montage -o username=utilisateur,password=mot_de_passe
Démonter le partage :
umount -l /mnt/montage
Je vous conseille d'utiliser plutôt autofs que de tout faire à la main !
LSOF
Liste des processus utilisant un port :
Pour lister les ports en écoute "LISTEN" et savoir quel processus monopolise un port précis avec lsof :
lsof -nP -i :80 | grep LISTEN
(linux et bsd) Plus d'infos Ou :
netstat -npl | grep mysql
liste des processus qui travaillent dans un répertoire :
lsof -x +D /chemin-repertoire
liste des fichiers exploités par un process :
lsof -p PID
Comprendre et débuter avec IPTables
Tutoriel et script iptables au démarrage par Nicolargo
Raccourcis clavier pour bash
Forcer la vitesse d'une carte réseau
Avec ethtool :
/usr/sbin/ethtool -s eth1 speed 100 duplex full autoneg off
Avec mii-tool :
sbin/mii-tool -F 100baseTx-FD eth0
Entrées et sorties d'un script
Voir cette documentation
Connaître la version d'une distribution
more /etc/debian_version
(sous debian)
more /etc/redhat-release
(sous redhat)
more /etc/fedora-release
(sous fedora)
lsb_release -rd
(sous certaines distributions)
systemctl (service au démarrage debian 8 et +)
Active un service au démarrage :
systemctl enable nom_service
Le désactiver au démarrage :
systemctl disable nom_service
update-rc.d (debian < 8)
Sur les distributions debian like il faut utiliser update-rc.d, avec différents niveaux :
0 : Arrêt
1 : Mode maintenance
2 à 5 : Mode multi utilisateur complet avec serveur graphique si installé.
6 : Redémarrage
Ajouter le lancement d'un service au démarrage :
update-rc.d [nom_service] defaults
Supprimer un service du démarrage :
update-rc.d -f [nom_service] remove
+d'infos
chkconfig et les run level
Attention : inittab a été remplacé par Upstart sous Ubuntu RedHat Like (CentOS, Mandriva, etc.)
0 : Arrêt
1 : Mode maintenance
2 : Mode multiutilisateur (sans la couche réseau)
3 : Mode multiutilisateur (avec la couche réseau)
4 : Inutilisé
5 : Mode multiutilisateur avec serveur graphique
6 : Redémarrage
Plus d'infos : lien 1, lien 2 Pour lister les run level d'un service :
chkconfig --list nom_du_service
(Pensez à installer chkconfig via apt/yum si non installé) Pour définir les run level d'un service :
chkconfig --level 23456 nom_du_service on
notice : remplacer "23456" par les run level souhaités
Tunnel SSH avec translation de port local (local forwarding)
ssh -L <port_local>:<hote_cible>:<port_destination> user@server -pXX
(xx = port ssh, à préciser si différent de 22) Exemple :
ssh -L 9089:localhost:3389 xhark@109.238.2.200 -p443
Cela aura pour effet de rediriger toutes les requêtes arrivant sur le port 9089 de votre machine local vers le port 3389 de la machine distante. Dans cet exemple, il s'agit d'une connexion sur un serveur Windows ayant OpenSSH écoutant sur le port 443. Le but est de réaliser un tunnel SSH pour prendre le contrôle en bureau à distance (RDP) sur le port par défaut 3389.
Tunnel SSH avec translation de port dynamique (dynamic forwarding)
ssh -D <port_local>@<hote_cible> -pXX
Exemple :
ssh -D 8080 xhark@109.238.2.200 -p443
Dans cet exemple nous ouvrons un tunnel dynamique qui permettra de surfer à travers le tunnel SSH via un proxy de type Socks.
Afficher l'historique des connexions SSH
last | more
Terminer une session shell (logout en terminal)
combinaison des touches : ctrl+D
Archive .gz
Liste les fichiers contenus dans l'archive :
gunzip -l archive.gz
Extraire (dans le dossier courant)
gunzip -d archive.gz
Archive .tar
Extraire (dans le dossier courant) :
tar xvf archive.tar
Archive .tar.gz
>>> Compresser <<< :
tar zcvf archive.tar.gz mon_rep/
z : compresser en utilisant gzip
c : creation
v : bavard (liste les fichiers à l'écran) f : fichier
<<< Extraire >>> :
tar zxvf archive.tar.gz
Extraire vers un dossier :
tar zxvf archive.tar.gz -C /mon/dossier
A lire également et CCM
Décompresser un BZ2 :
tar xjvf archive.tar.bz2
Compresser en ZIP
zip -r nom_du_fichier.zip repertoire_ou_fichier
r : récursif
Décompresser une archive ZIP
unzip nom_du_fichier.zip -d dossier_de_destination
Droits (chmod)
Tableau de correspondance binaire,logique et décimal :
Binaire --- Logique --- Décimal
000 -------- (---) ------- 0
001 -------- (--x) ------- 1
010 -------- (-w-) ------- 2
011 -------- (-wx) ------- 3
100 -------- (r--) ------- 4
101 -------- (r-x) ------- 5
110 -------- (rw-) ------- 6
111 -------- (rwx) ------- 7
Plus d'infos sur le chmod chez Linux-France Pour tout ce qui concerne SUID, GUID et le Sticky Bit voir ici.
Arbre des processus (process tree)
ps axjf
Résume les commandes linux importantes :
info coreutils
Documentation rapide sur une commande :
Court résumé sur l'usage d'une commande (équivalent à "man -f ma_commande")
whatis ma_commande
whatis supporte les regex avec l'option "-r ^blabla" :
whatis -r ^rm
whatis support les jokers (wildcards) avec l'option "-w blabla*" :
whatis -w who*
Cherche dans les pages man et la description :
apropos ma_commande
apropos supporte les mêmes options que whatis.
note : mandb reconstruit la base de données de whatis, exécutée à chaque installation de paquet elle génère les fichiers manuels indéxés utilisés par man, apropos et whatis
Rechercher un fichier avec locate
locate monfichier
Pour mettre à jour votre base de recherche :
updatedb
Rechercher un fichier avec find
find /chemin -iname 'monfichier'
Exemple :
find / -iname '*.conf'
Localiser une commande
whereis ma_commande
Lister tous fichiers du répertoire courant
ls -all
Afficher le répertoire courant
pwd
Lister seulement les adresses IP des interfaces réseau
ifconfig | grep 'inet'
Lister les processus
ps aux | grep 'nom du processus recherché'
pstree
Réaliser et compresser un dump mysql (GZ)
mysqldump -u utilisateur base_mysql | gzip > /repertoire/de/destination/mondump.gz
Plus d'infos ici
Accéder à un partage Windows / Samba
mkdir /mnt/windows mount -t cifs //adresseip/monpartage /mnt/windows -o user=utilisateur,pass=motdepasse
Envoyer un email en ligne de commande
Avec sendmail :
cat fichier | sendmail -f expediteur@domain.com destinataire@domaine.com
Sans pièce jointe :
echo -e "Corps du mail\nCeci est un retour a la ligne" | mail -s "Sujet du mail" votre@email.tld
echo -e "Corps du mail\nCeci est un retour a la ligne" -a "From: source@email.tld" | mail -s "Sujet du mail" votre@email.tld
Avec un fichier en lieu et place du corps du mail (ici aussi) :
mail -s "Le sujet de mon message"; votre@email.tld < piece_jointe.ext
Pièce jointe avec un echo + mutt :
echo -e "Corps du mail\nCeci est un retour a la ligne" | mutt "votre@email.tld" -b "destinataire-en-copie@email.tld" -s "Sujet du mail" -a piece_jointe.ext
ou avec mutt + pièce jointe (sans echo) :
mutt -s "Sujet du mail" -a piecejointe < "Contenu du mail"
Pleins d'exemples ici
Configuration mutt pour le FAI Free, ajoutez dans ~/.muttrc
set smtp_url = "smtps://smtp.free.fr:465/"
set my_user = "login"
set my_pass = "mot-de-passe"
set from = "votre-email@free.fr"
set realname = "ce que vous voulez"
set ssl_starttls = no
Et :
chmod 600 ~/.muttrc
Mémo de scripts shell / bash
- Introduction aux scripts bash
- Initiation à bash
- Ecriture de scripts bash
- Utiliser Bash
- Test Constructs Les filtres (grep, cut, tr, sed)
- Utiliser les opérateurs"Grep OR / Grep AND / Grep NOT"
- Script de backup de sites webConditions multiples avec parenthèses (voir ici)
- While et conditions sur une seule ligne
Informations relatives au système (matériel)
Je vous recommande de prendre connaissance de cette page.
Autres commandes à garder sous le coude
Voir chez CrouCrou
Toutes les commandes ?
Par ailleurs, si vous recherchez toutes les commandes fondamentales :
- consultez le wiki de Linux France
- voici une très bonne synthèse (version miroir | mirroir document PDF) :
Sans bien sûr parler commandes dites "de base" : reboot, ping, nslookup, etc. Voici une carte heuristique des commandes Linux.
Systèmes AIX
Voir le mémo chez System-Linux.eu
Commandes de base
Afficher le répertoire courant :
pwd
Affiche le type de fichier :
file mon_fichier.txt
Rechecherche les fichiers exécutables, les sources et les pages de manuel de fichiers passés en argument :
whereis blabla
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
23 commentaires
Hop imprimé 😀
Pour "Lister les processus" il y aussi pgrep
et son pendant très utile: pkill
(genre pkill -9 firefox)
Merci pour ces commandes!
C'est vrai qu'il y en a tellement que ca devient difficile de tout retenir...
C'est incroyable le nombre de commandes et combinaisons possibles qu'il est possible d 'utiliser sous LINUX!
J'aurai aussi mis la combinaison de find avec grep et l'option -H pour rechercher les fichiers contenant un mot définis et afficher leurs noms. 😉 Mais merci pour le résumé.
Il est vrai que j'ai omis de parler de find, je ferai un autre update 🙂
tar zcvf archive.tar.gz mon_rep/
c : creation
v : bavard
j : compresser
f : nom du fichier suivi
Il y a pas une erreur ici ?!
@Yamy : c'est corrigé ("j" devient "z" dans la légende, la commande était bonne)
Il y a rien sur la commande Cron, mais sinon, c'est pas ces petits rappels des commandes.
Merci pour la commande mail avec pièce jointe ! Ca marche ! Et c'est simple !
Je pense que type peut aller à côté de whereis, car il gère les alias, fonctions et primitives (builtin) aussi bien que les binaires. De plus, c'est lui-même une primitive (pas besoin de le charger).
Bjr, ce blog est pas mal du tout. Je dirais même plus qu'il est très intéressant... Je débute sur un raspberry pi 2 depuis 15 jours et je cherche : comment envoyer un sms avec motion via mutt et ssmtp : auriez vous une idée? Merci. Cdlt
@Patric: https://hellohooray0.wordpress.com/2014/11/30/raspberry-pi-camera-de-video-surveillance-recevoir-des-alertes-mails/
Bonjour,
Ce site propose que l'envoi par e-mail. J'ai suivi ce tutoriel. Mais ce que je cherche c'est l'envoi par sms. Quels sont les commandes et codes pour envoyer un SMS de mon système d'alarme par internet (ayant qu"une box à l'émission ) pour le recevoir au bout du monde ? Merci
Cdlt
@Patric: soit tu utilises un fournisseur (clickatell, etc) SMS soit tu utilises une API gratuite comme celle fournie par free mobile