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]