Table des matières
Commandes de bases, navigation dans les fichiers
- ls liste les fichiers d’un dossier. Options :
-apour les fichiers cachés,-lpour la liste détaillées,-hpour les tailles en unités « human readable ». - cd change directory, la commande permet de naviguer dans l’arborescence. Par exemple
cd /var/logva dans le dossier des logs, quelque soit l’endroit où l’on se trouve puisqu’on a mis le slash de début, lequel indique qu’il s’agit d’une adresse absolue. En revanche,cd mondossier/imagesva dans le répertoireimagesdemondossierlequel se trouve à l’endroit où on se situe déjà. Comme on ne met pas de slash de début, il s’agit d’une adresse relative, on ajoute donc ce chemin à celui dans lequel on se trouve déjà. - du disk usage, précise l’espace disque que prend chaque fichier ou dossier (l’option
-hpermet d’obtenir les tailles en « human readable »), tandis que l’option-c, très utile également, permet d’obtenir le total des éléments analysés. Cette commande s’avère particulièrement pratique quandls -lne nous donne pas la taille d’un dossier. - pwd print working directory. Cette commande affiche tout simplement le chemin absolu du dossier dans lequel on se trouve,
Buzut$ pwd /etc/apache2
- ssh secure shell. Permet de se connecter au shell d’un ordinateur distant et d’y exécuter des commandes.
ssh login@ip ou nom_hôte
Et voilà tout, pour se déconnecter, ce sera exit, et toutes les commandes habituellement utilisables dans un terminal le sont aussi via ssh. Une option bien pratique de ssh est le tunneling qui permet par exemple de déjouer les pare-feux par la mise en place d’un proxy socks. Si certains ports sont bloqués et vous empêchent de vous servir de tel ou tel service ou d’accéder à tel ou tel site (en vacances en Chine ?), la solution est donc de tout rediriger vers un port local et de laisser la machine distante – qui n’est pas derrière un part feu – accéder aux ressources non autorisées. Nous allons donc rediriger tout notre trafic vers un port prédéfini (en l’occurrence 2013), à travers notre connexion SSH.
ssh -D 2013 login@ip_serveur_distant
Dernière étape pour que cela fonctionne, il faut que votre trafic sortant soit redirigé vers le port 2013. Vous pouvez le configurer dans votre navigateur et pour l’ensemble des connexions de votre ordinateur dans les préférences réseau.
- clear nettoie votre fenêtre de terminal en reléguant tout le texte au dessus (donc accessible avec un scroll) et vous laissant donc face à une fenêtre clean. Bien utile de temps à autre pour y voir plus clair. Le raccourci clavier ctrl + l fait la même chose.
- ctrl + r très très pratique, permet de faire une recherche dans l’historique des commandes. Habituellement, vous remontez dans les commandes déjà tapées avec la flèche du haut, eh bien avec ctrl + r, vous pouvez effectuer une recherche dans cet historique, faites ctrl + r, puis tapez un bout de la commande que vous voulez rechercher, magique !
- for C’est certainement la commande la plus complexe ce cette section, surtout si vous ne programmez pas.
forest une instruction de boucle. Une boucle permet d’exécuter une action plusieurs fois, sur tous les éléments d’une variable. Par exemple, nous pouvons ainsi très facilement renomer tous les fichiers d’un répertoire pour remplacer les espaces par des traits d’union.# pour tous les éléments dans le répertoire courant # l'instruction in place les éléments correspondants dans la variable oldname for oldname in * # do exécute l'action en boucle do # on utilise ici sed pour renommer, # l'usage de la commande est expliqué plus bas dans l'article newname=`echo $oldname | sed -e 's/ /_/g'` # on invoque la commande mv pour remplacer l'ancien nom par le nouveau mv "$oldname" "$newname" done
Opération sur les fichiers
- cat lire le contenu d’un fichier texte
cat monfichier.txt - less fonctionnement similaire à
catmais affiche le fichier page par page. C’est donc plus pratique pour les longs fichiers. - head affiche l’en-tête d’un fichier, l’option
-npermet de spécifier le nombre de lignes à afficher. - tail semblable à
headmais concerne la « queue » du fichier, en d’autres termes, cette commande n’affiche que la fin. Une option très appréciable-fpour follow, permet de mettre à jour en temps réel l’affichage de la fin du fichier, ce qui est fort pratique pour suivre l’évolution d’un fichier de logs par exemple ;) - touch créer un fichier. Il suffit de faire
touch nom_du_fichier. Comme Franckito le précise dans les commentairestoucha pour but premier de modifier l’horodatage d’un fichier. Si vous faitestouchsur un fichier qui existe déjà, cela actualisera ses dates de dernier accès et modification. - mkdir créer un dossier, le fonctionnement est le même que celui de la commande
touch.mkdir nom_du_dossier - cp copy, faire une copie d’un fichier. L’option
-Rpermet de réaliser des copies de dossiers entiers.cp fichier_original copie_du_fichier # on peut aussi placer la copie directement dans un autre dossier cp fichier_original nom_du_dossier/copie_du_fichier
- mv move, permet de déplacer des fichiers/dossiers. La commande mv s’utilise exactement de la même manière que la commande
cp. En outre, cette commande permet aussi de renommer les fichiers et dossiers en changeant simplement leur nom.mv mon_fichier mon_fichier_new_name
- rm remove, supprime des fichiers.
rm nom_du_fichier. L’option-fforce la suppression, l’option-idemande une confirmation avant suppression, enfin l’option-rpermet la suppression des dossiers. - rmdir remove directory, supprime un dossier seulement s’il est vide.
- ln link, créer un lien entre deux fichiers. L’option
-spermet de créer un lien symbolique.#créer un lien en dur ln fichier1 fichier2 #créer un lien symbolique ln -s fichier1 lien_vers_fichier1
- wc word count, permet de compter le nombre de lignes, de mots et de caractères dans un fichier texte. Les options sont
-lpour line (nombre de ligne),-wpour word (nombre de mots) et-mpour le nombres de lettres. Il y a aussi l’option-cpour avoir la taille du fichier en bits. Pour l’utiliser, on fourni simplement en paramètre l’adresse du fichier texte :Buzut$ wc -l test.rtf 33 test.rtfwcpermet aussi facilement de savoir combien vous avez de fichiers/dossiers un dans répertoire donné, il suffit pour cela de rediriger la sortie d’unlsverswc:ls | wcet le tour est joué ! - sort trier un fichier texte par ordre alphabétique. L’option
-rpermet d’effectuer un tri inverse, c’est à dire anti-alphabétique ou décroissant pour les nombres, et l’option-Rpermet un tri aléatoire, c’est le mode shuffle quoi ;) On n’oubliera pas non plus l’option-uqui permet d’éliminer les doublons. Enfin l’option-opermet de créer un nouveau fichier avec les résultats triés :sort -o fichier_trie.txt fichier_en_bordel.txt
- uniq la commande
uniqpermet de dédoublonner un fichier. Il suffit de lui passer en paramètre l’adresse du fichier à dédoublonner et le nom du nouveau fichier à créer.uniq doublons.txt no-doublons.txt
- cut couper dans un fichier texte. Pour couper toutes les lignes selon un nombre donnés de caractères, on utilisera l’option
-c.cut -c 2conservera seulement les deux premiers caractères. On peut aussi donner un intervalle :cut -c 2-4, alors on conservera uniquement les caractères deux à quatre. Exemple, « anticonstitutionnellement » sera transformé en « ntic ». Il est aussi possible de se servir de délimiteurs pour couper du texte, avec les options-det-f. Les fichiers au formats .csv séparent les différents champs, les colonnes, par des point-virgules;. Dans un fichier où nous aurions trois champs, le nom, le prénom et la ville, si nous voulons extraire la ville, nous ferions comme cecicut -d ; -f 3on indique le délimiteur après-det le champ après-f(field veut dire champ en anglais). - tar
tarest l’utilitaire d’archivage. Il permet de regrouper des fichiers et des dossiers dans une seule archive. Les options intéressantes sont les suivantes :tar -cvf(create, verbose, file) permet de créer une archive, d’afficher tous les détails du processus (mode verbeux) et de tout mettre dans un dossier. Exemple :tar -cvf nouvelle_archive.tar mon_dossier_a_archiver
Processus inverse, pour « détarrer » une archive, on utilise les options
-xvf(eXtract, verbose, file)tar -xvf archive.tar. Les options-tfservent à afficher le contenu d’une archive sans l’ouvrir. Il est aussi possible de compresser et décompresser à la volée les archivestar, il faut rajouter pour cela l’option-zlors de la création ou l’ouverture de l’archivetar -zcvf compress.tar.gz compress/. - gzip permet de compresser une archive tar au format zip.
gunzip archive.tar.gz, il suffit ensuite d’utiliser la commandegunzippour la dézipper. - bzip2 fonctionne exactement de la même manière que
gzipmais compresse au formatbzip. Pour décompresser l’archive, l’équivalent degunzipest icibunzip2. - zcat zmore zless
zcat,zmoreetzlessremplissent les mêmes fonctions quecat,moreetlessmais à appliquer aux fichiers compressés. - iconv permet de changer l’encodage d’un fichier. option
-fpour préciser l’encodage d’origine et option-tpour celui de destination. Par défaut,iconvrenvoit tout sur la sortie standard, donc si vous voulez directement envoyer les résultats dans un fichier, il suffit de faire une petite redirection :iconv -f UTF-8 -t UTF-17 fichier.txt >> new-encodage.txt
- wget copie un fichier distant sur l’ordinateur.
wget http://www.site.org/rep/01/fichier.txt. - scp vise à remplir la même fonction que la commande de copie
cp, mais elle permet de copier les fichiers de manière sécurisé à travers le réseau; c’est à dire entre hôtes distants. De même qu’aveccp, l’option-rpermet de copier un répertoire entier.scp ficher_exemple login@ip_ou_adresse:adresse_de_destination.scp test.txt buzut@192.168.0.128:~/transfert #et pour récupérer un fichier d'un hôte distant scp buzut@192.168.0.128:~/movie.mkv ~/
- rsync c’est un utilitaire qui permet de synchroniser entre eux des dossiers. Très pratique donc pour la sauvegarde. C’est pour ma part les options
-arvque j’utilise.-aconserve les droits etc,-rpermet la récursivité et-vpour le mode verbeux. Petit exemple de sauvegarde de mes photos de vacances :rsync -arv photo backup_photo
Il est utile de préciser que si vous supprimez des fichiers dans le dossier source,
rsyncne répercute pas la suppression dans le dossier de sauvegarde si vous ne lui adjoignez pas l’option–delete. Au cas où vous ne désiriez pas supprimer totalement les fichiers, il est possible de les placer dans un dossier séparé, options :–backup –backup-dir=Petit exemple pour la forme ?rsync -arv photo ~/backup_photo --delete --backup --backup-dir=~/backup_photo/delete
Bien entendu, il est possible de faire une sauvegarde distante.
rsync -arv photo buzut@monserver:~/backup_photo --delete
Dernière chose, au cas où votre serveur n’écoute pas sur le port 22 en ssh, option -e, exemple pour un ssh sur le port 443
-e 'ssh -p 443'. - file détermine le type d’un fichier indépendamment de son extension. Il suffit de lui fournir en paramètre le fichier à évaluer.
- split coupe un fichier en fichiers plus petits (-l préciser un nombre de lignes, -b préciser une taille en bytes (faites suivre la taille de K, M, G, T pour définir une unité différente). Pour créer des fichiers de 300 lignes
split -l 300 test.txt, ou des fichiers de 1MBsplit -b 1000000 mon_fichier. - sed dans les commandes qui permettent de manipuler du texte,
sedest sans conteste l’une des plus puissantes. Remplacement selon une expression régulière, effacement de certaines expression où ligne selon un mot-clef donné… Seul inconvénient, qui dit puissance dit aussi complexité.sedne s’explique pas en deux lignes et c’est pour cela que j’y ai consacré un article entier. Ça vaut le coup ! - locate cette commande permet de localiser un fichier sur le disque dur.
locate monfichier.txt. La commandelocateest très rapide car elle retrouve le fichier en consultant une base de données. Elle ne parcourt pas directement le disque dur à la recherche du fichier en question. L’inconvénient de ce procédé est que si le fichier est tout récent, il risque de ne pas encore être indexé, etlocatene vous sera alors d’aucun secours. On peut forcer la mise à jour de la base de données avec la commandesudo updatedb. On peut aussi se tourner vers la commandefind. - grep permet d’effectuer des recherches par expressions régulières. Dans sa forme la plus simple,
greppermettra d’afficher la ligne contenant un mot clef (avec l’option-oon affiche seulement l’expression matchée), ceci depuis un fichier ou une autre commande. Par exemple, si on veut afficher tous les processus ssh, on filtrera la commandeps auxavec grep :ps aux | grep ssh.greppermet également de rechercher dans le contenu de fichiers. Un exemple tiré de mon article sur la désinfection d’un WordPress où l’on cherche tout fichier.phppotentiellement infecté :# option -l pour matcher seulement certains types de fichiers (ici les .php) # option -r pour la récursivité (recherche dans les sous-dossiers) # option -E pour la syntaxe REGEXP étendue) grep --include "*.php" -rlE 'viagra|pharma|Tadacip|eval|base64_decode|socket_shutdown|socket_close|socket_clear_error|fopen|curl' www/
- find la commande
findest bien plus puissante quelocate, mais elle est aussi bien plus lente car elle parcourt le disque au fur et à mesure de la recherche. Sa syntaxe est la suivantefind /adresse_du_repertoire_de_recherche/ element_a_trouver. Cette syntaxe n’est qu’une base.findpermet en effet de rechercher selon une taille ou une date de dernier accès, mais encore d’effectuer des actions sur les fichiers trouvés, d’appeler une commande etc. Une page de man à lire donc… Connaître la date de dernier accès est très pratique et puissant, quelques exemples :# le plus simple chercher un fichier dont on connait le nom # trouver tous les .htaccess dans /var/www find /var/www -name ".htaccess" # liste les fichiers dans www par date de dernière modification find /www -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r # on peut être plus précis en affichant les fichiers modifiés dans le x (ici 50) dernières minutes find /target_directory -type f -mmin -50 # ou les 24 dernières heures find /target_directory -type f -mtime -24 # on peut enfin choisir une intervalle (entre hier et avant-hier) find /target_directory -type f -mtime -48 ! -mtime -24 # last but not least, déplacer les fichiers qui ont plus de 24h (ou modifié il y a plus de 24h) find /target_directory -type f -mtime -24
Vous noterez très certainement que nous utilisons ici
mtimepour la dernière modification. Il y a également :
mminpour les minutes,atimeetaminpour le dernier accès,
Flux de redirection
- > renvoyer le resultat dans un fichier (si celui-ci existe, il sera écrasé).
- » renvoyer le resultat dans un fichier (si celui ci existe déjà, ajoute le résultat à la fin) il existe deux sortie : 1 la sortie normale, 2 la sortie d’erreurs.
- 2> créer un fichier pour les erreurs.
2»existe aussi. - 2>&1 fusionne les deux sorties dans un seul fichier ex :
./script_de_la_mort.sh > fichier.log 2>&1. - < prendre un fichier en entrée. ex :
cat < fichier.txt. - « prendre en entrée le clavier au fur et à mesure. Ceci nous permet de passer des données directement à une commande sans avoir besoin de créer de fichier. Mettons que nous voulions trier des prénoms par ordre alphabétique. Nous allons pour cela invoquer la commande
sort, mais au lieu de créer un fichier texte puis de le faire réorganiser parsort, nous allons directement lui soumettre les noms en les entrant au clavier :#on place un mot clef après le "<<" qui sert à délimiter les données passées en entrée. #Ce mot clef est tout à fait arbitraire #on appuie sur "entrer" après chaque prénom pour séparer les différentes données sort << STOP > antoine > clement > quentin > jordan > mathilde > clementine > elena > helena > pierre > STOP antoine clement clementine elena helena jordan mathilde pierre quentin
- | rediriger le résultat d’une commande dans une autre. ex:
sort prenoms.txt | uniq.
Multitâche et programme en arriere plan
- & mettre & à la fin d’une commande permet d’en lancer une autre sans attendre la fin de la première ex :
cp video.avi /users/buzut/desktop/copie-video.avi &. - nohup lance le programme et le maintient même une fois la console fermée. Les sorties 1&2 sont redirigées vers
nohup.out. Exemple :nohup ffmpeg -i video-source.mkv -vcodec libx264 -preset slow video-reencodee.mp4
- ctrl + z mettre en pause le process en cours.
- bg passer le processus qui est en pause en arriere plan.
- fg reprendre un process en premier plan (si plusieurs tournent en même temps,
fg %n°). - at programme une tache à exécuter à une heure ultérieure ex :
at 18:22ouat now + 5hourspuis ctlr + d. - atq lister les jobs en attente.
- atrm supprimer des jobs.
- sleep cette commande permet de faire une pause entre l’exécution de deux commandes. Exemple :
touch gt.txt && sleep 10 && rm gt.txt
La pause est exprimée en seconde par défaut, il est cependant possible de changer cela en faisant suivre le nombre d’une unité :m,h, oudpour respectivement les minutes, heures et jours. - crontab crontab est en fait une commande qui permet de lire et de modifier un fichier appelé la « crontab ».
- e modifier la crontab.
- l afficher la crontab actuelle.
- r supprimer votre crontab. Attention, la suppression est immédiate et sans confirmation !
- screen multiplexeur de terminaux. Sous ce terme un peu barbare se cache en fait une sorte de terminal virtuel. Vous êtes au boulot, vous ouvrez un terminal et vous le nommez, vous lancez une tache (un script qui va réencoder plusieurs GB de vidéos par ex, ce qui prend du temps), et vous vous déconnectez, vous arrivez chez vous, vous réouvrez votre terminal et retrouvez votre tâche comme si tout était resté ouvert en face de vous.
# créer un screen screen -S nom_du_screen # pour le détacher (cela veut dire qu'il n'est plus affiché mais reste actif), # il faut faire ctrl a puis d # pour se rattacher à un screen détaché, screen -r nom_du_screen # pour lister les screens ouverts screen -ls # pour quitter/fermer un screen, comme pour fermer un terminal --> exit # il n'est pas possible de s'attacher à un screen non détaché # (screen non détaché dans un terminal auquel on tente de s'attacher depuis un autre) # on peut en revanche partager un screen, # on voit alors toutes les commandes tapées dans l'un ou l'autre des terminaux # pour se connecter à un screen non détaché screen -x nom_du_screen
Vous voudrez parfois remonter dans l’écran du screen, pour cela, il faut passer en copy mode avec les touches ctrl + a puis [. Vous pourrez alors naviguer avec les flèches directionnelles. Enfin pour sortir de ce mode ctrl + a puis esc.
Droits, groupes et utilisateurs
- sudo exécuter une commande en tant que root.
- sudo su passer root et le rester.
- chmod changer les droits sur un fichier un ou dossier (option
-Rpour la récursivité dans tous les fichier et sous-dossier du dossier sur lequel on l’applique). - adduser ajouter un utilisateur.
- passwd changer le mot de passe d’un user | ex :
passwd roger. - deluser supprimer un user (option
–remove-homepour supprimer tous ses fichiers). - addgroup créer un groupe.
- usermod modifie un utilisateur (options :
-lpour changer le nom,-gpour lui assigner un groupe,-Gpour lui assigner plusieurs groupes (séparés par des virgules),-aen complément de-gou-G, ajouter des nouveaux groupes au lieu de tout redéfinir) ex, ajouter le groupe video à l’utilisateur buzut, sans supprimer les groupes auxquels il appartenait avant :usermod -aG video buzut. - delgroup supprimer un groupe.
- groups vérifie dans quels groupes est un utilisateur
groups myuser. - chown change le propriétaire d’un fichier/dossier (ne peut s’utiliser qu’en root) option -R pour la récursivité.
- chgrp change le groupe propriétaire d’un fichier (équivalent à
chown user:group). - passwd Bien qu’il ne s’agisse pas, techniquement, d’une commande, il me semble important de connaître la structure du fichier
/etc/passwd. Lequel regroupe l’ensemble des utilisateurs du système et de leurs informations.# exemple pour l'utilisateur sensu # 1 :2: 3 : 4 : 5 : 6 : 7 sensu:x:999:999:Sensu Monitoring Framework:/opt/sensu:/bin/false
Nom de l’utilisateur, mot de passe (x signifie que le mdp est chiffré dans le fichier
/etc/shadow, l’id de l’utilisateur (0 est pour root et les id de 1 à 99 sont réservés pour les comptes prédéfinis), l’id du groupe tel que défini dans/etc/group, champ de commentaire, répertoire « home » de l’utilisateur, le shell par défaut (/bin/falseet/usr/sbin/nologinsignifient que l’utilisateur n’a pas de shell).
Système
- w qui est connecté et fait quoi.
- who qui est connecté.
- date donne l’heure.
- ntpdate synchronise l’heure avec un serveur ntp. Il faut préciser le serveur à la commande
ntpdate pool.ntp.org. Par ailleurs, pensez que le port NTP (123 en UDP) doit être ouvert sur votre machine. - uptime temps depuis mise en route + charge (charge moyenne 1 – 5 – 15 mn).
- free indique l’allocation de la ram et la mémoire libre restante.
- vmstat info ram, swap, cpu.
- proc/meminfo Le fichier
/proc/meminfocontient de nombreuses informations sur la mémoire. Il suffit d’en afficher la sortir aveccat /proc/meminfo. - tload affiche la charge CPU sous forme de graphique.
- ps -ef afficher tous les processus lancés. Alternativement, on peut utiliser la syntaxe BSD :
ps aux. - ps -ejH afficher process en arbre.
- ps -u lister les process lancés par un utilisateur donné ex:
ps -u buzut. - top l’activité du système en temps réel : load, RAM, SWAP processus…
topa l’avantage d’être installé presque partout. - htop c’est une version améliorée de top, un peu plus graphiques, les infos y sont plus claires et il est possible de trier/ordonner l’affichage selon certains critères.
- glances similaire à
topethtop,glancesest le tableau de bord de votre machine car il réuni en un coup d’œil toutes les métriques importantes : cpu, load, ram, swap, i/o disques, remplissage des disque. C’est l’œuvre de l’ami Nicolargo et son outil est maintenant intégré au dépôts des dernières versions Debian & co (je ne sais pas pour les autres distribs). - atop on a parlé ci-dessus de
topethtop, mais il y a aussiatopqui est très utile lorsqu’on doit faire un diagnostique un peu plus poussé. De manière générale, j’utilisehtopen remplacement de top car il est plus ergonomique et lisible, mais quand quelque chose cloque sur le serveur, directionatop! Pour aborder sereinement la bête, je vous conseille la lecture de cet article de linuxpedia, admirable de clarté. - iotop dans la ligné des
*top, voiciiotopqui, comme son nom le laisse entendre, permet d’avoir un aperçu temps réel de l’I/O disque. - swapoff
swapoff -apermet de désactiver le(s) swap tandis que son pendantswapon -apermet d’activer le(s) swap. L’exécution deswapoff -a && swapon -apermet donc de forcer la purge du swap. - kill tuer un processus (va demander son PID).
- kill -9 force à quitter.
- killall quitte toutes les occurrences d’un programme.
- reboot Redémarrer le système d’exploitation.
- shutdown Programmer un redémarrage ou un arret.
- poweroff bien qu’assez similaire à shutdown dans la mesure où elle permet d’éteindre le système, poweroff permet aussi selon les arguments qui lui sont passés, de rebooter ou de changer de runlevel. Vous pouvez aussi consulter ce thread [en] qui explique les différences entre
poweroffetshutdown. - halt permet « l’arrêt » du système. Je mets arrêt entre guillemets car le système peut rester sous tension avec cette commande (selon les options passés et les paramètres par défaut du système). Regardez les différences entre shutdown et halt [en].
- last historique des connexions.
- df remplissage des disques (l’option
-hpermet d’obtenir les tailles en « human readable »). - mount Permet de monter le prériphérique d’un système de fichier sous un répertoire local. Par exemple, pour monter la partition
/dev/sdb1au point de montage/home:mount /dev/sdb1 /home/. - fdisk Permet de gérer les partitions. Affiche la table des partitions si on utilise l’option
-l. Vous pouvez jetez un œil à l’article sur le partitionnement Linux pour savoir comment et pourquoi partitionner votre machine. - fsck Cet utilitaire permet de vérifier et de réparer le système de fichier.
- dd L’outil permet d’effectuer des opérations sur les disques, notamment de les effacer, par exemple
dd if=/dev/zero of=/dev/sdcou de cloner un disque ; ex :dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync. - ddrescue Lorsqu’on fait face à un disque dur endommagé, il vaut mieux tenter de le cloner avec
ddrescuequ’avecdd. Le preier est en effet dédié à cet usage. Il peut effectuer une première passe pour récupérer le maximum de données en ignorant les secteurs endommagés, puis dans une seconde passe il tentera de récupéré les données endommagées. La doc d’Archlinux détaille bien le processus de recovery. - smartctl
smartctlpermet d’afficher les informations smart d’un disque.smartctl -a /dev/sdaaffiche toutes les informations à propos de sda. La fiche Wikipedia à propos du SMART fournit de bonnes explications sur les différentes données et leur interprétation. - /proc/mdsat/ Fichier qui contient les infos sur vos RAID logiciels. On peut afficher ces informations en faisant un
cat:cat /proc/mdstat. Lisez l’article sur les différents niveaux de RAID (simulateur intégré) pour trouver le RAID qui vous correspond Vous pouvez également consulter ce wiki [en] pour vous orienter dans la jungle des infos délivrées parmdadm.. - mdadm Commande qui permet d’obtenir des infos sur les RAID soft et de les paramétrer (sortir un disque de l’array, en rajouter un, le reconstruire en cas de disque défaillant…). Par exemple
mdadm –detail /dev/md0donnera tous les détails lié à un l’array. Notez que cette commande est assez proche de l’option–examine, mais laquelle s’applique à un disque constitutif d’un raid–examine /dev/sd*et non au volume raid. Cette commande étant très riche et servant de nombreuses fonctions, je vous laisse vous référer au man pour plus de détails. On peut aussi trouver de précieuses informations sur le linux raid wiki. - lsof list open files, dresse la liste des fichiers ouverts. Comme le fait remarquer l’ami MagiCrazy dans les commentaires, cette commande peut s’avérer bien utile pour voir quel fichier bloque le démontage d’un filesystem par exemple.
- hostname Affiche le nom d’hôte de la machine conformément à ce qui est écrit dans le fichier
/etc/hostname. - uname Infos sur le système et le matos.
- lsb_release
lsb_release -adonne toutes les infos sur la distrib. - lshw Donne une liste détaillée de l’hardware système tels que la configuration ram, la version du firmware, la configuration de la carte mère… Avec l’option
-shortvous obtiendrez une sortie plus digeste. L’option-c networks’avère aussi bien utile pour connaître le nom d’une interface réseau encore non configurée avec le standard de nommage systemD [en]. - lsblk Liste tous les devices de type bloc (disque dur).
- lspci Liste tous les périphériques PCI.
- lsusb Liste tous les périphériques USB.
- /proc/version Fichier qui contient des infos sur le noyau. On peut afficher son contenu avec
cat:cat /proc/version. - /proc/cupuinfo Fichier qui contient des infos sur le processeur. On peut afficher son contenu avec
cat:cat /proc/cupuinfo. - dmidecode lit les info du bios.
- dmesg affiche les messages du buffer du noyaux.
- apt-cache gestion des paquets. Deux options sont très utiles
apt-cache search nom_paquet, permet de chercher un paquet, etapt-cache show, permet d’obtenir des détails sur un paquet. - apt-get gestion des paquets. Les commandes que l’on utilisera le plus sont
update(MAJ des sources de paquets dispos),upgrade(mise à jour du système et autres softs),install(apt-get intall truc-à-installerpour installer un nouveau logiciel et ses dépendances),purge(permet de désinstaller un paquet de manière plus « propre » que remove car cela efface aussi les fichiers de configuration). - aptitude c’est un autre utilitaire de paquets. Plus récent qu’apt-get, il est installé en parallèle de celui-ci sur Ubuntu et Debian. Préférez-le à apt-get. Il s’utilise dans l’ensemble comme apt-get mais est plus performant.
- add-apt-repository
add-apt-repositorypermet d’ajouter des dépôts alternatifs aux dépôts officiels. C’est très utile car les dépôts officiels ont souvent du retard sur les versions de logiciels que sortent les développeurs et certains logiciels en sont même absents. Ainsi, en ajoutant par exemple les dépôts des développeurs, vous pouvez bénéficiez des dernières versions juste en vous servant deapt-getouaptitude, sans avoir besoin de compiler ! Par exemple, FFMPEG avait été supprimé des dépôts officiels d’Ubuntu (réintégré en version 15.04) au profit de Libav, son fork. Pour profiter des dernières versions de FFMPEG sans avoir à compiler manuellement à chaque fois :sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next # on met notre liste de packets à jour sudo apt-get update # si ffmpeg n'est pas installé ont l'installe sudo apt-get install ffmpeg # s'il est déjà installé, # un upgrade se chargera de le mettre à jour sudo apt-get upgrade
Dernière astuce, ce n’est pas une commande spécifique, mais une combinaison de commandes qui permettent de rechercher un dépôt sur le système :
grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep nom_du_ppa
- apt-key Cette commande va bien souvent de paire avec l’ajout de dépôts puisqu’elle permet de gérer les clefs cryptographiques en validant l’authenticité. On utilisera le plus souvent
apt-key advpour ajouter de nouvelles clefs, Ubuntu-fr en détaille très bien l’usage.apt-key listpermet de lister toutes les clefs installées etapt-key delpermet d’effacer une clef. - apt-cache madison Autre commande bien pratique,
apt-cache madison nom_du_packetaffiche les différents dépôts liés à un packet donné et les versions actuelle de chacun d’entre eux. - dpkg info sur les paquets installés (options pour lister tous les paquets, désinstaller etc) ex : liste des paquets installés
dpkg –get-selections. L’option-lfourni également une liste exhaustive et avec une petite description de chaque packet, ce qui peut s’avérer très pratique. On constate parfois qu’un grand nombre de paquets sont marqués pour être désinstallés avec le tagdeinstall, pour tout enlever d’un coup :dpkg --purge `dpkg --get-selections | grep deinstall | cut -f1`
- update kernel Si votre partition
/bootest indépendante et qu’elle n’est pas très grande, il est probable qu’après un certain temps, vous deviez faire un peu de ménage, sans quoi l’espace nécessaire à une mise à jour du kernel est insuffisant. On devra donc supprimer les anciens noyaux, pour ce faire, :apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")Il ne vous reste alors plus que le kernel actuellement utilisé et vous pouvez maintenant effectuer votre mise à jour sans problème. Vous trouverez plus de détails sur cette commande sur ce thread askubuntu.
- service Cette commande permet de gérer les services. Lancer, arrêter, lister les services du système etc. Par exemple, pour relancer nginx après un changement dans le fichier de config, on fera
service nginx restart(notez quereloadsuffit dans certains cas). La commandeservice –status-all, bien pratique, permet de lister tous les services disponibles sur le système. Le paramètrestatuss’avère souvent fort utile puisqu’il donne des informations sur un service n particulier, notamment s’il est actif ou non. Exempleservice nginx status. On peut également activer ou désactiver le démarrage automatique des services au boot, pour cela, on doit troquer la commandeservicepour la commande nativesystemctl. Prenons apache2 pour exemple :# activer/désactiver un service systemctl enable apache2 systemctl disable apache2 # vérifier si un service est lancé au boot systemctl is-enabled apache2 - make permet de compiler un programme dont on détient les sources. En général on fait tout d’abord
./configure[à lancer avec–helppour voir les différentes options de compilation] (lance le script de configuration qui vérifie la présence de toutes les dépendances, et écrit le fichier makefile qui contient les ordres de compilation),make, et enfinmake install(elle installe le logiciel). - update-rc.d
update-rc.dpermet de configurer le démarrage ou l’arrêt automatique de service au démarrage de la machine ou selon le runlevel. On donne en argument le nom du service et l’action (remove ou default pour l’ajout)update-rc.d -f apache2 remove;-fpermet de forcer l’effacement du lien symbolique même si le nom existe encore. On peut aussi placer un script de démarrage dans répertoire/etc/init.dou le renseigner le fichier/etc/rc.local(qui a lui-même un lien symbolique dans /etc/init.d). - /etc/passwd Fichier qui contient les différents comptes utilisateurs de la machine (ce qui inclut les comptes utilisés par les logiciels ex : www-data pour Apache). On peut afficher les informations avec
cat:cat /etc/passwd. - cat /etc/group Fichier qui contient les groupes utilisateurs de la machine (ce qui inclut les groupes utilisés par les logiciels ex : www-data pour Apache). On peut afficher les informations avec
cat:cat /etc/group. - which localiser une commande ex :
which cat /bin/cat
- whereis localiser un fichier binaire.
Web
Web veut tout dire et rien dire à la fois, surtout dans la mesure où on parle déjà d’un serveur. Cependant, cette section concerne tout particulièrement les commandes liées aux serveurs web. On pense évidemment immédiatement à Apache2 mais d’autres pourraient s’y rajouter.
- a2ensite activer un
vhostApache :a2ensite buzut - a2dissite désactiver un
vhostApache :a2dissite buzut - a2enmod activer un module Apache :
a2enmod rewrite - a2dismod désactiver un module Apache :
a2dismod rewrite - a2enconf Sur le même modèle que pour les vhost et les modules,
a2enconfeta2disconfpermettent d’activer ou de désactiver des configurations. Par exemple, lorsqu’on ne renseigne pas explicitement le fichier d’access.logd’un vhost, Apache log le tout dans un fichier dédié :other_vhosts_access.log. Dans le cas où l’on ne voudrait pas de logs d’accès par exemple, on peut désactiver cette configuration :a2disconf other-vhosts-access-log. - apache2ctl
apache2ctlpermet d’une part d’agir en tant que script init (ce qui n’a pas grand intérêt puisqu’on utilise en général la commandeservice). Et d’autre part de controller le processus Apache et de récupérer des infos sur ce dernier.apache2ctl -Sest assez utile puisqu’elle permet de voir comment apache interprète nos Vhost, l’option-Mliste les modules Apache activés. Enfin, l’option-helpvous en dira plus sur les autres commandes disponibles !
Gestion réseau
- iftop dans la même veine que top, iftop sert à surveiller toutes les connexions réseau. Attention, iftop nécessite les privilèges root pour être lancé. Si vous n’êtes pas root, pensez à le faire précéder de sudo.
- speedometer un peu plus graphique que
iftop,speedometermonitor le traffic de vos entrées/sorties, permet de surveiller la progression d’un téléchargement, de savoir combien de temps il faudra pour transférer tel fichier ou encore de connaître la vitesse d’écriture de votre système. - exim4 Exim est un MTA qui permet d’envoyer des email depuis le serveur. Sans lui (ou un autre MTA) la fonction
mail()de php ou d’autres langages ne sera pas effective. Il en existe d’autres mais celui-ci est robuste, sécurisé, modulable et demande peu de ressources. Son installation est très simple, je l’explique dans cet article sur le logging. - ifconfig cette commande des plus indispensables permet d’obtenir des infos et de configurer les interfaces réseau. Employée sans argument, elle fournit des infos sur les interfaces réseaux. Mais elle permet aussi de modifier la configuration. Par exemple pour changer une adresse mac, on utilisera la commande
ifconfig $INTERFACE ether $MAC. Donc pour changer l’adresse mac de la carte ethernet, ce sera en généralifconfig eth0 ether 5E:FF:56:A2:AF:15. Notez cependant que cette commande, bien que toujours fonctionnelle, est dépréciée en faveur de la commandeipci-dessous. - ip cette commande permet d’afficher et de manipuler le routage et les interfaces. On s’en sert souvent pour lier ou supprimer une ip à une interface :
# lister toutes les addresses ip addr # ne lister que les informations ipv6 ip -6 addr # lister une interface en particulier ip addr show dev em2 # ajouter une adresse ipv4 ip addr add 192.168.0.7 dev eth0 # supprimer une ipv4 ip addr del 192.168.0.7 dev eth0 # pour la v6, il faut utiliser l'argument -6 ip -6 addr del 2574:104::b08b:c107 dev eth0
- ping permet de pinguer un client pour voir s’il est en ligne ou s’il répond au ping, ex
ping google.fr. L’option-cpermet de préciser le nombre de ping à envoyer avant que la commande ne s’arrête (elle prend donc en argument un nombre entier exemple :ping -c 8 google.fr), l’option-fpermet de flooder, c’est à dire que la carte réseau enverra autant de ping qu’elle est capable d’envoyer par seconde. - traceroute trace la route d’un paquet, routeur par routeur, jusqu’à sa destination. On peut utiliser indiféremment une ip ou un nom de domaine.
traceroute to google.com (173.194.67.113), 64 hops max, 52 byte packets 1 fast3504 (192.168.1.254) 12.108 ms 1.239 ms 1.217 ms 2 sl869-h01-31-38-37-254.dsl.sta.abo.bbox.fr (42.58.37.254) 33.504 ms 32.771 ms 40.120 ms 3 173.la63.bsr01-lyo.net.bbox.fr (194.158.110.189) 32.684 ms 31.828 ms 31.238 ms 4 be19.cbr01-cro.net.bbox.fr (212.194.171.16) 41.761 ms 41.636 ms 40.140 ms 5 be1.cbr01-ntr.net.bbox.fr (212.194.171.1) 45.495 ms 42.217 ms 40.052 ms 6 * * *
- dig ndd vérifier une correspondance dns. On peut directement spécifier l’ip du serveur dns à interroger, par exemple,
dig @8.8.8.8 buzut.fr.Buzut:~ Buzut$ dig @8.8.8.8 buzut.fr ; <<>> DiG 9.6-ESV-R4-P3 <<>> @8.8.8.8 buzut.fr ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2660 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;buzut.fr. IN A ;; ANSWER SECTION: buzut.fr. 43200 IN A 213.186.33.4 ;; Query time: 155 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Fri Jul 27 09:01:06 2012 ;; MSG SIZE rcvd: 42
- host permet de vérifier le reverse. Vous entrez donc une adresse ip et la commande vous retourne le nom de domaine associé.
- nslookup un peu dans le même genre que dig,
nslookupfourni des infos sur le nom de domaine passé en argument, adresse ip, type de réponse DSN… Exemple :nslookup buzut.fr.Buzut:~ Buzut$ nslookup buzut.fr Server: 212.27.40.240 Address: 212.27.40.240#53 Non-authoritative answer: Name: buzut.fr Address: 213.186.33.4
- route cette commande d’une praticité sans pareil vous permet de visionner les routes, mais aussi, en lui spécifiant quelques arguments, de modifier les routes. Pour ajouter une route par défaut :
route add default addr ipet pour supprimer une route par défaut :route delete default. - arp -an cette commande permet de voir la table arp actuelle. C’est à dire la correspondance entre les adresses ip et mac sur votre réseau.
- nmap
nmapest un outil qui scanne le réseau et les ports réseau d’une machine afin de voir lesquels sont ouverts et de détecter d’éventuelles failles sur les machines. Il permet aussi de détecter des machines connectées au réseau et bien plus encore. J’ai fait un petit billet sur nmap, qui reste un outil de référence dans le monde de la sécurité informatique.
Netstat
Ça c’est un morceau, et en faire le tour prendrait (au moins) un article entier. Quoi qu’il en soit cette commande est très pratique pour avoir un aperçu de ce qui se passe sur le réseau. On va donc voir directement quelques combinaisons de paramètres qui reviennent souvent.
- -nr pour la table de routage (revient au même que route).
- -i donne des statistiques sur les différentes interfaces réseau.
- -s personnellement je ne m’en sert que très rarement, mais c’est un résumé de toutes les stats réseaux, alors ça peut être utile de temps à autre.
- -uta liste toutes les connexions ouvertes (
upour udptpour tcp etapour afficher toutes les connexions (all)), à vous de jouer avec les paramètres pour filtrer un peu tout ça ! - -nap alternative à
-uta(plus facile à retenir pour sa signification anglosaxone), cette commande donne un résultat que je trouve plus lisible. Elle affiche toutes les connexions (a) avec les adresses en format numérique (n) et donne le PID correspondant (p). - -peanuts Dans le genre facile à retenir, on a là la combinaison des bons arguments ! Elle donnera un résultat un peu plus détaillé que
-nappuisqu’elle ajoute UDP et TCP avec du détail (-epour extended) et des statistiques (-s) pour toutes les connexions. - -ltupn encore une variante qui nous permet de visualiser tous les services qui sont à l’écoute sur des ports (donc toutes les connexions ouvertes). Toutes les connexions tcp
-tet udp-u, à l’écoute-lavec les programmes correspondant-pet accessoirement on demande de ne pas résoudre les nom de protocole avec-n. - -l permet d’afficher toutes les connexion en écoute (listen), on aura donc
netstat -ltpour toutes les conexions tcp en écoute. - -n peut être pratique aussi car elle permet d’afficher les adresses en format numérique au lieu de tenter de déterminer le nom symbolique d’hôte, de port ou d’utilisateur.
- -p permet d’affiche le nom et le PID des processus propriétaires des connexions.
netstat est la commande historique pour lister les connexions. Cependant, elle a été dépréciée en faveur de ss qui est plus moderne et plus performante, surtout en présence de nombreuses connexions. La plupart des options sont les mêmes, vous ne serez donc pas perdu. Au besoin, un petit coup de man ss ne peut pas faire de mal.
Spécifique à OSX
On s’éloigne un peu de notre sujet d’origine, mais on est toujours dans les commandes utiles à connaitre dans un terminal. Les 3/4 du temps, les commandes linux fonctionnent sous mac, mais l’OS d’Apple possède quelques commandes qui lui sont propres. Certaines sont bien pratiques, je liste donc ici celle que j’ai déjà eu l’occasion d’utiliser.
- ipconfig
ipconfig getpacket interfacedonne des infos sur la configuration ip, telles que l’adresse ip, l’ip des serveurs dns, le masque de sous domaine, le message dhcp… D’autres commandes existent avecipconfig, maisgetpacketest selon moi la plus intéressante, je ne parlerai donc ici pas des autres. Un petit exemple :Buzut:~ Buzut$ ipconfig getpacket en1 op = BOOTREPLY htype = 1 flags = 0 hlen = 6 hops = 0 xid = 3657777839 secs = 0 ciaddr = 0.0.0.0 yiaddr = 192.168.0.1 siaddr = 0.0.0.0 giaddr = 0.0.0.0 chaddr = 5E:FF:56:A2:AF:15 sname = file = options: Options count is 7 dhcp_message_type (uint8): ACK 0x5 server_identifier (ip): 192.168.0.254 lease_time (uint32): 0xd2f00 subnet_mask (ip): 255.255.255.0 router (ip_mult): {192.168.0.254} domain_name_server (ip_mult): {212.27.40.241, 212.27.40.240} end (none): - networksetup comme son nom l’indique,
networksetuppermet de configurer l’aspect réseau d’OSX. La commande est très très complète. On obtient par exemple la config DNS comme ceci :networksetup getdnsservers ethernet | airport. De la même manière, pour configurer les DNS,networksetup setdnsservers ethernet | airport dns1 [dns2].