shell - কি/dev/null 2> এবং 1?




syntax posix (5)

আমি কোড এই টুকরা /etc/cron.daily/apf পাওয়া যায়

#!/bin/bash  
/etc/apf/apf -f >> /dev/null 2>&1  
/etc/apf/apf -s >> /dev/null 2>&1  

এটি flushing এবং ফায়ারওয়াল পুনরায় লোড হচ্ছে।
আমি বুঝতে পারছি না >> /dev/null 2>&1 অংশ।

এই ক্রন থাকার উদ্দেশ্য কি? এটা আমার ফায়ারওয়াল নিয়ম overriding হয়। আমি নিরাপদে এই ক্রন কাজ মুছে ফেলতে পারি?


অন্যদের দ্বারা বর্ণিত হিসাবে, / dev / null এ লেখাটি একটি প্রোগ্রামের আউটপুটকে বাদ দেয়। ক্রন সাধারণত cronjob সঙ্গে শুরু প্রক্রিয়ার প্রতিটি আউটপুট জন্য একটি ইমেইল পাঠায়। তাই আউটপুট লিখে / dev / null লিখে আপনি যদি স্প্যামে আপনার অ্যাড্রেস নির্দিষ্ট করে থাকেন তবে স্প্যামড হওয়া প্রতিরোধ করুন।


আমি >> /dev/null 2>&1 নীরব cronjob এর জন্য >> /dev/null 2>&1 ব্যবহার করি, cronjob কাজ করবে কিন্তু আমার ইমেলের প্রতিবেদন পাঠাবে না।

যতদূর আমি জানি, /dev/null মুছে ফেলবেন না, বিশেষ করে যখন আপনি cpanel চালাচ্ছেন, এটি cronjob প্রতিবেদনটি নিক্ষেপ করার জন্য ব্যবহার করা যেতে পারে।


চলুন >> /dev/null 2>&1 অংশে >> /dev/null 2>&1 বিবৃতি বিরতি দিন:

পার্ট 1: >> আউটপুট পুনঃনির্দেশ

এটি প্রোগ্রাম আউটপুট পুনঃনির্দেশিত এবং ফাইল শেষে আউটপুট যোগ করা হয়। More...

পার্ট 2: /dev/null বিশেষ ফাইল

এটি একটি ছদ্ম-ডিভাইস বিশেষ ফাইল

কমান্ড ls -l /dev/null আপনাকে এই ফাইলটির বিশদ দেবে:

crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null

আপনি crw পালন করেছেন? যার মানে এটি একটি ছদ্ম-ডিভাইস ফাইল যা character-special-file ধরন যা সিরিয়াল অ্যাক্সেস সরবরাহ করে।

/dev/null সমস্ত ইনপুট গ্রহণ করে এবং বাতিল করে; কোন আউটপুট উত্পন্ন করে না (একটি পঠনে সর্বদা একটি ফাইলের ইঙ্গিত প্রদান করে)। রেফারেন্স: উইকিপিডিয়া

পার্ট 3: 2>&1 ফাইল বর্ণনাকারী

যখনই আপনি একটি প্রোগ্রাম চালান, অপারেটিং সিস্টেমটি সর্বদা তিনটি ফাইল STDIN , STDIN , এবং STDERR যেমনটি আমরা জানি যে কোনও ফাইল খোলা হলে, অপারেটিং সিস্টেম ( কার্নেল থেকে) একটি ফাইলের বর্ণনাকারী হিসাবে বলা একটি অ-নেতিবাচক পূর্ণসংখ্যা প্রদান করে। এই ফাইলগুলির জন্য ফাইল বর্ণনাকারী যথাক্রমে 0, 1, 2।

তাই 2>&1 সহজভাবে STDERR থেকে STDERR পুনঃনির্দেশিত করে

& যাই হোক না কেন অনুসরণ একটি ফাইল বর্ণনাকারী, একটি ফাইলের নাম নয়।

সংক্ষেপে, এই কমান্ডটি ব্যবহার করে আপনি আপনার প্রোগ্রামকে নির্বাহ করার সময় চিৎকার করতে বলছেন না।

2>&1 ব্যবহার করার গুরুত্ব কী?

যদি আপনি টার্মিনালে উত্পন্ন কিছু ত্রুটির ক্ষেত্রেও আউটপুট উত্পাদন করতে চান না। আরো পরিষ্কারভাবে ব্যাখ্যা করার জন্য, নিচের উদাহরণটি বিবেচনা করি:

$ ls -l > /dev/null

উপরের কমান্ডের জন্য, টার্মিনালে আউটপুট প্রিন্ট করা হয়নি, কিন্তু যদি এই কমান্ডটি কোন ত্রুটি তৈরি করে তবে কী হবে:

$ ls -l file_doesnot_exists > /dev/null 
ls: cannot access file_doesnot_exists: No such file or directory

যদিও আমি আউটপুটকে /dev/null পুনঃনির্দেশিত করছি, এটি টার্মিনালে মুদ্রিত হয়। কারণ আমরা ত্রুটি আউটপুট /dev/null তে পুনঃনির্দেশিত করছি না, তাই ত্রুটি আউটপুট পুনঃনির্দেশ করার জন্য, এটি 2>&1

$ ls -l file_doesnot_exists > /dev/null 2>&1

>> /dev/null স্ট্যান্ডার্ড আউটপুট ( stdout ) >> /dev/null পুনঃনির্দেশিত করে যা এটি বাতিল করে।

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

2>&1 স্ট্যান্ডার্ড ত্রুটি ( 2 ) কে স্ট্যান্ডার্ড আউটপুট ( 1 ) পুনঃনির্দেশিত করে, যা তারপরেও এটি বাতিল করে দেয় যেহেতু স্ট্যান্ডার্ড আউটপুট ইতিমধ্যে পুনঃনির্দেশিত হয়েছে।


/etc/conf.apf সম্পাদনা করুন। DEVEL_MODE="0" সেট করুন। DEVEL_MODE 1 সেট সেট 5 মিনিটের পরে apf বন্ধ করতে একটি ক্রন কাজ যোগ করবে।





io-redirection