Memo : Commandes de base pour débuter et comprendre Linux

duckduck vs google cover

Dans cet article je vous partage un memo des commandes et logiciels que j’ai eu à utiliser au cours de ma vie d’utilisateur de Linux et son terminal, ces 4-5 dernières années. Certaines sont des commandes de base, d’autres des commandes un peu plus avancées mais que je suis amené à utiliser souvent ou que j’ai trouvé utile de garder sous le coude.

Cette liste n’est évidemment pas exhaustive, c’est un memo personnel que je partage avec vous, au cas où ça puisse aider les débutants.

Si vous débutez, pensez aussi que quasiment toutes les commandes ont un manuel associé que vous pouvez consulter en tapant man nomdelacommande. Pour en savoir plus sur la commande tar par exemple vous pouvez taper man tar, tout simplement. Cela peut notamment vous permettre de comprendre les flags qui suivent certaines commandes.

Enfin avant de vous lister les commandes, j’admets volontiers que je suis un amateur éclairé sur le sujet, autodidacte en plus, et que vous avez sans doutes plein de choses à m’apprendre. N’hésitez pas à me mettre vos conseils ou à partager les petites commandes que vous recommandez de connaître en commentaires. Cela me sera bien utile et peut-être à d’autres lecteurs aussi !

Fichiers

  • cd /dossier/de/destination : se rendre dans un dossier ex cd /home/gabriel/MesPhotos
  • cd : revenir à la racine de ton dossier
  • cd .. : remonter d’un niveau dans l’arborescence
  • rm nomdefichier : supprimer un fichier
  • rm nomdedossier -r : supprimer un dossier et son contenu
  • mv /chemin/de/base /chemin/de/destination : déplacer un fichier ou un dossier
  • cp /home/fichier1 /new/fichier2 : copier le fichier1 à l’emplacement de fichier2
  • cp -rp /home/julien/mondossier /run/media/julien/. copier mondossier (-r pour répertoire) vers son nouvel emplacement, en préservant les permissions et caractéristiques de fichiers (-p)
  • mkdir nomdedossier : créer un dossier. Pour s’en rappeler mkdir = make directory
  • touch nomdefichier : créer un fichier
  • nano nomdefichier : éditer un fichier (tu peux le faire même si le fichier existe pas, il sera créé à la sauvegarde)
  • ls -lh : lister tous les fichiers d’un dossier, leurs tailles, leurs permissions. Le h correspond à human readable pour avoir des poids compréhensibles.
  • ls -lhS : lister tous les fichiers par ordre de taille
  • clear : commande terminal pour nettoyer la fenêtre de tout ce qui est affiché
  • wget example.com/fichier.zip : permet de télécharger un fichier quand on lui attache une URL

Système

  • sudo apt-get update : met à jour la liste des paquets pour connaitre les versions disponibles
  • sudo apt-get upgrade : met à jour les dernières versions des paquets disponibles
  • sudo apt-get dist-upgrade met à jour les dernières versions des paquets, en téléchargeant les nouveaux si besoin.

Utilisateurs

  • passwd: changer le mot de passe de l’utilisateur courant
  • su roger : se connecter en tant que l’utilisateur roger

Permissions

Le sujet des permissions est très très vaste et essentiel dans l’utilisation avancée de Linux. Mais il y a quelques commandes que vous serez certainements amenés à utiliser régulièrement si vous faites du développement web en local notamment :

  • chown www-data:www-data undosssier/ -R : attribuer à l’utilisateur www-data du groupe www-data un dossier. Cette commande est utilisées maintes et maintes fois pour régler les problèmes d’accès aux fichiers par un serveur PHP par exemple. L’utilisateur web peut varier selon les distributions; sur Manjaro c’est http:http par exemple.
  • chmod +x unfichier.sh : changer les permissions et rendre un fichier executable.

Serveur

  • reboot : pour lancer le redémarrage de la machine.
  • exit : pour quitter la session en cours et/ou fermer la connexion SSH en cours
  • ssh : la commande d’accès à distance de votre machine.
  • savoir quel process a accès à un port : https://www.cyberciti.biz/faq/what-process-has-open-linux-port/
  • curl -I https://urldesite.com : recevoir le header du serveur en question
  • apache2ctl -S permet de lister tous les virtual hosts apache activés

scp

La commande scp permet (entres autres) de déplacer un fichier d’une machine à l’autre via le protocole sécurisé SSH. Cas d’usage : récupérer une sauvegarde d’un serveur pour la télécharger en local.

scp -P 45 <source> <destination>
scp /path/to/file username@a:/path/to/destination .
scp -P 45 root@22.22.22.22:/root/backup-server-$(date +"%Y-%m-%d").tar.gz backup-my-server-$(date +"%Y-%m-%d").tar.gz

Notes :

  • tout comme SSH cette commande requiert de préciser le port de SSH si celui ci n’est pas le port 22 par défaut. Attention toutefois le paramètre doit être en majuscule -P 45 !
  • ne pas oublier de mettre le chemin et nom de fichier de destination. Pour garder le même nom et l’emplacement courant local il faut simplement terminer la commande par un point.
  • la commande rsync peut faire la même chose et énormément plus. Cette commande est très puissante et peut s’avérer extrêmement utile pour automatiser des sauvegardes par exemple. Je dois encore me pencher dessus pour bien la comprendre, mais gros potentiel.

Quelques commandes annexes : Pour télécharger tous les fichiers d’un format dans le dossier visé et les copier à l’emplacement local courant :

scp -P 22 root@22.22.22.22:/mnt/volume0/srv/sites/*.tar.gz .

Et, sur le même principe, pour télécharger tous les fichiers de plusieurs extensions :

scp root@22.22.22.22:'/mnt/volume0/srv/sites/*.{tar.gz,jpg}' .

logs et infos

Apprendre c’est aussi faire des erreurs. Pour apprendre de ses erreurs il faut d’avoir savoir aller les enregistrer et revenir dessus. Ces commandes peuvent être utiles pour comprendre ce qu’il se passe sur votre machine :

  • tail : lire les dernières lignes d’un fichier (idéal pour les journaux)
  • tail -f : afficher en temps réel les nouvelles entrées d’un fichier. Idéal pour suivre en direct ce qu’a à vous dire un fichier de logs
  • watch : avant une commande permet d’avoir un rafraichi de cette commande toutes les 2 secondes. Rajouter --interval=.5 pour que la commande soit relancée toutes les demi secondes par exemple
  • grep "throttled" /var/log/kern.log.1 | wc -l: ou à peu près ça permet de savoir si le kernel ralentit le processeur (pour cause de température par exemple)
  • identify -verbose DSC_1736.JPG | grep "exif:" : lire les données EXIF d’une image (source).

Les recherches utiles

De manière générale il est recommandé de se familiariser avec la commande grep qui permet de faire énormément de choses différentes et d’être associée à d’autres commandes pour faire des recherches précises ou filtrer des contenus. La commande find peut aussi être très utile; un peu plus complexe peut-être.

  • history | grep "une ancienne commande" permet de retrouver une commande anciennement tapée dans l’historique
  • taper CTRL+R permet d’effectuer une recherche dans les commandes récemment utilisées
  • dpkg --list permet de voir la liste exhaustive des paquets installés sur le serveur. dpkg --list | grep "mail" par exemple permet de savoir tous les paquets qui mentionnent le mot mail

Quelques exemples de recherches avancées de fichiers :

  • find . -size -2k -not -path "./dossier/*" -exec ls -lS {} \+ : rechercher des fichiers de moins de 2ko, en ignorant le répertoire /dossier/
  • find . -type f -name "*.md" | cut -d/ -f2 | sort | uniq -c | sort -nr : lister tous les sous dossiers avec le nombre de fichiers de l’extension .md (markdown) que chacun contient

Manipulation de fichiers

  • youtube-dl Le logiciel en ligne de commandes qui permet de télécharger des vidéos youtube, en vidéo, en SD, HD, en audio, et des médias depuis des tas d’autres sites. Super utile et très complet
  • youtube-dl URL --extract-audio --audio-format mp3 pour télécharger une vidéo au format audio mp3

Liens symboliques

ln -s dossier_cible nom_du_lien : créer un lien symbolique.

Compression et archivage

  • tar cvf pour créer une archive (c = create). Rajouter z pour gzipper.
  • tar xvf pour extraire une archive (x = extract)

Espaces Disques

  • mount : monter un disque / un périphérique
  • umount : démonter un disque / un périphérique
  • df -h : lister les partitions
  • du -hs : calculer et afficher le poids total d’un dossier et ce qu’il contient.
  • du -h -d 1 : afficher la taille des sous dossiers. Le -d 1 définit le nombre de sous niveaux.
    • pour trier : sudo du -h -d 1 | sort -n -r
  • lsblk : lister l’organisation des disques et partitions
  • lsblk -d : lister les disques physiques
  • pvs : rapport d’information sur les volumes physiques
  • lvs : rapport d’information sur les volumes virtuels
  • parted ou fdisk ou cfdisk : équivalents en ligne de commandes du logiciel gparted qui permettent de manipuler les partitions d’une machine.
  • fdisk -l : lister les partitions

Réseau

  • sudo nmap -sU undomaine.com : mapper les ports (lent?)
  • netcat nc -vu 163.172.xx.xx 10000 : tester l’accès au port 10000 sur la machine 163.172.xx.xx
  • host pour avoir les infos DNS d’un domaine. Renvoie NXDOMAIN quand le domaine est NoneXistant.

Système : quelques logiciels et commandes utilitaires

  • uname est une commande de référence pour obtenir des informations sur le système.
  • lspci affiche les données détaillées sur les ports du bus PCI de la machine. L’option -vvv permet d’avoir encore plus d’informations

  • /opt/vc/bin/vcgencmd measure_temp : commande pour connaitre la température sur un RaspberryPi dont j’ai eu besoin plusieurs fois pour connaitre la température de la carte (source).

  • screenfetch : Le logiciel screenfetch permet d’afficher un récapitulatif de ce qui compose votre machine. Très utilie pour trouver des infos de base rapidement. Et j’avoue, l’affichage totalement gadget du logo de l’OS en ASCII dans le terminal me fait marrer.
sudo apt-get update
sudo apt-get install screenfetch
screenfetch

    .',;:cc;,'.    .,;::c:,,.    pi@raspberrypi
   ,ooolcloooo:  'oooooccloo:    OS: Raspbian 9.6 stretch
   .looooc;;:ol  :oc;;:ooooo'    Kernel: armv7l Linux 4.14.79-v7+
     ;oooooo:      ,ooooooc.     Uptime: 1h 33m
       .,:;'.       .;:;'.       Packages: 1235
       .... ..'''''. ....        Shell: 1411
     .''.   ..'''''.  ..''.      CPU: ARMv7 rev 4 (v7l) @ 1.4GHz
     ..  .....    .....  ..      RAM: 131MiB / 927MiB
    .  .'''''''  .''''''.  .    
  .'' .''''''''  .'''''''. ''.  
  '''  '''''''    .''''''  '''  
  .'    ........... ...    .'.  
    ....    ''''''''.   .''.    
    '''''.  ''''''''. .'''''    
     '''''.  .'''''. .'''''.    
      ..''.     .    .''..      
            .'''''''            
             ......       

Et voilà, c’est à peu près tout ce que j’ai pour ce mémo, après quelques années passées à utiliser et bidouiller sur une machine linux (Ubuntu puis Manjaro en local, Ubuntu puis Debian sur mon serveur). Si vous êtes tombé par hasard sur ce billet et qu’il vous a été utile d’une manière ou d’une autre, laissez un commentaire pour en parler :).