> 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.6.0.permission/1.6.4.masking.md).

# ফাইল পারমিশন মাস্কিং

মাস্ক বা মুখোশের সাথে আমরা সবাই পরিচিত। মুখোশের মূল কাজটা কি? মূল কাজ হলো মুখ ঢেকে রাখা। সব মুখোশই মুখ ঢাকে। কোনোটা পুরোপুরি কোনোটা আংশিক। **umask** কমান্ডটি ফাইল পারমিশনের ক্ষেত্রে এরকম মাস্কের কাজ করে। এটি দিয়ে আপনি অকটাল পদ্ধতির একটা মাস্ক পরিয়ে দিতে পারেন ফাইলকে। একটা ফাইল তৈরী হওয়ার সময় ডিফল্টভাবে যে পারমিশন পায়, এই মাস্ক পরলে তার খানিকটা ঢাকা পরবে অর্থাৎ বাদ যাবে। মাস্কিং কিন্তু পুরোনো ফাইল বা ডিরেক্টরির জন্য না। কোনো মাস্ক সেট করলে তা এরপর তৈরী করা নতুন ফাইলগুলোর উপর কার্যকর হয়। একটি উদাহরণ দেখা যাক:

```
me@howtocode-pc:~$ umask
0002
me@howtocode-pc:~$ > foo.txt
me@howtocode-pc:~$ ls -l foo.txt
-rw-rw-r-- 1 me me 0 Oct  7 10:49 foo.txt
```

প্রথমে আমরা কোনো আর্গুমেন্ট ছাড়া **umask** কমান্ডটি দিয়েছি। এতে আমরা কোনো মাস্ক তৈরী করিনি, বরং আগে থেকে থাকা মাস্কটি দেখলাম। এবং সেই মাস্কের মান ছিল 0002। এরপর আমরা `> foo.txt` কমান্ড দিয়ে foo.txt নামে একটা ফাইল তৈরী করলাম এবং \`ls -l foo.txt দিয়ে এর পারমিশন দেখে নিলাম। এবার আমরা প্রথম পুরনো foo.txt ফাইলটি মুছে দেবো। তারপর 0000 মাস্ক সেট করবো বা বলতে পারি মাস্কিং বন্ধ করবো এবং নতুন করে foo.txt ফাইলটি তৈরী করে এর পারমিশন দেখবো:

```
me@howtocode-pc:~$ rm foo.txt
me@howtocode-pc:~$ umask 0000
me@howtocode-pc:~$ > foo.txt
me@howtocode-pc:~$ ls -l foo.txt
-rw-rw-rw- 1 me me 0 Oct  7 11:01 foo.txt
```

এবার আমরা দেখেছি প্রথমবার 0002 মাস্কের জন্য ওয়ার্ল্ডের জন্য রাইট পারমিশন বাদ গিয়েছিল। কিন্তু এবার মাস্কিং অফ করায় ডিফল্টভাবে সেটি আছে। আসুন দেখা যাক:

| ধাপ              |    বিস্তারিত    |
| ---------------- | :-------------: |
| **মূল ফাইল মোড** | --- rw- rw- rw- |
| **মাস্ক**        |  0   0   0   2  |
| **বাইনারি**      | 000 000 000 010 |
| **ফলাফল**        | --- rw- rw- r-- |

আমরা ফাইলমোডের প্রথম অংশটা অর্থাৎ প্রথম তিন অংক এখন আমলে আনবো না। পরের লেসনে সেটি নিয়ে কথা হবে। তারপরেই আমরা দেখছি ওনার ইউজার ও গ্রুপের এবং ওয়ার্ল্ড সবার জন্য ডিফল্ট পারমিশন rw-। এরপর আমরা 0002 মাস্ক ব্যবহার করেছি। এটি অকটাল নাম্বার। আমরা যদি এর প্রতিটি অংককে তিন অংকের বাইনারিতে রূপান্ত করি তাহলে 0 হবে 000 এবং 2 হবে 10। এভাবে আমরা পেয়েছি: 000 000 000 010। এবার হিসেবটা সোজা। ডিফল্ট ফাইলমোডে যার নীচে 1 থাকবে সেটি বাদ যাবে। এখানে ওয়ার্ল্ডের রাইট পারমিশনের নীচে এক ছিল ফলে এটি বাদ গিয়েছে। একইভাবে 0022 ব্যবহার করলে ওয়ার্ল্ডের সাথে গ্রুপেরও রাইট পারমিশন বাদ যাবে।

সাধারণত আপনার মাস্কিং পরিবর্তনের দরকার পরবে না। তবে কখনো কখনো উচ্চপর্যায়ের নিরাপত্তা নিশ্চিত করতে প্রয়োজন হতে পারে। আপনি আরো কয়েকটা মাস্কিং ভ্যালু নিয়ে টেস্ট করতে পারেন। সবশেষে আপনার ডিফল্ট মাস্কিং ভ্যালুতে(যেমন আমার ক্ষেত্রে 0002) ফিরে যেতে ভুলবেন না।
