আমি / dev / নাল থেকে পড়তে পারি; কিভাবে ঠিক হবে এটা?


80

আমি উইকিপিডিয়া নিবন্ধটি/dev/null পড়েছি এবং ফাইলগুলিতে সরিয়ে নিয়ে ঘুরে দেখছিলাম /dev/null

এর জন্য আমি একটি তৈরি করেছি test_fileএবং এতে কিছু সামগ্রী রেখেছি :

$ touch test_file
$ echo "This is written by Aditya" > test_file
$ cat test_file
This is written by Aditya

এরপরে আমি ফাইলটি এখানে স্থানান্তরিত করার চেষ্টা করেছি /dev/null:

$ mv test_file /dev/null
mv: inter-device move failed: ‘test_file’ to ‘/dev/null’; unable to remove target: Permission denied

যেহেতু, এটি আমাকে Permission deniedত্রুটি দিয়েছে ; আমি sudoযখনই Permission deniedত্রুটির মুখোমুখি হই তখন আমি সাধারনত করতাম হিসাবে আমি এগিয়ে গিয়েছিলাম used

$ sudo mv test_file /dev/null

কমান্ডটি সফল হয়েছে এবং test_fileডিরেক্টরিতে আর উপস্থিত নেই।

তবে উইকিপিডিয়া নিবন্ধে বলা হয়েছে যে স্থানান্তরিত কোনও কিছুর পুনরুদ্ধার সম্ভব নয় /dev/nullএবং এটি EOFযে কোনও প্রক্রিয়া থেকে এটি পড়ার চেষ্টা করে সেটি একটি সুযোগ দেয় । তবে, আমি এখান থেকে পড়তে পারি /dev/null:

$ cat /dev/null
This is written by Aditya

আমি কী ভুল করেছি এবং আমি কীভাবে /dev/nullস্বাভাবিক অবস্থায় ফিক্স করব ? এবং কেন আমি Permission deniedপ্রথম স্থানে ত্রুটির মুখোমুখি হই ?

উত্তর:


147

/dev/nullএকটি ফাইল। একটি বিশেষ ফাইল। / Dev / sda বা / dev / tty এর মতো একটি ডিভাইস ফাইল যা আপনার সিস্টেমে একটি হার্ডওয়ারের সাথে কথা বলে।

এর সাথে পার্থক্যটি /dev/nullহ'ল কোনও হার্ডওয়্যার এর সাথে যুক্ত নয়। আপনি এতে যে কোনও ডেটা প্রেরণ করেন তা নিঃশব্দে বাতিল করা হয়। নিম্নলিখিত আদেশ মত:

echo "Hello World" > /dev/null

যা আপনার টার্মিনালে কোনও কিছু মুদ্রণ করবে না কারণ আপনি echoএইভাবে ব্ল্যাকহোলকে শূন্যের আউটপুট প্রেরণ করেন ।

আপনি যখন নিজের পাঠ্যসূচীর অনুলিপি রেখে কোনও সাধারণ পাঠ্য ফাইল দ্বারা mv test_file /dev/nullবিশেষ ফাইলটি প্রতিস্থাপন করেছিলেন তখন । অন্য কথায়, আপনি আপনার হারিয়েছেন ।/dev/nulltest_file/dev/null

এখন, আপনাকে যা করতে হবে তা হল (এটি পুনর্গঠন করা):

sudo rm /dev/null
sudo mknod -m 0666 /dev/null c 1 3

আপনার এটি পুনর্গঠন করা উচিত কারণ ডিফল্টরূপে প্রচুর স্ক্রিপ্টগুলি আউটপুট প্রেরণ করে /dev/null। যদি /dev/nullআর কোনও ব্ল্যাকহোল না হয় তবে নিয়মিত পাঠ্য ফাইল হয়, এটি আপনার ফাইল-সিস্টেমটি বাড়তে, বাড়তে এবং পূরণ করতে পারে। এবং আমি নিশ্চিত যে আপনি এটি এড়াতে চান।

এবং আরও বিপজ্জনক, অনেক স্ক্রিপ্ট ধরে যে পড়া থেকে /dev/nullকিছুই পড়বে না; এই ধারণাটি ভাঙলে আপনার সিস্টেমের চারপাশে ফাইলগুলিতে র্যান্ডম আবর্জনা লিখিত হতে পারে ... এটি ঠিক করা কার্যত অসম্ভব।

এবং মনে রাখবেন যে লিনাক্স মাল্টি-টাস্কিং: আপনি যখন খেলছেন তখন /dev/nullপ্রচুর প্রক্রিয়া চলছে এবং কয়েক সেকেন্ডের "সুযোগের উইন্ডো" চলাকালীন এমনকি বিপর্যয় ডেকে আনতে পারে।

আপনি যদি খেলতে চান তবে আপনি /dev/nullএকটি অনুলিপি তৈরি করতে এবং এটির সাথে পরীক্ষা করতে পারেন:

sudo mknod -m 0666 /tmp/null c 1 3 

এমন একটি /tmp/nullফাইল তৈরি করবে যা ঠিক একই পদ্ধতিতে কাজ করে /dev/nullতবে আপনি আপনার সিস্টেমের জন্য কোনও ঝুঁকি ছাড়াই কৌশল এবং পরীক্ষা করতে পারবেন।


16

কোনও ফাইলকে ওভাররাইট করা এবং একটি ফাইলে লেখার মধ্যে একটি বড় পার্থক্য রয়েছে ।

আপনি যখন কিছু লিখবেন /dev/null যেমন,

$ echo Hello > /dev/null

... এটি নিঃশব্দে ফেলে দেওয়া হয়। এর জন্য আপনার কাছে লেখার অনুমতি প্রয়োজন /dev/null, যা প্রত্যেকের রয়েছে:

$ ls -l /dev/null 
crw-rw-rw- 1 root root 1, 3 Mar 18 13:17 /dev/null

আপনি যখন ওভাররাইট করবেন /dev/null , আপনি যেমন mvকমান্ডটি করেছিলেন, আপনি /dev/nullসেখানে যা কিছু স্থানান্তরিত করেছেন তা দিয়ে বিশেষ ফাইলটি প্রতিস্থাপন করবেন । এটা করবেন না! এটি করার জন্য আপনাকে মূল সুবিধার প্রয়োজনের কারণটি হ'ল কোনও ফাইলকে ওভাররাইট করার জন্য , আপনাকে এই ক্ষেত্রে ফাইলটি অন্তর্ভুক্তকারী ডিরেক্টরিতে লেখার অনুমতি প্রয়োজন /dev:

$ ls -ld /dev
drwxr-xr-x 16 root root 4640 Mar 18 13:17 /dev

পুনরুদ্ধার করতে /dev/null, আদেশগুলি জারি করুন

$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3

(এছাড়াও ইউ ও এল স্ট্যাক এক্সচেঞ্জ দেখুন: কীভাবে তৈরি করবেন/dev/null )


8

আপনি যখন কমান্ড চালান

$ sudo mv test_file /dev/null

আপনি আপনার পাঠ্য ফাইলের সাহায্যে বিশেষ ফাইলটি প্রতিস্থাপন করেছেন /dev/null/dev/nullআপনার পাঠ্য ফাইলের বিষয়বস্তুগুলি ফেরত পাঠ করার চেষ্টা /dev/nullএবং সাধারণ পদ্ধতিতে ব্যবহার করার চেষ্টা করা প্রোগ্রাম সম্ভবত ভাঙ্গবে।

এতে ডিভাইস ফাইলগুলি প্রতিস্থাপন বা মোছার /dev/জন্য সুপারসেলার সুবিধাগুলি প্রয়োজন, যার কারণে আপনার অ-সুডোর প্রচেষ্টা ত্রুটির সাথে ব্যর্থ হয়েছিল।

কীভাবে /dev/nullম্যানুয়ালি পুনরুদ্ধার করবেন সে সম্পর্কিত তথ্যের জন্য বোনয়েটের উত্তর দেখুন , তবে যেহেতু বেশিরভাগ (সমস্ত না থাকলে) /dev/সামগ্রিকভাবে উদেব পরিচালিত হয়, তাই আমি সন্দেহ করি যে একটি সাধারণ পুনরায় বুট সম্ভবত এটিও ঠিক করে দেবে।


6

আপনার কী করা উচিত ছিল সে সম্পর্কে আপনার প্রশ্নের উত্তর দিতে, একটি ফাইল সরানোর জন্য, আপনি:

rm test_file

অন্যরা যেমন বলেছে, / dev / নাল প্রোগ্রামগুলির আউটপুট জন্য গন্তব্য।


2
আমি downvote নি, কিন্তু প্রশ্ন ফাইল মুছে ফেলার পদ্ধতি সম্পর্কে না ... আমি জানি আমরা ব্যবহার rmফাইল / ডিরেক্টরি মুছে ফেলার জন্য ... আমি শুধু সম্পর্কে পড়তে /dev/nullশৃঙ্খলা এটি সম্পর্কে আরও বুঝতে, আমি ফাইল স্থানান্তর করার জন্য চেষ্টা /dev/nullকর এবং দেখ প্রভাব .. এই প্রশ্নটি ফাইলগুলি সরানোর /dev/nullফলে আমি কী ভুল করেছি তা বোঝার ফলে আমি এখন এটি পড়তে পারি ... প্রশ্নটি সিস্টেম থেকে ফাইলগুলি কীভাবে সরানো হবে তা নিয়ে নয় ... আমি আশা করি এটি হ'ল সাফ ... তবে আপনার উত্তরটি এখনও স্বাগত এবং উত্তর হিসাবে রাখা যথেষ্ট ভাল ... :-)
আদিত্য

7
সত্যি কথা বলতে, "আমি কী ভুল করেছিলাম" জিজ্ঞাসা করে এর পরিবর্তে কী করা উচিত ছিল তার ব্যাখ্যা চেয়েছিল calls এটি সম্ভবত বেশিরভাগ ব্যবহারকারীর জন্যই তুচ্ছ তবে অন্যান্য উত্তরের কোনওটি এমনকি এটির উল্লেখও করে নি।
কেপেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.