পরীক্ষার উদ্দেশ্যে আমাকে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করতে হবে (একটি আপলোডের সীমা পরীক্ষা করতে)।
লিনাক্সে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করার জন্য একটি আদেশ কী?
পরীক্ষার উদ্দেশ্যে আমাকে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করতে হবে (একটি আপলোডের সীমা পরীক্ষা করতে)।
লিনাক্সে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করার জন্য একটি আদেশ কী?
উত্তর:
dd if=/dev/zero of=upload_test bs=file_size count=1
file_size
বাইটগুলিতে আপনার পরীক্ষার ফাইলের আকার কোথায়
dd
তাই একটি ফাইল 4 গিগাবাইট চেয়ে বড় তৈরি করতে 2 ^ 32 তার মানের জন্য একটি সীমা আছে, সেখানে একটি কৌতুক আছে: dd if=/dev/zero of=test bs=1M count=<size in megabytes>
।
দয়া করে, আধুনিক সহজ এবং দ্রুততর faster লিনাক্সে, (একটি চয়ন করুন)
truncate -s 10G foo
fallocate -l 5G bar
এটা তোলে দরকার যে বিবৃত করা truncate
একটি ফাইল সিস্টেমে সমর্থনকারী বিক্ষিপ্ত ফাইল বিক্ষিপ্ত ফাইল তৈরি করবে এবং fallocate
করবে না। একটি বিরল ফাইল হ'ল ফাইলটি তৈরি করা বরাদ্দ ইউনিটগুলি ব্যবহার না করা পর্যন্ত আসলে বরাদ্দ দেওয়া হয় না। ফাইলের জন্য মেটা-ডেটা হবে তবে কিছু বিবেচনাযোগ্য স্থান কিন্তু সম্ভবত কোথায় ফাইলের আসল আকার কাছাকাছি পর্যন্ত সময় লাগতে। এই ধরণের ফাইলটির সুবিধাগুলি এবং অসুবিধাগুলি বেশি থাকায় আপনার আরও তথ্যের জন্য স্পার ফাইল সম্পর্কে সংস্থানগুলি নিয়ে পরামর্শ করা উচিত। একটি অবিচ্ছিন্ন ফাইলটির ব্লকগুলি (বরাদ্দ ইউনিট) সময় পূর্বে বরাদ্দ করা হয় যার অর্থ ফাইল সিস্টেম যতটা দেখেছে ততক্ষেত্রে স্থানটি সংরক্ষিত থাকবে। এছাড়াও fallocate
কিংবা truncate
একটি নির্দিষ্ট মান ফাইলের বিষয়বস্তু নির্ধারণ করে করা হবে না মত dd
পরিবর্তে একটি ফাইলের বিষয়বস্তু সঙ্গে বরাদ্দ fallocate
বা truncate
কোনো আবর্জনা মান নির্মাণের সময় বরাদ্দ ইউনিট অস্তিত্ব এবং এই আচরণ বা আকাঙ্ক্ষিত হতে পারে হতে পারে। dd
কারণ এটি আসলে এটা কমান্ড লাইন অপশন সঙ্গে উল্লিখিত সম্পূর্ণ ফাইল প্রবাহে ডেটার মান বা খণ্ড লিখেছেন ধীরতম হয়।
এই আচরণটি সম্ভবত পৃথক হতে পারে - ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভর করে এবং কোনও ফাইলের সিস্টেমের মান বা স্পেসিফিকেশনের সাথে সংযোগ করে con সুতরাং এটি পরামর্শ দেওয়া হয় যে উপযুক্ত পদ্ধতিটি ব্যবহার করা হয়েছে তা নিশ্চিত করার জন্য উপযুক্ত গবেষণা করা হয়।
truncate
। এটি উপরের সিনট্যাক্স ব্যবহার করে একটি শূন্য আকারের ফাইল তৈরি করেছে। এর জন্য 'ম্যান পেজ' fallocate
বলে যে এটি তৈরি করা ফাইলগুলি space
ডেটার পরিবর্তে খালি পূর্ণ । এটি প্রত্যাশিত কিছু ক্ষেত্রে যেমন "1 জি ফাইলটি অনুলিপি করতে কতক্ষণ সময় নেয়" এর জন্য এটি কার্যকর হবে না বলে মনে হয়।
brew install coreutils
। এই যোগ হবে ছ কমান্ড সামনে, তাই আপনি ভালো এটি চালানোর জন্য আছে: gtruncate -s 10G foo
। আশাকরি এটা সাহায্য করবে!
NTFS
বিভাজনে কাজ করে না ।
কেবল টমের পোস্ট অনুসরণ করতে আপনি খুব কম ফাইলগুলি তৈরি করতে ডিডি ব্যবহার করতে পারেন:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
এটি বেশিরভাগ ইউনিক্সগুলিতে একটি "গর্ত" দিয়ে একটি ফাইল তৈরি করবে - তথ্যটি আসলে ডিস্কে লিখিত হবে না বা শূন্য ব্যতীত অন্য কোনও কিছু না লেখা পর্যন্ত কোনও স্থান গ্রহণ করবে না।
count=0
, bs * seek
ফাইলের আকার হয়ে যায়
ওএসএক্সে (এবং সোলারিস, স্পষ্টতই) mkfile
কমান্ডটিও উপলব্ধ:
mkfile 10g big_file
এটি "বিগ_ফাইলে" নামের একটি 10 জিবি ফাইল করে। এখানে এই পদ্ধতির সন্ধান ।
truncate
এবং fallocate
আদেশগুলি উপলভ্য নয় তেমন কার্যকর। dd
উপরে বর্ণিত হিসাবে এটি কাজ করে যদিও এটি m
মেগাবাইটের জন্য, না M
।
এই আদেশটি ব্যবহার করুন:
যদি ডিডি = = $ আউটপুট-ফাইল বিএস = $ ব্লক-সাইজ গণনা = $ NUM-ব্লকগুলির ইনপুট-ফাইল
একটি বড় (খালি) ফাইল তৈরি করতে সেট করুন $INPUT-FILE=/dev/zero
।
ফাইলের মোট আকার হবে $BLOCK-SIZE * $NUM-BLOCKS
।
নতুন ফাইল তৈরি হবে $OUTPUT-FILE
।
আপনি প্রোগ্রামগতভাবে এটি করতে পারেন:
#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 জন কেটে গেছে
এর মধ্যে কয়েকটি উত্তর /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
ভাল।
এখানে প্রচুর উত্তর রয়েছে, তবে আর কী করা যায় তা সুন্দরভাবে ব্যাখ্যা করেনি। ডিডির জন্য ম্যান পৃষ্ঠাগুলি সন্ধান করলে কোনও ফাইলের আকার আরও ভালভাবে নির্দিষ্ট করা সম্ভব।
এটি শূন্যে ভরা /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
শেল কমান্ড হিসাবে:
< /dev/zero head -c 1048576 > output
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