Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Projekt lernst du, wie du einen benutzerdefinierten rm-Befehl erstellst, der gelöschte Dateien in ein Papierkorbverzeichnis verschiebt, anstatt sie permanent zu löschen. Dies ist eine nützliche Funktion für deinen Linux-Server, um versehentliches Löschen von wichtigen Dateien zu vermeiden.

👀 Vorschau

labex:project/ $ ll /tmp/trash
gesamt 2,0K
-rw-r--r-- 1 labex labex 8 Okt 26 17:47 trash_file.md

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du das Verzeichnis /tmp/trash einrichtest, um gelöschte Dateien temporär zu speichern
  • Wie du ein Skript für einen benutzerdefinierten rm-Befehl erstellst, der gelöschte Dateien in das Papierkorbverzeichnis verschiebt
  • Wie du die PATH-Umgebungsvariable aktualisierst, um den benutzerdefinierten rm-Befehl zu verwenden
  • Wie du den benutzerdefinierten rm -f-Befehl testest, um sicherzustellen, dass er wie erwartet funktioniert

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Deinen Linux-Server vor versehentlichem Dateilöschen zu schützen, indem du einen benutzerdefinierten rm-Befehl mit einem Papierkorbverzeichnis implementierst
  • Verstehen, wie du Systembefehle modifizierst, um ihr Standardverhalten zu ändern
  • Erfahrungen im Bereich der Shell-Scripting und der Umgebungsvariablenverwaltung sammeln

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicSystemCommandsGroup -.-> linux/source("Script Executing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/rm("File Removing") linux/BasicFileOperationsGroup -.-> linux/chown("Ownership Changing") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/VersionControlandTextEditorsGroup -.-> linux/vim("Text Editing") subgraph Lab Skills linux/source -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/ls -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/touch -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/rm -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/chown -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/chmod -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/mkdir -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} linux/vim -.-> lab-301457{{"Benutzerdefinierten Befehl mit Papierkorbfunktion implementieren"}} end

Einrichten des Papierkorbverzeichnisses

In diesem Schritt lernst du, wie du das Verzeichnis /tmp/trash einrichtest, um gelöschte Dateien temporär zu speichern.

  1. Öffne ein Terminal.
  2. Erstelle das Verzeichnis /tmp/trash und setze die entsprechenden Berechtigungen:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash

Die Berechtigung 1777 aktiviert das "sticky bit" für das Verzeichnis, was es allen Benutzern ermöglicht, in das Verzeichnis zu schreiben, aber nur der Besitzer kann darin enthaltene Dateien löschen.

Aktualisieren der PATH-Umgebungsvariablen

In diesem Schritt wirst du die PATH-Umgebungsvariable aktualisieren, um sicherzustellen, dass der benutzerdefinierte rm-Befehl statt des Standard-System-rm-Befehls verwendet wird.

  1. Erstelle ein neues Verzeichnis, um den benutzerdefinierten rm-Befehl zu speichern:
sudo mkdir -p /usr/local/custom/bin
  1. Bearbeite die Datei /etc/environment:
sudo vim /etc/environment
  1. Füge das Verzeichnis /usr/local/custom/bin am Anfang der PATH-Variablen hinzu:
PATH="/usr/local/custom/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
  1. Speichere die Datei und beende den Editor.
  2. Lade die Datei /etc/environment neu, um die Umgebung der aktuellen Shell zu aktualisieren:
source /etc/environment
sudo chmod a+x /usr/local/custom/bin

Jetzt wird der benutzerdefinierte rm-Befehl statt des Standard-System-rm-Befehls verwendet.

Erstellen des benutzerdefinierten rm-Befehls

In diesem Schritt wirst du einen benutzerdefinierten rm-Befehl erstellen, der gelöschte Dateien in das Verzeichnis /tmp/trash verschiebt, anstatt sie permanent zu löschen.

  1. Erstelle das Skript für den benutzerdefinierten rm-Befehl:
sudo vim /usr/local/custom/bin/rm

Füge den folgenden Inhalt zur Datei hinzu:

#!/bin/zsh

## Dieses Skript wird verwendet, um Dateien oder Verzeichnisse in das Papierkorbverzeichnis zu verschieben, anstatt sie permanent zu löschen.
## Wenn die Option -f verwendet wird, werden die Ziele in das Papierkorbverzeichnis verschoben.
## Wenn die Ziele nicht existieren, wird eine Fehlermeldung angezeigt.

TRASH_DIR="/tmp/trash"

if [[ "$1" == "-f" ]]; then
  shift
  for arg in "$@"; do
    ## Überprüfe, ob das Ziel existiert
    if [[ -e "$arg" ]]; then
      ## Verschiebe das Ziel in das Papierkorbverzeichnis
      mv -f "$arg" "$TRASH_DIR"
    else
      echo "Fehler: $arg existiert nicht."
    fi
  done
else
  ## Führe den ursprünglichen rm-Befehl aus
  /bin/rm "$@"
fi
  1. Setze die entsprechenden Berechtigungen für das Skript des benutzerdefinierten rm-Befehls:
sudo chown root:root /usr/local/custom/bin/rm
sudo chmod 755 /usr/local/custom/bin/rm

Testen des benutzerdefinierten rm-Befehls

In diesem Schritt wirst du den benutzerdefinierten rm -f-Befehl testen, um sicherzustellen, dass er wie erwartet funktioniert.

  1. Erstelle eine Testdatei im Verzeichnis /home/labex/project:
touch /home/labex/project/trash_file.md
  1. Verwende den benutzerdefinierten rm -f-Befehl, um die Testdatei zu löschen:
rm -f /home/labex/project/trash_file.md
  1. Verifiziere, dass die Datei in das Verzeichnis /tmp/trash verschoben wurde:
ls -l /tmp/trash

Du solltest die Datei trash_file.md in der Ausgabe sehen.

gesamt 2,0K
-rw-r--r-- 1 labex labex 8 Okt 26 17:47 trash_file.md

Glückwunsch! Du hast erfolgreich den benutzerdefinierten rm-Befehl implementiert, der gelöschte Dateien in das Verzeichnis /tmp/trash verschiebt, anstatt sie permanent zu löschen.

✨ Lösung prüfen und üben

Zusammenfassung

Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.