(modifié le 14 septembre 2016 à 14:59)

linuxCertaines 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.

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

Guide

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]

Tutoriel

Informations sur la suppression "--delete'"

DNS

DNSmasq : Configuration de base (particularité "--domain-needed")

Unbound

Masque la signature Apache/PHP (powered by...)

Procédure

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

How-to

php.ini

Recommandations des fonctions PHP à désactiver

Générer facilement un .htaccess

Tutoriel

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

Automatiser le mises à jour

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

Recherche une occurrence

# 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

/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

Lien 1 - Lien 2

Editer des partitions pas dans l'ordre dans la table

Tutoriel

Paginer un résultat MySQL en ligne de commande

Paginer avec MySQL cli

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

http://alethotech.com/?p=309

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
Voir l'espace disque restant :
df -h
Ajout d'une nouvelle partition ou d'un nouveau disque avec point de montage fstab (doc debian)

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 !

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 -i
(linux et bsd) Plus d'infos Ou :
netstat -npl | grep mysql

Comprendre et débuter avec IPTables

Tutoriel

Tutoriel et script iptables au démarrage par Nicolargo

Tutoriel Homeserver.diy

Raccourcis clavier pour bash

Liste ici

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)

update-rc.d (debian like)

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

ps axjf

Résume les commandes linux importantes :

info coreutils

Documentation rapide sur une commande :

whatis ma_commande

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 &gt; /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

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 :

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

Afficher le répertoire courant

pwd

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter