অনুশীলন

এ পর্যায়ে আমরা এই অধ্যায়ে জানা কমান্ডগুলো একটু ব্যবহার করে দেখবো। কিন্তু আমরা চাইনা কম্পিউটারের অন্যসব তথ্য বা ফাইল ক্ষতিগ্রস্থ করতে। তাই প্রথমে হোম ডিরেক্টরিতে playground নামে একটি ডিরেক্টরি করে নিই:

me@howtocode-pc:~$ cd ~
me@howtocode-pc:~$ mkdir playground

প্রথমে cd ~ কমান্ড দিয়ে আমরা নিশ্চিত হয়ে নিলাম আমরা হোম ডিরেক্টরিতেই আছি এবং তারপর mkdir playground কমান্ড দিয়ে আমরা playground নামে একটি ডিরেক্টরি বা ফোল্ডার তৈরি করলাম। আসুন, আমরা এবার playground ডিরেক্টরিতে ঢুকি এবং dir1 ও dir2 নামে দুটো ডিরেক্টরি তৈরি করি:

me@howtocode-pc:~$ cd playground/
me@howtocode-pc:~/playground$ mkdir dir1 dir2

লক্ষ্য করুন, আমরা একটি কমান্ডেই ডিরেক্টরিদুটো তৈরি করেছি।

এবার কিছু তথ্য বা ফাইল আনা যাক। আমরা /etc ডিরেক্টরি থেকে passwd ফাইলটি বর্তমান ডিরেক্টরিতে কপি করে আনি:

me@howtocode-pc:~/playground$ cp /etc/passwd .

আমরা cp কমান্ডটির দুটি আর্গুমেন্ট দিয়েছি। প্রথমে সোর্স আইটেম হিসেবে /etc/passwd অর্থাৎ রুট ডিরেক্টরিতে যে etc ডিরেক্টরি তার passwd ফাইলটি এবং শেষে ডেস্টিনেশন হিসেবে '.' চিহ্ন যা দিয়ে বর্তমান ডিরেক্টরি বুঝায়। এবার **ls -l দিয়ে বর্তমান ডিরেক্টরিতে কি কি আছে বিস্তারিত দেখে নেয়া যাক:

me@howtocode-pc:~/playground$ ls -l
total 12
drwxrwxr-x 2 me me 4096 Sep  3 12:39 dir1
drwxrwxr-x 2 me me 4096 Sep  3 12:39 dir2
-rw-r--r-- 1 me me 2095 Sep  3 12:44 passwd

এবার আসুন, cp কমান্ডের -v অপশনটি(verbose) ব্যবহার করে দেখি:

me@howtocode-pc:~/playground$ cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'

এবার কিন্তু কোন ফাইল কোথায় কপি করছে তা আমাদের জানিয়েছে। এবার -i অপশন(interactive) ব্যবহার করে দেখি:

me@howtocode-pc:~/playground$ cp -i /etc/passwd .
cp: overwrite `./passwd'?

যেহেতু আমাদের এখানে passwd নামে একটি ফাইল আগে থেকেই ছিল, -i অপশন ব্যবহারের ফলে আমাদের কাছে অনুমতি চাইছে ফাইলটি ওভাররাইড করা হবে কিনা। আমরা 'y' চাপলে ওভাররাইড করবে আর অন্য যেকোনোকিছু চাপলে ওভাররাইড করবে না।

এবার আমরা mv কমান্ডের মাধ্যমে passwd ফাইলটির নাম পরিবর্তন করে fun নাম দিই:

me@howtocode-pc:~/playground$ mv passwd fun

আসুন এবার fun নামের ফাইলটিকে সবগুলো ডিরেক্টরিতে মুভ করে আবার আগের জায়গায় ফেরত আনি। প্রথমে মুভ করি dir1 ডিরেক্টরিতে:

me@howtocode-pc:~/playground$ mv fun dir1

এবার dir1 ডিরেক্টরি থেকে fun ফাইলটি dir2 ডিরেক্টরিতে মুভ করি:

me@howtocode-pc:~/playground$ mv dir1/fun dir2

এবার dir2 থেকে বর্তমান ডিরেক্টরি অর্থাৎ ফাইলটির প্রাথমিক অবস্থানে মুভ করি:

me@howtocode-pc:~/playground$ mv dir2/fun .

এবার fun ফাইলটির একটি করে হার্ডলিঙ্ক তৈরী করা যাক বর্তমান ডিরেক্টরি ও dir1 ও dir2 ডিরেক্টরিতে:

me@howtocode-pc:~/playground$ ln fun fun-hard
me@howtocode-pc:~/playground$ ln fun dir1/fun-hard
me@howtocode-pc:~/playground$ ln fun dir2/fun-hard

এবার ls -l দিয়ে আমাদের playground এর বর্তমান অবস্থা জেনে নেয়া যাক:

me@howtocode-pc:~/playground$ ls -l
total 16
drwxrwxr-x 2 me me 4096 Sep  3 13:15 dir1
drwxrwxr-x 2 me me 4096 Sep  3 13:15 dir2
-rw-r--r-- 4 me me 2095 Sep  3 12:44 fun
-rw-r--r-- 4 me me 2095 Sep  3 12:44 fun-hard

লক্ষ্য করুন, ২য় কলামে fun ও fun-hard উভয়ের একই সংখ্যা অর্থাৎ 4 আছে। যার অর্থ হচ্ছে ওই ফাইলটির মোট চারটি হার্ডলিঙ্ক আছে। তাছাড়া ফাইলসাইজের জায়গায় উভয়ের সাইজ একই। তাহলে উভয়ই কি একই ফাইল? নাও হতে পারে। এটা বের করতে আরো গভীরে যেতে হবে।

যখন হারডলিঙ্কের কথা ভাবছি তখন কল্পনা করুন যে একটা ফাইলের দুটো অংশ হয়। হার্ডডিস্কে ব্লকের পর ব্লক তথ্য সাজিয়ে তথ্যের অংশ যাকে ইনোড(inode) বলে। এবং একটি নামের অংশ যা ওই ইনোডের সাথে আবদ্ধ। আমরা যখন হার্ডলিঙ্কিং করি তখন আসলে ওই ফাইলের ইনোডের জন্য আরো একটি নতুন নাম দিই। অর্থাৎ দুটি ফাইলের ইনোড একই হলে ফাইল দুটি আসলে একটিই ফাইল।

ইনোড নম্বর দেখতে ls -l এর সাথে -i অপশনটি যুক্ত করতে হয়। সংক্ষেপে ls -li। আসুন ব্যবহার করে দেখি:

me@howtocode-pc:~/playground$ ls -li
total 16
811034 drwxrwxr-x 2 me me 4096 Sep  3 13:15 dir1
811035 drwxrwxr-x 2 me me 4096 Sep  3 13:15 dir2
794647 -rw-r--r-- 4 me me 2095 Sep  3 12:44 fun
794647 -rw-r--r-- 4 me me 2095 Sep  3 12:44 fun-hard

এখানে প্রথম কলামে ইনোড নম্বর আছে । লক্ষ্য করুন fun এবং fun-hard উভয়ের ইনোড নম্বর একই। অর্থাৎ তারা একই ফাইল।

এবার সিমবোলিক লিঙ্ক তৈরি করা যাক। হার্ডলিঙ্কের মতই বর্তমান ডিরেক্টরিতে একটা এবং dir1 ও dir2তে একটা করে:

me@howtocode-pc:~/playground$ ln -s fun fun-sym
me@howtocode-pc:~/playground$ ln -s ../fun dir1/fun-sym
me@howtocode-pc:~/playground$ ln -s ../fun dir2/fun-sym

প্রথম কমান্ডটি হার্ডলিঙ্ক তৈরি করার মতই শুধু -s অপশনটি যুক্ত করা হয়েছে সিমবোলিক লিঙ্ক তৈরি করতে। কিন্তু দ্বিতীয় ও তৃতীয় কমান্ডে fun এর জায়গায় ../fun কেন? কারন dir1 বা dir2 এর সাপেক্ষে ওটাই fun ফাইলটির অবস্থান। অর্থাৎ, dir1 বা dir2 এর সাপেক্ষে fun এর রিলেটিভ পাথ ../fun

আমরা fun ফাইলটির এ্যাবসলিউট পাথ ব্যবহার করেও সিমবোলিক লিঙ্ক তৈরি করতে পারি:

me@howtocode-pc:~/playground$ ln -s /home/me/playground/fun dir1/fun-sym

আমরা চাইলে dir1 এর সিমবোলিক লিঙ্ক তৈরি করতে পারি:

me@howtocode-pc:~/playground$ ln -s dir1 dir1-sym

এবার কিছু ডিলিট করা বা মুছে ফেলা যাক। আমরা fun-hard নামের হার্ডলিঙ্কটি মুছে ফেলি প্রথমে:

me@howtocode-pc:~/playground$ rm fun-hard

এবার ls -l কমান্ড দিয়ে দেখি মুছে গেছে কিনা:

me@howtocode-pc:~/playground$ ls -l
total 12
drwxrwxr-x 2 me me 4096 Sep  3 13:55 dir1
lrwxrwxrwx 1 me me    4 Sep  3 14:07 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 Sep  3 13:56 dir2
-rw-r--r-- 3 me me 2095 Sep  3 12:44 fun
lrwxrwxrwx 1 me me    3 Sep  3 13:54 fun-sym -> fun

এখানে fun-hard ফাইলটি নেই, অর্থাৎ সেটি মুছে গেছে।

এবার -i অর্থাৎ ইন্টারএ্যাকটিভ অপশনসহ fun ফাইলটি মুছে ফেলার চেষ্টা করি:

me@howtocode-pc:~/playground$ rm -i fun
rm: remove regular file ‘fun’?

এবার fun ফাইলটি মোছার আগে অনুমতি চাইছে। আমরা y চেপে এন্টার দিলে ফাইলটি মুছে গেলো। এবার ls -l দিয়ে দেখি:

me@howtocode-pc:~/playground$ ls -l
total 8
drwxrwxr-x 2 me me 4096 Sep  3 13:55 dir1
lrwxrwxrwx 1 me me    4 Sep  3 14:07 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 Sep  3 13:56 dir2
lrwxrwxrwx 1 me me    3 Sep  3 13:54 fun-sym -> fun

fun ফাইলটি নেই। এবং হয়ত লক্ষ্য করেছেন আপনার টার্মিনালে fun-sym -> fun লাল অক্ষরে লেখা। যার অর্থ ওই সিমবোলিকলিঙ্কটি ভেঙে গেছে বা ব্রোকেন। মানে লিঙ্কটি আর কাজ করবে না। এবার আমরা সিমবোলিক লিঙ্কগুলো মুছে ফেলি:

me@howtocode-pc:~/playground$ rm dir1-sym fun-sym

এবার আমরা হোম ডিরেক্টরিতে যাই এবং playground ডিরেক্টরিটিকেই মুছে ফেলি:

me@howtocode-pc:~/playground$ cd ~
me@howtocode-pc:~/playground$ rm -r playground

লক্ষ্য করুন, playground ফোল্ডারের মধ্যে তখনও কিছু কন্টেন্ট ছিল তাই মুছে ফেলতে আমাদের -r অপশনটি ব্যবহার করতে হয়েছে।

Last updated