আমি কীভাবে কোনও ফাইলে টার্মিনাল আউটপুট সংরক্ষণ করব?


687

কমান্ডের আউটপুট আমি কীভাবে সংরক্ষণ করব?

কোনও সফটওয়্যার ব্যবহার না করে কি উপায় আছে? আমি কিভাবে জানতে চাই।

উত্তর:


735

হ্যাঁ এটি সম্ভব, কেবলমাত্র একটি ফাইলে আউটপুট পুনর্নির্দেশ করুন:

SomeCommand > SomeFile.txt  

অথবা আপনি যদি ডেটা যুক্ত করতে চান:

SomeCommand >> SomeFile.txt

আপনি যদি চান তবে stderrএটি ব্যবহার করুন:

SomeCommand &> SomeFile.txt  

বা এই সংযোজন:

SomeCommand &>> SomeFile.txt  

যদি আপনি কনসোলে এবং কোনও ফাইলে উভয় stderrএবং আউটপুট প্রদর্শিত করতে চান তবে এটি ব্যবহার করুন:

SomeCommand 2>&1 | tee SomeFile.txt

(আপনি যদি কেবল আউটপুট চান তবে উপরেরটি ফেলে দিন 2)


15
নোট করুন someCommand 2> someFile.txtএবং কিছুফিল.টেক্সটকে someCommand 2>> someFile.txtপুনঃনির্দেশ stterrকরুন
স্লোথ ওয়ার্কস

আমি জিসিসি কমান্ড দিয়ে এটি করার চেষ্টা করছি তবে এটি কার্যকর হয় না। এটি অন্যান্য কমান্ডের সাথে কাজ করে তবে এটি একটি নয়। এটি কেবল এর ভিতরে কিছুই না করে আউটপুট ফাইল তৈরি করে।
নিকোস

@ নিক-এলজি প্রায়শই এটি কারণ হ'ল কমান্ড তার সমস্ত আউটপুট stderr এ প্রেরণ করছে। জিসিসি যদি ত্রুটি বার্তা উত্পন্ন করে থাকে তবে সম্ভবত এটিই মনে হচ্ছে। স্টাডআউটের পরিবর্তে স্ট্যাডারকে ক্যাপচার করার জন্য স্লথ ওয়ার্কস মন্তব্য দেখুন comment
জোনাথন হার্টলি

1
নোট: makeকমান্ডের আউটপুটটি কোনও ফাইলে আনতে তার পরিবর্তে এই বাক্য গঠন প্রয়োজন: make > someFile.txt 2>&1(উত্স: linuxquestions.org/questions/linux-newbie-8/… )
গ্যাব্রিয়েল স্টেপলস

আমার সমস্যা আছে যে ফাইলটি প্রায় 8 এমবি পৌঁছালে এটি লেখা বন্ধ করে দেয়। এটি কি জানা সীমা?
relG

863

কোনও ফাইলে কমান্ডের আউটপুট লিখতে, সাধারণত 10 টি ব্যবহৃত পদ্ধতি রয়েছে।

সংক্ষিপ্ত বিবরণ:

দয়া করে নোট করুন যে n.e.সিনট্যাক্স কলামটির অর্থ "বিদ্যমান নেই"।
একটি উপায় আছে, কিন্তু কলামের সাথে এটি ফিট করা খুব জটিল। আপনি এটি সম্পর্কে তালিকা বিভাগে একটি সহায়ক লিঙ্ক খুঁজে পেতে পারেন।

          || visible in terminal ||   visible in file   || existing
  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   
==========++==========+==========++==========+==========++===========
    >     ||    no    |   yes    ||   yes    |    no    || overwrite
    >>    ||    no    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
   2>     ||   yes    |    no    ||    no    |   yes    || overwrite
   2>>    ||   yes    |    no    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   yes    |   yes    || overwrite
   &>>    ||    no    |    no    ||   yes    |   yes    ||  append
          ||          |          ||          |          ||
 | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite
 | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
|& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite
|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

তালিকা:

  • command > output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets

  • command >> output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।

  • command 2> output.txt

    স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets

  • command 2>> output.txt

    স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি কেবলমাত্র ফাইলে পুনঃনির্দেশিত হবে, এটি টার্মিনালে দৃশ্যমান হবে না। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।

  • command &> output.txt

    স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি স্ট্রিম উভয়ই কেবল ফাইলে পুনঃনির্দেশিত হবে, টার্মিনালে কিছুই দৃশ্যমান হবে না। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets

  • command &>> output.txt

    স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি স্ট্রিম উভয়ই কেবল ফাইলে পুনঃনির্দেশিত হবে, টার্মিনালে কিছুই দৃশ্যমান হবে না। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হয়ে যাবে ..

  • command | tee output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি ফাইলটিতে অনুলিপি করা হবে, এটি এখনও টার্মিনালে দৃশ্যমান হবে। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets

  • command | tee -a output.txt

    স্ট্যান্ডার্ড আউটপুট স্ট্রিমটি ফাইলটিতে অনুলিপি করা হবে, এটি এখনও টার্মিনালে দৃশ্যমান হবে। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।

  • (*)

    বাশের কোনও শর্টহ্যান্ড সিনট্যাক্স নেই যা কেবল দ্বিতীয় কমান্ডে কেবল স্টডিআরর পাইপিংয়ের অনুমতি দেয়, যা teeটেবিলটি সম্পূর্ণ করার জন্য আবার সংমিশ্রণে এখানে প্রয়োজন হবে । আপনার যদি সত্যিই এর মতো কিছু প্রয়োজন হয় তবে দয়া করে "স্টার্ডারকে কীভাবে পাইপ করবেন, এবং স্টাডাউট নয়?" দেখুন স্ট্যাক ওভারফ্লোতে কিছু উপায় কীভাবে এটি করা যেতে পারে যেমন স্ট্রিমগুলি অদলবদল করে বা প্রক্রিয়া প্রতিস্থাপন ব্যবহার করে।

  • command |& tee output.txt

    টার্মিনালে দৃশ্যমান থাকা অবস্থায় স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয় স্ট্রিমই ফাইলটিতে অনুলিপি করা হবে। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ওভাররাইট হয়ে যায় gets

  • command |& tee -a output.txt

    টার্মিনালে দৃশ্যমান থাকা অবস্থায় স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয় স্ট্রিমই ফাইলটিতে অনুলিপি করা হবে। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে নতুন ডেটা ফাইলের শেষে যুক্ত হবে।


66
টেবিলের জন্য ধন্যবাদ, এটি দুর্দান্ত! এটি শীর্ষ উত্তর হতে হবে
DevShark

3
@ karthick87 এটি কোনও ফাইলে আউটপুট পুনর্নির্দেশ সম্পর্কে প্রশ্নের সাথে সত্যই সম্পর্কিত নয়, কারণ এটি কেবল একটি স্ট্রিমটিকে অন্য প্রবাহে পুনর্নির্দেশ করে। 2>&1STDERR কে STDOUT এ পুনঃনির্দেশ করে, STDOUT কে 1>&2STDERR এ 3>&1পুনঃনির্দেশ করে এবং স্ট্রিম 3 টি STDERR তে পুনর্নির্দেশ করে।
বাইট কমান্ডার

18
কেবলমাত্র একটি নোট যে '| &' ম্যাকোজে আমার পক্ষে কাজ করছে না। এটির পুরানো সংস্করণ বাশ হওয়ার কারণে এটি ঘটে (আমার মনে হয়)। কম মার্জিত '2> & 1 |' যদিও ঠিক কাজ করে
ড্যানি পার্কার

2
@ বাইটকম্যান্ডার আমি ত্রুটিটি পেয়েছি: sh: 1: Syntax error: "&" unexpectedযখন আমি |& teeসি 9.io সার্ভারে পাইথন স্ক্রিপ্টটি ব্যবহার করি । মনে হচ্ছে একটি আলাদা শেল ব্যবহার করা হচ্ছে। সংস্করণ 4.3.11 (1) echo $SHELLদেখায় /bin/bashএবং $SHELL --versionদেখায় - দয়া করে। আমি #!/bin/bashআমার অজগর স্ক্রিপ্টে চেষ্টা করেছি কিন্তু এখনও পেয়েছি sh: 1: Syntax error। আমার যা প্রয়োজন তাই আমি পেয়েছিলাম তাই আমি আমার সার্ভারের মধ্যে shএবং অদ্ভুততা বাছাই করে ছেড়ে দিচ্ছি bash। ধন্যবাদ।
samkhan13

1
@ samkhan13 দেখে মনে হচ্ছে আপনি দৌড়াচ্ছে মত shএবং bash(হয়তো বা bashমধ্যে shমোড ...)। আপনার বর্তমান শেল প্রক্রিয়াটি ঠিক কী ব্যবহার করছে তা আপনি যাচাই করতে পারেন ps -p $$ -o cmd=, কারণ echo $SHELLএটি অবিশ্বাস্য এবং আপনি অন্য সাবসেল শুরু করেছেন কিনা তা উপেক্ষা করে আপনাকে আপনার লগইন শেলটি প্রদর্শন করবে।
বাইট কমান্ডার

108

আপনি teeকোনও ফাইলে আউটপুট প্রেরণ করতেও এটি ব্যবহার করতে পারেন :

command | tee ~/outputfile.txt

একটি সামান্য পরিবর্তন স্টাডারকেও ধরবে:

command 2>&1 | tee ~/outputfile.txt

বা সামান্য খাটো এবং কম জটিল:

command |& tee ~/outputfile.txt

teeআপনি যদি কমান্ড আউটপুট লাইভ দেখার সময় ক্যাপচার করতে সক্ষম হতে চান তবে তা কার্যকর


এটি বলে যে & অপ্রত্যাশিত এবং কমান্ডটি চালিত হওয়ার সাথে সাথে লগটি লেখেনি। আমি তবে এটি একটি ব্যাশ ফাইলে ব্যবহার করছি, এতে কোনও তফাত আসে?
টিম 687

@ tim687 আমি এই সম্পাদনাটি সরিয়েছি। এই সম্পর্কে দুঃখিত ... আমার মূল উত্তরের অংশ ছিল না।
হারুন

অ্যারন ধন্যবাদ! টি রিয়েল টাইমে ফাইল যুক্ত করবে, তাই না? আমার কাছে একটি ব্যাকআপ স্ক্রিপ্ট রয়েছে যা আমি ব্যবহার করতাম, আমার পিসি ব্যাকআপ করতাম, তবে লগইন আসল সময়ে হয় না। আমার পিসি ব্যাকআপ শেষ হওয়ার পরে ঘুমাতে যায় এবং লগ ফাইলটি খালি থাকে। কমান্ডগুলি লগ করার জন্য আমার অন্য কমান্ড ব্যবহার করা উচিত?
টিম 687

আমি এর অর্থ কীভাবে ব্যাখ্যা করব 2>&1?
Mahesha999

@ মাহেশা ৯৯৯ 2 টি এসটিডিআরআর এর ফাইল বিবরণী এবং 1 টি এসটিডিআউট এর জন্য। যাতে 2> & 1 STDERR কে STDOUT এ প্রেরণ করে। এই এই প্রশ্নটি এটি বেশ ভালভাবে ব্যাখ্যা করেছে: স্ট্যাকওভারফ্লো.com/
অ্যারন

20

আপনি কমান্ড আউটপুট কোনও ফাইলে পুনর্নির্দেশ করতে পারেন:

your_command >/path/to/file

কমান্ড আউটপুট কোনও ফাইলকে ওভাররাইট করার পরিবর্তে যুক্ত করতে, ব্যবহার করুন:

your_command >>/path/to/file

অনেক ধন্যবাদ ! কোন সীমা আছে? ফাইলের সর্বোচ্চ আকারের মতো?
নেতৃত্বাধীন-জেপ্প

3
সর্বোচ্চ ফাইলের আকার কেবলমাত্র ফাইল সিস্টেমের মাধ্যমেই সীমাবদ্ধ
বিশৃঙ্খলা

এই উত্তর stderr সংরক্ষণ করবে না। ব্যবহার করুন &>, দেখতে stackoverflow.com/questions/637827/... এবং tldp.org/LDP/abs/html/io-redirection.html
প্যান্থার

3
ওপি কখনও স্টেডার বাঁচাতে বলেনি
বিশৃঙ্খলা

এটিতে "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই" বলা আছে। ডিরেক্টরিগুলি স্বয়ংক্রিয়ভাবে তৈরি করা কি সম্ভব?
কিওয়ার্টি

14

বিবেচনা করার জন্য একটি বর্ধন -

বিভিন্ন স্ক্রিপ্টগুলি আউটপুটে রঙের কোডগুলি ইনজেকশন দেবে যা আপনি আপনার লগ ফাইলটিকে বিশৃঙ্খলা করতে চান না।

এটি ঠিক করার জন্য, আপনি এই কোডগুলি সরিয়ে দেওয়ার জন্য প্রোগ্রামটি সেড ব্যবহার করতে পারেন । উদাহরণ:

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt

1
রঙগুলি সংরক্ষণ করা যায় এমনভাবে আউটপুট কীভাবে সংরক্ষণ করবেন? আমি একটি কমান্ডের ফলাফলকে লাইব্রোফাইসে আমদানি করতে এবং রংগুলি রাখতে চাই।
মাদ্রাং 12'15

@ মাদারং: আমি এখনই আপনার মন্তব্যটি পড়েছি তবে আপনি এই উত্তরটি দরকারী মনে করতে পারেন ।
সিলভাইন পাইনাউ

ওহ, আমি ঠিক যা খুঁজছি কীভাবে স্ক্রিনে আউটপুট প্রিন্ট করা যায়?
সিগুর

1
নোট করুন যে অনেকগুলি কমান্ড রঙিন আউটপুট তৈরি করে, যেমন lsএবং grep, সমর্থন --color=auto, যা স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল হলে কেবল রঙ কোডগুলি আউটপুট করে।
এলিয়াহ কাগন

5

জন্য cronকাজ ইত্যাদি আপনি ব্যাশ এক্সটেনশন এড়াতে চান। সমতুল্য পসিক্স shপুনর্নির্দেশ অপারেটরগুলি

Bash          POSIX
------------  --------------
foo &> bar    foo >bar 2>&1
foo &>> bar   foo >>bar 2>&1
foo |& bar    foo 2>&1 | bar

আপনি লক্ষ্য করবেন যে পসিএক্স সুবিধাটি কিছুটা অর্থে সহজ এবং আরও সোজা। &>সিনট্যাক্স থেকে ধার করা হয়েছিল cshযা ইতিমধ্যেই আপনি সন্তুষ্ট উচিত যে এটা একটা খারাপ ধারণা।


1

some_command | tee command.logএবং some_command > command.logএই সমস্যাটি রয়েছে যে তারা command.logরিয়েল-টাইমে ফাইলটিতে কমান্ড আউটপুট সংরক্ষণ করে না ।

এই সমস্যাটি এড়াতে এবং রিয়েল-টাইমে কমান্ড আউটপুট সংরক্ষণ করতে আপনি সংযোজন করতে পারেন unbufferযা expectপ্যাকেজটির সাথে আসে ।


উদাহরণ:

sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log

ধরে নিলে log.pyরয়েছে:

import time
print('testing')
time.sleep(100) # sleeping for 100 seconds

আপনি চালাতে পারেন unbuffer python log.py | tee command.logবাunbuffer python log.py > command.log

আরও তথ্য: আমি রিয়েল-টাইমে কোনও ফাইলের মধ্যে একটি কমান্ড আউটপুট কীভাবে সংরক্ষণ করতে পারি?


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