Unix et ligne de commande #!/bin/bash #Question 1 ls -l | grep .txt | wc -l > f1 # Les extensions ne sont pas un moyen fiable pour identifier des fichiers, préférer la commande file # par exemple (peut être amélioré!) file -i * | grep 'text/plain' | wc -l > f1 #Question 2 head -5 /etc/hosts | tail -1 # ou tail -n +5 /etc/hosts | head -n 1 #Question 3 ln -s /bin/sh toto #Question 4 #chmod 777 --> utilisateur: rwx, groupe: rwx, autres: rwx #chmod 640 --> utilisateur: rw-, groupe: r--, autres: --- #chmod 005 --> utilisateur: ---, groupe: ---, autres: r-x #Question 5 #1 ls -1 /etc/c* #2 find /etc -maxdepth 2 -name "c*" 2> /dev/null #3 grep "^c" /usr/share/dict/words Programmation C Exercice 1 #include <stdio.
Descripteur de fichier Le programme permet de créer un fichier resultat qui contient Programme Programme mystère. En effet, on a deux descripteurs qui pointent sur la même entrée dans la table des fichiers ouverts (TFO) (qui dans notre cas est le fichier resultat). Le premier descripteur est utilisé pour écrire Programme mystère\n, le deuxième est utilisé pour reculer le curseur de 9 donc le curseur est positionné après Programme , et enfin le premier descripteur est réutilisé pour réecrire Programme mystère\n.
Remarque: n’oubliez pas, lors de l’utilisation d’appels système, de traiter les cas d’erreur.
Redirection de fichiers Développez un programme redir.c avec l’usage ./redir IN OUT commande [argument...]. Ce programme permet d’exécuter une commande avec ses arguments, mais en redirigeant l’entrée standard depuis le fichier IN et la sortie standard ainsi que la sortie standard d’erreur vers le fichier OUT.
Note: Les appels systèmes dup2 et creat peuvent vous être utiles.
Mini ls (suite) -n pour afficher le nom du propriétaire et du groupe #include <stdio.h> #include <sys/stat.h> #include <pwd.h> #include <grp.h> #include <string.h> #include <sys/types.h> #include <time.h> #include <sys/sysmacros.h> int main(int argc, char* argv[]){ struct stat statbuf; int retour_stat, i; struct passwd *pw; struct group *gr; char type[30]; char permission[4]; char droits[20]=""; char Date_modification[30]; int arg = 1, show_name = 0; if(argc < 2){ printf("Usage: %s nom_du_fichier\n", argv[0]); return 1; } if (strcmp(argv[1], "-n") == 0) { arg = 2; show_name = 1; } retour_stat = lstat(argv[arg], &statbuf); if(retour_stat == -1){ perror("Erreur de la récupération des informations"); return 1; } switch (statbuf.
Remarque: n’oubliez pas, lors de l’utilisation d’appels système, de traiter les cas d’erreur.
Mini ls (suite) Modifiez le programme mini_ls du lab 6 pour:
ajouter une option -n, qui, à la place d’afficher l’uid et le gid propriétaire, affiche le nom de l’utilisateur et du groupe propriétaire du fichier. Pour cela, utilisez les fonctions getpwuid et getgrgid afin de faire la conversion. Comparez votre programme avec la sortie de ls -lid.