Wie kann ich eine Datei erstellen (z. B. mit dem touch
Befehl oder auf eine ähnliche Weise), aber mit einer bestimmten Größe (z. B. 14 MB)?
Der Anwendungsfall besteht darin, FTP mit verschiedenen Dateigrößen zu testen. Wenn wir eine Datei mit einer bestimmten Größe erstellen können, ist es hilfreich, die FTP-Übertragung usw. zu überprüfen.
linux
command-line
fasil
quelle
quelle
Antworten:
Verwendung
truncate
:Von
man truncate
:Hinweis:
truncate
Möglicherweise ist es auf Ihrem System nicht verfügbar, z. B. unter Mac OS X ist es nicht standardmäßig installiert (Sie können es jedoch problemlos installieren, z. B. mithilfe von Macports). In diesen Fällen müssen Sie möglicherweisedd
oderhead
verwenden.quelle
touch
wird aber nicht benötigt, man kann es einfach ausführentruncate -s 14M filename
und schafft esfilename
direkt.BEARBEITEN: Der einfachste Weg ist wahrscheinlich die Antwort
truncate
von Ashutosh Vishwa Bandhu , aber wie durch @ offby1 hervorgehoben , werden spärliche Dateien erstellt, die möglicherweise nicht Ihren Wünschen entsprechen . Die folgenden Lösungen erstellen normale, vollständige Dateien.Die folgenden Befehle erstellen eine 14-MB-Datei mit dem Namen
foo
:fallocate
(Danke an @Breakthrough, der es in den Kommentaren vorgeschlagen und Ahmed Masuds Antwort unten bewertet hat , in der es auch erwähnt wird.)Dieser Befehl ist besonders eindrucksvoll, da er
truncate
unabhängig von der gewünschten Dateigröße so schnell wie (sofort) ist (im Gegensatz zu den anderen Lösungen, die für große Dateien langsam sind) und dennoch normale Dateien erstellt, keine spärlichen:Erstellen Sie eine Datei mit zufälligen Daten
oder
Erstellen Sie eine mit
\0
s gefüllte Datei :oder
Erstellen Sie eine Datei mit den ersten 14 MB Daten einer anderen Datei:
Erstellen Sie eine Datei mit den letzten 14 MB Daten einer anderen Datei:
In all den obigen Beispielen wird die Datei sein ,
14*1000*1000
wenn Sie möchten14*1024*1024
, ersetzen SieMB
mitM
. Zum Beispiel:fallocate
Befasst sich nur mit Bytes, so dass Sie tun müssten (14 * 1024 * 1024 = 14680064)quelle
dd
wenn es einen einfacheren, weniger potenziell destruktiven Ansatz gibt.dd
Lösung eine Alternative.dd
Befehl auf der Wiki-Seite ist völlig anders und wird nicht verwendet/dev/zero
. Fragen Sie die Entwickler, ob dies logischerM
oderMB
logischer ist. In den Manpages von head , tail und dd steht eindeutig "MB = 1000 * 1000, M = 1024 * 1024". Dies kann bei anderen * Nixen anders sein.WARNUNG
dd
überschreibt stillschweigend alles , worauf Sie das Recht zum Schreiben haben, wenn Sie dies freiwillig oder versehentlich angeben. Stellen Sie sicherdd
, dass Sie verstehen , z. mit dem lesendd --help
, und Sie vermasseln nicht Ihre dd-befehlszeilen oder Sie können leicht irreversiblen datenverlust verursachen - sogar insgesamt .Für den Start
if=
ist die Eingabedatei undof=
ist die Ausgabedatei . Überprüfen Sie immer , ob Sie alles richtig gemacht haben, bevor Sie den Befehl ausführen. :)quelle
Verwenden Sie die Manpage magic
dd
;)verursachen 14 MB * 1024 = 14336 KB, oder:
Und Sie werden 14 MB output.dat-Datei erhalten, die mit Nullen gefüllt ist: D
quelle
Dies sollte der schnellste Weg sein:
Andernfalls schreiben Sie einfach ein schnelles und unsauberes C- oder Perl-Programm, das die exakte Position sucht und ein einzelnes Byte schreibt. Dies ist eine Menge schneller als das eigentliche Ablegen von Daten auf die Blöcke.
Wenn Sie Dateien mit geringer Dichte dann auf Linux (und möglicherweise andere Systeme) vermeiden möchten , können Sie verwenden ,
fallocate -l <length>
ausutil-linux
.Wenn dies nicht verfügbar ist und Sie ein POSIX-kompatibles System haben, können Sie mit dem Bibliotheksaufruf posix_fallocate () ein schnelles und unsauberes Programm schreiben. posix_fallocate garantiert die Zuweisung des angegebenen Bereichs, sodass Sie bei einer späteren Verwendung des Bereichs keinen vollen Datenträger erhalten, wenn er erfolgreich zurückgegeben wird
quelle
Während
dd
es die portable Möglichkeit ist, sind die Befehlemkfile
undxfs_mkfile
speziell für diesen Zweck geschrieben und sind schneller:Der Haken ist, dass keiner der Befehle universell verfügbar ist und sich daher nicht zum Schreiben von portablen Skripten eignet. Wenn ich es jedoch interaktiv über die Befehlszeile mache, sind dies die Befehle, die ich verwende.
Standardmäßig werden mit Nullen gefüllte Dateien und keine spärlichen (oder "löchrigen") Dateien erstellt . Beide nutzen die
-n
Option, stattdessen Sparse-Dateien zu erstellen.quelle
Es gibt eine andere Option mit Perl:
perl -e 'print "a" x 1024' > file.txt
Dadurch wird eine 1-KB-Datei erstellt. Ersetzen Sie 1024 durch eine beliebige Zahl.
quelle