Fichiers
De TeteveWiki.
Sommaire |
Création, suppression, tri
mkdir <dossier> : crée un répertoire.
rmdir <dossier> : supprime des dossiers (et leurs enfants) vides
- -p (parents) : permet de créer ou supprimer les dossiers (vides) et leurs enfants.
rm <fichier1> <fichier2> <fichier3>: supprime un (ou des) fichier(s)
rm -r <dossier1> <dossier2> <dossier3>: supprime un (ou des) dossier(s) et leurs fichiers
- -f (force) : supprime sans demander de confirmation
file <fichier> : lit le début du fichier pour essayer d'en déterminer le type de contenu. Il faut bien entendu avoir les droits de lecture sur le-dit fichier.
nl : permet de numéroter les lignes. L'option -s permet d'ajouter un séparateur entre le numéro et le début de ligne.
nl -s ">> " /home/toto/test.txt
.......... 11>> ....... 12>> ...........
cmp <fichier1> <fichier2> : compare le contenu des deux fichiers et précise la position de la première différence relevée.
diff : permet de comparer le contenu de deux fichiers ou répertoires et affiche les changements nécessaires pour les rendre identiques. Utile surtout pour des répertoires.
touch : permet de créer un fichier vide.
cp : copie un fichier ou un répertoire.
mv : déplace ou renomme un fichier ou un répertoire.
Types de fichiers
"-" fichiers réguliers : fichier "normal"
d" répertoires
"l" liens symboliques : ne contient pas de données à proprement parler. C'est "une porte" vers des données.
"c" ou "b" fichiers de périphériques : Ils facilitent la communication entre les applications et le matériel.
"c" Le character device est utilisé pour la communication sérielle comme le modem et le haut parleur.
"b" Le block device est utilisé pour la communication parallèle comme le disque dur, le lecteur CD...
La commande mknod est utilisée pour créer les fichiers de périphériques.
Ils se trouvent dans le répertoire /dev. Il existe quelques autres fichiers de ce type, comme /dev/null.
"s" sockets : la socket est utilisée pour la communication entre processus. Il n'existe pas de commande pour créer une socket, sa fonctionnalité doit être programmée.
"p" named pipe : Appelés aussi fifo (first in, first out), les named pipes permettent aux process sans lien de parenté de communiquer entre eux, alors que les canaux normaux (non nommés) peuvent être utilisés uniquement par des process ayant des liens de parenté. Il peut être créé explicitement par la commande mkfifo ou mknod.
stat <fichier> : permet de voir des infos avancées sur le fichier
recherche de fichiers
find <où> <quoi> <nom> : recherche dans une arborescence.
- -type f/d
- -name
find /home -type f -name test.txt
locate nom_de_fichier : cherche un fichier dans une base de données. Celle-ci peut être mise à jour par :
updatedb : Met à jour la base de données pour la commande "locate".
slocate : cherche un fichier dans l'arborescence enfant notre position.
slocate s'appuye sur un index, que l'on peut mettre à jour par la commande "slocate -u"
sort : trie le contenu d'un fichier par ordre alphabétique.
- -f : ne tiendra pas compte de la casse.
- -u : ne reproduit qu'une ligne en cas de doublons.
Lire le contenu
cat fichier.txt affiche le contenu du fichier sur la sortie standard.
- -n : rajoute les numéros de ligne
cat fic1.txt fic2.txt > fic3.txt
fusionne les deux premiers fichiers dans le troisième.
cat fic1.txt fic2.txt >> fic3.txt
idem, mais complète le fichier fic3.txt sans le réinitialiser, contrairement à ci-dessus
affichage sur plusieurs pages
cat test.txt | most
most permet de faire défiler le texte grâce aux fèches de déplacement (haut, bas, gauche, droite)
fichiers compressés
les outils zcat, zless et zmore fonctionnent comme les homologues cat, less et more, mais ils travaillent sur des fichiers compressés (.tar, .gz ou .zip) sans avoir besoin de les décompresser au préalable. (vérifier si besoin d'install du paquet au préalable)
Début et fin de fichiers
head fichier.txt affiche les 10 premières lignes du fichier tail fichier.txt affiche les 10 dernières lignes du fichier
- -f fichier.txt : affiche les 10 dernières lignes du fichier, et attend en surveillant le fichier. Toute nouvelle ligne qui s'ajouterait au fichier serait immédiatement retranscrite sur l'écran.
([Ctrl] + [C] pour reprendre la main.)
Liste des fichiers ouverts
lsof (list open files) : affiche tous les fichiers ouverts par tous les processus dans la limite des droits d'accès d'utilisateur. (nécessite un apt-get install lsof sur un système de base)
(!!! ATTENTION !!! lsof -h permet de vérifier s'il y a des restrictions ou non en cas de listing. "Only root can list all files" doit apparaitre obligatoirement)
Pour chaque fichier ouvert, lsof affiche la commande, l'utilisateur (user), la taille en octets (size) et le nom (name). Le PID (process identifier) est l'identifiant unique du processus. Le type permet de déterminer s'il s'agit d'un fichier régulier (REG), un répertoire (DIR), un lien (LINK), un périphérique (CHR ou BLK), un pipe (FIFO), etc...
Le FD (file descriptor) est une clé que le noyau et le processus utilisent pour accéder au fichier. Il indique aussi, le cas échéant, si le fichier est ouvert en mode lecture (r), écriture (w), ou les deux (u).
Les deux nombres de DEVICE identifient le périphique comme représenté dans le répertoire /dev. Pour finir, le NODE est le numéro d'inode, un identifiant de fichier utilisé par le système de fichiers.
La façon dont les informations sont présentées n'est pas figée :
- -l permet d'afficher l'identifiant d'utilisateur numérique au lieu de son nom.
- -R rajoute le PPID (parent PID), id-est le PID du processus père qui a lancé le processus concerné.
- -u permet de spécifier un utilisateur, pour voir tous les fichiers ouverts par cet utilisateur.
- -p fait pareil avec un processus (-p PID)
- -i permet de traiter les fichiers réseau Internet.
Ici aussi, on peut jouer sur la présentation du résultat.
- -n affiche l'adresse IP au lieu du nom d'ordinateur.
Pour finir, on peut citer l'option -r qui met lsof en mode répétitif, c'est-à-dire que lsof continue à mettre à jour et actualise l'affichage après un certain délai. Par défaut, il est de 15 secondes :
lsof -p 2233 -r 5 sera actualisé toutes les 5 secondes ([Ctrl] + [C] pour interrompre).
Espace disque
df -h : affiche l'espace disque de chaque partition (-h = human readable format : Ko/Mo/Go)
du -sh : mesure la taille du répertoire depuis lequel il est exécuté.
Les droits
Les droits étendus Le droit SUID
Sa présence permet à un fichier exécutable de s'exécuter sous l'identité et donc les droits de son propriétaire, à la place des droits de l'utilisateur actuel qui l'exécute. Il s'agit d'un dispositif de sécurité essentiel qui autorise un utilisateur quelconque (par rapport à la commande) à bénéficier de droits plus étendus que les siens (souvent ceux de root), pour exécuter la commande agir sur d'autres fichiers indispensables, juste le temps et sous le contrôle de l'exécution de la commande, SANS qu'il soit nécessaire d'attribuer ces droits en permanence sur les fichiers. Ce droit est noté symboliquement s et se positionne à la place du x du propriétaire u (mais sans écraser le droit x) Sa valeur octale est 4000
Exemple significatif Examiner les droits du fichier exécutable /usr/bin/passwd, qui permet de (re)définir un mot de passe et le comparer à ceux du fichier /etc/shadow qui contient les mots de passe cryptés.
Observez : ll /etc/shadow -r-------- root root shadow ll -l /usr/bin/passwd -r-sr-xr-x root bin passwd
Comme le droit x est accordé à tous, chacun peut donc exécuter la commande passwd, mais personne ne posséde pas lui-même le droit d'écriture dans le fichier /etc/shadow qui doit le stocker. Le positionnement du SUID permet d'agir en tant que root lors de la demande d'accès au fichier et comme root a tous les droits, il est alors possible de mettre à jour ce fichier des mots de passe.
Manipulation Comment connaitre les commandes comme passwd, qui offre cette permission SUID ? Voici plusieurs façons
cd /usr/bin # grep filtre les lignes produites par ls en utilisant # l'expression rationnelle ^...s ls -l | grep "^...s" # pour afficher tous les fichiers possédant le SUID cd / ls -lR | grep "^...s" # recherche parmi les fichiers ordinaires ceux qui ont au moins le droit s find / -type f -perm +4000
Le droit SGID
Pour un fichier exécutable, il fonctionne de la même façon que le SUID, mais transposé aux membres du groupe.
Exemple
Examiner les droits symboliques de la commande d'impression /usr/bin/lpr
Quelle est sa valeur octale ?
Si une imprimante a été installée, un répertoire lp a été créé dans /var/spool/lpd . Or la commande lpr écrit dans ce répertoire. Comment un utilisateur quelconque peut-il alors y écrire le fichier d'impression ?
Positionné sur un répertoire, ce droit modifie le groupe propriétaire d'un fichier créé dans ce répertoire. Un fichier créé dans un tel répertoire, verra son groupe propriétaire modifié : Ce ne sera plus le groupe primaire du propriétaire qui l'a créé (règle habituelle), mais à la place, le groupe propriétaire du répertoire lui-même. Autrement dit, ce droit s posé sur un répertoire, met en place un mécanisme d'héritage de groupe, de répertoire conteneur à fichiers contenus. Notation symbolique s, mis à la place du x du groupe, valeur octale 2000
Le "sticky bit"
Ce droit spécial, traduit en "bit collant", a surtout un rôle important sur les répertoires. Il réglemente le droit w sur le répertoire, en interdisant à un utilisateur quelconque de supprimer un fichier dont il n'est pas le propriétaire Ce droit noté symboliquement t occupe par convention la place du droit x sur la catégorie other de ce répertoire, mais bien entendu il ne supprime pas le droit d'accès x (s'il est accordé). Justement, si ce droit x n'est pas accordé à la catégorie other, à la place de t c'est la lettre T qui apparaitra. Sa valeur octale associée vaut 1000. Pour positionner ce droit :
chmod +t rep --> d ... ... ..t rep si le répertoire a le droit x pour tous --> d ... ... ..T rep sinon
Exemple Le sticky bit est présent sur le rép. /tmp Pour quelle raison ?
ls -l / ........ drwxrwxrwt root root tmp/
(extrait de [url]http://ww2.ac-creteil.fr/reseaux/systemes/linux/index.html[/url]

