Shell
Groupe Genius répétitions
Par Mr Joël Yankam
1. Configuration d'un serveur DHCP
Exercice
Écrire un script pour installer et configurer un serveur DHCP sur un système Linux.
Exemple de script
1 #!/bin/bash
3 # Installer le serveur DHCP
4 sudo apt-get update
5 sudo apt-get install -y isc-dhcp-server
7 # Configurer le fichier de configuration DHCP
8 cat <<EOL | sudo tee /etc/dhcp/dhcpd.conf
9 subnet 192.168.1.0 netmask 255.255.255.0 {
10 range 192.168.1.10 192.168.1.50;
11 option routers 192.168.1.1;
12 option domain-name-servers 8.8.8.8, 8.8.4.4;
13 }
14 EOL
16 # Redémarrer le service DHCP
17 sudo systemctl restart isc-dhcp-server
2. Configuration d'un serveur DNS
Exercice
Écrire un script pour installer et configurer un serveur DNS avec BIND.
Exemple de script
1 #!/bin/bash
3 # Installer BIND
4 sudo apt-get update
5 sudo apt-get install -y bind9
7 # Configurer le fichier de zone DNS
8 cat <<EOL | sudo tee /etc/bind/named.conf.local
9 zone "exemple.com" {
10 type master;
11 file "/etc/bind/zones/db.exemple.com";
12 };
13 EOL
15 # Créer le fichier de zone
16 sudo mkdir -p /etc/bind/zones
17 cat <<EOL | sudo tee /etc/bind/zones/db.exemple.com
18 \$TTL 604800
19 @ IN SOA ns.exemple.com. admin.exemple.com. (
20 2 ; Serial
21 604800 ; Refresh
22 86400 ; Retry
23 2419200 ; Expire
24 604800 ) ; Negative Cache TTL
25 ;
26 @ IN NS ns.exemple.com.
27 @ IN A 192.168.1.2
28 ns IN A 192.168.1.2
29 EOL
31 # Redémarrer BIND
32 sudo systemctl restart bind9
3. Configuration d'un serveur HTTP
Exercice
Écrire un script pour installer et configurer un serveur HTTP avec Apache.
Exemple de script
1 #!/bin/bash
3 # Installer Apache
4 sudo apt-get update
5 sudo apt-get install -y apache2
7 # Activer le module SSL
8 sudo a2enmod ssl
10 # Créer un certificat auto-signé
11 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-
selfsigned.crt
13 # Configurer Apache pour utiliser SSL
14 cat <<EOL | sudo tee /etc/apache2/sites-available/default-ssl.conf
15 <VirtualHost _default_:443>
16 ServerAdmin webmaster@localhost
17 DocumentRoot /var/www/html
18 SSLEngine on
19 SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
20 SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
21 </VirtualHost>
22 EOL
24 # Activer le site SSL et redémarrer Apache
25 sudo a2ensite default-ssl
26 sudo systemctl restart apache2
4. Configuration d'un serveur SSL/TLS
Exercice
Écrire un script pour générer des certificats SSL/TLS avec OpenSSL.
Exemple de script
1 #!/bin/bash
3 # Générer une clé privée
4 openssl genrsa -out myserver.key 2048
6 # Générer une demande de signature de certificat (CSR)
7 openssl req -new -key myserver.key -out myserver.csr
9 # Générer un certificat auto-signé
10 openssl x509 -req -days 365 -in myserver.csr -signkey myserver.key -out
myserver.crt
5. Configuration d'un serveur FTP
Exercice
Écrire un script pour installer et configurer un serveur FTP avec vsftpd.
Exemple de script
1 #!/bin/bash
3 # Installer vsftpd
4 sudo apt-get update
5 sudo apt-get install -y vsftpd
7 # Configurer vsftpd
8 cat <<EOL | sudo tee /etc/vsftpd.conf
9 listen=YES
10 anonymous_enable=NO
11 local_enable=YES
12 write_enable=YES
13 chroot_local_user=YES
14 EOL
16 # Redémarrer le service vsftpd
17 sudo systemctl restart vsftpd
Parcours de Fichier
Exercice 1 : Compter le nombre de lignes dans un fichier
Énoncé
Écrire un script qui prend en argument un fichier texte et affiche le nombre de lignes qu'il
contient.
Solution
1 #!/bin/bash
3 # Vérifier si un fichier est fourni en argument
4 if [ $# -eq 0 ]; then
5 echo "Veuillez fournir un nom de fichier."
6 exit 1
7 fi
9 # Vérifier si le fichier existe
10 if [ ! -f "$1" ]; then
11 echo "Le fichier $1 n'existe pas."
12 exit 1
13 fi
15 # Compter et afficher le nombre de lignes
16 line_count=$(wc -l < "$1")
17 echo "Le fichier $1 contient $line_count lignes."
Utilisation
Enregistrez le script sous le nom count_lines.sh , puis exécutez-le avec un fichier texte
en argument :
1 bash count_lines.sh mon_fichier.txt
Exercice 2 : Afficher le contenu d'un fichier
Énoncé
Écrire un script qui affiche le contenu d'un fichier ligne par ligne.
Solution
1 #!/bin/bash
3 # Vérifier si un fichier est fourni en argument
4 if [ $# -eq 0 ]; then
5 echo "Veuillez fournir un nom de fichier."
6 exit 1
7 fi
9 # Vérifier si le fichier existe
10 if [ ! -f "$1" ]; then
11 echo "Le fichier $1 n'existe pas."
12 exit 1
13 fi
15 # Afficher le contenu du fichier
16 while IFS= read -r line; do
17 echo "$line"
18 done < "$1"
Utilisation
Enregistrez le script sous le nom display_file.sh , puis exécutez-le avec un fichier texte
en argument :
1 bash display_file.sh mon_fichier.txt
Exercice 3 : Rechercher une chaîne dans un fichier
Énoncé
Écrire un script qui prend en argument un fichier et une chaîne, puis affiche toutes les lignes
contenant cette chaîne.
Solution
1 #!/bin/bash
3 # Vérifier si un fichier et une chaîne sont fournis
4 if [ $# -ne 2 ]; then
5 echo "Usage : $0 <fichier> <chaîne>"
6 exit 1
7 fi
9 # Vérifier si le fichier existe
10 if [ ! -f "$1" ]; then
11 echo "Le fichier $1 n'existe pas."
12 exit 1
13 fi
15 # Rechercher et afficher les lignes contenant la chaîne
16 grep "$2" "$1"
Utilisation
Enregistrez le script sous le nom search_in_file.sh , puis exécutez-le avec un fichier et
une chaîne en arguments :
1 bash search_in_file.sh mon_fichier.txt "ma_chaine"
Exercice 4 : Remplacer une chaîne dans un fichier
Énoncé
Écrire un script qui remplace toutes les occurrences d'une chaîne par une autre dans un
fichier.
Solution
1 #!/bin/bash
3 # Vérifier si un fichier et deux chaînes sont fournis
4 if [ $# -ne 3 ]; then
5 echo "Usage : $0 <fichier> <ancienne_chaine> <nouvelle_chaine>"
6 exit 1
7 fi
9 # Vérifier si le fichier existe
10 if [ ! -f "$1" ]; then
11 echo "Le fichier $1 n'existe pas."
12 exit 1
13 fi
15 # Remplacer l'ancienne chaîne par la nouvelle
16 sed -i "s/$2/$3/g" "$1"
17 echo "Les occurrences de '$2' ont été remplacées par '$3' dans $1."
Utilisation
Enregistrez le script sous le nom replace_in_file.sh , puis exécutez-le avec un fichier et
deux chaînes en arguments :
1 bash replace_in_file.sh mon_fichier.txt "ancienne_chaine" "nouvelle_chaine"
Exercice 5 : Extraire des colonnes d'un fichier CSV
Énoncé
Écrire un script qui extrait une colonne spécifique d'un fichier CSV.
Solution
1 #!/bin/bash
3 # Vérifier si un fichier et un numéro de colonne sont fournis
4 if [ $# -ne 2 ]; then
5 echo "Usage : $0 <fichier_csv> <numéro_colonne>"
6 exit 1
7 fi
9 # Vérifier si le fichier existe
10 if [ ! -f "$1" ]; then
11 echo "Le fichier $1 n'existe pas."
12 exit 1
13 fi
15 # Extraire la colonne spécifiée
16 cut -d',' -f"$2" "$1"
Utilisation
Enregistrez le script sous le nom extract_column.sh , puis exécutez-le avec un fichier
CSV et un numéro de colonne en arguments :
1 bash extract_column.sh mon_fichier.csv 2