Notes Linux

Cherchez des fichiers avec find, identifiez le processus qui utilise un fichier ou un port avec lsof et examinez les connexions et les routes avec netstat.

find

Nom, type et profondeur

Le point désigne le répertoire courant. Utilisez -type f pour les fichiers, -type d pour les répertoires et -type l pour les liens symboliques. -name distingue la casse et -iname l’ignore. Citez les motifs pour que find les interprète. -maxdepth 2 descend sur deux niveaux au maximum.

find . -type f -name '*.jar' -print
find . -type f -iname '*.pdf' -print
find . -maxdepth 2 -type d -name config -print
find . -type l -print

Date, taille et droits

-mmin -10 repère les contenus modifiés dans les dix dernières minutes. -mtime -1 utilise des périodes de 24 heures et sélectionne les modifications datant de moins d’un jour. -newermt compare avec une date explicite. Avec GNU find, -size +100M sélectionne les fichiers de plus de 100 Mio et -perm -0002 vérifie le droit d’écriture des autres utilisateurs.

find ./logs -type f -mmin -10 -print
find ./logs -type f -mtime -1 -print
find . -type f -newermt '2026-01-15 00:00:00' -print
find . -type f -size +100M -ls
find . -type f -perm -0002 -ls

Combiner les filtres et exclure des répertoires

Deux conditions successives doivent être satisfaites ensemble. -o signifie « ou » et les parenthèses regroupent les alternatives. Dans le deuxième exemple, -prune ignore .git et node_modules et l’expression de droite s’applique au reste de l’arborescence.

find . -type f \( -iname '*.jpg' -o -iname '*.png' \) -print
find . -type d \( -name .git -o -name node_modules \) -prune -o -type f -name '*.sh' -print

Chercher des erreurs et examiner les JAR

-exec transmet les chemins comme arguments via {}. Avec +, il regroupe plusieurs chemins par exécution, ce qui convient à grep. Avec \;, il lance une commande par fichier, comme l’exige jar tf. Dans le dernier exemple, -ok demande confirmation pour chaque suppression après examen de la liste.

find ./logs -type f -name '*.log' -mmin -10 -exec grep -niH -- 'ERROR' {} +
find . -type f -name '*.jar' -exec jar tf {} \; | grep -E '\.xml$'
find ./tmp -type f -name '*.tmp' -mtime +7 -print
find ./tmp -type f -name '*.tmp' -mtime +7 -ok rm -- {} \;

lsof

Fichiers par processus et processus par fichier

-p sélectionne un PID, -u un utilisateur et -c un préfixe du nom du processus. -a impose la correspondance de tous les filtres de sélection. Dans la sortie, COMMAND et PID identifient le processus, FD le descripteur et NAME le fichier ou la socket. Remplacez 1234 par le PID examiné.

lsof -p 1234
lsof -u "$USER"
lsof -a -c java -u "$USER"
lsof -- ./logs/application.log
lsof -a -p 1234 -d 1,2

Ports et connexions par processus

-i sélectionne les sockets Internet. -n désactive la résolution de noms et -P conserve les ports sous forme numérique. -sTCP:LISTEN affiche seulement les sockets TCP en écoute. Le dernier exemple associe le PID aux connexions TCP établies.

lsof -nP -iTCP:8080 -sTCP:LISTEN
lsof -nP -iUDP:53
lsof -nP -a -p 1234 -iTCP -sTCP:ESTABLISHED

Répertoires et fichiers supprimés encore ouverts

+d examine le premier niveau et +D parcourt toute l’arborescence, ce qui peut prendre du temps. +L1 montre les fichiers ouverts sans liens. Si le disque reste plein après la suppression d’un journal, cherchez le processus qui le garde ouvert. Sous Linux, les droits peuvent limiter les résultats visibles.

lsof +d ./logs
lsof +D ./logs
lsof +L1
lsof -a -p 1234 +L1

netstat

Ports en écoute et PID

Ces exemples utilisent netstat de net-tools sous Linux. -t sélectionne TCP, -u UDP, -l les sockets en écoute, -n les valeurs numériques et -p le PID et le programme si les droits le permettent. L’état peut être vide pour UDP. -4 et -6 limitent la famille d’adresses.

netstat -lntup
netstat -4 -lnt
netstat -6 -lnu
netstat -lnt | awk '$4 ~ /:8080$/'

Connexions et états TCP

-a inclut les sockets en écoute et les connexions. Local Address désigne l’extrémité locale et Foreign Address l’extrémité distante. ESTABLISHED indique une connexion ouverte. TIME_WAIT suit une fermeture récente. -o ajoute des informations sur les temporisateurs.

netstat -ant
netstat -anto
netstat -ant | awk '$6 == "ESTABLISHED"'
netstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c

Routes, interfaces et statistiques

-r affiche les routes, -i les compteurs par interface et -s les statistiques par protocole. Sous Linux, vous pouvez aussi utiliser ss pour les sockets, ip route pour les routes et ip -s link pour les compteurs par interface.

netstat -rn
netstat -i
netstat -st
ss -lntup
ss -tn state established
ip route
ip -s link

Fichiers et répertoires

Lister, trier et compter

Affichez les droits et les tailles, incluez les fichiers cachés et explorez deux niveaux de l’arborescence. La dernière commande compte les fichiers ordinaires du répertoire courant.

ls -lah
ls -lv
ls -lrth
ls -1 | sort -r
ls -ld */
tree -L 2
find . -maxdepth 1 -type f -printf '.' | wc -c

Chercher par nom ou par contenu

Placez les motifs entre guillemets. Avec grep, -r parcourt les sous-répertoires, -n affiche les numéros de ligne et -w recherche des mots entiers. locate consulte un index.

locate archivo.txt
find . -type f -name '*.jar' -ls
find . -type d -name 'config' 2>/dev/null
find . -type f -name '*.backup' -mmin -2 -ls
find . -type f \( -iname '*.jpg' -o -iname '*.png' \)
grep -rnw -- 'pattern' ./project
grep -ril -- 'pattern' ./project
find . -type f -name '*.xml' ! -exec grep -qF '<device>' {} \; -print

Copier, créer et créer des liens

cp -a copie l’arborescence et préserve les attributs selon les droits disponibles. rm supprime le lien symbolique indiqué.

mkdir -p backup/config
touch example.log
cp -a source/. backup/
ln -s /path/to/source source-link
rm -- source-link

Espace disque

df indique l’espace par système de fichiers. du mesure l’occupation des répertoires. sort -h trie les tailles avec unités.

df -h
du -h -d 2 .
du -sh .[!.]* *
du -ah . | sort -hr | head -n 10
du -x -m . | sort -n | tail -n 20

Traitements par lots

Séparez les noms par un octet nul pour accepter les espaces et les sauts de ligne. Vérifiez la liste avant de remplacer ls par une opération qui modifie les fichiers.

find . -type f -name '*.log' -print0 | xargs -0 -r ls -ld --
find . -type f -name '*.tmp' -print
find . -type f -name '*.tmp' -ok rm -- {} \;

Texte, formats et compression

Fins de ligne et encodage

cat -e affiche les retours chariot sous la forme ^M. Dans Vim, utilisez :set fileformat=unix puis enregistrez avec :wq.

cat -e script.sh
file script.sh
dos2unix script.sh
sed -i 's/\r$//' script.sh
iconv -f UTF-8 -t 'ASCII//TRANSLIT' input.txt > output.txt
iconv -f UTF-8 -t UTF-8 input.txt >/dev/null

Lire et modifier du texte

La deuxième commande affiche les lignes 10 à 20. Écrivez les remplacements dans un nouveau fichier pour vérifier le résultat.

tail -n 100 application.log
sed -n '10,20p' application.log
sed 's/OLD_TEXT/NEW_TEXT/g' input.txt > updated.txt
truncate -s 0 example.log

Archives tar et journaux gzip

Listez le contenu avant l’extraction. Les outils z* consultent directement les journaux compressés.

tar -cf backup.tar source/
tar -czf backup.tar.gz source/
tar -tzf backup.tar.gz
tar -xzf backup.tar.gz -C destination/
find . -type f -name '*.css' -print0 | tar --null -T - -cf styles.tar
gzip -k application.log
zcat application.log.gz
zgrep -i 'error' application.log.gz
zless application.log.gz
zdiff old.log.gz new.log.gz

Processus et diagnostic

CPU, mémoire et disque

Triez les processus par mémoire résidente ou par CPU et examinez la mémoire, l’activité disque et les périphériques bloc.

free -h
vmstat 1
iostat -xz 1
lsblk
sudo fdisk -l
ps aux --sort=-rss | head
ps -eo pid,pcpu,pmem,rss,args --sort=-pcpu | head
ps -eo pid,ppid,stat,args | awk '$3 ~ /^Z/'

Processus et fichiers ouverts

Identifiez le PID avant d’envoyer un signal. SIGTERM permet au processus de s’arrêter proprement.

pgrep -af 'java'
lsof -p 1234 -Fn | grep -i '\.jar$' | sort
lsof +D /var/log
kill -TERM 1234

Journaux et vidages mémoire

Filtrez le journal par démarrage, service ou PID. coredumpctl examine les vidages enregistrés par systemd.

journalctl -xe
journalctl -b -p err
journalctl -u NetworkManager
journalctl _PID=1234
coredumpctl list
coredumpctl info 1234

Analyser les journaux avec awk

Ces exemples supposent un journal avec le client en première colonne, la latence en deuxième et le chemin en septième. Adaptez les champs au format de votre serveur.

awk '$2 > 200 && $7 ~ /[?&]id=/ {print $2, $1, $7}' access.log | sort -nr
awk '$7 ~ /[?&]id=/ {count++} END {print count+0}' access.log
grep -F '2026-01-15' audit.log | grep -F 'example-event' | sort -u

Réseau, TLS et stockage distant

DNS, ports et connexions

Utilisez un hôte de votre environnement autorisé. Une réponse DNS montre ce que voit le résolveur, mais ne suffit pas à établir la présence de NAT.

nslookup example.com
ip addr show
traceroute example.com
nc -zv -w 5 example.com 443
ss -lntup
ss -Htn state established '( sport = :1521 or dport = :1521 )' | wc -l
sudo tcpdump -i any -c 20

Certificats TLS et magasins Java

Examinez le certificat et vérifiez son empreinte par un canal de confiance avant l’importation. keytool demande le mot de passe si nécessaire.

openssl s_client -connect example.com:443 -servername example.com </dev/null
openssl s_client -connect example.com:443 -servername example.com </dev/null \
  | openssl x509 -out server.crt
openssl x509 -in server.crt -noout -subject -issuer -fingerprint -sha256
keytool -importcert -file server.crt -alias example -keystore truststore.p12
keytool -list -keystore truststore.p12

Transférer via SSH

scp copie dans les deux sens. Dans une session sftp, get télécharge et put envoie.

scp example.txt user@host.example:/tmp/
scp user@host.example:/tmp/example.txt .
sftp user@host.example
get example.txt
put example.txt

Montages NFS et CIFS

Vérifiez les montages et testez un point précis avec mount. Pour CIFS, utilisez un fichier d’identifiants local en mode 600. Ces exemples se placent dans /etc/fstab.

server.example:/export /mnt/nfs nfs ro,_netdev 0 0
//server.example/share /mnt/share cifs ro,_netdev,credentials=/etc/samba/share.creds 0 0

Sur le serveur NFS, exportfs affiche les exportations. Sur le client, findmnt affiche les montages. Pour diagnostiquer la connectivité, examinez les règles locales actives du pare-feu.

sudo exportfs -v
sudo mount /mnt/nfs
findmnt
sudo nft list ruleset

Droits et comptes

Modes et propriétaires

La lecture vaut 4, l’écriture 2 et l’exécution 1. Le mode 755 donne rwx au propriétaire et r-x aux autres. Le mode 644 donne rw- au propriétaire et r-- aux autres.

stat example.txt
chmod a+r example.txt
find ./project -type d -exec chmod 755 {} +
find ./project -type f -name '*.php' -exec chmod 644 {} +
sudo chown user:group example.txt

Masque de création

umask retire des bits aux droits demandés. Avec 022, les bases usuelles 777 et 666 donnent 755 aux répertoires et 644 aux fichiers. Les parenthèses limitent le changement à un sous-shell.

umask
(umask 022; mkdir example-dir; touch example-file)

Utilisateurs, groupes et sessions

-aG ajoute un groupe secondaire et conserve les appartenances existantes. newgrp lance un shell avec le groupe choisi. userdel -r supprime aussi le répertoire personnel.

id
groups
w
last
lastlog
write username pts/1
sudo groupadd examplegroup
sudo usermod -aG examplegroup username
newgrp examplegroup
sudo userdel username

Sur les systèmes configurés avec pam_faillock, consultez d’abord les échecs enregistrés et réinitialisez uniquement le compte concerné si nécessaire.

sudo faillock --user username
sudo faillock --user username --reset

Shell, tâches et paquets

Environnement et historique

source exécute le fichier dans le shell courant. bash -x affiche les commandes et leurs arguments développés pendant l’exécution.

printenv
command -v java
whereis java
source ./environment.sh
bash -n script.sh
bash -x script.sh
history
fc -l -10

Planifier et surveiller les tâches

crontab liste ou modifie les tâches récurrentes, at planifie une tâche ponctuelle et watch répète une commande.

crontab -l
crontab -e
at 18:30
watch -n 5 date

Date, distribution et RPM

timedatectl affiche les réglages de l’horloge sur les systèmes avec systemd. rpm -Uvh installe ou met à jour un paquet local et rpm -e le désinstalle par son nom.

date
date -u
timedatectl status
sudo timedatectl set-time '2026-01-15 14:30:00'
cat /etc/os-release
rpm -qa
sudo rpm -Uvh ./example.rpm
sudo rpm -e example

Java, Maven et serveurs

Maven et tests

-DskipTests évite l’exécution des tests. -Dmaven.test.skip=true évite aussi leur compilation dans les plugins compatibles. -U force la vérification des snapshots mis à jour et des versions stables manquantes.

mvn clean install
mvn install -DskipTests
mvn -U clean install -Dmaven.test.skip=true

JVM, bibliothèques et environnement

jcmd peut lister les threads d’une JVM compatible exécutée sous le même compte. Utilisez ldd sur des exécutables de confiance. Adaptez les chemins et le SID à votre installation.

jcmd -l
jcmd 1234 Thread.print
ldd /bin/ls
export JAVA_HOME=/opt/jdk
export ORACLE_HOME=/opt/oracle
export ORACLE_SID=EXAMPLE
export PATH="$JAVA_HOME/bin:$ORACLE_HOME/bin:$PATH"

Masque de création de Tomcat

Lorsque Tomcat démarre via catalina.sh, vous pouvez définir UMASK dans bin/setenv.sh. Avec 0027, les bases 777 et 666 donnent 750 aux répertoires et 640 aux fichiers.

UMASK=0027