কোনও ফাইলের পরিবর্তনগুলি পর্যবেক্ষণ করতে শেল কমান্ড - এটি আবার কী বলা হয়?


159

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

আপনি কি জানেন এটি কি বলা হয়?

উত্তর:


213

তুমি বোঝাতে চাচ্ছ

tail -f logfile.log

?

( লেজের জন্য ম্যান পেজ )


6
হ্যাঁ, এটি আসল সময়।
অ্যাডাম গিবিনস 21

18
সিডনোট: যদি আপনার বিতরণটি লেজ কমান্ড সরবরাহ করে তবে এটি লেজ -f এর অগ্রাধিকার হিসাবে ব্যবহার করুন। লেজটি আরও দক্ষ কারণ এটি যদি না লেখা থাকে তবে দেখা ফাইলগুলি অ্যাক্সেস করার প্রয়োজন নেই (পোল অ্যাক্সেসগুলি বিরক্ত করছে যদি আপনি টাইম আপডেটের সাথে ফাইল সিস্টেম মাউন্ট করেন তবে।)
মিহাই লিম্বান

10
সুপার ইউজার, আমি একটি উত্তর সুপারিশ লেজ -F পরিবর্তে -f , অত্যধিক
রাফা

17
tail -Fফাইল বস্তুর চেয়ে ফাইলের নামগুলি অনুসরণ করবে যা লগ ফাইলের ঘূর্ণনের ক্ষেত্রে বিশেষভাবে কার্যকর।
আমির আলী আকবরী

2
আপডেট, কয়েক বছর পরে: tailfএখন হ্রাস করা হয়েছে এবং tail -fনিরাপদ। ( এটির সাথে আপনার সিস্টেমে এটি নিশ্চিত করুন man tailf)) ডকুমেন্টেশন দেখুন: man7.org/linux/man-pages/man1/tailf.1.html
exp1orer

124

জন স্কিটির উত্তর অনুসারে আপনি সম্ভবত লেজকে বোঝালেন।

আর একটি দরকারী হ'ল ঘড়ি ; এটি আপনাকে পর্যায়ক্রমে একটি কমান্ড চালাতে এবং আউটপুট পূর্ণ স্ক্রিনটি দেখতে দেয়। উদাহরণ স্বরূপ:

ওয়াচ -এন 10-ডি এলএস-এল / ভার / অ্যাডম / বার্তা

ls -l /var/adm/messagesপ্রতি 10 সেকেন্ডে কমান্ডটি চালাবে এবং পরবর্তী রানগুলির মধ্যে আউটপুটটির পার্থক্যটি হাইলাইট করবে। (উদাহরণস্বরূপ, একটি লগফিল কত দ্রুত বৃদ্ধি পাচ্ছে তা দেখার জন্য দরকারী)।


38

inotifywaitথেকে inotify-সরঞ্জাম আপনি একটি কমান্ড প্রত্যেক সময় একটি ফাইল (অথবা একটি ডিরেক্টরির মধ্যে কোন ফাইল) পরিবর্তন চালাতে চান দরকারী। উদাহরণ স্বরূপ:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

কেবলমাত্র একটি নোট যা pathকোনও ভেরিয়েবল নামের জন্য সেরা পছন্দ নয়। চালু আছে zsh, মনে হয় পরিবেশের ভারগুলি কেস-সংবেদনশীল নয়। আমার জন্য, সেটিংস সেট pathহয়ে PATHযাওয়ার কারণও তৈরি করে এবং এর অর্থ হ'ল কোনও কিছুই কার্যকর হবে না যতক্ষণ না আপনি এটি ঠিক করেন। চালু bash, সেটিংয়ের pathকোনও প্রভাব নেই PATH
থানাটোস

36

আমি less +FG1 ওভার ব্যবহার করতে পছন্দ করি tail -fকারণ নির্দিষ্ট ত্রুটি বা আইডির জন্য নিজেকে একটি লগ ফাইল অনুসন্ধান করা দরকার বলে মনে করি। আমার যদি কিছু অনুসন্ধান করার প্রয়োজন হয় তবে আমি ^Cফাইলটি অনুসরণ করা বন্ধ ?করতে এবং পিছনের দিকে অনুসন্ধান শুরু করতে টাইপ করি ।

কী বাইন্ডিংগুলি অনেকটা একইরকম vi+বিকল্পটি ব্যবহার করে কোনও কমান্ড সূচনাতে শুরু করা যেতে পারে :

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

সত্যিই দীর্ঘ লগগুলির জন্য, আমি -nবিকল্পটি লাইন নম্বর বন্ধ করে দেয় এমনটি ব্যবহার করা সুবিধাজনক বলে মনে করি । ম্যানপেজ থেকে:

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

1. মন্তব্যগুলিতে এটিকে নির্দেশ করার জন্য আরজিমারচায় টুপি-টিপ ।


aliasআপনার পছন্দসই বিকল্পগুলির সাথে একটি সেট করতে ভুলবেন না, যাতে আপনাকে প্রতি একক সময় এগুলি টাইপ করতে হবে না।
মাইকেল হ্যাম্পটন

আসলে, আপনার বেশিরভাগ ক্ষেত্রে সাধারণত এলিয়াসগুলির তুলনায় শেল ফাংশনগুলি পছন্দ করা উচিত।
ট্রিপলি

21

লেজ দুর্দান্ত ... কম ফাইল স্টার্ট কম ব্যবহার করা যেতে পারে অর্থাৎ কম মাইফাইল তারপর Shift+ টিপুন F। এটি লেজ হিসাবে কম কাজ আছে।


5
কম + এফ
মাইফাইল

16

আমি একটি ল্যাটেক্স ফাইল সম্পাদনা করছি এবং মাঝখানে কোথাও পরিবর্তনের জন্য এটিও নিরীক্ষণ করতে চেয়েছিলাম। আমি নীচের ছোট্ট শেল স্ক্রিপ্টটি বেত্রাঘাত করেছিলাম যা আমার পক্ষে কার্যকর প্রমাণিত। আমি আশা করি এটি অন্য কারও কাজেও আসবে।

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

এটি হিসাবে watch.shএবং সংরক্ষণ করুন chmod u+x watch.sh। তারপরে আমি এটি নীচে কার্যকর করি:

./watch.sh file.tex pdflatex

আপনি যদি চান যে কমান্ডটি কেবলমাত্র চালিত হয় যদি প্রকৃত পরিবর্তন ঘটে তবে আপনি এর `md5sum "$FILE"`পরিবর্তে ব্যবহার করতে পারেন `ls -l "$FILE"`


1
একক ফাইলের পরিবর্তে ডিরেক্টরি এবং তাদের সামগ্রীগুলি দেখতে:NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
অ্যান্ডি


6

আপনি inotifwatch / inotifywait ব্যবহার করতে পারেন যা কার্নেলগুলিকে ইনোটাইফাই সাবসিস্টেমটিতে প্রবেশ করে। এইভাবে আপনি "উন্মুক্ত", "বন্ধ" বা "অ্যাক্সেস" এর মতো জিনিসগুলির জন্যও দেখতে পারেন।

তবে আপনি যদি কেবল স্টাডাউটে সংযুক্ত লাইন পেতে চান তবে আমি লেজের সাথে সম্মত।


3

লেজ হ'ল মানক, traditionalতিহ্যবাহী, সর্বত্র ইউনিক্স সরঞ্জাম উপলব্ধ। আরও কিছু পরিশীলিত সরঞ্জামটি মাল্টিটেল যা একসাথে বেশ কয়েকটি ফাইল নিরীক্ষণ করতে পারে এবং সিনট্যাক্স হাইলাইট করে।


3

আমি যদি কেবল ফাইলটি লেজু করা ছাড়াও ফাইলটির চারপাশে অনুসন্ধান করতে সক্ষম হতে চাই তবে আমি "এফ" কমান্ডটি কম ব্যবহার করি।

লেজ ব্যবহার করার সময়, মনে রাখবেন যে অতিরিক্ত আর্গুমেন্টগুলি যদি ফাইলটি ঘূর্ণায়মান বা সম্পাদনা দ্বারা পরিবর্তিত হতে পারে (ভিএম এর জন্য ডিফল্ট মোড) needed

লেজ -f এর ফলে লেজটি ফাইল বর্ণনাকারী সংরক্ষণ করে এটি অনুসরণ করে। যদি ফাইলটি প্রতিস্থাপন করা হয় তবে ডেস্ক্রিপ্টর পরিবর্তন করা হবে। ফাইল বর্ণনাকারীর অনুসরণের সুবিধাটি হ'ল যদি ফাইলটির নাম পরিবর্তন করা হয় তবে আপনি এটি অনুসরণ করে চলেছেন।

লেজ - ফলো = নামকরণকৃত ফাইলটি পর্যায়ক্রমে পুনরায় খোলার মাধ্যমে এটি পুনরায় প্রতিস্থাপন করা হয়েছে কিনা তা জানতে টেল ট্র্যাক তৈরি করবে।

- যদি আপনি লগ ফাইলটি টেল করতে চান তবে ফাইলটি এখনও তৈরি হয়নি ret

লেজ -F হল --follow = --retry এর শর্টকাট।


2

লেজটি ভুলে যান, আপনার পছন্দসই আদেশটি ভিন্ন। পার্থক্যগুলি দেখার জন্য একটি ভাল কৌশল এখানে 2 টি ফাইলের মধ্যে রিয়েল টাইম (বা বন্ধ) বা একটি ফাইল লিখিত হওয়ার মধ্যে ঘটে happen

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

আপনার কাছে ১ টি ফাইল রয়েছে এবং এতে পরিবর্তন করার সাথে সাথে আপনি দেখতে চান:

সুতরাং এখানে কি করতে হবে:

  1. ফাইলটি অনুলিপি করুন

cp file file2

  1. পার্থক্যগুলি খুঁজে পেতে একটি ফাইল স্ক্রিপ্ট লিখুন এবং ফাইল 2 আপডেট করুন

touch check-differences.sh

nano check-differences.sh

chmod 755 check-differences.sh

  1. স্ক্রিপ্টের জন্য এটি একটি প্রাথমিক ধারণা। আপনি চাইলে এটিকে একটি ফাইলে লিখুন

#!/bin/bash

diff file file2

cp file file2

  1. এরপরে আপনি হয় ঘড়িটি ব্যবহার করে পর্দার পার্থক্যগুলি দেখতে পারেন

watch ./check-differences

এটি প্রতি 2 সেকেন্ড ডিফল্টরূপে আপডেট হবে। সুতরাং আপনার যদি ফিরে যেতে এবং সেগুলি পড়ার দরকার হয় তবে স্ক্রিপ্টের কোনও ফাইলের জন্য আলাদা করে আউটপুট লিখুন।

অথবা আপনার স্ক্রিপ্টটি নিয়মিত চালানোর জন্য ক্রোন ব্যবহার করুন যদি আপনাকে আউটপুট দেখার প্রয়োজন হয় না।


1

tail -f somefile.txtনতুন ডেটা দিয়ে স্ক্রোলিং চালিয়ে যাওয়ার সময় আমি কখনও কখনওless +G somefile.txt ফাইলের সর্বশেষ ডেটাগুলির একটি প্যাচ দেখতেও পছন্দ করি ।


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