Strawberry Group | Topic Five, Byte Part
T6, Byte Part ( 1 )
ACCESSING THE COMMAND LINE
- INTRODUCTION TO THE BASH SHELL
- SHELL BASICS
- LOGGING IN TO A LOCAL COMPUTER
- LOGGING IN OVER THE NETWORK
- LOGGING OUT
INTRODUCTION TO THE BASH SHELL
command line ?
কমান্ড লাইন হলো একটি টেক্সট-ভিত্তিক ইন্টারফেস, যার মাধ্যমে আপনি কম্পিউটার সিস্টেমে instruction দিতে পারেন।
- লিনাক্সে এই কমান্ড লাইন ব্যবহার করা যায় “Shell” নামক একটি প্রোগ্রামের মাধ্যমে।
- বিভিন্ন সময় বিভিন্ন ধরনের শেল তৈরি হয়েছে, এবং চাইলে প্রতিটি ব্যবহারকারীর জন্য আলাদা শেল কনফিগার করা সম্ভব।
- তবে বেশিরভাগ ব্যবহারকারী সাধারণত ডিফল্ট শেলটিই ব্যবহার করে থাকেন।
Default Shell – Bourne Again Shell (bash)
Red Hat Enterprise Linux-এ ব্যবহারকারীদের জন্য ডিফল্ট শেল হলো GNU Bourne-Again Shell বা সংক্ষেপে bash। এটি UNIX-এর জনপ্রিয় Bourne Shell (sh)-এর একটি উন্নত সংস্করণ। এটি UNIX-এর জনপ্রিয় Bourne Shell (sh)-এর একটি improved version.
Shell Prompt
যখন আপনি ইন্টারঅ্যাকটিভভাবে শেল ব্যবহার করেন, তখন শেল একটি লাইন দেখায় যেখানে আপনি কমান্ড টাইপ করতে পারেন — এটিই শেল প্রম্পট।
- একজন সাধারণ ব্যবহারকারী যখন শেল চালায়, তখন প্রম্পটটি সাধারণত $ চিহ্নে শেষ হয়।
- example: [user@host ~]$
- যখন শেলটি superuser বা root হিসেবে চালানো হয়, তখন প্রম্পটের শেষে $ এর বদলে # চিহ্ন থাকে। এর মাধ্যমে বোঝা যায় যে আপনি এখন superuser বা root হিসেবে কাজ করছেন। এটি গুরুত্বপূর্ণ কারণ সুপারইউজার ভুল করলে পুরো সিস্টেমে সমস্যা হতে পারে:
- example: [root@host ~]#
bash ব্যবহার করে কমান্ড execute করা powerful হতে পারে। Bash shell scripting language প্রদান করে, যা কাজের automation support করে। অনেক জটিল বা সময়সাপেক্ষ কাজ Bash-এ কয়েকটি কমান্ডের মাধ্যমে সহজে সম্পন্ন করা যায়, যেখানে গ্রাফিক্যাল ইন্টারফেস ব্যবহার করলে বেশি সময় ও পরিশ্রম লাগতে পারে।
NOTE :
- bash অনেকটা Windows-এর cmd.exe-এর মতো, তবে bash-এর স্ক্রিপ্টিং অনেক বেশি উন্নত।
- এটি Windows-এর PowerShell-এর সঙ্গেও তুলনীয়। যারা Mac ব্যবহার করেন এবং Terminal চালান, তারা জেনে খুশি হবেন যে MacOS-এ bash ডিফল্ট শেল।
SHELL BASICS
shell prompt-এ দেওয়া প্রতিটি কমান্ড সাধারণত তিনটি অংশে বিভক্ত হয়:
command
to run
- কোন কাজটি run করতে চান
option
to adjust the behavior of the command
- কমান্ডের আচরণ কেমন হবে তা নির্ধারণ করে
argument
which are typically targets of the command
- যেটির উপর কমান্ডটি কাজ করবে
- কমান্ড বলতে বোঝায় সেই প্রোগ্রামের নাম যেটি চালানো হবে।
- কমান্ডের পরে একটি বা একাধিক অপশন দেওয়া যেতে পারে, যা কমান্ডের আচরণ বা কার্যপদ্ধতি পরিবর্তন করে।
- অপশন সাধারণত একটি বা দুটি ড্যাশ দিয়ে শুরু হয় (যেমন: -a বা –all), যেন এগুলোকে আর্গুমেন্ট থেকে আলাদা করে চেনা যায়।
- কমান্ডের পরে থাকা আর্গুমেন্ট বলতে সেই বস্তু বা টার্গেটকে বোঝায়, যার উপর কমান্ডটি কাজ করবে।
উদাহরণ:
usermod -L user01
এই কমান্ডে:
- usermod → এটি মূল কমান্ড, অর্থাৎ কোন প্রোগ্রাম চালানো হচ্ছে
- -L → এটি একটি অপশন, যা নির্দেশ দেয় যে ব্যবহারকারীর পাসওয়ার্ড লক করতে হবে
- user01 → এটি একটি আর্গুমেন্ট, অর্থাৎ যেই ব্যবহারকারীর উপর কমান্ডটি প্রয়োগ হবে এই কমান্ডটি চালালে user01 নামের ব্যবহারকারীর অ্যাকাউন্ট লক হয়ে যাবে, অর্থাৎ সে আর লগইন করতে পারবে না।
LOGGING IN TO A LOCAL COMPUTER
shell কে run করার জন্য প্রথমে কম্পিউটারে terminal-এর মাধ্যমে লগইন করতে হয়। Terminal হলো একটি টেক্সট-ভিত্তিক ইন্টারফেস, যা কম্পিউটার সিস্টেমে কমান্ড enter করাতে এবং আউটপুট print করতে ব্যবহৃত হয়।
টার্মিনালে লগইনের কয়েকটি way রয়েছে:
1.1 physical console
যদি কম্পিউটারে সরাসরি একটি কীবোর্ড ও ডিসপ্লে সংযুক্ত থাকে, তবে সেটিকে বলে Linux মেশিনের physical console.
virtual console
এই ফিজিক্যাল কনসোলে অনেকগুলো virtual console চালানো যায়। প্রতিটি ভার্চুয়াল কনসোলে আলাদা একটি টার্মিনাল চলে এবং প্রতিটিতে আলাদা আলাদা ভাবে লগইন সেশন শুরু করা যায়।
আমরা, Ctrl+Alt+F1 থেকে Ctrl+Alt+F6 press করলে বিভিন্ন ভার্চুয়াল কনসোলের মধ্যে সুইচ করতে পারব।
বেশিরভাগ কনসোলে টেক্সট বেইজড লগইন প্রম্পট থাকে। আপনি সঠিক ইউজারনেম ও পাসওয়ার্ড দিলে শেল প্রম্পট পাবেন।
1.1 graphical environment
graphical login and terminal on one of the virtual consoles.
কম্পিউটারটি virtual console-গুলোর একটিতে একটি গ্রাফিক্যাল লগইন প্রম্পট প্রদান করতে পারে।
এটি ব্যবহার করে আপনি গ্রাফিকাল এনভায়রনমেন্টে লগইন করতে পারেন। graphical environment-ও আপনি শেল চালাতে পারেন, কিন্তু এর জন্য আপনাকে সেখানে একটি terminal Application চালাতে হবে। এই টার্মিনাল সাধারণত একটি উইন্ডোর মধ্যে থাকে।
NOTE:
- অনেক সার্ভার অ্যাডমিনিস্ট্রেটর graphical environment চালু না রেখেই সার্ভার চালান। এর ফলে সার্ভারের কাজের জন্য প্রয়োজনীয় রিসোর্স নষ্ট হয় না।
2. Headless Server
হেডলেস সার্ভার হলো এমন এক ধরনের কম্পিউটার যাতে স্থায়ীভাবে কোনো কীবোর্ড বা মনিটর থাকে না।
ডেটা সেন্টারে এমন অনেক হেডলেস সার্ভার থাকে। এতে করে জায়গা ও খরচ কমে যায়। এই ধরনের সার্ভারে লগইনের জন্য ব্যবহার করা হয় সিরিয়াল কনসোল, যা সিরিয়াল পোর্ট এর মাধ্যমে নেটওয়ার্কড কনসোল সার্ভারে সংযুক্ত থাকে।
সাধারণত সিরিয়াল কনসোল ব্যবহার করা হয় তখন, যখন সার্ভারের নেটওয়ার্ক কার্ড কাজ করছে না বা ভুল কনফিগার হয়ে গেছে, এবং সাধারণ নেটওয়ার্কের মাধ্যমে লগইন সম্ভব নয়।
তবে বেশিরভাগ সময় এই সার্ভারগুলোতে রিমোট অ্যাক্সেস এর মাধ্যমেই কাজ করা হয়।
1.1.1 ধরুন আপনি কম্পিউটার চালু করলেন এবং Red Hat Enterprise Linux 8-এ, যদি GUI available থাকে।
step 1
সিস্টেম চালু হলো,
tty1 → GUI Login Screen
tty2 → Text Login Prompt
tty3 → Text Login Prompt
tty4 → Text Login Prompt
tty5 → Text Login Prompt
tty6 → Text Login Prompt
step 2
আপনি GUI-তে লগইন করলেন।
আপনার নাম Ruhan, Linux প্রথম খালি Console (tty2) খুঁজে পেল, তাই আপনার Desktop সেখানে চালু হলো।
tty1 → GUI Login Screen
tty2 → Ruhan’s Desktop
tty3 → Text Login Prompt
tty4 → Text Login Prompt
tty5 → Text Login Prompt
tty6 → Text Login Prompt
step 3
Ctrl+Alt+F3 press করলেন এবং টেক্সট মোডে লগইন করলেন।
tty1 → GUI Login Screen
tty2 → Ruhan’s Desktop
tty3 → Ruhan’s Text Session
tty4 → Text Login Prompt
tty5 → Text Login Prompt
tty6 → Text Login Prompt
এখন একই ব্যবহারকারীর দুটি সেশন চলছে:
tty2 → GUI Desktop
tty3 → Command Line
step 4
Switch User করলেন
এবার Karim নামে আরেকজন ব্যবহারকারী লগইন করল।
Linux দেখল:
- tty2 ব্যবহৃত
- tty3 ব্যবহৃত
তাই পরবর্তী খালি Console (tty4) ব্যবহার করল।
tty1 → GUI Login Screen
tty2 → Ruhan’s Desktop
tty3 → Ruhan’s Text Session
tty4 → Karim’s Desktop
tty5 → Text Login Prompt
tty6 → Text Login Prompt
Linux-এর কাছে tty1–tty6 অনেকটা বাড়ির আলাদা আলাদা রুমের মতো।
- tty1 = প্রবেশদ্বার (Login Screen)
- tty2 = Ruhan-এর Desktop
- tty3 = Ruhan-এর Terminal
- tty4 = Karim-এর Desktop
সবগুলো একই কম্পিউটারে একসাথে চলতে পারে, কিন্তু একে অপরের থেকে আলাদা থাকে। Red Hat Enterprise Linux 8-এ Virtual Console (TTY) হলো একাধিক আলাদা লগইন স্ক্রিন বা সেশন, যা একই কম্পিউটারে একসাথে চালানো যায়।
LOGGING IN OVER THE NETWORK
Linux ব্যবহারকারী এবং অ্যাডমিনদের প্রায়ই remote সিস্টেমে শেল অ্যাক্সেস নিতে হয়, যেটা করা হয় নেটওয়ার্কের মাধ্যমে সংযোগ স্থাপন করে। বর্তমান প্রযুক্তি পরিবেশে, অনেক হেডলেস সার্ভার আসলে ভার্চুয়াল মেশিন বা পাবলিক/প্রাইভেট ক্লাউডে চলে। এদের বাস্তব কোনো হার্ডওয়্যার কনসোল (monitor, keyboard) থাকে না, এমনকি অনেক সময় সিরিয়াল কনসোলও থাকে না।
remote shell access by using SSH
Linux-এ দূরবর্তী সিস্টেমে shell prompt পাওয়ার সবচেয়ে প্রচলিত উপায় হলো SSH (Secure Shell) ব্যবহার করা। বেশিরভাগ Linux ও macOS সিস্টেমে OpenSSH-এর ssh command থাকে এই কাজের জন্য।
উদাহরণ:
একজন user host মেশিনে বসে remotehost নামের সিস্টেমে remoteuser হিসেবে লগইন করছেন:
[user@host ~]$ ssh remoteuser@remotehost
remoteuser@remotehost's password: *****
[remoteuser@remotehost ~]$
ssh কমান্ডটি ডেটা এনক্রিপ্ট করে, ফলে পাসওয়ার্ড বা তথ্য মাঝপথে চুরি হওয়ার সম্ভাবনা কমে যায়।
SSH Public Key Authentication
নিরাপত্তার কারণে কিছু নতুন ক্লাউড সার্ভারে SSH লগইনের সময় পাসওয়ার্ড ব্যবহার করা যায় না; সেখানে সাধারণত SSH key ব্যবহার করতে হয়।
- এই পদ্ধতিতে ব্যবহারকারীর কাছে একটি private key থাকে।
- এটি পাসওয়ার্ডের মতো এবং গোপন রাখা হয়।
- সার্ভারে ব্যবহারকারীর অ্যাকাউন্টে একটি মিল থাকা (matching) public key কনফিগার করা থাকে। এই public key গোপন রাখার প্রয়োজন নেই।
- যখন ব্যবহারকারী ssh দিয়ে লগইন করেন, তখন যদি সঠিক public key সার্ভারে থাকে এবং ব্যবহারকারী সঠিক private key দেয়, তবে পাসওয়ার্ড ছাড়াই লগইন হয়ে যায়।
উদাহরণ (প্রাইভেট কী ফাইল দিয়ে লগইন):
[user@host ~]$ ssh -i mylab.pem remoteuser@remotehost
[remoteuser@remotehost ~]$
এখানে -i mylab.pem দিয়ে বলা হয়েছে কোন private key ফাইল ব্যবহার করতে হবে।
Private key file Permission
সিকিউরিটির কারণে, private key ফাইল কেবলমাত্র সেই user দ্বারা read permission থাকতে হবে।
উদাহরণস্বরূপ, mylab.pem ফাইলের জন্য নিচের কমান্ডটি ব্যবহার করা হয়:
chmod 600 mylab.pem
এতে কেবলমাত্র ফাইলের owner ফাইলটি read করতে পারবে, অন্য কেউ না।
note
host authenticity warning at first time SSH connectivity
যখন ssh দিয়ে কোনো নতুন সার্ভারে প্রথমবার connectivity দেয়, তখন ssh একটি warning দেখাবে, কারণ এটি সার্ভারটির indentity নিশ্চিত করতে পারে না:
[user@host ~]$ ssh -i mylab.pem remoteuser@remotehost
The authenticity of host 'remotehost (192.0.2.42)' can't be established.
ECDSA key fingerprint is 47:bf:82:cd:fa:68:06:ee:d8:83:03:1a:bb:29:14:a3.
Are you sure you want to continue connecting (yes/no)? yes
[remoteuser@remotehost ~]$
* প্রতিবার ssh যখন কোনো সার্ভারে connectivity দেয়, তখন সেই সার্ভার একটি host key পাঠায়।
* এই host key-টি ssh কমান্ড পূর্বে সংরক্ষিত key-র সাথে মিলিয়ে দেখে। যদি key-টি নতুন হয় বা পরিবর্তিত হয়, তাহলে এটি হতে পারে man-in-the-middle আক্রমণের লক্ষণ।
আপনি যদি yes লিখে সম্মতি দেন, তাহলে ssh সেই key মেনে নেবে ও ভবিষ্যতের জন্য সংরক্ষণ করবে। এরপর থেকে আর এই বার্তা দেখাবে না। আপনি যদি no লিখেন, তাহলে সংযোগ বন্ধ হয়ে যাবে। যদি আগের সংরক্ষিত host key আর নতুন key এর সাথে না মেলে, তাহলে ssh সংযোগ বন্ধ করে দিবে এবং একটি সতর্কবার্তা দেখাবে। এটা নিরাপত্তার জন্য খুবই গুরুত্বপূর্ণ।
LOGGING OUT
যখন আপনি শেল ব্যবহার শেষ করবেন এবং সেশন থেকে বের হতে চাইবেন, তখন সেশন শেষ করার জন্য কয়েকটি পদ্ধতি বেছে নিতে পারেন।
exit
command
- exit কমান্ড ব্যবহার করে সেশন বন্ধ করা যায়।
Ctrl + d
pressing by keyboard
- অথবা, কীবোর্ড থেকে Ctrl+D চাপলেও সেশন শেষ হয়ে যায়।
নিচে একটি SSH সেশনের লগআউটের উদাহরণ দেওয়া হলো:
[remoteuser@remotehost ~]$ exit
logout
Connection to remotehost closed.
[user@host ~]$
বাংলায় ব্যাখ্যা:
উপরের উদাহরণে, একজন ব্যবহারকারী remotehost নামের রিমোট সিস্টেমে SSH দিয়ে লগইন করেছিলেন। কাজ শেষ করে তিনি exit কমান্ড দেন। ফলে:
প্রথমে logout বার্তা দেখা যায়, যা বোঝায় লগআউট হচ্ছে। এরপর “Connection to remotehost closed.” – অর্থাৎ রিমোট সিস্টেমের সাথে সংযোগ বন্ধ হয়ে গেছে। এরপর ব্যবহারকারী আবার তার নিজের লোকাল সিস্টেমে (যেখানে থেকে SSH করেছিলেন) ফিরে এসেছেন।
Strawberry Group | Topic Five, Byte Part
