LINUX : Shell et commandes GNU

Introduction

Durée

1 heures 50

Mots-clés

shell, bash, invite, console, redirections, commandes, vi, processus, filtres, recherches

Objectif

À l’issue de ce chapitre, vous serez en mesure de communiquer avec le système par l’intermédiaire du shell (mode console).

Les exercices abordent :

  • la gestion des fichiers ;

  • l’éditeur vi ;

  • l’utilisation des utilitaires et des filtres de recherche ;

  • la gestion des processus ;

  • un rapide aperçu des commandes SQL.

Matériel à prévoir

Hormis les paquetages nécessaires pour l’exercice sur le SQL, une installation comme décrite dans le premier chapitre doit comporter l’ensemble des utilitaires utilisés.

 

 

 

Énoncé 3.1 Gestion et recherche des fichiers

Durée estimative : 20 minutes

1.

Si ce n’est pas déjà le cas, se connecter sur une console texte avec un utilisateur non root.

2.

Se positionner, si nécessaire, dans le répertoire personnel de l’utilisateur.

3.

Comment peut-on vérifier qu’on se trouve bien dans le répertoire de l’utilisateur ?

4.

Lister les fichiers présents dans /usr/bin commençant par un « c » et sauvegarder le résultat dans le fichier c.liste. Quel est le chemin absolu du fichier c.liste ?

5.

Afficher seulement les fichiers de c.liste contenant « char » dans leur nom. Comment peut-on obtenir ce résultat sans créer le fichier c.liste ?

6.

Quel est le type du fichier /usr/bin/crontab ?

7.

Créer, en un seule commande, le répertoire Documents/perso/temp.

8.

Copier les fichiers présents dans /usr/bin commençant par un « c » dans le répertoire Documents/perso/temp.

Combien le répertoire Documents/perso/temp contient-il de fichiers ?

9.

Déplacer le fichier Documents/perso/temp/crontab dans le répertoire personnel de l’utilisateur en le renommant moncrontab. Combien le répertoire Documents/perso/temp contient-il de fichiers maintenant ?

10.

Supprimer le fichier moncrontab et le répertoire Documents/perso.

11.

Dans quel répertoire se trouve la commande passwd ?

12.

Dans quel répertoire se trouve le fichier boot.log ?

13.

Avez-vous utilisé la même commande pour trouver les deux fichiers ?

Indices pour l’énoncé 3.1

4.

Utiliser la redirection de la sortie de la commande pour générer le fichier résultat.

5.

Utiliser le pipe pour enchaîner les commandes.

6.

Utiliser la commande file.

8.

Utiliser la commande wc pour compter le nombre de fichiers.

11.

Utiliser l’outil de recherche des commandes.

 

 

 

Énoncé 3.2 L’éditeur vi

Durée estimative : 20 minutes

1.

Si ce n’est pas déjà le cas, se connecter sur une console texte avec un utilisateur non root, et se positionner, si nécessaire, dans le répertoire personnel de l’utilisateur.

2.

Lancer vi pour éditer le fichier /etc/aliases et sauvegarder une copie dans le répertoire de l’utilisateur sans quitter vi.

3.

Ajouter sous la première ligne le commentaire # copie locale et sauvegarder le fichier.

4.

Quelles sont les différentes méthodes pour se rendre à la ligne webmaster : root ?

5.

Quelles sont les différentes méthodes pour remplacer, sur cette ligne, root par webmestre ?

6.

Comment peut-on déplacer la ligne postmaster : root en fin de fichier ?

7.

Comment peut-on annuler la dernière action ?

Comment peut-on sortir de vi sans enregistrer les modifications ?

8.

Comment remplacer root par administrateur dans l’ensemble du texte ?

Indices pour l’énoncé 3.2

2.

On peut utiliser ~ pour être sûr de sauvegarder notre copie dans le répertoire home de l’utilisateur, même si ce n’est pas forcément nécessaire puisque l’on doit se trouver dans le répertoire.

3.

Pour se déplacer dans vi, on utilise les touches [h], [j], [k] et [l].

Pour passer en mode saisie, on peut utiliser [i] ou [o], en fonction de la position du curseur.

La commande de sauvegarde est w.

4.

Penser à utiliser la fonction de recherche.

5.

On utilisera les commandes de remplacement cw ou c$.

6.

Utiliser les touches de couper/coller [d] et [p] ainsi que la sélection visuelle.

7.

En anglais, la commande se nomme undo

8.

Utiliser la commande de substitution %s.

 

 

 

Énoncé 3.3 Les processus

Durée estimative : 30 minutes

1.

Lancer la commande sleep 9999 en arrière-plan.

2.

Quels sont le PID et le numéro de travail (job) du processus sleep précédent ?

3.

Suspendre le processus sleep précédent et vérifier son état.

4.

Relancer maintenant le processus sleep et vérifier son état.

5.

Tuer le processus sleep.

6.

Créer les deux scripts suivants et les rendre exécutables :

Le script /usr/local/bin/consomme.pl :

#! 
/usr/bin/perl 
while( 1 ) 
{ 
  $a=1; 
}

Le script Perl /usr/local/bin/grosseboucle.pl :

#! 
/usr/bin/perl 
$c=0; 
while( $c<10000000 ) 
{ 
  $c++; 
} 

7.

Lancer le script consomme.pl en arrière-plan.

8.

Lancer le script grosseboucle.pl une fois avec une valeur de gentillesse (nice) égale à 10, une fois avec la valeur de gentillesse égale à -10. Lequel est le plus rapide ?

9.

Tuer le processus consomme.pl à l’aide de la commande top.

Indices pour l’énoncé 3.3

3.

Envoyer le signal SIGSTOP au processus avec la commande kill.

La page de manuel man 7 signal détaille les différents signaux disponibles.

4.

Envoyer le signal SIGCONT au processus. Il faut pour cela utiliser son numéro de travail (job).

5.

Utiliser la commande kill.

8.

Utiliser la commande nice pour définir la valeur de gentillesse et la commande timepour connaître les temps d’exécution.

 

 

 

Énoncé 3.4 Plus loin avec le bash

Durée estimative : 10 minutes

1.

Afficher les alias disponibles

2.

Créer un alias nommé ll qui exécutera la commande ls avec l’option -l.

S’il existe déjà (sur Fedora, notamment), supprimez-le puis recréez-le.

3.

Comment peut-on rendre cet alias persistant ?

4.

Comment peut-on enchaîner plusieurs commandes ?

5.

Comment peut-on exécuter une commande si l’exécution de la précédente a réussi ?

Comment peut-on exécuter une commande si la précédente a échoué ?

Mettre ces deux fonctionnements en évidence.

Indices pour l’énoncé 3.4

2.

La commande unalias permet de supprimer un alias existant.

3.

Penser au fichier .bashrc.

 

 

 

Énoncé 3.5 SQL

Durée estimative : 30 minutes

1.

Passer en root et installer le paquet mysql-server.

2.

Se connecter au serveur MySQL et lister les bases de données existantes.

Lister les tables contenues dans la base de données mysql.

3.

Créer une base de données linux puis créez une table distribution contenant les champs suivants : idnomversionannéeLTS.

Le fichier SQL contenant les données de la base de données utilisée dans cet exercice est disponible en téléchargement depuis la page Informations générales.

4.

Insérer dans la table distribution les enregistrements suivants :

Nom

Version

Année

LTS

Debian

8

2015

1

Fedora

25

2016

0

Fedora

24

2016

0

Ubuntu

16.04

2016

1

Ubuntu

16.10

2016

0

Centos

7

2014

1

Afficher tous les enregistrements.

5.

Écrire une requête listant les distributions sorties après 2015 et ayant un support longue durée (LTS=1).

6.

Modifier la version 24 de Fedora en 23 (sortie en 2015).

Indices pour l’énoncé 3.5

2.

Pour se connecter à un serveur MySQL, il faut utiliser la commande mysql (avec l’option -p) si un mot de passe est configuré.

Voici un petit rappel des commandes à utiliser :

show databases;

Affiche la liste des bases de données existantes.

use nom_BDD;

Utilise la base de données nom_BDD.

create database nom_BDD;

Crée la base de données nom_BDD.

show tables;

Liste les tables existantes dans la base de données en cours d’utilisation.

3.

Pour créer la table, on utilisera la commande suivante :

CREATE TABLE distribution ( 
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    nom VARCHAR(40) NOT NULL, 
    version CHAR(5), 
    année YEAR NOT NULL, 
    LTS BOOLEAN, 
    commentaires TEXT, 
    PRIMARY KEY (id) 
)

4.

Utiliser la commande insert into pour ajouter des enregistrements.

Le champ id n’est pas à renseigner car il est auto-incrémenté.

5.

Utiliser la commande select et la clause where pour sélectionner des enregistrements selon certains critères.

6.

Utiliser la commande update pour modifier des enregistrements.