UE Libre Scrips Unix: examen S1 2005-2006
Exercice 1
- donnez une ligne de commande permettant de connaître le
nombre de ligne du fichier /etc/passwd
- donnez une ligne de commande permettant d'afficher les lignes 5
à 12 du fichier /etc/passwd
- le fichier /etc/passwd est constitué de champs
séparés par le caractère :. Le dernier champ (a
priori, le 7e champ, cf "man 5 passwd" pour plus d'informations)
contient le shell de l'utilisateur. Donnez une commande permettant de
connaitre le nombre de shells différents utilisés par ls
utilisateurs présents dans /etc/passwd. Un même shell
utilisé par plusieurs utilisateurs ne doit être
compté qu'une seule fois.
- qu'affiche la commande : date '+%Y'
- donnez une commande permettant d'obtenir la date sous la forme
2006-0123 (01: le mois; 23: le jour dans le mois; 2006: l'année)
- expliquez et indiquez ce qu'affiche les commandes suivantes. Vous
indiquerez aussi le contenu du fichier /tmp/toto.txt pour les commandes
où il est mentionné:
- A=5;ls ; echo toto; A=3;echo $A
- A=5;ls ; echo toto; A=3;echo $A > /tmp/toto.txt
- A=5;{ ls ; echo toto; A=3;echo $A; } > /tmp/toto.txt ; echo
$A
- A=5;( ls ; echo toto; A=3;echo $A; ) > /tmp/toto.txt; echo $A
- donnez une commande permettant d'obtenir le nombre de fichiers de
plus de 20 000 Ko présent dans le dossier /usr et dans ses
sous-dossiers. Vous ferez en sorte que l'affichage ne soit pas
perturbé par l'affichage d'éventuels message d'erreurs
des commandes utilisées (par exemple en cas d'interdiction
d'accès à certains fichiers).
Exercice 2
- ex2-0: écrire un script tailhead.sh ayant 3 arguments: n1,
n2 et nom qui affiche les lignes du fichier nom dont les numéros
de lignes vont de n1 à n2.
- ex2-1: écrire un script ex2-1.sh qui affiche tous les
fichiers du dossier courant dont le nom contient une chaîne
donnée. Exemple:
petit@asr270-04:/usr/bin$ /tmp/ex2-1.sh zip
bunzip2
bzip2
bzip2recover
funzip
mzip
unzip
unzipsfx
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
- ex2-2 : écrire un script ex2-2.sh qui affiche tous les
fichiers du dossier courant dont le nom commence par une chaîne
donnée. Le script indiquera le nombre de fichier trouvés
et le nombre total de fichiers (cf exemple ex 2-3 ci-dessous)..
petit@asr270-04:/usr/bin$ /tmp/ex2-2.sh zip
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
6 fichiers trouvés pour un total de 1823 fichiers
- ex2-4: écrire un script nommé ex2-4.sh qui renomme
les fichiers *.log du dossier courant en ajoutant la date courante sous
la forme AAAA-mmjj. Exemple: kern.log.2006-0123
- ex2-5: idem avec ex2-5.sh mais on souhaite garder l'extension
à l afin du nom. Exemple: kern.2006-0123.log
- ex2-6: écrire un script qui réalise le même
travail mais qui prenne le dossier auquel il doit s'appliquer comme
argument.
Exercice 3: creation d'une poubelle: rmbis
- écrire un script rmbis1.sh qui
- crée un dossier .rm dans le dossier courant s'il
n'existe pas. Si le dossier .rm ne peut être créé,
votre script doit échouer avec un message d'erreur explicite
envoyé sur la sortie en erreur standard.
- déplace le fichier ordinaire qui lui est passé en
argument dans ce dossier .rm.
- ajouter à votre script une option -purge permettant de
vider le dossier .rm
- ajoutre une option -restore ayant un nom de fichier en arguments
qui récupère la version du fichier sauvée dans le
dossier .rm s'il en existe une
- écrire une version2 rmbis2.sh de votre script qui :
- accepte plusieurs noms de fichiers en arguments (les noms de
fichiers sont ce qui est après les éventuelles options)
- travaille avec des noms de fichiers contenant des chemins
- dans ce cas, le dossier .rm est créé dans le
dossier où se situe le fichier (rmbis2.sh
/usr/local/src/test.txt : le fichier test.txt sera
déplacé dans /usr/local/src/.rm)
- accepte une option -recurse qui travaille sur les dossiers:
dans le cas d'un dossier, c'est le dossier (et son contenu) qui sera
simplement déplacé dans .rm