সিপি বনাম বিড়াল একটি ফাইল অনুলিপি করতে


12

cp a bএবং cat a > b, পার্থক্য কি?

লিনাক্স কার্নেলের উত্স ট্রি ( arch/x86/boot/install.sh) এর x86 ইনস্টল স্ক্রিপ্টে , উভয়ই ব্যবহৃত হয়:

cat $2 > $4/vmlinuz
cp $3 $4/System.map

একজনের থেকে অন্যের চেয়ে ভাল হলে তারা কেন একই ফর্ম্যাটটি রাখবে না?

উত্তর:


15

আর একটি বিষয় আমার মনে আসে যেখানে catবনাম cpএকটি উল্লেখযোগ্য পার্থক্য করে:

সংজ্ঞা অনুসারে, বিড়াল বিচ্ছিন্ন ফাইলগুলি প্রসারিত করবে, "রিয়েল" শূন্য বাইট দিয়ে শূন্যস্থান পূরণ করবে, এবং কমপক্ষে সিপিকে গর্তগুলি সংরক্ষণ করার জন্য বলা যেতে পারে।

স্পার্স ফাইলগুলি এমন ফাইলগুলি যেখানে শূন্য বাইটের ক্রম স্থান সংরক্ষণের জন্য মেটাডেটা দ্বারা প্রতিস্থাপন করা হয়েছিল। আপনি ডিডি দিয়ে একটি তৈরি করে পরীক্ষা করতে পারেন এবং এটি আপনার পছন্দসই সরঞ্জামগুলির সাথে সদৃশ করতে পারেন।

  1. একটি বিরল ফাইল তৈরি করুন (ঝামেলা এড়ানোর জন্য আগে / tmp এ পরিবর্তন করা - চূড়ান্ত নোট দেখুন):

    15> cd /tmp
    16> dd if=/dev/null of=sparsetest bs=512b seek=5 
    0+0 records in 
    0+0 records out 
    0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/s
    
  2. আকার এটি - এটি কোনও স্থান গ্রহণ করা উচিত নয়।

    17> du -sh sparsetest
    0       sparsetest
    
  3. এটি সিপি এবং চেক আকারের সাথে অনুলিপি করুন

    18> cp sparsetest sparsecp
    19> du -sh sparsecp
    0       sparsecp
    
  4. এখন এটি বিড়াল এবং চেক আকারের সাথে অনুলিপি করুন

    20> cat sparsetest > sparsecat
    21> du -sh sparsecat
    1.3M    sparsecat
    
  5. আপনার পছন্দসই সরঞ্জামগুলি তাদের আচরণের উপর নজর রাখতে চেষ্টা করুন

  6. পরিষ্কার করতে ভুলবেন না

সাবধানতার চূড়ান্ত দ্রষ্টব্য: আপনি যদি তার ব্যাকআপ পরিকল্পনার অংশ, বা সিস্টেমের সুস্থতার জন্য সমালোচনা করে থাকেন তবে এই জাতীয় পরীক্ষাগুলি আপনার স্থানীয় সিসাদমিনের সাথে আপনার খ্যাতি বাড়ানোর সহজাত সম্ভাবনা রয়েছে। ব্যাকআপের জন্য তার পছন্দ অনুসারে সরঞ্জামটির উপর নির্ভর করে, তাকে সম্ভবত 0-বাইট ফাইলটি ব্যাকআপ করা সম্ভব বলে মনে করা হয়েছে তার চেয়ে বেশি টেপ মিডিয়া প্রয়োজন, যা জেরো টেরাবাইটে প্রসারিত হয়।

অন্যান্য ফাইলগুলি যা বিড়াল বা সিপির সাথে অনুলিপি করা যায় না সেগুলির মধ্যে ডিভাইস-বিশেষ ফাইল ইত্যাদি অন্তর্ভুক্ত থাকে It এটি আপনার অনুলিপি সরঞ্জাম প্রয়োগের উপর নির্ভর করে যদি এটি ডিভাইস নোডকে সদৃশ করতে সক্ষম হয়, বা যদি এটি পরিবর্তে এর সামগ্রীগুলি অনুলিপি করে তোলে।


1
সুতরাং cpমূল ফাইলের মতো একটি ফাইল catতৈরি করে , যখন একই বিষয়বস্তু সহ একটি নতুন ফাইল তৈরি করে।
কিয়ান

দুটি সরঞ্জামই সামগ্রীতে কাজ করে তবে সিপি (কমপক্ষে "আধুনিক" বাস্তবায়ন) আজকাল কিছু বিশেষত্ব সম্পর্কে অবগত, যেমন ছিদ্রগুলির মতো (বিড়ালের পুরানো বাস্তবায়ন সেই ফাঁদে চলে যাবে)। এমন ফাইল সিস্টেমগুলিও রয়েছে যা স্পার ফাইলগুলির ধারণা সম্পর্কে অবগত নয়, উদাহরণস্বরূপ এইচএফএস + (ম্যাকোস) বা ফ্যাট (এমএসডিএস, ইউএসবি-স্টিকস, ইত্যাদি) যার ফলে তাদের পুরো আকার পর্যন্ত উড়ে যায়। সুতরাং এমন নক্ষত্র রয়েছে যেখানে সিপি বা বিড়াল অনুশীলনে কোনও পার্থক্য আনবে না।
তাতজানা হিউসার 15

বিটিডব্লিউ, জিএনইউতে cpবিচ্ছিন্ন ফাইলগুলিতে এর আচরণ নিয়ন্ত্রণের জন্য একটি বিকল্প রয়েছে; মত, সঙ্গে --sparse=never, কমান্ড লাইনে উল্লিখিত, cpযত ধীর cat
ওগুজ ইসমাইল

6

মতে কিথ এর মন্তব্য , cpকিছু অনুমতি অপরিবর্তিত, এবং catনতুন ফাইল তৈরি করে umaskনির্দেশ করে। সুতরাং $2এর অনুমতি সংরক্ষিত হয় যে $4/vmlinuzচমত্কার পরিষ্কার, যখন যদি কিছু অদ্ভুত অনুমতি সেট করা হয় $3, $4/System.mapযে রাখা হবে।


catএর তাত্পর্যতা কারণ হিসাবে চিহ্নিত করা হয়?
নিখিল মুলি

2
কি catদ্রুত?
কিয়ান

4

এই দুটি ক্ষেত্রে উভয়ের সমতুল্য কার্যকারিতা রয়েছে তবে সিপি খাঁটি ফাইল অপারেশন। "এই ফাইলটি নিয়ে সেখানে একটি অনুলিপি তৈরি করুন" make

বিড়াল, অন্যদিকে, কনসোলে কোনও ফাইলের বিষয়বস্তু ফেলে দেওয়ার উদ্দেশ্যে। "এই ফাইলটি নিন এবং এটি স্ক্রিনে প্রদর্শন করুন" এবং তারপরে নিনজা স্ক্রিনটিতে আক্রমণ করে এবং অন্য কোথাও আউটপুট পুনর্নির্দেশ করবে।

সিপি সাধারণত আরও দক্ষ হবে, যেহেতু কেবল কোনও পুনর্নির্দেশই যাচ্ছে না, কেবল স্থান অবস্থান বি থেকে বাইটের সরাসরি কপি করা B.

বিড়াল হবে read bytes -> output to console -> intercept output -> redirect to new file


3
catআসলেই হবে না output to console -> intercept output -> redirect to new file, বিড়ালের জন্য আউটপুট ফাইল স্টাডআউট বা একটি সাধারণ ফাইল হতে পারে, এটি কেবলমাত্র আউটপুট হিসাবে আউটপুট হিসাবে দীর্ঘ হিসাবে ইনপুট হিসাবে একই হবে না।

4
catকনসোলের সাথে কোনও সম্পর্ক নেই। উভয়ই catএবং cpইনপুট ফাইল থেকে পড়ুন এবং আউটপুট ফাইলে লিখুন। এর সাথে catআউটপুট ফাইলটি শেল দ্বারা খোলা হয় এবং এর সাথে সাথে cpআউটপুট ফাইলটি খোলা হয় cp; এটি পারফরম্যান্সে কোনও পার্থক্য করে না। cpদ্রুত হতে পারে তবে সম্পূর্ণ ভিন্ন কারণে: cpউত্স এবং টার্গেট ডিভাইসের উপর নির্ভর করে পারফরম্যান্সের জন্য কিছু কিছু বাস্তবায়ন সঠিক অংশের আকার অনুমান করার চেষ্টা করে; একটি বাস্তবায়ন catবিরক্ত হবে না।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

2

আইএমএইচও, এটি সত্যিই পছন্দের বিষয়।

প্রযুক্তিগতভাবে কোনও আসল পার্থক্য নেই যদি না আপনি ফাইলের মালিকানা / গোষ্ঠী সংরক্ষণের জন্য -p সুইচ সহ সিপি কমান্ডটি ব্যবহার করেন। অন্যথায়, এটি কার্যকরভাবে একই জিনিস। মার্কের উত্তর আরও স্পষ্টভাবে ভার্জোজ যদিও সঠিক এবং সঠিক।


3
cpছাড়া কিছু অনুমতি -pসংরক্ষণ করে না । উদাহরণস্বরূপ, যদি উত্স ফাইলটি এক্সিকিউটেবল হয়, লক্ষ্য ফাইলটি কার্যকর করতে সক্ষম করে, তবে তা করবে না। cpcat
কিথ থম্পসন

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