GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Sed-Nutzung zum Aktualisieren der Grub-Datei?

Ich bin neu in der Verwendung von sed, lerne aber schnell, es wegen seiner allgemeinen Flexibilität in der Automatisierung zu lieben. Ich möchte jedes Mal, wenn ich ein neues System bereitstelle, ein Skript mit verschiedenen Sicherheitskontrollen ausführen, und ein Teil davon erfordert, dass ich GRUB sperre. Ich versuche, die allgemeine Ubuntu-Option aus dem GRUB-Menü freizuschalten, damit jeder sie danach ohne Passwort verwenden kann, während alles andere passwortgeschützt bleibt.

Abgesehen davon suche ich die Datei /boot/grub/grub.cfg nach einer bestimmten Zeile und füge dieser Option –unrestricted hinzu. (Wir verwenden nur 16.04.03, sodass alle Systeme bei der Installation theoretisch dieselbe Datei haben würden)

Die Zeile in der Datei lautet:

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

Und ich möchte, dass es so aussieht:

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

Ich weiß, dass sed -i für die Bearbeitung vor Ort ist und s/ suchen sollte. Aber darüber hinaus bin ich hier in der Syntax verloren, damit sie tatsächlich das tut, was wir brauchen. Soweit ich das beurteilen kann, ist diese Positionierung von -uneingeschränkt erforderlich, da ich glaube, dass es einfacher wäre, wenn wir nicht so lange suchen müssten, aber auch hier bin ich neu bei sed und unsicher. Könnte mir jemand bei dieser Sed-Einfügung helfen? Erklären Sie mir am besten auch, warum unterschiedliche Syntax wohin geht, damit ich es für die Zukunft weiß.

Akzeptierte Antwort:

Hier ist der Befehl.

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

Dadurch wird die Zeile in der Datei ersetzt, ohne dass aufgrund der Option -i eine temporäre Datei erforderlich ist.

Wenn es egal ist, wo in der Zeile das „–unrestricted“ steht, ist das vielleicht einfacher.

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

Ubuntu
  1. Linux – Standardkernel in Grub setzen?

  2. Alle Dateien bis zum Match anzeigen?

  3. Datei nach Verwendung des Sed-Befehls speichern?

  4. Mehrere Dateitexte durch Sed ersetzen?

  5. Grub-Datei kann nach Änderung nicht gespeichert werden?

Ersetzen von Zeichenfolgen in Bash

So aktualisieren Sie Grub unter Ubuntu und anderen Linux-Distributionen

Debian – Wie repariert man den Grub auf Debian?

Verwendung des Linux-mv-Befehls mit Beispielen

Verwendung des Linux-Befehls sed mit Beispielen

So aktualisieren/fügen Sie eine Datei im Docker-Image hinzu