modul FileUtils

Namensraum für Hilfsprogrammmethoden zum Kopieren, Verschieben, Löschen usw.

Was gibt es hier

Zuerst, was anderswo ist. Modul FileUtils

Hier stellt das Modul FileUtils nützliche Methoden bereit für

Erstellen

Löschen

Abfragen

Einstellen

Vergleichen

Kopieren

Verschieben

Options

Pfad-Argumente

Einige Methoden in FileUtils akzeptieren Pfad-Argumente, die als Pfade zu Dateisystemeinträgen interpretiert werden.

Über die Beispiele

Einige Beispiele hier beinhalten Baumstrukturen von Dateieinträgen. Dafür zeigen wir manchmal Bäume mit dem tree Kommandozeilen-Utility, einem rekursiven Verzeichnisauflistungs-Utility, das eine tiefenindizierte Liste von Dateien und Verzeichnissen ausgibt.

Wir verwenden eine Hilfsmethode, um den Befehl zu starten und das Format zu steuern

def tree(dirpath = '.')
  command = "tree --noreport --charset=ascii #{dirpath}"
  system(command)
end

Zur Veranschaulichung

tree('src0')
# => src0
#    |-- sub0
#    |   |-- src0.txt
#    |   `-- src1.txt
#    `-- sub1
#        |-- src2.txt
#        `-- src3.txt

Vermeidung der TOCTTOU-Schwachstelle

Für bestimmte Methoden, die Einträge rekursiv entfernen, gibt es eine potenzielle Schwachstelle namens Time-of-check to time-of-use (TOCTTOU), die auftreten kann, wenn

Um diese Schwachstelle zu vermeiden, können Sie diese Methode verwenden, um Einträge zu entfernen

Ebenfalls verfügbar sind diese Methoden, die jeweils FileUtils.remove_entry_secure aufrufen

Schließlich ruft diese Methode zum Verschieben von Einträgen FileUtils.remove_entry_secure auf, wenn Quelle und Ziel auf unterschiedlichen Dateisystemen liegen (was bedeutet, dass das "Verschieben" eigentlich ein Kopieren und Entfernen ist)

Die Methode FileUtils.remove_entry_secure entfernt sicher, indem sie eine spezielle Vorverarbeitung anwendet.

WARNUNG: Sie müssen sicherstellen, dass **ALLE** Elternverzeichnisse nicht von anderen nicht vertrauenswürdigen Benutzern verschoben werden können. Zum Beispiel sollten Elternverzeichnisse nicht von nicht vertrauenswürdigen Benutzern besessen werden und nicht beschreibbar sein, es sei denn, das Sticky-Bit ist gesetzt.

Details zu dieser Sicherheitslücke finden Sie in Perl-Fällen