কেউ আমাকে শেল কমান্ড ব্যবহার করার সময় >
এবং এর মধ্যে পার্থক্য ব্যাখ্যা করতে পারে >>
?
উদাহরণ:
ps -aux > log
ps -aux >> log
মনে হচ্ছে ফলাফলটি উভয় দিক থেকেই একই।
কেউ আমাকে শেল কমান্ড ব্যবহার করার সময় >
এবং এর মধ্যে পার্থক্য ব্যাখ্যা করতে পারে >>
?
উদাহরণ:
ps -aux > log
ps -aux >> log
মনে হচ্ছে ফলাফলটি উভয় দিক থেকেই একই।
উত্তর:
>
একটি ফাইল ওভাররাইট করতে (" ক্লোবার ") >>
ব্যবহার করা হয় এবং কোনও ফাইলে সংযোজন করতে ব্যবহৃত হয়।
সুতরাং, আপনি যখন ব্যবহার করবেন তখন ps aux > file
এর আউটপুটটি ps aux
লিখিত হবে file
এবং যদি নামের একটি ফাইল file
ইতিমধ্যে উপস্থিত থাকে তবে এর সামগ্রীগুলি ওভাররাইট করা হবে।
এবং যদি আপনি ব্যবহার করেন ps aux >> file
তবে এর আউটপুটটি ps aux
লিখিত হবে file
এবং যদি নামযুক্ত ফাইলটি file
ইতিমধ্যে উপস্থিত ছিল তবে ফাইলটিতে এখন তার পূর্ববর্তী বিষয়বস্তু এবং ps aux
এর পুরানো বিষয়বস্তুর পরে লেখা লিখিত সামগ্রী থাকবে file
।
সর্বাধিক গুরুত্বপূর্ণ পার্থক্য হ'ল >
শেলটি একটি ফাইল বা ফাইল-জাতীয় বস্তু O_WRONLY|O_CREAT|O_TRUNC
পতাকা সহ খোলার করে তোলে - ফাইলটি উপস্থিত থাকলে তা তৈরি করা হবে বা ছাঁটাই করা হবে, যখন পতাকাগুলির >>
সাথে ফাইল খোলে O_WRONLY|O_CREAT|O_APPEND
- ফাইলটি উপস্থিত থাকলে তা তৈরি করা বা সংযোজন করা হবে। এটি স্পষ্ট হয় যদি আপনি সিস্টেম কলগুলি সনাক্ত করেন তবে উদাহরণস্বরূপ
$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
এবং সাথে
$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
+++ exited with 0 +++
লক্ষ্য করুন যে উভয় ক্ষেত্রেই খোলা ফাইলের ফাইল ডেস্ক্রিপ্টর কমান্ডের ফাইল ডেস্ক্রিপ্টর 1 (স্টডআউট) এ নকল হয় এবং শেল কাঁটাচামচ দিয়ে যে কোনও আদেশেই উত্তরাধিকার সূত্রে প্রাপ্ত হয়।