হার্ড লিঙ্কটি / dev / নাল দিয়ে ফাইলটি প্রতিস্থাপন করুন


32

আমি একটি অ্যাপ্লিকেশন চালাচ্ছি যা log.txt এ লিখবে। অ্যাপ্লিকেশনটি নতুন সংস্করণে আপডেট করা হয়েছিল, সমর্থিত প্লাগইনগুলিকে আর উপযুক্ত নয়। এটি log.txt এ প্রচুর পরিমাণে ত্রুটি জোর করে এবং অন্য কোনও লগ ফাইলে লেখার পক্ষে সমর্থন করে বলে মনে হয় না।

আমি কীভাবে এগুলিকে আলাদা লগে লিখতে পারি?

আমি log.txt এর পরিবর্তে একটি হার্ড লিঙ্ক (অ্যাপ্লিকেশন পার্থক্যটি সঠিকভাবে বলতে পারে না?) অথবা / ডিভ / নালকে নির্দেশ করে এমন একটি হার্ড লিঙ্ক দিয়ে প্রতিস্থাপনের বিষয়টি বিবেচনা করেছি। আমার বিকল্পগুলি কি কি?


তুমি কি পারবে না chmod -w log.txt?
ব্যবহারকারী168715

উত্তর:


30
# cp -a /dev/null log.txt

এটি আপনার নাল ডিভাইসটিকে সঠিক মেজর এবং গৌণ ডেভ সংখ্যার সাথে অনুলিপি করে log.txtযাতে আপনার আর একটি থাকে null

ডিভাইসগুলি কার্নেলে নাম দ্বারা মোটেও পরিচিত নয় বরং তাদের বড় এবং ছোটখাটো সংখ্যা দ্বারা পরিচিত। আপনার কী ওএস আছে তা আমি জানি না যেহেতু আমরা ইতিমধ্যে জানি যে সেগুলি থেকে কেবল সংখ্যাগুলি অনুলিপি করা সুবিধাজনক। যদি আপনি এটি ভুল প্রধান এবং ছোটখাটো সংখ্যার সাহায্যে তৈরি করেন তবে আপনি সম্ভবত অন্য কোনও ডিভাইস তৈরি করেছেন, সম্ভবত কোনও ডিস্ক বা অন্য কোনও কিছু যা আপনি লিখতে চান না।


4
এটি লক্ষণীয় যে এই কমান্ডটির প্রয়োজন sudo(বা মূল ব্যবহারকারী হিসাবে চলমান)। "সঠিক মেজর এবং অপ্রধান দেব সংখ্যা" দ্বারা আপনি কী বোঝাতে দয়া করে ব্যাখ্যা করুন (আপনার উত্তরে)।
mklement0

3
(আমি ওপি নই।) আমি আপডেটটির প্রশংসা করি, তবে /dev/nullআপনার কমান্ডটিতে যেমন "প্রধান এবং অপ্রাপ্ত সংখ্যা" ফাইলের পথের সাথে সম্পর্কিত তা নিয়ে আমি এখনও বিভ্রান্ত হয়েছি । আর, আমি মনে করি এটা খেয়াল করা জরুরী ভবিষ্যৎ পাঠকদের সাহায্য করবে আপনার উত্তর যে sudoপ্রয়োজন।
mklement0

1
@ওয়ালেক: ধন্যবাদ, এটি জেনে রাখা ভাল। তবে আমার বক্তব্যটি হল: কীভাবে cp -a /dev/null log.txtআমার মন্তব্যে শ্রদ্ধা আসে ?
mklement0

1
@MALON: প্রকৃতপক্ষে তুমি করেছ এবং উবান্টু 14.04 এ আপনার কি প্রয়োজন sudo, যদি না আপনি ব্যবহারকারী হিসাবে চলমান হতে ঘটতে, এই কম্যান্ডের সম্পাদন করতে root(যা সাধারণত নিরুৎসাহিত করা হয়)। হার্ড লিঙ্ক (এই উত্তর) বা একটি সিমিলিংক (@ ভি.মিচেলের উত্তর) তৈরি করতে sudo(বা হিসাবে চালানো root) ব্যবহার করা সর্বোপরি সঠিক সমাধান হতে পারে, যদি কোনও ফাইল ব্যবহারকারী কোনও অ্যাকাউন্টে লিখতে পারে এমন কোনও স্থানে ফাইলটি রাখা উচিত , তবে কথাটি হ'ল: সেই প্রয়োজনীয়তাটি স্পষ্টভাবে নোট করুন।
mklement0

1
পিএস: আমি জানি যে বড়, ছোটখাটো মন্তব্য সম্ভবত ব্যবহারের প্রস্তাব দেওয়া প্রশ্নটির একটি মন্তব্যের সাথে সম্পর্কিত mknod। মনে রাখবেন যে মন্তব্যগুলি সাধারণত সামান্য দৃষ্টি আকর্ষণ করে, সুতরাং কেউ কেবল প্রশ্নটি পড়ে এবং তখন আপনার উত্তর বিভ্রান্ত হতে পারে (আমি যেমন ছিলাম; এছাড়াও লক্ষ করুন যে বেশিরভাগ মানুষ কখনও বড় এবং গৌণ ডিভাইসের সংখ্যার মত ধারণার সংস্পর্শে আসে না)।
mklement0

65

আপনি / dev / নালকে প্রতীকী লিঙ্ক তৈরি করতে পারেন এবং আপনাকে রুট হওয়ার দরকার নেই:

ln -s /dev/null log.txt

এটি স্ব-ডকুমেন্টিং হওয়ার সুবিধাও রয়েছে, এতে এটি প্রদর্শিত ls -l log.txtহবে যে "1, 3" যে কোনওভাবে তাৎপর্যপূর্ণ তা জেনে রাখার পরিবর্তে এটি / dev / নলের সাথে একটি সিলেলিংক।
মন্টি হার্ড

14

এখানে অন্যান্য উত্তর সম্ভবত কাজ করবে। বিশেষত, সিমলিংক সমাধান সম্ভবত সবচেয়ে সহজ সমাধান হতে চলেছে। আমি প্রধানত সম্পূর্ণতার জন্য এই অফার।

অন্তর্ভুক্ত সমাধানগুলি mknod(বা cp -a) সমস্যাযুক্ত হয়ে ওঠে যদি ফাইলযুক্ত ফাইল সিস্টেমগুলি ডিভাইসগুলি সমর্থন করে না (উদাহরণস্বরূপ, এটি nodevবিকল্পের সাথে মাউন্ট করা হয়েছিল , উদাহরণস্বরূপ)। এবং অবশ্যই, ফাইল সিস্টেম জুড়ে হার্ড লিঙ্কগুলি সহজেই কাজ করবে না।

হার্ড লিঙ্কগুলির বিকল্প বা নতুন ডিভাইস নোড তৈরি করার জন্য হ'ল বাইন্ড মাউন্টগুলি ব্যবহার করা, যা আপনাকে আপনার ফাইল সিস্টেমের গাছের একটি অংশ থেকে অন্য কোনও ফাইল থেকে ডিরেক্টরি বা ডিরেক্টরিতে মাউন্ট করতে দেয়। সুতরাং, উদাহরণস্বরূপ, আপনি চালাতে পারেন:

mount -o bind /dev/null /path/to/log.txt

এটি অনেকটা শক্ত লিঙ্কের মতো কাজ করে তবে:

  • এটি ফাইল-সিস্টেম জুড়ে পরিচালনা করতে পারে (কারণ এটি হার্ড লিঙ্কের মতো ফাইলসিস্টেম ইনোডের উপর নির্ভর করে না)
  • এটি কেবল পঠনযোগ্য ফাইল সিস্টেমগুলিতে কাজ করে (কারণ আপনি প্রকৃতপক্ষে ফাইল সিস্টেমটি পরিবর্তন করছেন না)

সম্পূর্ণ উদাহরণের জন্য:

bash-4.3# ls -l /var/log/boot.log
-rw-r--r--. 1 root root 7436 Dec 19 10:00 /var/log/boot.log
bash-4.3# mount -o bind /dev/null /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
bash-4.3# echo words words words > /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log

তবে এটি কেবল এমন সিস্টেমে কাজ করে যেগুলির একটি বাইন্ড মাউন্ট রয়েছে। (যেমন আধুনিক লিনাক্স যেমন।)
reinierpost

একটি লগ ফাইল যাইহোক, কেবল পঠনযোগ্য ফাইল সিস্টেমে অন্তর্ভুক্ত হবে না।
মন্টি হার্ড

1
আপনি অবাক হয়ে যাবেন যে আপনি নিজেকে কেবলমাত্র পঠনযোগ্য ফাইল সিস্টেমে একটি ফাইলে লিখতে চেয়েছিলেন। এবং এটি খুব ভাল একটি nodevফাইল সিস্টেমে থাকতে পারে ।
লারস্ক

6

অ্যাপ্লিকেশনটি log.txt পরিচালনা করে তা কীভাবে সমালোচনা করে তা নির্ভর করে।

যদি অ্যাপ্লিকেশনটি কেবলমাত্র বিদ্যমান ফাইলটি খোলায় এবং তাতে লিখতে থাকে তবে অন্যান্য উত্তরে বর্ণিত হিসাবে আপনি এটিকে / dev / নালকে সিলেক করতে পারেন, এটি অন্য কোথাও সিমিলিঙ্ক করতে পারেন, অন্য কোথাও হার্ডলিঙ্ক করতে পারেন (যদিও হার্ডলিঙ্কগুলি ক্রস ফাইল সিস্টেম হতে পারে না তাই সেখানে নেই) টি এতে প্রচুর পরিমাণে) সেখানে / dev / নাল ডিভাইস নোডের অনুলিপি তৈরি করুন ইত্যাদি

OTOH যদি অ্যাপ্লিকেশনটি log.txt মুছে ফেলা এবং পুনরায় তৈরি করে তবে এর কোনওটিই কাজ করবে না। আপনি লেখাগুলি অন্য কোনও ফাইল সিস্টেমে পুনর্নির্দেশের জন্য পুরো ডিরেক্টরিটি অন্য কোথাও সিমলিংক করতে পারেন তবে এটি সম্পর্কে আর এটি আপনাকে ডিরেক্টরিতে থাকা অন্য স্টাফগুলির সাথে ডিল করতে হবে।

আমার ধারণা আপনি যদি সত্যিই চেয়েছিলেন আপনি একটি কাস্টম ওভারলে ফাইল সিস্টেম তৈরি করতে পারেন যা বেশিরভাগ ক্রিয়াকলাপ পেরিয়েছিল ঠিক তখনই log.txt নামে একটি ফাইল তৈরি করার চেষ্টা চালিয়ে যায়।


chattr +i log.txtপ্রথমবার এবং অ্যাপ্লিকেশন ফাইলটি আর মুছবে না।
মার্কো মার্সালা

3

ঠিক আছে, নামী পাইপের সাথে একটি অদৃশ্য পদ্ধতি :

# create a named pipe
mkfifo /path/to/log.txt
# read contents from the pipe and redirect them to /dev/null
cat /path/to/log.txt > /dev/null

আপনি প্রায় ডাম্প লগ দিয়ে যেমন কিছু করতে পারেন যেমন ফিল্টার বা এনসি-র মাধ্যমে প্রেরণ ।


যদি catপ্রক্রিয়াটি মারা যায় বা ক্র্যাশ হয় তবে পাইপ পূর্ণ হয়ে গেলে লগইন প্রোগ্রামটি স্তব্ধ হয়ে যায়।
মার্কো মার্শালা

-1

ফাইলটিকে আসল নাল ডিভাইস হিসাবে বিবেচনা করুন। ডান ফাইল টাইপ এবং একই ছোটখাট এবং বড় সংখ্যা সহ এমকেএনড দিয়ে তৈরি করা একটি ফাইল "লগ ডটেক্সট" নাল ডিভাইস হিসাবে কাজ করবে কারণ এটি।


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