এমন কোনও সরঞ্জাম আছে যা স্বচ্ছভাবে zcat এবং বিড়ালের সংমিশ্রণ ঘটে?


70

লগ ফাইলগুলি পরিচালনা করার সময়, কেউ কেউ শেষ পর্যন্ত জিজেপ করা ফাইল হিসাবে ধন্যবাদ দেয় logrotateএবং অন্যরা তা না করে। সুতরাং আপনি যখন এই জাতীয় কিছু চেষ্টা করেন:

$ zcat *

আপনি একটি কমান্ড লাইনের মত শেষ করে zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gzএবং এরপরে:

gzip: xyz.log: not in gzip format

সেখানে কিভাবে অনুরূপ একটি টুল যে জাদু বাইট লাগবে, কি fileকাজ, এবং ব্যবহার zcatবা catপরিণতি উপর নির্ভর করে যাতে আমি নল আউটপুট করতে পারেন grepউদাহরণস্বরূপ?

এনবি: আমি জানি যে আমি এটির স্ক্রিপ্ট করতে পারি, তবে আমি জিজ্ঞাসা করছি যে ইতিমধ্যে সেখানে কোনও সরঞ্জাম আছে কিনা।

উত্তর:


41

zless

এটি সম্পর্কে অত্যন্ত দুঃখের বিষয় বলে মনে হচ্ছে zcat, যেহেতু libz এর এমন একটি API রয়েছে যা সংকুচিত এবং সঙ্কুচিত উভয় ফাইলই স্বচ্ছভাবে পড়া সমর্থন করে। তবে ম্যানপেজটি এর zcatসমতুল্য বলে gunzip -c


এই বিকল্পের জন্য আপনাকে ধন্যবাদ। আমি এটা চিন্তা করতে পারে, আমি না পারে? ;) ... আচ্ছা ভালো. স্পট চালু করুন, +1 করুন এবং স্বীকার করুন (এছাড়াও আপনার অন্যান্য উত্তরদাতার তুলনায় কম রেপ রয়েছে বলে)।
0xC0000022L

অ্যামেজিং। আমাকে অনেক সাহায্য করেছে, আমি কয়েক বছর ধরে এটি সমাধান করতে শেল স্ক্রিপ্ট ব্যবহার করছিলাম ... বা একটি ভয়ানক পার্ল স্ক্রিপ্ট ... লগ রেজোলিউশন মার্জ, অ্যাস্টস্টাস দ্বারা ব্যবহৃত ... এখন আমি এই আশ্চর্যজনক সরঞ্জামটি জানি। ধন্যবাদ।
লুসিয়ানো অ্যান্ড্রেস মার্টিনি

98

সঙ্গে এটি ব্যবহার করে দেখুন -fবা --force:

zcat -f -- *

যেহেতু zcatকেবল একটি সরল স্ক্রিপ্ট যা চলমান

exec gzip -cd "$@"

অনুবাদ করতে হবে যে দীর্ঘ বিকল্পের সাথে

exec gzip --stdout --decompress "$@"

এবং, man gzip(আমার উপর জোর দিন) অনুসারে:

-ফ - ফোর্স
      ফাইলটির একাধিক লিঙ্ক থাকলেও সংক্ষেপে বা ডেকম্প্রেশনকে বাধ্য করুন
      বা সংশ্লিষ্ট ফাইলটি ইতিমধ্যে উপস্থিত রয়েছে, বা সংক্ষেপিত ডেটা থাকলে if
      টার্মিনাল থেকে পড়া বা লিখিত। যদি ইনপুট ডেটা কোনও ফর্ম্যাটে না থাকে
      gzip দ্বারা স্বীকৃত, এবং --stdout বিকল্পটিও দেওয়া থাকলে, অনুলিপি করুন
      মান আউটপুট পরিবর্তন না করে ইনপুট ডেটা: zcat বিড়াল হিসাবে আচরণ করুন

এছাড়াও:

যাতে আমি grepউদাহরণ হিসাবে আউটপুট পাইপ করতে পারেন

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

zgrep -- PATTERN *

যদিও নীচে স্টাফেনের মন্তব্য দেখুন।


1
ধন্যবাদ, এটি zlessসমাধানের একটি আকর্ষণীয় বিকল্প । ভাল এবং +1।
0xC0000022L

6
লক্ষ্য করুন zlessএবং উভয়ই zgrepস্ক্রিপ্ট যা কল করে gzip -cdfq(যা zcat -fq)।
স্টাফেন চেজেলাস

9

আমি ঠিক একই উদ্দেশ্যে ব্যবহার করি:

{ cat /var/log/messages ; zcat /var/log/messages*.gz ; }| grep something | grep "something else" ....

আমি এই পদ্ধতির পছন্দ করি কারণ, সহকর্মীদের শিক্ষিত করার জন্য এটির সর্বনিম্ন সময় প্রয়োজন। যদি লগ বার্তাগুলির একটি সাজানোর বান্ধব টাইমস্ট্যাম্পে টাইমস্ট্যাম্প থাকে তবে এটি বিশেষভাবে কার্যকর।
থমাস এল Holaday

দুর্দান্ত পন্থা। ধন্যবাদ।
মিলিও একনোভিয়াস

7

জিটুলের (zcat, zgrep, ..) নামক একটি ড্রপ-ইন প্রতিস্থাপন রয়েছে যা জেকটিসগুলি বলে যা সমস্ত ডিকম্প্রেশন সরঞ্জামগুলিকে ব্যাকএন্ডের থেকে স্বাধীনভাবে এক করে দেয়। সুতরাং একই কমান্ডের সাহায্যে আপনি স্বচ্ছভাবে প্লেইন, লজমা, জিজেপড, এক্সজেড ফাইলগুলি পড়তে পারেন।

এটি ডেবিয়ান হুইজি বা আরও নতুনতে উপলব্ধ, সম্ভবত রেডহাট / সেন্টোতেও।

প্রকল্পের পৃষ্ঠা এখানে nongnu.org

একটি ব্লগ পোস্ট এখানে ব্যবহারের ব্যাখ্যার ব্যাখ্যা দিচ্ছে ( noone.org )


3

এটি RHEL 5.x তে জরিমানা করে যেখানে zcat একটি বাইনারি। এটি RHEL 6.x (এবং উবুন্টু 12.x) এ ব্যর্থ হয় যেখানে zcat একটি স্ক্রিপ্ট। এটি সূক্ষ্ম কাজ করতে ব্যবহৃত

আমি zcat মোটেও ব্যবহার করব না তবে zgrep কোনওভাবেই সঙ্কুচিত ফাইলগুলি হ্যান্ডেল করবে না।


2

কালক্রমে ক্রমযুক্ত এবং সংকুচিত উভয়ই খোলে।

ls -v syslog* | tac | xargs zcat -f | less

এটা তোলে অধিক দশ লগ ফাইল (syslog.10.gz ...) সঙ্গে ভুল অর্ডার দেয়
Vanni

ভালো বল ধরা. -v যে ঠিক করা উচিত।
রায়ান

ls -rvএড়ানো tac। লগ ফাইলগুলির জন্য, less $(ls -rv syslog*)আপনার LESSOPENএনভির ভার সেট সহ সঠিকভাবে কাজ করে। esc-nফাইলের সীমানা উপেক্ষা করে পরবর্তী ম্যাচটি অনুসন্ধান করতে আপনি ফাইল জুড়ে অনুসন্ধান করতে পারেন ।
পিটার কর্ডস

সাথে zsh:zcat -f syslog*(nOn)
স্টাফেন চেজেলাস

আপনার লগের পরের দিন সংকোচনের জন্য সেট থাকলে এটি কাজ করে না
সিজেবার্থ

1

মোড়কের কি হবে?

$ cat xcat.sh 
#!/bin/bash

for i in $@;do 
        [ ! -z "$(file -i $i | grep "gzip")" ] && zcat $i || cat $i
done

$ bash xcat.sh plain.txt gzipped_text.gz

0

~/.bashrcএই বাশ ফাংশনটি অনুলিপি করুন এবং আটকান (বা এটি আপনার ফাইলের শেষে রাখুন ) :

logs() { zcat -f $(ls -rv "$1"*) | less; }

এখন আপনি উদাহরণস্বরূপ টাইপ করতে পারেন logs /var/log/syslogবা logs /var/log/nginx/access.logদেখতে সব syslog- র বা nginx সঙ্গে নতুন প্রাচীনতম থেকে লগ বার্তা কম

তারপরে আপনি পরবর্তী জন্য টাইপিং এবং হিট করার মতো কিছু সন্ধান করতে পারেন ।/somethingn


0

খুব সুন্দরভাবে এটি করছে একটি সুন্দর পার্ল স্ক্রিপ্ট। এটি অ্যাজস্ট্যাটস প্রকল্প থেকে লগ্রেসলর্ম.পিএল: http://www.awstats.org/docs/awstats_tools.html

লগ্রেসলভার্ম আপনাকে নির্দিষ্ট উত্স থেকে নির্মিত তারিখে বাছাই করা একটি অনন্য আউটপুট লগ ফাইল পেতে দেয়:

  • এটি বেশ কয়েকটি ইনপুট লগ ফাইল পড়তে পারে
  • এটি .gz / .bz2 লগ ফাইলগুলি পড়তে পারে

    আউটপুটটি STDOUT এ রয়েছে, যাতে আপনি এটি অতিরিক্ত প্রক্রিয়াতে বেশ সুন্দরভাবে ব্যবহার করতে পারেন।


  • 0

    @ রায়ের উত্তরের ভিত্তিতে, নিম্নলিখিতগুলি 'রোলড' ফাইলগুলি বর্ণানুক্রমিকভাবে বাছাই করবে, তারপরে বর্তমান ফাইলটি পাবেন, প্রয়োজন হলে সেগুলি সঙ্কুচিত করুন এবং lessসেগুলি:

    cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less

    বা আপনি যদি এগুলি সমস্তকে একটি অবিচ্ছিন্ন স্ট্রিম হিসাবে পেতে চান তবে আপনি সেগুলি করতে পারেন tail, এবং বিকল্পভাবে অন্য কোনও প্রক্রিয়াতে পাইপ করুন

    cat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)

    আমার নোট করা উচিত যে এটি লগগুলির জন্য তৈরি করা হয়েছে যা ফাইলের শেষের সাথে সংযুক্ত তারিখের সাথে প্রতিদিন আবর্তিত হয়। যদি আপনার লগগুলি আমাদের একটি ভিন্ন ফর্ম্যাট করে, আপনার মিটিংয়ের জন্য catবিবৃতিটির প্রথম অংশটি সংশোধন করতে হবে ।

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