ইউনিক্সঃ সিগন্যাল ও ট্র্যাপ (Unix – Signals and Traps)

রিদওয়ান বিন শামীম

 

সিগন্যাল হল সফটওয়ারের সংকেত যা নির্দেশ করে, লক্ষ্য করার মত কিছু ঘটেছে। এটি যেকোনো রকমের, ব্যবহারকারীর কোনও চাহিদা থেকে শুরু করে মেমোরির অনুমোদিত প্রবেশযোগ্যতা সংক্রান্ত, কোনও প্রোগ্রাম চাহিদা পূরণে সক্ষম নয় এমন যেকোনো কারণে সিগন্যাল দেখানো হতে পারে। এমন কয়েকটি কমন সিগন্যাল যা আমরা সচরাচর দেখি বা ব্যবহার করি, নিচের তালিকায় দেয়া হল।

 

সিগন্যালের নাম সিগন্যাল নাম্বার বিবরণ
SIGHUP 1 টার্মিনালে সমস্যা বা প্রক্রিয়ার সমাপ্তি
SIGINT 2 ইউজার ইন্টারাপ্ট ম্যাসেজ পাঠালে (Ctrl + C).
SIGQUIT 3 ইউজার সমাপ্তি ম্যাসেজ পাঠালে (Ctrl + D).
SIGFPE 8 ভুল গাণিতিক প্রচেষ্টা হলে
SIGKILL 9 প্রক্রিয়া সমাপ্তি ও কোনও ধরণের পরিষ্কার বা ক্লিনআপ বন্ধ
SIGALRM 14 এলারম ক্লক সিগন্যাল
SIGTERM 15 সফটওয়ার টারমিনেশন সিগন্যাল

 

সিগন্যালের তালিকা

kill -l কম্যান্ডের মাধ্যমে সাপোর্টেড সব সিগন্যাল তালিকাবদ্ধভাবে আমরা দেখতে পারি।


$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

সিগন্যালের মূল তালিকা সোলারিস, এইচপি –ইউএক্স ও লিনাক্সের মধ্যে কিছু ব্যতিক্রম হয়।

 

ডিফল্ট একশন

সিগন্যালের ডিফল্ট কিছু একশন হল,

  • প্রক্রিয়া টারমিনেট করে,
  • সিগন্যাল অগ্রাহ্য করে,
  • প্রক্রিয়ায় মেমোরি ইমেজ সমৃদ্ধ কোর ফাইল তৈরি করে,
  • প্রক্রিয়া থামায়,
  • থামানো প্রক্রিয়া চালু করে।

 

সিগন্যাল প্রেরণ করা

স্ক্রিপ্ট লেখার সময় CONTROL-C অথবা INTERRUPT কী চাপা সিগন্যাল প্রেরণের কমন উপায়, এছাড়াও kill কম্যান্ড ব্যবহার করে এটি করা যায়,


$ kill -signal pid

 

এখানে সিগন্যাল হয় নাম অথবা নাম্বার(সিগন্যালের) আর pid হল প্রসেস আইডি যাতে সিগন্যাল পাঠানো হবে।


$ kill -1 1001

 

process ID 1001 তে প্রক্রিয়াধীন ক্ষেত্রে kill signal পাঠাতে কম্যান্ড,


$ kill -9 1001

 

সিগন্যাল ট্র্যাপ করা

ট্র্যাপ কম্যান্ডের জন্য যে সিনট্যাক্স ব্যবহার করা যায় তা হল,


$ trap commands signals

 

সেল স্ক্রিপ্টে ট্র্যাপের ব্যবহার হয় এসব কারণে-

  • টেম্পোরারি ফাইল ক্লিনআপে
  • সিগন্যাল ইগনোর করতে

 

টেম্পোরারি ফাইল ক্লিনআপ করা

কিছু ফাইল রিমোভ করে এক্সিট করতে নিচের কম্যান্ড ব্যবহার করতে পারি,


$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2

 

স্পেসিফাইড ফাইল মুছার জন্য ট্র্যাপ মডিফাই করতে সিগন্যাল লিস্টে সিগন্যাল নাম্বার 1 যোগ করতে পারি,


$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2

 

সিগন্যাল এক ও দুই রিসিভ করার ক্ষেত্রে সাবস্টিটিউশন ঘটাতে চাইলে কম্যান্ডকে সিঙ্গেল কোটের মধ্যে লিখতে পারি,


$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2

 

সিগন্যাল ইগনোর করতে

রিসিভের সময় সিগন্যাল ইগনোর করতে কম্যান্ড,


$ trap '' 2

 

মাল্টিপল সিগন্যাল ইগনোর করতে,


$ trap '' 1 2 3 15

 

প্রথম আর্গুমেন্টকে সিগন্যালের জন্য স্পেসিফাইড হতে হবে, যার নিজস্ব মানে থাকতে হবে,


$ trap 2

 

ট্র্যাপ রিসেট করতে কম্যান্ড ব্যবহার করা যায়,


$ trap 1 2

যা কিনা প্রথম আর্গুমেন্টের উপর ভিত্তি করে করতে হবে।

 

ইউনিক্সঃ সিস্টেম লগিং (Unix – System Logging)

রিদওয়ান বিন শামীম

 

ইউনিক্স সিস্টেমের খুব শক্তিশালী ও স্থিতিস্থাপক লগিং সিস্টেম আছে যার মাধ্যমে আমাদের কল্পনাযোগ্য সব কিছুই আমরা রেকর্ড করে রাখতে ও পরবর্তীতে ব্যবহার করতে পারি।

ইউনিক্সের বেশিরভাগ ভার্সন syslog নামক জেনারেল পারপাস লগিং ফ্যাসিলিটি দিয়ে থাকে। স্বতন্ত্র প্রোগ্রাম যাদের তথ্য লগড অবস্থায় থাকতে হয় তারা এটিতে তথ্য প্রেরণ করে থাকে। এই সিস্টেম একটি কেন্দ্রীভূত সিস্টেম লগড প্রসেস ব্যবহার করে যা /etc/syslogd বা /etc/syslog নামক প্রোগ্রাম সম্পন্ন করে। প্রোগ্রাম তাদের লগ এন্ট্রিকে syslogd এ পাঠায় যা /etc/syslogd.conf বা /etc/syslog ফাইল কনফিগার সংক্রান্ত কাজগুলো করে। কোনও মিল পাওয়া গেলে কাঙ্খিত লগ ফাইলে লগ ম্যাসেজ লিখে রাখে।

 

মূলত চার ধরণের syslog টার্ম আছে,

টার্ম বর্ণনা
Facility আইডেন্টিফাইয়ার লগ মেসেজে সাবমিট হওয়া এপ্লিকেশন বা প্রোগ্রামের বিবরণ দেয়
Priority ম্যাসেজের গুরুত্বের পরিমাপক
Selector এক বা একাধিক ফ্যাসিলিটি বা লেভেলের সমন্বয়
Action ইনকামিং ম্যাসেজ যা সিলেক্টরের সাথে মিলে যায়, তার ক্ষেত্রে ঘটে।

 

সিসলগ ফ্যাসিলিটিজ

সিলেক্টরের জন্য প্রাপ্ত সুবিধাগুলো নিচে দেয়া হল, অবশ্য সব ইউনিক্স ভার্সন সবগুলো সুবিধা পায় না।

 

প্রায়োরিটি বর্ণনা
emerg জরুরী অবস্থা
alert সংশোধন করতে হবে এমন অবস্থা
crit জটিল পরিস্থিতি, যেমন হার্ডওয়ারে ক্রুটি
err সাধারণ এরর
warning সতর্কবাণী
notice এরর না, তবু সাবধানে কাজ করতে হবে
info তথ্যমূলক ম্যাসেজ
debug প্রোগ্রাম ডিবাগের ম্যাসেজ
none নট টু লগ ম্যাসেজ নির্ধারণের জন্য সিউডো লেভেল ব্যবহার করা

 

/etc/syslog.conf ফাইল

ম্যাসেজ লগড থাকার সময় এই ফাইল কন্ট্রোল করে।


*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice           /var/log/messages
lpr.info                     /var/log/lpr.log
mail.*                       /var/log/mail.log
ftp.*                        /var/log/ftp.log
auth.*                       @prep.ai.mit.edu
auth.*                       root,amrood
netinfo.err                  /var/log/netinfo.log
install.*                    /var/log/install.log
*.emerg                      *
*.alert                      |program_name
mark.*                       /dev/console

 

ফাইলের প্রতিটা লাইনের দুটি করে অংশ আছে,

  • ম্যাসেজ সিলেক্টর যা নির্ণয় করে কোন ধরণের ম্যাসেজ লগড হবে
  • একশন ফিল্ড যা ঠিক করে ম্যাসেজ নিয়ে ঠিক কি করা হবে।

উপরের কনফিগারেশনের কয়েকটি গুরুত্বপূর্ণ পয়েন্ট আছে,

  • ম্যাসেজ সিলেক্টরের দুটি পার্ট আছে, ফ্যাসিলিটি আর প্রাইওরিটি
  • kern.debug নামের ম্যাসেজ সিলেক্টর ডিবাগের চেয়ে বড় প্রাইওরিটি নির্বাচন করে।
  • ফ্যাসিলিটি আর প্রাইওরিটির স্থলে তারকাচিহ্ন সবগুলোকেই নির্দেশ করে।
  • মাল্টিপল ফ্যাসিলিটি নির্ধারণ করতে কমা ও ব্যবহার করা যায়।

 

লগিং একশন

পাঁচটি একশনের যে কোনও একটি একশন ফিল্ডে প্রযোজ্য হবে,

  • কোনও ফাইল বা ডিভাইসে লগ ম্যাসেজ
  • ইউজারের কাছে ম্যাসেজ পাঠানো
  • সব ইউজারের কাছে ম্যাসেজ পাঠানো
  • প্রোগ্রামে ম্যাসেজ পাইপ করা
  • অন্য হোষ্টের syslog এ ম্যাসেজ প্রেরণ

 

লগার কম্যান্ড

লগার কম্যান্ডের ফরম্যাট হল,


logger[-i][-f file][-p priority][-t tag][message]...

 

 

এর প্যারামিটারগুলো এরকম,

 

প্যারামিটার
-f filename
-i
-p priority
-t tag
message

 

লগ রোটেশন

লগ রোটেশনের জন্য newsyslog বা logrotate টুল ব্যবহার করা যায়।

 

গুরুত্বপূর্ণ লগ লোকেশন

কিছু গুরুত্বপূর্ণ এপ্লিকেশন ও তাদের লগ ডিরেক্টরি নিচে দেয়া হল,

 

এপ্লিকেশন ডিরেক্টরি
httpd /var/log/httpd
samba /var/log/samba
cron /var/log/
mail /var/log/
mysql /var/log/

 

ইউনিক্সঃ সিস্টেম পারফর্মেন্স (Unix – System Performance)

রিদওয়ান বিন শামীম

 

আজকের টিউটোরিয়ালের উদ্দেশ্য হল সিস্টেমের পারফর্মেন্স পরিমাপকের সাথে ইউনিক্স সিস্টেমের পারফর্মেন্স পরিমাপ,পর্যবেক্ষণ ও নিয়ন্ত্রণের কিছু ফ্রী টুলসের পরিচয় করানো, এবং ইউনিক্স আবহে সিস্টেমের পারফর্মেন্স বিষয়ক সমস্যা ও তার সমাধান সম্পর্কে দিকনির্দেশনা দেয়া।

ইউনিক্সে কিছু গুরুত্বপূর্ণ রিসোর্স আছে যাদেরকে পর্যবেক্ষণ করা ও নিয়ন্ত্রণে রাখা জরুরী।

  • সিপিইউ
  • মেমোরি
  • ডিস্ক স্পেস
  • কমুনিকেশন্স লাইন
  • আই/ও টাইম
  • নেটওয়ার্ক টাইম
  • এপ্লিকেশন প্রোগ্রামস

পারফরমেন্সের উপাদান

পাঁচটি প্রধান উপাদান পারফরমেন্সে অবদান রাখে,

উপাদান বর্ণনা
User state CPU ইউজার স্টেটে সিপিইউ দ্বারা ব্যয়িত মত সময়। লাইব্রেরী সেলে ব্যয়িত সময় এর অন্তর্ভুক্ত কিন্তু কার্নেল বিষয়ক সময় এর অন্তর্ভুক্ত নয়
System state CPU সিস্টেম স্টেটে সিপিইউ দ্বারা ব্যয়িত মত সময়।
I/O Time and Network Time I/O requests ও ডাটা স্থানান্তরের জন্য ব্যয়িত সময়
Virtual Memory Performance কনট্যাক্স switching ও swapping এর অন্তর্গত।
Application Program অন্য প্রোগ্রাম চলার জন্য ব্যয়িত সময় – যখন সিস্টেম এপ্লিকেশনকে সময় দিচ্ছে না, সিপিইউ অন্য কোনও এপ্লিকেশনের জন্য বরাদ্দ আছে।

 

পারফরমেন্স টুল

 

কম্যান্ড বর্ণনা
nice/renice পরিবর্তিত প্রাধান্যসহ প্রোগ্রাম চালনা করা
netstat নেটওয়ার্ক কানেকশন, রাউটিং টেবিল, ইন্টারফেস পরিসংখ্যান, মাল্টিকাস্ট মেম্বারশিপ মুদ্রিত করা
time কম্যান্ড ও সিম্পল রিসোর্স টাইম
uptime সিস্টেম লোড এভারেজ
ps সাম্প্রতিক প্রক্রিয়ার স্নেপশট রিপোর্ট
vmstat ভার্চুয়াল মেমোরি পরিসংখ্যানের রিপোর্ট
gprof কল গ্রাফ প্রোফাইলের ডাটা প্রদর্শন
prof প্রফাইলিং প্রক্রিয়াজাত করা
top সিস্টেম টাস্ক প্রদর্শন করা

 

এখানে বর্ণিত সকল কম্যান্ডের বিস্তারিত সিনট্যাক্সের জন্য মেনপেজ হেল্প দেখা যেতে পারে।

 

ইউনিক্সঃ ইউজার এডমিনিস্ট্রেশন (Unix – User Administration)

রিদওয়ান বিন শামীম

 

ইউনিক্স সিস্টেমে তিন ধরণের একাউন্ট দেখা যায়,

  • রুট একাউন্ট,
  • সিস্টেম একাউন্ট
  • ইউজার একাউন্ট

 

ইউজার এবং গ্রুপ ব্যবস্থাপনা

তিন ধরণের ইউজার এডমিনিস্ট্রেশন ফাইল দেখা যায়,

  • /etc/passwd: এটি ইউজার একাউন্ট ও পাসওয়ার্ড সংরক্ষণ করে।
  • /etc/shadow: এটি কোরেসপনডিং একাউন্টের এনক্রিপটেড পাসওয়ার্ড সংরক্ষণ করে
  • /etc/group: এটি প্রত্যেক একাউন্টের গ্রুপ ইনফরমেশন সংরক্ষণ করে

 

ইউনিক্সের একাউন্ট ও গ্রুপ তৈরি ও ব্যবস্থাপনা সংক্রান্ত কম্যান্ডের কয়েকটি নিচের ছকে দেয়া হল,

কম্যান্ড বিবরণ
useradd সিস্টেমে একাউন্ট যোগ করে
usermod একাউন্ট এট্রিবিউট মডিফাই করে
userdel সিস্টেম থেকে একাউন্ট ডিলিট করে .
groupadd সিস্টেমে গ্রুপ যোগ করে
groupmod গ্রুপ এট্রিবিউট মডিফাই করে
groupdel সিস্টেম থেকে গ্রুপ রিমুভ করে .

 

গ্রুপ তৈরি করা

নতুন গ্রুপ তৈরির সিনট্যাক্স হল,


groupadd[-g gid[-o]][-r][-f] groupname

 

এর প্যারামিটারগুলো হল,

-g GID
-o
-r
-f
groupname

 

নিচের উদাহরণে ডিফল্ট ভ্যালুতে developers গ্রুপ তৈরি করা হয়েছে।


$ groupadd developers

 

গ্রুপ মডিফাই করা

groupmod সিনট্যাক্স ব্যবহার করে গ্রুপ মডিফাই করা যায়।


$ groupmod-n new_modified_group_name old_group_name

 

developers_2 গ্রুপনেমকে developer গ্রুপনেমে পরিবর্তনের জন্য,


$ groupmod-n developer developer_2

 

financial GID গ্রুপনেমকে 545 গ্রুপনেমে পরিবর্তনের জন্য,


$ groupmod-g545 developer

 

গ্রুপ ডিলিট করার জন্য

গ্রুপ ডিলিট করার জন্য কম্যান্ড,


$ groupdel developer

 

একাউন্ট তৈরি করা

একাউন্ট তৈরি করার জন্য সিনট্যাক্স,


useradd-d homedir-g groupname-m-s shell-u userid accountname

 

এর প্যারামিটারগুলো হল,

Option
-d homedir
-g groupname
-m
-s shell
-u userid
accountname

 

mcmohd নামের একাউন্ট যার হোম ডিরেক্টরি /home/mcmohd, এবং developersনামের গ্রুপ,এটিকে ব্যবহারকারী কর্ন সেলের মাধ্যমে এসাইন করতে পারে, নিচে পুরো উদাহরণটি দেয়া হল,


$ useradd-d/home/mcmohd-g developers-s/bin/ksh mcmohd

 

একাউন্ট তৈরি হয়ে গেলে passwd কম্যান্ড ব্যবহার করে আমরা এতে পাসওয়ার্ড বসাতে পারি,


$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

 

একাউন্ট মডিফাই করা

usermod কম্যান্ড ব্যবহার করে একাউন্ট মডিফাই করা সম্ভব।


$ usermod-d/home/mcmohd20-m-l mcmohd mcmohd20

 

একাউন্ট ডিলিট করা

userdel কম্যান্ড ব্যবহার করে আমরা একাউন্ট ডিলিট করতে পারি।


$ userdel-r mcmohd20

 

যদি আমরা হোম ডিরেক্টরিকে ব্যাকআপের জন্য রাখতে চাই তবে -r অপশন বর্জন করতে হবে।

 

ইউনিক্সঃ ফাইল সিস্টেম বেসিক (Unix – File System Basics)

রিদওয়ান বিন শামীম

 

ফাইল সিস্টেম হল পার্টিশন বা ডিস্কে ফাইলের লজিকাল কালেকশন। পার্টিশন ইনফরমেশনের কন্টেইনার হিসেবে কাজ করে এবং প্রয়োজনে পুরো হার্ডডিস্ক স্পান করতে পারে ।

হার্ডড্রাইভে অনেকগুলো পার্টিশন থাকতে পারে যেগুলো মূলত একটিমাত্র ফাইল সিস্টেম ফলো করবে। প্রতিটা পার্টিশনের জন্য একটিমাত্র ফাইল সিস্টেম এটির সুষ্ঠু ব্যবস্থাপনা ও রক্ষণাবেক্ষণ নিশ্চিত করে।

ইউনিক্সে সব উপাদানকে ফাইল হিসেবে গণ্য করা হয়, এমনকি ডিভিডি রম, ইউএসবি ডিভাইস বা ফ্লপি ড্রাইভের মত ফিজিকাল ডিভাইসকেও।

 

ডিরেক্টরি কাঠামো

ইউনিক্স ক্রমবিন্যাসগত কাঠামো মেনে চলে, root (/)কে ফাইল সিস্টেমের ভিত্তি ধরে, অন্য সব ডিরেক্টরি সেটি থেকে ছড়িয়ে পড়ে।

ইউনিক্স ফাইল সিস্টেম ফাইল ও ডিরেক্টরির কালেকশন যেটির মূলত নিচের বৈশিষ্ট্যগুলি থাকে।

  • এটির root directory (/) থাকে যা অন্য ফাইল ও ডিরেক্টরিগুলোকে ধারণ করে,
  • প্রত্যেকটি ফাইল ও ডিরেক্টরি এর স্বতন্ত্র নাম দ্বারা সনাক্ত হয়,
  • কনভেনশন অনুসারে root directoryএর inode number থাকে ২ এর , আর ost+found directoryএর inode number থাকে ৩ এর।
  • ফাইল সিস্টেমগুলো স্বতন্ত্র, এদের পারস্পরিক কোনও নির্ভরতা নেই।

ডিরেক্টরিগুলোর নির্ধারিত কাজ থাকে, ইউনিক্সের প্রধান ভার্সনগুলোয় যে ডিরেক্টরিগুলোকে সাধারণত দেখা যায়,

 

ডিরেক্টরি
/
/bin
/dev
/etc
/lib
/boot
/home
/mnt
/proc
/tmp
/usr
/var
/sbin
/kernel

 

ফাইল সিস্টেম নেভিগেট করা

নিচের কম্যান্ডগুলো নেভিগেশনের জন্য প্রয়োজন হয়,

 

কম্যান্ড
cat filename
cd dirname
cp file1 file2
file filename
find filename dir
head filename
less filename
ls dirname
mkdir dirname
more filename
mv file1 file2
pwd
rm filename
rmdir dirname
tail filename
touch filename
whereis filename
which filename

 

df (disk free) কম্যান্ড

পার্টিশনের জায়গা ব্যবস্থাপনার জন্য df –k কম্যান্ড কিলোবাইটে ডিস্ক স্পেস ইউসেজ প্রকাশ করে,


$df -k
Filesystem      1K-blocks      Used   Available Use% Mounted on
/dev/vzfs        10485760   7836644     2649116  75% /
/devices                0         0           0   0% /devices
$

সব ইউনিক্সের জন্য df –kআউটপুট একই রকমের বা কাছাকাছি। এগুলো হল,

 

আউটপুট কলাম
Filesystem
kbytes
used
avail
capacity
Mounted on

 

ডিইউ কলাম

ডিইউ (disk usage) কমান্ডে প্রতি ডিরেক্টরির কনজিউম করা ব্লকের সংখ্যা দেখানো হয়, একটি সিঙ্গেল ব্লক ৫১২ বাইট বা ১ কিলোবাইট জায়গা নেয়, এই পরিমান সিস্টেমের উপর নির্ভর করে।


$du    /etc
10     /etc/cron.d
126    /etc/default
6      /etc/dfs
...
$

 

-h অপশন আউটপুট প্রকাশকে সহজ করে,


$du -h /etc
5k    /etc/cron.d
63k   /etc/default
3k    /etc/dfs
...
$

 

ফাইল সিস্টেম মাউন্টিং

বর্তমানে মাউন্টেড ফাইল দেখতে,


$ mount
/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)
proc on /proc type proc (rw,nodiratime)
devpts on /dev/pts type devpts (rw)
$

 

কোনও ফাইল সিস্টেমকে মাউন্ট করতে সিনট্যাক্স,


mount-t file_system_type device_to_mount directory_to_mount_to

 

 

যেমন, কোনও সিডি রমকে /mnt/cdrom ডিরেক্টরিতে মাউন্ট করতে সিনট্যাক্স,


$ mount-t iso9660/dev/cdrom/mnt/cdrom

 

ফাইল সিস্টেমকে আনমাউন্ট করতেঃ এক্ষেত্রে umount কম্যান্ড ব্যবহার করতে হবে, যেমন একটি সিডি রমকে আনমাউন্ট করতে


$ umount/dev/cdrom

 

ইউজার ও গ্রুপ কোটা

এক্ষেত্রে এডমিন নির্ধারণ করে দেন নির্দিষ্ট ব্যবহারকারী বা গ্রুপ কি পরিমান জায়গা ব্যবহার করতে পারবেন, এডমিন নির্ধারিত জায়গা অতিক্রম করলে দুটো লিমিটে ব্যবহারকারী ব্যবস্থা নিতে পারেন,

  • সফট লিমিট
  • হার্ড লিমিট

এডমিন কোটার কম্যান্ডগুলো হল,

কম্যান্ড
quota
edquota
quotacheck
setquota
quotaon
quotaoff
repquota

 

ইউনিক্স – SED এর সাথে রেগুলার এক্সপ্রেশন (Unix – Regular Expressions with SED)

রিদওয়ান বিন শামীম

 

আজকের টিউটোরিয়ালে আমরা দেখব কীভাবে sed তে রেগুলার এক্সপ্রেশন ব্যবহার করা হয়।

 

এসইডিকে ইনভোক করা

পাইপের মাধ্যমে এসইডিতে ডাটা প্রেরণ করে একে ইনভোক করা যায়,


$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...
 
  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression=script
...............................

 

এসইডির জন্য সাধারণ সিনট্যাক্স

এসইডির জন্য সাধারণ সিনট্যাক্স এরকম,


/pattern/action

 

এখানের স্ল্যাস ক্যারেক্টারগুলো ডিলিমিটার হিসেবে ব্যবহৃত হয়।

রেঞ্জ বিবরণ
p লাইন প্রিন্ট করে
d লাইন ডিলিট করে
s/pattern1/pattern2/ প্যাটার্ন ১ এর ঘটনাকে প্যাটার্ন ২ দ্বারা প্রতিস্থাপন করে।

 

 

এসইডিতে লাইন ডিলিট করতে

লাইন ডিলিট করতে নিচের কম্যান্ড ব্যবহৃত হয়,


$ cat /etc/passwd | sed 'd'
$

 

cat command ছাড়া এই কম্যান্ডও অনুরূপ কাজ করে,

 


$ sed -e 'd' /etc/passwd
$

এসইডি এড্রেসিং

এসইডি কম্যান্ডে বেসিক এড্রেস যোগ করতে যে কম্যান্ড ব্যবহার করতে পারি,

 


$ cat /etc/passwd | sed '1d' |more
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
$

এসইডি কম্যান্ডে এড্রেস রেঞ্জ নির্ধারণ করতে আমরা  যে কম্যান্ড ব্যবহার করতে পারি তা হল,


$ cat /etc/passwd | sed '1, 5d' |more
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
$

উপরের কম্যান্ড এক থেকে পাঁচ নাম্বার পর্যন্ত লাইন ডিলিট করতে ফলপ্রসূ হবে।

 

আরও কিছু এড্রেস রেঞ্জের উদাহরণ,

রেঞ্জ
‘4,10d’
‘10,4d’
‘4,+5d’
‘2,5!d’
‘1~3d’
‘2~2d’
‘4,10p’
‘4,d’
‘,10d’

 

মনে রাখা দরকার, p একশন ব্যবহারের সময় পুনরাবৃত্তি এড়াতে -n অপশন ব্যবহার করা উচিৎ,

 


$ cat /etc/passwd | sed -n '1,3p'

এই কম্যান্ডকে -n ছাড়া ব্যবহার করলে যা পাচ্ছি,


$ cat /etc/passwd | sed '1,3p'

সাবস্টিটিউশন কম্যান্ড

স্ট্রিং root কে amrood স্ট্রিং দ্বারা প্রতিস্থাপিত করতে কম্যান্ড,

 


$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................

এসইডিকে গ্লোবাল সাবস্টিটিউশনের নির্দেশ দিতে কম্যান্ডের শেষে g লাগাতে হয়,

 


$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

 

 

সাবস্টিটিউশন ফ্ল্যাগ

অনেকগুলো সাবস্টিটিউশন ফ্ল্যাগ আছে যার মধ্যে একই সময়ে একাধিককে স্পেসিফাই করে দিতে পারি আমরা,

 

ফ্ল্যাগ
g
NUMBER
p
w FILENAME
I or i
M or m

 

অলটারনেটিভ স্ট্রিং সেপারেটর ব্যবহার করা

s এর পড়ে কাঙ্খিত ক্যারেক্টার ব্যবহার করে বিভিন্ন সেপারেটর ব্যবহার করা যায়।

 


$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

এম্পটি স্পেস দ্বারা রিপ্লেস করা

/etc/passwd ফাইল থেকে রুট স্ট্রিং ডিলিট করার জন্য এম্পটি সাবস্টিটিউশন স্ট্রিং ব্যবহার করতে পারি,

 


$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

এড্রেস সাবস্টিটিউশন

কেবল দশম লাইনের string shকে string quiet দ্বারা  সাবস্টিটিউট করতে,


$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet

একইভাবে, এড্রেস রেঞ্জ সাবস্টিটিউশন করতে,

 


$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

ম্যাচিং কম্যান্ড

-n অপশনের সাথে p অপশন ব্যবহার করে ম্যাচিং লাইন প্রিন্ট করতে পারি,


$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

রেগুলার এক্সপ্রেশন ব্যবহার করা

daemon দিয়ে করা লাইন খুঁজে বের করে ডিলিট করতে,

 


$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

 

sh দিয়ে শেষ এমন লাইনের ক্ষেত্রে ডিলিটের কম্যান্ড,

 


$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync

 

রেগুলার এক্সপ্রেশনের জন্য গুরুত্বপূর্ণ এমন চারটি স্পেশাল ক্যারেক্টার,

ক্যারেক্টার
^
$
.
*
[chars]

 

ম্যাচিং ক্যারেক্টার

ম্যাচিং ক্যারেক্টারের কিছু প্যাটার্ন দেয়া হল,

এক্সপ্রেশন
/a.c/
/a*c/
/[tT]he/
/^$/
/^.*$/
/ */
/^$/

বহুল ব্যবহৃত কিছু ক্যারেক্টার সেট নিচে দেয়া হল,

সেট
[a-z]
[A-Z]
[a-zA-Z]
[0-9]
[a-zA-Z0-9]

 

ক্যারেক্টার ক্লাস কীওয়ার্ড

/etc/syslog.conf ফাইলের উদাহরণে এলফাবেট ক্যারেক্টার ক্লাস কীওয়ার্ড ব্যবহৃত হয়েছে।


$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.*                         /var/log/secure
mail.*                             -/var/log/maillog
cron.*                             /var/log/cron
uucp,news.crit                     /var/log/spooler
local7.*

 

জিএনইউ এসইডিতে পাওয়া ক্যারেক্টার ক্লাস কীওয়ার্ডের একটি তালিকা নিচে দেয়া হল,

ক্যারেক্টার ক্লাস
[[:alnum:]]
[[:alpha:]]
[[:blank:]]
[[:cntrl:]]
[[:digit:]]
[[:graph:]]
[[:lower:]]
[[:print:]]
[[:punct:]]
[[:space:]]
[[:upper:]]
[[:xdigit:]]

 

এম্পারসেন্ড রেফারেন্সিং

ধরা যাক, নিচের ফাইলে ফোননাম্বার আছে, এতে এরিয়া কোড বসাতে হবে,

 


5555551212
5555551213
5555551214
6665551215
6665551216
7775551217

এম্পারসেন্ড রিপ্লেসমেন্ট ক্যারেক্টার বসিয়ে এটি করতে হলে যা করতে হবে তা হল,

 


$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217

মাল্টিপল এসইডি কম্যান্ড ব্যবহার

সিঙ্গেল এসইডি কম্যান্ডে মাল্টিপল এসইডি কম্যান্ড ব্যবহার করতে নিচের কম্যান্ড ব্যবহার করতে পারি,

 


$ sed -e 'command1' -e 'command2' ... -e 'commandN' files

একই কৌশল ব্যবহার করে ফোন নাম্বার উদাহরণকে আমরা এভাবে লিখতে পারি,

 


$ sed -e 's/^[[:digit:]]\{3\}/(&)/g'  \
                      -e 's/)[[:digit:]]\{3\}/&-/g' phone.txt
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217

ব্যাক রেফারেন্স

ধরা যাক, অনুমিত ফোন টেক্সটে এই টেক্সটগুলো আছে,

 


(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217

এতে নিচের কম্যান্ড প্রয়োগ করা যেতে পারে,

 


$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \
                       code: \1 Second: \2 Third: \3/'
Area code: (555) Second: 555- Third: 1212
Area code: (555) Second: 555- Third: 1213
Area code: (555) Second: 555- Third: 1214
Area code: (666) Second: 555- Third: 1215
Area code: (666) Second: 555- Third: 1216
Area code: (777) Second: 555- Third: 1217

 

ইউনিক্সঃ সেল ম্যানপেজ হেল্প (Unix – Shell Manpage Help)

রিদওয়ান বিন শামীম

 

ইউনিক্স কম্যান্ডগুলো অনেকধরণের ঐচ্ছিক ও বাধ্যতামূলক অপশন নিয়ে গঠিত হয়, এসব কম্যান্ডের সম্পূর্ণ সিনট্যাক্স মনে রাখা সহজ নাও হতে পারে।

যেহেতু কোনও ব্যক্তির পক্ষে এসব কম্যান্ডের সম্পূর্ণ সিনট্যাক্স মনে রাখা সম্ভব না তাই ইউনিক্সের প্রথম যুগ থেকেই অনলাইনে এসব সিনট্যাক্স সম্পর্কে সাহায্য লাভের সুযোগ আছে।

 

ইউনিক্সের সাহায্য ফাইলের ভার্সনগুলোকে ম্যান পেজ বলে। কোনও কম্যান্ড নেম জানা থাকলে কিন্তু প্রয়োগ বিধি জানা না থাকলে ম্যান পেজ প্রতিটা ধাপে সাহায্য করতে পারে।

সিনট্যাক্স

সিস্টেমে কাজ করার সময় কোনও ইউনিক্স কম্যান্ডের বিস্তারিত তথ্য পেতে নিচের কোড ব্যবহার করা হয়,


$man command

 

যেমন, pwd সম্পর্কে জানতে গেলে নিচের কোড লিখতে হবে,


$man pwd

 

man কম্যান্ড সম্পর্কে বিস্তারিত জানতে হলে যে কোড লিখতে হবে তা হল,


$man man

 

ম্যানপেজের সেকশন

ম্যানপেজ মূলত সেকশনে বিভক্ত থাকে যা প্রধানত এর অথরের বিবেচনায় মূল্যায়িত হয়। কিছু কমন সেকশন নিচের ছকে দেখানো হল,

 

সেকশন বর্ণনা
NAME কম্যান্ডের নাম
SYNOPSIS কম্যান্ডের জেনারেল ইউসেজ প্যারামিটার
DESCRIPTION কম্যান্ড ও এর কাজের বর্ণনা
OPTIONS কম্যান্ডের অপশন
SEE ALSO ম্যানপেজে সরাসরি সম্পৃক্ত কম্যান্ড ও তাদের সদৃশ ফাংশনালিটির তালিকাভুক্তি
BUGS কম্যান্ড বা এর আউটপুটে থাকে এমন জানা বিষয় বা বাগ।
EXAMPLES কম্যান্ড ব্যবহার বিষয়ে কমন উদাহরণ
AUTHORS ম্যানপেজ বা কম্যান্ডের অথর

 

এভাবেই গুরুত্বপূর্ণ ও প্রয়োজনীয় ইউনিক্স সেল কম্যান্ড আমরা হেল্প পেজ থেকে পেতে পারি।

 

পিএইচপি ৫ ফরম – ই-মেইল এবং URL সন্নিবেশ করা (PHP 5 Forms – Validate E-mail and URL)

এই অধ্যায়ে আমরা ই-মেইল ও URL কিভাবে বেলিডেট করা যায় সে সম্পর্কে আলোচনা করবো।

পিএইচপি – নাম যাচাই করা

নিচের কোডটি নিশ্চিত করে যে, এতে শুধুমাত্র লেটার বা বর্ণ থাকবে এবং কোন ফাঁকা স্থান থাকবে না। যদি শর্ত না মানে তাহলে এরর ম্যাসেজ দেখাবে।


$name = test_input($_POST["name"]);
 if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
   $nameErr = "Only letters and white space allowed"; 
 }

 

preg_match() ফাংশন স্ট্রিং এর ধরণ খুঁজে দেখে এবং যদি ফাংশনে উল্লেখিত ধরণ সঠিক থাকে তাহলে সত্য ফেরত দেয় না হলে মিথ্যা ফেরত দেয়।

 

পিএইচপি – ই-মেইল যাচাই করা

filter_var() ফাংশনের মাধ্যমে পিএইচপি যাচাই করে দেখে যে ই-মেইল এন্ট্রিটি সঠিকভাবে প্রবেশ করানো হয়েছে কিনা।


$email = test_input($_POST["email"]);
 if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
   $emailErr = "Invalid email format"; 
 }

 

 

পিইএচপি – URL যাচাই করা

নিচের কোডটি URL ঠিকানা ঠিকভাবে লেখা হয়েছে কিনা তা যাচাই করে দেখে


$website = test_input($_POST["website"]);
 if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)
    [-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
   $websiteErr = "Invalid URL"; 
 }

 

 

পিইএচপি – নাম, ই-মেইল, URL যাচাইকরণ


<?php
 // define variables and set to empty values
 $nameErr = $emailErr = $genderErr = $websiteErr = "";
 $name = $email = $gender = $comment = $website = "";
 
 if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
     $nameErr = "Name is required";
   } else {
     $name = test_input($_POST["name"]);
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "Only letters and white space allowed"; 
     }
   }
 
   if (empty($_POST["email"])) {
     $emailErr = "Email is required";
   } else {
     $email = test_input($_POST["email"]);
     // check if e-mail address is well-formed
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $emailErr = "Invalid email format"; 
     }
   }
 
   if (empty($_POST["website"])) {
     $website = "";
   } else {
     $website = test_input($_POST["website"]);
     // check if URL address syntax is valid 
        (this regular expression also allows dashes in the URL)
     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)
        [-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
       $websiteErr = "Invalid URL"; 
     }
   }
 
   if (empty($_POST["comment"])) {
     $comment = "";
   } else {
     $comment = test_input($_POST["comment"]);
   }
 
   if (empty($_POST["gender"])) {
     $genderErr = "Gender is required";
   } else {
     $gender = test_input($_POST["gender"]);
   }
 }
 ?>

 

 

পরবর্তী অধ্যায় এ ফর্ম সাবমিট করার পূর্বে সকল ফিল্ডগুলো পূরণ করা হয়েছে কিনা এবং না করলে কিভাবে সাবমিট করা থামানো যায় সে সম্পর্কে আলোচনা করা হবে।

 

 

ইউনিক্সঃ সেল ফাংশন (Unix – Shell Functions)

রিদওয়ান বিন শামীম

 

ফাংশন কোনও স্ক্রিপ্টের ফাংশনালিটিকে ছোট ছোট লজিকাল সাবসেকশনে ভাগ করে যাতে এগুলো প্রয়োজনমত তাদের কাজ সম্পন্ন করতে পারে।

পুনরাবৃত্তিমূলক কাজ সম্পাদনের জন্য ফাংশন ব্যবহার করা কোডের পুনঃব্যবহারের একটি ভাল উপায়। কোডের পুনঃব্যবহার বর্তমান সময়ের অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিঙের একটি গুরুত্বপূর্ণ অংশ।

সেল ফাংশন অন্যান্য প্রোগ্রামিং ভাষার সাবরুটিন, প্রক্রিয়া ও ফাংশনের মতই।

 

ফাংশন তৈরি করা

ফাংশন হিসেবে স্বীকৃতি পেতে নিচের সিনট্যাক্স ব্যবহার করতে হয়,


function_name () { 
   list of commands
}

 

নিচে ফাংশনের ব্যবহারের সহজ উদাহরণ দেয়া হল,


#!/bin/sh
 
# Define your function here
Hello () {
   echo "Hello World"
}
 
# Invoke your function
Hello

 

উপরের কোডকে কার্যে পরিণত করলে নিম্নে প্রদত্ত ফলাফল পাওয়া যাবে,


$./test.sh
Hello World
$

 

ফাংশনের পাস প্যারামিটার

কিছু ফাংশন কাজের ক্ষেত্রে প্যারামিটার গ্রহণ করে, $1, $2 এসব দ্বারা এই ফাংশন প্রকাশ করা হয়,


#!/bin/sh
 
# Define your function here
Hello () {
   echo "Hello World $1 $2"
}
 
# Invoke your function
Hello Zara Ali

 

যা নিচের ফলাফল দেখাবে,


$./test.sh
Hello World Zara Ali
$

 

ফাংশন থেকে মান ফিরিয়ে আনাঃ return কম্যান্ড ব্যবহার করে ফাংশন থেকে যেকোনো মান ফিরিয়ে আনা সম্ভব, যার সিনট্যাক্স হল,


return code

 

এখানে যেকোনো কোড হতে পারে কিন্তু তা স্ক্রিপ্টের কনটেক্সটে অর্থবোধক হতে হবে।

যেমন, নিচের ফাংশন ভ্যালু ফিরিয়ে আনে,


#!/bin/sh
 
# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}
 
# Invoke your function
Hello Zara Ali
 
# Capture value returnd by last command
ret=$?
 
echo "Return value is $ret"

 

যা নিম্নোক্ত ফলাফল দেবে,


$./test.sh
Hello World Zara Ali
Return value is 10
$

 

নেস্টেড ফাংশন

ফাংশনের একটি মজার ফিচার হল, এটি অন্য ফাংশনকে যেমন কল করতে পারে তেমনি নিজেদেরও কল করতে পারে। এধরনের ফাংশনকে রিকারসিভ ফাংশন বলে।

দুটি ফাংশনের নেস্টিং নিচের উদাহরণে দেয়া হল,


#!/bin/sh
 
# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}
 
number_two () {
   echo "This is now the second function speaking..."
}
 
# Calling function one.
number_one

 

এটি যে ফলাফল দেখাবে তা হল,


This is the first function speaking...
This is now the second function speaking...

 

প্রম্পট থেকে ফাংশন কল

.profile এর ভিতরে সচরাচর ব্যবহৃত ফাংশনের জন্য সংজ্ঞা অন্তর্ভুক্ত করা যায়,অপরদিকে test.sh জাতীয় ফাইলে সংজ্ঞার গ্রুপ সংবদ্ধ করে কারেন্ট সেলে নিচের কোড দ্বারা সম্পাদন করা যায়,


$. test.sh

 

যা কিনা কারেন্ট সেলকে নিচের মত করে বিবৃত করে,


$ number_one
This is the first function speaking...
This is now the second function speaking...
$

 

সেল থেকে কোনও ফাংশনের সংজ্ঞা মুছে ফেলতে .f অপশনের সাথে unset কম্যান্ড ব্যবহার করতে হয়, এটি সেই একই কম্যান্ড যা সেল থেকে চলকের বিবরণ মুছে ফেলতে ব্যবহৃত হয়,


$unset.f function_name

 

ইউনিক্সঃ সেল ইনপুট/আউটপুট রিডাইরেকশন (Unix – Shell Input/Output Redirections)

রিদওয়ান বিন শামীম

 

বেশিরভাগ ইউনিক্স সিস্টেম কম্যান্ড টার্মিনাল থেকে ইনপুট গ্রহণ করে এবং টার্মিনালে আউটপুট প্রদান করে।

কম্যান্ড স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট পড়ে ও স্ট্যান্ডার্ড আউটপুটে আউটপুট লিখে।

 

আউটপুট রিডাইরেকশন

নিচের who কম্যান্ড ইউজার ফাইলের কম্যান্ডের পুরোপুরি আউটপুটে পরিণত হবে,


$ who> users


 

এখানে লক্ষ্য করার মত বিষয়, টার্মিনালে কোনও আউটপুট নেই, কারণ আউটপুট স্পেসিফাইড ফাইলে চলে গেছে, সেটি ডিফল্ট স্ট্যান্ডার্ড আউটপুট ডিভাইস(এক্ষেত্রে টার্মিনাল) থেকে রিডাইরেক্ট হয়ে গেছে। যদি আমরা users ফাইল চেক করে দেখি তাহলে পরিপূর্ণ উপাদান দেখব,


$ cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
steve       tty25   Sep 12 13:03
$

 

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


$ echo line1> users
$ cat users
line1$

 

পূর্বে থাকা কোনও ফাইলে আউটপুট বিস্তারনের জন্য আমরা >> অপারেটর ব্যবহার করতে পারি।


$ echo line2>> users
$ cat users
line1
line2
$

 

ইনপুট রিডাইরেকশন

আউটপুট যেমন রিডাইরেক্ট হয়ে ফাইলে আসতে পারে তেমনি ফাইল থেকে ইনপুট রিডাইরেক্ট হয়ে চলেও যেতে পারে। আউটপুট রিডাইরেকশন যেমন > ক্যারেক্টার দ্বারা প্রকাশ পায় তেমনি ইনপুট রিডাইরেকশন < ক্যারেক্টার দ্বারা প্রকাশ পায়।

যেমন, users ফাইলের লাইন নাম্বার নিচের কম্যান্ড থেকে বের করা যায়,


$ wc-l users
2 users
$

 

এখানে আউটপুট ২ লাইনের। users ফাইলের wc কম্যান্ডের স্ট্যান্ডার্ড ইনপুটের রিডাইরেকশনের মাধ্যমে আমরা লাইন সংখ্যা জানতে পারি।


$ wc-l< users
2
$

 

হেয়ার ডকুমেন্ট

হেয়ার ডকুমেন্টের সাধারণ ফর্ম এরকম,


command<< delimiter
document
delimiter

 

মোট লাইনসংখ্যা জানার wc –l কম্যান্ডের ইনপুট এরকম,


$wc -l << EOF
        This is a simple lookup program 
        for good (and bad) restaurants
        in Cape Town.
EOF
3
$

 

স্ক্রিপ্ট ব্যবহার করে মাল্টিপল লাইন প্রিন্ট করতে here document কম্যান্ড ব্যবহার করা যায়,


#!/bin/sh
 
cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF

 

যা এরকম ফলাফল দেখাবে,


This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

 

এই স্ক্রিপ্ট vi টেক্সট এডিটর দিয়ে একটি সেশন চালাবে এবং test.txt ফাইলে ইনপুট সংরক্ষণ করবে।


#!/bin/sh
 
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

 

vi টেক্সট এডিটরের স্থলে vim টেক্সট এডিটর ব্যবহার করলে স্ক্রিপ্টের আউটপুট এরকম হবে,


$ sh test.sh
Vim: Warning: Input is not from a terminal
$

 

স্ক্রিপ্ট চালুর পর test.txt ফাইলে ফাইলে আমরা যা দেখব তা এরকম,


$ cat test.txt
This file was created automatically from
a shell script
$

 

আউটপুট ডিসকার্ড করা

আউটপুটকে /dev/null ফাইলে রিডাইরেক্ট করে এটি করা হয়,


$ command>/dev/null

 

কম্যান্ডের আউটপুট ও এর এরর আউটপুট দুটিকে ডিসকার্ড করতে


$ command>/dev/null2>&1

 

STDIN কে STDERR তে রিডাইরেক্ট করে ম্যাসেজ প্রদর্শন করতে


$ echo message1>&2

এই কোড ব্যবহার করা যায়।

 

রিডাইরেকশন কম্যান্ড

এরকম কয়েকটি রিডাইরেকশন কম্যান্ড হল,

কম্যান্ড
pgm > file
pgm < file
pgm >> file
n > file
n >> file
n >& m
n <& m
<< tag
|

মনে রাখা দরকার, ফাইল ডেসক্রিপ্টর ০ হল নরমাল স্ট্যান্ডার্ড ইনপুট (STDIN), ১ হল স্ট্যান্ডার্ড আউটপুট (STDOUT) আর ২ হল স্ট্যান্ডার্ড এরর আউটপুট (STDERR) ।