LINUX

آموزش لینوکس

LINUX

آموزش لینوکس

LINUX

این وبلاگ به بحث پیرامون لینوکس و امنیت و زبان برنامه نویسی تحت لینوکس می پردازد.

طبقه بندی موضوعی

محیط یونیکس

چهارشنبه, ۱۴ خرداد ۱۳۹۳، ۰۳:۰۰ ب.ظ

یک مفهوم بسیار مهم در یونیکس بحث environment یا محیط می باشد که بواسطه آن متغیرهای محیطی تعریف میشوند. بعضی از آنها توسط سیستم و بعضی از آنها توسط شما ایجاد میشوند.

یک متغیر کاراکتری از نوع رشته می باشد که ما به آن مداری را تخصیص میدهیم. این نقدار میتواند عدد یا متن یا نام فایل یا هر دیوایسی یا نوع داده های دیگری باشید. برای مثال ما متغیر TEST را به صورت زیر تعریف میکنیم:

$ TEST="Unix Programming"
$ echo $TEST
Unix Programming


بخاطر داشته باشید که متغیر ها هنگام تعریف از $ استفاده نمیکنند اما هنگام فراخوانی باید برای آنها از $ استفاده کرد. همچنین بهتر از نام متغیرها با حروف بزرگ باشد.

وقتی شما به سیستم لاگین میکنید شل برای شما محیطهای مختلفی را فراهم میکند. برای این کار شل فایلهای زیر را میخواند:

* etc/profile/

* profile


این پروسه مراحل زیر را دنبال میکند:

۱) شل ابتدا بررسی میکند که آیا فایل etc/profile/ وجود دارد یا خیر.


۲) اگر آن فایل وجود داشت شل آن را میخواند. در صورتی که این فایل وجود نداشت شل خطایی را چاپ نمیکند.


۳) در این مرحله شل چک میکند که آیا فایل profile.  در دایرکتوری home وجود دارد یا خیر. دایرکتوری home دایرکتوری می باشد که به محض باز شدن ترمینال شما کار را از آنجا آغاز خواهید کرد.


۴) اگر این فایل وجود داشت شل آن را میخواند و در غیر این صورت شل آن را نادیده گرفته و خطایی چاپ نمیکند.


به محض اینکه این دو فایل خوانده شد شل برای شما محیط prompt را نمایش میدهد:


اینجا محیطی ست که شما بعد از اندکی کار با اون حتما حس خیلی خوبی از آزادی کار با کامپیوتر خواهید داشت و میتوانید تمامی دستورات خود را آنجا به اجرا در بیاورید.

نکته قابل توجه اینکه شما در این محیط میتوانید انواع شل ها را اعم از bash  و ksh و... به اجرا در بیاورید.


فایل profile.

فایل etc/profile/ در یونیکس توسط ادمین نگه داری میشود.

اما فایل profile. کاملا  تحت کنترل شماست و شما میتوانید تنظیمات شخصی خود را روی آن انجام دهید. حداقل تنظیماتی که شما میتوانید روی آن انجام دهید به صورت زیر می باشد:


۱) نوع ترمینالی که از آن استفاده میکنید.

۲) لیست دایرکتوری ها در جایی که دستورات وجود دارند.

۳) لیست متغیرهایی که شما میبینید یا حس میکنید که روی ترمینال شما اثر میگذارند.


شما میتوانید فایل profile. را در دایرکتوری خانه خود از طریق دستور vim باز کنید و محتویات آن  متغیرهایی که وجود دارند را ببینید.

تعیین نوع ترمینال

معمولا نوع ترمینال توسط login و getty به صورت خودکار تنظیم میشود. گاهی پروسه حدس نیز در این موارد خود نوع ترمینال شما را تعیین میکند.

اگر ترمینال شما به صورت نادرست انتخاب شده باشد خروجی دستورات شما ممکن است عجیب و نادرست به نظر برسد و حتی ممکن است شما اصلا نتوانید از شل استفاده کنید.

برای اینکه این مشکلات ظاهر نشود خیلی از کاربران نوع ترمینال خود را به پایین تر سطح مثل زیر میبرند:

$ TERM=vt100
$


البته روی سیستم من که از اوبونتو استفاده میکنم مقدار متغیر زیر xterm است.

$ echo $TERM
xterm


تعیین PATH

وقتی شما هر دستوری را در ترمینال خود وارد میکنید شل مجبور است تا قبل از به اجرا درآوردن آن موقعیت و مکان آن دستور را شناسایی کند تا قابلیت اجرا شدن داشته باشد.

متغیر PATH موقعیت و مکان دستور را مشخص میکند. معمولا مقدار آن به صورت زیر است:

$ PATH=/bin:/usr/bin
$


اما اگر شما میخواهید مقدار این متغیر در سیستم خودتون رو ببینید به صورت زیر عمل کنید:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

مثلا شما عبارتی را در ترمینال خود تایپ کنید که در مسیرهای مشخص شده وجود نداشته باشد خروجی زیر را به شما میدهد:

$ hello
hello: not found
$


متغیرهای PS1 و PS2

کاراکترهایی که شل به عنوان دستور نمایش میدهد در متغیری به نام PS1 ذخیره میشود. شما میتوانید این متغیر را به هر صورتی که میخواهید تغییر دهید. به محض اینکه شما این مقدار را تغییر دهید تغییرات اعمال خواهند شد:

$ PS1='=>'
=>
=>
=>


از آن زمان به بعد prompt شما به صورت <= تغییر خواهد کرد.

برای اینکه شما بتوانید عبارت قبل از $ را مثلا جوری تغییر دهید که اطلاعات نام کاربری و دایرکتوری موجود را به شما نشان دهد:

PS1="[\u@\h \w]\$ "
[root@ip-192.168.1.1 /home/user]$ 


خروجی آن به ترتیب نام یوزر - نام ماشین - و دایرکتوری که هرلحظه در آن هستید را نمایش خواهد داد.


مقادیری که شما میتوانید به متغیر PS1 اختصاص دهید را در ادامه توضیح خواهم داد:

- t\ : زمان که به فرمت HH:MM:SS می باشد.

- d\ : تاریخ که به فرمت روز ماه و سال می باشد.

- n\ : خط جدید

- s\ : محیط شل حاضر را بیان میکند.

- W\ : دایرکتوری که در آن مشغول به کار هستید را نمایش میدهد.

- w\ : مسیر کامل دایرکتوری که در آن مشغول به کار هستید را نمایش میدهد.

- u\ : نام کاربری را نمایش میدهد.

- h\ : بیانگر hostname ماشینیست که با آن کار میکنید.

- #\ : شماره دستوری که از آن استفاده میکنید را نمایش میدهد که با هر دستور جدید مقدار آن افزایش می یابد.

- $\ : اگر UID برابر با 0 باشد (که بیانگر لاگین شدن شما با یوزر root است) prompt را با شماره کاراکتر مشخص میکند در غیر این صورت از خود کاراکتر $ استفاده میشود.


شما میتوانید تغییرات لازم رابه هر صورتی که مایل هستید انجام دهید و برای خودکار کردن و فعال کردن آن برای همیشه کافیست مقادبر را درون فایل profile. قرار دهید.


وقتی شما دستوری را ناتمام میخواهید اجرا کنید شل منتظر میماند تا شما آن را کامل کنید و علامت آن نیز به صورت پیش فرض < می باشد. اما شما میتوانید این مقدار را در متغیر PS2 تغییر دهید. به عنوان مثال:

$ echo "this is a
> test"
this is a
test
$


حال میخواهیم مقدار این متغیر را تغییر داده م عبارت بالا را مجددا چاپ کنیم:

$ PS2="secondary prompt -> "
$echo "this is a
secondary prompt -> test"
this is a
test
$


متغیرهای محیط

در ادامه به بررسی بخشی از متغیرهای محیط میپردازم:


- DISPLAY‌ : شامل شناسه هایی برای نمایش برنامه هاییست که X11 باید به صورت پیش فرض از آنها استفاده کند.

- HOME : مشخص کننده دایرکتوری خانه یوزریست که با آن کار میکنید.

- IFS : خلاصه ای از Internal Field Separator است که میتوان بوسیله آن کلماتی را جداسازی کرد که معمولا در bash scripting مورد استفاده قرار میگیرد.

- LANG : زبان سیستم محلی پیش فرض را نشان میدهد. همچنین از LC_ALL برای لغو کردن آن استفاده میشود.

- LD_LIBRARY_PATH : در خیلی از سیستم های مبتنی بر یونیکس یک لینک کننده داینامیک وجود دارد که شامل جداکننده ای با کاراکتر : می باشد که لیستی از دایرکتوری های داینامیک لینک شده که shared object هایی که هنگام ساخته شدن پروسه ها بعد از اجرا هستند را در دایرکتوری های دیگر جستجو میکند.

- PATH : مسیر جستجو برای اجرای دستور ها را مشخص میکند. که هر مسیر با : از مسیر دیگر جدا شده است.

- PWD :  متغیری ست که موقعیت شما را در دایرکتوری که در آن هستید نشان میدهد.

- RAND : اعداد تصادفی بین 0 تا 32767 را در هر درخواست نمایش میدهد.

- SHLVL : این متغیر نشان میدهد که آیا دستور built-in در نشست جاری تمام شده است یا خیر.

- TERM : نشان دهنده نوع ترمینال می باشد.

- TZ : بیانگر Time Zone می باشد که میتواند مقادیری چون GMT یا AST و... را بگیرد.

- UID : نشان دهنده آی دی یوزر می باشد.


در ادامه توجه شما رو به تعدادی مثال جلب میکنم:

$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی