Support de cours sur la ligne de commande

La ligne de commande permet de contrôler un ordinateur sans interface utilisateur graphique (IUG). Dans cette unité, nous allons apprendre les commandes de base pour interagir avec notre ordinateur.

Points clés à retenir

  • Les élèves se déplaceront sur leur ordinateur à l'aide de commandes.
  • Les élèves vont créer, déplacer, copier et supprimer des fichiers et des dossiers.

Qu'est-ce que la ligne de commande ?

La plupart des utilisateurs utilisent une interface utilisateur graphique (GUI) pour interagir avec l'ordinateur. Les interfaces utilisateur graphiques s'appuient généralement sur une souris ou un écran tactile pour manipuler des fenêtres avec des icônes, des boutons, des barres de défilement, etc.

La ligne de commande est une autre façon d'accéder à l'ordinateur. Parfois appelée "shell", "terminal", "bash" ou "interface de texte", la ligne de commande est :

  • Moyen d'interagir avec un programme informatique où l'utilisateur saisit des commandes. Par exemple :
open README.txt
  • Moyen de naviguer et d'utiliser votre ordinateur sans souris.
  • Il s'agit d'une méthode non graphique permettant de créer, lire, mettre à jour, utiliser et supprimer vos fichiers et répertoires. Par exemple :
mv README.txt readme.txt

L'interface utilisateur graphique et la ligne de commande affichent les mêmes informations. Il s'agit de différentes façons d'interagir avec l'ordinateur.

Quand utiliser la ligne de commande ?

Les développeurs préfèrent souvent les interfaces de ligne de commande :

  • Elles permettent de contrôler un programme ou un système d'exploitation de manière plus concise. Pourquoi ? En effet, tout se passe dans la même fenêtre, et avec de la pratique, cela demande moins d'efforts que de trouver et de manipuler des éléments avec une souris.
  • Ils permettent d'exposer facilement les options de contrôle d'une commande. Pourquoi ? Les menus des interfaces utilisateur graphiques ne proposent qu'un nombre très limité d'options. Dans la ligne de commande, il existe des centaines de commandes. Quelques caractères ajoutés à une commande peuvent lui faire faire de nombreuses choses différentes. Par exemple :
  • ls Fichiers de listes de base
  • ls -a Lister tous les fichiers, y compris ceux qui sont normalement masqués
  • ls -l Longue liste affichant des informations sur chaque fichier
  • ls -R Récursif, liste le contenu des répertoires
  • ls -la Lister tous les fichiers au format long
  • Ils permettent d'agir facilement sur de nombreux fichiers à la fois de manière complexe.
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
  • Ils permettent de programmer le système d'exploitation (programmes shell). Par exemple, l'exemple ci-dessus est un programme shell très simple conçu pour modifier les images dont le nom de fichier se termine par .png.

La ligne de commande en action

Éléments d'une commande de ligne de commande

Toutes les commandes se composent de trois parties :

  • La commande (ou l'utilitaire) est toujours placée en premier.
  • Les indicateurs sont facultatifs et dépendent de l'utilitaire que vous utilisez. Les indicateurs commencent toujours par un signe moins (-).
  • Les arguments sont les éléments sur lesquels la commande doit agir ou les informations nécessaires. Il s'agit souvent de noms de fichiers.

Encadrement

Contexte et objectif

La ligne de commande permet de contrôler un ordinateur sans souris ni interface utilisateur graphique (IUG). Avant qu'Apple Computer ne commence à concevoir des machines avec des icônes et des dossiers sur lesquels vous pouviez cliquer, la seule façon d'interagir avec votre ordinateur était d'utiliser la ligne de commande.

En tant que développeurs, nous utilisons la ligne de commande, car elle est beaucoup plus rapide et plus puissante que l'interface graphique. Nous n'avons pas besoin de perdre du temps à cliquer partout. La ligne de commande vous permet d'effectuer pratiquement toutes les interactions avec votre ordinateur.

Comme le terminal est une interface beaucoup plus simple, il présente un grand avantage par rapport à l'interface utilisateur graphique lorsque vous devez vous connecter à distance à un ordinateur via une liaison réseau. Les développeurs le font très souvent, par exemple lorsqu'ils voyagent.

Dans cette leçon, nous allons apprendre les commandes de base pour interagir avec notre ordinateur : créer des fichiers et des répertoires, déplacer des dossiers, changer de répertoire et lister le contenu d'un dossier.

Objectifs de la formation

Les élèves pourront :

  • Utiliser le terminal pour parcourir les fichiers et les dossiers
  • Lister le contenu d'un dossier
  • Créer des fichiers et des dossiers sur la ligne de commande
  • Déplacer des fichiers et des dossiers
  • Copier des fichiers et des dossiers
  • Supprimer des fichiers et des dossiers

Premiers pas

Accéder au terminal

Cadrage et objectif de la section

Le terminal fournit une interface de ligne de commande (CLI) au système d'exploitation. Il vous permet de donner des instructions textuelles directes à votre ordinateur.

Pour ce faire, nous devons lancer votre terminal en fonction du système que vous utilisez.

Lorsque le terminal se lance, il démarre dans le répertoire personnel de votre ordinateur (quel que soit le nom que vous lui avez donné). Votre répertoire personnel est indiqué par le tilde~.

Lorsque nous parlons de notre monde dans le terminal, les répertoires sont identiques aux dossiers (nous pouvons parfois les appeler répertoires).

Changer de répertoire

Cadrage et objectif de la section

Pour parler à notre ordinateur dans le terminal et lui dire ce que nous voulons faire, nous devons parler une langue commune. La ligne de commande comprend les commandes écrites dans le langage de script bash. Les commandes sont des acronymes ou des abréviations de mots anglais.

Lorsque vous naviguez dans votre terminal, il est important de savoir où vous vous trouvez (cela se traduit directement dans la vie réelle : si vous voulez aller quelque part, vous devez d'abord connaître votre position actuelle).

# See your current location - abbreviation for 'print working directory'
pwd

Lister les fichiers et répertoires disponibles

Votre répertoire de travail contient probablement plusieurs fichiers auxquels vous pouvez accéder. Normalement, nous nous appuyons sur des repères visuels comme des icônes pour savoir ce qui est disponible. Mais il serait difficile de naviguer sur notre ordinateur si nous devions deviner où se trouvent les fichiers et les dossiers. Dans la ligne de commande, nous allons utiliser une commande spécifique pour lister ce à quoi nous pouvons accéder à partir d'un répertoire de travail ou d'un emplacement donné.

Pour afficher les fichiers ou dossiers qui se trouvent dans notre répertoire actuel, utilisez la commande ls (abréviation de "list", qui signifie "liste") pour afficher le contenu sous forme de liste.

# See files and folders in current location - abbreviation for 'list'
ls

Changer de répertoire de travail

Si vous avez besoin d'accéder à un fichier ou à un répertoire qui ne figure pas dans la liste, vous pouvez modifier votre répertoire de travail pour y accéder plus facilement.

La syntaxe permettant d'indiquer à la ligne de commande de vous déplacer vers un nouveau répertoire (également appelé dossier) est cd, suivie (sur la même ligne) du chemin d'accès au nouveau dossier.

Si vous accédez à un répertoire qui se trouve dans le répertoire dans lequel vous êtes actuellement (c'est-à-dire un sous-dossier de votre répertoire de travail), utilisez la commande cd suivie du nom du dossier.

# Change your current working directory (current location)
# Abbreviation for 'change directory'
cd Documents

Vous pouvez également accéder à la page de navigation à partir du répertoire ~.

# Add a `~/` to begin from the home directory.
cd ~/Downloads

Si vous avez changé de répertoire, mais que vous devez revenir au répertoire d'accueil, faites-le en revenant directement à l'accueil à l'aide de ~ ou en utilisant .. pour remonter d'un niveau.

# Option 1: navigate directly to the home directory
cd ~

# Option 2: navigate back one level
cd ..

Notez que cd .. ne remonte qu'un niveau. Par conséquent, si vous avez changé de répertoire trois fois (trois niveaux plus bas), vous devrez utiliser cd .. trois fois pour revenir au répertoire de base, mais vous n'aurez besoin d'utiliser cd ~ qu'une seule fois.

Mini-défis

  • Utilisez ls pour afficher le contenu de votre répertoire actuel.
  • Revenez à votre répertoire d'accueil et utilisez ls pour afficher le contenu de votre dossier d'accueil.
  • Choisissez le nom de l'un des dossiers qui se trouvent dans le répertoire personnel et accédez à ce nouveau dossier.
  • Utilisez la commande list pour voir ce qu'il contient.

Conseil : Saisie semi-automatique avec tab

Lorsque vous changez de répertoire avec la commande cd, une seule faute de frappe empêche la commande de s'exécuter correctement. Toutefois, l'utilisation de la touche tab permet de compléter automatiquement le nom de tous les répertoires disponibles dans votre répertoire actuel. Au lieu de saisir cd Documents, saisissez simplement cd Do, puis appuyez sur la touche tab. Le terminal complétera automatiquement la commande cd Documents/ (le / à la fin est facultatif, mais vous indique que la destination est un répertoire).

Cette saisie semi-automatique permet non seulement de gagner du temps lorsqu'elle fonctionne, mais elle fournit également des informations précieuses lorsqu'elle ne fonctionne pas. Si le bouton d'onglet ne se complète pas automatiquement, vous avez probablement rencontré l'un des trois problèmes très courants suivants :

  1. Le répertoire vers lequel vous souhaitez accéder n'est pas accessible depuis votre répertoire de travail actuel.
  2. Il existe deux répertoires dont les noms commencent de la même manière (par exemple, Documents et Downloads). Vous n'avez pas fourni suffisamment d'informations pour que la saisie semi-automatique puisse déterminer celui que vous souhaitez. Appuyez de nouveau sur tab pour afficher la liste des répertoires qui pourraient correspondre à ce que vous avez saisi. Saisissez ensuite quelques caractères supplémentaires (suffisamment pour qu'il n'y ait qu'un seul résultat), puis appuyez de nouveau sur tab.
  3. Vous avez déjà inclus une faute de frappe dans la première moitié du mot.

Plus tôt vous prendrez l'habitude d'utiliser la touche Tabulation pour compléter automatiquement vos commandes, plus vous serez en mesure de gérer les situations frustrantes où vos commandes semblent ne pas fonctionner.

Répertoires parents et enfants

Les répertoires et les fichiers peuvent avoir des relations enfant et parent les uns avec les autres. Si directory_b est à l'intérieur de directory_a, directory_b est appelé enfant de directory_a. directory_a est alors appelé parent de directory_b. Si un troisième élément, my_file, se trouve dans un directory_b, il est considéré comme un enfant de directory_b et un petit-enfant de directory_a.

Ces relations sont souvent illustrées sur les forums à l'aide d'un diagramme textuel, comme celui-ci :

directory_a/
  directory_b/
    my_file

Notez que les noms de répertoire se terminent par un /, contrairement aux noms de fichiers. Cette organisation hiérarchique est généralement appelée arborescence d'un système de fichiers.

Frères et sœurs

Si plusieurs fichiers ou dossiers se trouvent au même niveau, ils sont appelés frères et sœurs. Par exemple, si file_b et file_c se trouvent dans directory_a, ils sont frères et sœurs.

Ce diagramme textuel ressemblerait à ceci :

directory_a/
  file_b
  file_c

Notez que, comme file_b et file_c sont des éléments frères, ils sont indentés de la même manière.

Chemins des fichiers

Voici un diagramme textuel plus complexe qui présente à la fois des relations parent-enfant et des relations entre frères et sœurs.

north_america/
  united_states/
    new_york/
      new_york_city/
        manhattan
        queens
        staten_island
        bronx
        brooklyn
    california/
      mountain_view
      los_angeles
    illinois/
      chicago
  mexico/
    mexico_city

Dans cet exemple, new_york_city/ est un nom de répertoire, mais il possède également un chemin d'accès qui indique comment y accéder : ~/north_america/united_states/new_york/new_york_city/.

Pour accéder à new_york_city/,, vous pouvez le faire par étapes en utilisant les noms, ou en une seule commande en utilisant le chemin d'accès.

# Option 1: in four steps, using directory names.
cd ~ # navigate home, where these folders are located
cd north_america/
cd united_states/
cd new_york/
cd new_york_city/

# Option 2: in one step, using the path.
cd ~/north_america/united_states/new_york/new_york_city/

Récapitulatif des commandes de navigation

# See your current location - abbreviation for 'print working directory'
pwd

# Change to a new location - abbreviation for 'change directory'
cd ~/Downloads

# Navigates into a child directory called `some_directory`
# Only works if `some_directory` is a child of the current directory
cd some_directory

# Navigates into the parent of the current directory
# `..` is shorthand for parent.
cd ..

# Will take you back home
cd

Mini-défis

  • Utilisez pwd pour connaître le dossier dans lequel vous vous trouvez actuellement.
  • Passez à un autre répertoire et confirmez votre nouvel emplacement.
  • Réessayez et accédez à un autre dossier. Utilisez vos nouvelles commandes pour afficher votre position et les fichiers de ce répertoire.

Créer des fichiers et des répertoires

Cadrage et objectif de la section

En tant que développeurs, nous devrons créer des fichiers avec du code. Pour organiser ces fichiers, nous devons créer des dossiers / répertoires dans lesquels nous pouvons stocker nos fichiers.

Avant de créer vos fichiers et dossiers, vérifiez votre emplacement dans le terminal.

# See your current location.
pwd

Pour créer un fichier, utilisez la commande touch suivie du nom du fichier.

# `touch` creates a new file.
touch style.css

Lorsque vous créez des fichiers, ajoutez une extension de fichier pour spécifier le type. Exemples de types de fichiers :

  • .js make as a JavaScript file
  • .html créer un fichier HTML
  • .css crée un fichier CSS.
  • .md crée un fichier Markdown

Les noms de fichiers ne doivent pas contenir d'espaces.

# make a file - this will create a file in the current folder
touch my_text_file.txt

# make a file - this will create a file on the desktop
touch ~/Desktop/my_new_style_sheet.css

Créer plusieurs fichiers

Vous pouvez créer plusieurs fichiers à la fois en insérant des espaces entre chaque nom.

# make multiple files - this will create multiple files in the current folder
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

Créer des répertoires

Pour créer un répertoire ou un dossier, utilisez la commande mkdir (abréviation de "make directory", c'est-à-dire "créer un répertoire"), suivie du nom du dossier.

# make a folder - this will create a directory in the current folder
mkdir my_new_folder

# make a folder - this will create a directory on your desktop
mkdir ~/Desktop/my_new_desktop_folder

Créer plusieurs répertoires

Vous pouvez créer plusieurs dossiers à la fois en insérant des espaces entre chaque nom.

# make multiple folders - this will create multiple folders in the current
# directory
mkdir folder_one folder_two folder_three

Mini-défis

  • Créer un fichier.
  • Créez plusieurs fichiers en une seule commande.
  • Créez un répertoire.
  • Créez d'autres répertoires. Essayez d'utiliser une seule commande pour ce faire.
  • En vous appuyant sur vos connaissances en matière de navigation dans les répertoires et de création de fichiers et de dossiers, créez un "arbre généalogique" sur votre bureau à l'aide de fichiers et de dossiers.

Déplacer et copier

Déplacer des fichiers et des répertoires

Cadrage et objectif de la section

Nous pouvons déplacer un fichier ou un dossier sur la ligne de commande, mais nous devons toujours spécifier trois éléments :

  1. Nous utilisons la commande mv, abréviation de déplacer.
  2. Faites suivre la commande de déplacement du nom du fichier ou du dossier que vous souhaitez déplacer.
  3. Faites suivre le nom du fichier par la destination vers laquelle vous souhaitez le déplacer.

Par exemple, si votre structure de fichiers est la suivante :

my_child_folder/
my_parent_folder/

Vous pouvez constater qu'il n'est pas organisé comme il le devrait : ils sont frères et sœurs alors qu'ils devraient être parent et enfant. Utilisez cette commande :

# move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder
mv my_child_folder/ my_parent_folder/

La structure obtenue se présentera comme suit.

my_parent_folder/
  my_child_folder/

Voici d'autres variantes de la commande mv :

# move a directory - this will move the folder `my_folder` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_folder ~/Desktop/my_desktop_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_folder` that is in the current folder
mv my_file.txt my_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_file.txt ~/Desktop/my_desktop_folder

Avertissement  : mv est également la commande permettant de renommer un fichier à l'aide de la syntaxe mv old_name new_name. Cela signifie que si vous déplacez un fichier vers un répertoire qui n'existe pas ou si vous faites une faute d'orthographe dans la destination, le fichier lui-même sera renommé au lieu d'être déplacé.

Mini-défis

  1. Créez cinq fichiers texte (.txt).
  2. Créez un répertoire.
  3. Déplacez les cinq fichiers que vous avez créés dans le dossier.
  4. Créez un dossier et déplacez-le dans un autre dossier.

Copier des fichiers et des répertoires

Cadrage et objectif de la section

Lorsque nous créons nos applications Web, nous pouvons souhaiter dupliquer un fichier (si nous créons deux pages Web similaires, nous ne voulons peut-être pas repartir de zéro). La syntaxe de la commande cp (copier) est très similaire à celle de mv.

Copier un fichier

La commande de copie se compose de trois parties :

  1. La commande cp, abréviation de copy
  2. Nom du fichier à copier
  3. Le nom de la copie (si elle reste dans le même dossier) ou l'emplacement et le nom (si elle est déplacée vers un autre dossier).
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`
# The copy will be located in your Documents folder.
cp my_file.txt ~/Documents/my_file_copy.txt

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`.
# Since no directory was specified, this will occur within the same folder.
cp my_file.txt my_file_copy.txt

Si vous souhaitez que la copie conserve le même nom que l'original, vous pouvez spécifier l'emplacement de la copie sans nom de fichier.

# Copy a file named `my_file.txt` to your Documents folder.
# The destination ends with a directory, so the copy will have the same name.
cp my_file.txt ~/Documents/

Il peut être déroutant d'avoir de nombreux fichiers portant le même nom. N'utilisez donc cette méthode que si vous êtes sûr que c'est ce dont vous avez besoin.

Copier un répertoire

La copie d'un dossier ou d'un répertoire est un peu plus compliquée, car vous souhaitez probablement copier non seulement le dossier, mais aussi tout ce qu'il contient.

  1. La commande cp -R (abréviation de copy recursive) permet de copier les dossiers vides et non vides.
  2. Nom de la source (dossier ou fichier à déplacer)
  3. Le nom de la copie (si elle reste dans le même dossier) ou l'emplacement et le nom (si elle est déplacée vers un autre dossier).

Avertissement : Lorsque vous spécifiez le nom de la copie, si le fichier ou le dossier n'a pas été créé précédemment, il le sera lorsque vous effectuerez la copie. Si le fichier a été créé avant l'exécution de la commande de copie, il écrasera tout ce qui se trouvait précédemment dans le fichier. Soyez donc prudent !

# copy a directory named `my_folder` from your Desktop folder to a folder
# called `my_folder_copy` in your Documents folder
cp -R ~/Desktop/my_folder ~/Documents/my_folder_copy

# copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder
cp -R my_folder my_folder_copy

Remarque : Le composant -R de cp -R est appelé indicateur. Les indicateurs commencent toujours par un tiret et sont utilisés en combinaison avec des commandes pour donner des instructions plus spécifiques sur la façon dont cette commande doit être exécutée.

Mini-défis

  1. Créez un fichier appelé my_original.txt.
  2. Créez une copie de my_original.txt en lui donnant un nouveau nom dans le même dossier.
  3. Créez un répertoire.
  4. Créez une copie de ce répertoire, mais donnez-lui un autre nom.
  5. Créez une copie du fichier copié (à l'étape 2), mais placez-la dans le répertoire copié (à l'étape 4).

Supprimer des fichiers et des dossiers

Cadrage et objectif de la section

Nous pouvons supprimer des fichiers et des dossiers sur la ligne de commande, mais cette action est définitive.

Supprimer un fichier

Pour supprimer un fichier, nous pouvons utiliser la commande rm (abréviation de remove) suivie du nom du fichier.

# delete a file in the working directory
rm unwanted_file.txt

# delete a file not in the working directory
rm ~/Desktop/unwanted_file.txt

Supprimer un répertoire vide

Pour supprimer un répertoire vide, nous pouvons utiliser la commande rmdir (abréviation de remove directory, c'-à-d. "supprimer le répertoire"), suivie du nom du dossier.

# delete an empty folder
rmdir empty_directory

# delete an empty folder
rmdir ~/Documents/my_files/empty_directory

Supprimer un répertoire non vide

Pour supprimer un dossier non vide, nous devons ajouter l'indicateur -R (abréviation de récursif) après la commande rm, qui indique à l'ordinateur de supprimer le contenu du dossier. Par mesure de simplification, certains développeurs utilisent l'indicateur -Rf, qui supprime de force tous les éléments (sinon, vous pouvez recevoir des invites à supprimer certains fichiers ou dossiers enfants).

# delete a folder which contains other files or folders
rm -R directory_which_isnt_empty

# delete a folder which contains other files or folders
rm -R ~/Downloads/directory_which_isnt_empty

Avertissement : L'utilisation de la commande rm n'est pas comparable à la corbeille ou à la section "Supprimés" de votre messagerie. Ces fichiers ne peuvent pas être récupérés facilement. Soyez EXTRÊMEMENT PRUDENT lorsque vous supprimez des fichiers de cette manière.

Mini-défis

  1. Créez quatre fichiers.
  2. Supprimez deux des fichiers.
  3. Créer un dossier
  4. Créez un autre dossier et un fichier à l'intérieur.
  5. Supprimez les deux répertoires.

Vous trouverez le code de cet atelier dans le dossier suivant du dépôt des élèves que vous avez téléchargé depuis GitHub : command-line/labs/around-the-world

Arrière-plan

Votre semestre à l'étranger approche à grands pas et il est temps de commencer à planifier vos voyages en Europe…

Vous avez trois mois devant vous pour vivre pleinement. Vous voulez donc profiter au maximum de chaque week-end.

Heureusement, vous ne partez pas de zéro. Vos amis vous ont fourni certaines de leurs activités préférées de leur semestre à l'étranger. Malheureusement, certains fichiers ont été mélangés…

Ne vous inquiétez pas, grâce à la magie de la ligne de commande, vous pourrez les corriger en un rien de temps !

Tâche

Assurez-vous que chaque ville se trouve dans le bon pays et que chaque dossier de ville contient les monuments appropriés. Faites attention, sinon vous risquez de vous retrouver à Amsterdam à la recherche de la tour Eiffel !

Si vous êtes VRAIMENT sûr de vous, masquez votre interface utilisateur graphique et relevez ce défi directement depuis la ligne de commande. Vous devez rester dans le dossier général "around-the-world" pendant toute cette procédure, ce qui signifie que vous devez utiliser des chemins absolus lorsque vous faites référence à des dossiers et des fichiers.

Une fois que vous êtes sûr que tout est en ordre, c'est à votre tour de prendre le contrôle de vos prochains mois. Trouvez de nouvelles villes, de nouveaux pays et de nouveaux monuments que vous DEVEZ voir et ajoutez-les à votre arborescence de fichiers.

Félicitations ! Vous avez officiellement appris à parler le langage informatique. Prêt à aller plus loin ? Parlons des extensions…

Extensions

  1. Mélangez à nouveau tous vos fichiers, puis rendez-vous dans la ville de votre choix. Réorganisez à nouveau les fichiers, en restant dans cette ville.
  2. Essayez l'un des jeux en ligne de commande amusants ci-dessous :
    Terminus Game
    Advanced Game (préparez-vous à faire des recherches sur Google)
  3. Vous êtes un grand fan de Star Wars ? Essayez d'exécuter telnet towel.blinkenlights.nl dans votre ligne de commande, puis appuyez sur Entrée… (Notez que dans les versions récentes de macOS, la commande telnet n'est plus installée par défaut. Dans ce cas, vous pouvez utiliser la commande nc towel.blinkenlights.nl 23 à la place.)

Vous trouverez le code de cet atelier dans le dossier suivant du dépôt des élèves que vous avez téléchargé depuis GitHub : command-line/labs/bashing-away-repetition

Vous en avez assez de répéter les mêmes commandes dans votre utilisation quotidienne de la ligne de commande ? Super, moi aussi !

Arrière-plan

S'il y a bien une chose que les programmeurs détestent, c'est la répétition. En tant qu'informaticiens, notre travail consiste à faire faire à l'ordinateur le maximum de travail possible. Écrire des scripts Bash nous aidera à utiliser plus efficacement la ligne de commande.

Tout d'abord, qu'est-ce qu'un script bash ?

EXCELLENTE question. Heureusement, notre ami Ryan Chadwick, qui tient ce site génial pour trouver des tutoriels sur la ligne de commande, a la réponse.

Un script Bash nous permet de définir une série d'actions que l'ordinateur exécutera ensuite sans que nous ayons à saisir les commandes nous-mêmes. Si une tâche particulière est effectuée souvent ou est répétitive, un script peut être un outil utile.

Pas de répétition ? C'est ce dont je parle.

Tutoriel

Pour commencer, vous devez autoriser votre ordinateur à exécuter votre script. Pour ce faire, exécutez la commande ci-dessous.

chmod 755 myScript.sh

Il est temps d'écrire votre premier programme. Accédez à votre fichier myScript.sh (essayez de l'ouvrir à partir de la ligne de commande). À la fin du fichier, ajoutez :

echo "Hello World"

Exécutez maintenant la commande suivante :

./myScript.sh

dans votre terminal. ** TA DA ** Le message "Hello World" doit s'afficher dans votre terminal.

célébration

Tout ce que vous écrivez dans votre script Bash s'exécutera comme si vous l'aviez saisi dans votre terminal. Prenons un autre exemple avant de passer aux extensions. Commencez par créer un fichier pour votre script. Vous pouvez lui donner le nom de votre choix, mais il doit avoir l'extension .sh. Ensuite, assurez-vous d'autoriser l'exécution de votre script en saisissant chmod 755, puis le nom de votre script dans votre terminal et en appuyant sur Entrée. Chaque fois que vous démarrez un nouveau script Bash, veillez à effectuer ces deux étapes.

Défi d'introduction

Maintenant, essayons d'écrire un script qui crée un dossier. Quelle commande permet de créer un dossier ? Si vous pensez à un mot qui commence par m et se termine par kdir, vous êtes sur la bonne voie. Écrivez la commande qui créera votre nouveau dossier et donnez-lui un nom original dans votre nouveau fichier .sh, puis exécutez-la dans votre terminal.

Si cela fonctionne, passez aux autres problèmes listés ci-dessous. Si vous êtes encore un peu perdu, essayez de revenir à l'atelier "Le monde entier" et réfléchissez à la façon dont vous avez créé des dossiers pour les pays et les villes.

N'hésitez pas à utiliser le tutoriel dont le lien est fourni ci-dessus et préparez-vous à faire preuve de vos meilleures compétences en recherche Google. Écrivez et exécutez des scripts qui effectuent les opérations suivantes :

Tâches principales

  1. Ajoutez une commande au fichier que vous avez créé ci-dessus pour accéder au dossier que vous êtes en train de créer. (Quelle commande utilisons-nous pour changer de répertoire ?)
  • Ajoutez la date au nom de votre nouveau dossier. Par exemple, votre programme doit créer un dossier nommé "2017-12-07my_super_cool_folder".
  1. Affiche "Mon répertoire actuel est : " suivi de votre répertoire de travail, puis "Voici la liste de tous les éléments de ce répertoire ! " suivi du contenu de votre répertoire actuel.
  2. Déterminez comment fournir une entrée à votre script bash et créez un fichier basé sur cette chaîne d'entrée. Le tutoriel dont le lien figure plus haut dans l'atelier contient d'excellents exemples dans la section sur les variables.
  3. Demandez à l'utilisateur de vous fournir son nom, puis affichez "Bonjour, ravi de vous rencontrer insérer le nom ici".
  • Essayez de demander plus d'informations à votre utilisateur et de créer un message personnalisé pour lui.

CONTEXTE

La ligne de commande (ou le terminal) permet d'interagir directement avec le système d'exploitation de l'ordinateur. Elle permet d'effectuer toutes les actions de l'interface utilisateur graphique (IUG), mais à l'aide de commandes textuelles : navigation, création de fichiers, exécution de scripts, etc. La ligne de commande sera utilisée pour ouvrir des fichiers et pour lancer l'environnement de développement lorsque vous utilisez Google App Engine.

La ligne de commande en action

Accéder au terminal

Raccourci Mac :

  • Ouvrez Spotlight en appuyant sur Commande+Espace.
  • Saisissez Terminal dans la recherche Spotlight.
# See your current location - abbreviation for 'print working directory'.
pwd

# Change to a new location - abbreviation for 'change directory'.
cd /Users/jsmith/Downloads

# Navigate into a child directory called `some_directory`. This only works if
# `some_directory` is a child of the current directory.
cd some_directory

# Navigate into the parent of the current directory. `..` is shorthand for parent.
cd ..

# Return home.
cd

# Change directories to a folder called `my_folder` that is within the current
# directory.
cd my_folder ```

#### File Path Shorthand `~`

The `~` is generally short for "home". Home can be configured to mean different
things for different users and across different operating systems, but in the
example above, for a Mac user named "jsmith", the `~` is short for that user's
home directory: `/Users/jsmith`.

This means that `~/Downloads` and `/Users/jsmith/Downloads` are the same for
this user. But starting with a `~` allows us to specify absolute file paths
(agnostic of your current working directory, and starting at the root `/`)
without having to write out a full path each time.

### <a id="view"></a>Viewing the Contents of Folders

```bash
# See files and folders in current location - this is an abbreviation for 'list'.
ls

Créer des fichiers et des dossiers

Créer des fichiers

# Make a file - this will create a file in the current folder.
touch my_text_file.txt

# Make a file - this will create a file on the Desktop.
touch ~/Desktop/my_new_style_sheet.css

# Make multiple files - this will create multiple files in the current folder.
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

Création de dossiers

# Make a folder - this will create a directory in the current folder.
mkdir my_new_folder

# Make a folder - this will create a directory on your Desktop.
mkdir ~/Desktop/my_new_desktop_folder

# Make multiple folders - this will create multiple folders in the current
# directory.
mkdir folder_one folder_two folder_three

Déplacer des fichiers et des dossiers

Déplacer des fichiers

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_folder` that is in the current folder.
mv my_file.txt my_folder
# Note that this will rename the file instead of moving it if the destination
# folder does not yet exist.  Read below for more details on renaming.

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_desktop_folder` that is located on the Desktop.
mv my_file.txt ~/Desktop/my_desktop_folder

Déplacer des dossiers

# Move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder.
mv my_child_folder my_parent_folder

# Move a directory - this will move the folder `my_folder` into the folder
# named `my_desktop_folder` that is located on the Desktop.
mv my_folder ~/Desktop/my_desktop_folder

Déplacer, c'est renommer

N'oubliez pas que mv est également la commande utilisée pour renommer des fichiers ou des dossiers.

# Rename a file from `old_name.txt` to `new_name.txt`.
mv old_name.txt new_name.txt

Copier des fichiers et des dossiers

Copier des fichiers

# Copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder.
cp ~/Desktop/my_file.txt ~/Documents

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt` within
# the same folder.
cp my_file.txt my_file_copy.txt

Copier des dossiers

# Copy a directory named `my_folder` (and its contents) from your Desktop
# folder to a folder called `my_folder_copy` in your Documents folder.
cp -r ~/Desktop/my_folder ~/Documents/my_folder_copy

# Copy a directory named `my_folder` (and its contents) from the current
# working directory to a folder called `my_folder_copy` in the current working
# directory.
cp -r my_folder my_folder_copy

Supprimer des fichiers et des dossiers

Supprimer des fichiers

# Delete a file in the current working directory.
rm unwanted_file.txt

# Delete a file using its exact location and name.
rm ~/Desktop/unwanted_file.txt

Supprimer des dossiers

# Delete an empty folder.
rmdir empty_directory

# Delete a folder which contains other files or folders.
rm -r directory_which_isnt_empty

Conseils et astuces

  • Entraînez-vous à utiliser la ligne de commande, même lorsque vous pensez ne pas en avoir besoin. Vous vous améliorerez avec le temps.
  • La touche tab complète automatiquement le nom de votre fichier ou dossier (il peut être sensible à la casse).
  • S'il ne reste qu'un seul fichier ou dossier correspondant, il sera complété automatiquement.
  • S'il existe plusieurs fichiers ou dossiers correspondants, appuyez deux fois sur la touche de tabulation pour afficher la liste des correspondances restantes.
  • Les flèches vers le haut et vers le bas vous permettent de parcourir l'historique des commandes pour éviter de les ressaisir.
  • Utilisez la commande clear pour effacer la fenêtre du terminal. Cela permet de conserver tout votre travail précédent. Faites défiler l'écran vers le haut pour le voir.
  • Utilisez reset pour redémarrer le terminal. Cela ne conservera pas votre travail précédent à l'écran, mais peut résoudre plusieurs problèmes si le terminal commence à se comporter de manière imprévisible.
  • Appuyer sur option+arrow pour déplacer le curseur d'un mot

Récapitulatif des bonnes pratiques

  • Parcourez le terminal à l'aide de cd, cd .. ou cd <folder name>.
  • Affichez le contenu des dossiers à l'aide de ls.
  • Créez des fichiers à l'aide de touch et des dossiers à l'aide de mkdir.
  • Déplacez des fichiers et des dossiers à l'aide de mv <item to move> <destination>.
  • Copiez des fichiers et des dossiers à l'aide de cp <item to copy> <destination>.
  • Supprimez des fichiers et des dossiers à l'aide de rm <item to remove>.

Question 1

Quelle commande utiliseriez-vous pour identifier votre répertoire de travail actuel ?

  1. pwd
  2. ls
  3. cd
  4. mkdir
  5. touch

Question 2

Comment remonter de deux niveaux à partir de votre répertoire de travail actuel ?

  1. mv ~
  2. cd ../..
  3. mv up/up
  4. cd ^(2)

Question 3

Quelle commande utiliseriez-vous pour renommer un fichier ?

  1. mv
  2. cd
  3. ls
  4. python
  5. rename

Question 4

Pourquoi la commande mv script.py génère-t-elle une erreur ?

  1. Car "script.py" n'est pas un nom de fichier valide.
  2. Car la commande mv ne peut être suivie d'aucune autre information.
  3. Il s'agit d'une question piège. Aucune erreur ne sera générée.
  4. Car le déplacement d'un fichier nécessite au moins deux arguments : une cible et une destination

Question 5

Que ferait la commande cd ~ ?

  1. Remplacez votre répertoire de travail par votre répertoire d'accueil.
  2. Répétez la commande précédente.
  3. Utiliser un algorithme pour déterminer la commande la plus utile à ce moment-là.
  4. Générer une erreur.

Question 6

Parmi les raisons suivantes, laquelle ne justifie PAS l'utilisation de la touche de tabulation pour compléter automatiquement les noms de fichiers ?

  1. Parce que cela vous fait gagner du temps.
  2. car elle permet d'éliminer les fautes d'orthographe.
  3. car elle nécessite moins de puissance de traitement.

Question 7

Si un nouveau développeur tente de créer un fichier nommé "my script.py", pourquoi la commande touch my script.py ne fonctionnera-t-elle pas ?

  1. Car touch ne peut pas créer de fichiers.
  2. Car .py n'est pas une extension de fichier valide.
  3. En effet, il créera deux fichiers, l'un appelé "my" et l'autre "script.py", au lieu d'un seul.
  4. Car il est impossible de créer des fichiers à partir de la ligne de commande.

Question 1

Quelle commande utiliseriez-vous pour identifier votre répertoire de travail actuel ?

pwd

Question 2

Comment remonter de deux niveaux à partir de votre répertoire de travail actuel ?

Avec cd ../.., vous montez de deux niveaux (chaque .. représente un niveau au-dessus).

Question 3

Quelle commande utiliseriez-vous pour renommer un fichier ?

mv permet de déplacer un fichier d'un emplacement à un autre et peut également être utilisé pour modifier le nom du fichier.

Question 4

Pourquoi la commande mv script.py génère-t-elle une erreur ?

La commande mv nécessite deux arguments : un fichier source et un fichier de destination.

Question 5

Que ferait la commande cd ~ ?

Elle remplace votre répertoire de travail par votre répertoire d'accueil. Le caractère spécial ~ est utilisé pour identifier le répertoire personnel de l'utilisateur actuel. Il peut également être utilisé en combinaison avec un nom d'utilisateur différent : ~user2 pour pointer vers son dossier personnel.

Question 6

Parmi les raisons suivantes, laquelle ne justifie PAS l'utilisation de la touche de tabulation pour compléter automatiquement les noms de fichiers ?

Parce qu'il nécessite moins de puissance de traitement est incorrect. tab nécessite une puissance de traitement (souvent négligeable) pour analyser les dossiers à la recherche de noms de fichiers à compléter automatiquement, mais cela permet de gagner du temps et d'éviter les fautes d'orthographe.

Question 7

Si un nouveau développeur tente de créer un fichier nommé "my script.py", pourquoi la commande touch my script.py ne fonctionnera-t-elle pas ?

Deux fichiers seront créés au lieu d'un seul. La commande touch crée des fichiers. Dans le terminal, les espaces sont des séparateurs et non des caractères à inclure dans le nom du fichier. Il est préférable de les éviter complètement, mais si vous devez les utiliser, le nom de fichier doit être placé entre guillemets doubles :

touch "my script.py"

Question 1

La commande de terminal permettant de changer de répertoire est la suivante :

  1. move
  2. mkdir
  3. pwd
  4. cd

Question 2

Quelle commande exécuteriez-vous si vous souhaitiez accéder au dossier parent de votre répertoire de travail actuel ?

  1. cd up
  2. cd .
  3. cd ..
  4. cd ~

Question 3

Quelle commande permet de créer des fichiers ?

  1. touch
  2. mkdir
  3. create
  4. pwd

Question 4

Parmi les commandes suivantes, laquelle créera deux fichiers appelés index.html et style.css ?

  1. touch index.html, touch style.css
  2. touch index.html, style.css
  3. touch index.html style.css
  4. touch index.html + style.css

Question 5

Quelle commande utilisez-vous pour renommer un fichier ou un dossier ?

  1. rename
  2. move
  3. mv
  4. rm

Question 6

Quelle option les commandes rm et cp doivent-elles utiliser pour fonctionner sur les dossiers ?

  1. -f
  2. -r
  3. -x
  4. -d

Question 7

Pour déplacer projects vers ~/Documents et le renommer Projects, quelle commande doit être insérée dans l'espace vide ?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
  1. pwd
  2. cd projects
  3. mv ~ projects
  4. cd ~/Documents
  5. ls

Question 8

Que fera la commande suivante ?

rm -r projects

  1. Supprimer un fichier appelé projects
  2. Supprimer un dossier nommé projects
  3. Renommer un fichier appelé projects
  4. Rechercher projects dans le contenu du répertoire actuel

Question 1

La commande de terminal permettant de changer de répertoire est la suivante :

La commande de terminal permettant de changer de répertoire est cd. La commande elle-même est l'abréviation de "change directory" (changer de répertoire).

Question 2

Quelle commande exécuteriez-vous si vous souhaitiez accéder au dossier parent de votre répertoire de travail actuel ?

La commande permettant d'accéder au dossier parent est cd ..

Question 3

Quelle commande permet de créer des fichiers ?

La commande permettant de créer des fichiers est touch.

Question 4

Parmi les commandes suivantes, laquelle créera deux fichiers appelés index.html et style.css ?

La commande touch index.html style.css créera les deux fichiers. Aucune virgule n'est nécessaire. Vous pouvez créer autant de fichiers que vous le souhaitez de cette manière, en les séparant par des espaces.

Question 5

Quelle commande utilisez-vous pour renommer un fichier ou un dossier ?

Bien que mv signifie "déplacer" et puisse être utilisé pour déplacer des fichiers ou des dossiers, il peut également servir à renommer des fichiers et des dossiers.

Question 6

Quelle option les commandes rm et cp doivent-elles utiliser pour fonctionner sur les dossiers ?

Les commandes rm et cp nécessitent l'option -r pour fonctionner sur les dossiers, car l'option -r signifie "récursif" et réexécute la commande pour tous les fichiers et dossiers contenus.

Question 7

Pour déplacer projects vers ~/Documents et le renommer Projects, quelle commande doit être insérée dans l'espace vide ?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects

Comme nous commençons dans le répertoire d'accueil, nous devons exécuter cd ~/Documents pour que la commande finale soit exécutée dans le bon répertoire.

Question 8

Que fera la commande suivante ?

rm -r projects

La commande supprimera un fichier OU un dossier nommé projects , car elle est appelée avec l'option -r ou l'option récursive. Sans cette option, cette commande ne fonctionnerait que pour supprimer un fichier portant ce nom.