লিনাক্সে প্রদত্ত আকার সহ একটি ফাইল কীভাবে তৈরি করবেন?


157

পরীক্ষার উদ্দেশ্যে আমাকে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করতে হবে (একটি আপলোডের সীমা পরীক্ষা করতে)।

লিনাক্সে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করার জন্য একটি আদেশ কী?


উত্তর:


187
dd if=/dev/zero of=upload_test bs=file_size count=1

file_sizeবাইটগুলিতে আপনার পরীক্ষার ফাইলের আকার কোথায়


ওহ, এটি আমার পদ্ধতির চেয়ে বেশি দক্ষ হতে পারে কারণ এটি সমস্তই একটি ব্লকে করে। ভাল ধারণা.
পল টমবলিন

10
প্রকৃতপক্ষে, একটি বিশাল ব্লকসাইজ ব্যবহার করা খুব খারাপ হয়ে ওঠার পরে আরও খারাপ সঞ্চালন করবে কারণ এটি লেখার আগে এই পরিমাণটি বরাদ্দ করে মেমোরিতে পড়বে। এটি বিএস = 4 জিআইবির মতো কিছু হলেও আপনি সম্ভবত অদলবদল শেষ করবেন।
ব্রায়ান

35
ddতাই একটি ফাইল 4 গিগাবাইট চেয়ে বড় তৈরি করতে 2 ^ 32 তার মানের জন্য একটি সীমা আছে, সেখানে একটি কৌতুক আছে: dd if=/dev/zero of=test bs=1M count=<size in megabytes>
Dmytro সিরেনকো

2
আরও ভাল, দ্রুত পদ্ধতির জন্য পরবর্তী উত্তরটি দেখুন
মার্চেন্ট ডাইস

2
@ ইলেগ্যান্টডাইস এটি পরিষ্কার নয় যে পরবর্তী কোন উত্তর রয়েছে, তারা তাদের অবস্থান পরিবর্তন করতে পারে
ভ্লাদক্রাস

160

দয়া করে, আধুনিক সহজ এবং দ্রুততর faster লিনাক্সে, (একটি চয়ন করুন)

truncate -s 10G foo
fallocate -l 5G bar

এটা তোলে দরকার যে বিবৃত করা truncateএকটি ফাইল সিস্টেমে সমর্থনকারী বিক্ষিপ্ত ফাইল বিক্ষিপ্ত ফাইল তৈরি করবে এবং fallocateকরবে না। একটি বিরল ফাইল হ'ল ফাইলটি তৈরি করা বরাদ্দ ইউনিটগুলি ব্যবহার না করা পর্যন্ত আসলে বরাদ্দ দেওয়া হয় না। ফাইলের জন্য মেটা-ডেটা হবে তবে কিছু বিবেচনাযোগ্য স্থান কিন্তু সম্ভবত কোথায় ফাইলের আসল আকার কাছাকাছি পর্যন্ত সময় লাগতে। এই ধরণের ফাইলটির সুবিধাগুলি এবং অসুবিধাগুলি বেশি থাকায় আপনার আরও তথ্যের জন্য স্পার ফাইল সম্পর্কে সংস্থানগুলি নিয়ে পরামর্শ করা উচিত। একটি অবিচ্ছিন্ন ফাইলটির ব্লকগুলি (বরাদ্দ ইউনিট) সময় পূর্বে বরাদ্দ করা হয় যার অর্থ ফাইল সিস্টেম যতটা দেখেছে ততক্ষেত্রে স্থানটি সংরক্ষিত থাকবে। এছাড়াও fallocateকিংবা truncateএকটি নির্দিষ্ট মান ফাইলের বিষয়বস্তু নির্ধারণ করে করা হবে না মত ddপরিবর্তে একটি ফাইলের বিষয়বস্তু সঙ্গে বরাদ্দ fallocateবা truncateকোনো আবর্জনা মান নির্মাণের সময় বরাদ্দ ইউনিট অস্তিত্ব এবং এই আচরণ বা আকাঙ্ক্ষিত হতে পারে হতে পারে। ddকারণ এটি আসলে এটা কমান্ড লাইন অপশন সঙ্গে উল্লিখিত সম্পূর্ণ ফাইল প্রবাহে ডেটার মান বা খণ্ড লিখেছেন ধীরতম হয়।

এই আচরণটি সম্ভবত পৃথক হতে পারে - ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভর করে এবং কোনও ফাইলের সিস্টেমের মান বা স্পেসিফিকেশনের সাথে সংযোগ করে con সুতরাং এটি পরামর্শ দেওয়া হয় যে উপযুক্ত পদ্ধতিটি ব্যবহার করা হয়েছে তা নিশ্চিত করার জন্য উপযুক্ত গবেষণা করা হয়।


চেষ্টা করেছি truncate। এটি উপরের সিনট্যাক্স ব্যবহার করে একটি শূন্য আকারের ফাইল তৈরি করেছে। এর জন্য 'ম্যান পেজ' fallocateবলে যে এটি তৈরি করা ফাইলগুলি spaceডেটার পরিবর্তে খালি পূর্ণ । এটি প্রত্যাশিত কিছু ক্ষেত্রে যেমন "1 জি ফাইলটি অনুলিপি করতে কতক্ষণ সময় নেয়" এর জন্য এটি কার্যকর হবে না বলে মনে হয়।
মার্ক স্টসবার্গ

6
ফলোকট আমার পক্ষে ভাল কাজ করছে বলে মনে হচ্ছে। এটি সঠিক আকারে একটি ফাইল তৈরি করে।
আটার সুলেমান

5
এটি এই প্রশ্নের সেরা উত্তর। কাটা / ফ্যালোকটটি বেশি সময় নেয় না, কারণ এটি ফাইলের সমস্ত ব্লক লিখেনি। তবে, যদি আপনি ফলস্বরূপ ফাইলটি কোথাও আপলোড করতে চান তবে এটি পুরো জিনিসটির জন্য শূন্যগুলি পড়বে।
মাইক অ্যান্ড্রুজ

4
আপনি অধীনে ওএসএক্স এই চালাতে চান, তাহলে আপনি এই কাজ করতে প্রয়োজন হবে: brew install coreutils। এই যোগ হবে কমান্ড সামনে, তাই আপনি ভালো এটি চালানোর জন্য আছে: gtruncate -s 10G foo। আশাকরি এটা সাহায্য করবে!
23.07 এ ডেরেক করুন

দেখে মনে হচ্ছে এটি কোনও NTFSবিভাজনে কাজ করে না ।
এলয়েস্প

40

কেবল টমের পোস্ট অনুসরণ করতে আপনি খুব কম ফাইলগুলি তৈরি করতে ডিডি ব্যবহার করতে পারেন:

dd if=/dev/zero of=the_file bs=1 count=0 seek=12345

এটি বেশিরভাগ ইউনিক্সগুলিতে একটি "গর্ত" দিয়ে একটি ফাইল তৈরি করবে - তথ্যটি আসলে ডিস্কে লিখিত হবে না বা শূন্য ব্যতীত অন্য কোনও কিছু না লেখা পর্যন্ত কোনও স্থান গ্রহণ করবে না।


গণনা সেট করা = 0 ফাইলের আকার থেকে বাইট বিয়োগ করা এড়ায়।
অ্যান্ড্রুডটন

3
এর সাথে count=0, bs * seekফাইলের আকার হয়ে যায়
জয়েন

24

ওএসএক্সে (এবং সোলারিস, স্পষ্টতই) mkfileকমান্ডটিও উপলব্ধ:

mkfile 10g big_file

এটি "বিগ_ফাইলে" নামের একটি 10 ​​জিবি ফাইল করে। এখানে এই পদ্ধতির সন্ধান


এটি ওএস এক্সের মতো পরিস্থিতিতে যেমন দরকারী truncateএবং fallocateআদেশগুলি উপলভ্য নয় তেমন কার্যকর। ddউপরে বর্ণিত হিসাবে এটি কাজ করে যদিও এটি mমেগাবাইটের জন্য, না M
ব্যবহারকারীর 3535673

ভুল: এটি একটি 10 জিবি ফাইল তৈরি করে (= ~ 10,7 গিগাবাইট)।
মিষ্টান্ন

20

এই আদেশটি ব্যবহার করুন:

যদি ডিডি = = $ আউটপুট-ফাইল বিএস = $ ব্লক-সাইজ গণনা = $ NUM-ব্লকগুলির ইনপুট-ফাইল

একটি বড় (খালি) ফাইল তৈরি করতে সেট করুন $INPUT-FILE=/dev/zero
ফাইলের মোট আকার হবে $BLOCK-SIZE * $NUM-BLOCKS
নতুন ফাইল তৈরি হবে $OUTPUT-FILE


প্রশ্ন করলেন কেন?
হেনরি বি

9
উত্তরের জন্য আমার কাছে গুগলকে ছিল, তাই আমি এটি এখানে রেখেছি, তাই এটি নিয়ে আলোচনা করা এবং টু ডেট রাখা যেতে পারে ... আপনি কি জানেন পুরো সাইটের পয়েন্ট?
গ্রুন্ডলেফ্লেক

2
আমি জানি লোকেরা @ গ্রান্ডলেফ্লেককে এক্সপি বেশ্যা করার জন্য ভোট দিচ্ছে, তবে তার একটা বক্তব্য আছে - জেফ এবং জোয়েল কল্পনা করে এই সাইটটি ব্যবহার করার একটি উপায় যা আপনি সন্ধান করেছেন তার জন্য একটি প্রশ্ন এবং উত্তর দেওয়া put
পল টমবলিন

3
ধন্যবাদ পল। যদিও আমি পয়েন্টগুলি নিয়ে তেমন বিরক্ত নই, গুগলে আমি যে জিনিসগুলি পাই তা সম্পর্কে আমি বিরক্ত বোধ করছি যেগুলি এখানে কোনওভাবে জিজ্ঞাসা না করা ছাড়া আমি কখনই খুঁজে পাব না। লোকেরা নির্দ্বিধায় আমার প্রশ্নোত্তর / সম্প্রদায়কে মালিকানা বানাতে পারে যদি তারা মনে করে যে আমি বেশ্যা করছি, সঙ্কুচিত হই ।
গ্রুন্ডলেফ্লেক

2
এফএকিউ এর উদ্ধৃতিটি "আপনার নিজের প্রোগ্রামিং প্রশ্নটি জিজ্ঞাসা করা এবং উত্তর দেওয়াও পুরোপুরি ঠিক, তবে আপনি ঝুঁকিতে রয়েছেন: এটি একটি প্রশ্নের আকারে বাক্যাংশ করুন।"
ক্রেগ অ্যাঙ্গাস

17

আপনি প্রোগ্রামগতভাবে এটি করতে পারেন:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main() {
    int fd = creat("/tmp/foo.txt", 0644);
    ftruncate(fd, SIZE_IN_BYTES);
    close(fd);
    return 0;
}

এই পদ্ধতির পরে মেমরিতে ফাইল এমএম্যাপ করার জন্য বিশেষভাবে কার্যকর ।

ফাইলটির সঠিক আকার আছে কিনা তা পরীক্ষা করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

# du -B1 --apparent-size /tmp/foo.txt

সতর্ক হোন:

# du /tmp/foo.txt

সম্ভবত 0 টি মুদ্রণ করবে কারণ এটি আপনার ফাইলসিস্টেম দ্বারা সমর্থিত হলে স্পার্স ফাইল হিসাবে বরাদ্দ করা হয়।

আরও দেখুন: মানুষ 2 খোলা এবং 2 জন কেটে গেছে


10

আপনি করতে পারেন:

[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext

আপনি যেখানে লিখতে চান সেই সংখ্যা সহ 100 টি প্রতিস্থাপন করুন।


এবং আসল ফিলিং বাইট পাশাপাশি। আমার "ff xff" দরকার এবং ভাল কাজ করে। ধন্যবাদ! :)
রায়

10

এর মধ্যে কয়েকটি উত্তর /dev/zeroআপনার ডেটা উত্সের জন্য ব্যবহার করছে using যদি আপনার টেস্টিং নেটওয়ার্কটি আপলোডের গতি হয় তবে আপনার অ্যাপ্লিকেশনটি কোনও সংক্ষেপণ করছে যদি এটি সর্বোত্তম ধারণা নাও হতে পারে তবে জিরো সংক্ষেপে পূর্ণ একটি ফাইলটি সত্যিই ভালভাবে কমপ্রেস করে । ফাইলটি উত্পন্ন করতে এই কমান্ডটি ব্যবহার করা হচ্ছে

 dd if=/dev/zero of=upload_test bs=10000 count=1

আমি upload_testপ্রায় 200 বাইটে কমপ্রেস করতে পারি । সুতরাং আপনি নিজেকে এমন পরিস্থিতিতে ফেলতে পারেন যেখানে আপনি মনে করেন যে আপনার 10 কেবি ফাইল আপলোড করা হচ্ছে তবে এটি আসলে অনেক কম হবে।

আমি প্রস্তাবিত /dev/urandomপরিবর্তে ব্যবহার করা হয় /dev/zero। আমি আউটপুট মোটেও কমপ্রেস করতে পারি না /dev/urandom


আমার এম্বেড থাকা সিস্টেমে নেই /dev/zero, তাই /dev/urandomভাল।
ফ্রেড্রিক গাউস

9
dd if=/dev/zero of=my_file.txt count=12345

4
মনে রাখবেন যে ডিডির ডিফল্ট ব্লকের আকার 512 বাইট, সুতরাং এই কমান্ডটি 12345 * 512 বাইট আকারে একটি ফাইল তৈরি করবে।
কেউ নেই

4

এখানে প্রচুর উত্তর রয়েছে, তবে আর কী করা যায় তা সুন্দরভাবে ব্যাখ্যা করেনি। ডিডির জন্য ম্যান পৃষ্ঠাগুলি সন্ধান করলে কোনও ফাইলের আকার আরও ভালভাবে নির্দিষ্ট করা সম্ভব।

এটি শূন্যে ভরা /tmp/zero_big_data_file.bin তৈরি করতে চলেছে, যার আকার 20 মেগাবাইট রয়েছে:

    dd if=/dev/zero of=/tmp/zero_big_data_file.bin  bs=1M count=20

এটি শূন্যে ভরা /tmp/zero_1000bytes_data_file.bin তৈরি করতে চলেছে, এর আকার 1000 বাইট:

    dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin  bs=1kB count=1

অথবা

    dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin  bs=1000 count=1

  • সমস্ত উদাহরণে, বিএস হ'ল ব্লকের আকার এবং গণনাটি ব্লকের সংখ্যা
  • ব্লক এবং বিওয়াইটিএস নিম্নলিখিত গুণক প্রত্যয়গুলি অনুসরণ করতে পারে: সি = 1, ডাব্লু = 2, খ = 512, কেবি = 1000, কে = 1024, এমবি = 1000 * 1000, এম = 1024 * 1024, এক্সএম = এম জিবি = 1000 * 1000 * 1000, জি = 1024 * 1024 * 1024, এবং টি, পি, ই, জেড, ওয়াই এর জন্য


3

এটি বর্তমান ডিরেক্টরিতে এলোমেলো অক্ষর সহ 4 এমবি পাঠ্য ফাইল উত্পন্ন করবে এবং এর নাম "4mb.txt" আপনি বিভিন্ন আকার এবং নাম উত্পন্ন করতে পরামিতি পরিবর্তন করতে পারবেন।

base64 /dev/urandom | head -c 4000000 > 4mb.txt

0

fallocateআপনি যদি ডিস্কের জন্য অপেক্ষা না করতে চান তবে ব্যবহার করুন ।

উদাহরণ:

fallocate -l 100G BigFile

ব্যবহার:

Usage:
 fallocate [options] <filename>

Preallocate space to, or deallocate space from a file.

Options:
 -c, --collapse-range remove a range from the file
 -d, --dig-holes      detect zeroes and replace with holes
 -i, --insert-range   insert a hole at range, shifting existing data
 -l, --length <num>   length for range operations, in bytes
 -n, --keep-size      maintain the apparent size of the file
 -o, --offset <num>   offset for range operations, in bytes
 -p, --punch-hole     replace a range with a hole (implies -n)
 -z, --zero-range     zero and ensure allocation of a range
 -x, --posix          use posix_fallocate(3) instead of fallocate(2)
 -v, --verbose        verbose mode

 -h, --help           display this help
 -V, --version        display version
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.