EXT3: যদি ব্লকের আকার 4K হয় তবে কেন ls -l এর নীচে ফাইল আকার দেখায়?


16

আপনি যদি একটি চিঠিযুক্ত ফাইলটিতে ls -l চালনা করেন তবে এটি 2 বি আকারের তালিকাবদ্ধ হবে। যদি আপনার ফাইল সিস্টেমটি 4 কে ব্লকে থাকে, আমি ভেবেছিলাম এটি ব্লকের আকার পর্যন্ত ফাইলগুলি গোল করে? এলএস-এল আসলে ইনোড থেকে বাইট গণনাটি পড়ার কারণে এটি কি? কোন পরিস্থিতিতে আপনি লিনাক্স ২.6 কার্নেল জিএনইউ ব্যবহারগুলিতে প্রকৃত বাইট গণনা উত্তর বনাম উত্তরগুলি ব্লক করতে চান?


2
মনে রাখবেন, এই ext4 "ছোট ফাইল প্যাকিং" এর ধারণার সাথে পরিচয় করিয়ে দেয়, তারপরে একটি ছোট ফাইল একই ডিস্কটি দখল করে তার ইনোড
ওকাদ

উত্তর:


20

আমি অনুমান করি যে আপনি একটি চিঠিটি ফাইলটিতে পেয়েছেন echo a > fileবা vim fileযার অর্থ, আপনার কাছে সেই চিঠিটি এবং একটি অতিরিক্ত নিউলাইন থাকবে (দুটি অক্ষর, এভাবে দুটি বাইট)। ls -lফাইলের আকার বাইটে দেখায়, ব্লক নয় (আরও সুনির্দিষ্ট হতে: ফাইলের দৈর্ঘ্য ):

$ echo a > testfile
$ ls -l testfile
-rw-r--r-- 1 user user 2 Apr 28 22:08 testfile
$ cat -A testfile
a$

(নোটগুলি চরিত্র cat -Aহিসাবে নতুন লাইনের প্রদর্শন করে $)

এর বিপরীতে ls -l, duডিস্কে থাকা প্রকৃত আকারটি প্রদর্শিত হবে:

$ du testfile
4

(প্রকৃতপক্ষে, du1kiB ইউনিটে আকার দেখায়, সুতরাং এখানে আকার 4 × 1024 বাইট = 4096 বাইট = 4 কিবি, যা এই ফাইল সিস্টেমের ব্লক আকার)

এটি lsদেখানোর জন্য, আপনাকে -sবিকল্পগুলি / এর পরিবর্তে / ব্যবহার করতে হবে -l:

$ ls -ls testfile
4 -rw-r--r-- 1 user user 2 Apr 28 22:08 testfile

প্রথম কলামটি বরাদ্দ আকার, আবার 1kiB এর ইউনিটগুলিতে। শেষ উল্লেখ করে --block-sizeউদাহরণস্বরূপ পরিবর্তন করা যেতে পারে

$ ls -ls --block-size=1 testfile
4096 -rw-r--r-- 1 aw aw 2 Apr 28 22:08 testfile

3
এবং তদ্ব্যতীত, দুটি তথ্য পেয়ে ভাল লাগল। ফাইল সিস্টেমগুলি "টেল কমপ্যাকশন" (এসপি?) করতে পারে (সংক্ষিপ্ত ফাইলগুলির মধ্যে ভাগ করে নেওয়া একটি ব্লক ব্যবহার করুন), "লেখার অনুলিপি" এবং "ছিদ্র পঞ্চিং" ... ফাইলের আকারকে তৈরি করে <-> ডিস্ক স্পেস সম্পর্ককে একটি জটিল।
রোমানো

9

আমি মনে করি যে গভীর উত্তরটি নিম্নলিখিত:

লজিক্যাল ফাইলের দৈর্ঘ্য এবং ডিস্কের স্থান দখল করা সত্যই আলাদা জিনিস।

অন্যান্য উত্তর দেখান, দুই বাইট দিয়ে তৈরি নীতি একটি ফাইলে দৈর্ঘ্য দুই বাইট (দ্বারা প্রদর্শনী হয়েছে ls -l) এবং (দ্বারা প্রদর্শনী ব্যাপৃত 4 KiB duবা ls -ls)।

দেখা:

1& [:~/tmp] % echo -n A > test
1& [:~/tmp] % ls -l test
-rw-rw-r-- 1 romano romano 1 Apr 28 14:31 test
1& [:~/tmp] % du test
4 test

ঠিক আছে, testদৈর্ঘ্য 1 এবং আকার (ডিস্কে) 4 কিবি রয়েছে। কিন্তু:

1& [:~/tmp] % truncate -s +8191 test
1& [:~/tmp] % ls -l test
-rw-rw-r-- 1 romano romano 8192 Apr 28 14:33 test
1& [:~/tmp] % du test
4   test

(প্রথম কমান্ডটিতে 8191 শূন্য বাইট যুক্ত করুন test), এখন পরীক্ষার দৈর্ঘ্য 8192 রয়েছে তবে এটিতে ডিস্কে 4 কিবি রয়েছে (এটিতে একটি "গর্ত" রয়েছে) (1)

কিছু ফাইল সিস্টেম সংক্ষিপ্ত ফাইলগুলিও কমপ্যাক্ট করতে পারে যাতে তারা ব্লকগুলি ভাগ করে কম স্থান দখল করে (উদাহরণস্বরূপ লেজ প্যাকিং দেখুন ) এবং বিটিআরএফ-র মতো অন্যরা লেখার ক্ষেত্রে অনুলিপি করে থাকে , সুতরাং কোনও ফাইলের মধ্যে সম্পর্ক, এর যৌক্তিক দৈর্ঘ্য এবং এটি কতটা স্থান দখল করে? একটি ডিস্ক একটি জটিল এক।

পাদটিকা:

(1) এটি আসলে কোনও গর্ত নয় , এটি শেষে রয়েছে ... তবে এখনও এটি উদাহরণের শেষে কাজ করে।


5

ls -lএটি কেবল একটি দীর্ঘ ফর্ম্যাট। ls -lsব্লক আকার প্রদর্শন করতে ব্যবহৃত হয়।

পরীক্ষামূলক

echo "1" > 1.txt

bash-3.2$ ls -l 1.txt
-rw-rw-r-- 1 ramesh ramesh 2 Apr 28 15:15 1.txt

আমরা দেখতে পাচ্ছি ফাইলটির আকার 2B হিসাবে তালিকাভুক্ত করা হয়েছে। তবে আপনাকে যদি ব্লকের আকার পরীক্ষা করতে হয় তবে আপনার নীচের কমান্ডটি চালানো উচিত।

bash-3.2$ ls -ls 1.txt
4 -rw-rw-r-- 1 ramesh ramesh 2 Apr 28 15:15 1.txt

উপরের 4 টি ব্যবহার করা ব্লকের আকার প্রদর্শন করে। আমরা statকমান্ডটি ব্যবহার করে এটিও যাচাই করতে পারি ।

bash-3.2$ stat 1.txt
  File: `1.txt'
  Size: 2               Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d      Inode: 48267720    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  505/  ramesh)   Gid: (  508/  ramesh)
Access: 2014-04-28 15:17:31.000000000 -0500
Modify: 2014-04-28 15:15:58.000000000 -0500
Change: 2014-04-28 15:15:58.000000000 -0500

এখন প্রশ্ন ওঠে যে কেন ls -lsব্লকের আকার 4 হিসাবে তালিকাভুক্ত করা হয় এবং ব্লকের আকার 8 হিসাবে statপ্রদর্শিত হয়। এই আচরণের কারণটি এখানে উত্তরে পরিষ্কারভাবে ব্যাখ্যা করা হয়েছে

অনেকগুলি ডিস্কের সেক্টর আকার 512 বাইট হয়, যার অর্থ ডিস্কে যে কোনও পড়া বা লেখা পুরো সময়ে 512-বাইট সেক্টর স্থানান্তর করে। ফাইল সিস্টেমগুলির ডিজাইন করা একেবারেই স্বাভাবিক, যেখানে কোনও সেক্টর ফাইলগুলির মধ্যে বিভক্ত হয় না (এটি ডিজাইনের জটিলতা সৃষ্টি করবে এবং ক্ষতিগ্রস্থ পারফরম্যান্স করবে); অতএব ফাইল সিস্টেমগুলির জন্য ফাইলগুলির জন্য 512-বাইট অংশগুলি ব্যবহার করার প্রবণতা রয়েছে। যেমন অত: পর ঐতিহ্যগত ইউটিলিটি lsএবং du512-বাইট অংশ ইউনিট মাপ নির্দেশ করে।

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