Date de première publication : 2014/09/09
Cette séance de TP se concentre sur les droits, les liens et les redirections. On commence également notre tournée des commandes sympas comme find
.
Droits
Pour connaître les droits sur des fichiers ou des répertoires, il suffit de les lister avec l'option -l
. Voici ce que cela donne sur mon compte
avec ls -al
pour afficher également les fichiers cachés :
total 26688
drwx--x--x 38 loyon personnel_isima_limos 4096 28 oct. 2022 .
drwxr-xr-x 4449 nobody 4294967294 135168 11 sept. 03:15 ..
-rw------- 1 loyon utilisateurs du domaine 5366 28 oct. 2022 .bash_history
-rw------- 1 loyon personnel_isima_limos 193 23 oct. 2018 .bash_profile
-rw------- 1 loyon personnel_isima_limos 231 23 oct. 2018 .bashrc
drwx------ 2 loyon personnel_isima_limos 4096 17 sept. 2019 Bureau
lrwxrwxrwx 1 loyon utilisateurs du domaine 25 22 juil. 2020 shared -> /mnt/local.isima.fr/loyon
-rw-r--r-- 1 loyon personnel_isima_limos 7850 2 sept. 2019 xlib.c
- le premier bloc donne le type précis de l'élément (fichier ou répertoire) et les droits sur celui-ci
- le suivant donne le nombre de liens sur cet élément (utile pour les liens physiques)
- on trouve ensuite le propriétaire et le groupe
- on continue par la taille du fichier et la date de création/modification
- et on termine par le nom de l'élément lui-même
Pour information, le fichier .bash_history contient les dernières commandes tapées, .bashrc et .bash_profile sont des fichiers de configuration du bash, un type de shell (celui que l'on utilise actuellement) et le dernier un fichier texte standard.
Exercice 1
- Accéder au fichier
/mnt/local.isima.fr/loyon/xlib.c
qui est en lecture seule (si ça marche pas, prévenez-moi) - Regarder les droits d'utilisation et le propriétaire
- Vérifier qu'il n'est pas modifiable avec un éditeur de texte
- Copier ce fichier dans votre $HOME
- Qui en est maintenant le propriétaire et quels sont les droits ?
Exercice 2
- Vérifier les droits de votre répertoire $HOME.
- Demander à un voisin d'accéder à votre répertoire, cela n'est normalement pas possible
- Donner au voisin la possibilité d'accéder à votre répertoire
- Demander à votre voisin de copier un fichier dans votre répertoire ou d'en créer un (avec
touch
par exemple). Il doit être le seul à pouvoir modifier ce fichier. - Effacer ce fichier (oui, c'est possible, le droit d'effacer est lié au réperoire parent qui lui, vous appartient)
- Remettre des droits corrects sur votre répertoire $HOME
Si votre voisin met un répertoire non vide, vous ne pourrez pas l'effacer (sauf si vous savez jouer avec l'umask / setfacl)
Comment peut-on faire l'équivalent du chmod 000
avec le formalisme avec les lettres ?
chmod a= fichier
La commande chown
(pour changer de propriétaire) est en général associée à l'administrateur. La commande chgroup
est disponible dès que l'utilisateur appartient à plusieurs groupes.
Les liens
La commande ls
permet d'avoir des informations sur les liens (option -l) et sur le numéro d'inode (option -i)
qui est le même pour un fichier et son lien physique
Lien physique
Pour faire un lien physique d'un fichier, la syntaxe n'est pas naturelle :
$ ln fichier_original lien_physique
- Créer un fichier et éventuellement l'éditer pour mettre quelque chose dedans
- Afficher l'inode et le compteur de liens de ce fichier
- Créer un lien physique de ce fichier
- Lister les fichiers et comparer les numéros d'inode et le compteur de liens
- Editer le fichier lien et vérifier que l' "original" est bien modifié
- Effacer l'"original"
- Vérifier que l'information est bien toujours présente
- Recréer l'original en faisant un lien
- Créer un répertoire sauv et déplacer un des liens vers ce répertoire
- Vérifier que l'on accède bien à l'information dans le répertoire de départ comme dans le répertoire sauv
Lien symbolique ->
La syntaxe pour créer un lien symbolique est la suivante :
$ ln -s fichier_original lien_symbolique
- Créer un fichier texte (éventuellement édité pour être original)
- Créer un lien symbolique
- Afficher le fichier original et le lien symbolique avec la commande
ls -li
- Vérifier que si on édite le lien symbolique, on édite bien le fichier original
- Effacer le fichier original
- Essayer d'éditer le lien symbolique
En fonction de l'éditeur que vous avez utilisé, vous n'avez pas eu tous le même effet. On s'attendrait à ce qu'il soit impossible d'éditer le lien symbolique (comportement de gedit) mais vi, nano et kate suivent le lien et recréent un nouveau fichier (même nom mais inode différent). Pluma propose d'éditer un fichier portant le nom du lien en lecture seule (sic)
soffice
permet de lancer un éditeur de texte à la word mais que se cache-t-il derrière cet exécutable ?
$ which soffice
/usr/bin/soffice
$ ls -l /usr/bin/soffice
lrwxrwxrwx 1 root root 38 Aug 19 01:53 soffice -> /usr/lib64/libreoffice/program/soffice
$ ls -l /usr/lib64/libreoffice/program/soffice
-rwxr-xr-x 1 root root 5645 Jul 25 04:02 /usr/lib64/libreoffice/program/soffice
Le code précédent permet de savoir quelle commande est appelée quand on exécute soffice
. On cherche ensuite à avoir plus d'informations
et on voit que c'est un lien symbolique. On va ensuite voir ce qu'il y a derrière le lien !
COPIER /COLLER au mulot
Sélectionner le texte à copier avec la souris. Placez-vous à l'endroit où vous voulez copier et appuyer sur le bouton du milieu
de la souris (ou clic molette), c'est fait !
Quelle version du logiciel se cache derrière le nom générique du logiciel de dessin gimp ?
Il s'agit de la version 2.10 sur nightmare !
Quelle commande est réellement appelée par latex ?
Il s'agit de la commande pdftex !
Redirections
Redirection de la sortie standard
Pour rediriger le résultat d'une commande dans un fichier, il suffit de taper :
$ commande > fichier
Si on ne veut pas effacer le contenu du fichier mais ajouter la sortie à la fin du fichier :
$ commande >> fichier
Voici la commande pour lister un niveau seulement d'une arborescence :
$ tree -L 1 -d /home/local.isima.fr
Qui a dit que ça marchait aussi avec un ls
?
- Rediriger la sortie de la commande vers un fichier résultat
- Le fichier est relativement long, il est difficile de le consulter avec la commande
cat
, c'est fastidieux avecmore
ouless
, la tête du fichier est consultable avechead
et la fin avectail
- Compter le nombre de lignes du fichier pour avoir une idée grossière du nombre de comptes sur la machine
- Compléter le fichier résultat avec la liste des répertoires de /home/isimaadm
- Refaire le compte
Comment créer un fichier si l'on n'a pas d'éditeur (et que le fichier n'est pas trop long) ?
$ cat > fichier_a_creer
une super methode pour creer un truc
avec des sauts de ligne
on finit par un appui simultané sur les touches CONTROLE et D
$ cat fichier_a_creer
Redirection de la sortie d'erreurs standard
Rediriger la sortie d'erreurs standard dans un fichier permet d'analyser après coup ce qu'il s'est mal passé. C'est particulièrement utile pour les traitements longs en arrière-plan ou lorsque le compilateur C/C++ est trop bavard.
Si le fichier fichier n'existe pas, tester le résultat des commandes suivantes :
$ ls fichier
$ ls fichier 2> erreurs
$ cat erreurs
Si le résultat de la sortie d'erreurs ne vous intéresse pas, vous pouvez la détourner vers les limbes informatiques :
$ ls fichier 2> /dev/null
On utilisera cela pour la commande find
et ne pas avoir la liste des répertoires que l'on ne peut pas parcourir.
Redirection de l'entrée standard
Rediriger l'entrée standard permet de simuler une saisie de l'utilisateur :
$ commande < fichier
Éditer un fichier et mettre un petit calcul, par exemple : "40 + 5" puis exécuter la commande bc
$ bc < fichier
Commande find
La commande find
permet de trouver des éléments (tous les fichiers .bashrc) dans une arborescence de départ (/home/local.isima.fr).
$ find /home/local.isima.fr -name ".bashrc" -print
Pour ne pas voir les répertoires où vous ne pouvez pas aller (operation denied), il suffit de préciser 2> /dev/null
Pour ne pas faire "tomber" le NAS, il est "interdit" de faire des recherches sur le répertoire / directement. Vous devez restreindre vos recherches si possible.
Pour trouver tous les liens du répertoire courant et des sous-répertoires, on peut taper :
$ find . -type l
Si vous consultez les pages man, pouvez-vous trouver comment afficher tous les répertoires ?
On peut également faire une recherche pour trouver tous les fichiers de notre $HOME dont la taille est supérieure à 100M
find $HOME -size +100M -print
On peut même les effacer automatiquement avec l'option -delete
ou l'option -exec
et ce qui va bien... mais on fera cela dans 2 séances !
- 1
- 2
- 3
- 4