Jak mogę utworzyć plik (np. Za pomocą touch
polecenia lub w inny podobny sposób), ale o określonym rozmiarze (np. 14 MB)?
Przypadkiem użycia jest przetestowanie FTP z różnymi rozmiarami plików. Jeśli możemy utworzyć plik o określonym rozmiarze, przydatne będzie sprawdzenie transferu FTP itp.
linux
command-line
fasil
źródło
źródło
Odpowiedzi:
Użyj
truncate
:Od
man truncate
:Uwaga:
truncate
może nie być dostępny w twoim systemie, np. W Mac OS X nie jest domyślnie instalowany (ale możesz go łatwo zainstalować, na przykład za pomocą Macports). W takich przypadkach może być konieczne użyciedd
lubhead
zamiast tego.źródło
touch
jest to jednak potrzebne, wystarczy uruchomićtruncate -s 14M filename
, utworzyfilename
bezpośrednio.EDIT: Najprostszym sposobem jest chyba
truncate
od Ashutosh Vishwa Bandhu za odpowiedź , ale jak podkreślił @ offby1 który tworzy rzadkich plików , które nie może być to, co chcesz. Poniższe rozwiązania tworzą normalne, pełne pliki.Następujące polecenia tworzą plik 14 MB o nazwie
foo
:fallocate
(dzięki @Breakthrough, który zasugerował to w komentarzach i zagłosował na odpowiedź Ahmeda Masuda poniżej, która również o tym wspomina).To polecenie jest szczególnie imponujące, ponieważ jest tak szybkie jak
truncate
(natychmiastowe) niezależnie od pożądanego rozmiaru pliku (w przeciwieństwie do innych rozwiązań, które będą spowolnione dla dużych plików), a jednocześnie tworzy normalne pliki, a nie rzadkie:Utwórz plik wypełniony losowymi danymi
lub
Utwórz plik wypełniony
\0
s:lub
Utwórz plik wypełniony pierwszymi 14 MB danych innego pliku:
Utwórz plik wypełniony ostatnimi 14 MB danych innego pliku:
We wszystkich powyższych przykładach plik będzie,
14*1000*1000
jeśli chcesz14*1024*1024
, zastąpMB
goM
. Na przykład:fallocate
zajmuje się tylko bajtami, więc musisz to zrobić (14 * 1024 * 1024 = 14680064)źródło
dd
jeśli istnieje prostsze, mniej potencjalnie niszczące podejście.dd
rozwiązanie ma alternatywną alternatywę.dd
Polecenia na stronie wiki jest zupełnie inna i nie korzysta/dev/zero
. Jeśli chodzi o to,M
czyMB
jest bardziej logiczne, weź to z programistami. Strony podręcznika głowy , ogona i dd jasno stwierdzają, że „MB = 1000 * 1000, M = 1024 * 1024”. Może się różnić w przypadku innych * nixów.OSTRZEŻENIE
dd
po cichu zastąpi wszystko, do czego masz prawo pisać, jeśli podasz to dobrowolnie lub przypadkowo. Upewnij się, że rozumieszdd
, np. czytającdd --help
, nie psujesz wiersza poleceń dd, w przeciwnym razie możesz łatwo stworzyć nieodwracalną utratę danych - nawet całkowitą .Na początku
if=
jest plik wejściowy iof=
jest plik wyjściowy . Zawsze sprawdź dokładnie, czy wszystko dobrze się udało, przed uruchomieniem polecenia. :)źródło
Użyj magicznej strony podręcznika
dd
;)powodować 14 MB * 1024 = 14336 KB lub:
Otrzymasz plik wyjściowy 14.db.dat wypełniony zerami: D
źródło
To powinien być najszybszy sposób na zrobienie tego:
W przeciwnym razie po prostu napisz szybki i brudny program w języku C lub Perl, który szuka dokładnej pozycji i zapisuje pojedynczy bajt. Jest to o wiele szybsze niż faktyczne zrzutowanie danych do bloków.
Jeśli chcesz uniknąć plików rzadkich następnie na Linux (i ewentualnie innych systemów) można korzystać
fallocate -l <length>
zutil-linux
.Jeśli jest to niedostępne, a masz system zgodny z POSIX, możesz napisać szybki i brudny program za pomocą wywołania biblioteki posix_fallocate (). posix_fallocate gwarantuje alokację określonego zakresu, aby nie uzyskać pełnego dysku przy kolejnym użyciu zakresu, jeśli zostanie on zwrócony
źródło
Chociaż
dd
jest to przenośny sposób, aby to zrobić, poleceniamkfile
ixfs_mkfile
są napisane specjalnie w tym celu i są szybsze:Problem polega na tym, że żadne z poleceń nie jest powszechnie dostępne, więc nie nadają się do pisania przenośnych skryptów. Jeśli jednak robię to interaktywnie za pomocą wiersza polecenia, to są to polecenia, których używam.
Domyślnie tworzą pliki wypełnione zerami, a nie pliki rzadkie (lub „dziurawe”) . Oboje wybierają
-n
opcję tworzenia rzadkich plików.źródło
Istnieje inna opcja z Perlem:
perl -e 'print "a" x 1024' > file.txt
Spowoduje to utworzenie pliku 1KB. Zamień 1024 na dowolną liczbę.
źródło