Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde:laboratoare:01 [2020/02/19 12:41]
alexandru.radovici
— (current)
Line 1: Line 1:
-====== TP 1 - Linux ====== 
- 
-===== Objectifs ===== 
-  - Installation d'un environnement Linux 
-  - Utilisation du système de commande sous Linux 
-  - Installation de la programmation C pour Linux 
-  - Demarer un program sur Python 3 
- 
- 
-===== Installer Ubuntu ===== 
-Pour le laboratoire SdE, nous utiliserons Linux, la distribution Ubuntu. Il y a deux façons d'​utiliser Linux: 
-  * Sous-système Linux pour Windows (ne fonctionne que sous Windows 10) 
-  * Installer la distribution Ubuntu 
- 
-<​note>​ 
-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 
-</​note>​ 
- 
-==== Sous-système Linux pour Windows ==== 
-Windows 10 peut exécuter un système Linux sans avoir besoin d'une installation séparée. Pour cela, suivez les étapes décrites dans [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​install-win10|Install du sous-système Windows pour Linux (WSL) sous Windows 10]]. 
- 
- 
-==== Installer Ubuntu ==== 
-Pour installer Ubuntu, suivez les étapes du [[https://​tutorials.ubuntu.com/​tutorial/​tutorial-install-ubuntu-desktop#​0|Install Ubuntu]]. 
- 
-<note d'​avertissement>​ 
-Avant d'​installer Ubuntu sur votre ordinateur **, nous vous recommandons de sauvegarder vos données **. 
-</​note>​ 
- 
-===== 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: 
- 
-<code bash> student@sde:​ ~ $ man echo </​code>​ 
- 
-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 | 
- 
-===== Git ===== 
-À travers les laboratoires,​ nous utiliserons Git pour télécharger les fichiers nécessaires au laboratoire. 
- 
-Git est un système de gestion de contrôle de source utilisé pour coder le code dans les projets logiciels volumineux. 
- 
-Pour ceux qui souhaitent approfondir les concepts de la commande '​git'​ et des utilisations avancées, nous recommandons le cours en ligne sur [[http://​gitimmersion.com/​|gitimmersion]] ou [[https://​www.youtube.com/​watch?​v=HVsySz-h9r4 | Tutoriel Git pour les débutants: notions de base de la ligne de commande]]. 
- 
-===== 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 [[:​sde:​resurse:​comenzi_linux]] que nous pouvons utiliser pour rappeler nos commandes les plus courantes. 
- 
-<note important>​ 
-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. 
-</​note>​ 
- 
-==== 1. Navigation dans le système de fichiers ==== 
- 
-Ouvrez un terminal. Clonez le contenu du [[https://​github.com/​upb-fils/​sde|dépôt SdE officiel]] à l'aide de la commande ci-dessous: <code bash> 
-student@sde:​ ~ $ clone git https://​github.com/​upb-fils/​sde 
-</​code>​ 
- 
-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 ''​. 
- 
-<code bash> 
-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-gcc 
-│   ​├── Makefile 
-│   ​├── errors.c 
-│   ​├── hello.c 
-│   ​├── help.c 
-│   ​├── simple_hello.c 
-│   ​├── utils.c 
-│   ​├── utils.h 
-│   ​└── warnings.c 
-└── tv-shows 
-    ├── brooklyn99 
-    │   ​├── amy 
-    │   ​├── gina 
-    │   ​├── jake 
-    │   ​├── rosa 
-    │   ​└── terry 
-    └── young-sheldon 
-        ├── connie 
-        ├── george 
-        ├── georgie 
-        ├── marry 
-        ├── missy 
-        └── shelly 
- 
-9 directories,​ 27 files 
- 
- 
-</​code>​ 
- 
-Maintenant, je vois la structure de répertoire,​ nous allons les parcourir: 
- 
-<code bash> 
-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 
-</​code>​ 
- 
-Ls son argumentation afin que nous puissions donner un chemin relatif à un répertoire ou un fichier, et un chemin absolu: 
- 
-<code bash> 
-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 
-</​code>​ 
- 
-<note important>​ 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'​ « ). </​note>​ 
- 
-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>​ 
-<code bash> 
-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>​ 
-</​code>​ 
- 
-Quelques exemples d'​utilisation des chemins absolus: 
-<code bash> 
-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 ~ 
-</​code>​ 
- 
-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? 
- 
-<code bash> 
-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 
- 
-</​code>​ 
- 
-<note important>​ 
-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. 
-</​note>​ 
- 
-<note important>​ 
-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. ​ 
-</​note>​ 
- 
-<​hidden>​ 
- 
-Allez dans le répertoire ''​~/​sde/​tp01 ''​ 
- 
-  * L'​erreur avec ''​cd nightwish ''​et ne dit pas que ce n'est pas un réalisateur,​ vous pouvez donner '​ls-l'​ 'pour leur montrer que la gauche n'a pas de' '​d'​ 'du réalisateur. 
-  * Montrer ou spécifier l'​effet des commandes ''​cd '',​ ''​cd ~ '',​ ''​cd - ''​. 
-  * Montrer ou spécifier l'​effet de la commande ''​cd <​SPACE>​ <TAB> ''​->​ comme j'ai donné ''​ls ''​sans utiliser ''​ls ''​ 
-  * Afficher ou spécifier l'​effet de la commande ''​cd me <TAB> ''​. 
- 
-<note important>​ ** Insistez pour utiliser <TAB> ne sautez pas cette ** </​note>​ 
- 
-</​hidden>​ 
- 
-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 (''​. ''​). 
- 
-<code bash> 
-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-gcc 
-│   ​├── errors.c 
-│   ​├── hello.c 
-│   ​├── help.c 
-│   ​├── Makefile 
-│   ​├── simple_hello.c 
-│   ​├── utils.c 
-│   ​├── utils.h 
-│   ​└── warnings.c 
-└── tv-shows 
-    ├── brooklyn99 
-    │   ​├── amy 
-    │   ​├── gina 
-    │   ​├── jake 
-    │   ​├── rosa 
-    │   ​└── terry 
-    └── young-sheldon 
-        ├── connie 
-        ├── george 
-        ├── georgie 
-        ├── marry 
-        ├── missy 
-        └── shelly 
- 
-9 directories,​ 27 files 
-</​code>​ 
-''​tree''​ peut recevoir un ou plusieurs répertoires en argument et les lister indépendamment pour chacun. 
- 
-<code bash> 
-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 
-</​code>​ 
- 
-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 ''​. 
-<code bash> 
-student@uso tp01$ tree -L 1 
-. 
-├── music 
-├── simple-gcc 
-└── tv-shows 
- 
-3 directories,​ 0 files 
-</​code>​ 
- 
-<​note>​ 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. 
-<code bash> 
-student@sde brooklyn99$ tree amy 
-amy [error opening dir] 
- 
-0 directories,​ 0 files 
-</​code>​ 
-</​note>​ 
-==== 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: 
- 
-<code bash> 
-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 
-</​code>​ 
-Localiser une commande: 
- 
-<code bash> 
-student@sde ~$ which ls 
-/bin/ls 
-</​code>​ 
- 
-Emplacement binaire, la source, mais aussi les fichiers où la page de manuel est utilisée: 
- 
-<code bash> 
-student@sde ~$ whereis ls 
-ls: /usr/bin/ls /​usr/​share/​man/​man1/​ls.1.gz 
-</​code>​ 
- 
-  
-==== 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 //. 
- 
-<code bash> 
-student@sde ~$ touch filename  ​ 
-student@sde ~$ ls -l 
-... 
--rw-r--r-- 1 alexandru staff 0 ian 28 12:02 filename 
-... 
-</​code>​ 
- 
-=== Créer un répertoire === 
-La création d'une direction s'​effectue à l'aide de la commande // mkdir //. 
- 
-<code bash> 
-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 
-... 
-</​code>​ 
- 
-=== Copier === 
- 
-Vous copiez le fichier à l’aide de la commande // cp //. 
- 
-<code bash> 
-student@sde miranda-lambert$ cp vice another-vice ​ # vice comme  another-vice 
-</​code>​ 
- 
-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 // 
-<code bash> 
-student@sde music$ cp -R miranda-lambert country-singer ​  # nous copions le réalisateur de miranda-lambert sous le nom chanteur country 
-</​code>​ 
- 
-=== 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 //. 
-<code bash> 
-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 
-</​code>​ 
- 
-=== Supprimer un fichier === 
- 
-La suppression d'un fichier s'​effectue à l'aide de la commande // rm //. 
- 
-<code bash> 
-student@sde miranda-lambert$ rm dumb-blonde # supprimer le fichier dumb-blonde 
-</​code>​ 
-=== Supprimer un répertoire === 
-Supprimez un répertoire avec la commande // rmdir //. Attention, seuls les répertoires vides peuvent être supprimés. 
- 
-<code bash> 
-student@sde music $ rmdir blake-shelton # supprime le répertoire blake-shelton 
-</​code>​ 
- 
-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 //. 
-<code bash> 
-student@sde music $ rm -r blake-shelton # renommer le répertoire de musique en country-music 
-</​code>​ 
- 
-<​hidden>​ 
- 
-Utilisez ** 'cp, mv, mkdir, touch, echo' '**. 
-Vous pouvez utiliser le dossier ** ''/​tmp ''​** comme terrain de jeu (c'est ce que vous leur dites). 
-N'​oubliez pas de leur rappeler que vous utilisez TAB pour être rapide! Quelques suggestions de commandes 
-en cas de manque d'​imagination:​ 
- 
- 
-  * Faire une micro-sauvegarde 
- 
-<code bash> ​ 
-touch file_list.bak 
-cat file_list.bak ​     # to show that it is empty            ​ 
-cp file_list file_list.bak 
-ls 
-cat file_list.bak 
-</​code>​ 
- 
-  * Était-il nécessaire de créer le fichier avec ** ''​touch ''​**?​ (s’ils disent ** OUI ** faire une copie, mais sans ** ''​toucher ''​**) 
- 
-<code bash> 
-cp file_list file_list.bak2 
-</​code>​ 
- 
-  * La différence entre copier et déplacer. Avant de donner quoi que ce soit ** ''​ls ''​**,​ demandez à quoi ressemblera la sortie (saisissez la borne ** 'ls -l' '** et n'​entrez pas) 
- 
-<code bash> 
-mkdir generated_files ​   
-cp file_list generated_files/​ 
-mv file_list.bak generated_files/​ 
-ls -l generated_files/ ​     ​ 
-ls -l  ​ 
-</​code>​ 
-  * Supprimez quelques fichiers (demandez quelle est la différence entre la suppression classique donnée constamment par Windows et ce ** ''​rm ''​**). 
-  
-<code bash> ​           
-rm file_list ​     ​ 
-ls 
-</​code>​ 
- 
-  * La conclusion à atteindre: beaucoup de précautions avec ** '​rm'​ '**, car il n'y a pas de UNDO/​Restore. Vous pouvez entrer un petit mot sur les autorisations,​ pourquoi ne pas avoir le droit root (c’est l’une des nombreuses causes - vous pouvez supprimer des fichiers critiques du système). Plus de détails seront dans l'​atelier 3. Pour l'​instant,​ ils sont intéressés par ** '​sudo'​ '** car ils auront des paquets à installer et c'est pourquoi vous devriez avoir le droit de le faire. 
- 
-</​hidden>​ 
- 
-==== 5. Caractères génériques ==== 
- 
-La ligne de commande contient des caractères spéciaux (tels que // caractères génériques //) avec lesquels nous pouvons effectuer une action sur plusieurs fichiers. Voyons comment nous pouvons faire cela. 
- 
-Répertorie le contenu de tous les fichiers avec l’extension ''​* .conf ''​à partir de ''/​etc '':​ 
- 
-<code bash> ls /etc/*.conf </​code>​ 
- 
-Détermination de la distribution de Linux (en général, nous ne savons pas exactement comment le fichier est appelé, mais nous savons avec certitude qu'il contient le mot clé "​release"​) 
- 
-<code bash> 
-cat /​etc/​*release* 
-</​code>​ 
- 
- 
- 
-<​hidden>​ 
- 
-  * Spécifiez qui effectue l'​extension (le shell, pas la commande). 
-  * La commande s'​exécute comme si tous les arguments étaient livrés à la main les uns après les autres. 
-  * Fonctionne parce que la plupart des commandes linux supportent un nombre variable d'​arguments (voir la démo avec ''​cat ''​ci-dessous) 
-  * Prenez ce code C simple, compilez-le puis exécutez-le en utilisant globbing. Cela ne fonctionnera pas car nous avons explicitement limité le nombre d'​arguments possibles à un: 
- 
-<code C> 
-#include <​stdio.h>​ 
- 
-int main(int argc, char **argv) 
-{ 
-        if(argc > 2) { 
-                printf ("Only one argument accepted \n"); 
-                return -1; 
-        } 
- 
-        printf("​%s \n", argv[1]); 
- 
-        return 0; 
-} 
- 
-</​code>​ 
- 
-Une démonstration intéressante pour eux sera la détermination de la distribution Linux (en général, nous ne savons pas exactement comment le fichier s'​appelle,​ mais nous savons avec certitude qu'il se termine par "​release"​):​ 
- 
-<code bash> 
-cat /​etc/​*-release 
-</​code>​ 
- 
-</​hidden>​ 
-==== 6. Utilizer Python 3 ===== 
- 
-Pour demerare des programmes en Python 3, vous avez besoin de paquets contenant le language Pyhton 3, des bibliothèques. 
-Sur certains systèmes, ces packages peuvent être manquants: 
- 
-  * ''​python3 ''​ 
-  * ''​python3-pip ''​ 
- 
-S'ils ne sont pas installés par défaut sur votre système, vous pouvez utiliser ​ 
-<code bash> 
-student@sde:​~$ sudo apt-get install pyhton3 pyhton3-pip 
-</​code>​ 
- 
-=== Demarer un seul fichier source === 
-Nous allons dans le répertoire ''/​home/​student/​sde/​tp/​tp01/​pyhton3 ''​où nous trouvons le fichier ''​simple_hello.py ''​. 
- 
- 
-<code bash> 
-student@sde$ pwd 
-/​home/​student/​ 
-student@sde$ cd sde/​tp/​tp01/​python3 
-student@sde$ ls 
-simple_hello.py 
-student@sde$ python3 simple_hello.py ​                                 
-Hello world! 
-</​code>​ 
- 
-===== Exercices ===== 
-<note warning> 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 <code bash> student@sde:​ ~ $ pwd </​code>​ La signification est 'print working directory'​ '</​note>​ 
- 
- 
-==== 1. Utilisez Git (1p) ==== 
- 
-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 '':​ 
- 
-<code bash> 
-student@sde:​~$ pwd 
-/​home/​student 
-</​code>​ 
- 
-Maintenant que vous savez que vous vous trouvez dans le répertoire de base de votre utilisateur,​ clonez le contenu [[https://​github.com/​upb-fils/​sde.org official SdE]] 
- 
-<​solution -hidden> 
-<code bash> 
-student@sde:​~$ git clone https://​github.com/​upb-fils/​sde ​ 
-</​code>​ 
-</​solution>​ 
- 
-<note important>​ 
-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): 
- 
-<code bash> 
-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. 
-</​code>​ 
- 
-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. 
- 
-<code bash> 
-student@sde:​~$ ls 
-... sde ... 
-</​code>​ 
-</​note>​ 
- 
-Utilisez la commande ''​cd ''​et changez le répertoire en sous-répertoire ''​sde/​tp01 ''​. Dans le sous-répertoire ''​sde/​tm01 '',​ vous trouverez la structure de répertoires et les fichiers nécessaires à la résolution du laboratoire. 
-==== 2. Structure du système de fichiers (1p) ==== 
- 
-Renommez le répertoire cloné ''/​home/​student/​sde ''​en ligne de commande '/ home/​student/​sde-repository'​ '. 
- 
-Rappelez-vous de la section exemple ou [[sde: resources: Commandes_linux]] avec quel ordre nous pouvons renommer des fichiers ou des dossiers. 
- 
-<note warning> 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 
-</​note>​ 
- 
-  * ** 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: 
-      - Utilisation de l'​argument de commande ''​ls '':​ <code bash> student@sde:​ ~/tp01 $ ls -R </​code>​ 
-      - 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 ** ''​. 
-<type de note> Il est possible que l’arbre n’existe pas dans le système. Le résultat de la commande sera alors: 
-<code bash> 
-student@sde:​~/​sde-repository $ tree 
-bash: tree: command not found... 
-</​code>​ 
- 
-Dans ce cas, nous devons l’installer:​ 
- 
-<code bash> 
-student@sde:​~$ sudo apt-get install tree 
-</​code>​ 
-</​note>​ 
- 
-<​solution -hidden><​code>​ 
-student@sde:​~$ mv /​home/​student/​sde /​home/​student/​sde-repository 
-student@sde:​~$ cd sde-repository/​tp01/​ 
-student@sde:​~/​sde-repository/​tp01$ ls -R 
-TODO 
- 
-student@sde:​~/​sde-repository/​tp01$ tree 
-TODO 
- 
-</​code></​solution>​ 
- 
-==== 3. Taille du fichier (2p) ==== 
- 
-Nous voulons connaître la taille des fichiers. ** Vous êtes dans ''/​home/​student ''​. Allez dans le répertoire ''​sde-repository/​tp01 ''​** 
- 
-Répertorier les répertoires détaillés 
-<code bash> ​ 
-student@sde:​~$ ls -l  
-</​code> ​ 
-Selon vous, quelle colonne fournit des informations dimensionnelles?​ La sortie de la commande fournit la taille en octets et est plus difficile à lire. 
- 
-Utilisez un extra-argument de la commande ''​ls ''​pour avoir les dimensions '​lisibles par l'​homme'​. Rechercher dans la page de commande ''​ls ''​ 
- 
-<code bash> ​ 
-student@sde:​~$ man ls  
-</​code> ​ 
- 
-par le mot clé ''​humain ''​. Utilisez l'​argument trouvé en conjonction avec ''​-l ''​. 
- 
-Le répertoire ''​sde-repository/​tp01/​year_1/​programming/​themes ''​contient beaucoup de fichiers volumineux, il est impossible d'​avoir seulement la taille de ''​4K ''​. Pour déterminer la taille du dossier, nous devons utiliser une autre commande, "​du"​ (à partir de l'​utilisation du disque). 
- 
-Voici un exemple: 
- 
-<code bash> student@sde:​~$ du sde-repository/​tp01/​anul_1/​programare/​teme ​ 
-</​code> ​ 
- 
-** Exercice **: Déterminez ** seulement ** la taille du répertoire ''​sde-repository/​tp01/​year_1/​programming/​themes ''​(pas les sous-répertoires) dans un format lisible par l'​homme. Recherchez dans <code bash> student@sde:​ ~ $ man du </​code>​ après le mot-clé ''​summary ''​et identifiez l'​option de commande ''​du ''​qui affiche la taille du répertoire sous forme résumée. 
- 
- 
-<​solution -hidden><​code>​ 
-student@sde:​~$ cd sde-repository/​tp01/​ 
-student@sde:​~/​sde-repository/​tp01$ ls -l 
-total 12 
-drwxrwxr-x 5 student student 4096 nov 20 19:33 anul_1 
-drwxrwxr-x 2 student student 4096 nov 20 19:33 anul_2 
-drwxrwxr-x 4 student student 4096 nov 20 19:33 demo 
-student@sde:​~/​sde-repository/​tp01$ ls -lh 
-total 12K 
-drwxrwxr-x 5 student student 4,0K nov 20 19:33 anul_1 
-drwxrwxr-x 2 student student 4,0K nov 20 19:33 anul_2 
-drwxrwxr-x 4 student student 4,0K nov 20 19:33 demo 
-student@sde:​~/​sde-repository/​tp01$ cd /​home/​student 
-student@sde:​~$ du -hs sde-repository/​tp01/​anul_1/​programare/​teme/​ 
-104K sde-repository/​tp01/​anul_1/​programare/​teme/​ 
-</​code></​solution>​ 
- 
- 
-==== 4. Supprimer des fichiers (1p) ==== 
- 
-** Vous êtes dans le répertoire ''/​home/​student/​uso-repository ''​.** 
- 
-Supprimez le fichier ''​crap.txt ''​du répertoire '​lab02/​anul_1/​uso'​. 
- 
-Notez que j'ai utilisé un chemin relatif vers le répertoire ''/​home/​student''​ . Nous aurions pu l'​utiliser 
- 
-<code bash> 
-rm -f /​home/​student/​uso-repository/​lab02/​anul_1/​uso/​crap.txt 
-</​code>​ 
- 
-Essayez de supprimer le répertoire ''​to_delete ''​ de ''​uso ''​. Pourquoi ne pouvons-nous pas utiliser la commande ci-dessous, même si elle contient le chemin absolu correct? 
- 
-<code bash> 
-rm -f/​home/​student/​uso-repository/​lab02/​year_1/​uso/​to_delete 
-</​code>​ 
- 
-Regardez dans la page de manuel de ''​rm ''​('​man rm' ') après'​ récursif '. 
- 
-Entrez le répertoire ''​lab02/​anul_1/​uso ''​. Essayez de supprimer le répertoire ''​empty_dir ''​. Utilisez la commande 
- 
-<code bash> 
-rmdir empty_dir 
-</​code>​ 
- 
-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 ''​fonctionne. 
- 
-<type de note> 
-Pour supprimer un répertoire vide, nous pouvons utiliser l'une des commandes suivantes: 
- 
-<code bash> 
-student@uso:​ $ cd uso-repository 
-student@uso:​ $ rm -rf lab02/​year_1/​uso/​empty_dir 
-student@uso:​ $ rmdir lab02/​year_1/​uso/​empty_dir 
-</​code>​ 
- 
-''​rmdir ''​ne peut supprimer que des répertoires vides. 
- 
-Vérifiez l'​exécution réussie de la commande de suppression à l'aide d'une liste, par exemple ''​ls ''​. 
- 
-</​note>​ 
- 
-<​solution -hidden><​code>​ 
-student@uso:​~$ cd uso-repository/​ 
-student@uso:​~/​uso-repository$ rm lab02/​anul_1/​uso/​crap.txt ​ 
-student@uso:​~/​uso-repository$ rm -rf /​home/​student/​uso-repository/​lab02/​anul_1/​uso/​to_delete/​ 
-student@uso:​~/​uso-repository$ cd lab02/​anul_1/​uso/​ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso$ rmdir empty_dir/ 
-rmdir: failed to remove ‘empty_dir/​’:​ Directory not empty 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso$ cd empty_dir/ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​empty_dir$ ls -la 
-total 12 
-drwxrwxr-x 2 student student 4096 nov 20 19:33 . 
-drwxrwxr-x 6 student student 4096 nov 20 22:28 .. 
--rw-rw-r-- 1 student student ​  37 nov 20 19:33 .keep 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​empty_dir$ rm .keep  
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​empty_dir$ cd .. 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso$ rmdir empty_dir/ 
-</​code></​solution>​ 
- 
- 
-==== 5. Créer des fichiers avec des noms compliqués (2p) ==== 
- 
-** Entrez le répertoire uso-repository/​lab02/​year_1/​uso/​filesys ** 
- 
-Utilisez la commande suivante: 
-<code bash> ​ 
-mkdir Program Files and Accessories ​ 
-</​code> ​ 
-Répertorie le contenu du répertoire '​filesys'​. 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:​ 
- 
-<code bash> 
-student@uso:​$ mkdir "​Program Files and Accessories"​ 
-student@uso:​$ mkdir Program\ Files\ and\ Accessories 
-</​code>​ 
- 
-<type de note> 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. 
-</​note>​ 
- 
-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 ''​../​../​programare/​ ''​(** attention est un chemin relatif du répertoire ''​uso-repository/​lab02/​year_1/​uso/​filesys ''​**). 
- 
-Ecrivez un texte aléatoire dans %% "Nom de fichier long et incroyable contenant de nombreux espaces"​ %% à l'aide de la commande "​echo"​ ou "​vim"​. 
- 
-<code bash> 
-student@uso:​$ echo "un text" > Inc<​TAB> ​  # vous utilisez la touche TAB, vous ne tapez pas tout le nom du fichier 
-</​code>​ 
- 
-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. 
- 
-<type de note> 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é. 
-</​note>​ 
- 
-Copiez l'​intégralité du répertoire '​filesys'​ dans ''/​home/​student ''​. Pourquoi la commande ci-dessous ne fonctionne-t-elle pas? 
- 
-<code bash> 
-student@uso:​$ pwd 
-/​home/​student/​uso-repository/​lab02/​anul_1/​uso/​filesys 
-student@uso:​$ cp . /​home/​student 
-</​code>​ 
- 
-Nous avons besoin de ''​récursif ''​(comme ''​rm ''​). Regardez dans la page de manuel de ''​cp ''​('​man cp' ') après'​ récursif '. 
- 
-Entrez le dossier parent de ''​filesys ''​. Déplacez ''​to_move ''​vers ''/​tmp ''​. Notez que pour ''​mv '',​ nous n'​avons pas besoin du paramètre ''​-r ''​(pour la récursivité). 
- 
-Vérifiez que votre commande est exécutée avec succès à l’aide d’une commande ''​ls ''​. 
- 
-<​solution -hidden><​code>​ 
-student@uso:​~$ cd uso-repository/​lab02/​anul_1/​uso/​filesys/​ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys$ mkdir "​Program Files and Accessories"​ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys$ cd Program\ Files\ and\ Accessories/​ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ touch fisier1 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ touch "​fisier 2" 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ touch fisier\ 3 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ mkdir file 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ mkdir "file (1)" 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ ls -l 
-total 8 
-drwxrwxr-x 2 student student 4096 nov 20 22:33 file 
-drwxrwxr-x 2 student student 4096 nov 20 22:33 file (1) 
--rw-rw-r-- 1 student student ​   0 nov 20 22:32 fisier1 
--rw-rw-r-- 1 student student ​   0 nov 20 22:32 fisier 2 
--rw-rw-r-- 1 student student ​   0 nov 20 22:33 fisier 3 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ cp fisier1 fisier\ 2 ../​../​../​programare/​ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys/​Program Files and Accessories$ cd .. 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys$ cp -r . /​home/​student/​ 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso/​filesys$ cd .. 
-student@uso:​~/​uso-repository/​lab02/​anul_1/​uso$ mv to_move/ /tmp 
-</​code></​solution>​ 
- 
-==== 6. Relative vs. chemins absolus (1p) ==== 
-Accédez au répertoire ''/​home/​student/​uso-repository/​lab02/​year_1''​. Profitez au maximum de la touche "​TAB"​ pour vous rendre ici. 
- 
-<code bash> 
-student@uso:​~$ cd /​home/​st<​TAB>/​uso<​TAB>/​lab02/​a<​TAB>​_1 
-</​code>​ 
- 
- 
-Utilisez la commande '​tree'​ pour examiner la structure du répertoire et les fichiers du répertoire actuel. Ensuite, allez dans le répertoire '​programming/​themes'​ en utilisant un chemin relatif: 
-<code bash> 
-student@uso:​~$ cd programare/​teme 
-</​code>​ 
-Vérifiez que vous vous trouvez dans le répertoire souhaité à l’aide de la commande ''​pwd ''​. 
- 
-Sans changer le répertoire actuel, donc sans utiliser la commande ''​cd '',​ vous créez un fichier nommé ''​TODO ''​dans les dossiers '​uso'​ '​ou'​ '​programmation'​ 'du répertoire'​ '​year_1'​ '. Utilisez des chemins relatifs. Par exemple, pour le répertoire de programmation,​ nous pouvons faire ce qui suit: 
-<code bash> 
-student@uso:​ $ touch ../TODO 
-</​code>​ 
-Faites la même chose pour le répertoire uso. 
- 
-Allez maintenant dans le répertoire '​uso'​ en utilisant un chemin absolu (doit commencer par ''/''​ou ''​~ ''​). Éditez le fichier ''​TODO ''​créé précédemment à l'aide de l'​éditeur ''​vim ''​pour qu'il contienne enfin le texte %% 'Je vais obtenir la 10e année à l'​USO'​ %%. 
- 
-Vérifiez que le fichier contient le texte souhaité à l'aide de la commande ''​cat ''​qui affiche le contenu du fichier à l'​écran. 
- 
-Copiez le fichier ''​TODO ''​du répertoire '​uso'​ dans celui du répertoire ''​programmation ''​. Essayez d'​utiliser aussi peu de clés et que des manières relatives. 
- 
-===== 7. Compiler un fichier source C (2p) ===== 
-Pour résoudre la prochaine série d'​exercices,​ allez dans le répertoire ''/​home/​student/​sde/​tp01/​simple-gcc''​. Pour cela 
-nous utilisons la commande suivante: ''​cd ~/​sde/​tp01/​simple-gcc''​. Dans le répertoire ''​simple-gcc '',​ recherchez le fichier source ''​simple_hello.c ''​. Compilez-le avec ''​gcc''​ dans un fichier exécutable appelé ''​hello''​. Pour cela, nous utilisons la commande suivante: 
-<code bash> 
-student@sde $ gcc simple_hello.c -o hello 
-</​code>​ 
- 
-Exécutez l'​exécutable fraîchement exécuté. 
-<code bash> 
-student@sde$ ./hello 
-Hello, World 
-</​code>​ 
- 
-Répétez le processus ci-dessus, mais cette fois, vous obtenez un exécutable avec le nom ''​saluer ''​. Maintenant, nous le courons et nous remarquons que nous obtenons exactement la même chose que ci-dessus. Les deux fichiers semblent identiques, mais pour nous assurer que nous utilisons la commande ''​cmp ''​. 
- 
-<​solution -hidden> 
-<code bash> 
-student@sde:​~$ gcc simple_hello.c -o salut 
-student@sde:​~$ ./salut 
-Hello, World 
-student@midgard:​~$ cmp salut hello 
-</​code>​ 
- </​solution>​ 
- 
-<note tip> 
-Utilisez les connaissances du laboratoire précédent et consultez la page de manuel de la commande ''​cmp ''​à l'aide de la commande: 
-<code bash> man cmp </​code>​ 
- 
-Si rien ne s'​affiche après avoir exécuté la commande ''​cmp ''​avec les paramètres appropriés,​ cela signifie que les deux fichiers sont identiques. 
-</​note>​ 
- 
-Nous notons que les deux fichiers sont vraiment identiques, du fait que le processus de compilation est déterministe (un morceau de code source C sera toujours traduit exactement par les mêmes instructions en langage assembleur, puis en langage assembleur). code machine - si le même degré d'​optimisation est maintenu). 
- 
-===== 8. BONUS Détecter et corriger les avertissements (2p) ===== 
-Dans le même répertoire que ci-dessus, ''/​home/​student/​sde/​tp01/​simple-gcc '',​ nous trouvons le fichier '​warnings.c'​. Compilez-le en utilisant la commande suivante: 
- 
-<code bash> 
-student@sde $ gcc warnings.c -o warnings 
-student@sde $ ./warnings 
-a + b = 5 
-</​code>​ 
- 
-Nous remarquons que le fichier a été compilé et exécuté avec succès. Répétez la commande ci-dessus, mais utilisez l'​indicateur "​-Wall"​ pour cette commande "​gcc"​ comme ci-dessous: 
- 
-<code bash> 
-student@sde$ gcc -Wall warnings.c -o warnings 
-warnings.c: In function ‘main’: 
-warnings.c:​8:​ warning: unused variable ‘c’ 
-</​code>​ 
- 
-Nous voyons cependant qu'un problème avec le fichier '​warnings.c'​ a été identifié cette fois, à savoir que la variable ''​c ''​a été déclarée, initialisée mais non utilisée. Cela n’affecte pas le comportement de notre programme, mais en général il est bon de les éviter autant que possible. 
- 
-Inspectez le fichier source '​warnings.c'​ et corrigez l'​avertissement. Exécutez la commande ''​gcc -Wall warnings.c -o warnings ''​jusqu'​à ce que vous receviez les avertissements à compiler. 
- 
-<​solution -hidden> 
-<code C warnings.c>​ 
-#include <​stdlib.h>​ 
-#include <​stdio.h>​ 
- 
-int main(void) 
-{ 
- int a = 2; 
- int b = 3; 
- 
- printf("​a + b = %d\n", a + b); 
- 
- return 0; 
-} 
-</​code>​ 
-<code bash> 
-student@midgard$ gcc -Wall warnings.c -o warnings 
-student@midgard$ ./warnings 
-a + b = 5 
-</​code>​ 
- 
-</​solution>​ 
- 
  
sde/laboratoare/01.1582108871.txt.gz · Last modified: 2020/02/19 12:41 by alexandru.radovici
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