This is an old revision of the document!


TP 1 - 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. Compiler un programme C sous Linux

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

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

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 Install du sous-système Windows pour Linux (WSL) sous Windows 10.

Installer Ubuntu

Pour installer Ubuntu, suivez les étapes du Install Ubuntu.

Avant d'installer Ubuntu sur votre ordinateur , nous vous recommandons de sauvegarder vos données .

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

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 gitimmersion ou 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 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: ~ $ clone git https://github.com/upb-fils/sde

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

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

<Note importante> 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>

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

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-gcc
└── 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

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 :

 ls /etc/*.conf 

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”)

cat /etc/*release*

6. Compiler les programmes

Pour compiler des programmes en C, vous avez besoin de paquets contenant un compilateur, des bibliothèques et des pages de manuel. Sur certains systèmes, ces packages peuvent être manquants:

  • build-essential
  • manpages-dev

S'ils ne sont pas installés par défaut sur votre système, vous pouvez utiliser

student@sde:~$ sudo apt-get install build-essential manpages-dev

Compiler un seul fichier source

Dans ce qui suit, nous considérerons le verbe compiler pour obtenir un ou plusieurs fichiers source en un fichier exécutable.

Nous allons dans le répertoire /home/student/sde/tp01/simple-gcc où nous trouvons le fichier simple_hello.c .

student@sde$ pwd
/home/student/
student@sde$ cd sde/tp01/simple-gcc
student@sde$ ls
Makefile  hello.c  simple_hello.c  utils.h
errors.c  help.c   utils.c         warnings.c
student@sde$ gcc simple_hello.c                                 
student@sde$ ls
Makefile  errors.c  help.c          utils.c  warnings.c
a.out     hello.c   simple_hello.c  utils.h
student@sde$ ./a.out
Hello world!

Auparavant, j'avais utilisé la commande gcc à laquelle je lui avais donné un seul paramètre d'entrée. Il a généré un binaire nommé “a.out” . Ci-dessous, nous pouvons voir comment nous obtenons un nom custom pour le binaire résultant de la compilation du fichier simple_hello.c .

student@sde$ ls
Makefile  errors.c  help.c          utils.c  warnings.c
a.out     hello.c   simple_hello.c  utils.h
student@sde$ gcc simple_hello.c -o hello                          
student@sde$ ls                      
Makefile  errors.c  hello.c  simple_hello.c  utils.h
a.out     hello     help.c   utils.c         warnings.c
student@sde$ ./hello
Hello world!
student@midgard$ pwd
/home/student/sde/tp01/simple-gcc/

Notez que nous utilisions auparavant un chemin relatif vers le répertoire en cours pour exécuter le fichier 'hello' avec ./hello . Nous pourrions aussi utiliser un chemin absolu: /home/student/sde/tp01/simple-gcc/hello pour l'exécution.

. (point, point ) signifie répertoire courant .

Pour voir quel type de fichier binaire/exécutable est 'bonjour', nous pouvons utiliser la commande fichier :

student@sde $ file ./hello
bonjour: ELF exécutable LSB 64 bits, x86-64, version 1 (SYSV), lié dynamiquement (pour les bibliothèques partagées), pour GNU/Linux 2.6.32, BuildID [sha1] = 0x92a8cd0efe5b5dd5587b5965d8bc6fa27fac32af, non supprimé

La commande gcc simple_hello.c a été utilisée pour compiler le fichier source simple_hello.c . Le résultat était le fichier exécutable 'a.out' '(nom par défaut utilisé par' 'gcc' '). Si vous voulez obtenir un exécutable avec un autre nom, vous pouvez utiliser l'option -o .

De même, “g ++” est utilisé pour compiler un programme source C ++.

Autres exemples de commandes utilisant le compilateur gcc

Pour compiler des programmes C et C ++, nous utilisons le compilateur “gcc” ou “g ++” en ligne de commande. Un appel typique consiste à compiler un programme à partir d'un seul fichier source, dans notre cas simple_hello.c .

Nous partons du programme simple du fichier simple_hello.c qui se trouve dans le répertoire /uso/lab03/simple-gcc qui affiche une chaîne de caractères sur la sortie standard:

simple_hello.c
#include <stdio.h>
 
int main(void) 
{
      printf("Hello world!\n");
      return 0;
}

Le format général d’une commande de compilation avec gcc :

gcc fisiere.c -o nume_executabil COMPILING_FLAGS LINK_BIBLIOTECI
  • COMPILING_FLAGS sont des options de gcc (comme -g , -w , -Wall )
  • LINK_BIBLIOTECI contient des options comme -lm ou -L .

Après -o , le nom du fichier de sortie doit être trouvé. Il écrase les fichiers qu'il reçoit sous forme d'argument.

La commande peut être aussi bien structurée que:

gcc COMPILING_FLAGS -o nume_executabil fisiere.c LINK_BIBLIOTECI

Après -o , nous ne mettons pas de fichiers sources ni d'autres fichiers. Si nous faisons cela, les fichiers seront écrasés et nous perdrons leur contenu.

Exemples spécifiques:

Allez à ~/sde/tp01/simple-gcc

  1. Compilez un programme simple:
     gcc simple_hello.c -o simple_hello 
  2. Compilez un programme simple et affichez tous les avertissements
     gcc -Wall simple_hello.c -o simple_hello 
  3. Compiler un programme avec tous les avertissements devant être liés au
     gcc -Wall simple_hello.c -o math_hello -lm 
  4. Compiler un programme, affichant tous les avertissements de plusieurs fichiers source
     gcc -Wall hello.c utils.c help.c -o hello 

Les pages d’aide de GCC (man gcc , info gcc ) fournissent une liste de toutes les options possibles de GCC.

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

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 https://github.com/upb-fils/sde.org 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/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 Commandes_linux avec quel ordre nous pouvons renommer des fichiers ou des dossiers.

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 .

<type de note> 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

</note>

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

student@sde:~$ ls -l 

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

student@sde:~$ man ls 

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:

 student@sde:~$ du sde-repository/tp01/anul_1/programare/teme 

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

 student@sde: ~ $ man du 

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.

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

rm -f /home/student/uso-repository/lab02/anul_1/uso/crap.txt

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?

rm -f/home/student/uso-repository/lab02/year_1/uso/to_delete

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

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

<type de note> Pour supprimer un répertoire vide, nous pouvons utiliser l'une des commandes suivantes:

student@uso: $ cd uso-repository
student@uso: $ rm -rf lab02/year_1/uso/empty_dir
student@uso: $ rmdir lab02/year_1/uso/empty_dir

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>

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:

mkdir Program Files and Accessories 

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:

student@uso:$ mkdir "Program Files and Accessories"
student@uso:$ mkdir Program\ Files\ and\ Accessories

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

student@uso:$ 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.

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

student@uso:$ pwd
/home/student/uso-repository/lab02/anul_1/uso/filesys
student@uso:$ cp . /home/student

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 .

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.

student@uso:~$ cd /home/st<TAB>/uso<TAB>/lab02/a<TAB>_1

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:

student@uso:~$ cd programare/teme

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:

student@uso: $ touch ../TODO

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:

student@sde $ gcc simple_hello.c -o hello

Exécutez l'exécutable fraîchement exécuté.

student@sde$ ./hello
Hello, World

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 .

Utilisez les connaissances du laboratoire précédent et consultez la page de manuel de la commande cmp à l'aide de la commande:

 man cmp 

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.

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:

student@sde $ gcc warnings.c -o warnings
student@sde $ ./warnings
a + b = 5

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:

student@sde$ gcc -Wall warnings.c -o warnings
warnings.c: In function ‘main’:
warnings.c:8: warning: unused variable ‘c’

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.

sde/laboratoare/01.1551164058.txt.gz · Last modified: 2019/02/26 08:54 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