ডিরেক্টরিগুলি / dev / নাল কেন সরানো বিপজ্জনক?


28

test_dirডিরেক্টরিতে যাওয়ার চেষ্টা করার সময় /dev/null, আমি বার্তাটি পাই

mv: cannot overwrite non-directory ‘/dev/null’ with directory ‘test_dir/’

তাহলে লোকেরা কেন "কমান্ডটি চালাবেন না sudo mv ~ /dev/null, এটি আপনার হোম ডিরেক্টরিটি একটি গর্তে স্থানান্তরিত করবে?"

লিংক

তবে /homeএটি একটি ডিরেক্টরিও।

উত্তর:


39

কারণ মানুষ ধরে নিয়েছে। আমি এটি পরীক্ষা না করা পর্যন্ত আমি সেই লোকদের মধ্যে একজন ছিলাম । লোকেরা কেন ধরে নেয় তা বোঝা সহজ ... এটি বিপজ্জনক বলে মনে হচ্ছে ...

... তবে আপনি আসলে জিনিসগুলিতে সরাতে পারবেন না /dev/null- এটি একটি বিশেষ ফাইল যা কেবল পুনঃনির্দেশগুলি শোষণ করে (এবং এগুলিকে কিছুতেই প্রেরণ করে না)। আপনি যদি কোনও ডিরেক্টরিতে এটি স্থানান্তরিত করার চেষ্টা করেন তবে ফাইলসিস্টেমটি আপনার মুখে ভার্জিকালি বিস্ফোরিত হবে এবং আপনি যদি কোনও ফাইল এতে সরানোর চেষ্টা করেন তবে আপনি সম্ভবত এটির পরিবর্তে শেষ করবেন।

প্রথম লিঙ্কটি ডিরেক্টরিগুলির সাথে ডিল করবে, তবে এটি কেবল একটি ফাইল দিয়ে ওভাররাইট করার জন্য একটি পৃথক পরীক্ষা's রমনো মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, এটি সম্ভবত এমন কিছু যা আপনার প্রাপ্তবয়স্কদের তদারকি ছাড়াই করা উচিত নয়। এতে জড়িত ঝুঁকি রয়েছে।

$ echo "this is my file" > test
$ cat test
this is my file

$ sudo mv test /dev/null
$ cat /dev/null
this is my file

# Fix this!
$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3

2
না, কোনও ফাইলকে / dev / null এ সরিয়ে ফেললে আপনার নাল ডিভাইসটি ছুঁড়ে ফেলা হবে এবং সেটিকে ফাইলের সাথে প্রতিস্থাপন করা হবে, ফাইলের বিষয়বস্তু থেকে মুক্তি পাবেন না।
psusi

2
উত্তরটি কিছুটা অস্পষ্ট। একটি ফাইল সরানো /dev/nullফলস্বরূপ যে তথ্য অকারণে সরানো হয় না। এর ফলে ডেটা ঠিকঠাক হয়ে যাবে, তবে /dev/nullওভাররাইট করা হবে, এবং তাই আপনি এটিকে এখনও আবার সরিয়ে নিতে পারেন :) এছাড়াও জিজ্ঞাসাবাবু
মাল্টে স্কোরুপাপা

1
হ্যাঁ, কারণ সফল sudo mv file /dev/null হবে এবং সহজেই একটি সম্পূর্ণ অকেজো সিস্টেমের দিকে নিয়ে যেতে পারে। @ মাল্টস্কোরুপা মন্তব্যে লিঙ্কিত প্রশ্নটিতে আমার মন্তব্যগুলি দেখুন। এটি আরেকটি স্পষ্ট উদাহরণ " sudoকেবলমাত্র
প্রিপেন্ড

5
আপনি নিজের / dev / নাল: sudo mknod -m 0666 /tmp/mynull c 1 3--- এর অনুলিপি তৈরির পরীক্ষা করতে পারেন এবং তারপরে এটি খেলতে পারেন ;-)
রোমানো

10
এখান থেকেই সেরা প্রশ্ন আসে। "প্রিয় উবুন্টুকে জিজ্ঞাসা করুন, আমি সম্প্রতি আমার হোমওয়ার্কটি ভুল করে / ডিভ / নাল এ সরিয়েছি এবং এটি আমার সিস্টেম কনফিগারেশন ফাইলের 90% এ চুষে ফেলা হয়েছিল I "
অলি

18

/dev/nullএটি কেবল একটি ফাইল, এটি একটি "বিশেষ চরিত্র" ফাইল তবে ফাইলগুলি যে নিয়মগুলি অনুসরণ করতে হবে তার দ্বারা এটি এখনও কম আবদ্ধ নয়। বলা হচ্ছে যে আপনি কখনই এই আদেশটি চালাতে পারবেন না:

$ mv ~ /dev/null

mvকমান্ড এই মঞ্জুরি দেয় না যেহেতু আপনি একটি ফাইলে একটি ডিরেক্টরি চলন্ত করছি, যে শুধু ইন্দ্রিয় বিষয়গতভাবে দেখা যায় না এবং mvএই জানেন।

উদাহরণ

$ mkdir dir
$ touch afile
$ mv dir afile
mv: cannot overwrite non-directory ‘afile’ with directory ‘dir’

/dev/nullযদি আপনি এটিতে একটি নিয়মিত ফাইল অনুলিপি করার চেষ্টা করেন তবে এটি একটি চরিত্রের ফাইল দেওয়াতে আপনি কোনওটিতে অনুলিপি করতে পারবেন না ।

$ cp ~/bzip2_1.0.6-4_amd64.deb /dev/null
$ ls -l |grep null
crw-rw-rw-  1 root root        1,   3 Mar 16 14:25 null

আপনি কেবল এই ফাইলটির জন্য যা করতে পারেন তা হ'ল mvএটির অন্য কোনও ফাইল অনুলিপি করা বা মুছুন।

$ mv /path/to/afile /dev/null

এই আদেশের পরে, /dev/nullএকটি নিয়মিত ফাইল। এই পরিবর্তনের সর্বাধিক বিপজ্জনক প্রভাবটি /dev/nullহ'ল কখনও কোনও ডেটা আউটপুট দেওয়ার কথা নয় , তাই বেশ কয়েকটি শেল স্ক্রিপ্ট এটি ধরে নেবে

`... < /dev/null` 

"কিছুই না" বলার সমতুল্য। এই ধারণাটি নষ্ট হয়ে গেলে এলোমেলো ডেটা হতে পারে (ভালভাবে, শেষ প্রক্রিয়াটি process / dev / null 'লিখেছিল) যা সিস্টেমের চারপাশে সিস্টেম ফাইলগুলিতে sertedোকানো হয়েছে --- যা একেবারে ভাঙ্গা এবং অপরিবর্তনীয় সিস্টেমের দিকে নিয়ে যেতে পারে।


13

আপনি ফাইলগুলিতে বা অন্য ইনপুট স্ট্রিমগুলি /dev/nullডিরেক্টরিতে না লিখে লিখতে পারেন । আপনি যদি ডিরেক্টরিতে /dev/nullএটি স্থানান্তরিত করার চেষ্টা করেন তবে এটি /dev/nullএকটি ডিরেক্টরি হিসাবে নয় তবে একটি ফাইল হিসাবে একটি ত্রুটির কথা জানায় ।

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

দ্বারা প্রস্তাবিত হিসাবে @Rmano মধ্যে এই উত্তরটি যে প্রশ্ন, যাতে নিয়ে পরীক্ষা করার জন্য /dev/nullবরং এটি একটি কপি তৈরি করা উচিত আমরা এবং তারপর আমাদের পরীক্ষা না। সুতরাং, আসুন /tmp/nullএটি তৈরি করুন এবং আমাদের পরীক্ষামূলক উদ্দেশ্যে এটি ব্যবহার করুন:

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

এখন থেকে, /tmp/nullআমাদের /dev/nullসমস্ত উদ্দেশ্যে:

আমাদের একটি তৈরি করা যাক test_fileএবং একটি test_dirএকটি ডিরেক্টরি নামক ভিতরে ask_ubuntu

$ mkdir ask_ubuntu
$ cd ask_ubuntu
$ touch test_file
$ mkdir test_dir
$ echo "Let us test if we can recover our test_file." > test_file

নিম্নলিখিত ask_ubuntuডিরেক্টরি বিষয়বস্তু দেখায় :

$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:10 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
-rw-r--r-- 1 aditya aditya    0 Mar 18 17:10 test_file

এখন আমাদের সরাতে চেষ্টা test_fileকরতে /tmp/nullএবং বিষয়বস্তু দেখতে ask_ubuntu:

$ sudo mv test_file /tmp/null   # This succeeds
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir

কমান্ডটি সফল হয় এবং test_fileআর উপলব্ধ হয় না। এখন সরাতে চেষ্টা test_dirকরতে /tmp/nullযা সফল না:

$ sudo mv test_dir/ /tmp/null 
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’

test_dirএখনও ভিতরে উপস্থিত ask_ubuntu:

$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir

এখন, আমরা আমাদের test_fileথেকে পুনরুদ্ধার করতে পারি কিনা তা চিহ্নিত করুন /tmp/null:

$ cat /tmp/null
Let us test if we can recover our test_file.

সুতরাং, এটি এখনও আছে এবং /tmp/nullকোন একটি বিশেষ ফাইল ওভাররাইট করা হয়েছিল এবং এটি অন্য কোনও সাধারণ ফাইলের মতো হয়ে গেছে। আমরা /tmp/nullঅন্য ফাইলগুলির মতো অনুলিপি করে আমাদের ফাইলটি পুনরুদ্ধার করতে পারি :

$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.

ফাইল পুনরুদ্ধার হয়েছে।

বিঃদ্রঃ:

যদি আপনি /tmp/nullসরাসরি ব্যবহার করে এই আদেশগুলি তৈরি না করে চেষ্টা করেন /dev/null; দৌড়ে ফাইলটি পুনরুদ্ধার করার বিষয়টি নিশ্চিত করুন (যদি আপনার প্রয়োজন হয়) cp /dev/null our_test_file; এবং /dev/nullযত তাড়াতাড়ি সম্ভব লিঙ্কযুক্ত প্রশ্নে প্রদত্ত নিম্নলিখিত কমান্ডগুলি চালিয়ে আমাদের সিস্টেমে এটি বিদ্যমান উদ্দেশ্যে পুনরুদ্ধার করুন:

$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null

উপসংহার:

  • সুতরাং, ডিরেক্টরিটি স্থানান্তর করা অসম্ভব /dev/nullএবং তাই সেখান থেকে ডিরেক্টরিটি পুনরুদ্ধার করার কোনও প্রশ্নই আসে না।

  • যতক্ষণ না ফাইল সম্পর্কিত, আপনি যদি সরাসরি ফাইলগুলিতে সরিয়ে নিয়ে যান তবে /dev/nullউপরে বর্ণিত হিসাবে আপনি এটি পুনরুদ্ধার করতে পারেন। তবে দুটি ব্যতিক্রম রয়েছে:

    1. আপনার চলমান সময়কালে sudo mv test_file /dev/nullএবং cp /dev/null our_test_fileসিস্টেমের কোনও মূল স্ক্রিপ্ট যদি চলমান echo "Whatever text the root script wants to send to /dev/null" > /dev/null(বা অন্যান্য অনুরূপ কমান্ড) দ্বারা এটি ওভাররাইট করে । তারপরে আমাদের ফাইলটি পুনরুদ্ধার করার কোনও সহজ উপায় নেই।

    2. যদি আপনি এই দুটি কমান্ড চালানোর মধ্যে সিস্টেমটি পুনরায় বুট করেন। /dev/nullবুটে পুনরায় তৈরি হয়, তাই আমরা কম্পিউটারটি বন্ধ করে দিলে আমাদের ফাইলটি হারিয়ে যায়।

  • তবে আপনি যদি ইনপুট স্ট্রিমের মতো পুনরুদ্ধার করতে চান তবে আপনি তা পুনরুদ্ধার echo "Stream this line to /dev/null" > /dev/nullকরতে পারবেন না যেহেতু /dev/nullঅযাচিত ফাইল এবং ইনপুট স্ট্রিমগুলি নিষ্পত্তি করার জন্য একটি বিশেষ ফাইল এবং উইকিপিডিয়া নিবন্ধ যেমন উল্লেখ করেছে, এটি এটি থেকে পড়া কোনও প্রক্রিয়াতে কোনও ডেটা সরবরাহ করে না।


তথ্যসূত্র: উইকিপিডিয়া নিবন্ধ/dev/null


4
sudo mv test_file /dev/null/dev/nullসঙ্গে প্রতিস্থাপন test_file। সুতরাং এর পরে /dev/nullকেবলমাত্র একটি সাধারণ ফাইল এবং আপনি এটিতে যা লিখেছিলেন তা থেকে এটি পড়তে পারেন। এটি করবেন না
ফ্লোরিয়ান ডিয়েশ

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

@ ফ্লোরিয়ানডিয়েশ: উত্তরটি আপডেট করেছেন :)
আদিত্য

7

যা কিছু প্রেরণ করা হয়েছিল /dev/nullতা নিঃশব্দে ফেলে দেওয়া হয়। আপনি যদি টাইপ করেন:

echo "Hello World"

আপনি Hello Worldপর্দায় পেতে । আপনি যদি টাইপ করেন:

echo "Hello World" >/dev/null

আপনি পর্দায় কিছুই পাবেন না।

মুভ কমান্ডের ক্ষেত্রে কমান্ডটি mvডিরেক্টরি দ্বারা ফাইল / dev / নাল প্রতিস্থাপনের চেষ্টা করে, যা সম্ভব নয়। কারণ সবকিছুই লিনাক্সের একটি ফাইল, / dev / null একটি ফাইল। অবশ্যই একটি বিশেষ একটি (একটি ডিভাইস ফাইল), একটি বিশেষ ফাইল যা হার্ডওয়ারের টুকরো অ্যাক্সেসের অনুমতি দেয় (যেমন ডিস্ক, পার্টিশন, সাউন্ড কার্ড, সিরিয়াল পোর্ট, ...)। / Dev / নলের ক্ষেত্রে এটি কোনও হার্ডওয়ারের সাথে যুক্ত নয় তাই এতে প্রেরিত ডেটা নিঃশব্দে ফেলে দেওয়া হয়। এ কারণেই "তারা" এটিকে একটি ব্ল্যাকহোল বলে থাকতে পারে।


ডিরেক্টরি ফাইল নয়।
থরবজর্ন রাভন অ্যান্ডারসন

1
@ ThorbjørnRavnAndersen লিনাক্স বিশ্বে ডিরেক্টরিগুলি ফাইল হয়!
হবিব পারওয়াদ

@ হাবিব পেরওয়াদ কেবলমাত্র কার্নেলের ভিতরে।
থরবজর্ন রাভন অ্যান্ডারসন


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