Les communications interprocessus (IPC - Inter-Process Communication) sont des mécanismes qui permettent à différents processus d'échanger des données et de se synchroniser. Dans les systèmes d'exploitation comme Linux/Unix, ces mécanismes sont essentiels pour la coopération entre applications.
|
dans le shell, pipe()
en C# Exemple de tube anonyme dans le shell
ls -la | grep "txt"
# Création d'un tube nommé
mkfifo mon_tube
# Envoyer un signal à un processus
kill -SIGUSR1 1234
# Exemple simple de socket en Python
# Serveur
import socket
s = socket.socket(socket.AF_UNIX)
s.bind('/tmp/socket')
Mécanisme | Avantages | Inconvénients |
---|---|---|
Tubes | Simple, standard | Unidirectionnel, limité aux processus apparentés (sauf FIFO) |
Signaux | Léger, asynchrone | Très limité en données |
Mémoire partagée | Très rapide | Complexe à synchroniser |
Files de messages | Structuré, asynchrone | Plus lent que la mémoire partagée |
Sockets | Flexible, réseau | Plus complexe à mettre en œuvre |
Ces mécanismes peuvent être combinés selon les besoins spécifiques des applications.
Les entrées/sorties (E/S), souvent abrégées en I/O pour Input/Output en anglais, sont un aspect fondamental de tout système informatique, y compris Linux. Elles font référence au processus de transfert de données entre un périphérique (comme un disque dur, un clavier, un écran, etc.) et le système d'exploitation (Linux dans ce cas) ou entre différents processus en cours d'exécution dans le système.
Dans les systèmes d’exploitation Unix, il y a ce qu’on appelle les flux de communication qui permettent d’échanger avec l’utilisateur. Il y a le flux d’entrée, normalement le clavier, le flux de sortie normalement l’écran et le flux d’erreur, normalement aussi l’écran.
commande < fichier
: Utilise le contenu du fichier comme entrée pour la commande# Utiliser un fichier comme entrée
sort < liste_noms.txt
wc –w < liste.txt
commande > fichier
: Redirige la sortie de la commande vers un fichier (écrase le contenu existant)commande >> fichier
: Redirige la sortie de la commande vers un fichier (ajoute au contenu existant)# Enregistrer la sortie d'une commande dans un fichier
ls -la > liste_fichiers.txt
# Ajouter des informations à un fichier existant
echo "Nouvelle ligne" >> notes.txt
commande 2> fichier
: Redirige les erreurs vers un fichiercommande 2>> fichier
: Ajoute les erreurs à un fichier# Rediriger les erreurs dans un fichier séparé
find / -name "*.conf" > configs.txt 2> erreurs.txt
# Ignorer les erreurs en les envoyant vers "null"
find / -name "*.conf" 2> /dev/null
commande > fichier 2>&1
: Redirige à la fois la sortie standard et les erreurs vers le même fichiercommande &> fichier
: Notation simplifiée pour rediriger stdout et stderr (Bash)Les commandes filtres sont des outils essentiels dans l'environnement Unix/Linux qui prennent une entrée (souvent depuis un fichier ou stdin), la transforment selon certains critères, et produisent une sortie. Elles sont conçues pour être utilisées avec les tubes (pipes) et les redirections.
Ces commandes traitent ou manipulent des données à la volée. Elles sont généralement utilisées en combinaison avec des tubes (pipes) pour prendre en entrée le texte généré par une commande et produire un texte modifié en sortie, qui peut ensuite être utilisé par d'autres commandes ou être sauvegardé dans un fichier. Les commandes filtres sont extrêmement utiles pour effectuer des opérations de traitement de texte simples ou avancées dans l'environnement Unix/Linux.
Cette commande permet de rechercher des motifs (patterns) dans un flux de texte ou dans un fichier. Elle est souvent utilisée pour extraire des lignes de texte qui correspondent à un motif spécifique.
# Rechercher "erreur" dans un fichier
grep "erreur" fichier.log
# Rechercher de façon insensible à la casse
grep -i "warning" fichier.log
# Afficher le numéro de ligne
grep -n "mot-clé" fichier.txt
# Utiliser des expressions régulières
grep -E "mot1|mot2" fichier.txt
L'éditeur de flux (Stream Editor) est utilisé pour effectuer des transformations de texte sur un flux de données. Il permet de rechercher et de remplacer du texte, de supprimer des lignes, et d'effectuer d'autres opérations de traitement de texte.
# Remplacer une chaîne par une autre
sed 's/ancien/nouveau/' fichier.txt
# Remplacer toutes les occurrences sur chaque ligne
sed 's/ancien/nouveau/g' fichier.txt
# Supprimer certaines lignes
sed '5d' fichier.txt # Supprime la 5ème ligne
sed '/motif/d' fichier.txt # Supprime les lignes contenant "motif"
Cette commande est un puissant outil de traitement de texte qui permet de diviser les lignes en champs, d'effectuer des calculs, d'appliquer des conditions et de formater les données.
# Afficher certaines colonnes
awk '{print $1, $3}' fichier.txt
# Filtrer les lignes selon une condition
awk '$3 > 100 {print $0}' donnees.txt
# Calculer la somme d'une colonne
awk '{sum += $1} END {print sum}' nombres.txt
Trie les lignes d'un fichier ou d'un flux de texte en ordre alphabétique ou numérique
# Tri simple
sort fichier.txt
# Tri numérique
sort -n nombres.txt
# Tri inversé
sort -r fichier.txt
# Tri sur une colonne spécifique
sort -k 2 fichier.txt
Supprime les lignes en double consécutives d'un fichier ou d'un flux de texte.
# Supprimer les doublons
sort fichier.txt | uniq
# Compter les occurrences
sort fichier.txt | uniq -c
Traduit ou supprime des caractères.
# Remplacer des caractères
cat fichier.txt | tr 'a-z' 'A-Z' # Convertit en majuscules
# Supprimer des caractères
cat fichier.txt | tr -d '\n' # Supprime les sauts de ligne
Affichent le début ou la fin d'un fichier.
# Afficher les 10 premières lignes
head fichier.txt
# Afficher les 5 premières lignes
head -n 5 fichier.txt
# Afficher les 10 dernières lignes
tail fichier.txt
# Suivre les ajouts à un fichier (très utile pour les logs)
tail -f /var/log/syslog
Extrait des sections de chaque ligne.
# Extraire les 3 premiers caractères de chaque ligne
cut -c 1-3 fichier.txt
# Extraire du 5ème au dernier caractère
cut -c 5- fichier.txt
# Extraire seulement le 1er, 3ème et 5ème caractère
cut -c 1,3,5 fichier.txt
# Extraire les noms d'utilisateurs du fichier /etc/passwd
cut -d":" -f1 /etc/passwd
# Extraire les répertoires personnels
cut -d":" -f6 /etc/passwd
# Extraire les extensions de fichiers (séparateur = point)
ls -1 | cut -d"." -f2
# Extraire les noms d'hôtes d'un fichier CSV
cut -d"," -f2 serveurs.csv
# Extraire plusieurs champs non contigus (1er et 3ème)
cut -d":" -f1,3 /etc/passwd
# Extraire l'adresse IP de la sortie ifconfig
ifconfig eth0 | grep "inet " | cut -d" " -f10
# Extraire le deuxième champ en utilisant des espaces comme délimiteurs
ps aux | grep nginx | cut -d" " -f2
# Obtenir les ports ouverts à partir de la commande netstat
netstat -tuln | grep LISTEN | cut -d":" -f2 | cut -d" " -f1
# Extraire les adresses email d'un fichier (domaine seulement)
cut -d"@" -f2 emails.txt
# Extraire une plage de champs (du 2ème au 4ème)
cut -d"," -f2-4 donnees.csv
Compte les lignes, mots et caractères.
# Compte complet
wc fichier.txt
# Compter seulement les lignes
wc -l fichier.txt
La commande Find permet de rechercher des fichiers et répertoires selon divers critères. Voici des exemples pratiques:
Recherche par nom:
# Trouver tous les fichiers nommés "config.txt"
find /home -name "config.txt"
# Recherche insensible à la casse
find /var -iname "*.conf"
# Utiliser des jokers
find /etc -name "*.d"
# Recherche avec négation (tous sauf .txt)
find . -not -name "*.txt"
Recherche par type:
# Uniquement les fichiers normaux
find /home/user -type f
# Uniquement les répertoires
find /etc -type d
# Uniquement les liens symboliques
find /usr/bin -type l
Recherche par type:
# Uniquement les fichiers normaux
find /home/user -type f
# Uniquement les répertoires
find /etc -type d
# Uniquement les liens symboliques
find /usr/bin -type l
Recherche par taille:
# Fichiers plus grands que 100 Mo
find /var -type f -size +100M
# Fichiers exactement de 1 Ko
find . -size 1k
# Fichiers moins de 10 octets
find . -size -10c
Recherche par date:
# Fichiers modifiés il y a moins de 7 jours
find /home -mtime -7
# Fichiers accédés il y a plus de 30 jours
find /var/log -atime +30
# Fichiers dont les attributs ont changé dans les dernières 24 heures
find /etc -ctime -1
Recher par propriétaire/permissions:
# Fichiers appartenant à l'utilisateur "jean"
find /home -user jean
# Fichiers appartenant au groupe "dev"
find /opt -group dev
# Fichiers avec permissions exactes 644
find . -perm 644
# Fichiers exécutables
find /usr/local/bin -perm /u+x
Les "tubes" dans Linux, souvent appelés "pipes", sont des mécanismes puissants qui permettent de connecter la sortie d'une commande (le flux de données) à l'entrée d'une autre commande. Les tubes sont représentés par le symbole | (barre verticale) dans la ligne de commande. Ils facilitent la manipulation et le traitement des données en permettant à plusieurs commandes de travailler ensemble de manière séquentielle. Voici comment fonctionnent les tubes dans Linux :
Exemple : commande1 | commande2
# Lister les fichiers et filtrer ceux contenant "log"
ls -la | grep "log"
# Compter le nombre de fichiers dans un répertoire
ls | wc -l
# Afficher les 5 plus gros fichiers d'un répertoire
du -h | sort -rh | head -5
Traitement en chaîne : Vous pouvez chaîner autant de commandes que nécessaire en utilisant des tubes. Chaque commande traite les données reçues de la commande précédente et peut effectuer différentes opérations sur ces données.
Exemple : commande1 | commande2 | commande3
Exemple concret : Un exemple courant d'utilisation des tubes est de filtrer un fichier texte. Par exemple, vous pouvez utiliser cat pour afficher le contenu d'un fichier, puis le rediriger vers grep pour rechercher des lignes contenant un certain motif, et enfin vers sort pour trier ces lignes.
Exemple : cat fichier.txt | grep "motif" | sort
Dans cet exemple, le contenu de fichier.txt est lu par cat, puis filtré par grep, et enfin trié par sort. Chaque commande travaille avec les données produites par la précédente grâce au tube
La principale différence réside dans le fait que les "filtres" sont des commandes individuelles qui transforment ou filtrent des données, tandis que les "tubes" sont des mécanismes de liaison qui permettent de chaîner plusieurs commandes ensemble pour effectuer des opérations complexes en séquence