লিনাক্স এর কনসোল বা টার্মিনাল এ ফাইল কিভাবে খুজে পাবো?

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

দেখাবো। এখানে মুলত আমি ব্যাবহার করেছি উবুন্টু, কিন্তু কমান্ড গুলো প্রায় সকল সিস্টেম এই কাজ করার কথা।

লিনাক্স-কনসোল-এ-ফাইল-খোজা

দুটা কমান্ড দিয়ে ফাইল খুজে পাওয়া যায়।

১. locate
২. find

“locate” কমান্ড টি একটি ডাটাবেইজ এর আউটপুট দেখায়। মানে লিনাক্স সিস্টেম এ যত ফাইল থাকে তার একটা ইনডেক্স বা ডাটাবেইজ তৈরি হয় এবং সেখানে “যে ফাইল টি খুজতে চাওয়া হচ্ছে” তা খুজে। তাই এটি অনেক সময় ব্যাকডেটেড রেজাল্ট দিতে পারে, ওই ডাটাবেইজ আপডেট হতে হয়। আমি পরবর্তিতে আরেকটি পোস্ট এ এই ব্যাপারে আমি বিস্তারিত লিখার চেষ্টা করবো। “locate” কমান্ড টি সুলনামুলক ফাস্টার।

আর  “find” কমান্ড “যে ফাইল টি খুজতে চাওয়া হচ্ছে” তা রিকার্সিভলি প্রত্যেকটি ফাইল এবং ফোল্ডার এ খুজে এবং মেলায় এক ই কি না। এটি ধীর কিন্তু চৌকশ।

আমি নিচে দুটো কমান্ড ই ব্যাখ্যা করছি।

“locate” কমান্ড:

ধরি, আমার কাছে দুটি ফাইল আছে।

fahad@F:~/Personal/junk$ pwd
 /home/fahad/Personal/junk
 fahad@F:~/Personal/junk$ ls
 NewRain.tXT rAin.Txt

আমি যদি অন্য লোকেশন এ যাই এবং ঠিক ওই ফাইল টি খুজে পেতে চাই তাহলে কি লিখবো তা নিচে দেখাচ্ছি।

fahad@F:~$ pwd
 /home/fahad
 fahad@F:~$ locate rAin.Txt
 /home/fahad/Personal/junk/rAin.Txt

আমি যদি পুরো ফাইল এর কেইস সেনসিটিভিটি চিন্ডা করি একরকম করে লিখি তবে আমাকে ফাইল টি এভাবে দেখাচ্ছে। এমনকি আমি পুরোনাম টি না লিখলেও আমাকে ফাইল টির লোকেশন দেখাবে।

fahad@F:~$ locate rAin
 /home/fahad/Personal/junk/rAin.Txt

কিন্তু আমি যদি “rain.txt” লিখি?

fahad@F:~$ locate rain.txt
 fahad@F:~$

তাহলে আউটপুট কিছুই আসবেনা। কারন নরমালি “locate” কমান্ডটি কেইস সেনসিটিভ। এটাকে কেইস ইনসেনসিটিভ করে সার্চ করাতে হবে। আমাকে “-i” অপশন টি ব্যবহার করতে হবে।

fahad@F:~$ locate -i rain.txt
 /home/fahad/Personal/junk/rAin.Txt

আমি যদি জানতে চাই একটি নির্দিষ্ট ফাইল কত গুলা বিস্তৃত আছে তাহলে বিল্ট ইন কাউন্ট অপশন ( -c ) ব্যবহার করতে পারবো।

fahad@F:~$ locate -i -c rain.txt
 1

যদিও আমি চাইলে  “wc” কমান্ড টি ব্যবহার কতে পারতাম।

আরেকটি মজার জিনিশ দেখাই। আমার ফোল্ডার টি তে যদি আরো একটি ফাইল থাকে…

fahad@F:~/Personal/junk$ ls
 myBrain.txT NewRain.tXT rAin.Txt

আমি খুজতে চাই শুধু “rAin.Txt”…

fahad@F:~/Personal/junk$ locate -i 'rain.txt'
 /home/fahad/Personal/junk/NewRain.tXT
 /home/fahad/Personal/junk/myBrain.txT
 /home/fahad/Personal/junk/rAin.Txt

এটি সব গুলো ফাইল ই দেখালো যা শেষ হয় “rain.txt” দিয়ে। আমি এক্সাক্টলি ওই নাম দিয়েই খুজে চাইলে তাতে পেতাম।

fahad@F$ locate 'rAin.Txt'
 /home/fahad/Personal/junk/rAin.Txt

এমন যদি হয় আমার আরো ফাইল আছে এক্যাক্টলি ওই নাম সহ?

fahad@F:~/Personal/junk$ ls
 myBrain.txT NewRain.tXT OnerAin.Txt rAin.Txt ThreerAin.Txt TworAin.Txt
fahad@F:~/Personal/junk$ locate 'rAin.Txt'
 /home/fahad/Personal/junk/OnerAin.Txt
 /home/fahad/Personal/junk/ThreerAin.Txt
 /home/fahad/Personal/junk/TworAin.Txt
 /home/fahad/Personal/junk/rAin.Txt

আমি কিভাবে শুধু ওই ফাইল টি ই পাবো? আমি ব্যবহার করবো “-b” অপশন টি।

fahad@F:~/Personal/junk$ locate -b '\rAin.Txt'
 /home/fahad/Personal/junk/rAin.Txt

“find” কমান্ড:

ব্যাসিক সিনট্যাক্স হলো…

$ find /path/to/dir -name "filename"

পুরো লিনাক্স সিস্টেম এ যদি খুজতে চাই তাহলে…

$ find / -name "rAin.Txt"

এটি অবস্য ততটা ইফেক্টিভ না। কারন পুরো সিস্টেম এ খুজতে হলে এটি সময় সাপেক্ষ এবং “sudo” এ্যাকসেস লাগবে।

আমরা চাইলে শুধু “/home/$USER/” এর ভেতরে খুজতে পারি।

$ find /home/$USER/ -name "rAin.Txt"

আমরা চাইলে শুধু ফাইল অথবা শুধু ডিরেক্টরি ও খুজতে পারি।

fahad@F:~/Personal/junk$ ls
 OnerAin.Txt rAin rAin.Txt ThreerAin.Txt TworAin.Txt
fahad@F:~/Personal/junk$ find /home/fahad/ -name "rAin"
 /home/fahad/Personal/junk/rAin
fahad@F:~/Personal/junk$ find /home/fahad/ -name "rAin*"
 /home/fahad/Personal/junk/rAin.Txt
 /home/fahad/Personal/junk/rAin
fahad@F:~/Personal/junk$ find /home/fahad/ -type d -name "rAin*"
 /home/fahad/Personal/junk/rAin
fahad@F:~/Personal/junk$ find /home/fahad/ -type f -name "rAin*"
 /home/fahad/Personal/junk/rAin.Txt

“-type” এর পর “f” ফাইল এর জন্য অথবা “d” ফোল্ডার বা ডিরেক্টরি এর জন্য।

আমরা চাইলে সব ফাইল খুজতে পারি শুধু স্পেসিফিক এক্সটেনশন ছাড়া।

fahad@F:~/Personal/junk$ ls
OnerAin.Txt rAin rAin.json rAin.png rAin.swf rAin.Txt ThreerAin.Txt TworAin.Txt

fahad@F:~/Personal/junk$ find ./ -type f -name "rAin*"
./rAin.Txt
./rAin.json
./rAin.swf
./rAin.png

fahad@F:~/Personal/junk$ find ./ -type f -name "rAin*" ! -name "rAin.json"
./rAin.Txt
./rAin.swf
./rAin.png

কেইস ইনসেনসিটিভ ভাবে খুজতে চাইলে…

fahad@F:~/Personal/junk$ find ./ -type f -name "rain*"
fahad@F:~/Personal/junk$ find ./ -type f -iname "rain*"
./rAin.Txt
./rAin.json
./rAin.swf
./rAin.png

পাবলিক এ্যাকসেস এর ফাইল খুজতে চাইলে…

$ find ./ -type f -perm 0777 -print

সব ফাইল শুধু পাবলিক এ্যাকসেস এর ফাইল ছাড়া…

$ find / -type f ! -perm 777

Read Only ফাইল খুজতে চাইলে…

$ find / -perm /u=r

empty ফাইল খুজতে চাইলে…

$ find /tmp -type f -empty

empty ডিরেক্টরি খুজতে চাইলে…

$ find /tmp -type d -empty

ইউজার স্পেসিফিক ফাইল খুজতে চাইলে…

$ find / -user fahad -name rain.txt

গ্রুপ স্পেসিফিক ফাইল খুজতে চাইলে…

$ find /home -group lsa

লাস্ট মডিফাই, এ্যাকসেস এবং চেঞ্জ হওয়া ফাইল ও খুজতে পারি…

$ find / -mmin 50 # ৫০ মিনিট আগে মডিফাই হয়েছে।
$ find / -mtime 50 # ৫০ দিন আগে মডিফাই হয়েছে।
$ find / -amin 50 # ৫০ মিনিট আগে শেষ এ্যাকসেস হয়েছে।
$ find / -atime 50 # ৫০ দিন আগে শেষ এ্যাকসেস হয়েছে।
$ find / -cmin 50 # ৫০ মিনিট আগে শেষ স্ট্যাটাস পরিবর্তন হয়েছে।
$ find / -ctime 50 # ৫০ দিন আগে শেষ স্ট্যাটাস পরিবর্তন হয়েছে।

ফাইল সাইজ অনুসারে খুজতে চাইলে

$ find / -size 50M # ৫০ মেগাবাইট এর ফাইল
$ find / -size -50M# ৫০ মেগাবাইট এর ছোট ফাইল
$ find / -size +50M -size -100M # ৫০ থেকে ১০০ মেগাবাইট এর মধ্যের ফাইল

আমি আশা করি কিছুটা প্রয়োজনীয় কমান্ড গুলো তুলে ধরতে পেরেছি। এই পোস্ট টি আরো আপডেট হবে।

ধন্যবাদ।