লিনাক্স বা ইউনিক্স কমান্ড লাইনে awk, sed এবং grep আমার তিনটি প্রিয় টুল। তারা সবাই বেশ শক্তিশালী। আজকে আমরা দেখব কীভাবে awk দিয়ে ক্র্যাক করা যায় যাতে আপনি এটি ব্যবহার করতে সহজ হন। তারপরে আমরা আপনার জন্য জিনিসগুলিকে আরও মজাদার করতে কিছু দরকারী awk ওয়ান লাইনার দেখব।
AWK হল একটি প্রোগ্রামিং ভাষা যা টেক্সট-ভিত্তিক ডেটা প্রক্রিয়াকরণের জন্য ডিজাইন করা হয়েছে, ফাইল বা ডেটা স্ট্রীমে। এটি 1970 এর দশকে বেল ল্যাবসে তৈরি করা হয়েছিল। যদিও এটি বেশ পুরানো, এটির বয়স দ্বারা প্রতারিত হবেন না। এটি যা করে তা অত্যন্ত শক্তিশালী এবং দক্ষ। আসুন এখন আমাদের হাত নোংরা করি।
awk-এর জটিল কাজ এবং ব্যবহার সম্পর্কে বিস্তারিত জানার আগে চলুন আপনাকে এটির মূল বিষয়গুলি নিয়ে শুরু করি। আমরা এই অনুশীলনের জন্য একটি ডামি ফাইল তৈরি করব এবং ব্যবহার করব। আপনি মোটামুটি যেকোনো টেক্সট ফাইল ব্যবহার করতে পারেন, যেমন আপনার সিস্টেম থেকে একটি লগ। আমি আমার প্রিয় সিস্টেম মনিটরিং টুল - Dstat থেকে একটি নমুনা আউটপুট ব্যবহার করব। এখানে আউটপুট:
বড় করতে ক্লিক করুন
এটি awk পরিচালনার জন্য একটি আদর্শ আউটপুট। কমা বা ট্যাব আলাদা কন্টেন্ট সহ awk দুর্দান্ত। আপনি কেন শীঘ্রই দেখতে পাবেন। তাই হয় কিছু অনুরূপ ডেটা তৈরি করুন বা test.txt এর মতো কিছু নামক একটি ডামি ফাইলে আমার উদাহরণটি কপি এবং পেস্ট করুন। আপনার লিনাক্স কম্পিউটারে একটি টার্মিনাল উইন্ডো চালু করুন। লিনাক্সের প্রায় সব স্বাদই awk দিয়ে পাঠানো হয়। যদি আপনি এমন একটি খুঁজে পেয়ে থাকেন যা কোনো কারণে এটি না থাকে তাহলে অনুগ্রহ করে এটি ইনস্টল করুন। টার্মিনাল উইন্ডোতে আপনি test.txt ফাইলটি সংরক্ষণ করেছেন এমন ডিরেক্টরি থেকে নিম্নলিখিতটি টাইপ করুন –
# awk {‘print’} test.txt
আউটপুটে পাঠ্য ফাইলের সম্পূর্ণ বিষয়বস্তু থাকা উচিত। তাতে মজা কি।
এখন দেখা যাক কিভাবে আপনি একটি কলাম বাছাই করতে পারেন এবং সেটিকে প্রিন্ট করতে পারেন। নিম্নলিখিত কমান্ডটি চালান:
# awk {‘print $1’} test.txt
এখন আমরা awk কে টেক্সট ফাইলের প্রথম কলামটি প্রিন্ট করতে বলছি। এটি স্বয়ংক্রিয়ভাবে বের করবে যে ফাইলটি একটি ট্যাব আলাদা করা হয়েছে এবং বিষয়বস্তুর প্রথম কলামটি প্রিন্ট করবে। আপনার আউটপুটে এরকম কিছু দেখতে হবে:
—-total-cpu-usage—-
usr
5
13
8
0
1
1
1
0
1
1
আপনি আপনার পছন্দের যেকোনো কলামের জন্য একই কাজ করতে পারেন। আপনি যদি awk প্রিন্ট করতে চান তবে উপরের তৃতীয় কলাম পরিবর্তন কমান্ডটি দেখানো হয়েছে:
# awk {‘print $3’} test.txt
আপনি awk প্রিন্ট একাধিক কলাম থাকতে পারে। তাই আপনি যদি প্রথম, তৃতীয় এবং সপ্তম কলাম প্রিন্ট করতে চান তাহলে কমা দ্বারা আলাদা করা কমান্ডে যোগ করুন।
# awk {‘প্রিন্ট $1, $3, $7′} test.txt
আপনার জন্য কৌশলটি করবে:
—-total-cpu-usage—- -net/total-
usr idl read
5 93 154k
13 87 0
8 92 0
0 99 0
1 97 0
1 98 0
1 99 0
0 99 0
1 99 0
1 100 0
আপনার যদি /etc/password ফাইলের মতো একটি কৌশলী ফাইল থাকে যেখানে ডেটা স্পেস বা ট্যাবগুলির পরিবর্তে কোলন দ্বারা পৃথক করা হয়, awk স্বয়ংক্রিয়ভাবে সেটিকে তুলে নেয় না। এই ধরনের ক্ষেত্রে আপনি সঠিক বিভাজক দিয়ে awk খাওয়াতে পারেন। ফাইলের দ্বিতীয় কলাম প্রিন্ট করতে এইরকম একটি কমান্ড ব্যবহার করুন:
# awk -F':’ {‘প্রিন্ট $1’} /etc/passwd
এই কমান্ডটি আপনাকে আপনার সিস্টেমের সমস্ত ব্যবহারকারীর ব্যবহারকারীর নামের একটি আউটপুট দেবে:
আপেল
আম
কলা
তরমুজ
কিউই
কমলা
আপনি অন্য কোন ধরনের বিভাজকগুলির সাথে একই কাজ করতে পারেন। আপনি আপনার লগ ফাইল পার্স করতে awk ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি আপনার ওয়েব সার্ভারে অ্যাক্সেস করা সমস্ত IP ঠিকানা এবং সম্পর্কিত ওয়েব URL দেখতে চান তবে আপনি এই তথ্য পেতে আপনার ওয়েব সার্ভারের অ্যাক্সেস লগ পার্স করতে awk ব্যবহার করতে পারেন। নিম্নলিখিত কমান্ড ব্যবহার করুন:
# awk '$9 ==200 { প্রিন্ট $1, $7}' অ্যাক্সেস. লগ
199.63.142.250 /2008/10/my-5-favourite-hangouts/
220.180.94.221 /2009/02/querious-a-mysql-client-for-the-mac/
67.194.194. 2009/05/
173.234.43.110 /2009/01/bicycle-rental/
173.234.38.110 /wp-comments-post.php
এইভাবে পার্সিং ব্যবহার করে আপনি বুঝতে পারবেন যে কেউ আপনার ওয়েবসাইটটি অনেক বেশি পরিদর্শন করছে, কারণ তারা তথ্য চুরি করতে পারে। আপনি এই তথ্য বাছাই করতে পারেন. বলুন আপনি জানতে চেয়েছিলেন কতবার একটি নির্দিষ্ট আইপি ঠিকানা আপনার ওয়েবসাইট পরিদর্শন করেছে
# awk '$9 ==200 { প্রিন্ট $1}' access.log | সাজান | uniq -c | সাজান -nr
46 122.248.161.1
35 122.248.161.2
26 65.202.21.10
24 67.195.111.46
19 144.36.161.219/
1914.36.21815