রিয়েলটাইমে আমি কীভাবে কোনও প্রক্রিয়ার খোলা ফাইলগুলি পর্যবেক্ষণ করব?


41

আমি জানি যে আমি আমার লিনাক্স মেশিনে এই lsof মুহুর্তে কোনও প্রক্রিয়ার খোলা ফাইলগুলি দেখতে পারি । যাইহোক, একটি প্রক্রিয়া একটি ফাইল এত তাড়াতাড়ি খুলতে, পরিবর্তন করতে এবং বন্ধ করতে পারে যাতে স্ট্যান্ডার্ড শেল স্ক্রিপ্টিং (উদাহরণস্বরূপ watch) "লিনাক্সের ওপেন প্রসেস ফাইলগুলি (রিয়েল-টাইম)" হিসাবে বর্ণিত হিসাবে এটি পর্যবেক্ষণ করার সময় আমি এটি দেখতে পাব না "

সুতরাং, আমি মনে করি আমি কোনও প্রক্রিয়া নিরীক্ষণের একটি সহজ উপায় খুঁজছি এবং সময়ের সাথে সাথে এটি কী করেছে তা দেখুন। এটি দুর্দান্ত কী হবে যদি এটি দেখতে পাওয়া যায় যে এটি কীভাবে নেটওয়ার্ক সংযোগ তৈরি করে (চেষ্টা করেছিল) এবং নিরীক্ষা শুরু না করে প্রক্রিয়াটি চালানোর সময় পাওয়ার আগে অডিট শুরু করে দেয়।

আদর্শভাবে, আমি এটি করতে চাই:

sh $ audit-lsof /path/to/executable
4530.848254 OPEN  read  /etc/myconfig
4530.848260 OPEN  write /var/log/mylog.log
4540.345986 OPEN  read  /home/gert/.ssh/id_rsa          <-- suspicious
4540.650345 OPEN  socket TCP ::1:34895 -> 1.2.3.4:80    |
[...]
4541.023485 CLOSE       /home/gert/.ssh/id_rsa          <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80    |   this when polling

straceপ্রতিটি সিস্টেম কলটি না দেখার জন্য কি এটি এবং কিছু পতাকা ব্যবহার করা সম্ভব হবে ?


উত্তর:


50

এটি দিয়ে চলছে

strace -e trace=open,close,read,write,connect,accept your-command-here

সম্ভবত যথেষ্ট হবে।

-oপ্রক্রিয়াটি stderr এ মুদ্রণ করতে পারলে আপনার কনসোল ব্যতীত অন্য কোথাও স্ট্রেসের আউটপুট রাখার বিকল্পটি ব্যবহার করতে হবে। যদি আপনার প্রক্রিয়া কাঁটাচামচ করে, আপনারও প্রয়োজন হয় -fবা -ff

ওহ, এবং আপনি এটিও চাইতে পারেন -t, যাতে কলগুলি কখন ঘটেছিল তা দেখতে পান


দ্রষ্টব্য, আপনার প্রক্রিয়াটি কী করে তার উপর নির্ভর করে আপনার ফাংশন কল লিস্টটি ঝাপটানো দরকার - getdentsউদাহরণস্বরূপ, আরও ভাল নমুনা পাওয়ার জন্য আমাকে যুক্ত করতে হবে ls:

$ strace -t -e trace=open,close,read,getdents,write,connect,accept ls >/dev/null
...
09:34:48 open("/etc/ld.so.cache", O_RDONLY) = 3
09:34:48 close(3)                       = 0
09:34:48 open("/lib64/libselinux.so.1", O_RDONLY) = 3
09:34:48 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@V\0\0\0\0\0\0"..., 832) = 832
09:34:48 close(3)                       = 0
...
09:34:48 open("/proc/filesystems", O_RDONLY) = 3
09:34:48 read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tb"..., 1024) = 366
09:34:48 read(3, "", 1024)              = 0
09:34:48 close(3)                       = 0
09:34:48 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
09:34:48 close(3)                       = 0
09:34:48 open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
09:34:48 getdents(3, /* 5 entries */, 32768) = 144
09:34:48 getdents(3, /* 0 entries */, 32768) = 0
09:34:48 close(3)                       = 0
09:34:48 write(1, "file-A\nfile-B\nfile-C\n", 21) = 21
09:34:48 close(1)                       = 0
09:34:48 close(2)                       = 0

1
এটাই সঠিক পথে intoুকছে, ধন্যবাদ! আরও ব্যবহারকারী বান্ধব আউটপুট চাই, তবে এটি কাজ করে। আমি এটির জন্য আরও শীর্ষের মতো ইন্টারফেস সহ একটি সরঞ্জাম লিখতে সময় নিতে পারি। আমি আশা করছিলাম যে বাইনারিগুলির ক্রিয়াকলাপটি রিয়েল-টাইম পরিদর্শন করার জন্য একটি এনক্রাস ভিত্তিক বা 'শীর্ষ' -র মতো সরঞ্জাম উপস্থিত থাকবে।
gertvdijk

আপনি এটি দেখতে চান? স্ট্রেস আউটপুটটিকে বন্ধুত্বপূর্ণ কিছুতে পরিণত করা সম্ভবত সম্ভব।
অকেজো

আপনি -oআউটপুটটি ফাইলগুলিতে চাপ দিতে অবশ্যই ব্যবহার করতে চান । তারপরে আপনি tail -F strace.output"লাইভ" আপডেট পেতে অন্য টার্মিনালে চালাতে পারেন ।
পিটার্ফ

4
আপনি বিকল্পটি straceসহ একটি চলমান প্রক্রিয়াতে সংযুক্ত করতে পারেন -p PID
ফ্র্যাঙ্ক ব্রেইটলিং

যোগ -y"[পৃ] দ্রণ ফাইল বর্ণনাকারী আর্গুমেন্ট সঙ্গে যুক্ত পাথ" থেকে
ricab
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.