TP 02 - Linux

Objectifs

  1. Installation d'un environnement Linux
  2. Utilisation du système de commande sous Linux
  3. Installation de la programmation C pour Linux
  4. Demarer un program sur Python 3

Installer Ubuntu

Pour le laboratoire SdE, nous utiliserons Linux, la distribution Ubuntu.

Vous pouvez utiliser n’importe quelle distribution Linux de votre choix (Debian, Fedora, Mint, etc.), mais certaines commandes peuvent être un peu lointaines. différent. Les distributions similaires à Ubuntu sont:

  • Debian
  • Mint

Installer Ubuntu

Manuel

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

Liste de commandes

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.

Pour les exemples suivants, nous avons supposé ce qui suit:

  • le nom de l'utilisateur connecté est student
  • le répertoire personnel de l'utilisateur est /home/student
  • le nom de l'ordinateur est sde

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

Une grande attention aux chemins relatifs par rapport aux l'absolu. Un chemin relatif est un chemin relatif au répertoire courant, tandis qu'un chemin absolu est relatif au répertoire racine ( «/»). Un chemin relatif commence généralement avec un nom avec « » Ou « .. », alors qu'un chemin absolu commence toujours par «/». Notez que et « ~/OSU » est aussi un chemin absolu, même si elle commence par le caractère « ~ », c'est parce que « ~ » est juste un alias pour le répertoire « home » « l'utilisateur actuel ( '/ home/student' « ).

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

Lisez attentivement les messages d'erreur Bash chaque fois qu'une commande ne fonctionne pas. Il fournit suffisamment d'indices sur la racine de l'erreur.

En général, tout 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”.

2. Arbre

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

Notez que l'arborescence peut ne recevoir aucun argument, ou si elle le reçoit, il doit nécessairement s'agir d'un répertoire, sinon une erreur sera affichée.

student@sde brooklyn99$ tree amy
amy [error opening dir]
 
0 directories, 0 files

3. Pages du manuel

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

4. Opérations sur les fichiers et les dossiers

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.

Créer un fichier

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
...

Créer un répertoire

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
...

Copier

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

Déplacer et renommer

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

Supprimer un fichier

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

Supprimer un répertoire

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

Exercices

Lorsque vous travaillez sur des exercices, faites attention au répertoire dans lequel vous vous trouvez lorsque vous lisez les conditions, mais également lorsque vous les résolvez. Le plus sûr est d'utiliser la commande

 student@sde: ~ $ pwd 

La signification est 'print working directory' '

1. Utilisez Git

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

Notez qu'un répertoire nommé 'sde' a été créé dans le répertoire de base. Le message 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.

2. Structure du système de fichiers

Renommez le répertoire cloné /home/student/sde en ligne de commande '/ home/student/sde-repository' '.

Les exercices suivants supposent qu'il existe un répertoire appelé 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

  • Vous êtes dans le répertoire /home/student .
  • Allez dans le dossier sde-repository/tp01 , cloné pour l'exercice précédent.
  • Nous voulons voir tous les fichiers et sous-répertoires du répertoire actuel. Pour cela, nous avons deux options:
    1. Utilisation de l'argument de commande ls :
       student@sde: ~/tp01 $ ls -R 
    2. La sortie de la commande 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 .

Il est possible que l’arbre n’existe pas dans le système. Le résultat de la commande sera alors:

student@sde:~/sde-repository $ tree
bash: tree: command not found...

Dans ce cas, nous devons l’installer:

student@sde:~$ sudo apt-get install tree

3. Supprimer des fichiers

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.

4. Créer des fichiers avec des noms compliqués

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

Ne tapez plus la commande, utilisez la touche SAGEATA_SUS pour revenir à la commande précédente, tapez ", 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.

Une solution rapide peut être la suivante. “Alt +.” Est un moyen d'itérer avec les derniers paramètres des commandes plus tôt). Nous tapons ensuite 'Alt + b' pour revenir en arrière puis, en utilisant Alt + Backspace, nous supprimons les 3 mots dont nous n’avons plus besoin. Enfin, le texte "moins \" est uniquement ajouté.

5. Traitement des informations d'un fichier

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 .

En utilisant le symbole de tube/pipe ( | ), 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".

Affichage partiel d'un fichier

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ținut
  • tail - afișează ultimele 10 linii din conținut

La 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 ).

Recherche dans les fichiers

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.

6. L'utilitaire cut

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 :.

  1. En commanecent de la commande au dessus, afficher les noms d'utilisateurs trie par ordre alphabétique. (Hint: man sort)
  2. En utilisant l'utilitaire wc, vous obtenez le numero des utilisatuers

du system. (Hint: man wc)

7. Shell scripting

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 /

ATTENTION! Dans la construction ci-dessus après \ , 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.

Arguments de 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

8. Exécution des commandes

Le fin de l'exécution d'une commande

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:

  • Si le numero a la veleur 0, le proccesus a fini l'execution avec succes.
  • Si le numéro renvoyé a une autre valeur, le processus a terminé son exécution par erreur et le code renvoyé peut être utilisé pour en savoir plus en ce qui concerne l'erreur renvoyée par le processus. Dans la page 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.

Chaînage des commandes en fonction du succès ou de l'échec

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:

  • Nous mettrons à jour l'index source du package en utilisant apt update
  • Nous installerons le package contenant l'application en utilisant apt install
  • Nous exécuterons l'application pour valider que l'installation a réussi.

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 .

Exercices

  1. Écrivez un oneliner avec lequel vous créez le répertoire~/make-folder puis copiez le contenu du répertoire ~/sde-repository/tv-shows/young-sheldon dedans.
  2. Mettez à jour l'ancien oneliner telle que après la copie il doit être affiche le message: “operation done”.
sde2/laboratoare/01.txt · Last modified: 2021/03/10 16:29 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0