Linux : les commandes sed que l’on doit connaître
L'éditeur de flux Linux est utile pour exécuter des scripts. Voici quelques exemples de commandes pour en tester l’étendue.
Les administrateurs Linux qui veulent modifier les fichiers sans écraser l'original ont de nombreuses options, mais l'un des outils les plus efficaces est l'éditeur de flux – comprendre la commande sed (pour Stream Editor).
L'éditeur de flux est intégré par défaut dans la plupart des distributions Linux. Il vous permet d'effectuer des manipulations de fichiers texte dans l’OS, en ayant recours à certaines commandes.
Comme la plupart des modules de Linux, sed peut traiter les entrées courantes sous la forme de flux, ce qui en fait un outil de script efficace. Vous pouvez l'utiliser comme un simple outil Rechercher / Remplacer, comme dans l'exemple ci-dessous. La commande recherche les occurrences de one et le remplace par two. La commande est fermée par un /g.
Sed 's/one/two/g' inputfile outputfile
Cette commande Linux sed peut par exemple vous aider à localiser et créer une nouvelle version d'un fichier de configuration. Lorsque ces fonctions sont exécutées dans le cadre d'un script, elles sont répétables et cohérentes - vous pouvez donc appliquer rapidement certaines modifications.
Mais le but principal de sed est de changer le contenu des fichiers texte. Il utilise certains commutateurs importants. Le /s signifie recherche, et cette commande est délimitée par /g. Le commutateur -i exécute la commande sur le fichier en place - il modifie directement le fichier.
sed -i 's/Port 22/Port 10000/g' /etc/ssh/sshd_config
Dans cet exemple, le numéro de port utilisé dans le serveur Secure Shell dans le fichier /etc/ssh/sshd_config passe du port par défaut 22 au port 10000.
Modifier les fichiers
Il est possible d'éditer un fichier avec sed, mais cela est quelque peu mal vu. L'édition ad hoc peut entraîner des problèmes parce que sed n'a pas accès au code source complet et qu'il ne peut pas identifier les fautes de frappe. De plus, cela risque de compromettre le fichier d'origine parce qu'il n'y a aucun moyen de revenir au code d'origine une fois la modification effectuée.
Vous pouvez utiliser le commutateur -e pour spécifier plusieurs changements en une seule fois. Encore une fois, le fichier sshd_config.conf facilite le changement de plusieurs lignes. Le script ci-dessous peut sembler complexe, mais l'OS passe plusieurs modifications sed, chacun préfixé par -e.
En utilisant le fichier sshd_config, vous pouvez modifier le numéro de port, désactiver l'authentification par mot de passe et activer l'authentification par clé publique en une seule étape.
sed -i -e 's/Port 22/Port 10000/g' -e '
s/PermitRootLogin yes/PermitRootLogin no/g' -e '
s/PasswordAuthentication yes/PasswordAuthentication no/g' -e '
s/#PasswordAuthentication no/#PasswordAuthentication no/g' /etc/ssh/sshd_config
Les fonctions Rechercher / Remplacer sont sur une nouvelle ligne ; casser une commande avec \ ne fonctionne pas parce que sed la traite comme un caractère spécial.
Combiner les commandes sed
Vous pouvez aussi chaîner plusieurs commandes sed pour changer l'emplacement d'une application. La modification manuelle des chemins d'accès aux fichiers laisse une grande marge d'erreur, mais l'automatisation peut vous faciliter la vie.
Les backslashes qui font office de délimiteurs peuvent ne pas fonctionner pour certains scripts, mais sed vous permet de changer le délimiteur. Par exemple, disons que vous disposez d’un fichier log nommé example.conf avec le contenu suivant :
logpath = /var/log/mylogfile.log
Pour changer ce chemin en /my/alternate/path/newlog.log, vous pouvez utiliser | comme délimiteur car / ne fonctionne pas dans les chemins du système de fichiers.
sed -i 's|/var/log/mylogfile.log|/my/alternate/path/newlog.log|g' exemple.conf
Une autre façon d'utiliser les commandes sed incluent est débuter dans le pattern de recherche avec le préfixe ^##MyComment ; ceci recherche les lignes commençant par #MyComment. Vous pouvez l'utiliser du côté sortie pour créer une nouvelle ligne et remplacer une ligne existante. Vous pouvez également rechercher le contenu à la fin d'une ligne en utilisant le caractère $.
Pour voir des exemples plus avancés, utilisez la commande man sed. Elle donne accès à une documentation plus détaillée des commandes et de la syntaxe.