2>&1, >, >>, 2>/dev/null... Si ces symboles dans votre terminal Linux ou macOS vous font autant flipper qu'un regex, respirez un grand coup ! Quand vous aurez lu cet article, vous verrez qu'en fait c'est super simple à comprendre, et en 5 minutes vous saurez enfin ce que vous copiez-collez depuis des années depuis StackOverflow.
En fait, dans les shells Unix (bash, zsh, etc.), y'a 3 canaux de base : stdin (entrée, numéro 0), stdout (sortie normale, numéro 1) et stderr (les erreurs, numéro 2). Tout le reste, de > à 2>/dev/null, découle de ces 3 numéros.
> - Écrire dans un fichier (et tout écraser)
echo "Salut" > fichier.txt
Ça redirige stdout vers fichier.txt. Si le fichier existe déjà... c'est mort, il est écrasé sans sommation. Du coup, faites gaffe avec vos logs, une commande mal placée et ce sont des heures de données qui disparaissent.
D'ailleurs, si vous êtes du genre parano (et oui, vous avez raison !), set -o noclobber dans votre .bashrc empêchera > d'écraser un fichier existant lors d'une commande tapée à la main. Pour y arriver, il faudra utiliser >| pour forcer.
>> - Ajouter à la suite
echo "Ligne 2" >> fichier.txt
Même principe que >, sauf que ça ajoute à la fin au lieu d'écraser. C'est ce que vous voulez 99% du temps pour des logs (sauf si vous voulez repartir de zéro, là > fait le job). Une lettre de différence entre "tout va bien" et "où sont passés mes logs, boudiouuu ???".
2> - Rediriger les erreurs
commande_foireuse 2> erreurs.log
Le 2 c'est stderr, en gros (y'a pas d'espace entre le 2 et le >, sinon bash croit que 2 est un argument). Tout ce qui sort en erreur finit dans erreurs.log au lieu de polluer votre terminal. Perso, je trouve ça super pratique pour garder une trace propre quand vous lancez des scripts via crontab -e.
Et 2>> existe aussi, pour cumuler les erreurs au fil du temps au lieu d'écraser le fichier à chaque exécution.
2>&1 - Fusionner erreurs et sortie normale
commande > output.log 2>&1
Le fameux ! Le &1 dit à bash "le 1 c'est un file descriptor, pas un fichier qui s'appelle littéralement 1". Du coup stderr (2) est redirigé vers le même endroit que stdout (1), ou plutôt vers là où stdout pointe au moment où bash évalue la ligne. Ça va, vous suivez toujours ? ^^
Attention, l'ordre compte ! Bash lit les redirections de gauche à droite. > output.log 2>&1, stdout pointe vers le fichier, puis stderr suit... tout va dans le fichier. 2>&1 > output.log, stderr copie stdout qui pointe ENCORE vers le terminal, puis stdout est redirigé vers le fichier. Résultat, les erreurs restent dans votre terminal. Le piège classique.
Et &> fait la même chose en plus court :
commande &> output.log
&> est super pratique, mais spécifique à bash / zsh donc pour la portabilité, préférez quand même > fichier 2>&1.
2>/dev/null - Le trou noir
find / -name "*.conf" 2>/dev/null
/dev/null, c'est le trou noir d'Unix. Tout ce que vous envoyez là-dedans disparaît. Super pratique avec find qui vous crache 200 "Permission denied" pour un seul résultat utile.
Et si vous voulez TOUT faire disparaître (stdout + stderr) ? Un petit &>/dev/null et c'est réglé. Pratique dans vos scripts /etc/cron.d/ quand vous voulez zéro bruit (bon, j'exagère un chouïa, je sais...).
Si vous aimez les
raccourcis bash
, j'ai aussi ce qu'il faut.
Bref, voilà ce sont juste 5 opérateurs à retenir, et avec ça vous couvrez à peu près tout. Donc la prochaine fois que vous copierez un 2>&1, au moins vous saurez pourquoi.
Si vous utilisez Ubuntu 26.04, vous avez peut-être remarqué un truc bizarre dernièrement en tapant votre mot de passe sudo... Ouiiiiii, y'a des petites étoiles qui apparaissent !! Pas de panique, c'est "normal". Enfin, c'est nouveau...
En effet, sudo-rs, la réécriture en Rust de la bonne vieille commande sudo, a décidé d'activer pwfeedback par défaut. En gros, quand vous faites un sudo apt install bidule, au lieu du trou noir habituel, vous voyez maintenant des ***** défiler pendant la saisie du mot de passe. C'est un changement qui casse une convention vieille de 40 ans... et ça, forcément, ça fait du bruit !
Pour rappel, Ubuntu a basculé sur sudo-rs (le remplaçant en Rust du bon vieux sudo en C) depuis la version 25.10. Ça fait partie du même mouvement de réécriture des outils système en Rust,
comme les coreutils
dont je vous avais parlé. Et la 26.04 vient de "cherry-picker" comme on dit, un patch upstream qui active le feedback visuel par défaut.
Un bug report sur Launchpad (
#2142721
) est bien sûr arrivé direct, en mode vénère genre "*ÇA FAIT DES DÉCENNIES qu'on n'affiche pas la longueur du mot de passe pour empêcher le shoulder surfing ! C'est quoi ce bordel !!?? *"
Et la réponse des devs : Won't Fix. Circulez les relous !
En fait, leur argument c'est que le bénéfice sécurité est "infinitésimal". Parce que bon, votre mot de passe sudo c'est le même que celui de votre session (celui que vous tapez à l'écran de login, devant tout le monde). Et le bruit des touches trahit déjà la longueur de toute façon. Du coup, ils ont préféré régler le problème UX qui paume les débutants depuis le début des années 80.
Perso, le truc qui me gonfle c'est pour les tutos vidéo. Quand vous faites un screencast, les astérisques révèlent la longueur de votre mot de passe à tous vos spectateurs. Du coup faut aller reparamétrer chaque machine avant de filmer ou faire du masquage en post prod. C'est pas la fin du monde, mais bon, la flemme...
Alors pour désactiver ces jolies zétoiles :
sudo visudo
Et ajoutez cette ligne à la fin de /etc/sudoers :
Defaults !pwfeedback
Sauvegardez (Ctrl+X sous nano), et c'est réglé. Attention, ne touchez à rien d'autre dans ce fichier, une erreur de typo et sudo ne marchera plus. Grâce à cette manip, ce sera retour au trou noir ! Youpi !
Si vous bossez sur des serveurs distants, vous connaissez cette douleur... D'un côté, vous avez votre terminal local aux petits oignons, vos alias, vos plugins... et hop, un petit ssh root@serveur et vous vous retrouvez avec un shell tout pourri, tout basique. Mais c'était sans compter sur Joknarf qui a pondu
TheFly
, un gestionnaire de plugins shell qui téléporte votre environnement via SSH ou sudo en un instant.
Le principe est pas bête du tout vous allez voir. En fait, vous installez vos plugins et dotfiles dans ~/.fly.d/ sur votre machine, et quand vous lancez flyto user@serveur, tout est empaqueté et envoyé dans /tmp/.fly.$USER/ distant. Prompt perso, alias, fonctions... tout débarque avec vous, un peu comme un sac à dos pour votre shell.
Et le truc bien, c'est que ça ne modifie RIEN sur le serveur distant car tout vit dans /tmp, donc quand vous vous déconnectez... pouf, tout a disparu. Pas de fichier qui traîne, pas de .bashrc modifié donc c'est plutôt safe pour les environnements de prod où vous ne voulez pas laisser de traces.
Ça marche avec bash, zsh et même ksh (pour les nostalgiques). L'installation, c'est un curl en une ligne (à relire comme d'hab), ou alors brew, dnf, paquets .deb... y'a le choix. C'est du pur shell POSIX, donc y'a ZÉRO dépendance externe. Attention par contre, si votre ~/.fly.d/ dépasse 128 Ko, ça risque de ramer sur des connexions un peu lentes.
Ah et y'a aussi flyas pour faire pareil en sudo (attention, ça téléporte aussi vos plugins, donc vérifiez que ça colle avec votre politique de sécu), et flysh pour switcher de shell sans perdre vos réglages. Et puis flypack génère une archive auto-extractible pour avoir un script shell qui s'installe tout seul. Pas mal donc aussi pour partager votre config.
Côté plugins, c'est pas
Oh My Zsh
avec ses 350+ plugins, mais y'a l'essentiel. Un prompt custom (nerdp), un historique amélioré (redo), de la navigation de répertoires (seedee)... et shell-ng qui regroupe le tout d'un coup. Perso, c'est bien suffisant je trouve.
D'ailleurs si vous êtes du genre à
customiser votre shell
au millimètre, TheFly s'intègrera bien dans votre workflow. En plus c'est sous licence, open source, et ça tourne sur Linux, macOS et même SunOS (bon ok, je sais, quasi personne utilise SunOS en 2026 mais bon...).
Voilà, comme ça si vous gérez une dizaine de serveurs au quotidien, ça vous fera gagner un paquet de temps !
Vous trouvez que votre Linux met 3 plombes à démarrer et vous regardez l'écran de boot défiler en vous demandant ce qui peut bien prendre autant de temps ?
Hé bien bonne nouvelle los amigos del manchos, si vous utilisez une distribution basée sur systemd (comme Debian, Ubuntu, Fedora, Arch, et compagnie), il existe un outil natif déjà installé qui permet de diagnostiquer tout ça :
systemd-analyze
Ce truc c'est un peu le médecin légiste de votre démarrage système. Il dissèque chaque étape, identifie les unités qui traînent la patte, et vous permet de comprendre où part votre précieux temps. Pour ceux qui débarquent, systemd est le système d'initialisation adopté par la plupart des distributions modernes, et il permet justement de lancer plein de trucs en parallèle pour gagner du temps.
Pour commencer, la commande de base c'est tout simplement :
systemd-analyze time
Elle vous sort un récapitulatif du temps passé dans chaque phase, généralement le kernel, l'initrd (le RAM disk initial), et l'espace utilisateur. Selon votre configuration, vous pourriez aussi voir passer le firmware ou le bootloader. Ça donne un truc du genre "Startup finished in 2.5s (kernel) + 19s (initrd) + 47s (userspace)". Déjà là, vous savez si le problème vient de votre noyau ou de vos services.
Mais le truc vraiment cool pour fouiller un peu plus dans le détail, c'est :
systemd-analyze blame
Cette commande vous balance la liste des unités systemd, triées par le temps qu'elles ont mis à s'initialiser. C'est un peu comme un classement des cancres de la Ve République. Vous voyez direct qui sont les boulets qui ralentissent tout le monde. Genre ce service réseau qui attend 20 secondes une connexion qui n'arrivera jamais, ou ce truc de logs qui prend son temps pour se réveiller.
Attention quand même, y'a un petit piège car un service qui met 10 secondes à démarrer ne signifie pas forcément que votre boot est rallongé de 10 secondes. Pourquoi me diriez-vous ? Hé bien parce que systemd lance plein de trucs en parallèle. Un service peut donc prendre son temps tranquille pendant que d'autres bossent en même temps sans bloquer personne.
Pour vraiment piger ce qui coince sur le chemin critique, lancez plutôt :
systemd-analyze critical-chain
Ça, c'est le top car ça vous montre la chaîne critique, c'est-à-dire la séquence exacte d'événements qui détermine vraiment votre temps de démarrage final. Vous voyez exactement quelles unités sont sur le chemin et lesquelles attendent les autres. Le temps après le "@" indique quand l'unité est devenue active, et le temps après le "+" montre combien de temps elle a pris pour démarrer. C'est bien plus fiable que blame pour identifier les vrais goulots d'étranglement.
Et si vous êtes du genre visuel, y'a même :
systemd-analyze plot > boot.svg
Et avec ça, hop, ça génèrera un magnifique graphique SVG qui représentera la chronologie de votre séquence de boot. Vous pourrez ensuite l'ouvrir dans votre navigateur et voir en un coup d'oeil ce qui démarre quand et combien de temps ça dure. C'est super pratique pour épater la galerie ou juste visualiser l'ordre de lancement.
Maintenant, une fois que vous avez identifié les coupables, comment on fait pour accélérer tout ça ?
Déjà, vous pouvez désactiver les services dont vous n'avez pas besoin avec :
sudo systemctl disable nom-du-service
Gardez en tête que disable supprime seulement le lancement automatique au boot, mais n'empêche pas une activation indirecte via une dépendance ou un socket. Si vous voulez vraiment qu'un service ne démarre plus jamais, utilisez mask. Et surtout, ne désactivez pas n'importe quoi comme un bourrin, hein ! Je vous connais ! Non, non, avant de toucher à un service, vérifiez d'abord ce qui en dépend :
systemctl list-dependencies nom-du-service
Car si vous cassez un truc important, votre système risque de ne plus démarrer correctement. Donc si vous n'êtes pas sûr, gardez vos mimines dans vos poches. D'ailleurs, si vous bidouillez vos fichiers d'unité (comme pour
automatiser Shiori
par exemple), sachez que vous pouvez aussi les vérifier pour débusquer les erreurs avec :
systemd-analyze verify /chemin/vers/unite.service
C'est super pratique pour éviter les mauvaises surprises au prochain redémarrage. Voilà et si vous cherchez d'autres astuces pour
optimiser votre machine Linux
, n'hésitez pas à jeter un oeil à mon article sur TLP.
Ah j'oubliais, y'a aussi la commande systemd-analyze security qui permet d'analyser le niveau d'exposition sécurité de vos services. Elle attribue un score heuristique d'exposition basé sur les options de durcissement (hardening) actives. Plus le score est bas, mieux le service est protégé contre d'éventuelles failles. C'est donc un excellent point de départ pour identifier les services qui mériteraient un peu plus de love côté isolation.
Bref, cet analyseur de démarrage c'est vraiment l'outil indispensable pour qui veut comprendre et optimiser son boot Linux. C'est natif, c'est puissant, et ça vous évite de passer des heures à chercher pourquoi votre machine met autant de temps que vous à se réveiller le matin ^^.
Sous Windows 11/10, les fichiers et dossiers stockés sur un disque NTFS possèdent des autorisations (ACL) qui définissent précisément quels utilisateurs peuvent lire, modifier ou supprimer leur contenu. Si ces permissions peuvent être configurées via l’interface graphique, PowerShell permet d’aller beaucoup plus loin : afficher, modifier et automatiser la gestion des droits d’accès à grande échelle.
Grâce aux cmdlets Get-Acl et Set-Acl, vous pouvez :
afficher les permissions d’un dossier ou d’un fichier,
ajouter ou retirer des autorisations,
appliquer les mêmes règles à plusieurs répertoires,
et même changer le propriétaire d’un dossier bloqué.
Cette approche est particulièrement utile pour les administrateurs ou utilisateurs avancés souhaitant :
automatiser la gestion des droits sur un serveur ou un poste multi-utilisateurs,
corriger des problèmes d’accès (“Accès refusé”) sans interface graphique,
ou déployer des permissions identiques sur plusieurs répertoires partagés.
Get-ChildItem -Recurse → parcourt récursivement toute l’arborescence.
ContainerInherit,ObjectInherit → applique la règle aux sous-dossiers et fichiers.
Cette commande réécrit les ACL de tous les sous-dossiers. Utilisez-la avec prudence sur un volume contenant beaucoup de fichiers.
Supprimer toutes les autorisations personnalisées (réinitialiser les ACL)
Pour revenir à la configuration par défaut (héritée du dossier parent) :
icacls "C:\Partage" /reset /T
Cette commande supprime toutes les règles explicites et rétablit les permissions héritées. Elle est utile pour corriger des erreurs “Accès refusé” ou des droits corrompus.
Changer le propriétaire d’un dossier (SetOwner)
Pour appliquer le changement de propriétaire à tout un dossier et ses sous-dossiers :
Ce script attribue automatiquement les permissions “Modifier” à plusieurs utilisateurs pour un même dossier.
PowerShell permet d’automatiser facilement des opérations complexes, comme appliquer des autorisations à plusieurs répertoires ou générer un rapport d’audit des droits.
Tableau récapitulatif des cmdlets PowerShell pour gérer les permissions NTFS
Cmdlet / Commande
Fonction principale
Syntaxe de base
Exemple d’utilisation
Get-Acl
Affiche la liste des autorisations (ACL) appliquées à un fichier ou dossier.
Get-Acl "C:\Dossier"
Affiche les permissions et le propriétaire du dossier.
Set-Acl
Applique ou met à jour des autorisations sur un fichier ou dossier.
Set-Acl "C:\Dossier" $acl
Met à jour les ACL selon les règles définies dans $acl.
Change le propriétaire pour le groupe Administrateurs.
Get-ChildItem -Recurse + Set-Acl
Applique des permissions à tous les sous-dossiers et fichiers.
`Get-ChildItem « C:\Dossier » -Recurse
Set-Acl -AclObject $acl`
**Get-Acl
Format-List**
Affiche les ACL dans un format lisible.
`Get-Acl « C:\Dossier »
icacls (CMD)(complément)
Réinitialise ou sauvegarde les ACL en ligne de commande.
icacls "C:\Dossier" /reset /T
Réinitialise toutes les permissions NTFS du dossier.
takeown (CMD)(complément)
Reprend la propriété d’un dossier ou fichier.
takeown /f "C:\Dossier" /r /d y
Attribue la propriété au compte administrateur courant.
Notes importantes
Les cmdlets PowerShell (Get-Acl, Set-Acl, etc.) sont plus flexibles et scriptables que les commandes classiques (icacls, takeown).
Pour toute commande modifiant les ACL, il est recommandé d’exécuter PowerShell en tant qu’administrateur.
Avant de modifier massivement des droits, vous pouvez sauvegarder les ACL avec : icacls "C:\Dossier" /save C:\backup_acl.txt /T
PowerShell ne demande pas de confirmation avant d’appliquer une modification via Set-Acl. Une erreur dans la variable $acl ou dans les permissions héritées peut supprimer des droits critiques.
Bonnes pratiques et précautions
Ne jamais appliquer un script sans sauvegarder les ACL : icacls "C:\Dossier" /save C:\Backup_ACL.txt /T
Utiliser la commande Test-Path pour vérifier les chemins avant exécution.
Toujours tester sur un dossier isolé avant d’appliquer sur un volume complet.
Exécuter PowerShell en mode Administrateur.
Une mauvaise manipulation des ACL peut rendre un dossier ou un disque inaccessible. Pensez à sauvegarder vos permissions avant toute modification en masse.