Commandes de base sous Linux

Ce listing n'est pas exhaustif et pourtant toutes ces fonctions ne sont pas à connaître par coeur. On précise avec une * les indispensables.

Adapté de https://buzut.net/101-commandes-indispensables-sous-linux/

Commandes de bases, navigation dans les fichiers

  • echo *

    Affiche du contenu dans le terminal. echo "coucou"

  • ls *

    liste les fichiers d'un dossier. Options : -a pour les fichiers cachés, -l pour la liste détaillées, -h pour les tailles en unités "human readable". Très pratique l'option -R permet en un coup d'œil de visualiser les sous-dossiers.

  • cd *

    change directory, la commande permet de naviguer dans l’arborescence. Par exemple cd /var/log va 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/images va dans le répertoire images de mondossier lequel 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à.

    Deux raccourcis très utiles sont à connaître: cd ~ mène au répertoire de l'utilisateur courant (/home/user/ la plupart du temps ou /root/ si vous êtes en root) et cd - retourne sur le chemin précédent.

  • du

    disk usage, précise l'espace disque que prend chaque fichier ou dossier (l'option -h permet d'obtenir les tailles en "human readable"), tandis que l'option --max-depth=x (ou -d), très utile également, permet de limiter la détail à un niveau de sous dossier. --max-depth=1 ne retournera donc que la taille des répertoires courants. Cette commande s'avère particulièrement pratique quand ls -l ne 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

  • 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 + s

    Stoppe l'affichage, très pratique lorsqu'une commande très verbeuse "pollue" un peu votre terminal. Inversement, pour reprendre l'affichage, on utilisera ctrl + q

  • ctrl + d

    Déconnecte proprement une session ou un terminal. Par exemple, si vous êtes connecté en root depuis sudo, retourne à la session de l'utilisateur qui a exécuté sudo (comme si vous aviez entré exit). Ferme la connexion ssh si vous vous êtes connecté sur la session courante.

  • !!

    Dans la lignée des raccourcis bash bien pratiques, le double point d'exclamation, permet de lancer à nouveau la dernière commande. Ainsi, !! exécuté après un ls ou un pwd ré-exécutera cette dernière.

Opération sur les fichiers

  • cat *

    lire le contenu d'un fichier texte cat monfichier.txt

  • less *

    fonctionnement similaire à cat mais 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 -n permet de spécifier le nombre de lignes à afficher.

  • tail

    semblable à head mais concerne la "queue" du fichier, en d'autres termes, cette commande n'affiche que la fin. Une option très appréciable -f pour 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`. Si vous faites touch sur 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 -R permet 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 -f force la suppression, l'option -i demande une confirmation avant suppression, enfin l'option -r permet la suppression des dossiers.

  • rmdir

    remove directory, supprime un dossier seulement s'il est vide.

  • wc

    word count, permet de compter le nombre de lignes, de mots et de caractères dans un fichier texte. Les options sont -l pour line (nombre de ligne), -w pour word (nombre de mots) et -m pour le nombres de lettres. Il y a aussi l'option -c pour avoir la taille du fichier en bits.

    wc permet aussi facilement de savoir combien vous avez de fichiers/dossiers un dans répertoire donné, il suffit pour cela de rediriger la sortie d'un ls vers wc : ls | wc et le tour est joué !

  • sort

    trier un fichier texte par ordre alphabétique. L'option -r permet d'effectuer un tri inverse, c'est à dire anti-alphabétique ou décroissant pour les nombres, et l'option -R permet un tri aléatoire, c'est le mode shuffle. On n'oubliera pas non plus l'option -u qui permet d'éliminer les doublons. Enfin l'option -o permet de créer un nouveau fichier avec les résultats triés :

    sort -o fichier_trie.txt fichier_en_bordel.txt

  • uniq

    la commande uniq permet 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

  • tar *

    tar est 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 -tf servent à afficher le contenu d'une archive sans l'ouvrir. Il est aussi possible de compresser et décompresser à la volée les archives tar, il faut rajouter pour cela l'option -z lors de la création ou l'ouverture de l'archive tar -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 commande gunzip pour la dézipper.

  • iconv

    permet de changer l'encodage d'un fichier. option -f pour préciser l'encodage d'origine et option -t pour celui de destination. Par défaut, iconv renvoit 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

  • locate

    cette commande permet de localiser un fichier sur le disque dur. locate monfichier.txt. La commande locate est 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é, et locate ne vous sera alors d'aucun secours. On peut forcer la mise à jour de la base de données avec la commande sudo updatedb. On peut aussi se tourner vers la commande find.

  • find *

    la commande find est bien plus puissante que locate, mais elle est aussi bien plus lente car elle parcourt le disque au fur et à mesure de la recherche. Sa syntaxe est la suivante find /adresse_du_repertoire_de_recherche/ element_a_trouver. Cette syntaxe n'est qu'une base. find permet 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…

Flux de redirection

  • > *

    renvoyer le resultat dans un fichier (si celui-ci existe, il sera écrasé). Exemple echo "coucou" > fichier.txt

  • >>

    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.

  • <

    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. Par exemple << STOP, on pourra saisir du texte jusqu'à ce que l'on tape STOP

  • |

    rediriger le résultat d'une commande dans une autre. ex: sort prenoms.txt | uniq ou cat monfichier.txt | page

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 &. Cette instruction permet aussi de passer la commande en arrière plan et redonne immédiatement accès au shell.

  • 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:22 ou at now + 5hours puis ctlr + d.

  • 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, ou d pour 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". Voici les options les plus courantes : e modifie la crontab, l affiche la crontab actuelle.

Droits, groupes et utilisateurs

  • sudo *

    exécuter une commande en tant que root.

  • sudo su ou su selon la distribution *

    passer root et le rester.

  • chmod *

    changer les droits sur un fichier un ou dossier (option -R pour la récursivité dans tous les fichier et sous-dossier du dossier sur lequel on l'applique).

  • chown *

    change le propriétaire d'un fichier/dossier (ne peut s'utiliser qu'en root) option -R pour la récursivité.

  • adduser

    ajouter un utilisateur.

  • passwd

    changer le mot de passe d'un utilisateur. Ex : passwd roger.

  • deluser

    supprimer un utilisateur (option --remove-home pour supprimer tous ses fichiers).

  • addgroup

    créer un groupe.

  • usermod

    modifie un utilisateur (options : -l pour changer le nom, -g pour lui assigner un groupe, -G pour lui assigner plusieurs groupes (séparés par des virgules), -a en complément de -g ou -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.

  • chgrp

    change le groupe propriétaire d'un fichier (équivalent à chown user:group).

Système

  • w

    qui est connecté et fait quoi.

  • who

    qui est connecté.

  • date

    donne l'heure.

  • kill

    tuer un processus (va demander son PID). L'option -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.

  • 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 matériel. L'option -r bien pratique, permet d'obtenir la version du kernel.

  • lsb_release

    lsb_release -a donne toutes les infos sur la distribution.

  • 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 -short vous obtiendrez une sortie plus digeste. L'option -c network s'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].

  • 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 que reload suffit dans certains cas). La commande service --status-all, bien pratique, permet de lister tous les services disponibles sur le système.

    Le paramètre status s'avère souvent fort utile puisqu'il donne des informations sur un service en particulier, notamment s'il est actif ou non. Exemple service nginx status.

Gestionnaire de paquets Debian et dérivés

  • apt-cache

    gestion des paquets. Deux options sont très utiles apt-cache search nom_paquet, permet de chercher un paquet, et apt-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-à-installer pour 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-repository permet 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 de apt-get ou aptitude, sans avoir besoin de compiler !

Gestion réseau

  • ssh

    secure shell. Permet de se connecter au shell d'un ordinateur distant et d'y exécuter des commandes.

    ssh login@ip

    Et voilà tout, pour se déconnecter, ce sera exit, et toutes les commandes habituellement utilisables dans un terminal le sont aussi via ssh.

  • 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éral ifconfig 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 commande ip ci-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 -c permet 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 -f permet 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.

  • host

    permet de vérifier le reverse. Vous entrez donc une adresse ip et la commande vous retourne le nom de domaine associé.

  • 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 ip et 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.

  • wget

    copie un fichier distant sur l'ordinateur. wget http://www.site.org/rep/01/fichier.txt

  • curl *

    curl permet, comme wget, de récupérer un fichier depuis une url, mais s'il mérite sa place ici, c'est qu'il permet bien plus. C'est en effet le couteau suisse du HTTP. On l'utilisera en effet pour tester des requêtes dans différents formats, analyser les HEADERS etc.

    • requête get classique curl https://buzut.fr

    • afficher les headers curl https://buzut.fr -D -

    • faire une requête de type X (HEAD, POST, PUT, PATCH, DELETE…) curl -X HEAD https://buzut.fr

    • passer des paramètres au format form data curl -X POST --data "email=moi@mail.com&passwd=azerty" https://monsite.com/login

    • même requête avec les paramètres en request payload, JSON. (on ajout ici un header) curl -H "Content-Type: application/json" -X POST --data '{"email":"moi@mail.com","passwd":"azerty"}' https://monsite.com/login

  • 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 (u pour udp t pour tcp et a pour 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 -nap puisqu'elle ajoute UDP et TCP avec du détail (-e pour 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 -t et udp -u, à l'écoute -l avec les programmes correspondant -p et 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 -lt pour 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(https://www.it-connect.fr/les-connexions-sockets-avec-la-commande-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.