লিনাক্স / এআইএক্স-এ টেল -0f ব্যবহার করে একাধিক ফাইল কীভাবে টেল করবেন


39

অপশনটি ব্যবহার করে আমি দুটি ফাইল টেলিংয়ের চেষ্টা করেছি:

tail -0f file1.log -0f file2.log

লিনাক্সে আমি একটি ত্রুটি দেখতে পাচ্ছি "লেজ: একসাথে কেবল একটি ফাইল প্রক্রিয়া করতে পারে"।

এআইএক্স-এ আমি ত্রুটিটিকে "অবৈধ বিকল্পগুলি" হিসাবে দেখছি।

আমি যখন ব্যবহার করি তখন এটি কাজ করে:

tail -f file1 -f file 2

লিনাক্সে তবে এআইএক্সে নয়।

আমি এআইএক্স / লিনাক্স ব্যবহার করে -0fবা একাধিক ফাইল টেল করতে সক্ষম হতে চাই-f

multitail এই ওএস এর কোনওটিতেই স্বীকৃতি নেই।


আপনি screenদুটি পৃথক সেশন তৈরি করতে ব্যবহার করার চেষ্টা করেছেন ? আপনি উভয় পর্দায় লেজ ব্যবহার করতে সক্ষম হওয়া উচিত? এছাড়াও, tmuxইনস্টল করা থাকলে কাজটিও করতে পারেন।
রাইকায়ো

উত্তর:


36

কি সম্পর্কে:

tail -f file1 & tail -f file2

বা ফাইলের নামের সাথে প্রতিটি লাইন উপসর্গ করা:

tail -f file1 | sed 's/^/file1: /' &
tail -f file2 | sed 's/^/file2: /'

যার নাম একটি প্যাটার্নের সাথে মিলে যায় সমস্ত ফাইল অনুসরণ করতে আপনি এই জাতীয় স্ক্রিপ্ট tail -fসহ (যা প্রতি সেকেন্ডে অবিচ্ছিন্নভাবে ফাইল থেকে পড়ে) প্রয়োগ করতে zshপারেন:

#! /bin/zsh -
zmodload zsh/stat
zmodload zsh/zselect
zmodload zsh/system
set -o extendedglob

typeset -A tracked
typeset -F SECONDS=0

pattern=${1?}; shift

drain() {
  while sysread -s 65536 -i $1 -o 1; do
    continue
  done
}

for ((t = 1; ; t++)); do
  typeset -A still_there
  still_there=()
  for file in $^@/$~pattern(#q-.NoN); do
    stat -H stat -- $file || continue
    inode=$stat[device]:$stat[inode]
    if
      (($+tracked[$inode])) ||
        { exec {fd}< $file && tracked[$inode]=$fd; }
    then
      still_there[$inode]=
    fi
  done
  for inode fd in ${(kv)tracked}; do
    drain $fd
    if ! (($+still_there[$inode])); then
      exec {fd}<&-
      unset "tracked[$inode]"
    fi
  done
  ((t <= SECONDS)) || zselect -t $((((t - SECONDS) * 100) | 0))
done

তারপরে উদাহরণস্বরূপ, বর্তমান ডিরেক্টরিতে সমস্ত পাঠ্য ফাইলকে পুনরাবৃত্তভাবে অনুসরণ করতে:

that-script '**/*.txt' .

1
sedপথে অগ্রাধিকারের কোনও কারণ &?
গিলাদ মায়ানী

@ গিলাডমায়নী আমি কেবল এটি নিয়ে পরীক্ষা-নিরীক্ষা করছি তবে যে সমস্যাটি আমি খুঁজে পেয়েছি তা হ'ল আপনি যদি এটি কোনও স্ক্রিপ্টে আবদ্ধ করেন তবে আপনি ভুত প্রসেস পাবেন যা ছাড়বে না।
ম্যাথিউউ কর্মিয়ার

8

tailএকাধিক ফাইল GNU লেজ সংস্করণ দ্বারা প্রসারিত করা হয়। এআইএক্স সহ আপনার জিএনইউ লেজ নেই, তাই আপনি এটি করতে পারবেন না। multitailপরিবর্তে আপনি ব্যবহার করতে পারেন ।

আপনি লিনাক্স এবং এআইএক্স উভয় ক্ষেত্রে মাল্টিটেল ইনস্টল করতে পারেন ।

  • এআইএক্সের সাহায্যে আপনি এখানে প্যাকেজ ডাউনলোড করতে পারেন ।

  • লিনাক্সে multitailপ্রায়শই রেপো থাকে, তাই আপনি ডিস্ট্রো প্যাকেজ ম্যানেজার ব্যবহার করে এটি সহজেই ইনস্টল করতে পারেন:

    • দেবিয়ান / উবুন্টুতে: apt-get install multitail
    • সেন্টোস / ফেডোরায়: yum install multitail

1
মাল্টিটেল দুর্দান্ত কাজ করে এবং সিনট্যাক্সটি সহজ:multitail -i path/to/file1 -i path/to/file2
হাউজমড

6

নিম্নলিখিত জিনিসটি স্ট্যান্ড আউট আউটপুট জিনিস ভাল কাজ করে

tail -f file1 & tail -f file2

আমি pipeঅন্য প্রক্রিয়া আউটপুট চেয়েছিলেন । উপরের &অংশটি ব্যাকগ্রাউন্ডে চলার আগে অংশটি তৈরি করছিল এবং কেবল দ্বিতীয় অংশটি pipedপ্রক্রিয়াধীন ছিল

সুতরাং আমি ব্যবহার

tail -f file1 file2 | process

@ স্টাফেন আপনার উত্তরটি নিখুঁত, তবে কেবল আমার ব্যবহারের ক্ষেত্রে উল্লেখ করুন যাটিতে কিছুটা মোড় আছে।


বিন্দু যে tail -f file1 file2, AIX কাজ করে না যেখানে লেজ শুধুমাত্র একটি ফাইলের নাম গ্রহণ করে। আপনি (tail -f file1 & tail -f file2) | processউভয় tailএর stdout পাইপ থেকে পুনঃনির্দেশ করতে পারেন process
স্টাফেন চেজেলাস

5

ওএসএক্স এবং লিনাক্সে, ব্যবহার করে

tail -f <file1> <file2>

আমার জন্য দুর্দান্ত কাজ করে আর একটি সুন্দর জিনিস এটি নিম্নলিখিত আউটপুট আছে:

==> /srv/www/my-app/shared/log/nginx.access.log <==
things from log 1

==> /srv/www/my-app/shared/log/nginx.error.log <==
things from log 2

==> /srv/www/my-app/shared/log/nginx.access.log <==
new things from log 1

কোন আউটপুটটি কোন লগ থেকে তা সনাক্ত করতে আপনাকে সহায়তা করতে।


1
qশিরোনাম দমন করতে যোগ করুন
কার্ল পোকাস

1

আমি একটি কোড স্নিপেট ব্যবহার করে তা সরবরাহ করব tmuxযা আপনাকে দুটি পৃথক উইন্ডো দিতে পারে যা আপনি উভয় ফাইল একসাথে টালতে ব্যবহার করতে পারেন:

tmux new-window -a -n Tail
tmux new-session -d -s Tail -n SSH0 -d
tmux selectp -t Tail

#This is tmux interactions with the user (colors of the tabs used, hot keys, etc.)
tmux bind-key -n M-Left previous-window -t WinSplit
tmux bind-key -n M-Right next-window -t WinSplit
tmux set-window-option -g monitor-activity on
tmux set -g visual-activity on
tmux set-window-option -g window-status-current-bg blue
tmux set-window-option -g window-status-fg red
tmux set -g pane-border-fg yellow
tmux set -g pane-active-border-bg red
tmux set -g message-fg yellow
tmux set -g message-bg red
tmux set -g message-attr bright
tmux set -g status-left "#[fg=red]#S"

#Names two seperate windows
tmux new-window -n tail1 -t Tail
tmux new-window -n tail2 -t Tail

#Now this will allow you to automatically run tail when this tmux script is run
tmux send-keys -t Tail:0 'tail -f file1.log' C-m
tmux send-keys -t Tail:1 'tail -f file2.log' C-m

আপডেট: ব্যবহার screenএকাধিক সেশনগুলি সংযুক্ত / বিচ্ছিন্ন করতে পারে যাতে আপনি tailএকাধিকবার চালাতে পারেন । আমি এটি করার পরামর্শ দিতে পারি:

screen -s Tail_Server1.log

এরপরে আপনি CTRL+A+Dঅধিবেশনগুলি না মেরে এবং তারপরে পরবর্তীটি আলাদা করতে চাইবেন:

screen -s Tail_Server2.log

উভয়ই দুটি পৃথক পৃথক চলবে screens, আমি উল্লেখ করব screen --helpযাতে আপনি এটি উভয় স্ক্রিনকে কীভাবে আপনার কাজ করতে চান তার সাথে সামঞ্জস্য করতে পারেন terminal


@ ওয়েবনাশ উপভোগ করুন :)
রাইকায়ো

@ ওয়েবনাশ আপনি যা বলেছিলেন সেটির জন্য আমার উত্তরটি কাজ করেছিল?
রাইকায়ো

0

সুনোস ৫.১০-তে আমার জন্য নিম্নলিখিতগুলি কাজ করছে।

$ tail -f file1.log &
$ tail -f file2.log &
$ 

উভয় লেজ পটভূমিতে চলবে। ফাইলগুলিতে পরিবর্তনগুলি স্টডআউটে নিক্ষেপ করা হবে। তবুও আপনি কেবল এন্টার টিপে কোনও কমান্ড চালাতে পারেন।


... তবে এটি দুটি প্রক্রিয়া তৈরি করে যা আপনাকে মেরে ফেলতে হবে এবং অগ্রভাগের আউটপুটটির সাথে STDOUT মিশ্রিত করে।
চালিত

0

নিম্নলিখিত অনেলাইনার ব্যবহার করুন:

while true; do cat /path/to/numerous/folders/and/files/*/*.txt | grep "some filter" | tail -n 10; sleep 1; done

প্রতি 1 সেকেন্ডে, স্ক্রিপ্ট ফিল্টার প্রবাহের 10 টি শেষ লাইন মুদ্রণ করবে।

লুপটি ভাঙ্গতে, টিপুন CtrlC

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