কেন এলএস-এল আউটপুটকে এলএস-এস থেকে আলাদা আকার দেয়?


38

আমি নিম্নলিখিত ফলাফলগুলি কেন পাচ্ছি তা বুঝতে পারি না:

ls -l আমাকে একটি প্রদত্ত ফাইলের আকার বলুন (ইতিহাস) "581944":

$ ls -l HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY

ls -s এটি "572" বলে:

$ ls -s HISTORY
572 HISTORY

আমার অবশ্যই স্পষ্টতই মানগুলিকে তুলনীয় স্কেল ব্যবহার করা দরকার। সুতরাং প্রথম আমি নিশ্চিত করছি যে ব্যবহার --block-size 1মধ্যে ls -lআমাকে আগের মতই ফলাফলের দেয়:

$ ls -l --block-size 1 HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY

তারপরে আমি ls -sএকই স্কেলে একটি মান পেতে একই কাজ:

$ ls -s --block-size 1 HISTORY 
585728 HISTORY

বিভিন্ন ফলাফল! 581944 ≠ 585728

আমি অন্যান্য উপায়ে তুলনামূলক মানগুলি উত্পাদন করার চেষ্টা করেছি -k, তবে আমি পেয়েছি:

$ ls -lk HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY 
572 HISTORY

আবার, বিভিন্ন ফলাফল, 569 ≠ 572

উভয় বিকল্প একই স্কেল ব্যবহার করছে তা নিশ্চিত করার জন্য আমি উল্লেখ করার চেষ্টা করেছি: কোনও লাভ হয়নি:

$ ls -lk --si HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY 
586k HISTORY

... আবার বিভিন্ন মান: 582 কে ≠ 586 কে

আমি ওয়েবে অনুসন্ধান চেষ্টা করেছিলেন কিন্তু আমি শুধু খুঁজে পাইনি প্রাসঙ্গিক করলো ছিল এই :

কিছু ফাইলের মধ্যে "ছিদ্র" থাকে, যাতে ls -s(...) দ্বারা তালিকাভুক্ত ব্যবহার তালিকাভুক্ত ফাইল আকারের চেয়ে কম হয় ls -l। "

(মনে রাখবেন যে আমার ফলাফলগুলিতে বিপরীতটি ঘটে: ls -sরিটার্নগুলি মাপের চেয়ে বড় ls -lনয়, ছোট।

এদিকে, এই পৃষ্ঠাটি বলে যে

ইউনিক্স ফাইলের গর্তগুলি সনাক্ত করার জন্য কোনও মার্জিত উপায় নেই।

সুতরাং, আমি এই তাত্পর্যটি কীভাবে মোকাবেলা করতে পারি? এই মানগুলির মধ্যে কোনটি সঠিক হিসাবে বিবেচনা করা যেতে পারে? এটি সম্ভবত কোনও বাগ-ইন হতে পারে ls?

উত্তর:


47

সংক্ষিপ্ত উত্তর:

  • ls -l ফাইলটির আকার দেয় (= এটিতে থাকা ডেটার পরিমাণ)
  • ls -s --block-size 1 ফাইল সিস্টেমে ফাইলের আকার দেয়

দুটি ফাইল তৈরি করা যাক:

একটি বিক্ষিপ্ত ফাইল 128 দৈর্ঘ্য বাইট (একটি বিক্ষিপ্ত ফাইলটি একটি ফাইলটি খালি ব্লক সম্বলিত দেখতে বিরল ফাইল ):

# truncate -s 128 f_zeroes.img
# hexdump -vC f_zeroes.img 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080

এলোমেলো তথ্য সহ আরও একটি ফাইল, 128 বাইট আকারেরও:

# dd if=/dev/urandom of=f_random.img bs=1 count=128
# hexdump -vC f_random.img 
00000000  bc 82 9c 40 04 e3 0c 23  e6 76 79 2f 95 d4 0e 45  |...@...#.vy/...E|
00000010  19 c6 53 fc 65 83 f8 58  0a f7 0e 8f d6 d6 f8 b5  |..S.e..X........|
00000020  6c cf 1b 60 cb ef 06 c6  d0 99 c6 16 3f d3 95 02  |l..`........?...|
00000030  85 1e b7 80 27 93 27 92  d0 52 e8 72 54 25 4d 90  |....'.'..R.rT%M.|
00000040  11 59 a2 d9 0f 79 aa 23  2d 44 3d dd 8d 17 d9 36  |.Y...y.#-D=....6|
00000050  f5 ae 07 a8 c1 b4 cb e1  49 9e bc 62 1b 4f 17 53  |........I..b.O.S|
00000060  95 13 5a 1c 2a 7e 55 b9  69 a5 50 06 98 e7 71 83  |..Z.*~U.i.P...q.|
00000070  5a d0 82 ee 0b b3 91 82  ca 1d d0 ec 24 43 10 5d  |Z...........$C.]|
00000080

সুতরাং, আপনি যেমন হেক্স উপস্থাপনে দেখতে পাচ্ছেন, উভয় ফাইলে একই পরিমাণের ডেটা রয়েছে , যদিও সামগ্রীটি সম্পূর্ণ আলাদা quite

এখন, ডিরেক্টরিটি দেখুন:

# ls -ls --block-size 1 f_*
1024 -rw-r--r-- 1 user user 128 Mar 18 15:34 f_random.img
   0 -rw-r--r-- 1 user user 128 Mar 18 15:32 f_zeroes.img
   ^                         ^
   |                         |
Amount which the           Actual file size
files takes on the fs

প্রথম মানটি -s --block-size 1বিকল্প দ্বারা দেওয়া হয় , এটি ফাইল সিস্টেমে ফাইলের দ্বারা ব্যবহৃত স্থানের পরিমাণ

আপনি দেখতে পাচ্ছেন, স্পার ফাইলটি শূন্য স্থান নেয়, যেহেতু ফাইল সিস্টেমটি ( ext3এই ক্ষেত্রে) যথেষ্ট স্মার্ট ছিল যে এটিতে কেবল শূন্য রয়েছে recognize এছাড়াও, এলোমেলো ডেটা সহ ফাইলটি ডিস্কে 1024 বাইট নেয়!

মান অন্তর্নিহিত ফাইল সিস্টেম কীভাবে ফাইলগুলি আচরণ করে তার উপর নির্ভর করে (ব্লকের আকার, স্পার ফাইলের ক্ষমতা, ...)।

ষষ্ঠ কলামে ফাইলের আকারটি যদি আপনি এটি পড়তে থাকেন - এটি ফাইলের যে পরিমাণ ডেটা রয়েছে তা এবং এটি উভয় ফাইলের জন্য 128 বাইট!


1
সম্ভবত, এমনকি একটি শূন্য ফাইল বা নাল মান পূর্ণ ফাইল কোথাও ফাইল বরাদ্দ সারণীতে স্থান নিতে হবে? কেন এটি ls -sগণনা হয় না ?
ফ্লিম

2
ফাইলগুলি সম্পর্কে মেটাডেটা ইনোডে সঞ্চয় করা হয়। প্রতিটি ফাইল সিস্টেমে এটি ব্যবহার করতে পারে এমন সীমিত পরিমাণের ইনোড থাকে। কোনও ফাইল সিস্টেমে কতগুলি ফ্রি ইনোড রয়েছে এবং সেগুলির আকার: sudo tune2fs -l /dev/sdaX|grep Inodeবা df -iসমস্ত পার্টিশনের জন্য To
ফোবিবস

1
আমি এটি যাচাই করার জন্য একটি আকর্ষণীয়, অ-কৃত্রিম উপায় খুঁজে পেয়েছি: টরেন্ট। পার্ট ফাইলগুলি গর্তযুক্ত ফাইলগুলির ভাল উদাহরণ বলে মনে হচ্ছে: ls -lsh ~/Downloads/torrentsউদাহরণস্বরূপ, আমাকে দেয় 92K -rw-r--r-- 1 waldir waldir 350M Sep 15 2012 video.avi.part। অর্থাৎ, 92-কে, -s বিকল্প দ্বারা প্রত্যাবর্তিত, ফাইলটি প্রকৃত স্থান হিসাবে গ্রহণ করবে, ফাইল-সিস্টেম-ভিত্তিক, এবং -l বিকল্প দ্বারা ফিরে আসা 350 এম, সম্পূর্ণরূপে ডাউনলোড করা থাকলে ফাইলের পূর্ণ আকার হবে (যেমন শুরু থেকে শেষ পর্যন্ত সমস্ত বাইট যদি শূন্য থেকে থাকে)। দেখুন lists.freebsd.org/pipermail/freebsd-questions/2012-June/...
waldyrious

14

ls -sআপনাকে ফাইলের বরাদ্দ আকার, সর্বদা বরাদ্দ ইউনিটের একাধিক বলে। ls -lপ্রকৃত আকার বলে। পরীক্ষার একটি সহজ উপায়:

$ echo 1 > sizeTest
$ ls -l --block-size 1 sizeTest 
-rw-rw-r-- 1 g g 2 Mär 18 15:18 sizeTest
$ ls -s --block-size 1 sizeTest 
4096 sizeTest
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.