Affichage et inspection de fichiers
Référence d'exploitation des outils d'affichage et d'inspection de fichiers sous Linux : lecture et concaténation de flux (cat, bat), formatage tabulaire (column), identification de type (file), métadonnées (stat), listing enrichi (eza). Couvre les opérations courantes, le choix ...
Référence d’exploitation des outils d’affichage et d’inspection de fichiers sous Linux : lecture et concaténation de flux (cat, bat), formatage tabulaire (column), identification de type (file), métadonnées (stat), listing enrichi (eza). Couvre les opérations courantes, le choix d’outil, le dépannage par symptôme et les pièges de piping. Cible un usage en ligne de commande sur systèmes Linux.
Choisir le bon outil
Besoin Outil Pourquoi
────────────── ────────────── ──────────────
Afficher un fichier dans un pipe cat Sortie brute, sans
décoration
Lire un fichier de code, interactif bat Coloration,
pagination, Git
Concaténer plusieurs fichiers cat Fonction première
Aligner des colonnes (CSV, tableau) column Mise en forme
tabulaire
Identifier le type réel d'un fichier file Analyse du contenu,
pas du nom
Voir les métadonnées (inode, dates) stat Permissions,
taille, horodatages
Lister un répertoire, interactif eza Couleur, Git,
icônes, arbre
Lister un répertoire, script portable ls POSIX, présent
partout
En une phrase : cat pour les pipes et la concaténation, bat pour lire du code à l’écran, column pour aligner, file pour identifier, stat pour les métadonnées, eza pour un listing riche en interactif, ls pour les scripts.
Principes fondamentaux
L’extension ne dit pas le type, le contenu si. file analyse les octets de tête (nombres magiques) pour déterminer le type réel, indépendamment du nom. Un .txt peut être un binaire, un .jpg un script. Avant toute opération risquée, file tranche.
bat est cat enrichi, mais pas un substitut dans les pipes. bat ajoute coloration syntaxique, numéros de ligne, pagination automatique et indicateurs Git. Ces décorations cassent les scripts qui attendent du texte brut. Dans un pipe, utiliser
bat -p(plain) oubat --paging=never, ou garder cat. Aliaser cat=bat sans précaution casse des scripts.
eza enrichit ls sans le remplacer partout. eza colore par défaut, affiche le statut Git, les icônes (avec une Nerd Font) et une vue arbre intégrée. C’est un fork maintenu d’exa, devenu dormant. Comme bat, il est fait pour l’interactif : sur un serveur distant ou dans un script portable, ls reste la référence.
Les métadonnées sont plus riches que la taille et la date. stat expose l’inode, le nombre de liens, le périphérique, les 3 horodatages (accès, modification, changement de statut) et les permissions en octal et symbolique. C’est l’outil de diagnostic quand un fichier se comporte autrement qu’attendu.
Migration en cours de coreutils vers Rust. Ubuntu teste uutils (réécriture Rust de coreutils) à partir de 25.10, avec un déploiement visé pour 26.04 LTS. Les commandes restent compatibles, mais quelques différences de comportement aux marges peuvent apparaître : vérifier l’implémentation avec
cat --versionen cas de doute.
Opérations standard
Afficher et concaténer (cat, bat)
cat fichier # affiche le contenu brut
cat f1 f2 f3 > fusion.txt # concatène plusieurs fichiers
cat -n fichier # numérote toutes les lignes
# rend visibles tabulations, fins de ligne, CR
cat -A fichier
cat > nouveau.txt # saisie au clavier jusqu'à Ctrl-d
bat fichier.py # coloration syntaxique + pagination
bat -p fichier # mode brut (plain), sûr pour les pipes
bat --paging=never fichier # sans pagination
# rend visibles les caractères non imprimables
bat -A fichier
# piping : bat détecte la non-tty et passe en brut
bat fichier.py | grep def
État attendu : le contenu s’affiche. cat -A (ou bat -A ) est précieux pour
diagnostiquer des fins de ligne Windows ( ^M$ ) ou des tabulations parasites.
Dans un script, préférer cat ou bat -p .
Aligner en colonnes (column)
column -t fichier.txt # aligne en colonnes sur les espaces
column -t -s ',' fichier.csv # séparateur virgule (CSV)
column -t -s ':' /etc/passwd # séparateur deux-points
mount | column -t # rend lisible une sortie tabulaire
État attendu : les colonnes sont alignées et lisibles. -s fixe le séparateur
d’entrée, -t active le mode tableau. Utile en bout de pipe pour rendre
présentable une sortie brute.
Identifier le type réel (file)
file fichier # type déterminé par le contenu
file -i fichier # type MIME (text/plain, image/png...)
file -b fichier # sans le nom du fichier (brut)
file * # type de tous les fichiers du répertoire
# regarde à l'intérieur d'un fichier compressé
file -z archive.gz
État attendu : file annonce le type réel. Réflexe avant d’ouvrir, d’extraire ou de traiter un fichier d’origine incertaine, et pour diagnostiquer une extension trompeuse.
Lire les métadonnées (stat)
stat fichier # toutes les métadonnées
stat -c '%s' fichier # taille en octets seulement
stat -c '%A %U %G' fichier # permissions, propriétaire, groupe
stat -c '%y' fichier # date de modification lisible
stat -f fichier # infos du système de fichiers (espace, type)
État attendu : stat affiche inode, taille, permissions (octal et symbolique) et
les 3 horodatages. Le format -c extrait un champ précis, utile en script.
À distinguer : mtime (contenu modifié), ctime (métadonnées changées),
atime (dernier accès).
Lister un répertoire (eza)
eza # listing coloré
eza -l --git # détaillé avec statut Git par fichier
eza -la # tout, y compris les fichiers cachés
eza --tree --level=2 # vue arbre sur 2 niveaux
eza -l --sort=size --reverse # trié par taille décroissante
eza -l --icons # avec icônes (nécessite une Nerd Font)
État attendu : le listing s’affiche, coloré et enrichi. La colonne Git ( --git
) montre d’un coup d’œil les fichiers modifiés ou non suivis. Pour un script ou
un serveur distant, revenir à ls .
Dépannage par symptôme
bat affiche des numéros de ligne et casse un script en aval
Symptôme : un script qui consomme la sortie échoue depuis qu’on a aliasé cat sur bat. Cause probable : bat ajoute décorations et pagination en mode interactif. Correction : forcer le mode brut, ou garder cat dans les scripts.
bat -p fichier # plain, pas de décoration
# alias sûr pour le piping (perd la gouttière Git)
alias cat='bat --paging=never -p'
\cat fichier # contourne l'alias ponctuellement
« batcat: command not found » sur Debian/Ubuntu
Symptôme : la commande bat est introuvable après installation du paquet. Cause probable : Debian et Ubuntu nomment le binaire batcat (conflit avec un autre paquet). Correction : utiliser batcat, ou créer un alias.
batcat fichier
alias bat='batcat' # dans ~/.bashrc
column désaligne une sortie avec des champs vides
Symptôme : les colonnes se décalent quand un champ est vide. Cause probable : column fusionne les séparateurs consécutifs par défaut. Correction : préciser le séparateur et ne pas fusionner.
# -n (selon version) ne fusionne pas les séparateurs
column -t -s ',' -n fichier.csv
# Alternative robuste pour du CSV complexe : awk ou un outil dédié
file annonce « data » sur un fichier attendu comme texte
Symptôme : file renvoie « data » au lieu d’un type précis. Cause probable : le fichier contient des octets non textuels, ou est corrompu. Correction : inspecter les premiers octets.
xxd fichier | head # voir les octets de tête
file -i fichier # type MIME pour confirmer
Traitement par lots
La même forme de boucle que partout, appliquée à l’inspection : produire un fichier de sortie par fichier d’entrée, ou un rapport unique.
shopt -s nullglob # bash ; sous zsh : *.log(N)
# Un aperçu de chaque fichier, dans un rapport unique
for f in *.log; do
printf '\n===== %s =====\n' "$f"
head -20 "$f"
done > apercu.txt
# Identifier le type réel de tout un lot, sans se fier aux extensions
for f in *; do printf '%-40s %s\n' "$f" "$(file -b "$f")"; done
# Repérer les fichiers qui ne sont pas du texte avant de les ouvrir
for f in *; do file -b "$f" | grep -q text || printf 'BINAIRE: %s\n' "$f"; done
Les guillemets autour de "$f" et la garde sur le motif vide valent ici comme
ailleurs : voir le runbook conversion par lots pour la forme complète.
Pipelines utiles
# Les 20 fichiers les plus gros, taille lisible
find . -type f -printf '%s\t%p\n' | sort -rn | head -20 |
numfmt --to=iec --field=1
# Volume cumulé par extension, séparateur tabulation obligatoire
find . -type f -name '*.*' -printf '%s\t%f\n' |
awk -F'\t' '{n=split($2,p,"."); s[p[n]]+=$1}
END{for(e in s) printf "%12d %s\n", s[e], e}' | sort -rn
# Fichiers dont le contenu ne correspond pas à l'extension
find . -name '*.txt' -type f -exec file --mime-type {} + | grep -v 'text/plain'
# Repérer les fins de ligne CRLF sur une arborescence
find . -type f -exec file {} + | grep CRLF
# Les 10 premiers octets d'un binaire, en hexadécimal et en caractères
od -A d -t x1z -N 16 fichier.bin
# Longueur de la ligne la plus longue de chaque fichier
find . -name '*.md' -exec awk 'length>m{m=length} END{print m, FILENAME}' {} \;
# Fichiers vides et fichiers à un seul octet
find . -type f -size -2c -printf '%s %p\n' | sort -n
Le séparateur de la deuxième forme n’est pas cosmétique. Avec un espace, awk
découpe le nom fichier avec espace.txt sur son premier blanc et crée un seau
fichier inexistant, en sous-comptant txt. Mesuré sur le banc d’essai :
6000 bin, 11 md, 6 txt, 4 fichier avec l’espace, contre 6000 bin, 11 md, 10 txt avec la tabulation, total conforme aux 6021 octets réels.
Sources amont
À ouvrir quand une commande de vérification révèle un écart avec ce qui est relevé plus haut.
GNU coreutils https://www.gnu.org/software/coreutils/
bat https://github.com/sharkdp/bat/releases
eza https://github.com/eza-community/eza/releases
Points clés à retenir
L’extension ment, file tranche : analyser le contenu avant toute opération risquée sur un fichier d’origine incertaine.
bat et eza sont faits pour l’interactif. Dans un pipe ou un script, utiliser cat / bat -p et ls : leurs décorations cassent les sorties brutes.
cat -A (ou bat -A) révèle les caractères invisibles : fins de ligne Windows (^M$), tabulations, espaces de fin.
stat distingue 3 horodatages : mtime (contenu), ctime (métadonnées), atime (accès). Clé pour diagnostiquer un comportement inattendu.
Sur Debian/Ubuntu, le binaire bat s’appelle batcat. eza est le fork maintenu d’exa (dormant).
column -t aligne une sortie tabulaire en bout de pipe ; préciser -s pour le séparateur d’entrée.