Pour le laboratoire SdE, nous utiliserons Linux, la distribution Ubuntu.
La forme de documentation la plus importante sous Linux, lorsque nous n’avons pas accès à Internet, sont les pages de manuel accessibles avec la commande man
.
Par exemple, pour afficher des informations sur la commande 'echo' (commande qui affiche un message sur la sortie standard), nous allons utiliser la commande:
student@sde: ~ $ man echo
Les pages de manuel sont souvent volumineuses et nous devons les parcourir rapidement. Pour ce faire, après avoir ouvert la page de commande manuelle, nous pouvons utiliser les combinaisons de touches ci-dessous pour naviguer vers la page:
Touche | Brève description |
---|---|
/string_to_search | / (c'est-à-dire la touche barre oblique ) est utilisé pour rechercher string_to_search dans la page de manuel |
n (next) | pour aller à la prochaine occurrence du mot recherché avec/ |
N (Shift + n) | aller à l'occurrence précédente du mot |
q (quitter) | fermer la page de manuel |
Entrée | faire défiler une ligne |
f | (en avant) ou Espace faire défiler un écran |
b | (en arrière) faire défiler un écran |
d | (en bas) faire défiler la moitié de l'écran |
u | (up) faire défiler la moitié de l'écran |
Pour commencer, nous souhaitons intégrer les commandes de ligne de commande les plus importantes, en particulier celles qui fonctionnent avec des fichiers et des dossiers.
Nous avons également une liste de Commandes Linux que nous pouvons utiliser pour rappeler nos commandes les plus courantes.
Sur vos ordinateurs, ceux-ci seront différents, en fonction du nom d'utilisateur et de l'ordinateur.
Ouvrez un terminal. Clonez le contenu du dépôt SdE officiel à l'aide de la commande ci-dessous:
student@sde: ~ $ git clone https://github.com/UPB-FILS-SdE2/sde.git
Nous prévoyons de travailler avec ces commandes qui nous aident à naviguer dans les répertoires du système de fichiers (c’est-à-dire à le traverser). Ensuite, utilisez les commandes pour répertorier le contenu d'un répertoire et afficher le contenu d'un fichier.
La distinction entre un chemin absolu (chemin d’un répertoire à partir du répertoire racine, exemple: /home/student
) et un chemin relatif vers le répertoire actuel (à l’aide d’entrées spéciales .
) et .
- répertoire parent).
Regardez attentivement la séquence de commandes ci-dessous. Si vous voulez donner vos ordres sur la station sur laquelle vous travaillez, utilisez la touche TAB aussi souvent que vous donnez un paramètre à ls
ou cd
.
student@sde ~$ cd sde/tp01 student@sde sde$ pwd /home/student/sde/tp01 student@sde sde$ tree . . ├── music │ ├── blake-shelton │ │ └── friends │ ├── carrie-underwood │ │ ├── church-bells │ │ ├── dirty-laundry │ │ └── home-sweet-home │ ├── miranda-lambert │ │ ├── dumb-blonde │ │ ├── vice │ │ └── we-should-be-friends │ └── thomas-rhett │ └── craving-you ├── simple-python │ ├── simple_hello.py └── tv-shows ├── brooklyn99 │ ├── amy │ ├── gina │ ├── jake │ ├── rosa │ └── terry └── young-sheldon ├── connie ├── george ├── georgie ├── marry ├── missy └── shelly 9 directories, 27 files
Maintenant, je vois la structure de répertoire, nous allons les parcourir:
student@sde sde$ cd music # ici j'ai utilisé un chemin par rapport au répertoire courant student@sde music$ ls blake-shelton carrie-underwood miranda-lambert thomas-rhett student@sde music$ cd .. # Je naviguais au directeur de la musique de répertoire parent /home/student/sde/tp01/sde student@sde sde$ ls -R music simple-gcc tv-shows ./music: blake-shelton carrie-underwood miranda-lambert thomas-rhett ./music/blake-shelton: friends ./music/carrie-underwood: church-bells dirty-laundry home-sweet-home ./music/miranda-lambert: dumb-blonde vice we-should-be-friends ./music/thomas-rhett: craving-you ./simple-gcc: Makefile hello.c simple_hello.c utils.h errors.c help.c utils.c warnings.c ./tv-shows: brooklyn99 young-sheldon ./tv-shows/brooklyn99: amy gina jake rosa terry ./tv-shows/young-sheldon: connie george georgie marry missy shelly student@sde sde$ cd /home/student/sde/tp01/tv-shows/brooklyn99 # # nous avons utilisé et TP01 cd/brookly99, mais j'ai utilisé chemin absolu student@sde brooklyn99$ ls amy gina jake rosa terry
Ls son argumentation afin que nous puissions donner un chemin relatif à un répertoire ou un fichier, et un chemin absolu:
student@sde brooklyn99$ ls ../young-sheldon connie george georgie marry missy shelly student@sde brooklyn99$ ls -l ../young-sheldon/connie -rw-r--r-- 1 student staff 0 Jan 28 01:06 connie student@sde brooklyn99$ ls -l ./amy -rw-r--r-- 1 student staff 0 Jan 28 01:05 amy student@sde brooklyn99$ ls -l amy -rw-r--r-- 1 student staff 0 Jan 28 01:05 amy student@sde brooklyn99$ ls -l /home/student/sde/tp01/tv-shows/brooklyn99/jake -rw-r--r-- 1 student staff 0 Jan 28 01:05 jake
Comme nous l'avons vu ci-dessus utilisent des exemples les chemins relatifs sont: <Type de note> Notez l'utilisation de la clé 'TAB' . </note>
student@sde music$ ls miranda-lambert # ls m<TAB> student@sde sde$ cd ./miranda-lambert # cd ./m<TAB> student@sde miranda_lambert$ ls ../thomas-rhett # ls ../t<TAB> student@sde miranda_lambert$ ls ../../tp01/music # ls ../../t<TAB>/m<TAB>
Quelques exemples d'utilisation des chemins absolus:
student@sde sde$ ls / student@sde sde$ tree /home/student/sde/tp01/music/miranda-lambert # ls /h<TAB>/stu<TAB>/sde/tp01/m<TAB>/m<TAB> student@sde sde$ ls -l ~/sde/tp01/music/miranda-lambert # ls ~/sde/tp01/m<TAB>/m<TAB> student@sde sde$ tree -L 1 ~
Voyons maintenant quelques erreurs qui peuvent survenir. Que pensez-vous qui se passe ci-dessous? Quelle est la cause de l'erreur, quelle erreur a été commise?
student@sde miranda-lambert$ ls -l lyrics ls: cannot access lyrics: No such file or directory student@sde miranda-lambert$ cd .. student@sde tp01$ cd kenny-chesney -bash: cd: kenny-chesney: Not a directory student@sde sde$ cd /home/student/sde/tp01/music/taylor-swift -bash: cd: /home/student/sde/tp01/music/taylor-swift: No such file or directory
cd
devrait être suivi d'un ls
ou d'un pwd
à des fins de vérification. Comme nous l'avons vu ci-dessus, des erreurs peuvent parfois se produire, que le répertoire n'existe pas ou que nous ne soyons pas autorisés à y accéder et que la commande puisse être exécutée sans succès. Il est donc très important que tout ordre de modifier/modifier le statut courant à suivre d'une vérification. Voici quelques exemples de commandes qui forment une bonne paire: cd
- pwd
; touch
, mv
, rm
- ls
; écho
- chat
etc.
Utilisez la touche TAB
chaque fois que vous le pouvez. Il suffit souvent de ne taper que les 2 ou 3 premières lettres du nom du dossier ou du fichier auquel nous voulons accéder. Si plusieurs répertoires/fichiers ont le même préfixe, nous pouvons ajouter d'autres lettres pour supprimer l'ambiguïté ou la touche “TAB” deux fois pour afficher la liste des occurrences contenant le même préfixe. Nous pouvons ensuite parcourir la liste des correspondances à l’aide de la touche “TAB”.
L'un des utilitaires de base est “tree”, qui permet de répertorier le contenu des dossiers dans un format d'arborescence, ce qui facilite le suivi et la compréhension de l'organisation du système de fichiers. Dans la plupart des cas, une simple commande ls
suffit, mais si vous voulez voir des niveaux inférieurs dans la hiérarchie des fichiers et des dossiers, 'tree' peut être très utile.
Utilisé sans arguments, tree
listera tous les fichiers et répertoires sous sub le répertoire courant (.
).
student@sde/tp01$ tree . ├── music │ ├── blake-shelton │ │ └── friends │ ├── carrie-underwood │ │ ├── church-bells │ │ ├── dirty-laundry │ │ └── home-sweet-home │ ├── miranda-lambert │ │ ├── dumb-blonde │ │ ├── vice │ │ └── we-should-be-friends │ └── thomas-rhett │ └── craving-you ├── simple-python │ ├── simple_hello.py └── tv-shows ├── brooklyn99 │ ├── amy │ ├── gina │ ├── jake │ ├── rosa │ └── terry └── young-sheldon ├── connie ├── george ├── georgie ├── marry ├── missy └── shelly 9 directories, 27 files
tree
peut recevoir un ou plusieurs répertoires en argument et les lister indépendamment pour chacun.
student@sde/tp01$ tree music tv-shows music ├── blake-shelton │ └── friends ├── carrie-underwood │ ├── church-bells │ ├── dirty-laundry │ └── home-sweet-home ├── miranda-lambert │ ├── dumb-blonde │ ├── vice │ └── we-should-be-friends └── thomas-rhett └── craving-you tv-shows ├── brooklyn99 │ ├── amy │ ├── gina │ ├── jake │ ├── rosa │ └── terry └── young-sheldon ├── connie ├── george ├── georgie ├── marry ├── missy └── shelly 6 directories, 19 files
Si nous voulons afficher un répertoire contenant de nombreux fichiers et sous-répertoires, nous pouvons limiter le niveau de liste en utilisant l'argument -L
.
student@uso tp01$ tree -L 1 . ├── music ├── simple-python └── tv-shows 3 directories, 0 files
student@sde brooklyn99$ tree amy amy [error opening dir] 0 directories, 0 files
Sous Linux, la documentation la plus utilisée est probablement les pages de manuel. Voyons quelles sont les commandes que nous utilisons pour documenter notre Linux et comment nous trouvons des informations utiles.
Rechercher une commande:
student@sde ~$ apropos "remove files" git-rm (1) - Remove files from the working tree and from the index rm (1) - remove files or directories student@sde ~$ apropos "copy files" cp (1) - copy files and directories cpio (1) - copy files to and from archives docker-container-cp (1) - Copy files/folders between a container and the loca... docker-cp (1) - Copy files/folders between a container and the local f... git-checkout-index (1) - Copy files from the index to the working tree install (1) - copy files and set attributes
Localiser une commande:
student@sde ~$ which ls /bin/ls
Emplacement binaire, la source, mais aussi les fichiers où la page de manuel est utilisée:
student@sde ~$ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
Maintenant que nous savons naviguer dans le système de fichiers, nous voulons créer des fichiers et des dossiers. Voyons avec quelles commandes nous pouvons créer, copier, déplacer et supprimer des fichiers et des dossiers.
Un nouveau fichier est généralement créé à l'aide d'un éditeur de texte tel que nano , vim ou de tout éditeur graphique. Vous pouvez également créer un fichier vide à l’aide de la commande touch .
student@sde ~$ touch filename student@sde ~$ ls -l ... -rw-r--r-- 1 alexandru staff 0 ian 28 12:02 filename ...
La création d'une direction s'effectue à l'aide de la commande mkdir .
student@sde ~$ mkdir dirname # facem un director nou student@sde ~$ ls -l # verificam daca fisierul exista ... drwxr-xr-x 2 alexandru alexandru 4096 ian 28 12:04 dirname ...
Vous copiez le fichier à l’aide de la commande cp .
student@sde miranda-lambert$ cp vice another-vice # vice comme another-vice
La copie d'un répertoire s'effectue également à l'aide de la commande cp , mais à l'aide de l'argument - r , - récursif ou - R
student@sde music$ cp -R miranda-lambert country-singer # nous copions le réalisateur de miranda-lambert sous le nom chanteur country
Le déplacement ou le changement de nom (à la fin est plus ou moins identique) est effectué à l'aide de la commande mv .
student@sde tp01$ mv music country-music # renommer le directeur musical en country-music student@sde tp01$ mv country-music ../../ # déplace le répertoire country-music deux répertoires ci-dessus
La suppression d'un fichier s'effectue à l'aide de la commande rm .
student@sde miranda-lambert$ rm dumb-blonde # supprimer le fichier dumb-blonde
Supprimez un répertoire avec la commande rmdir . Attention, seuls les répertoires vides peuvent être supprimés.
student@sde music $ rmdir blake-shelton # supprime le répertoire blake-shelton
La suppression d'un répertoire non vide s'effectue à l'aide de la commande rm en utilisant l'un des arguments - r , - R ou - récursif .
student@sde music $ rm -r blake-shelton # renommer le répertoire de musique en country-music
student@sde: ~ $ pwd
La signification est 'print working directory' '
Vérifiez que vous vous trouvez dans le répertoire de base de votre utilisateur (par exemple, l'utilisateur était un “student”, c'est-à-dire le répertoire ”/ home/student”). Recherchez l’invite (contenant le caractère pour le répertoire de base) ou utilisez la commande
pwd
:
student@sde:~$ pwd /home/student
Maintenant que vous savez que vous vous trouvez dans le répertoire de base de votre utilisateur, clonez le contenu official SdE
git clone
nous en parle (voir la première ligne du résultat):
Cloning into 'sde'... remote: Counting objects: 54, done. remote: Compressing objects: 100% (12/12), done. remote: Total 54 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (54/54), done.
Le répertoire 'sde' a été créé relatif (en utilisant un chemin relatif) par rapport au répertoire actuel (qui dans notre cas était /home/student
, il est légèrement différent pour vous, car le nom d'utilisateur est différent).
Suite à la commande ci-dessus, le répertoire 'sde' est apparu dans le répertoire de base de votre utilisateur.
student@sde:~$ ls ... sde ...
Utilisez la commande cd
et changez le répertoire en sous-répertoire sde/tp01
. Dans le sous-répertoire sde/tp01
, vous trouverez la structure de répertoires et les fichiers nécessaires à la résolution du laboratoire.
Renommez le répertoire cloné /home/student/sde
en ligne de commande '/ home/student/sde-repository' '.
sde-repository
dans le répertoire /home/student
. Assurez-vous que vous êtes dans le bon répertoire, faites attention aux chemins relatifs et absolus. Lorsque la demande indique vous êtes dans le répertoire X , utilisez la commande cd X
pour entrer dans ce répertoire. X sera généralement un chemin absolu
/home/student
.sde-repository/tp01
, cloné pour l'exercice précédent.ls
: student@sde: ~/tp01 $ ls -R
ls -R
n'est pas très facile à suivre pour les répertoires contenant beaucoup d'entrées. Pour voir la structure arborescente plus conviviale, nous pouvons utiliser arbre
.
student@sde:~/sde-repository $ tree bash: tree: command not found...
Dans ce cas, nous devons l’installer:
student@sde:~$ sudo apt-get install tree
Vous êtes dans le répertoire /home/student/sde-repository
.
Supprimez le fichier simple_hello.py
du répertoire 'tp01/simple-python/'.
Notez que j'ai utilisé un chemin relatif vers le répertoire /home/student
. Nous aurions pu l'utiliser
Regardez dans la page de manuel de rm
('man rm' ') après' récursif '.
Entrez le répertoire tp01/empty_dir
. Essayez de supprimer le répertoire empty_dir
. Utilisez la commande
rmdir empty_dir
Pourquoi ne pouvons-nous pas supprimer “empty_dir” par cette méthode? Allez dans le dossier empty_dir
et vérifiez s'il contient des fichiers (il peut contenir des fichiers cachés!). Supprimez-en les fichiers, revenez dans le répertoire parent et vérifiez si la commande rmdir empty_dir
fonctionnes.
Entrez le répertoire sde-repository/tp01/
Utilisez la commande suivante:
mkdir Program Files and Accessories
Répertorie le contenu du répertoire 'tp01'. Combien de répertoires qu'il contient. Pourquoi Était-ce l'effet désiré? Afin de créer un répertoire avec des espaces dans son nom, nous avons deux alternatives:
student@uso:$ mkdir "Program Files and Accessories" student@uso:$ mkdir Program\ Files\ and\ Accessories
"
, Ctrl+A
pour aller au début de la ligne, Alt+F
pour avancer un mot et enfin taper ”
à nouveau.
Assurez-vous que cette fois le répertoire créé porte le nom souhaité en utilisant la commande ls
.
Sans entrer dans le répertoire créé, "Program Files and Accessories"
, créez 3 fichiers portant le nom "Open Office"
, "Mozilla Firefox"
și "Incredible long file name that contains a lot of spaces"
et deux repertoires "App Data"
și "Local Settings"
în "Program Files and Accessories"
. Essayez également d'utiliser le bouton TAB
autant que possible.
Copiez les deux premiers fichiers créés précédemment dans le répertoire simple-python/
.
Ecrivez un texte aléatoire dans "Nom de fichier long et incroyable contenant de nombreux espaces" à l'aide de la commande “echo” ou “vim”.
student@sde:$ echo "un text" > Inc<TAB> # vous utilisez la touche TAB, vous ne tapez pas tout le nom du fichier
Renommez le fichier '' Nom de fichier long incroyable contenant beaucoup d'espaces "” dans '' Nom de fichier long incroyable contenant moins d'espaces "”. Appuyez sur la touche TAB
. Essayez d'utiliser le moins de clés possible.
Pour afficher le contenu d'un fichier à l'écran, nous utilisons l'utilitaire cat
. Nous exécutons la commande ci-dessous pour illustrer:
student@sde:~$ cat sde-workspace/tp01/tv-shows/young-sheldon/shelly My name is Sheldon and I love science.
Nous utilisons cat
en combinaison avec d'autres commandes pour extraire ou filtrer le contenu de certains fichiers. La commande cat
reçoit comme argument le path vers un ou plusieurs fichiers comme arguments et affiche leur contenu concaténé à l'écran.
Un exemple courant est que nous voulons extraire les informations sur l'état de la mémoire système du fichier /proc/meminfo
. Pour cela, on va exécute la commande ci-dessous:
student@sde:~$ cat /proc/meminfo | grep "Mem" MemTotal: 2041248 kB MemFree: 236092 kB MemAvailable: 874420 kB
Dans l'exemple ci-dessus, nous utilisons cat
pour saisir le contenu du fichier / proc / meminfo
dans l'utilitaire grep
; avec l'utilitaire grep
nous filtrons le contenu par le texte "Mem"
. En d'autres termes, la sortie de la commande cat / proc / meminfo
, c'est-à-dire le contenu du fichier / proc / meminfo
, est le texte que l'utilitaire Processus grep
.
|
), nous pouvons enchaîner les commandes afin que le output de la commande précédente devienne input pour la commande suivante.
Exercice: À partir de l'exemple ci-dessus, extraire du fichier /proc/cpuinfo
la dimension du memoire cache du votre processeur; filtrer le contenu apres le texte"cache"
.
Nous avons vu que l'utilitaire cat
affiche l'intégralité du contenu d'un fichier. Il existe des scénarios où nous ne nous intéressons qu'au début ou à la fin d'un contenu. Pour ces cas, nous pouvons utiliser les utilitaires:
head
- afișează primele 10 linii din conținuttail
- afișează ultimele 10 linii din conținutLa valeur 10 est la valeur par défaut des deux utilitaires, mais nous pouvons spécifier un autre nombre de lignes.
Exemple:
student@sde:~$ cat sde-workspace/tp01/tv-shows/young-sheldon/shelly | head -1 My name is Sheldon
Exercice : Afficher les 10 premiers utilisateurs du système (la liste des utilisateurs se trouve dans le répertoire / etc / passwd
).
Comme nous avons vu jusqu'à présent dans le livre, la plupart des commandes Linux affichent un large volume d'informations que l'utilisateur (c'est-à-dire nous) va le filtre ensuite pour extraire ce qui l'intéresse. Au début de cette section, nous avons utilisé l'utilitaire grep
pour filtrer le résultat d'une commande.
La commande grep
est l'une des plus utilisées dans la ligne de commande. La syntaxe d'utilisation de grep
est la suivante:
SYNOPSIS grep [OPTIONS] PATTERN [FILE...]
grep
cherche PATTERN dans la liste des fichiers reçus en argument et affiche les lignes qui les contiennent le PATTERN cherche. Lorsqu'aucun fichier n'est reçu, lisez le texte du clavier (entrée standard) et affichez les lignes qui contiennent le PATTERN cherche.
Nous avons eu utilise grep
apres le modele suivante:
student@sde:~$ cat sde-repository/tp01/tv-shows/young-sheldon/shelly | grep Sheldon My name is Sheldon
Dans l'exemple ci-dessus, l'opérateur |
envoie le texte affiché par la commande cat
à l'entrée standard de la commande grep
.
student@uso:~$ grep Sheldon de-repository/tp01/tv-shows/young-sheldon/shelly My name is Sheldon
Le mode d'utilisation: grep PATTERN path/vers/fichier
.
Nous nous souvenons de fichier /etc/passwd
qui contient des informations sur tous les utilisateurs du système .
student@uso:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin (...)
En Linux il y a le filtre de texte cut
grâce auquel nous ne pouvons extraire qcertaines informations d' output.
Disons que nous voulons uniquement extraire les noms d'utilisateur, sans informations sur les groupes ou les répertoires personnels(home directory).
student@uso:~/uso-lab$ cat /etc/passwd | cut -f1 -d":" root daemon bin (...)
L'argument -f1
spécifie que nous voulons la première colonne, et l'argument -d:
spécifie le délimiteurde coloane, în cazul nostru :
.
man sort
)wc
, vous obtenez le numero des utilisatuers
du system. (Hint: man wc
)
Un script shell est un fichier texte contenant des commandes et des constructions spécifiques au shell. Un script shell commence par la construction #!/bin/bash
, nomee shebang indiquant l'interprète du script; dans ce cas, l'interprète est le shell Bash. Dacă nu este specificat nici un shell prin shebang atunci implicit va fi luat shell-ul implicit (setat în /etc/passwd
) asignat utilizatorului logat.
Par exemple, one-liners que on a écrit jusqu'à présent pourrait être mis dans un shell script et, en plus, si ce sont des commandes longues et ne tiennent pas sur une seule ligne, nous pouvons les “diviser” en plusieurs lignes en utilisant le séparateur \
:
#!/bin/bash export DATE=$(date +20%y%m%d) && \ mkdir -p /usr/share/snapshots && \ tar -cvpzf /usr/share/snapshots/$HOSTNAME_$DATE.tar.gz \ --exclude=/proc --exclude=/lost+found \ --exclude=/sys --exclude=/mnt \ --exclude=/media --exclude=/dev \ --exclude=/share/Archive /
\
, il ne doit past etre aucun caractère (ni l'espace blanc / trailing whitespaces)
Le script contien des commandes usuales utilise en shell et de autres commandes qui pn peut le trouve souvent dans les scripts: while
, if
, for
. Ces ne sont pas des instructions, il y a encore des commandes shell; peut être utilisé si la syntaxe est également correcte sur la ligne de commande.
Un script hérité les variabiles de l'envireonement du shell aprent comme HOME
, BASH
, IFS
, USER
. Dans le script, nous pouvons les utiliser comme ceci:
#!/bin/bash echo $HOME
En plus de ces variables, le script peut recevoir un certain nombre d'arguments de la ligne de commande. En utilisant les variables suivantes, nous pouvons nous référer aux arguments reçus par le script depuis la ligne de commande:
$*
est un string ($1, $2 … $n
) composé de tous les arguments reçus par le script $@
est une liste d'arguments de script $1, $2 … $n
représente chaque paramètre du script $0
est le nom du script $#
est le nombre d'arguments reçus de la ligne de commande
Par exemple, prenons le script suivant arguments.sh
:
#!/bin/bash echo There are $# arguments to $0: $* echo first argument: $1 echo second argument: $2 echo third argument: $3 echo the list of arguments: $@
Appelons le script avec 4 arguments:
student@uso:~$ bash arguments.sh banane cirese caise castraveti There are 4 arguments to arguments.sh: banane cirese caise castraveti first argument: banane second argument: cirese third argument: caise the list of arguments: banane cirese caise castraveti
Lorsque nous exécutons une commande, elle peut terminer son exécution de deux manières: avec succès ou avec échec . Quand il fini son execution, tout les processus vont retourne un code d'erreur, qui va etre un numero:
0
, le proccesus a fini l'execution avec succes. man
de l'utilitaire ls
est spécifiée:Exit status: 0 if OK, 1 if minor problems (e.g., cannot access subdirectory), 2 if serious trouble (e.g., cannot access command-line argument).
Pour voir le code avec lequel une commande a terminé son exécution, nous utilisons la syntaxe $?
. Voir l'exemple ci-dessus:
student@uso:~$ ls Desktop/ todos.txt student@uso:~$ echo $? 0 student@uso:~$ ls non-existent ls: cannot access 'non-existent': No such file or directory student@uso:~$ echo $? 2
On observe que dans le cas quand le fichier est inexistent, la commande ls non-existent
a retourne la valeur 2
, comme est spécifié dans la page de manuel.
Plusieurs fois, nous voulons exécuter une séquence de commandes pour accomplir une tâche. Par exemple, lorsque nous voulons installer une application, nous l'exécutons trois commandes:
apt update
apt install
Nous préférons enchaîner les trois commandes en une seule parce que de cette façon, nous pouvons démarrer tout ce processus, quitter l'ordinateur, et lorsque nous revenons, nous avons tout le système prêt. Pentru a înlănțui comenzi în terminalul bash avem trei operatori disponibili:
L'operateur ;
- est utilise pour separer les commandes. On va suive l'exemple ci-dessous:
student@uso:~$ mkdir demo; cd demo; touch Hello; ls Hello
Dans l'exemple ci-dessus, on a créé le répertoire demo
, navigué à l'intérieur, créé le fichier Hello
et affiché le contenu du répertoire. On a fait tout cela en concaténant les commandes mkdir
, cd
, touch
et ls
à l'aide de l'opérateur ;
.
L'opérateur ;
est utilisé pour séparer les commandes, mais ne prend pas en compte si les commandes précédentes ont été exécutées avec succès ou non. On va suive l'exemple ci-dessous:
student@uso:~$ mkdir operators/demo; cd operators/demo mkdir: cannot create directory ‘operators/demo’: No such file or directory -bash: cd: operators/demo: No such file or directory
Dans l'exemple ci-dessus, la commande mkdir
a échoué car elle n'a pas pu trouver le répertoire operators
pour créer le répertoire demo
. Cependant, l'opérateur ;
sépare uniquement les commandes les unes des autres, donc la commande cd operators/demo
a également été exécutée et a échoué car il n'y a pas de chemin opérateurs/démo
.
On va utilise l'operateur ;
pour enchaîner des commandes indépendantes les unes des autres, afin que leur exécution ne dépende pas du succès d'une commandeprecedente.
L'operateur binnaire &&
(et logiq) - exécute la deuxième commande uniquement si la précédente a été exécutée avec succès. L'exemple précédent devient:
student@uso:~$ mkdir operators/demo && cd operators/demo mkdir: cannot create directory ‘operators/demo’: No such file or directory
Nous remarquons que depuis l'échec de la commande mkdir
, la commande cd
n'a pas été exécutée.
L'operateur ||
(ou logique) - exécute la deuxième commande uniquement si la première a échoué. On va suive l'exemple ci-dessous:
student@uso:~$ (ls -d operators || mkdir operators) && ls -d operators ls: cannot access 'operators': No such file or directory operators student@uso:~$ (ls -d operators || mkdir operators) && ls -d operators operators operators
Dans l'exemple ci-dessus, la première commande ls
a échoué, donc la commande a été exécutée mkdir
puis la dernière commande a été exécutée ls
. Lors de la deuxième exécution, la première commande ls
a été exécutée avec succès, donc la commande mkdir
n'a plus été exécutée, puis la dernière commande a été exécutée ls
.
Pour résoudre le scénario à partir duquel nous avons commencé, nous pouvons exécuter:
sudo apt update && sudo apt install -y cowsay && cowsay "Howdy"
La commande ci-dessus mettra à jour l'index du package source, installera le package cowsay
et exécutera la commande cowsay
pour valider l'installation. Une telle chaîne de commandes est appelée oneliner .
~/make-folder
puis copiez le contenu du répertoire ~/sde-repository/tv-shows/young-sheldon dedans.