GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Utilisation de Sed pour mettre à jour le fichier Grub ?

Je suis novice dans l'utilisation de sed mais j'apprends rapidement à l'aimer pour sa flexibilité générale en matière d'automatisation. Je cherche à exécuter un script avec divers contrôles de sécurité chaque fois que je déploie un nouveau système, et une partie de cela m'oblige à verrouiller le GRUB. Je cherche à déverrouiller l'option générale d'Ubuntu à partir du menu GRUB afin que n'importe qui puisse l'utiliser ensuite sans mot de passe, tout en gardant tout le reste protégé par un mot de passe.

Cela étant dit, je cherche à rechercher une ligne spécifique dans le fichier /boot/grub/grub.cfg et à ajouter -unrestricted à cette option. (Nous n'utilisons que 16.04.03 afin que tous les systèmes aient théoriquement le même fichier lors de l'installation)

La ligne dans le fichier est :

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {

Et je veux qu'il ressemble à :

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {

Je sais que sed -i est pour l'édition sur place et s/ devrait rechercher. Mais au-delà de cela, je suis perdu sur la syntaxe ici pour lui faire faire ce dont nous avons besoin. Autant que je sache, ce positionnement de -unrestricted est nécessaire car je pense que ce serait plus facile si nous n'avions pas à avoir une recherche aussi longue, mais encore une fois, je suis nouveau sur sed et je ne suis pas sûr. Quelqu'un pourrait-il m'aider avec cette insertion sed? De préférence, expliquez-moi également pourquoi une syntaxe différente va là où elle va, afin que je sache pour l'avenir.

Réponse acceptée :

Voici la commande.

sed -i "s/--class os/--class os --unrestricted/" filename

Cela remplacera la ligne dans le fichier sans nécessiter de fichier temporaire, grâce à l'option -i.

Si peu importe où dans la ligne le "-unrestricted va", cela pourrait être plus simple.

sed -i "s/'Ubuntu'/'Ubuntu' --unrestricted/" filename

Ubuntu
  1. La commande Linux Sed :utilisation et exemples

  2. Linux - Définir le noyau par défaut dans Grub ?

  3. Afficher tout le fichier jusqu'au match ?

  4. Mettre à jour Grub détruit ?

  5. Diviser un fichier en fonction d'un ensemble de lignes prédéfini ?

Remplacement de chaîne dans Bash

Comment mettre à jour Grub sur Ubuntu et d'autres distributions Linux

Debian – Comment réparer le grub sur Debian ?

Utilisation de la commande Linux mv avec des exemples

Utilisation de la commande Linux sed avec des exemples

Comment mettre à jour/ajouter un fichier dans l'image Docker