TP #1 : Premiers Pas avec Linux
Objectifs
L'objectif de ce TP est de découvrir et d'utiliser les commandes de base d'un système Unix / Linux. La maîtrise des concepts et des commandes est essentielle pour la suite du parcours ingénieur.

Principes

Principe de base
Sous linux, tout est fichier, organisé suivant une unique arborescence (dont la racine est nommée / et dont l'administrateur est root).

Différentes catégories de fichiers

Les différentes catégories de fichiers sont:

  • Les fichiers normaux:
    • texte : courrier, sources des programmes, scripts, configuration.
    • exécutables : programmes en code binaire
  • Les fichiers répertoires (on parle de répertoire): ce sont des fichiers conteneurs qui contiennent des références à d’autres fichiers véritable charpente de l’arborescence, ils permettent d’organiser les fichiers par catégories

  • Les fichiers spéciaux: situés dans /dev, ce sont les points d’accès préparés par le système aux périphériques. Le montage va réaliser une correspondance de ces fichiers spéciaux vers leur répertoire.

  • Les fichiers liens symboliques: Ce sont des fichiers qui ne contiennent qu’une référence (un pointeur) à un autre fichier. Cela permet d’utiliser un même fichier sous plusieurs noms sans avoir à le dupliquer sur le disque.

Si vous avez un doute, vous pouvez utiliser la commande file qui vous donne des informations sur n’importe quel élément du systèmes de fichier. Il suffit de taper file suivi des éléments dont vous souhaitez les informations.

~ > file test.c Bureau tp5_gd.tgz a.out
test.c:      C source, ASCII text
Bureau:      directory
tp5_gdb.tgz: gzip compressed data, last modified: Sun Mar 10 20:11:18 2019, from Unix, original size 21504
a.out:       ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, 
            interpreter /lib64/ld-linux-x86-.so1.2, for GNU/Linux 1.1.0, 
            BuildID[sha1]=5c6a98b6e10bc1b991a57cb5374d4bf671d0ff8d, not stripped

Application

La commande ls permet de voir une partie de l’arborescence. Par exemple sur mon compte personnel, la commande ls -l (-l donne des détails sur le contenu de l’arborescence) donne le résultat suivant.

drwx------ 2 jdequidt imaEns  4096 déc.   8  2011 Desktop
drwxr-x--- 2 jdequidt imaEns  4096 sept. 28  2010 Documents
drwxr-x--- 2 jdequidt imaEns  4096 déc.  18  2018 Downloads
lrwxrwxrwx 1 jdequidt imaEns    29 sept.  9 14:09 mixed.csv -> ima2a/mixed_all_unordered.csv
drwxr-x--- 2 jdequidt imaEns  4096 sept. 28  2010 Music
drwxr-x--- 2 jdequidt imaEns  4096 sept. 28  2010 Pictures
-rwxr-xr-x 1 jdequidt imaEns 33024 sept.  9 14:05 prog1
drwxr-x--x 2 jdequidt imaEns  4096 sept.  9 14:08 Public
drwxr-x--x 2 jdequidt imaEns  4096 juin   6 09:56 public_html
-rw-r--r-- 1 jdequidt imaEns   949 sept.  9 14:05 ReadMe.md
drwxr-xr-x 6 jdequidt imaEns  4096 août  27 09:51 tmp
drwxr-x--- 2 jdequidt imaEns  4096 sept. 28  2010 Videos

À partir du lien suivant https://www.garron.me/en/go2linux/ls-file-permissions.html, identifier les:

  • répertoires
  • les fichiers texte
  • le fichier exécutable
  • le lien symbolique et vers quel fichier réel il pointe
  • la taille en octets du fichier ReadMe.md
  • le répertoire qui contient le plus de sous-répertoires

Références

Pour avoir une vue très synthétique des principales commandes, je vous conseille de consulter les liens suivants: https://dev.to/awwsmm/101-bash-commands-and-tips-for-beginners-to-experts-30je (très bien structuré, en anglais) ou https://bookmarks.ecyseo.net/?EAWvDw

Préambule

  1. Une fois votre session ouverte, lancer un terminal (Terminal, Konsole…)
  2. Lancer un programme (par exemple xeyes) en mode interactif xeyes & et en mode non-interactif xeyes. Quelle est la différence ? Taper la commande CTRL+C pour tuer le processus xeyes.
  1. En lançant le terminal, dans quel répertoire vous trouvez vous ?
  2. Taper (successivement) les commandes suivantes:
   cd
   pwd
   cd /tmp
   pwd
   cd ~
   pwd
   cd /tmp
   cd /usr/local
   pwd
   cd -
   pwd
   
  1. Regarder le résultat. A quel répertoire le ~ (tilde) correspond-il ? On peut toujours aller dans son répertoire principal / répertoire personnel, son home (en jargon système) en faisant simplement cd ou cd ~. De même cd - permet d’accéder au répertoire où vous étiez précédemment.
  2. Créer le répertoire ima3 dans votre répertoire principal :
   mkdir ~/ima3
   cd ~/ima3
   

ou de façon équivalente avec :

   cd
   mkdir ima3
   cd ima3
  
  1. Afficher le contenu de ce répertoire avec la commande ls
  2. Créer un fichier vide (dans le répertoire ima3) nommé empty_file.txt avec la commande touch empty_file.txt
  3. Afficher le contenu de votre répertoire ima3
  4. ls peut également être utilisé de cette façon:
   cd /tmp
   ls ~/ima3
   
  1. Taper cd pour revenir dans votre home
  2. Quel est le contenu de votre home ?
  3. Créer un répertoire tmp. Quel est maintenant le contenu de votre home ?
  4. Effacer le répertoire tmp avec la commande rm.
  5. Afficher le contenu de votre home
  6. Essayer d’effacer de nouveau tmp, que se passe-t’il ?
  7. Soit la séquence de commandes suivantes:
   cd /tmp
   ls
   ls -a
   ls -l
   ls -l -a
   ls -la #(équivalente à la précédente)
   
  1. Quelle est la différence d’affichage ? À quoi servent les options -l et -a
  2. Supprimer le répertoire ima3 avec son contenu via:
   cd ~
   rm -rf ima3
   

Consulter l’aide de rm (via man rm) et dire pourquoi cette commande est dangereuse.

Création d’une hiérarchie

  1. À partir des commandes vues dans l’exercice précédent, créer la hiérarchie de répertoires suivante:
   \-- Algo/
   |   |-- TP1/
   |
   |-- algo/
   |   |-- TP1/
   |   |-- TP2/
   |
   |-- tmp/
   
  1. Vérifier que la hiérarchie créée correspond bien à la consigne via la commande tree (si elle est installée) soit via la commande suivante ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'. L’affichage obtenu doit être
      .
      |-algo
      |---TP1
      |---TP2
      |-Algo
      |---TP1
      |-tmp
   
  1. Se placer dans ~/algo/TP1 et y créer un fichier vide tp1.c
  2. Supprimer tp1.c et toute la hiérarchie

Affichage de texte

  1. Placer vous dans le répertoire /etc/dictionaries-common
  2. Taper ls -l puis cat words. Que fait la commande cat ? Permet-elle de visualiser de gros fichiers ?
  3. Taper la commande less words puis
    • appuyer sur la touche espace
    • appuyer sur la touche espace
    • appuyer sur la touche espace
    • appuyer sur la touche b
    • appuyer sur la touche b
    • appuyer sur la flèche du haut
    • taper /foo et appuyer sur return
    • tape /z et appuyer sur return
    • appuyer sur la flèche du haut
    • appuyer sur la touche h pour consulter l’aide
    • appuyer sur q pour sortir de l’aide
    • appuyer sur q pour sortir de less
  4. Que fait less quand on tape /quelquechose ?
  5. Comparer less et more

Recherche dans un texte

  1. En étant toujours dans le répertoire /etc/dictionaries-common
  2. Que fait la commande wc <nom_fichier> ? Qu’apportent les options -l et -c
  3. Que fait la commande grep avec par exemple les commandes grep house words ou grep maison words

Éditer / modifier un fichier

  1. Dans votre répertoire personnel, créer un fichier texte via l’éditeur vim via la commande vim test.txt
  2. Appuyer sur la touche i pour passer en mode insertion dans vim, vous pouvez alors taper du texte (par exemple vos nom et prénom)
  3. Appuyer ensuite sur ESC pour sortir du mode insertion.
  4. Taper ensuite :w pour sauvegarder le fichier puis :q pour quitter vim (il est possible de combiner les 2 commandes en une seule en tapant :wq)
  5. Vérifier avec less que le fichier contient bien ce que vous avez écrit
  6. Quelle taille a ce fichier ?

Chercher des fichiers dans un répertoire

  1. Consulter l’aide de la commande de recherche avec man find
  2. Taper ensuite:
   find /etc
   find /etc -name "*.d"
   find /etc -name "*.cfg" -ls
   ls -R /etc
   
  1. Quelle est la signification du caractère * ici ?
  2. À quoi sert l’option -name ?
  3. Quelle est la différence entre ls -R et find
  4. Essayer les deux commandes find /etc -exec wc '{}' + et find /etc -name "*.cfg" -exec wc '{}' +. Que fait l’option -exec ?

Entrée standard

On rappelle que l’entrée standard correspond à ce qui est tapé au clavier

  1. Que fait la commande sort ? Regarder plus particulièrement ce qui se passe quand sort n’a pas de fichier en paramètre.
  2. Essayer:
   sort
   a
   d
   c
   

puis taper CTRL+D

  1. De même, essayer de trier les chiffres 2, 11, 1. Expliquer pourquoi 11 est considéré inférieur à 10? Utiliser l’option adéquate pour obtenir un tri numérique.

Sortie standard

  • Que fait la commande echo ?
  • Faites les manipulations suivantes (constater que le deuxième appel à echo écrase le contenu de fichier):
   echo test
   echo test > fichier
   cat fichier
   echo toto
   echo toto > fichier
   cat fichier
   
  • Avec >> on ajoute à la fin sans écraser le fichier
   echo test > fichier2
   cat fichier2
   echo toto >> fichier2
   cat fichier2
   
  • À l’aide de sort, générer un fichier.sorted qui contient les nombres 2, 1, 11 triés par ordre croissant. Le résultat est affiché dans le terminal ?
  • Taper les commandes suivantes et expliquer ce qui se passe:
   sort < fichier.sorted
   sort < fichier.sorted > fichier.sorted2
   cat fichier.sorted2
   
  • Pourquoi les fichiers fichier.sorted et fichier.sorted2 sont-ils différents ? On pourra utiliser la commande diff pour visualiser les différences.

Le pipe

Le pipe permet de connecter le résultat d’une commande à l’entrée d’une nouvelle commande

  1. Visualiser les lignes de fichier.sorted qui contiennent le caractère 1 (regarder la commande grep).
  2. Compter le nombre de lignes de ce fichier
  3. Comment faire pour compter le nombre de lignes qui contiennent 1 dans fichier.sorted ?
  4. Essayer grep 1 fichier.sorted | wc vérifier que cette commande répond bien à la question précédente et qu’elle ne génère pas de fichiers temporaires

Le fichier .bashrc

Ce fichier contient des commandes qui sont exécutées à chaque fois que vous ouvrez un terminal. Ce fichier contient en général des raccourcis ou des options pour le terminal

  1. Avec un éditeur de texte1, créer / ouvrir son fichier .bashrc et y écrire alias ll='ls -l'
  2. Quitter l’éditeur et taper ll. Que se passe-t’il ? Ouvrir un nouveau terminal (sans fermer le premier) et taper ll. Que se passe-t’il ? Dans le premier terminal, taper source .bashrc et vérifier que la commande ll fonctionne désormais.
  3. Recharger .bashrc dans le terminal
  4. Vous pouvez enrichir votre fichier .bashrc pour personnaliser votre terminal avec par exemple:

Si vous souhaitez avoir plus d’informations sur les possibilités de personnalisation, vous pouvez consulter le lien suivant https://www.howtogeek.com/307701/how-to-customize-and-colorize-your-bash-prompt/

Commandes très utiles pour ces 3 années

Vous trouverez ci-après des commandes qui seront très utiles pour cette année (et utilisés très souvent en contrôle TP par exemple):

  1. Consulter / copier des fichiers publics d’un autre compte. Si vous connaissez le login d’une autre personne de Polytech Lille, vous pouvez consulter les fichiers autorisés de ce compte via:
   ls ~login_du_compte
   
  1. Se connecter aux machines / serveurs de l’école depuis l’extérieur:
   ssh votre_login@portier.polytech-lille.fr -p2222
   

à Polytech Lille, vous pouvez vous connecter sur une autre machine avec la commande suivante

   ssh votre_login@nom_de_machine
   

comme par exemple:

   ssh votre_login@gayant01
   

Retour aux permissions de fichiers

  1. En vous basant sur la page https://www.linuxtricks.fr/wiki/droits-sous-linux-utilisateurs-groupes-permissions, changer les droits en support / écriture / exécution sur vos fichiers.
  2. Créer un fichier texte dans votre répertoire Public et faites en sorte qu’il soit accessible et lisible (mais pas modifiable) par tous les ima3.

Premier programme C

  1. Écrire le programme C suivant
   #include <stdio.h>

int main ()
{
    printf ("Hello World !\n");
    return 0;
}

   
  1. Compiler votre programme avec la commande clang monfichier.c ou gcc monfichier.c
  2. Exécuter votre programme avec ./a.out
  1. kate ou gedit par exemple… nous verrons prochainement vim