امنیت در لینوکس

پیشگفتار :
امروزه در دنیایی متکی بر فناوری اطلاعات زندگی می‌کنیم که هر لحظه به خطر افتادن جریان اطلاعات منجر به بروز خسارت‌های تجاری جبران ناپذیری خواهد شد. امروزه همه به دنبال یک سکوی (Platform) امن‌تر برای اجرای برنامه‌های کاربردی و سروی‌دهنده‌ها هستند. لینوکس حرف‌های زیادی برای گفتن در سمت امنیت دارد. بسیاری از قابلیت‌های امنیتی که در ویندوز وجود ندارند و یا فقط با اضافه کردن نرم‌افزارهای اضافی قابل دسترسی می‌باشند، بطور درونی و

پیش‌گزیده در لینوکس پیاده سازی شده‌اند. لینوکس از ابتدا برای محیط‌های شبکه‌ای و چند کاربره طراحی شده است و همین باعث رعایت مسائل امنیتی از ابتدا در ان شده است، درحالی که ویندوز اینگونه نبوده و درحال حاضر نیز از نظر امنیتی دارای نقاط ضعف فراوانی است. مثلا یک برنامه مخرب با استفاده از همین ضعف‌های امنیتی می‌تواند کل سیستم‌عامل را نابود کند، ولی در صورتی که مورد مشابهی در لینوکس وجود داشته باشد، حداکثر به دایرکتوری خانگی کاربر اجرا کننده آسیب خواهد رسید، نه کل سیستم‌عامل.

 

مقدمه :
اینطور نیست که لینوکس فاقد هر گونه اشکال امنیتی باشد، خیر، ولی باز بودن کد منبع آن باعث می‌شود تا بسیاری از اشکالات امنیتی پیش از ایجاد خسارت و در مراحل توسعه و برنامه نویسی برنامه بر ملا شده و رفع شوند. در صورتی که اشکالی نیز در برنامه‌های منتشر شده یافت شود، بدلیل موجود بودن کد منبع سریعا برطرف می‌گردد. در صورتی که در سیستم عامل ویندوز شما باید منتظر مایکروسافت بمانید و بمانید و بمانید. سیستم‌عامل ویندوز دارای اشکالات امنیتی بسیاری است که به راحتی هم کشف نمی‌شوند و هنگامی کشف می‌شوند که خسارات جبران ناپذیری در اثر حمله از طریق آن ضعف‌های امنیتی رخ دهد که امثال آنرا شاهد هستیم.

می‌توان ادعا کرد که تقریبا هیچ ویروسی برای لینوکس وجود ندارد و این درحالی است که سالیانه بیش از ۱۰۰۰ ویروس و کرم مختلف برای سیستم‌عامل ویندوز ایجاد می‌شود. این بخاطر عدم گسترده بودن لینوکس نیست (حدود ۷۰ درصد از سایت‌های وب در جهان بر روی سیستم‌عامل لینوکس و سرویس‌دهنده وب آپاچی درحال اجرا هستند) بلکه بدلیل وجود حفره‌های امنیتی متعدد ویندوز و سیاست انحصار گرایی مایکروسافت است. یعنی چه؟ مایکروسافت طوری رفتار و سیاست گذاری کرده است که مشتریان خود را تنها به محصولات خودش عادت دهد. بسیاری از کاربران ویندوز از اینترنت اکسپلورر و آتلوک برای مرور وب و پست الکترونیک استفاده می‌کنند. من به عنوان یک ویروس نویس، می‌دانم که اگر ویروسی را برای کاربران ویندوز بنویسم، بر روی کامپیوترهای ۹۰ درصد آنها اثر

خواهد کرد. چون اکثرا از IE و Outlook استفاده می‌کنند. ولی در لینوکس چطور؟ در لینوکس شما طیف وسیعی از انتخاب و عدم اجبار دارید. من از مرورگر موزیلا استفاده میکنم. دوستی دارم که Konqueror را ترجیح می‌دهد. دیگری از Opera استفاده می‌کند. من از Kmail استفاده می‌کنم. دوستم از Evolution، دیگری از Pine و بعدی از Mutt و برادرم هم از Mozilla Mail. من فقط می‌توانم برای یکی از اینها ویروس بنویسم چون روی بقیه کار نخواهد کرد و عملا میزان اثر آن انداک خواهد بود. ضمنا هیچیک از ویروس‌هایی که برای ویندوز نوشته شده‌اند، بر روی لینوکس کار نمی‌کنند.

فصل اول
کلیات بحث

لینوکس : تعدد سکوهای اجرایی
لینوکس برخلاف ویندوز بر روی تعداد زیادی از سکوهای مختلف سخت‌افزاری اجرا می‌شود و شما حتی قادرید آنرا برای کار بر روی سکوی مورد نظرتان تغییر دهید. این قابلیت، لینوکس را برای بکارگیری در سخت‌افزارهای درونه‌ای (Embedded) بسیار مناسب می‌سازد. هسته ۲٫۶ لینوکس که بتازگی ارائه شده است، این امکان را فراهم می‌سازد تا لینوکس را بر روی دستگاه‌های بسیار کوچک و یا ابر رایانه‌های بسیار بزرگ اجرا نمایید. اصلا ویندوز می‌تواند؟

لینوکس : گسترده‌ترین تنوع در کاربرد
لینوکس را می‌توانید برای انجام وظایف بسیار متعددی بکار بگیرید. از دستگاه چک کردن اتصالات شبکه، دیوار آتش، مسیریاب (Router) شبکه، سرویس‌دهنده‌های مختلف مانند وب، بانک اطلاعاتی، فایل، چاپ و…، میزهای کار (Desktop)، ایستگاه‌های کاری (Workstations) و… سیستم‌عامل لینوکس حتی این امکان را دارد که از آن بتوان به صورت یک سیستم زنده و پرتابل استفاده کرد. به این معنی که کل سیستم‌عامل از روی یک دیسک CD اجرا شود و شما آنرا با خودتان جابجا کنید و میزکار و تنظیماتتان را همراه خودتان منتقل کنید. علاوه بر این، این قابلیت برای رفع اشکال و نمایش آن نیز بسیار مفید است.

لینوکس : تنوع در انتخاب
بدلیل آزاد بودن سیستم‌عامل لینوکس، هر گروه یا موسسه تجاری، یک نسخه خاص از آن که به توزیع یا پخش (Distribution) معروف هستند، منتشر ساخته است. این توزیع‌های مختلف همگی لینوکس هستند، ولی هریک معمولا برای یک یا چند امر خاص مانند سرویس‌دهنده، دیوار آتش، میزکار و… طراحی شده‌اند و هریک قابلیت‌ها و بهینه سازی‌ها خاص خودشان را به کاربران ارائه می‌کنند. کاربران در این میان آزادی انتخاب زیادی داشته و می‌توانند چیزی که کاملا نیازشان را برطرف می‌کند، انتخاب کنند. چیزی که در ویندوز نمی‌توان مفهومی برای آن پیدا کرد.

لینوکس : سیستم‌عاملی حرفه‌ای
لینوکس یک سیستم‌عامل حرفه‌ای است. یعنی ممکن است یک کاربر کاملا غیر فنی برای مدیریت آن و انجام برخی از تنظیمات سخت‌افزاری دچار مشکل شود و نتواند به راحتی این کار را انجام دهد. البته برخی از توزیع‌های لینوکس این امور را بسیار راحت (و حتی راحت‌تر از ویندوز) کرده‌اند، ولی با این حال به طور کلی، لینوکس یک سیستم‌عامل حرفه‌ای است که در عین سادگی، از پیچیدگی‌های فنی زیادی برخوردار است. البته تمام کاربران لازم نیست این امور را

بدانند. مثلا یک کارمند دفتری که اموری مانند تایپ و حسابداری را با کامپیوترش انجام می‌دهد، ممکن است از نظر فنی تفاوتی را احساس نکند، ولی لینوکس خوراکی ۴ ساله برای کاربران خوره فراهم می‌سازد! برخلاف ویندوز، نکات بی‌پایانی برای یادگیری در لینوکس وجود دارد. این سیستم‌عامل ۴ سال به راحتی شما را مشغول خواهد کرد و می‌توانید مطمئن باشید پس از آن بازهم مطالب جدیدی برای یادگیری وجود خواهند داشت! پس خوره‌های کامپیوتری از آن لذت وافری خواهند برد و هرگز آنرا رها نخواهند کرد.

برخلاف ویندوز، در لینوکس راحت‌تر هستید تا بسیاری از کارهای پیکربندی و سیستمی را از خط فرمان بسیار قدرتمند و عالی آن انجام دهید. با اینکه برای بسیاری از امور مانند ویندوز ابزارهای گرافیکی طراحی شده است، یک کاربر حرفه‌ای واقعا از خط فرمان لینوکس لذت خواهد برد. خط فرمان ویندوز را اصلا می‌توان خط فرمان نامید؟

لینوکس : بهشت برنامه نویسان!
لینوکس را بهشت برنامه نویسان نامیده‌اند. برخلاف ویندوز که اکثر ابزارهای برنامه نویسی روی آنرا باید جداگانه نصب و حتی خریداری نمایید، لینوکس به همراه تمامی ابزارهای برنامه نویسی مورد نيازتان و با هر زبانی که فکر کنید ارائه می‌شود. کافی است آنرا نصب کنید و کار برنامه نویسی‌تان را با ابزارهای دلخواهتان شروع کنید.

لینوکس : یک جعبه ابزار کامل
لینوکس برای کاربران حرفه‌ای، یک جعبه ابزار کامل به شما می‌رود که در آن تمامی ابزارهای مورد نیاز مانند برنامه‌های اینترنتی، ابزارهای امنیتی مانند ابزارهای آزمایش شبکه، ابزارهای برنامه نویسی، هزاران صفحه کتاب و راهنما در آن پیدا خواهید کرد. ابزارهایی که در اختیارتان قرار دارد چنان متنوع هستند که می‌توانید ۹۰ درصد اطمینان داشته باشید که پس از نصب آن به چیز دیگری نیاز نخواهید داشت.

لینوکس : یکی از زیباترین دستاوردهای بشری
لینوکس در سایه همکاری و تبادلات علمی هزاران نفر در سرتاسر جهان ایجاد شده و توسعه یافته است. این همکاری چنان گسترده و زیبا بوده و هست، که به سیستم‌عامل لینوکس لقب «زیباترین دستاورد همکاری جمعی بشر» داده شده است. فرهنگ حاکم در جامعه لینوکس و بازمتن، فرهنگ کمک، اشتراک اطلاعات و تلاش برای بهبود هرچه بیشتر محصولات و «انجام هرکاری که از دستت برمی‌آید» است. هرکس که می‌خواهد با این سیستم‌عامل کار کند، باید تمامی دیدگاه‌ها و عقاید قبلی خود را درباره نرم‌افزارها و سیستم‌عامل کنار گذاشته و با یک دیدگاه جدید و طرز فکر متحول شده وارد دنیای لینوکس شود، زیرا با فرهنگ حاکم متفاوتی روبرو خواهد بود. لینوکس نوید دهنده آزادی است…

پیش به سوی لینوکس
روز به روز شاهد گسترش سیستم‌عامل لینوكس و فناوری‌های بازمتن (Open Source) در سرتاسر جهان هستیم. متاسفانه به دلیل اینکه کشور ما یک کشور مایکروسافتی است، تاکنون اقدامات کمی در رابطه با معرفی سیستم‌عامل لینوكس و فناوری‌های بازمتن و مزایای آن انجام شده است.

درحالی که بسیاری از کشورهای جهان در حال انتقال سیستم‌های خود به سیستم‌عامل لینوكس بوده، لینوکس را در مدارس خود گسترش داده و در حال تربیت نسلی آشنا با این سیستم‌عامل هستند، مسئولین یکی از بانکها با افتخار اعلام می‌کند که سیستم‌های خود را به ویندوز ۲۰۰۰ منتقل نموده است و یا مسئولین آموزش و پرورش اعلام می‌کنند که تا وقتی مایکروسافت وجود دارد، ما از محصولات آن استفاده خواهیم کرد. شاید اکنون ما ویندوز و آفیس را به قیمت ۲۰۰۰ تومان خریداری می‌کنیم، ولی تا سال ۲۰۰۸ که به سازمان تجارت جهانی خواهیم پیوست، دیگر خبری از ویندوز‌های ۲۰۰۰ تومانی نخواهد بود و آن هنگام است که پول نفت ما که متعلق به آیندگان بوده و باید صرف آبادانی این کشور شود، به جیب مایکروسافت سرازیر خواهد شد.

ما چه چیزی از پرو، برزیل، اسپانیا، چین، آلمان، ژاپن، نروژ، ویتنام و … کم داریم؟ مگر آنها نتوانستند با این سیستم کار کنند؟ مگر این سیستم جواب خود را پس نداده و سیستمی است نا مطمئن که همه ما از آن فراری هستیم؟ به هیچ وجه اینگونه نیست.

فصل دوم
پوسته فرمان

ظاهر پوسته فرمان
در صورتی که لینوکس شما فاقد محیط گرافیکی است و یا اکنون محیط گرافیکی آن در حال اجرا نیست، شما باید دستورات خود را از طریق پوسته فرمان به سیستم عامل ارسال کنید. نخستین چیزی که در پوسته فرمان مشاهده میکنید، اعلان فرمان است که بصورت علامت $ میباشد. اعلان فرمان برای کاربر ریشه بصورت # است. در بیشتر سیستمهای لینوکس قبل از اعلان فرمان نام کاربری شما و نام کامپیوترتان قرار میگیرد که بصورت زیر نشان داده میشود :
[alan@memphis home]$

امکان نمایش کاراکترای مورد نیازتان بجای کاراکترهای فوق وجود دارد. چگونگی این کار بعدا شرح داده خواهد شد. محیط پوسته فرمان امکانات زیادی دارد.
تایپ دستورات در محیط پوسته فرمان بسیار آسان میباشد. برای اینکه با محیط پوسته فرمان آشنا شوید، سعی کنید با دستوراتی که در زیر بررسی میشوند، تمرین کنید.

نکته: در صورتی که هنگام راه اندازی سیستم، بجای پوسته فرمان محیط گرافیکی لینوکس اجرا میشود، برای تایپ فرامین پوسته باید از Terminal یا Konsole استفاده کنید. میتوانید در منوی run، فرمان xterm را نیز تایپ کنید.
در مثالهای زیر علامتهای $ و # نشان دهنده اعلان فرمان میباشند. پس تایپ هر فرمان باید کلید Enter را فشار دهید و خروجی آن فرمان در خطوط پس از آن نمایش داده خواهد شد.

بررسی نشست ورود به سیستم
هنگامی که وارد سیستم لینوکس میشوید، برای سیستم دارای یک هویت خاص هستید. این هویت شامل نام کاربری شما، نام گروه شما، شماره کاربری شما و شماره گروه شماست. همچنین لینوکس اطلاعات زمان ورود به سیستم، مدت حضور، مدت بیکاری و محل ورود شما به سیستم را نگهداری میکند. (حواستان را جمع کنید!)

برای بدست آوردن اطلاعات در مورد هویت کاربری خودتان در جلوی اعلان فرمان دستور زیر را تایپ کنید. خروجی آن در زیر آن نشان داده شده است:
$ id
uid=500(Alan) gid=500(Alan) groups=500(Alan)

خروجی فرمان نشان میدهد که نام کاربر Alan بوده که عضو گروه Alan است و شماره های کاربری و گروه آن ۵۰۰ میباشد.
با استفاده از فرمان who میتوانید اطلاعاتی در مورد نشست جاری بدست آورید. در زیر این فرمان به همراه خروجی آن نشان داده شده است:
$ who
Alan :0 Apr 23 08:46
همچنان که می بینید، در خروجی نام کاربر جاری، زمان و تاریخ ورود به سیستم نمایش داده شده است.

بررسی دایرکتوری ها و مجوزهای فایلها
در لینوکس مسیر جاری به مسیری گفته میشود که کاربر در آن لحظه در آن قرار دارد. هنگامی که وارد سیستم میشوید، لینوکس شما را در دایرکتوری خانگی تان قرار میدهد. هنگامی که دستور باز کردن یا ذخیره کردن فایلی را صادر میکنید، لینوکس مسیر جاری را بعنوان محل آن فایل فرض کرده و از آنجا آنرا باز کرده و یا ذخیره میکند. ساختار سیستم فایل لینوکس بعدا شرح داده خواهد شد و لازم نیست نگران آن باشید. برای نمایش دایرکتوری جاری فرمان زیر را جلوی خط فرمان تایپ کنید. خروجی آن در زیر آن نمایش داده شده است:

$ pwd
/usr/bin
در مثال بالا مسیر جاری usr/bin است. برای یافتن مسیر دایرکتوری خانگی خود، فرمان زیر را تایپ کنید:
$ echo $HOME
/home/Alan

همچنان که در خروجی ملاحضه میکنید، مسیر دایرکتوری خانگی شما نمایش داده شده است. برای اینکه به دایرکتوری خانگی خود باز گردید، کافی است به سادگی فرمان زیر را تایپ کنید:
$ cd

این فرمان، شما را به دایرکتوری خانگی تان باز می گرداند. خوب بد نیست ببینیم که چه چیزهایی در دایرکتوری خانگی وجود دارد. برای نمایش محتویات یک دایرکتوری، باید از فرمان ls استفاده نمایید. در صورتی که در دایرکتوری خانگی خود قرار ندارید میتوانید مسیر کامل آنرا تایپ کنید. در صورتی که فرمان ls را بدون هرگونه دایرکتوری تایپ کنید، محتویات مسیر جاری نمایش داده خواهد شد. گزینه a تمام فایلهای مخفی را نمایش میدهد و گزینه l برای نمایش جزئیات کامل فایلها بکار میرود. هنگام تایپ یک فرمان میتوانید گزینه های متعدد آنرا کنار هم تایپ کنید.در زیر این دستور به همراه یک خروجی مثال نشان داده شده است:

$ ls -la /home/Alan
total 46740
drwx—— 47 Alan Alan 4096 Apr 23 11:09 .
drwxr-xr-x 8 root root 4096 Mar 12 17:51 ..
-rw——- 1 Alan Alan 616581 Apr 18 23:29 779-red_hat_linux_9.tar.gz
drwxr-xr-x 2 Alan Alan 4096 Mar 20 11:15 .acrobat

drwx—— 2 Alan Alan 4096 Mar 20 11:15 .adobe
drwx—— 2 Alan Alan 4096 Mar 12 17:04 .adonthell
drwxr-xr-x 2 Alan Alan 4096 Feb 14 13:19 .anjuta
-rw——- 1 Alan Alan 18325 Apr 23 00:36 .bash_history
-rw-r–r– 1 Alan Alan 24 Aug 24 2002 .bash_logout
-rw-r–r– 1 Alan Alan 191 Aug 24 2002 .bash_profile

هنگامی که از سوئیچ l برای نمایش جزئیات بیشتر استفاده میکنید، چیزی بیش از سایز فایلها و دایرکتوری ها نمایش داده میشود. دایرکتوری جاری (.) و دایرکتوری والد (..) در بالای لیست قرار می گیرند. یعنی در حقیقت نقطه نشان دهنده دایرکتوری home/Alan و دونقطه نشاندهنده دایرکتوری home/ است. بخش ابتدایی لیست نشاندهنده مجوزهای هر فایل است. سایر اطلاعات نمایش داده شده عبارتند از اندازه فایل به بایت و تاریخ و ساعتی که فایل برای آخرین بار تغییر کرده است.

بررسی فعالیت سیستم
لینوکس علاوه بر چندکاربره بودن، سیستم عاملی است چند وظیفه (multitasking) . چند وظیفه بودن به این معنی است که برنامه های زیادی میتوانند در یک زمان اجرا شوند. هر برنامه در حال اجرا یک پروسه نامیده میشود.لینوکس فرامینی برای نمایش پروسه های در حال اجرا، نمایش استفاده از منابع سیستمی و متوقف کردن پروسه های در مواقع لزوم دارد.
مرسوم ترین ابزار برای بررسی پروسه های در حال اجرا، دستور ps است. با این دستور، میتوانید بررسی کنید که چه برنامه هایی در حال اجرا هستند ، از چه منابعی استفاده میکنند و چه کسی در حال اجرای آنهاست. در زیر یک خروجی مثال از این فرمان نشان داده شده است :
$ ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Alan 1152 0.0 0.5 4476 1348 pts/0 S 17:39 0:00 bash
Alan 1831 0.0 0.2 2580 664 pts/0 R 18:14 0:00 ps au

در مثال بالا، گزینه a، برای نمایش تمام پروسه هایی که به ترمینال فعلی شما مربوط است و گزینه u برای نمایش نام کاربری و زمانی که برنامه آغاز به کار کرده است، بکار میرود. مفهوم ترمینال به زمانهای قدیم باز میگردد. در آن زمان کاربران روی ترمینالهای مبتنی بر متن کار میکردند و هر ترمینال نشان دهنده یک نفر بود. اکنون شما میتوانید روی صفحه مانیتور خود تعداد زیادی ترمینال داشته باشید. این کار بوسیله باز کردن تعدادی پنجره ترمینال امکان پذیر است.
در مثال بالا، چیز خاصی اتفاق نیافتاده است. خروجی نشان میدهد که کاربری به نام Alan ، از برنامه های bash و ps در حال استفاده است. ستون TTY یا ترمینال، نشان دهنده ترمینای است که کاربر با آن به سیستم وارد شده است و ستون STAT نشاندهنده وضعیت پروسه است. R نشاندهنده پروسه در حال اجرا و S نشاندهنده پروسه در حال خواب میباشد.

ستون USER نام کاربری که پروسـه را شروع کرده نمایش میدهد. هر پروسه توسط یک عدد یکتا به نام شماره پروسه (Process ID) مشخص میشود. از این شماره هنگام از میان بردن یا اصطلاحا kill کردن پروسه استفاده میشود. ستونهای %CPU و %MEM نشاندهنده مقدار پردازنده و حافظه ای هستند که پروسه ها استفاده کرده اند. ستون VSZ یا Virtual Set Size نشاندهنده سایز پروسه image به کیلوبایت و RSS یا Resident Set Size نشاندهنده سایز پروسه در حافظه است. ستون START نشاندهنده زمان آغاز پروسه و ستون TIME نشاندهنده زمان سیستم استفاده شده برای پروسه است.

بسیاری از پروسه هایی که در کامپیوتر در حال اجرا هستند، به یک ترمینال خاص مربوط نیستند. یک سیستم عادی مبتنی بر لینوکس ، دارای پروسه هایی فراوانی است که در پس زمینه اجرا میشوند. پروسه های پس زمینه پروسه هایی هستند که اعمالی مانند ثبت فعالیتهای سیستم یا گوش کردن به پورتها برای اطلاعات واصله از شبکه را انجام میدهند. این پروسه ها هنگام بوت شدن سیستم آغاز به کار کرده و هنگام خاموش کردن سیستم ، به کار خود پایان میدهند. برای نمایش تمام پروسه های در حال اجرا بر روی کامپیوترتان باید از فرمان زیر استفاده کنید:
$ ps aux | less

قسمت less | به این دلیل به فرمان اضافه شده است که در صورتی که تعداد پروسه ها از یک صفحه بیشتر شد، امکان نمایش صفحه به صفحه آن وجود داشته باشد. به این فرایند لوله بندی (pipe) فرمان گویند که به معنی هدایت خروجی یک فرمان برای ورودی فرمان دیگر است.

خروج از پوسته فرمان
هنگامی که کارهای خود را انجام دادید و مایل بودید از پوسته فرمان خارج شوید، کافی است که کلیدهای Ctrl+D را فشار دهید. در صورتی که در حالت متنی لینوکس را بوت کرده اید، کافی است فرمان logout یا exit را تایپ کنید.
خوب، تا اینجا با چند فرمان که به شما کمک میکند از سیستمتان اطلاعات لازم را به دست آورید، آشنا شدید. صدها فرمان دیگر نیز وجود دارند که میتوانید آنها را آزمایش کنید. این فرامین در مسیرهای usr/bin و bin قرار دارند. همچنین فرامین مدیریت سیتم در مسیرهای usr/sbin و sbin قرار دارند. بیشتر این فرامین در ادامه این فصل توضیح داده خواهند شد.

درک دقیق تر پوسته فرمان لینوکس
قبل از اینکه آیکونها و پنجره ها روی صفحه کامپیوترها پدیدار شوند، کاربران برای کار کردن با کامپیوترها باید فرمانهایی را تایپ میکردند. در سیستمهای مبتنی بر یونیکس که لینوکس هم یکی از آنهاست، برنامه ای که برای تفسیر و مدیریت فرمانها ایجاد شده است، پوسته فرمان (Command Shell) نام دارد.
پوسته فرمان راهی برای اجراکردن برنامه ها، کارکردن با فایلها، کامپایل کردن برنامه ها و مدیریت کامپیوتر ایجاد میکند.
با اینکه کارکردن با ابزارهای گرافیکی آسان تر از کار کردن با پوسته فرمان است، ولی بیشتر کاربران حرفه ای لینوکس ترجیح میدهند تا بجای ابزارهای گرافیکی از پوسته فرمان استفاده کنند. زیرا برای انجام بسیاری از کارها مانند پیکربندی های سیستم ، پوسته فرمان بسیار قدرتمند تر از ابزارهای گرافیکی است. حتی برخی کاربران قدیمی یونیکس و لینوکس به ندرت از محیطهای گرافیکی برای انجام کارهایشان استفاده میکنند.

پوسته فرمانی که در این راهنما توضیح داده خواهد شد، bash نام دارد. نام آن برگرفته از Bourne Again Shell است. پوسته bash از نخستین پوسته سیستمهای یونیکس که sh یا Bourne Shell نام داشت، ایجاد شده است و یکی از پر کاربرد ترین پوسته های فرمان به شمار میرود. البته پوسته های دیگری نیز وجود دارند که از آنها استفاده میشود که میتواند از آنها csh یا C Shell که در سیستمهای یونیکس BSD استفاده میشود و ksh یا Korn Shell که بیشتر در Unix System V استفاده میشود، نام برد. لینوکس همچنین دارای پوسته های tcsh و ash نیز میباشد.
هنگامی که استفاده از یک پوسته فرمان را در لینوکس فرا بگیرید، به آسانی میتوانید پوسته های دیگر را نیز یاد بگیرید. در صورتی که هرگونه مشکل یا سوالی داشتید، میتوانید به صفحه manual آن پوسته مراجعه کنید.
نکته : برای نمایش صفحه manual هر فرمان کافی است در خط فرمان لینوکس دستور زیر را تایپ کنید:
$ man <command>

در لینوکس ، پوسته bash کاملا سازگار با پوسته فرمان sh میباشد.

استفاده از پوسته فرمان در لینوکس
هنگامی که یک فرمان را در پوسته فرمان تایپ میکنید، میتوانید به آن کاراکترهای دیگری اضافه کنید تا چگونگی کارکرد دستور مورد نظر را تغییر دهید. علاوه بر خود دستور، موارد دیگری که میتوانید در خط فرمان تایپ کنید عبارتند از :
-گزینه ها (Options) : اکثر فرامین دارای یک یا چند گزینه هستند که با اضافه کردن و بکار بردین این گزینه ها میتوانید نحوه رفتار فرمان را تغییر دهید. برای مثال همانطور که قبلا هم دیدید، در فرمان ls -la گزینه l برای نمایش لیست مشروح فایلها و دایرکتوری ها و گزینه a برای نمایش فایلهای مخفی که با نقطه شروع میشدند، بکار رفت.ضمنا گزینه هایی که مخفف یک کلمه هستند با یک – شروع میشوند در صورتی که گزینه هایی که یک کلمه کامل هستند با — شروع میشوند . برای مثال ls –help .
– آرگومان ها (Arguments): بسیاری از فرامین، علاوه بر گزینه ها ، آرگومانهایی را نیز قبول میکنند. یک آرگومان یک بخش شامل نوعی اطلاعات مانند مسیر یا نام فایل میباشد. برای مثال در فرمان ls -la /home بخش home آرگومان فرمان ls به شمار میرود.
– متغییر های محیطی (Environment Variables): خود پوسته اطلاعاتی را در بر دارد که برای کاربر مفید است. به این اطلاعات متغییرهای محیطی می گویند. برای مثال متغییر SHELL نمایانگر نوع پوسته مورد استفاده ، SP1 نشاندهنده اعلان فرمان و MAIL نشاندهنده محل صندوق پستی شما است :

$ echo $SHELL
/bin/bash
$ echo $MAIL
/var/spool/mail/Alan

توجه داشته باشید که برای فراخوانی متغییر ها به ابتدای آنها علامت $ اضافه میشود.
نکته : برای نمایش تمام متغییرهای محیطی میتوانید از دستور declare استفاده کنید. برای نمایش یک متغییر خاص میتوانید همانند بالا از دستور echo استفاده کنید.

– کاراکترهای ویژه (Metacharacters):
کاراکترهایی وجود دارند که دارای معنای خاصی برای پوسته فرمان هستند. این کاراکترها میتوانند برای هدایت خروجی یک فرمان به یک فایل ، لوله بندی خروجی یک فرمان و یا اجرای فرمان در پس زمینه استفاده شوند. کاراکترهای ویژه در این فصل توضیح داده خواهند شد.
برای صرفه جویی در مقدار تایپ و آسانتر شدن کار ، پوسته فرمان دارای ویژگیهایی است که دستورات قبلی تایپ شده را نگهداری میکند. همچنین شما میتوانید برای آسانتر شدن، نامهای مستعاری برای دستورات ایجاد کنید. پوسته فرمان دستوراتی که قبلا وارد کرده اید ذخیره میکند و میتوانید بجای تایپ مجدد دستورات ، دستورات قبلی را فراخوانی نمایید. این موضوع نیز جلوتر بررسی خواهد شد.

در صورتی که پوسته فرمان را تغییر داده نباشید، پوسته bash پوسته ای است که همراه با لینوکس استفاده میکنید. پوسته bash از نظر امکانات و قابلیتها قویتر از انواع دیگر پوسته های فرمان است. در این فصل بیشتر قابلیتهای پوسته فرمان bash بررسی خواهند شد. ولی در صورتی که نیاز به اطلاعات بیشتری داشتید، میتوانید از دستور man bash برای نمایش راهنمای پوسته bash استفاده کنید.

یافتن فرمانهای لینوکس
در صورتی که بدانید که یک دستور در کجای سیستم فایل لینوکس قرار دارد، میتوانید آنرا با تایپ مسیر کامل اجرا نمایید. برای مثال برای اجرای دستور date :
$ /bin/date

البته در صورتی که دستوری در مسیرهای سخت و طولانی قرار داشته باشد ، این کار دشوار خواهد بود. بهترین راه حل این مشکل، نگهداری فرامین در یک دایرکتوری خاص است. سپس میتوانید این دایرکتوری را به مسیر جستجوی پوسته فرمان خود اضافه کنید تا هنگام تایپ یک فرمان، خود پوسته بطور خودکار دایرکتوری فوق را برای وجود فرمان کاوش کند :
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/Alan/bin

خروجی فرمان فوق مسیرهای تعریف شده برای پوسته فرمان را برای یک کاربر خاص نشان میدهد. همانطور که می بینید دایرکتوری ها توسط یک کلون از هم جدا شده اند. بیشتر دستوراتی که همراه با لینوکس ارائه میشوند، در دایرکتوری های bin ، usr/bin یا usr/local/bin قرار دارند. دستورات گرافیکی که با محیطهای گرافیکی استفاده میشوند در مسیرهای usr/bin/X11 و usr/X11R6/bin قرار دارند. آخرین دایرکتوری نشان داده شده در خروجی فرمان، در دایرکتوری خانگی کاربر قرار دارد.

نکته : در صورتی که مایلید دستوراتی که خود ایجاد میکنید مستقیما در خط فرمان اجرا شوند، میتوانید یک دایرکتوری به نام bin در دایرکتوری خانگی خود ایجاد کنید و این دستورات را در آنجا ذخیره کنید. لینوکس این دایرکتوری را بطور خودکار به مسیرهای تعریف شده اضافه میکند.

در صورتی که شما کاربر ریشه هستید، دستورات مربوط به مدیریت سیستم در دایرکتوری های sbin و usr/sbin قرار دارند.
ترتیب دایرکتوری های موجود در مسیرهای تعریف شده نیز مهم است. این دایرکتوری ها از چپ به راست بررسی میشوند. بنابراین اگر دستوری به نام foo هم در دایرکتوری usr/bin و هم در دایرکتوری bin قرار داشته باشد، اولی اجرا خواهد شد. برای اجرای دستور دوم foo باید مسیر کامل آنرا تایپ کنید و یا مسیرهای تعریف شده را تغییر دهید. چگونگی این کار جلوتر توضیح داده خواهد شد.

تمام فرامینی که تایپ میکنید، در دایرکتوری های مسیرهای تعریف شده شما قرار ندارند. برخی فرامین بصورت درونی در پوسته فرمان گنجانده شده اند. در صورتی که برای یک فرمان خاص یک نام مستعار همراه با گزینه ها و آرگومانهای خاص ایجاد کنید، ابتدا آن اجرا میشود. همچنین راههایی برای ایجاد توابعی که شامل چندی فرمان هستند نیز وجود دارد. ترتیب بررسی محلهای مختلفی که پوسته فرمان برای پیداکردن یک دستور انجام میدهد به شرح زیر است :

– نامهای مستعار :
نامهایی که با دستور alias ایجاد شده اند و نشانگر یک دستور به همراه گزینه ها و آرگومانهای احتمالی میباشند.
– کلمات رزرو شده پوسته فرمان :
کلماتی هستند که برای استفاده های مخصوص رزرو شده اند. بیشتر این کلمات دستوراتی هستند که معمولا در زبانهای برنامه نویسی استفاده میشوند مانند do ، while ، case و غیره.

– توابع :
دسته ای از دستورات که همراه هم در پوسته فرمان اجرا میشوند.

– دستورات درونی :
دستوراتی که درون خود پوسته فرمان گنجانده شده اند.

– دستورات سیستم فایل :
دستورات معمولی که بصورت فایلهایی در سیستم فایل لینوکس قرار دارند. مسیرهای این دستورات در متغییر محیطی PATH گنجانده شده است.

نکته : برای نمایش لیستی از فرامین درونی bash و گزینه های آن میتوانید از دستور help استفاده کنید. برای نمایش اطلاعات بیشتر در مورد دستور مورد نظر از دستور info بعلاوه نام دستور مورد نظر استفاده کنید.

برای اینکه بفهمید که یک دستور در کجا قرار دارد، میتوانید از دستور type برای این منظور استفاده کنید. برای مثال :
$type bash
bash is /bin/bash
از دستور بالا برای یافتن محل فرامیت دیگری مانند which، case و … استفاده کنید. در صورتی که دستوری در چندین دایرکتوری قرار دارد، میتوانید با اضافه کردن گزینه a به دستور type، تمام محلهای وجود آنرا چاپ کنید.
نکته :گاهی اوقات هنگام اجرای یک فرمان با خطاهایی مانند “این فرمان پیدا نشد” و یا “شما مجوز استفاده از این فرمان را ندارید” مواجه میشوید. برای مورد اول بررسی کنید که دستور را صحیح تایپ کرده اید و مسیر آن در مسیر PATH شما قرار داشته باشد. ممکن است فرمان مورد نظر اجرایی نباشد. در بخش کارکردن با فایلها، چگونگی اجرایی کردن یک فایل تشریح خواهد شد.

اجرای مجدد یک فرمان
تصور کنید یک فرمان بسیار طولانی را تایپ کرده اید و پس از اجرای آن متوجه میشوید که مرتکب اشتباه شده اید. مطمئنا چیزی دردآور تر از این وجود ندارد! پوسته فرمان دارای قابلیتهایی است که میتوانید بوسیله آن دستوراتی که قبلا اجرا کرده اید فراخوانی کرده و در صورت لزوم پس از اصلاح یا تغییر وحتی بدون تغییر آنها را مجددا اجرا کنید.
پوسته فرمان دارای قسمتی به نام تاریخچه (History) است که فرامینی که قبلا وارد کرده اید را نگهداری میکند. شما میتوانید این فرامین را از تاریخچه فراخوانی کرده و استفاده کنید.

ویرایش خط فرمان
در صورتی که در تایپ یک دستور مرتکب اشتباه شده اید، میتوانید به آسانی آنرا فراخوانی کرده و مجددا پس از ویرایش ، آنرا اجرا کنید. میتوانید از برخی کلیدهای میانبر برای راحت تر کردن این کار استفاده کنید. مثلا کلیدهای Ctrl+a اشاره گر را به ابتدای فرمان و Ctrl+E به انتهای فرمان حرکت می دهد. همین کار را کلیدهای Home و End نیز انجام میدهند. ویرایش کردن فرمان مانند کارکردن در ویرایش گرهای متنی است و بسیار ساده است. پس اتمام ویرایش دستور، کافی است کلید Enter را برای اجرای آن فشار دهید.

کامل کردن خودکار فرمان
برای اینکه مقدار تایپ شما به حداقل برسد، پوسته فرمان فرمان ناقص شما را به روشهایی کامل میکند. . برای بکارگیری این قابلیت کافی است که ابتدا چند حرف اول فرمان مورد نظر را تایپ کرده و کلید tab را فشار دهید. در زیر برخی موارد را که میتوانید ناقص تایپ کنید می بینید :

– متغییر های محیطی :
در صورتی که متن با یک علامت دلار شروع شود، با فشردن کلید tab ، پوسته فرمان آنرا با یک متغییر محیطی کامل خواهد کرد.

– نام کاربری :
در صورتی که متن بوسیله یک کاراکتر ~ شروع شود، پوسته فرمان آن را بوسیله یک نام کاربری کامل خواهد کرد.
– دستورات، نامهای مستعار یا توابع :
در صورتی که متن با یک کاراکتر عادی شروع شود، پوسته فرمان آنرا بوسیله یک دستور، نام مستعار یا تابع کامل خواهد کرد.

– نام میزبان :
در صورتی که متن با یک علامت @ شروع شود، پوسته فرمان آنرا بوسیله یک نام میزبان که از فایل etc/hosts می خواند، کامل میکند.
مواقعی وجود دارد که برای کامل کردن یک فرمان چندین گزینه وجود دارد . مثلا چندین متغییر محیطی وجود دارد که با حرف P شروع میشود. در این موارد در صورتی که شما دوبار کلید Tab را فشار دهید و یا کلیدهای Esc+? را فشار دهید، تمام حالتهای ممکن به شما نشان داده میشود :
$ echo $P<tab><tab> or <Esc+?>
$PATH $PPID $PS1 $PS4
$PIPESTATUS $PROMPT_COMMAND $PS2 $PWD

فراخوانی مجدد یک فرمان
پس از اینکه یک دستور را تایپ کردید، همانطوری که قبلا گفتم این دستور بطور کامل در تاریخچه پوسته فرمان ذخیره میشود. برای نمایش محتویات تاریخچه پوسته فرمان میتوانید از دستور history استفاده کنید. در صورتی که پس از آن یک عدد اضافه کنید، به تعداد آن عدد دستورات تایپ شده را نشان خواهد داد :
$ history 5
1023 ls
1024 cd Fonts/
1025 man more
1026 date
1027 history 5
برای فراخوانی دستورات تایپ شده میتوانید از روشهای زیر استفاده کنید:
-کلیدهای مکان نما : از کلیدهای بالا و پایین مکان نما میتوانید برای حرکت کردن در لیست تاریخچه استفاده کنید. بجای آن از کلیدهای Ctrl+n و Ctrl+p نیز میتوانید استفاده کنید.
-کلیدهای Ctrl+r: برای جستجوی آخر به اول یک رشته در تاریخچه استفاده میشود. برای مثال با تایپ یک یا چند حرف، دستوری که دارای آن حروف است نمایش داده میشود.
-کلیدهای Ctrl+s: مشابه بالا ولی جستجو بصورت اول به آخر صورت میگیرد.