Linux – commande introuvable

Sous Linux, si vous avez le message commande introuvable alors que vous pensez qu’elle est bien installée.

Exemple sous Debian 10 avec la commande pwck :

pwck -r
 bash: pwck : commande introuvable

On peut effectuer une recherche de la commande, ici pwck, avec whereis :

whereis pwck
 pwck: /usr/sbin/pwck /usr/share/man/man8/pwck.8.gz

On voit ici que la commande pwck se trouve sous /usr/sbin, à noter que l’on voit également où se trouvent les pages de manuel.

Si le système ne trouve pas la commande pwck, c’est que son chemin d’accès /usr/bin est absent de la variable d’environnement PATH.

Si l’on veut consulter le contenu de la variable PATH (en respectant la casse) :

echo $PATH
 /home/dominique/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Je vois que /usr/sbin ne figure pas dans la variable.

Pour la durée de la session

Pour ajouter /usr/sbin à la variable PATH :

export PATH=$PATH:/usr/sbin

Si je contrôle à nouveau le contenu de la variable PATH, /usr/sbin doit s’y trouver.

Ma commande pwck -r est maintenant fonctionnelle à condition d’être administrateur, root, sous Debian ou avec sudo sous Ubuntu (dans son cas).

Pour modifier PATH de façon permanente

Voir l’article :

Recherche des fichiers sous Linux et la variable PATH

Recherche des fichiers sous Linux et la variable PATH

locate et updatedb

updatedb

En administrateur.

updatedb

ou

sudo updatedb

Pour mettre à jour la base d’indexation utilisée par la commande locate.

locate

locate sources.list
 /etc/apt/sources.list
 /etc/apt/sources.list.d
 /etc/apt/sources.list.d/official-package-repositories.list
 /usr/share/doc/apt/examples/sources.list
 /usr/share/man/de/man5/sources.list.5.gz
 /usr/share/man/fr/man5/sources.list.5.gz
 /usr/share/man/it/man5/sources.list.5.gz
 /usr/share/man/ja/man5/sources.list.5.gz
 /usr/share/man/man5/sources.list.5.gz
 /usr/share/man/nl/man5/sources.list.5.gz
 /usr/share/man/pt/man5/sources.list.5.gz
 /var/lib/dpkg/info/mintsources.list
 /var/lib/dpkg/info/python3-pkg-resources.list

Pour effectuer une recherche rapide d’un chemin.

Si les commandes locate et updatedb ne sont pas présentes, on installe le paquet mlocate. Vous pouvez exécuter updatedb (en administrateur ou avec sudo) avant locate si nécessaire.

find

Recherche de fichiers depuis un répertoire de départ et sa descendance avec la commande find (en administrateur ou avec sudo).

find /etc -name sources.list ou sudo find /etc -name sources.list
 /etc/apt/sources.list
find /var/log/ -name "syslog" ou sudo find /var/log/ -name "syslog"
 /var/log/syslog
 /var/log/installer/syslog

Avec le caractère jockers * qui correspond à 0 ou n caractères pour rechercher par exemple tous les fichiers .png.

find -name ".png" ou sudo find -name ".png"
 ./Images/test.png
 ….

which

Les commandes externes sont fournies par des fichiers, which permet de les retrouver (pas besoin d’être administrateur).

which python
 /usr/bin/python
which bash
 /bin/bash
which pwd
 /bin/pwd

whereis

whereis localise l’exécutable (comme which) , les sources et la page de manuel d’une commande (pas besoin d’être administrateur).

whereis python
 python: /usr/bin/python /usr/bin/python2.7-config /usr/bin/python3.7m-config /usr/bin/python3.7m /usr/bin/python3.7-config /usr/bin/python2.7 /usr/bin/python3.7 /usr/lib/python2.7 /usr/lib/python3.7 /etc/python /etc/python2.7 /etc/python3.7 /usr/local/lib/python2.7 /usr/local/lib/python3.7 /usr/include/python3.7m /usr/include/python2.7 /usr/include/python3.7 /usr/share/python /usr/share/man/man1/python.1.gz
whereis -m bash    -m pour les pages de manuel
 bash: /usr/share/man/man1/bash.1.gz

La variable d’environnement PATH

Si vous avez installé un paquet, une commande, que le système ne trouve pas, vous pouvez la localiser avec whereis et ajouter le chemin d’accès de son dossier à la variable PATH.

Pour voir le contenu de la variable PATH (pas besoin d’être administrateur) :

 echo $PATH

Exemple, pour ajouter /usr/sbin à la variable d’environnement PATH (pas besoin d’être administrateur) :

export PATH=$PATH:/usr/sbin

Voir un cas dans l’article suivant :

Iftop surveiller le trafic réseau depuis un terminal sous Ubuntu ou Linux Mint et Debian

À la déconnexion PATH reprendra sa valeur par défaut, donc /usr/sbin n’existera plus dans PATH.

Pour modifier PATH de façon permanente

On peut éditer le fichier de configuration du Shell de connexion. Pour le Shell BASH il s’agit de /home/user/.bashrc.

Attention, vous devez remplacer user par votre nom d’utilisateur !

On peut utiliser un éditeur de texte ou utiliser la commande suivante :

echo 'export PATH=$PATH:/usr/sbin' >> /home/user/.bashrc

La ligne est ajoutée à la fin du fichier. Pour que la modification soit prise en compte, vous devez redémarrer votre ordinateur.

Plus d’informations

Si vous travaillez sur un système sans interface graphique, il peut être nécessaire de modifier la variable PATH pour la session afin d’avoir accès aux commandes permettant de redémarrer le système et de modifier également la variable PATH de façon permanente pour que cela soit pris en compte après le redémarrage.

J’ai dû modifier la variable PATH sous Debian 10.


Fichiers systèmes

Les fichiers systèmes que j’ai déjà eu l’occasion de modifier ou de consulter.

Quelques fichiers systèmes sous Linux

Les commandes host et hostname – noms de domaines sous Linux

Les commandes

La commande host

 host google.fr
 google.fr has address 172.217.19.227
 google.fr has IPv6 address 2a00:1450:4007:80b::2003
 google.fr mail is handled by 40 alt3.aspmx.l.google.com.
 google.fr mail is handled by 30 alt2.aspmx.l.google.com.
 google.fr mail is handled by 50 alt4.aspmx.l.google.com.
 google.fr mail is handled by 20 alt1.aspmx.l.google.com.
 google.fr mail is handled by 10 aspmx.l.google.com.

Donne l’IP associée au nom de domaine (ici . 172.217.19.227).

host 8.8.8.8
 8.8.8.8.in-addr.arpa domain name pointer dns.google.

Donne le nom de domaine principal associé à l’IP (ici dns.google). Sous Windows, depuis l’invite de commande, on utilisera la commande nslookup google.fr.

La commande hostname

 hostname
 debian-10

Donne le nom d’hôte de la machine

hostname --fqdn
 S4211Debian7.tsrit.2isa.local

Affiche le FQDN (nom de domaine complètement qualifié/Fully Qualified Domain Name).

hostname nouveau_nom

En administrateur, modifie le nom d’hôte de la machine.


Les fichiers

On peut voir le contenu des fichiers avec la commande cat. Pour modifier des fichiers, on peut utiliser un éditeur comme nano.

Le fichier host

Le fichier hosts donne un moyen d’assurer la résolution de noms, de donner un nom FQDN à un hôte.

cat /etc/hosts

Le fichier host.conf

Le fichier host.conf sert à indiquer à votre poste les méthodes successives qu’il va utiliser pour effectuer sa résolution de nom, par exemple : consulter avant tout son propre fichier host, puis s’adresser à un service DNS.

cat /etc/host.conf

Le fichier resolv.conf

Le fichier resolv.conf sert à indiquer la liste des serveurs DNS que vous allez interroger (exemple avec Debian 10). Des programmes tels que dhcpd, networkmanager, etc. peuvent modifier le fichier resolv.conf. Si vous voulez le paramétrer vous-même, il vous faudra faire en sorte d’empêcher ces modifications.

 cat /etc/resolv.conf
 Generated by NetworkManager
 search home
 nameserver 192.168.1.1
 nameserver 8.8.8.8

Le fichier hostname

Le nom de votre machine est sauvegardé dans le fichier hostname.

cat /etc/hostname
 debian-10

Iftop surveiller le trafic réseau depuis un terminal Sous Ubuntu ou Linux Mint et Debian

La commande iftop permet de visualiser rapidement le trafic sur vos interfaces réseau. On utilise la commande iftop en administrateur, précédée de sudo sous Ubuntu et Linux Mint.

Pour installer iftop sous Linux Mint ou Ubuntu depuis un terminal :

sudo apt-get install iftop

Depuis un terminal sous Debian en administrateur root  (avec su) :

su
apt-get install iftop

Pour lancer iftop  sous Ubunru et Linux Mint et écouter la première interface disponible :

sudo iftop

Sous Debian en administrateur :

iftop

Pour afficher une vue dynamique du trafic r réseau passant par l’interface nommée enp0s3 sous Ubuntu et Linux Mint :

sudo iftop -i enp0s3

Sous Debian en administrateur :

iftop -i enp0s3

Pour afficher les adresses IP sous Ubuntu et Linux Mint :

sudo iftop -n

Sous Debian en admdinistrateur :

iftop -n

Pour afficher les ports sous Ubuntu et Linux Mint :

sudo iftop -P

Sous Debian en administrateur :

iftop -P

Pour afficher l’aide pendant l’utilisation [H].

Pour quitter iftop [Q]


Pour obtenir le nom de vos interfaces réseau sous Ubuntu, Linux Mint :et Debian

ifconfig ou ip address


Pour afficher l’aide

man iftop ou iftop ?


Problèmes rencontrés pour l’installation du paquet iftop sous Debian 10

Si l’on installe le paquet iftop sous Debian 10 et que l’on a le message « bash : iftop : commande introuvable ». C’est que le système ne trouve pas iftop qui est sous /usr/sbin (ce que vous pouvez vérifier avec la commande locate si elle est installée ou avec la commande whereis). La cause est l’absence de ce chemin d’accès dans la variable d’environnement PATH.

Pour voir le contenu de la variable PATH (pas besoin d’être administrateur) :

echo $PATH

Pour ajouter /usr/sbin à la variable PATH (pas besoin d’être administrateur) :

export PATH=$PATH:/usr/sbin

Plus d’informations

On peut chercher l’existence d’une commande en utilisant whereis.

Exemple :

whereis iftop
 iftop: /usr/sbin/iftop /usr/share/man/man8/iftop.8.gz

Si vous voulez aller plus loin, vous pouvez utiliser une application comme Wireshark :

Wireshark

La page de mon site consacrée aux commandes Shell et le réseau :

Les commandes Shell et le réseau

Les commandes Shell Linux depuis Python

J’utilise Debian 10 Buster et Python 3.7.3

Mon but ici est d’exécuter des commandes Shell Linux depuis un script Python et si nécessaire de récupérer le résultat d’une commande dans une variable.

Dans mon exemple de programme en Python, je récupère le PID d’un processus Linux (celui de LibreOffice) dans une variable, par la suite, j’utilise ce paramètre dans une commande Shell Linux kill pour tuer l’application.

Si vous avez des suggestions d’améliorations ou une autre façon de procéder, je suis à votre écoute, rien n’est figé dans le marbre.

Mon exemple :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
# Obtenir le pid de LibreOffice et arrêter l'application
import subprocess
import os
pid = os.popen("pidof soffice.bin").read() #Obtenir le pid de LibreOffice grâce à une commande du Shell Linux
if pid != '': #si le pid n'est pas vide
    print('Mon pid : ', pid) #Afficher le pid
    Commande = 'kill -9 '+ str(pid) #La commande du Shell Linux qui va pemettre d'arrêter l'application
    subprocess.Popen(['/bin/sh', '-c', Commande]) #on arrête l'application
else: #sinon - pas de pid
    print("Oops! Je n'ai pas trouvé LibreOffice")

C’est un exemple intéressant, mais en fait on peut arrêter une application sans disposer de son PID avec la commande pkill. Ce qui donne l’exemple qui suit :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
import subprocess
subprocess.Popen(['/bin/sh', '-c', "pkill office"]) #on arrête l'application LibreOffice

Ce que je trouve dommage, c’est que l’on ne teste pas au préalable si LibreOffice est effectivement lancé. Vous avez une idée pour améliorer cela ?

Afficher des informations sur les processeurs sous Linux

Pour obtenir des informations sur le processeur sous Linux, on peut utiliser la commande lscpu ou consulter le fichier /proc/cpuinfo.

Sous Linux, on peut afficher des informations sur le processeur avec la commande lscpu :

lscpu

Architecture :                          x86_64

Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit

Boutisme :                              Little Endian

Processeur(s) :                         2

Liste de processeur(s) en ligne :       0,1

Thread(s) par cœur :                    1

Cœur(s) par socket :                    2

Socket(s) :                             1

Nœud(s) NUMA :                          1

Identifiant constructeur :              GenuineIntel

Famille de processeur :                 6

Modèle :                                23

Nom de modèle :                         Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz

Révision :                              10

Vitesse du processeur en MHz :          1597.799

Vitesse maximale du processeur en MHz : 2936,0000

Vitesse minimale du processeur en MHz : 1603,0000

BogoMIPS :                              5858.97

Virtualisation :                        VT-x

Cache L1d :                             32K

Cache L1i :                             32K

Cache L2 :                              3072K

Nœud NUMA 0 de processeur(s) :          0,1

Drapaux :                               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm pti tpr_shadow vnmi flexpriority dtherm

On peut transmettre le résultat à la commande grep pour filtrer les résultats :

lscpu | grep bit

Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit

Le fichier /proc/cpuinfo contient des informations sur le processeur (CPU) de la machine. Pour afficher ce fichier, on peut utiliser la commande cat :

cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 23

model name      : Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz

stepping        : 10

microcode       : 0xa0b

cpu MHz         : 1597.900

cache size      : 3072 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 2

apicid          : 0

initial apicid  : 0

fpu             : yes

fpu_exception   : yes

cpuid level     : 13

wp              : yes

flags          
 : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat 
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm 
constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni 
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave 
lahf_lm pti tpr_shadow vnmi flexpriority dtherm

bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds

bogomips        : 5858.97

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:




processor       : 1

vendor_id       : GenuineIntel

cpu family      : 6

model           : 23

model name      : Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz

stepping        : 10

microcode       : 0xa0b

cpu MHz         : 1597.900

cache size      : 3072 KB

physical id     : 0

siblings        : 2

core id         : 1

cpu cores       : 2

apicid          : 1

initial apicid  : 1

fpu             : yes

fpu_exception   : yes

cpuid level     : 13

wp              : yes

flags          
 : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat 
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm 
constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni 
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave 
lahf_lm pti tpr_shadow vnmi flexpriority dtherm

bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds

bogomips        : 5858.97

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:

Copier, renommer, créer, supprimer un fichier ou un répertoire

Vous devez vous connecter en administrateur « root » si nécessaire.

La commande cp « copy » permet de copier les fichiers et les répertoires.

Pour copier un fichier ou un répertoire et son contenu :

cp fichier1 fichier2

Pour copier un répertoire et tous les sous répertoire et fichiers qu’il contient (-r ou -R) :

cp -r répertoire1 répertoire2 
cp -R répertoire1 répertoire2

Par exemple, la copie d’un répertoire et de tout ce qu’il contient en utilisant la récursivité :

cp -R tiny-framework/ /var/www/html/wp-content/themes/

La commande mv « move » permet de déplacer ou renommer un fichier ou un répertoire.

mv source destination (déplacement et renommage) :

mv fichier1 répertoire/fichier2

Pour renommer un fichier :

mv fichier1 fichier2

La commande rm « remove » permet de supprimer des fichiers ou des répertoires.

Effacer un fichier :

rm fichier

Supprimer un répertoire non vide et tout ce qu’il contient (attention danger !) :

rm -r partage

La commande rmdir « remove directory » permet de supprimer un répertoire vide :

rmdir répertoire

La commande touch permet de créer un fichier vide :

touch fichier

La commande mkdir « make directory » permet de créer un répertoire :

mkdir répertoire

Le paramètre -p « pour parents » permet la création de toute l’arborescence menant au répertoire si elle n’existait pas :

mkdir -p /répertoire/sous-répertoire

Visualiser le contenu d’un fichier avec la commande cat

J’utilise souvent la commande cat pour vérifier que les modifications que j’ai effectuées dans un fichier (avec Nano par exemple) ont bien été prises en compte.

Pour visualiser le contenu d’un fichier :

cat nomdufichier

Pour visualiser deux fichiers à la suite l’un de l’autre :

cat nomdefichier1 nomdefichier2

Pour concaténer (fusionner) deux fichiers dans un troisième :

cat nomdefichier1 nomdefichier2 > nomdefichier3

Pour numéroter les lignes

cat -n nomdufichier

Exemples d’options :

 -b numéroter ou seulement les lignes qui contiennent effectivement du texte.

-s Supprimer les lignes vides successives pour n’en laisser qu’une seule.

-A Afficher tous les caractères non imprimables, tabulations et fins de lignes.

Pour afficher numéros de lignes et de colonnes d’un fichier ouvert avec l’éditeur de texte Nano :

nano -c nomdufichier

L’éditeur de texte Nano

Nano est un éditeur de texte pour Linux simple à utiliser depuis le terminal (utile quand on n’a pas d’interface graphique d’installée). Je l’utilise pour modifier des fichiers de configuration ou des scripts Shell.

Pour Ubuntu, normalement, Nano est déjà installé sur votre système.

Si Nano n’est pas présent sur votre système (par exemple pour Ubuntu, Debian), il suffit d’installer le paquet nano :

Pour Ubuntu avec sudo

sudo apt-get install nano

Pour Debian en administrateur (root)

apt-get install nano

Pour ouvrir un fichier avec nano :

nano nomdufichier

Si vous ne vous trouvez pas dans le dossier contenant le fichier, vous pouvez utiliser un chemin relatif ou absolu.

Après avoir modifier votre fichier vous pouvez enregistrer les modifications et quitter Nano :

[Ctrl] + [X]

[O]

[Entrée]

Pour vérifier le contenu votre fichier vous pouvez utiliser la commande cat qui permet de visualiser son contenu :

cat nomdufichier

 

Installer des paquets sous Ubuntu ou Debian

Si vous avez besoin de mettre à jour les dépôts (en cas de modification du fichier /etc/apt/sources.list par exemple) :

Pour Ubuntu avec sudo

sudo apt-get update

Pour Debian en administrateur (root)

apt-get update

Pour installer des paquets sous Ubuntu ou Debian:

Pour Ubuntu avec sudo

sudo apt-get install nomdupaquet1 nomdupaquet2

Pour Debian en administrateur (root)

apt-get install nomdupaquet1 nomdupaquet2

Pour vérifier que les paquets sont bien installés sur votre système, cela peut être utile lorsque l’on suit une procédure où de nombreux paquets sont prérequis :

dpkg –l nomdupaquet1 nomdupaquet2