shredder-1.jpg

Ex und hopp

Dr. Linux

01.07.2002
Auch wenn oft schlicht von "einstampfen", "in die Tonne treten" oder "kopieren nach /dev/null" gesprochen wird, steckt hinter dem Löschen von Daten durchaus mehr als nur ein Mausklick.

Dr. Linux

Komplizierte Organismen, wie Linux-Systeme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux beobachtet die Patienten in den Linux-Newsgruppen, stellt an dieser Stelle Rezepte für aktuelle Probleme aus und alternative Heilmethoden vor.

Ich möchte, dass der Befehl rm vor dem Löschen von Dateien immer eine Sicherheitsabfrage der Art "Datei wirklich löschen?" stellt. Wie kann ich das einstellen?

Dr. Linux: Um den Befehl rm dazu zu zwingen, setzen Sie ihn mit der Option -i ab:

perle@maxi:~> rm -i test.txt
rm: »test.txt« entfernen?

Vor dem Löschen müssen Sie die Nachfrage je nach System-Einstellungen mit y (für "yes") oder j ( für "ja") bestätigen. Antworten Sie hingegen mit n (für "no" oder "nein"), bleibt Ihnen die Datei erhalten.

Ein bestimmter Befehl, der ausschließlich mit einer festgelegten Option ausgeführt werden soll, ist ein klassischer Fall für das Anlegen eines Aliases. Damit machen Sie ein Kommando mit festen, oft benötigten Flags oder lange, einzeilige Befehlseingaben unter einem eigenen Namen verfügbar. Wenn Sie diesen statt des eigentlichen Kommandos aufrufen, sparen Sie vielleicht nicht im Fall von rm -i, aber sonst oft eine Menge Tipparbeit.

Über die in Ihrem System vordefinierten Alias-Befehle informieren Sie sich, indem Sie den Befehl alias auf einer Kommandozeile absetzen. Unter Umständen werden Sie überrascht sein, wie viele Aliase es gibt (das Beispiel stammt von einem Rechner mit SuSE 7.3):

perle@maxi:~> alias
[…]
alias l='ls -alF'
alias la='ls -la'
alias ll='ls -l'
alias ls='ls $LS_OPTIONS'
alias ls-l='ls -l'
alias md='mkdir -p'
alias mem='echo '\''Error: Try the command: free'\'''
alias move='echo '\''Error: Try the command: mv -iv'\'''
alias o='less'
alias rd='rmdir'
alias rehash='hash -r'
[…]

Dass Sie mit dieser Einstellung ll statt ls -l sagen können, erfährt die Shell beim Einloggen aus der Datei /etc/profile. Diese definiert die für alle Benutzer gültigen Einstellungen. Sie sollten sie als Systemverwalter nur editieren, wenn Sie genau im Bilde sind, was Sie dort gerade tun. Eigene (eventuell die Voreinstellungen überschreibende) Alias-Definitionen kann jeder User in den Start-Dateien der Shell im eigenen Home-Verzeichnis festlegen.

So, wie alias die Alias-Kommandos auflistet, können sie auch gesetzt werden: Zunächst kommt der Befehl alias, gefolgt vom Kürzel Ihrer Wahl; ein = verbindet schließlich den in Hochkommata gefassten Befehl, für den das Kurzkommando gelten soll:

perle@maxi:~> alias rm='rm -i'

Dieser Alias-Befehl bleibt in der aktuellen Shell bis zum Ende Ihrer Sitzung erhalten, wird aber nicht gespeichert. Wenn Sie nun rm datei aufrufen, fragt Sie das Kommando höflich, ob es Ihnen mit dieser Löschaktion Ernst sei.

Erscheint Ihnen die hartnäckige Nachfragerei einmal unangemessen, überstimmt ein rm -f (für englisch: "force", "erzwingen") temporär die im Alias eingebettete Option -i. Die als Argument angegebene Datei wird damit trotz anders definierter Alias-Vorgabe rücksichtslos ohne Rückfragen und Fehlermeldungen gelöscht.

Kommen Sie mit dem "neuen" rm gar nicht klar, werden Sie den unerwünschten Alias in der aktuellen Shell mit

perle@maxi:~> unalias rm

wieder los. Das ist im gezeigten Fall auch sehr sinnvoll: Eine Umdefinition eines vorhandenen Befehls (wie hier von rm) birgt nämlich die große Gefahr, sich an den neuen Befehl zu gewöhnen. Bei einem Wechsel auf eine andere Distribution oder ein fremdes System werden Sie ihn meist vermissen – mit fatalen Folgen: Da rm dort weiterhin das System-rm ist, würde die gewählte Datei ohne die angewöhnte Rückfrage gelöscht.

Doch was müssen Sie tun, um die bessere Alternative alias del='rm -i' dauerhaft festzuschreiben? Wenn Sie die Bash als Login-Shell benutzen, liest diese nach der systemweit gültigen /etc/profile (bei manchen Distributionen zusätzlich /etc/profile.local) die persönlichen Initialisierungsdateien im Home-Verzeichnis ein. Das sind die richtigen Stellen, um Alias-Befehle zu speichern. Mindestens eine dieser Dateien finden Sie mit Sicherheit auch in Ihrem Home-Verzeichnis: .profile, oder – bash-spezifisch – .bash_profile sowie .bashrc.

Diese persönlichen Initialisierungsdateien sind Skripte, die sich mit einem Editor bearbeiten lassen. Hierin können Sie systemweite Einstellungen überstimmen und zusätzliche persönliche Einstellungen vornehmen. Elegant und übersichtlich, besonders wenn Sie mehrere Alias-Befehle anlegen möchten, ist es, eine spezielle .alias-Datei anzulegen und deren Einlesen beim Login mit dem Eintrag

test -e ~/.alias && . ~/.alias

in der gewünschten Startdatei zu veranlassen. Dieser Befehl prüft (test), ob die Datei .alias im Home-Verzeichnis (~) existiert. Wenn ja (&&) wird diese mit dem Punkt-Operator in der aktuellen Shell ausgeführt.

Wegputzen

Ich habe hier ein Programm, das in meinem Home-Verzeichnis eine .log-Datei anlegt, die langsam vor sich hin wächst. Diese wird nicht regelmäßig durch Systemprogramme gewartet und damit auch nie gekürzt. Sie einfach mit rm zu löschen traue ich mich nicht, weil ich nicht weiß, ob dann nicht das Programm anfängt zu spinnen. Gibt es vielleicht eine sichere Methode, ihren Inhalt zu entsorgen?

Dr. Linux: Schnell und einfach lässt sich der Inhalt einer Datei beispiel.log mit dem Befehl

perle@maxi:~> cat /dev/null > beispiel.log

wegwerfen, ohne dass die Datei selbst aufhört zu existieren. Das Gerät /dev/null wird häufig als "schwarzes Loch" oder "Mülleimer" des Systems bezeichnet. Alle Ausgaben, die dort hinein gelenkt werden, sind verloren, verschwinden quasi im Nichts. Gleiches gilt für den Inhalt von Dateien, wenn sie mit dem Inhalt von /dev/null überschrieben werden. Für das Umlenken der Ausgabe eines Programms in eine Datei benutzt man das Zeichen >. Der Befehl cat tut nichts anderes, als den Inhalt von Dateien auf der Standardausgabe auszugeben, mithin sie anzuzeigen. In Worte gefasst bedeutet die obige Befehlszeile also: "Zeige den Inhalt von /dev/null an und lenke diese Ausgabe auf die Datei beispiel.log."

Das folgende Vorher-Nachher-Szenario zeigt recht deutlich, was passiert:

perle@maxi:~/tmp> ls -l
[…]
-rw-r--r-- 1 perle users 2097 Mai 7 13:16 beispiel.log
[…]
perle@maxi:~/tmp> cat /dev/null > beispiel.log
perle@maxi:~/tmp> ls -l
[…]
-rw-r--r-- 1 perle users    0 Mai 7 13:18 beispiel.log
[…]

Da, wo vorher eine Datei von 2097 Bytes Größe zu finden war, sieht man nachher nur noch ein leeres File.

Wenn Sie mit der bash arbeiten, geht diese Aktion übrigens noch schneller mit dem Befehl

perle@maxi:~> > beispiel.log

Möchten Sie vor dem Löschen eine Archivkopie der Datei ziehen, achten Sie darauf, dass Sie die Originaldatei dabei nicht verändern: Statt die Datei mit mv umzubenennen legen Sie besser mit cp eine Kopie an; statt sie mit gzip beispiel.log destruktiv zu komprimieren, verwenden Sie besser das Kommando gzip -c beispiel.log > beispiel.log.gz, bei dem das Original erhalten bleibt. Greift das schreibende Programm während der Zeit auf die Log-Datei zu, während der sie durch mv, rm oder gzip gelöscht wird, kann dies nicht nur zu Störungen führen, sondern u. U. sogar verhindern, dass es weiterhin in die .log-Datei schreibt.

Räumungsklage

Ich wollte mein System von überflüssigen Dateien befreien, die sich im temporären Verzeichnis angesammelt haben. Nun habe ich festgestellt, dass ich in /tmp nicht alle Dateien löschen kann. Darf das etwa nur root?

Dr. Linux: Betrachten Sie /tmp einmal etwas genauer, insbesondere die Zugriffsrechte auf dieses Verzeichnis. Sie werden dabei in aller Regel feststellen, dass sich neben dem Schreibrecht für alle anstelle der Kennzeichnung x, die bei Verzeichnissen besagt, wer in sie wechseln darf, im dritten Rechte-Tripel ein t befindet:

perle@maxi:~> ls -ald /tmp
drwxrwxrwt 9 root root 4096 Mai 7 15:15 /tmp

Dieses kleine t wird Sticky-Bit ("sticky" = "klebrig") genannt und bedeutet für ein Verzeichnis, dass man zum Löschen einer darin befindlichen Datei der Besitzer derselben (oder root) sein muss.

So wird verhindert, dass temporäre Dateien, zum Beispiel von Druckaufträgen oder anderen aktuellen Prozessen, durch nichtberechtigte Benutzer gelöscht werden.

Ein Sticky-Bit für Programme, in einer Auflistung durch ein T gekennzeichnet, wird unter Linux schlicht ignoriert.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Dr. Linux
    Was sich hinter einem Befehl versteckt oder wer gerade eingeloggt ist; das alles lässt sich mit wenigen Eingaben auf der Tastatur herausfinden.
  • Dr. Linux
    Mit einigen Tricks zum Boot-Manager LILO lässt sich auch im Winter frei nach Terry Jacks singen: "We have joy, we have fun, we'll boot linux in the sun…"
  • PIDs, Daemonen, Zombies und Jobs
    Unix-Systeme sind nichts für Zartbesaitete: In der Welt der Prozesse wird gekillt und gestorben, wimmelt es von Zombies und Daemonen.
  • Dr. Linux
    Komplizierte Organismen, wie Linux-Systeme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux begutachtet diesmal den Patienten Netscape, stellt Rezepte für aktuelle Probleme mit dem wohl meistgenutzten Web-Browser unter Linux aus und alternative Heilmethoden vor.
  • Dr. Linux
    Mit dem Erscheinen neuer Linux-Distributionen häuft sich in den Newsgroups die Frage: "Was bedeutet eigentlich char-major-[1…255]?" Die Antwort auf diese und andere Fragen gibt der folgende Artikel.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...