TP 3 : Programmation Shell

Transcription

TP 3 : Programmation Shell
Département de Génie Informatique
Module :
L3 Informatique
17/04/2011
Niveau :
En pratique : Linux de base
Date :
TP 3 : Programmation Shell
Exo. 1 (Droits
d'accès)
Pour cet exercice, vous créerez un utilisateur banalisé
1.
Vous est-il possible de faire une copie du chier /etc/passwd ? Vous est-il possible de supprimer ou
de modier le chier /etc/passwd ? Répeter ces tentatives en tant qu'utilisateur root. Expliquer la
situation à l'aide de la commande ls -l.
2.
A l'aide de la commande id, vérier votre identité et le(s) groupe(s) au(x)quel(s) vous appartenez.
3.
Créer un petit chier texte (de contenu quelconque), qui soit lisible par tout le monde, mais non
4.
Créer un répertoire nommé "Secret", dont le contenu est visible uniquement par vous même. Les
modiable (même pas par vous).
chiers placés dans ce répertoire sont-ils lisibles par d'autres membres de votre groupe ?
5.
Créer un répertoire nommé "Connaisseurs" tel que les autres utilisateurs ne puissent pas lister son contenu mais puissent lire les chiers qui y sont placés. On obtiendra : ls Connaisseurs ls : Connaisseurs :
Permission denied cat Connaisseurs/toto <...le contenu du chier toto (s'il existe)...>
6.
Chercher dans le répertoire /usr/bin des exemples de commandes ayant la permission SUID. De quelle
genre de commande s'agit-il ?
Exo. 2 (Les
utilisateurs)
1.
Votre compte d'utilisateur est-il déni dans le chier /etc/passwd ? Pourquoi ? Il y a-t-il d'autres
2.
Quel est le répertoire de connexion de l'utilisateur root ?
3.
Quel est le shell de l'utilisateur root ?
4.
Quelle est la particularité de l'utilisateur nobody ? Et de l'utilisateur shutdown ?
5.
Quels sont les utilisateurs dénis dans /etc/passwd qui font partie du même groupe que l'administra-
alternatives ?
teur ?
Exo. 3 (Redirections,
méta-caractères)
Le répertoire /usr/include contient les chiers d'entête standards en langage C (stdlib.h, ...).
1.
Créer un répertoire nommé inc dans votre répertoire de connexion (HOME). En utilisant une seule
commande, y copier les chiers du répertoire /usr/include dont le nom commence par std.
2.
Acher la liste des chiers de /usr/include dont le nom commence par a, b ou c.
3.
Modier la commande de la question précédente pour qu'au lieu d'acher le résultat, celui-ci soit
placé dans un chier nommé "Abc.list" de votre répertoire de connexion.
4.
Acher le contenu de ce chier en utilisant la commande cat. Copier avec cat son contenu dans un
nouveau chier nommé "Copie".
5.
Toujours avec cat, créer un nouveau chier nommé "Double" formé par la mise bout à bout (concaténation) des chiers "Abc.list" et "Copie". Vérier que le nombre de lignes a bien doublé à l'aide de
la commande wc.
6.
Créer un chier nommé "Temp" contenant une ligne de texte.
7.
Avec cat, ajouter la ligne "The end" à la n du chier "Temp.
1
8.
En une seule ligne de commande, faire acher le nombre de chiers de /usr/include dont le nom
contient la lettre t.
nd
9.
10.
Acher la liste des chiers .h situés sous le répertoire /usr/include.
Acher la liste des chiers plus vieux que 3 jours situés sous votre répertoire de connexion.
head, tail, tubes
11.
Acher les 5 premières, puis les 5 dernières lignes du chier /etc/passwd.
12.
Acher la 7ième ligne de ce chier (et elle seule), en une seule ligne de commande.
tr, more, tubes
13.
Acher le chier /etc/passwd en remplaçant les caractères / par des X.
14.
Obtenir le résultat précédent page par page.
Exo. 4 (Contrôles
d'accès)
Un administrateur désire s'assurer chaque matin que tous les chiers placés sous $REPERTOIRE sont
lisibles par tout le monde, mais non modiables excepté par leur propriétaire.
1.
Quel doit être le mode de ces chiers et répertoires ?
2.
Écrire un script permettant d'acher la liste des chiers d'un répertoire et le type de chacun (utilisation de le et sort ) trié par type.
Flux d'E/S standards
Étudier la documentation de la commande tee.
3.
Écrire une commande qui ache "Bonjour" à l'écran et en même temps crée un chier nommé
"Salutation.txt" dont le contenu est le même message.
4.
Ecrire un script qui lit une ligne de caractères sur son entrée standard et l'écrit sur sa sortie, en
5.
Modiez votre script pour qu'il ache le nombre de caractères traités sur sa sortie d'erreur.
6.
Créer un chier texte quelconque. Écrire une seule commande shell qui recopie le contenu passé en
passant tous les caractères en majuscules.
majuscule de ce chier dans un nouveau chier nommé "Titre.txt" et ache à l'écran le nombre de
caractères traités.
grep, cut, uniq, sort et tubes
Étudier la documentation des commandes cut et uniq.
7.
Acher la liste des répertoires de connexion des utilisateurs déclarés dans le chier /etc/passwd.
8.
On rappelle qu'à chaque utilisateur est associé un interpréteur de commandes (shell) lancé lors de
son login. La commande correspondante est indiquée dans le 7ième champ du chier /etc/passwd.
Acher en une ligne de commande le nombre d'interpréteurs de commandes diérents mentionnés
dans /etc/passwd.
9.
On dispose d'un chier texte telephone.txt contenant un petit carnet d'adresses. Chaque ligne est de
la forme "nom prenom numerotelephone". Les champs sont séparés par des tabulations. Répondre
aux questions suivantes en utilisant à chaque fois une ligne de commande shell : o Acher le carnet
d'adresse trié par ordre alphabétique de noms. o Acher le nombre de personnes dans le répertoire.
o Acher toutes les lignes concernant les Dupond. o Acher toutes les lignes ne concernant pas
les Dupond. o Acher le numéro de téléphone (sans le nom) du premier Dupond apparaissant
dans le répertoire. o Acher le numéro de téléphone (sans le nom) du premier Dupond dans l'ordre
alphabétique (ordre basé sur les prénoms).
Exo. 5 (cron)
Mettre en place un script qui, toutes les 5 minutes, ajoute la date, l'heure et la liste des processus en
cours de fonctionnement dans un chier nommé "Processus.txt".
2
tar
Télécharger le chier Fichiers.tar. Il s'agit d'une archive au format tar non compressé contenant les
hardcopies de fenêtres Ubuntu-KDE. Cette archive n'inclut pas de répertoire de décompression.
1.
"détarer" cette archive dans un sous répertoire nommé "Fichiers" de votre HOME.
2.
"tarer" le répertoire "Fichiers" en une archive nommée "MonArchive.tar".
3.
"tarer" le répertoire "Fichiers" en une archive compressée nommée "MonArchiveCompressee.tar.gz".
4.
Quel est le rapport de tailles entre ces deux archives ?
5.
Calculer ce rapport de tailles pour une archive de chiers texte.
Exo. 6 (Informations
système)
Décrire l'environnement dans lequel vous évoluez :
1.
nom de la machine
2.
détail des disques
3.
programmes en fonctionnement o les votres o ceux des autres utilisateurs
4.
conguration réseau
5.
place utilisée dans mon répertoire
6.
processus les plus gourmands en fonctionnement
mount
On considère un partage Windows nommé toto sur le serveur leserver.info.univ-fcomte.fr accessible
à l'utilisateur toto du domaine w2k3. Le mot de passe associé à ce compte est "pw01toto10". On
souhaite monter ce partage en lecture/écriture depuis une machine fonctionnant sous linux équipé
d'un client samba, pour l'utilisateur linux titi du groupe linux titi de cette machine. Le point de
montage est /mnt/titi.
7.
Quelle est la commande permettant de réaliser une telle opération ?
8.
Exécutée par titi, cette commande est-elle susceptible de fonctionner sur votre poste ?
Exo. 7 (Informations
système)
Réseau
1.
Déterminer d'après le masque quel est le réseau utilisé en utilisant la notation binaire pour les trois
adresses suivantes. o adresse 125.24.6.2, masque par défaut o adresse 130.14.28.2, masque par défaut
o adresse 125.24.6.2 cette fois avec le masque 255.255.254.0
2.
Considérons les deux adresses IP : 138.12.3.8 et 138.12.7.25 1. Sans autre indication ces deux machines
sont-elles sur le même réseau ? 2. Le masque précisé est 255.255.255.0 : ces deux machines sont-elles
sur le même réseau ?
3.
A quelle condition ces deux machines communiquent elles dans le cas 1 et dans le cas 2 ?
4.
Quelle règle simple peut-on déduire pour connaître le réseau sans passer par la notation binaire pour
5.
Vous devez dénir les masques pour une administration réseau qui est structurée de la façon suivante :
un masque par défaut ?
Des serveurs sur lesquels se trouvent des bases de données ainsi que des postes banalisés sont répartis
à Paris, Lyon, Marseille et Toulouse (environ 150 serveurs et postes locaux dans chaque ville). Dans
chaque préfecture de département métropolitain est présente une antenne locale. Chaque antenne est
composée d'un parc entre 12 et 25 postes (un peu moins de 100 départements). La communication
entre les villes principales et les antennes départementales est assurée par des réseaux comportant
chacun 2 routeurs.
Vous disposez des adresses réseau 170.109.0.0 à 170.109.255.255
6.
Déterminer les masques de sous réseau mis en oeuvre .
3
7.
Pour chaque masque, détailler un réseau en mettant en évidence : o son numéro de réseau o l'adresse
du premier host o l'adresse du dernier host o l'adresse de broadcast
8.
Au hasard d'une connexion sur l'internet, la commande "tracert www.lesitequejeconsulte.com" est
exécutée avec pour résultat cette trace :
1 121 ms 118 ms 108 ms nsbes108.francetelecom.net [193.251.96.170] 2 110 ms 104 ms 110 ms E5-0-
0.ncbes102.Besancon.francetelecom.net [193.251.115.34] 3 113 ms 113 ms 113 ms P3-2.nrncy102.Nancy.francetelecom
[193.252.100.158] 4 118 ms 119 ms 119 ms P1-0.ntsta202.Paris.francetelecom.net [193.251.126.62] 5
117 ms 110 ms 109 ms P6-0.ntaub201.Aubervilliers.francetelecom.net [193.251.126.85] 6 124 ms 118
ms 120 ms P9-0.nrpoi101.Poitiers.francetelecom.net [193.251.126.169] 7 128 ms 130 ms 128 ms P0-
0.nctou301.Toulouse.francetelecom.net [193.252.100.85] 8 129 ms 129 ms 128 ms POS-1-0.TLSG1.Toulouse.raei.fran
[194.51.162.94] 9 134 ms 129 ms 130 ms ATM-11-0-0-511.TLS5.Toulouse.raei.francetelecom.net [194.51.162.98]
La conguration réseau est la suivante :
9.
Adresse IP : 193.249.241.61
10.
Masque de sous-réseau : 255.255.255.0
11.
Passerelle par défaut : 193.249.241.61
12.
Comment aboutit-on à la machine de la ligne 1 ?
13.
Quelles autres informations de routage peuvent être déduites de la trace ?
14.
Quel est le temps moyen d'acheminement d'un paquet vers le site www.lesitequejeconsulte.com ?
15.
Ecrire un shell script nommé "Nbr" qui à partir de l'adresse d'un site compte le nombre de routeurs
traversés pour atteindre ce site.
Exo. 8 (Administration
en ligne de commande)
Indiquer quelles sont les commande "ligne de commande" permettant de réaliser les opérations suivantes
dans les environnement unix et windows NT :
1.
Achage de la liste des chiers et/ou répertoires d'un répertoire.
2.
Copie d'un chier
3.
Copie d'un répertoire.
4.
Déplacement d'un chier.
5.
Eacement d'un répertoire.
6.
Changement du nom d'un chier.
7.
Changement du nom d'un répertoire.
8.
Eacement d'un chier.
9.
Eacement d'un répertoire.
10.
Création d'un répertoire.
11.
Achage du répertoire implicite.
12.
Changement du répertoire implicite.
13.
Création d'un lien.
14.
Achage complet du contenu d'un chier.
15.
Achage progressif du contenu d'un chier.
16.
Tri par ordre alphabétique des lignes d'un chier texte.
17.
Comparaison de deux chiers.
18.
Recherche d'une chaine de caratères dans un ou plusieurs chiers.
19.
Création d'un groupe d'utilisateurs.
20.
Suppression d'un groupe d'utilisateurs.
21.
Modication des caractéristiques d'un groupe d'utilisateurs.
4
22.
Création d'un utilisateur.
23.
Suppression d'un utilisateur.
24.
Modication des caractéristiques d'un utilisateur.
25.
Modication du mot de passe d'un utilisateur.
26.
Modication des autorisations sur un chier ou un répertoire.
27.
Modication du propriétaire d'un chier ou un répertoire.
28.
Copie de chiers ou de répertoires avec préservation des autorisations.
29.
Copie de chiers ou de répertoires avec préservation des propriétaires.
30.
Copie de chiers ou de répertoires avec préservation des informations d'audit.
31.
Montage d'un répertoire réseau.
32.
Création d'un partage réseau.
33.
Vérication d'un système de chiers.
34.
Lancement de l'utilitaire de defragmentation.
35.
Lancement de l'utilitaire de gestion des partition.
36.
Lancement de l'utilitaire de création de systèmes de chier.
37.
Création d'une variable d'environnement.
38.
Achage de la date du système.
39.
Achage de l'heure du système.
40.
Achage de l'état instantané de la liste des processus en cours de fonctionnement.
41.
Lancement d'un programme en tant que super-user.
42.
Terminaison forcée d'un processus.
43.
Lancement de commandes à l'heure indiquée.
44.
Planication de commandes répétitives.
45.
Arrêt du système.
46.
Achage de la conguration des interfaces réseau sous TCP/IP présentes dans la machine.
47.
Interrogation d'un éventuel serveur DNS conguré sous TCP/IP.
48.
Lancement d'un client ftp en ligne de commande.
Exo. 9 (Infos
système)
1.
Quel est le système installé ?
2.
Quelle est la distribution installée ?
3.
Quels sont les utilisateurs en cours du système ?
4.
Ouvrir un nouveau terminal en utilisant un autre compte.
5.
Fermer ce terminal.
Exo. 10 (Contenu
de répertoires et de chiers ASCII (texte))
1.
Lister le contenu du répertoire /etc.
2.
Lister de manière détaillée le contenu du répertoire /etc.
Les chiers nommés "passwd", "shadow", "group" et "gpasswd" sont-ils présents dans /etc ?
3.
Lister le contenu du répertoire /dev.
4.
Lister le contenu du chier /etc/passwd.
5.
Lister le contenu du chier /etc/shadow.
6.
Acher par ordre alphabétique les utilisateurs dénis dans le chier /etc/passwd.
5
7.
Rechercher tous les chiers du répertoire /etc contenant la chaine de caractères "root".
8.
Rechercher la localisation du chier "stdio.h" dans le système de chier de votre installation.
9.
Utiliser les commandes de comparaison de chiers de Linux pour tester le contenu d'un même chier
texte en version Unix et Dos.
10.
Combien de lignes, de mots et de caractères comportent les chiers "montexte.unix", "montexte.dos"
et "montexte.mac" ?
Exo. 11 (Commandes)
Déterminer les commandes permettant de réaliser les actions suivantes :
1.
Déterminer le répertoire par défaut dans la hiérarchie des répertoires ?
2.
Y a t-il des chiers, des répertoires dans ce répertoire ?
3.
Entrer du texte dans un chier nommé "Mon_fichier".
4.
Lister le contenu de "Mon_fichier".
5.
Lister le répertoire courant.
6.
Lister les répertoires /bin et /dev.
7.
Créer sous votre répertoire deux sous-répertoires : "Source" et "Data".
8.
Se positionner sous "Source".
9.
Listez le répertoire courant.
10.
Revenir sous le répertoire de départ et détruire "Source".
11.
Créer un deuxième chier nommé "Mon_fichier_2".
12.
Copier chaque chier en
13.
Créer un répertoire "Old".
14.
Déplacer les chiers avec l'extension old vers le répertoire "Old".
15.
Copiez les chiers sans extension dans le repertoire "Data".
16.
Sous votre répertoire de départ, créez un lien maté
Exo. 12 (Manipulation
nom_de_fichier.old.
de la date)
riel "Mon_lien" équivalent à "Mon_fichier_2".
1.
Lister les deux chiers "on_lien" et "Mon_fichier_2" en achant leur numéro d'inode. Que remarquez vous ?
2.
Supprimer "Mon_lien". "Mon_fichier_2" a-t-il disparu ?
3.
Sous votre répertoire de départ, créez un lien symbolique "Mon_nouveau_lien" sur "Mon_fichier_2".
4.
Lister les deux chiers "Mon_nouveau_lien" et "Mon_fichier_2". Que remarquez vous ?
5.
Supprimer "Mon_fichier_2". "Mon_nouveau_lien" a-t-il disparu ?
6.
Quelle est la taille totale des chiers contenus dans votre répertoire ?
7.
Eacer tous les chiers crées.
Exo. 13 (Mise
1.
en place d'un espace de travail pour 4 utilisateurs)
Dénir le lot de commandes à exécuter pour créer 4 utilisateurs en suivant les règles suivantes :
a) Création de 2 groupes.
b) Les premier et deuxième utilisateurs sont membres du premier groupe.
c) Les troisième et quatrième utilisateurs sont membres du second groupe.
d) Le deuxième utilisateur est aussi membre du second groupe.
e) Le quatrième utilisateur est aussi membre du premier groupe.
6
f ) Outre leur répertoire de travail, les utilisateurs ont accès à un répertoire commun /home/groupe1
et/ou /home/groupe2 suivant leur groupe. Dans ce répertoire, ils peuvent écrire, créer des chiers
mais ne peuvent pas eacer les chiers.
g) Détaillez les étapes de création des groupes, des utilisateurs et des répertoires en indiquant quels
chiers vous utilisez et quelles commandes vous utilisez sur ces chiers.
h) Modiez les prols des utilisateurs pour qu'au login, le répertoire d'accueil sur lequel il souhaite
travailler lui soit demandé (s'il entre U, il sera sous son répertoire, s'il entre G, il sera sous le
répertoire de son groupe).
i) Parmi ces 3 valeurs : 066, 067, 077, quel umask positionneriez vous ? Expliquez pour chaque
valeur quelles sont les conséquences de ce choix.
Exo. 14 (Manipulation
de la date d'un chier)
Travailler dans un répertoire nommé "TP2" créé à la racine de votre HOME.
1.
Créer un script shell nommé "change" qui achera la date de dernière modication d'un chier puis
la modiera avec l'heure actuelle et enn réachera la date de dernière modication du chier.
Cette procédure acceptera 1 paramètre qui sera le nom du chier.
Lorsque vous exécuterez "change
mon_fic", le 8 octobre
mon_fic
Oct 8 15 :12 mon_fic
à 15 heures 12 vous obtiendrez le résultat :
avant : -rrr 1 user group 40 Fev 3 2011
après : -rrr 1 user group 40
Exo. 15 (Manipulation
1.
de la date)
Créer un script shell nommé "nombreJours" qui achera le nombre de jours du mois courant.
"nombreJours" achera pour février 2010 le message "28 jours en février 2011".
Exo. 16 (Boucle
1.
et manipulation de chaine)
Créer un script shell réalisant la création d'un répertoire "Exo3" contenant 10 chiers nommés "Un"
à "Dix". Chaque chier contient une seule ligne :
a) "Un" contient "Première ligne"
b) "Deux" contient "Deuxième ligne"
c) ...
d) "Dix" contient "Dixième ligne"
2.
Vérier que le répertoire à créer n'existe pas déjà auquel cas il ne sera pas recréé mais les chiers si.
Exo. 17 (Boucle
et manipulation de chaine)
Exercice 4
Créer un script shell qui réalise les opérations suivantes :
1.
Création sous votre répertoire "TP3" d'un sous répertoire nommé "annéemoisjour" (20120202 pour
2.
Copie des chiers de "Exo3" sous ce répertoire puis eacement de ces mêmes chiers de "Exo3".
3.
Création de deux chiers sous le répertoire d'accueil (HOME) de la personne qui a lancé le shell :
le 2 février 2012).
a) un chier nommé "Gros_fichier.numero_du_shell" dans lequel se trouvera le contenu concaténé des chiers traités
b) un chier nommé "Nom_du_script.numero_du_shell" dans lequel se trouvera le nom des chiers
traités.
4.
Vérier que le répertoire à créer n'existe pas déjà.
Exo. 18 (Boucle
et manipulation de chaine)
7
1.
Créer un script permettant d'acher la liste des chiers du répertoire /etc accessibles en lecture.
2.
Créer un script permettant d'acher la liste des chiers du répertoire /etc accessibles en écriture.
8