← retour aux snippets

sudo tee: écrire un fichier sans éditeur

Créer ou modifier un fichier root de façon sûre sans ouvrir d'éditeur.


objectif

Écrire ou modifier des fichiers nécessitant les privilèges root sans utiliser un éditeur, en évitant les pièges des redirections avec sudo.

code minimal

# écrire (écrase) /etc/app.conf
echo 'enabled=true' | sudo tee /etc/app.conf >/dev/null

utilisation

# ajouter (append) une ligne en fin de fichier
echo 'feature_x=true' | sudo tee -a /etc/app.conf >/dev/null

# écrire plusieurs lignes avec here-doc sécurisé
sudo tee /etc/app.conf >/dev/null <<'EOF'
enabled=true
port=8080
EOF

# créer le dossier cible au besoin avec les bons droits
sudo install -d -m 0755 /etc/myapp
echo 'mode=prod' | sudo tee /etc/myapp/app.conf >/dev/null

# écriture atomique dans /etc (temp dans le même dossier)
tmp="$(sudo mktemp -p /etc .app.conf.XXXXXX)"
sudo tee "$tmp" >/dev/null <<'EOF'
enabled=true
port=8080
EOF
sudo mv -f "$tmp" /etc/app.conf

# définir précisément propriétaire et permissions
echo 'enabled=true' | sudo tee /etc/app.conf >/dev/null
sudo chown root:root /etc/app.conf
sudo chmod 0644 /etc/app.conf

# idempotent: n'ajouter la ligne que si absente
grep -qxF 'feature_y=true' /etc/app.conf || echo 'feature_y=true' | sudo tee -a /etc/app.conf >/dev/null

variante(s) utile(s)

# avec envsubst pour templater puis écrire en root
export APP_PORT=8080
envsubst '${APP_PORT}' < app.conf.tmpl | sudo tee /etc/app.conf >/dev/null

# éditer en toute sécurité avec sudoedit (ouvre votre éditeur, copie atomiquement)
sudoedit /etc/app.conf

# lecture protégée (ne pas afficher les secrets à l'écran)
sudo cat /etc/app.conf > /tmp/app.conf.safe && sed -n '1,5p' /tmp/app.conf.safe && rm -f /tmp/app.conf.safe

notes

  • sudo echo ... > /fichier échoue car la redirection > est faite par le shell non privilégié; sudo tee contourne ce piège.
  • utilisez -a pour ajouter sans écraser; évitez >> avec sudo.
  • pour une écriture atomique, créez le fichier temporaire dans le même dossier cible puis mv -f sous sudo.
  • définissez explicitement permissions et propriétaire pour les fichiers de configuration sensibles.