Gibt es auf einem Linux-System eine Möglichkeit, eine Reihe von Dateien zum Lesen und Schreiben in eine exponierte Datei zu verketten, ohne tatsächlich weitere N Byte Speicherplatz zu belegen? Ich hatte gehofft, dass diese Dateien über Loopback / Devmapper gemountet werden, um dies zu erreichen.
Ich habe ein Problem, wenn es geteilte Binärdateien gibt, die ziemlich groß werden können. Ich möchte meinen Speicherplatzbedarf nicht mit massiven Festplatten-E / A-Vorgängen verdoppeln, nur um vorübergehend Inhalte aus diesen Dateien zu lesen / schreiben, indem cat
ich sie alle zu einer riesigen Datei zusammenfasse.
Ich habe dieses Projekt hier gefunden , aber es scheint einen sehr spezifischen Anwendungsfall zu haben und hängt auch von Perl ab
Antworten:
Sie können dies tun, indem Sie Loop-Geräte und Device Mapper kombinieren, dank "Alles ist eine Datei". Aber mit einer Einschränkung: Die Dateigröße kann nicht geändert werden (da Sie Blockgeräte nicht erhöhen können, indem Sie darauf schreiben). Wenn Sie also Daten anhängen möchten, müssen Sie ein größeres Blockgerät erstellen und die angehängten Dummy-Daten überschreiben.
Zum Erweitern der Datei können Sie eine große, spärliche Datei erstellen und diese als zusätzliches Gerät verwenden.
quelle
Dies könnte unter Verwendung von Named Pipe unter Linux erfolgen.
Angenommen, Sie haben Dateien mit dem Namen
file0, file1, file2, file3, file4, file5
In C können Sie programmgesteuert tun
Verwenden Sie dann mynewfile wie wir, die Sie aus einer normalen Datei lesen würden.
mynewfile ist eine FIFO-Datei
quelle
Zum Lesen können Sie
less
mehrere Dateien verwenden und dann die Optionen:n
und verwenden:p
, um sie durchzugehen.Zum Schreiben können Sie ohne direkten Zugriff auf die Dateien nicht darauf schreiben.
Sie können auch
vim
mehrere Dateien verwenden, und es wird nur die Reihenfolge durchlaufen, in der sie aufgerufen wurden (dhvim fileA fileB fileC
- Datei B wird nach dem Schließen von Datei A geöffnet, Datei C wird nach dem Schließen von Datei B geöffnet).quelle