> For the complete documentation index, see [llms.txt](https://sh.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sh.howtocode.dev/1.0.0.part1intro/1.1.0.basic/1.1.4.ls.md).

# আরো একটু ls

ls সম্ভবত সবচেয়ে বেশি ব্যবহৃত কমান্ড। ফাইলসিস্টেমে এটিই আপনার চোখের কাজ করে। আমরা আগে ls এর সাধারন ব্যবহার দেখেছি এবার একটু গভীরে যাবো। বর্তমানে আমরা যে ডিরেক্টরিতে আছি তার কন্টেন্ট এর লিস্ট শুধু `ls` কমান্ড দিয়েই দেখতে পারি:

```
me@howtocode-pc:~$ ls
Desktop   Documents   Music   Pictures   Public   Templates   Videos
```

কিন্তু এখনি হয়ত আমার প্রয়োজন ছিল অন্যকোনো ডিরেক্টরি, মনে করেন **/usr/** ডিরেক্টরির কন্টেন্ট জানা। আমরা কি **cd** কমান্ডের মাধ্যমে ঐ ডিরেক্টরিতে গিয়ে তারপর ফাইলগুলোর লিস্ট করবো **ls** দিয়ে? তার প্রয়োজন হবে না। আমরা আমাদের বর্তমান ডিরেক্টরিতে বসেই **/usr/** ডিরেক্টরির কন্টেন্ট জানতে পারবো:

```
me@howtocode-pc:~$ ls /usr/
bin  games  include  lib  lib32  local  sbin  share  src
```

তারমানে যেকোনো ডিরেক্টরির কন্টেন্ট জানতে **ls** এর আর্গুমেন্ট হিসেবে সেই ডিরেক্টরির নাম দিলেই হবে। এমনকি আমরা চাইলে একটি না,একাধিক ডিরেক্টরির কন্টেন্ট এভাবে দেখতে পারি **ls** এর পর স্পেস দিয়ে আলাদা করে ডিরেক্টরিগুলোর নাম লিখে:

```
me@howtocode-pc:~$ ls ~ /usr/
/home/me:
Desktop   Documents   Music   Pictures   Public   Templates   Videos

/usr/:
bin  games  include  lib  lib32  local  sbin  share  src
```

আমরা **ls** এর কিছু অপশন ব্যবহার করে তার কার্যকারিতা বাড়াতে পারি। আমরা কন্টেন্টের আরো বিস্তারিত তথ্য জানতে পারি **ls** এর সাথে **-l** অপশনটি ব্যবহার করে। মনে করুন **/usr/** ডিরেক্টরির কন্টেন্ট সম্পর্কে আমরা ডিটেইল জানতে চাই। তাহলে লিখবো:

```
me@howtocode-pc:~$ ls -l /usr/
total 172
drwxr-xr-x   2 root root 69632 Aug 29 10:12 bin
drwxr-xr-x   2 root root  4096 Jul  9 15:13 games
drwxr-xr-x  68 root root 20480 Aug 22 14:32 include
drwxr-xr-x 187 root root 36864 Aug 29 10:01 lib
drwxr-xr-x   3 root root  4096 Jul 27 19:37 lib32
drwxr-xr-x  10 root root  4096 Apr 17 02:45 local
drwxr-xr-x   2 root root 12288 Aug 29 10:01 sbin
drwxr-xr-x 333 root root 12288 Aug 29 10:01 share
drwxr-xr-x  10 root root  4096 Aug 28 19:53 src
```

আবার আমরা যদি চাই ফাইল মোডিফিকেশনের ডেট অনুযায়ী এই লিস্টটি সাজানো‌ হবে তাহলে **-t** অপশনটি ব্যবহার করবো। আগেই জেনেছি একাধিক অপশন একসাথে লেখা যায়। অর্থাৎ **-l** ও **-t** কে একসাথে **-lt** লিখবো:

```
me@howtocode-pc:~$ ls -lt /usr/
total 172
drwxr-xr-x   2 root root 69632 Aug 29 10:12 bin
drwxr-xr-x 187 root root 36864 Aug 29 10:01 lib
drwxr-xr-x   2 root root 12288 Aug 29 10:01 sbin
drwxr-xr-x 333 root root 12288 Aug 29 10:01 share
drwxr-xr-x  10 root root  4096 Aug 28 19:53 src
drwxr-xr-x  68 root root 20480 Aug 22 14:32 include
drwxr-xr-x   3 root root  4096 Jul 27 19:37 lib32
drwxr-xr-x   2 root root  4096 Jul  9 15:13 games
drwxr-xr-x  10 root root  4096 Apr 17 02:45 local
```

লক্ষ্য করুন,ফাইলগুলো তারিখ ও সময় অনুযায়ী সাজানো। এখানে সর্বশেষ মোডিফাইড ফাইল বা ডিরেক্টরি সবার প্রথমে এবং এভাবেই সাজানো। আমরা যদি চাই এটা এর বীপরীতক্রমে সাজাতে অর্থাৎ সবচেয়ে অতীতে মোডিফাইড ফাইল বা ডিরেক্টরি সবার উপরে থাকবে তাহলে **--reverse** লং অপশনটি(long option) ব্যবহার করতে পারি:

```
me@howtocode-pc:~$ ls -lt --reverse /usr/
total 172
drwxr-xr-x  10 root root  4096 Apr 17 02:45 local
drwxr-xr-x   2 root root  4096 Jul  9 15:13 games
drwxr-xr-x   3 root root  4096 Jul 27 19:37 lib32
drwxr-xr-x  68 root root 20480 Aug 22 14:32 include
drwxr-xr-x  10 root root  4096 Aug 28 19:53 src
drwxr-xr-x 333 root root 12288 Aug 29 10:01 share
drwxr-xr-x   2 root root 12288 Aug 29 10:01 sbin
drwxr-xr-x 187 root root 36864 Aug 29 10:01 lib
drwxr-xr-x   2 root root 69632 Aug 29 10:12 bin
```

এবার আসুন, **ls** এর কিছু অপশন জেনে নেয়া যাক:

| অপশন | লং অপশন          | বর্ননা                                                                                                                                                                     |
| ---- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| -a   | --all            | লিস্টে সকল ফাইল ও ডিরেক্টরি দেখাবে। এমনকি '.' দিয়ে শুরু হওয়াগুলোও যেগুলো সাধারনত লুকোনো থাকে।                                                                              |
| -A   | --almost-all     | এখানেও সকল ডিরেক্টটরি ও ফাইল দেখাবে কিন্তু বর্তমান ডিরেক্টরির চিহ্ন './' এবং প্যারেন্ট ডিরেক্টরির চিহ্ন '../' দেখাবে না।                                                   |
| -d   | --directory      | এই অপশন ব্যবহার করলে কোনো ডিরেক্টরির কন্টেন্ট দেখাবে না বরং সেই ডিরেক্টরিকে লিস্ট আইটেম হিসেবে দেখাবে। -l অপশনের সাথে ব্যবহার করে ওই ডিরেক্টরি সম্পর্কিত তথ্য জানা যায়।    |
| -F   | --classify       | এই অপশন ব্যবহার করলে লিস্টের ডিরেক্টরিগুলোর পিছনে একটি অতিরিক্ত '/' চিহ্ন ব্যবহার করবে যেন তাদের ফাইল থেকে আলাদাভাবে চিহ্নিত করা যায়।                                      |
| -h   | --human-readable | -l অপশন ব্যবহার করলে যে ডিটেইল লিস্ট আসে তাতে ফাইলের সাইজ বাইটে দেখায়। যা মানুষের পড়ার জন্য বেশ ঝামেলার। এই অপশনের মাধ্যমে সাইজ এমনভাবে দেখানো হয় যেভাবে আমরা পড়ে অভ্যস্ত। |
| -l   |                  | বহুল ব্যবহৃত ডিটেইলসহ লং ফরম্যাট।                                                                                                                                          |
| -r   | --reverse        | বীপরীতক্রমে লিস্ট দেখাবে।                                                                                                                                                  |
| -s   |                  | ফাইলের সাইজ অনুযায়ী সাজাবে।                                                                                                                                                |
| -t   |                  | মোডিফিকেশন এর সময় অনুযায়ী সাজাবে।                                                                                                                                          |

## লং অপশনের কাটাছেঁড়া

লং অপশনের ডিটেইল লিস্ট থেকে দেখানো একটা লাইন আমরা বিবেচনায় নিই:

```
-rwxrwxrwx  1 me root         2498111 Jul 10 11:31 01. Blowin' In The Wind.ogg
```

এইখানে আমরা এই অংশগুলো দেখতে পাই:

* **ফাইল পারমিশন(File permission)**: প্রথমে যে **-rwxrwxrwx** অংশটা দেখাচ্ছে ওটা ফাইল পারমিশন নির্দেশ করে। প্রথমে **-** থাকলে সেটা সাধারন ফাইল, **d** থাকলে ডিরেক্টরি। তারপরের অংশগুলো নির্ধারন করে কে বা কারা ফাইলে কোনপর্যায়ের এক্সেস পাবে। আমরা পরে এইনিয়ে বিস্তারিত আলোচনা করবো।
* **হার্ড লিঙ্ক সংখ্যা**: এখানে '1'। ফাইলটির কতগুলো হার্ড লিঙ্ক আছে। লিঙ্ক নিয়ে আমরা পরে বিস্তারিত জানবো।
* **ফাইলটির মালিকের ইউজারনেম**: এখানে **me**। যে এই ফাইলটির মালিক বা ক্রিয়েটর তার ইউজারনেম এখানে থাকবে।
* **ফাইলটির মালিক গ্রুপের নাম**: ফাইলটি যে গ্রুপের মালিকানায়, তার নাম। এখানে **root**
* **ফাইলটির আয়তন বা সাইজ**: এখানে বাইটের এককে ফাইল সাইজ দেখানো হয়। আমাদের এই ফাইলটির সাইজ 32059 বাইট।
* **ফাইল মোডিফিকেশন টাইমস্ট্যাম্প**: ফাইলটি শেষ কবে এবং কখন মোডিফাই করা হয়েছে তাই এখানে জানানো হয়। আমাদের ফাইলটির ক্ষেত্রে যা ছিল **Jul 10 11:31**।
* **ফাইলের নাম**: সবশেষে ফাইলের নাম। এক্ষেত্রে **01. Blowin' In The Wind.ogg**।
