Die HTML-Version aller Ausgaben von POSIX 2008 finden Sie online:
Das wurde in der Ausgabe 2008 hinzugefügt.
Technische Berichtigungen fügen im Allgemeinen keine neuen Funktionen hinzu.
In der vorherigen Version ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) war dieser Text nicht enthalten.
Der neue Text wurde auf der austin group conference 2003-05-09 zur Aufnahme in eine spätere Überarbeitung des Standards angenommen.
Es wurde im März desselben Jahres von John Beck von Sun Microsystems angefordert (Link erfordert Opengroup-Registrierung, siehe auch Enhancement Request Nr. 5 hier ).
John Beck schrieb am 11. März 2003:
@ page 820 line 31681-31683 section rm comment {JTB-1}
Problem:
Defect code : 3. Clarification required
An occasional user mistake, with devastating consequences, is to
write a shell script with a line such as:
rm -rf $VARIABLE1/$VARIABLE2
or
rm -rf /$VARIABLE1
without verifying that either variable is set, which can lead to
rm -rf /
being the resulting command. Since there is no plausible
circumstance under which this is the desired behavior, it seems
reasonable to disallow this. Such a safeguard would, however,
violate the current specification.
Action:
Either extend the exceptions for . and .. on the noted lines
to list / as well, or specify that the behavior of rm if an
operand resolves to / is undefined.
GNU rm
hinzugefügt --preserve-root
und --no-preserve-root
Optionen in diesem Commit vom 09.11.2003, wurden jedoch --preserve-root
erst in diesem Commit vom 03.09.2006 zum Standard , also in coreutils 6.2
FreeBSD behält seit dem Commit vom 04.10.2004 einen Schrägstrich bei (mit dem Commit-Protokoll "Finde heraus, wie schwer entflammbar meine Unterwäsche wirklich ist" ), aber zunächst nicht , bis sie sich daran erinnerten, ein Jahrzehnt später zu prüfen, ob POSIX jetzt ist Geben Sie an, zu welchem Zeitpunkt dies auch im POSIX-Modus geschehen ist .POSIXLY_CORRECT
Die anfängliche Zusage von FreeBSD besagt, dass Solaris dies bereits zu diesem Zeitpunkt tat.
@JdePB (im Kommentar unten) stellte fest, dass der Link zu einer Insider-Story von Sun weitere Details zum Solaris-Ursprung untermauert und angibt, dass Solaris die Sicherheitsvorkehrungen bereits getroffen hat, bevor die Anfrage an die Austin-Gruppe gestellt wurde.
Es erklärt die Gründe für das Hinzufügen dieses Ausschlusses. Während man sich nur die Schuld, wenn sie es tun rm -rf /
, gibt es einen Fall , in dem ein Skript könnte es tun , wenn dadurch , rm -rf -- "$1/$2"
dass ohne Prüfung $1
/ $2
wurden zur Verfügung gestellt , welche die Sache , die einige Kunden von Sun schlecht getroffen ist , wenn ein Solaris Patch falsche Anwendung (gemäß diesem Link).
Das Verbot der Löschung von .
und ..
wurde schon lange vorher hinzugefügt , um sich gegen mögliche Pannen abzusichern. rm
ist immer noch ein gefährlicher Befehl. Es macht, was es tun soll: Entfernen Sie, was Sie ihm sagen.
rm -rf /*
cd /tmp && rm -rf .*/ # on some systems where rm -rf ../ still removes
# the content of ../ and shells that still
# may include . and .. in glob expansions.
rm -rf -- "$diretcory"/* # note the misspelled variable name
dir='foo '; rm -rf $dir/*
Würde auch alles entfernen. Es ist bekannt, dass die Vervollständigung von Shell-Dateinamen solche Probleme verursacht
rm -rf someth<Tab>/*
Erweitert auf:
rm -rf something /*
Denn something
so geschah es nicht, ein Verzeichnis zu sein.
Shells wie tcsh
oder zsh
fügen eine zusätzliche Eingabeaufforderung hinzu, wenn Sie versuchen, rm
mit einem *
Platzhalter anzurufen ( tcsh
nicht standardmäßig).