Bases de Linux et de la ligne de commande

Le script exécutable run.sh, situé dans le répertoire courant, donne « command not found » quand on le lance en tapant « run.sh », mais s'exécute quand on tape « ./run.sh ». Quelle en est la raison ?

  1. Arun.sh n'a pas le droit d'exécution, et c'est seulement avec ./ devant qu'il peut s'exécuter sans ce droit
  2. BUn nom de commande sans barre oblique n'est cherché que dans les répertoires de la variable d'environnement PATH, qui en général ne contient pas le répertoire courant
  3. CLe #!/bin/bash de la première ligne de run.sh (le shebang) n'est lu que lorsqu'on l'exécute avec ./ devant
Afficher la réponse et l'explication

Réponse : B. Un nom de commande sans barre oblique n'est cherché que dans les répertoires de la variable d'environnement PATH, qui en général ne contient pas le répertoire courant

Quand le shell reçoit un nom de commande sans barre oblique, il cherche dans l'ordre les répertoires énumérés, séparés par des deux-points, dans la variable d'environnement PATH (/usr/local/bin:/usr/bin, etc.), et exécute ce qu'il trouve. En général, on ne met pas le répertoire courant dans PATH, pour ne pas exécuter par erreur un programme malveillant portant le même nom et placé ailleurs. Écrire un chemin contenant une barre oblique, comme ./run.sh, exécute directement ce fichier sans chercher dans PATH. Le #!/bin/bash de la première ligne (le shebang) indique l'interpréteur qui exécute le script, quelle que soit la façon de le lancer.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de Linux et de la ligne de commande

  1. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la combinaison des sorties des deux commandes bash -c ?
  2. Quelle est la fonction principale d'un système de gestion de paquets de Linux (apt sur les systèmes dérivés de Debian, dnf sur les systèmes dérivés de Red Hat, etc.) ?
  3. Sur un système Linux qui utilise systemd, quelle est la différence entre « systemctl start license.service » et « systemctl enable license.service » pour le service license.service ?
  4. La ligne « 30 2 * * 1 /home/alice/backup.sh » a été enregistrée dans cron. Quand backup.sh est-il exécuté ?
  5. Un serveur Linux avertit que l'espace disque libre devient insuffisant. Quelle est la bonne combinaison d'une commande qui vérifie l'espace utilisé et l'espace libre de chaque système de fichiers, et d'une commande qui totalise l'espace occupé par les fichiers d'un répertoire ?