-
آموزش Linux Essentials
درود
تصمیم گرفتم که در این تاپیک آموزش Linux Essentials که مقدمه ای برای مدرک LPIC است را شروع کنم.
این آموزش ها فقط برای مدرک LPIC نیست و همه افرادی که دوست دارند لینوکس را یاد بگیرند میتوانند از این آموزش ها استفاده کنند. دقت کنید که سطح آموزش، مبتدی میباشد.
تمامی حقوق این آموزش ( که در واقع برگرفته شده از کتاب Linux Essentials - The LPI introducery programme میباشد) متعلق به انجمن P30World و
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
میباشد.
مطالب این تاپیک:
۱. معرفی لینوکس و توزیع های لینوکسی
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
================================================== =================
۱.معرفی لینوکس و توزیع های لینوکسی
لینوکس توسط دانشجوی فنلاندی، لینوس تروالدز در اوایل دهه ی ۹۰ میلادی ساخته شد. لینوکس بر اساس یونیکس ساخته شد، یونیکس، سیستم عاملی ساخته شده در دهه ۷۰ بود که برای استفاده در رایانه های کوچک طراحی شده بود. لینوکس از ایده ها، استاندارد ها و طراحی یونیکس بهره میبرد اما کد آن کاملا مستقل از یونیکس است.
یکی از مواردی که لینوکس را از سیستم عامل هایی مانند ویندوز و مک متمایز میسازد، این است که این سیستم عامل قدرتمند توسط شرکت خاصی پشتیبانی نمیشود و آزادانه در دسترس است (گاهی اوقات در متن های انگلیسی با کلمه ی free مواجه میشوید که به معنای رایگان نیست بلکه به معنای ازاد است). آزاد بودن آن بدین معناست که هر کس میتواند کد آنرا به رایگان دریافت کند و استفاده کند، یا آنرا از نو بسازد و منتشر کند (حتی غیر رایگان، اما برنامه باید ازاد بماند. در مورد برنامه های ازاد در آینده بیشتر توضیح خواهیم داد)
آنچه که باید بدانید، این است که لینوکس تنها هسته (کرنل) میباشد. به بیان ساده، بخشی از سیستم عامل که وظایفی مانند اختصاص منابع سیستم مانند حافظه به برنامه ها و ... را بر عهده دارد. اما یک سیستم عامل تنها با یک کرنل قابل استفاده نیست و نیاز به برنامه های دیگری نیز دارد. این برنامه ها به همراه کرنل لینوکس در یک بسته بندی به نام "توزیع لینوکسی" منتشر میشوند. پس یک توزیع لینوکس، یک پکیج است که از کرنل لینوکس ، مستندات (Documentation) و برنامه های کاربردی تشکیل شده است. اینکه یک توزیع از چه برنامه های اساسی تشکیل میشود را در آینده خواهید آموخت...
تفاوت ها و شباهت های لینوکس
در واقع سه سیستم عامل قدرتمند، یعنی لینوکس، OSX و ویندوز تنها در جزئیات با یکدیگر تفاوت دارند. هر سه یک محیط گرافیکی به کاربر ارائه میدند که به آنها اجازه میدهد با رایانه به ساده ترین نحو ارتباط برقرار کنند. برنامه های ضروری و مهم برای هر سه در دسترس است. این یک مزیت مهم است که مهاجرت بین این سه سیستم عامل به راحتی میسر باشد.
در کنار محیط گرافیکی، هر سه سیستم عامل یک خط فرمان را نیز ارائه میدهند. در ویندوز و OS X این قابلیت بیشتر به درد مدیران سیستم میخورد و کاربران عادی از آن استفاده نمیکنند، اما در لینوکس، خط فرمان ضروری ترین بخش سیستم عامل است و بسیاری از اعمال به وسیله آن انجام میشوند. خط فرمان در لینوکس (و همچنین OS X) ابزار های کاربردی بسیاری را به کاربران ارائه میدهد .
در لینوکس، یادگیری خط فرمان به اندازه محیط گرافیکی - و حتی بیشتر از آن - اهمیت دارد.
-
۲.تاریخچه ای کوتاه از لینوکس، نرم افزار آزاد، نرم افزار های ازاد معروف
تاریخچه ای کوتاه از لینوکس
لینوکس توسط لینوس تروالدز به وجود آمد، در واقع او به دنبال ساخت هسته یک سیستم عامل نبود، بلکه براس سرگرمی داشت یک شبیه ساز ترمینال که مستقل از سیستم عامل اجرا میشد مینوشت، تا بتواند به سیستم یونیکس دانشگاه دسترسی پیدا کند. این برنامه رشد پیدا کرد و بالاخره به لینوکس تبدیل شد. بسیاری از دانشجویان و بیکاران و گیک ها به توسعه آن کمک کردند. نسخه ۰.۹۹ با مجوز GPL (کمی جلوتر خواهید خواند) منتشر شد (دسامبر ۱۹۹۲) و تقریبا یک سیستم عامل کامل ولی ساده بود. در سال ۱۹۹۶ نسخه ۲.۰ لینوکس با پشتیبانی از پردازنده های چندهسته ای منتشر شد و میتوانست ماژول های کرنل را هنگامی که در حال کار بود بارگذاری کند.
یکی دیگر از ویژگی های نسخه ی ۲.۰، معرفی Tux بود، پنگوئنی که نماد لینوکس بود.
توسعه پروژه لینوکس همچنان ادامه دارد و هم اکنون که این متن را مینویسم آخرین نسخه آن ۴.۴.۴ میباشد.
آزاد یا متن باز؟
در گذشته و همین الان برنامه های رایانه ای به وسیله ی کپی رایت محافظت میشوند. به این معنی که شما نمیتوانید این گونه برنامه هارا بدون اجازه ی صاحبش کپی کنید. تا اینکه ریچارد ام. استالمن که یک پژوهشگر در MIT بود تصمیم گرفت که به جای این شیوه، شیوه ی جدیدی در ارائه نرم افزار و مجوز آن به وجود آورد که بر روی اشتراک گذاری و پیشرفت نرم افزار تمرکز داشت. این پروژه GNU نام گرفت . استالمن پدر برنامه آزاد نام گرفت و برای یک برنامه ی ازاد در توافقنامه ی GNU چهار شرط اصلی تعریف میکنید:
۰: آزادی در اجرای برنامه به هر منظوری
۱: آزادی در مطالعه ی یک برنامه و شیوه کارکرد آن و تغییر آن برای انجام کارهای دلخواه خود
۲: آزادی در انتشار مجدد یک کپی از نرم افزار
۳: آزادی در تغییر و پیشبرد یک برنامه، و انتشار این پیشرفت ها (و به طور کلی نسخه دستخوش تغییر شده) به عموم، بنابراین تمام جامعه از آن سود میبرد.
قطعا برای اینکه یک برنامه ازادی های شماره ۱ و ۳ را به کاربران بدهد باید سورس (متن برنامه) خود را نیز منتشر کند.
اما یک برنامه چگونه میتواند یک برنامه ی ازاد تلقی شود؟ اینکار به وسیله ی مجوز (License) صورت میگیرد، یک سند رسمی که هنگام خرید، دانلود، ... یک برنامه به همراه آن ارائه میشود. برای برنامه های آزاد مجوز های زیادی قابل استفاده میباشند که معروف ترین آنها GPL (General Public License) میباشد. مجوزی که لینوکس تحت آن منتشر میشود. بنابر مجوز GPL، برنامه باید به شکل سورس کد در دسترس قرار بگیرد، میتواند مورد تغییر قرار گیرد و دوباره منتشر شود اما به شرطی که دوباره با مجوز GPL منتشر شود (یعنی نمیتونید برنامه ای رو با مجوز GPL بگیرید و تغییر بدید، اما با مجوز دیگه ای منتشر کنید) ، همچنین بنابر این مجوز میتوان برنامه را به صورت اجرایی هم منتشر کرد (یا فروخت) اما متن برنامه نیز باید به شیوه ای در اختیار قرار گیرد.
برنامه های آزاد معروف
برنامه های آفیس
از این دسته برنامه ها میتوان به
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
،
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اشاره کرد.
گرافیک و چند رسانه ای
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
،
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
,
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای ویرایش تصویر
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای ضبط و میکس صدا
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای ویرایش فیلم
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای مدلینگ و انیمیشن
سرویس اینترنت
بدون لینوکس، دنیای وب غیر قابل تصور است. صدها هزار سرور گوگل با لینوکس کار میکنند و و بسیاری از سرویس های محتوا. از جمله برنامه های ازاد اینترنت میتوان به آپاچی و MySQL اشاره کرد.
-
۳.توزیع های مهم لینوکس، تفاوت میان توزیعها
توزیعهای مهم لینوکس
اگر شخصی بگوید که روی رایانه اش «لینوکس» اجرا میکند، معمولاً منظورش این نیست که کرنل را به تنهایی اجرا میکند، بلکه منظورش این است که یک محیط نرم افزاری بر پایه لینوکس را اجرا میکند که به آن یک توزیع لینوکس میگویند، که معمولاً شامل پوسته (bash)، ابزار های خط فرمان که معمولاً مربوط به پروژه GNUهستند، سرور گرافیک X.Org و یک محیط دسکتاپ مانند KDE و Gnome، و چندین نرمافزار ضروری مانند مرورگر وب، ابزار های آفیس و … میباشد.
یک فرد میتواند به تنهایی تمامی این ابزار ها را گردآوری و نصب کند، اما اکثر کاربران ترجیح میدهند از یک مجموعه نرمافزار پیش ساخته یا به عبارتی دیگر، یک توزیع لینوکس، استفاده کنند.
نخستین توزیع های لینوکس در اوایل ۱۹۹۲ تولید شدند، که البته همه ی آنها متوقف و فراموش شده اند. قدیمی ترین توزیعی که همچنان نیز فعال است، Slackware میباشد که در جولای ۱۹۹۳ برای نخستین بار منتشر شد.
برای اطلاعات بیشتر در مورد توزیعهای لینوکسی میتوانید به وبسایت Distrowatch.com مراجعه کنید.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ردهت در ۱۹۹۳ توسط ACC Corporation پایه گذاری شد. در ۱۹۹۵، باب یانگ، بنیان گذار شرکت، سهام Marc Ewing را که در ۱۹۹۴ توزیعی به نام Red hat Linux را منتشر کرده بود خریداری کرد، و نام شرکت را به Red Hat Software تغییر داد. در ۱۹۹۹ ردهت عمومی شد و و هماکنون میتوان از آن به عنوان یکی از بزرگترین شرکت هایی که بر پایه لینوکس و نرمافزار آزاد میباشد یاد کرد. ردهت تا ۲۰۰۴ به انتشار Red Hat Linux ادامه داد و پس از آن، شروع به انتشار Red Hat Enterprise Linux یا همان (RHEL) کرد.این توزیع پولی است( اما اپن سورس) و بیشتر در سرور ها و مراکز اطلاعاتی استفاده میشود.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
فدورا تقبا توسط ردهت کنترل میشود و بیشتر از آن برای تست قابلیتهای جدید استفاده میشود. برنامهها و ایدههایی که در فدورا نمایان میشوند، ممکن است دیر یا زود به RHEL اضافه شوند. فدورا برعکس رد هت، پولی نیست و برای دانلود رایگان ارائه میشود. پروژه فدورا توسط کمیته ای مدیریت میشود. اعضای این کمیته توسط جامعه ی توسعه دهندگان و ردهت انتخاب میشوند.
درست است که ردهت تحت لایسنس FOSS که بسیار شبیه به GPL است ارائه میشود، اما میتوان یک سیستم را توزیعی که بر پایه ردهت است اداره کرد، مانند CentOS و scientificLinux که کاملاً بر پایه ردهت هستند اما تمامی برند های ردهت را از خود حذف کرده اند. یعنی میتوانید همان توزیع ردهت را دقیقاً داشته باشید، اما بدون بهره مندی از پشتیبانی رسمی رد هت. البته جا دارد بگویم که توزیعهای لینوکسی از انجمنهای اینترنتی قوی برخوردارند که میتوانید سوالاتتان را آنجا مطرح کنید.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این توزیع با همکاری داوطلبانی از سراسر دنیا تولید میشود (برخلاف توزیع ردهت که توسط کمپانی حمایت میشود). در ۱۶ آگوست ۱۹۹۳ توسط یان مورداک منتشر شد و نام آن ترکیبی از نام خود او و دوست دخترش دبرا بود. روی این پروژه تا کنون بیش از ۱۰۰۰ داوطلب کار کرده اند. در هر زمان حداقل سه نسخه از این توزیع موجود است:
پکیج های جدید و تصحیح شده در شاخه ی unstable (ناپایدار) قرار دارند. هر پکیجی که پس از مدتی در آن خطایی مشاهده نشود، در شاخه ی testing قرار میگیرد و به طور کامل بررسی میشود و سرانجام به شاخه ی stable کپی میشود. بنابراین فاصله ی زمانی میان دو نسخه ی stable خیلی طولانی است، گرچه برخی آنرا یک مزیت میدانند. این پروژه آزادیهای زیادی را برای توسعه دهندگان به همراه دارد که آنرا برای پایه ی یک توزیع بسیار مناسب میکند.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یکی از معروفترین توزیعها بر پایه ی دبیان است که توسط کمپانی بریتانیایی کانونیکال منتشر میشود. هدف آن ارائه ی توزیعی مدرن، پر قابلیت و آسان است که کار با آن برای همه راحت باشد. اوبونتو بر اساس شاخه ی unstable دبیان منتشر میشود و اکثر پکیج های دبیان را استفاده میکند، گرچه پکیج های دبیان و اوبونتو از لحاظ ساختاری کاملاً همسان نیستند. اوبونتو در یک چرخه شش ماهه نسخه های جدیدش را منتشر میکند، و هر دوسال یکبار یک نسخه ی LTS (Lont-term support) را منتشر میکند که تا پنج سال پشتیبانی میشود.
دیگر توزیعها
در کنار توزیعهای معرفی شده، توزیعهای بسیاری وجود دارند که همچنان در توسعه ی فعال و دارای طرفداران بسیاری هستند. مانند
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
،
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
. همچنین اندروید، که از هسته ی لینوکس استفاده میکند و میتواند یک توزیع لینوکس به شمار آید.
تفاوتها و شباهتهای توزیعها
با وجود اینکه توزیعهای زیادی از لینوکس وجود دارند، اما تقریباً تمامی آنها برای کار های روزمره به هم شبیه اند. برای مثال، اکثر آنها از bash به عنوان خط فرمان استفاده میکنند. همچنین برخی استاندارد ها نیز از رشد بیرویه تعداد توزیعهای لینوکسی جلوگیری میکنند. مانند FHS (Filesystem Hierarchy standard) یا LSB (Linux Standard Base) که ویژگیهایی مانند ساختار درختی فایل در لینوکس را شامل میشوند و به توسعه دهندگان کمک میکنند تا برنامه هایشان را برای بسیاری از توزیعهای لینوکس تولید کنند، بدون آنکه نیاز باشد به تفاوتها در سیستم فایل و غیره توجهی داشته باشند.
اما تفاوتهایی نیز هست، که مهم ترینشان مدیریت بسته ها (Package management) میباشد. عملیاتی مانند حذف و نصب پکیج ها، که بسته به قالب بندی (فرمت) پکیج به طور متفاوتی انجام میگیرد. برای مثال توزیع دبیان از پکیج های deb و مدیر بسته ی dpkg استفاده میکند و ردهت از پکیج های rpm و مدیر بسته ای به همین نام استفاده میکند. هیچ یک از این مدیر بسته ها از دیگری قویتر نیستند، اما علت اصلی تفاوت توزیعهای پایه، و توزیعهای مشتق آنها، همین تفاوت در مدیر بسته هاست. برای مثال، SUSE و فدورا که از ردهت مشتق شدهاند از rpm و اوبونتو و مینت که از دبیان مشتق شدهاند از dpkg استفاده میکنند.
-
پیش نیاز قسمت چهارم
در ادامه ی آموزش و با توجه به مبتدی بودن سطح آموزش، فرض شده است که شما هماکنون یک توزیع لینوکس روی سیستمتان نصب کردهاید و یکی از کاربران (User) آن هستید. پس توصیه میکنم که قبل از ادامه ی آموزش، یک توزیع لینوکس نصب کنید و اگر نمیتوانید از یکی کمک بگیرید. زیرا نصب لینوکس نیاز به دانستن موارد بیشتری دارد که هنوز آنها را آموزش نداده ایم.
-
۴.ورود به سیستم و خروج از آن (Login and Logout)
یک کامپیوتر ممکن است یک یا چند کاربر داشته باشد، که مواردی از قبیل تنظیمات، برنامههای پیشفرض، … برای آنها متفاوت است. بنابراین هر بار که رایانه را روشن میکنید، کامپیوتر باید بداند که شما که هستید (کدام کاربر هستید) یا بهتر بگویم، باید به سیستم وارد شوید (Login کنید)
سپس شما میتوانید به کار با رایانه بپردازید. پس برای کار با رایانه نیاز به یک نام کاربری (Username) و رمز عبور (Password) دارید. فردی که سیستم شما را راه اندازی کرده (یا خود شما) احتمالاً شما را به عنوان یک کاربر ثبت کرده و یک نام کاربری(مثلا ali_rnt) و رمز عبور(مثلا ascvdfg) به شما داده است.
ورود به حساب از طریق محیط گرافیکی
این روزها اکثر توزیعهای لینوکسی برای ورود به حساب از یک محیط گرافیکی استفاده میکنند که شما به راحتی میتوانید کادر های مربوط به نام کاربری و رمز عبور را پر کنید تا به سیستم وارد شوید. بعد از وارد کردن اطلاعات خواسته شده و ورود به حساب، یک نشست (Session) گرافیکی برای شما اجرا میشود و میتوانید به راحتی از سیستم استفاده کنید. برخی توزیعها از مدیریت نشست (Session management) پشتیبانی میکنند، یعنی میتوانند هنگامی که مجدداً وارد حسابتان میشوید برنامههایی که آخرین بار در حال اجرا بودهاند بازگردانی کنند.
خروج از حساب به وسیله ی محیط گرافیکی
بعد از آنکه کارتان با رایانه تمام شد و میخواهید آنرا برای استفاده ی کاربر دیگری آماده کنید، باید از حسابتان خارج شوید که این امر به محیط گرافیکی که استفاده میکنید بستگی دارد. معمولاً گزینه های خاموش کردن و خروج از حساب و این قبیل، به راحتی در دسترس اند.
ورود به حساب از طریق کنسول متنی
برخلاف اکثر دسکتاپ ها، سرور ها اغلب از رابط گرافیکی استفاده نمیکنند و برای ورود یک پیغام شبیه به این روی صفحه ظاهر میشود:
Computer Login:
در این صورت شما باید نام کاربری خود را وارد کنید و کلید اینتر را بزنید تا از شما بپرسد:
Password:
حالا نام کاربری خود را وارد کنید و اینتر را بزنید. نکتهای که باید به آن توجه کنید این است که هنگام وارد کردن رمز، برخلاف محیط گرافیکی، حتی کاراکتری مانند * هم نمایش داده نمیشود و به نظر میرسد که شما چیزی نمینویسید، اما اینطور نیست.
خروج از حساب در کنسول متنی
کافیست بنویسید:
logout
محیط های گرافیکی دسکتاپ (Graphical Desktop Environments)
اگر از طریق یک محیط گرافیکی Loginکرده اید، بایک دسکتاپ مواجه میشوید که تفاوت چندانی با سایر کامپیوتر های کدرن که قبلاً دیدهاید نمیکند. متأسفانه نمیتوانم در این مورد توضیح بیشتری بدهم زیرا توزیعهای لینوکس از یک دسکتاپ خاص استفاده نمیکنند و در هر کامپیوتر ممکن است متفاوت باشد.
بر خلاف سیستم عامل هایی مانند ویندوز و OS X که از یک محیط گرافیکی دسکتاپ رسمی استفاده میکنند، در لینوکس میتوانید هر کدام از محیط های گرافیکی دسکتاپ موجود را که دوست دارید انتخاب کنید. برخی از آنها را در اینجا معرفی میکنیم:
گنوم و KDE محیط های دسکتاپ (Desktop Environment) هستند که قصد دارند مجموعهای از نرمافزار هارا با حس و حالی مشابه ارايه دهند. مثلاً در KDE مجموعه برنامههایی مانند Amarok و Dolphin ارائه میشود. هدف این دو محیط دسکتاپ آن است که کاربر با استفاده از آنها تجربهای قابل قیاس با سیستم عامل های دیگر داشته باشند. آنها قابلیتهایی خلاقانه به دسکتاپشان اضافه میکنند، مانند جستجوی معنایی (Semantic Search) در KDE که در پشت صحنه (Background) مشغول فهرست گیری از فایلهای روی دیسک میشود تا راحتتر بتوانید جستجویشان کنید و به آنها دسترسی داشته باشید. KDE بر روی ارائه قابلیتهای فراوان برای راحتی کاربران تمرکز دارد، در حالی که گنوم سادگی و کاربردی بودن را به کاربران ارائه میدهد.
LXDE و XFCE دو محیط گرافیکی سبک هستند. آنها همان قابلیتهای KDE و GNOME را ارائه میدهند اما بیشتر روی استفاده ی بهینه از منابع سیستم توجه دارند.
حتی اگر دو توزیع متفاوت از یک محیط دسکتاپ یکسان استفاده کنند، ممکن است در ظاهرشان تفاوتهایی دیده شود زیرا اکثر محیط های گرافیکی دسکتاپ (که از این به بعد به اختصار به آنها DE میگوییم) به کاربران اجازه میدهند تا آنها را دستکاری و جلوههای گرافیکی و تم های آنها را تغییر دهند.
اکثر DE ها یک نوار کنترل دارند که معمولاً شامل یک دکمه مانند دکمه استارت ویندوز و برنامههای مهم است و به کمک آن میتوانید بین برنامههای باز شده سوییچ کنید. در KDE این نوار ها پنل نام دارند و طراحی آنها زیاد تفاوتی با ویندوز ندارد. اما در گنوم کاملاً متفاوت است.
همچنین هر DE یک فایل منیجر بهخصوص دارد که اصلیترین و حداقل امکاناتی که در اختیار میگذارد مرور فایلهای روی دیسک، حذف، انتقال، تغییر نام و … مباشند. در KDE برای مثال به طور پیشفرض دلفین (Dolphin) و در اوبونتو ( یونیتی) nautilus مورد استفاده قرار میگیرند.
یک ویژگی مهم که در OS X و ویندوز نمیبینید پشتیبانی از دسکتاپ های مجازی است (Virtual Desktops). با استفاده از این قابلیت شما میتوانید چندین دسکتاپ همزمان داشته باشید و به راحتی بین آنها سوییچ کنید، برای مثال خود من معمولاً مرورگر یا PDF های آموزشی رو روی یه دسکتاپ باز میکنم و کارای کد نویسیو تو یه دستاپ دیگه انجام میدم.
مرورگر های وب
خوشبختانه اکثر مرورگر های محبوب وب، اپن سورس و رایگان اند و برای لینوکس موجودند، مانند فایرفاکس و اپرا. همچنین گوگل کروم، که نسخه ی اپن سورس آن به نام کرومیوم (Chromium) را میتوانید در توزیع خود پیدا کنید.
-
۵.ترمینال و پوسته، دلایل استفاده از پوسته
ترمینال ها و پوسته ها
حتی با وجود یک محیط کرافیکی قوی، شما بازهم به دلایلی به یک ترمینال نیازمند خواهید بود. توسط ترمینال میتوانید فرمانهای متنی را در پوسته (Shell) وارد کنید. اکثر محیط های گرافیکی برای باز کردن ترمینال راهکار های سادهای دارند. میتوانید از لیست برنامهها عبارت Terminal را جستوجو کنید و آنرا باز کنید. برخی ترمینال ها امکانات جالبی مانند سربرگ ها (Tabs) و ترمینال های گروهی را پشتیبانی میکنند. مانند Konsole. فعلاً به اطلاعات بیشتری نیاز نداریم.
چرا به پوسته (Shell) نیاز داریم؟
لینوکس برخلاف اغلب سیستم عامل های مدرن دیگر بر اساس ایده ی ورود دستورات توسط خط فرمان ساخته شده است. این برای برخی کمی نگران کننده و ترسناک به نظر میرسد، خصوصا اگر به سیستم عامل هایی مانند ویندوز عادت کرده باشند که بیش از بیست سال است که کاربرانشان را به استفاده از رابط گرافیکی ترغیب کرده اند. برای بسیاری از افراد که از ویندوز پا به دنیای لینوکس میگذارند، مقایسه ی ویندوز و لینوکس مانند یک شوک فرهنگی است، مثل اینکه فردی از قرن ۲۱ به زمان شاه آرتور برود، بدون موبایل و اینترنت، و با دندانپزشکانی هولناک.
اما اوضاع به این وخامت نیست. امروزه لینوکس – همانگونه که گفته شد – از محیط های گرافیکی بهره میبرد که با آنچه که ویندوز و OS X ارائه میدهند برابرند. همچنین خط فرمان و محی گرافیکی جدا نیستند، بلکه مکمل همدیگرند.
شل چیست؟
کاربران نمیتوانند مستقیماً باکرنل سیستم عامل ارتباط برقرار کنند. این کار تنها توسط برنامههایی انجام پذیر است که توسط «System Call” میتوانند به کرنل دسترسی داشته باشند. برای اجرای این برنامهها از شل استفاده میکنیم. شل یا همان پوسته، دستورات را از کیبرد میخواند و آنها را پردازش میکند. برای مثال این دستور میتواند اجرای یک برنامه باشد.
قدیمی ترین شل «Bourne Shell” نام دارد که اکنون به ندرت استفاده میشود، شل های دیگری نیز مانند C Shell و Korn Shell همچنان وجود دارند، اما شل استاندارد لینوکس، Bourne-Again Shell یا به اختصار bash نام دارد که بسیاری از قابلیت شل های گفته شده را در بر دارد.
دو راه معمول برای اجرای دستورات در شل، استفاده از ترمینال و شل اسکریپت است. شل اسکریپت فایلی حاوی دستورات شل است که یک به یک اجرا میشوند. شل ها برای اجرای دستور این فرآیند را طی میکنند:
۱.دستور را از ترمینال یا فایل میخوانند.
۲.آنرا اعتبار سنجی (validate) میکنند.
۳.دستور را مستقیماً اجرا میکنند یا برنامه ی مربوطه را اجرا میکنند.
۴.نتیجه را روی صفحه یا هر خروجی دیگر چاپ میکنند.
۵.دوباره به قدم ۱ میروند.
در کنار این فرآیند یا بهتر بگویم حلقه ی استاندارد، شل ها معمولاً قابلیتهای بیشتری هم دارند، مانند زبان برنامه نویسی. یعنی دستوراتی برای حلقه ها، جملات شرطی و … برای آنها تعریف شده است.
برای خاتمه دادن به شل، میتوانید دستور exit را در آن وارد کنید.
در این آموزش ما از bash استفاده میکنیم که روی اکثر توزیعهای لینوکسی هست و در آزمون های LPI هم از آن باید استفاده کنید.
فرمانها
چرا به فرمانها نیاز داریم؟
هر عملیاتی که یک رایانه انجام میدهد در سه مرحله خلاصه میشود:
۱.رایانه صبر میکند تا از کاربر دستور بگیرد.
۲.کاربر دستوری را توسط موس یا کیبرد به رایانه میدهد.
۳.رایانه آن دستور را اجرا میکند.
همانگونه که برای کار با محیط گرافیکی نیاز داریم تا دستورات گرافیکی مانند کلیک کردن، کشیدن و رها کردن و … را یاد داشته باشیم، برای زنده ماندن در دنیای شل نیز باید با دستورات آن آشنایی داشته باشیم. در لینوکس، شل یک اعلان نمایش میدهد، به این معنی که برای دریافت دستور آماده است. اعلان معمولاً از نام کاربری و نام رایانه، مسیر فعلی و یک کاراکتر در انتها تشکیل شده است. برای مثال در سیستم من به این شکل است:
کد:
ali-rnt@Ali-RNT-PC:/usr$
یعنی من با نام کاربری ali_rnt وارد سیستم شدهام و در مسیر /usr هستم.
ساختار دستورات
دستورات رشته ای از کاراکتر ها هستند که سینتکس (syntax) مشخصی دارند و با فشردن Enter تمام شده و به شل ارسال میشوند. بسیاری از دستورات به زبان انگلیسی اند یا از این زبان برگرفته شدهاند. وقتی شما دستوری را وارد میکنید شل ابتدا آنرا به صورت کلمه به کلمه تقسیم میکند، کلمات، مانند آنچه که در متون واقعی هم هست، با فاصله از هم جدا میشوند. معمولاً اولین کلمه، همان دستوری است که میخواهیم اجرا شود و بقیه کلمات پارامتر های آن هستند که اطلاعات بیشتری به شل میدهند.
نکتهای که باید به آن توجه کنید این است که شل میان حروف کوچک و بزرگ تفاوت قائل میشود، و این برخلاف تجربه ایست که کاربران ویندوز و DOS داشته اند. برای مثال دستور CD و cd و cD در شل با هم فرق دارند، در حالی که DOS آنها را یکسان میبیند. در شل، تقریباً تمامی دستورات از حروف کوچک تشکیل شده اند.
و یک نکته ی دیگر، یک فاصله همان کاری را میکند که چندتا فاصله انجام میدهند. یعنی شل برای جداسازی کلمات به تعداد فاصله هایی که بین آنها گذاشته اید توجه نمیکند، همچنین با کاراکتر tab هم میتوانید کلمات را جدا کنید.
گاهی اوقات دستوری که مینویسید خیلی طولانی است و میخواهید آنرا در چند خط بنویسید، برای اینکار، در انتهای هر خط یک / بگذارید و سپس اینتر را بزنید.
پارامتر های ارسالی به یک فرمان دو دسته اند:
۱.آنهایی که با – شروع میشوند: به این پارامتر ها گزینه (Option) میگویند.اینها معمولاً اختیاری هستند و نیاز به وارد کردن آنها ندارید، مگر اینکه بخواهید فرمان عملیات را به شکلی دیگر انجام دهد. در قسمت بعد که به معرفی فرمانها خواهیم پرداخت با مثالهای زیاد وظایف آنها را خواهید فهمید.
۲.آرگومان ها:پارامتر هایی هستند که بدون – وارد میشوند و معمولاً نام فایل هستند که فرمان باید پردازش کند.
ساختار یک فرمان، در نهایت، به شکل زیر خلاصه میشود:
فرمان: کاری باید انجام شود؟
گزینه ها (Options): چگونه انجام شود؟
آرگومان ها: بر روی چه چیزی باید عملیات شود؟
انواع دستورات
در شل ها، دستورت به دو دسته تقسیم میشوند:
دستورات داخلی: دستوراتی که توسط خود شل فراهم شدهاند. Bash حدود ۳۰ دستور داخلی دارد که میتوانند خیلی سریع اجرا شوند (نسبت به نوع دوم دستورات).
دستورات خارجی: این دستورات درواقع یک برنامه (فایل اجرایی) هستند. وقتی شما یک دستور خارجی را وارد میکنید، شل درواقع فایل اجرایی آنرا که در مسیری از هارد دیسک (معمولاً bin/ یا /usr/bin) وجود دارد را اجرا میکند.
برای تشخیص نوع دستور، آنرا به عنوان آرگومان به دستور type بفرستید. هماکنون اینکار را انجام دهید. ترمینال را اجرا کنید و بنویسید:
این مثال به شما قسمتهای مختلف یک فرمان را هم نشان میدهد. Type فرمانی است که باید اجرا شود، و echo هم یک آرگومان است، یعنی آنچه که باید روی آن عملیات انجام شود. فرمان type یک دستور را به عنوان آرگومان میگیرد و بررسی میکند که داخلی است یا خارجی. پس از وارد کردن دستور بالا باید خروجی مانند این ببینید:
به آن معنی که echo یک فرمان داخلی است. اگر یک فرمان خارجی را بررسی کنید، مسیر فایل اجرایی آنرا به شما میگوید. مثلاً فرمان date :
خروجی اش به این صورت است:
دستور echo که بررسی کردید برای نمایش پیام و یک سری کارهای دیگر استفاده میشود. کافیست متنی که میخواهید را به عنوان آرگومان به آن بدهید:
کد:
$ echo Hello World!
Hello World!
و date هم تاریخ فعلی را نمایش میدهد:
کد:
$ date
Thu Apr 28 17:26:42 IRDT 2016
نکته: از این پس برای تشخیص فرمان وارد شده و خروجی آن در مثال ها، اول دستوراتی که وارد میشود یک $ قرار میدهیم. اما توجه کنید که شما نباید آن را وارد کنید.
-
۶. راهنمایی گرفتن درباره ی فرمانها
لینوکس سیستم عاملی قوی و پیچیده است و همانند سایر سیستم عامل های پیچیده، باید مستندات جامع و کاملی برای آن وجود داشته باشد تا بتوان این پیچیدگی را مدیریت کرد. بخشهای بسیاری از لینوکس (متأسفانه نه تمامی آنها) به خوبی مستند سازی شده اند. در این بخش از آموزش برخی روشهای متداول برای دسترسی به مستندات (Documentation) در لینوکس را معرفی و تشریح کنیم.
نکته: مستندات، به متنی گفته میشود که همراه یک محصول، نرمافزار یا هر چیز دیگر ارائه میشود و شامل معرفی آن برنامه، روش استفاده از آن است.
دستور help و گزینه ی help--
در بش، برای دسترسی به توضیحات و جزئیات بیشتر درباره دستورات داخلی میتوانید از دستور help استفاده کنید و دستوری را که درباره آن راهنمایی میخواهید، به عنوان یک آرگومان به این دستور بفرستید. مثلا برای راهنمایی در مورد دستور exit:
کد:
$ help exit
exit: exit [n]
Exit the shell with a status of N.
If N is omitted, the exit status
is that of the last command executed.
همانگونه که میبینید دستور help تنها توضیحاتی مختصر درباره ی دستور به شما میدهد. برای راهنمایی بیشتر، کمی صبور باشید و تا پایان این بخش را مطالعه کنید.
دستور help برای راهنمایی گرفتن از دستورات داخلی بود. در مورد دستورات خارجی، هیچ استاندارد مشخصی نیست. اما بسیاری از دستورات خارجی با دریافت گزینه یhelp-- اطلاعاتی را در اختیار شما میگذارند. مثلاً
به شما اطلاعات مفید و مختصری از برنامه ی nano ارائه میدهد.
راهنمای برخط (On-Line Manual)
تقریباً همه ی برنامههای تحت خط فرمان با یک صفحه ی راهنما (man page – Manual Page) ارائه میشوند. این راهنما ها همراه برنامه معمولاً نصب میشوند و میتوان با دستور man به آنها دسترسی یافت.
بخشهای مختلف صفحه ی راهنما
NAME
نام دستور و توضیحات مختصر درباره آن
SYNOPSIS
نحوه ی نوشتاری دستور (Syntax)
DESCRIPTION
توضیحات کامل درباره ی برنامه و تأثیرات آن
OPTIONS
گزینه های در دسترس
ARGUMENTS
آرگومان های دردسترس
FILES
فایلهای کمکی
EXAMPLES
مثالهایی درباره ی نحوه ی اجرای برنامه
SEE ALSO
مراجعی به صورت پیوند برای اطلاعات بیشتر، یا قسمتهای مربوط به موضوع
DIAGNOSTICS
پیامهای هشدار و خطا
COPYRIGHT
سازندگان برنامه و مجوز برنامه
BUGS
مشکلات، خطاها و محدودیتهای برنامه
برای مشاهده ی صفحات راهنمای مربوط به یک دستور آنرا به عنوان آرگومان به دستور man بفرستید. مثلا:
صفحات راهنمای bash را نمایش میدهد.
صفحات راهنما مشکلاتی هم دارند. مثلا تمامی آنها به زبان انگلیسی اند و ترجمه ی آنها ( اگر وجود داشته باشد) معمولا ناقص یا نیمه کاره است. همچنین این راهنما هاله معمولا بسیار پیچیده اند و هر یک کلمه از آنها نیز مهم است، که خواندن آن را برای مبتدیان دشوار میکند. اما اینها نباید باعث شود که فواید صفحات راهنما را نادیده بگیریم. مهمترین مزیت آنها جامع بودن و همیشه در دسترس بودن آنهاست.
نکته: هر گاه به سؤال یا مشکلی برخوردید که جواب آنرا نمی دانستید و از help و man هم نتیجهای نگرفتید، نگران نباشید. کاربران لینوکس در فضای مجازی شما را راهنمایی خواهند کرد. قطعا سریعترین راه مراجعه به stackoverflow.com است، و از بین سایتهای ایران هم میتوانید به انجمنها و سایتهای پرسش و پاسخ زیادی مراجعه کنید. مانند P30World که این آموزش علاوه بر وبلاگ من آنجا نیز منتشر میشود.
نمایش دادن صفحات راهنما
درواقع هنگامی که دستور manرا وارد میکنید، برنامهای به نام less صفحات manرا نمایش میدهد. با کلید های جهت بالا و پایین میتوانید حرکت کنید و با کلید q از برنامه خارج شوید. برای جستجوی یک عبارت حرف / را بنویسید و سپس عبارت موردنظر را وارد کنید و اینتر را بزنید. یک راه دیگر هم برای نمایش راهنما، استفاده از Konqueror (مرورگر KDE) است. با وارد کردن man://name که name همان دستور است میتوانید صفحات راهنمای آنرا بخوانید.
صفحات اطلاعات (Info Pages)
بعضی دستورات به جز (یا به جای) صفحات راهنما (man) از صفحات اطلاعات استفاده میکنند. برای نمایش این صفحات کافیست نام برنامه را به عنوان آرگومان به info بدهید. مثلا:
اطلاعاتی درباره ی برنامه ی kate به ما میدهد.
راههای دیگر
برای تقریباً تمامی برنامههای نصب شده میتوانید به مسیر
یا
کد:
/usr/share/doc/package
بروید (به توزیع نصب شده بستگی دارد. همچنین میتوانید مرورگر را باز کنید، در نوار آدرس عبارت google.com را وارد کرده و اینتر را بزنید و در مورد دستور جستجو کنید. در محیط گرافیکی هم بسیاری از برنامهها در منو گزینه ای را برای دریافت راهنمایی قرار داده اند. سایتهای زیر هم میتواند مفید باشند:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پروژه ی مستند سازی لینوکس که صفحات راهنما و HOWTO ها را اداره میکند.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک پرتال برای علاقهمندان لینوکس
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و بسیاری دیگر.
-
۷. عملیات مربوط به فایل و پوشه
از این قسمت آموزش به بعد، هر قسمت آموزش مطالب بیشتری رو در بر میگیره، قسمتهای قبلی حجم زیادی چرت و پرت داشت. وقتی با آموزش قبلی خودم (آموزش CMD) مقایسش کردم دیدم که اون آموزش خیلی بهتر از این شده چون همه چی خلاصه و مفید بوده. پس از این قسمت، این آموزش هم روال آموزش CMD رو خواهد داشت.
نام فایلها در لینوکس
شما میتوانید از هر کاراکتری که میخواهید استفاده کنید. اما برخی از کاراکتر ها غیر مجازند چون در سیستم عامل معنای خاصی دارند. دو کارکتر کاملاً غیر مجاز، / و بایت صفر (کاراکتری که در کد اسکی مقدار ۰ را دارد یا همان نول) هستند. شما میتوانید از فاصله و نقطه و … نیز استفاده کنید. اما دقت کنید که این کار توصیه نمیشود چون مشکلاتی در زمینه ی قابلیت انتقال دارد (Portability). برای مثال در ویندوز \ یک کاراکتر غیر مجاز است در حالی که در لینوکس اینگونه نیست.
طول نام فایل بستگی به سیستم فایل پارتیشنی دارد که فایل در آن ذخیره شده، اما میتوانید آنرا ۲۵۵ کاراکتر در نظر بگیرید چون برخی سیستم فایلها مانند NTFS بیش از این مقدار را پشتیبانی نمیکنند.
تفاوت مهم دیگر هم این است که برخلاف ویندوز که نوع فایل را از پسوند فایل تشخیص میدهد، لینوکس اصلاً به پسوند توجهی نمیکند. درواقع اگر فایل متنی به نام textFile داشته باشید، برای لینوکس فرقی نمیکند که آنرا به نام textFile ذخیره کنید یا textFile.txt ، اکثر افراد ترجیح میدهند برای فایلهای متنی معمولی پسوندی انتخاب نکنند.
در لینوکس نام فایلهای مخفی با . شروع میشود. یعنی برای مخفی کردن فایل کافیست ابتدای نام آن یک . قرار دهید تا مخفی شود. و همچنین اندروید.
همانگونه که گفتیم برای اینکه در قابلیت انتقال مشکلی پیش نیاید بهتر است از کاراکتر های خاص استفاده نکنید. برای همین یک لیست از کاراکتر ها تعریف شده که اگر از آنها استفاده کنید میتوانید مطمئن باشید که نام فایل در همه ی سیستم عامل ها مورد قبول خواهد بود.
کد:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789+-._
و نکته ی آخر هم اینکه نام فایل باید حتماً با یکی از این کاراکتر هاکه گفتیم شروع شود.
به چند مثال توجه کنید و سپس به کار با پوشه ها میپردازیم.
نام های زیر برای فایلها کاملاً مجازند:
کد:
X-files
foo.txt.bak
50.something
7_of_9
اما این اسامی غیر مجاز میباشند:
کد:
1: -10°F
2: .profile
3: 3/4-metre
4: Smörrebröd
دایرکتوری ها
در لینوکس دایرکتوری ها همان فایلها هستند، گرچه شما نمیتوانید تمامی عملیاتی را که روی فایلهای معمولی انجام میدادید روی دایرکتوری ها انجام دهید. بنابراین، نام فایلها از همان قوانین مربوط به نام فایلها تبعیت میکند. هر ایرکتوری میتواند شامل دایرکتوری های دیگر باشد و بدین ترتیب یک ساختار درختی تشکیل میشود. در لینوکس، دایرکتوری که بالاترین سطح را دارد / نام دارد و دایرکتوری ریشه (root) نام دارد. البته توجه داشته باشید که این root هیچ ربطی با کاربر root ندارد.
مسیر مطلق و مسیر نسبی
هر فایل با اسمی مشخص میشود که با یک / شروع میشود و با عنوان کردن تمام دایرکتوری ها به آن فایل میرسد. برای مثال، اگر فایل stdlib.h در پوشه یinclude، پوشه ی include در پوشه ی usr و پوشه ی usr در دایرکتوری ریشه (/) قرار داشته باشد، این فایل اینگونه مشخص میشود:
کد:
/usr/include/stdlib.h
چنین نامی که با / آغاز میشود، مسیر مطلق یا Absolute path نامیده میشود.
یک مسیر نسبی، همانگونه که از اسمش مشخص است، بر اساس دایرکتوری فعلی مشخص میشود. برای مثال اگر هماکنون در پوشه ی lib باشیم و بخواهیم فایل fstab در پوشه ی init را مشخص کنیم:
نکتهای دیگر، وجود دو میانبر خاص است که در تمام دایرکتوری ها وجود دارند (البته / استثناء است). این دو میانبر . و .. هستند.
. به معنای پوشه ی فعلی و .. به معنی پوشه ی والد پوشه ی فعلی است. اکنون چند مثال میزنیم تا این موضوع روشنتر شود.
فرض کنیم فایل test به این صورت در هارد موجود باشد:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مسیر مطلق آن به این صورت است:
کد:
/home/ali_rnt/Documents/test
اگر اکنون ترمینال را باز کنیم و با دستور زیر به پوشه ی ali_rnt تغییر مسیر دهیم:
مسیر نسبی آن به اینگونه است:
حالا به پوشه ی Documents تغییر مسیر میدهیم:
اما اگر بخواهیم به پوشه ی قبلی (Ali_rnt) برگردیم چه کنیم؟ همانگونه که گفته شد در هر دایرکتوری دو میانبر وجود دارند که یکی از آنها .. است. چون دایرکتوری ali_rnt دایرکتوری والد Documents است (دایرکتوری Documents در ali_rnt قرار دارد) پس به راحتی مینویسیم:
سؤالی که ممکن است پیش بیاید این است: پس میانبر . به چه درد میخورد؟
سؤال به جایی است چون به نظر کار احمقانهای میآید که بخواهیم به دایرکتوری که هماکنون در آن هستیم اشاره کنیم. اما این میانبر کاربرد های زیادی دارد. بسیاری از کاربرد های آن فراتر از سطح این آموزش اند اما یکی از آنها را مورد بررسی قرار میدهیم:
همانطور که گفته شد فرمانهای خارجی همان برنامههای اجرایی هستند. مانند nano. وقتی شما در ترمینال عبارت nano را مینویسید و اینتر را میزنید، شل، از آنجا که میداند این دستور داخلی نیست، در PATH جستجو میکند تا آنرا بیابد. خب، فرض کنید یک فایل اجرایی به نام prog داریم که در پوشه ی /home/ali_rnt قرار دارد. میخواهیم آنرا اجرا کنیم. اول به این دایرکتوری تغییر مسیر میدهیم:
خب، اولین ایده ای که به ذهنمان میرسد، این است که نام برنامه را تایپ کنیم. اما با تعجب میبینیم که با نوشتن prog و فشردن اینتر، شل به ما میگوید که این برنامه یافت نشد! علت چیست؟ گفتیم که شل، دستورات خارجی را در PATH (فعلاً فرض کنید که یک پوشه است) جستجو میکند. خب، فایل اجرایی prog ما که در PATH قرار ندارد. پس به شل باید بفهمانیم که prog را به جای PATH از پوشه ی فعلی اجرا کند. پس از میانبر . استفاده میکنیم:
درواقع اگر میانبر . نبود، باید مینوشتیم:
دستورات مربوط به دایرکتوری
قرار بود که دستور cd را اینجا یاد بگیرید اما به دلایلی مجبور شدم که کمی قبل آنرا مطرح کنم. فهمیدید که این دستور دایرکتوری فعلی را به دایرکتوری داده شده تغییر میدهد.
اگر خواستید بدانید که هماکنون در چه مسیری هستید، از دستور pwd استفاده کنید. (Print Working Directory)
لیست کردن فایلها و دایرکتوری ها – ls
در محیط گرافیکی با وارد شدن به یک پوشه محتوای آنرا میبینید، اما در شل، وقتی به یک دایرکتوری تغییر مسیر میدهید محتویات آنرا برای شما نمایش نمیدهد، تا وقتی که از شل بخواهید. برای اینکار از ls استفاده میکنیم. سادهترین شکل استفاده از این فرمان، یعنی نوشتن آن بدون هیچ آرگومان و پارامتری، فقط نام فایلها را لیست میکند. جدول زیر برخی از مهمترین آپشن های این دستور را نشان میدهد:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ایجاد و حذف دایرکتوری ها
برای ایجاد یک دایرکتوری از دستور mkdir استفاده میکنیم و نام دایرکتوری را به عنوان آرگومان به آن میدهیم. مثلاً دستور زیر:
دایرکتوری Programs را در مسیر فعلی ایجاد میکند. اگر بخواهید یک دایرکتوری جدید، در یکی از دایرکتوری های موجو ایجاد کنید نیز میتوانید به این صورت عمل کنید. در این مثال فرض شده که دایرکتوری Documents وجود دارد و میخواهیم دایرکتوری testDir را درون آن بسازیم:
کد:
$ mkdir Documents/testDir
اما اگر دایرکتوری Documents هماکنون وجود نداشته باشد چه؟ به این مثال دقت کنید: میخواهیم دایرکتوری به نام new در مسیر فعلی بسازیم و داخل آن نیز دایرکتوری dir را ایجاد کنیم. خب، دستور قبلی که بررسی شد، فقط برای دایرکتوری ای که هماکنون وجود دارد جواب میدهد. میتوانیم این کار را انجام دهیم:
کد:
$ mkdir new
$ mkdir new/dir
اما یک راه سادهتر هم وجود دارد و آن استفاده از گزینه ی p- است. یعنی به جای دستور بالا میتوان نوشت:
حالا برای حذف یک دایرکتوری، میتوانیم از rmdir استفاده کنیم. برای حذف دایرکتوری new در مثال قبل مینویسیم:
الگوهای جستجوی فایل
بعضی وقتها نیاز داریم تا دستوری را برای فایلهای خاصی به کار ببریم. مثلاً همه ی فایلهایی که با حرف p شروع میشوند حذف کنیم. یکی از راههای انجام اینکار کاراکتر * است. به جای این کاراکتر هررشته ای از حروف میتواند بنشیند. برای مثال، اگر فایلهای زیر را داشته باشیم:
کد:
prog1/p.c
prog1/pop.c
prog1/push.c
prog1/main.c
اگر بخواهیم نام همه ی فایلهایی که با حرف c شروع میشوند ببینیم، مینویسیم:
به تصویر دقت کنید:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
میبینید که فایل main.c نمایش داده نمیشود. البته دقت داشته باشید که فایلهای مخفی نادیده گرفته میشوند.
کاراکتر دیگر ؟ است. برخلاف ستاره که به جای آن یک رشته میتواند بنشیند، به جای علامت سؤال فقط یک کاراکتر میتواند بنشیند. همان مثال قبل:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در قسمت بعدی آموزش به ادامه ی بحث عملیات مربوط به فایلها میپردازیم.
(این قسمت آموز در
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نیز در دسترس است)
-
۸. عملیات فایل و پوشه - قسمت دوم
کلاسهای کاراکتری
یک الگوی جستجوی دیگر کلاس کاراکتر است، الگوی جستجوی زیر را در نظر بگیرید:
کاراکتر هایی که درون براکت قرار دارند یک به یک جایگزین کل براکت میشوند. مثلاً الگوی جستجوی بالا با فایلهای
کد:
prog1.c
prog2.c
prog3.c
مطابقت میکند. اما با فایلهای زیر خیر:
کد:
1. prog.c
2. prog4.c
3. proga.c
4. prog12.c
۱. دقیقاً یک کاراکتر بعد از prog و قبل از c. نیاز است.
۲. ۴ معرفی نشده است.
۳. a نیز معرفی نشده است
۴. فقط یک کاراکتر مورد نظر است نه دو تا
یک روش دیگر استفاده از کلاسهای کاراکتری، به کارگیری «محدوده ها» است. به این صورت:
کد:
prog[1-9].c
[A-Z]log.txt
در خط اول، به جای کل براکت هر رقم دلخواه و در خط دوم، هر حرف بزرگ انگلیسی قرار میگیرد. اکنون به بررسی مثالهای بیشتری میپردازیم:
این الگو علاوه بر اینکه نام هایی مانند progB.c و progx.c را شامل میشود، به نام فایلی مانند prog_.c نیز اشاره میکند. علت آن نیز ترتیب کاراکتر ها در جدول اسکی است. برای مشاهده این جدول میتوانید man ascii را در ترمینال وارد کنید. اگر بخواهیم الگویی بنویسیم که حروف کوچک و بزرگ را در برگیرد به جای الگوی قبل مینویسیم:
یک روش دیگر استفاده از کلاسهای کاراکتر وارونه (Negated Character Classes) است. میتوانید آنرا به صورت «هر کاراکتری به جز» بخوانید. مثلا:
تمامی فایلهایی را در برمیگیرد که کاراکتری که بین g و . قرار میگیرد جزء حروف الفبا نباشد.
براکت ها
عبارات براکت دار مانند عبارت زیر:
کد:
{red,yellow,blue}.txt
توسط شل به صورت نام سه فایل مجزا در نظر گرفته میشود:
کد:
red.txt yellow.txt blue.txt
توجه داشته باشید که براکت ها از یک نظر مانند کلاسهای کاراکتری و الگو ها عمل نمیکنند، و این تفاوت در آن است که در استفاده از براکت ها، وجود فایل مهم نیست. برای مثال در مثال قبل، اگر فایل blue.txt وجود نداشته باشد باز هم شل جا به جایی را انجام میدهد. این نکته در مواردی مانند مثال زیر به کار میرود:
کد:
mkdir -p python/{first,third,second}Project
پوشه ی python را ایجاد و درون آن سه پوشه به نام firstProject، secondProject و thirdProject ایجاد میکند.
تمرین
۱. دایرکتوری فعلی (دایرکتوری که در آن قرار داریم) شامل فایلهای زیر است:
prog.c prog1.c prog2.c progabc.c prog
p.txt p1.txt p21.txt p22.txt p22.dat
برای هر کدام از الگوهای جستجوی زیر، کدام فایلها صدق میکنند؟
کد:
a) prog*.c b) prog?.c c) p?*.c d) p[12]* e) p* f) *.*
۲. تفاوت ls و * ls چیست؟ (میتوانید هر دو را در یک دایرکتوری که شامل چند زیرشاخه است امتحان کنید)
عملیات مربوط به فایلها
کپی، انتقال و حذف
برای کپی کردن فایلها از دستور cp استفاده میکنیم. این کار به دو روش انجام پذیر است:
اگر به cp دو آرگومان بدهید، که یکی از آنها نام فایل مبدأ و دیگری نام فایل مقصد باشد، در این صورت یک کپی یک به یک صورت میگیرد. توجه داشته باشید که در صورت وجود داشتن فایلی با همین نام در مقصد، به شما هشداری داده نمیشود و فایل بازنویسی میشود. برای جلوگیری از آن از آپشن -i استفاده میکنیم. دستور زیر فایل new.txt را از مسیر جاری به پوشه Documents کپی میکند:
کد:
$ cp new.txt Documents
در این مثال نام فایل مقصد را مشخص نکردهایم بنابراین فایل با همان نام قبلی خود به پوشه ی Documents کپی میشود. اما با مشخص کردن نام فایل مقصد مانند مثال زیر، نام فایل پس از کپی تغییر میکند:
کد:
$ cp new.txt Documents/1.txt
روش دوم استفاده از cp این است که نام چندین فایل را به عنوان مبدأ بدهید و یک دایرکتوری را نیز به عنوان مقصد بدهید (آرگومان اول تا یکی مانده به آخر نام فایلهای مبدأ و آرگومان آخر دایرکتوری مقصد است) همچنین میتوانید یک کلاس کاراکتری یا الگوی جستجو را نیز ارائه کنید.
برای انتقال فایل یا تغییر نام آن از دستور mv استفاده میشود. این دستور نام فایلی را به عنوان آرگومان اول میگیرد و به فایلی با نامی که توسط آرگومان دوم مشخص شده است انتقال میدهد:
این دستور فایل new.txt را به فایل 1.txt در همان مسیر انتقال میدهد، یا به بیان سادهتر تغییر نام میدهد. این دستور نیز مانند cp فایلهای از قبل موجود را رونویسی میکند.
برای حذف فایلها نیز از rm استفاده کنید. دقت کنید که این دستور سطل ذباله ای نمیشناسد و فایلها را برای همیشه حذف میکند!
تمامی فایلهایی را که نامشان با list شروع میشود حذف میکند. اگر بخواهید قبل از حذف هر فایل به شما هشدار دهد:
کد:
$ rm -i list*
rm: remove 'list'?
rm: remove 'list2.txt'
خطهای دوم و سوم هشدار های این فرمان هستند که با فشردن y حذف فایل را تأیید و با فشردن n از حذف فایل جلوگیری میکنید.
برای حذف یک دایرکتوری و تمام زیر شاخههای آن از آپشن r- استفاده کنید این آپشن دایرکتوری های خالی را فقط حذف میکند. برای حذف تمامی زیر شاخه ها rf- را به کار برید
-
۹. عملیات مربوط به فایل و دیرکتوری – قسمت سوم
تمرینهای مربوط به قسمت قبل
1. در پوشه ی خانه خود (home) یک کپی از فایل etc/services/ به نام myservices ایجاد کنید. سپس آنرا به srv.dat تغییر نام دهید و آن را با حفظ نام به دایرکتوری tmp/ کپی کنید. در پایان. هر دو کپی که ایجاد کردید را حذف کنید.
۲. چرا دستور mv مانند cp گزینه ی R- ندارد؟
۳. فرض کنید در یکی از دایرکتوری ها فایلی به نام file- (با خط تیره شروع میشود) دارید. چگونه آنرا حذف میکنید؟
۴. برخی دایرکتوری ها شامل فایلهای مهمی هستند و ممکن است بخواهید از حذف اتباهی آنها توسط * rm جلوگیری کنید. در این دایرکتوری فایلی به نام i- بسازید و اکنون * rm را امتحان کنید. چه اتفاقی میافتد و چرا؟
لینک کردن فایلها ــ ln و ln -s
لینوکس به شما اجازه میدهد تا مرجعی به فایلها به نام لینک ایجاد کنید، به این وسیله میتوانید فایلی را با چند نام متفاوت در یک دیرکتوری ایجاد کنید. اما چرا باید کسی چنین کاری کند؟ برای مثال فرض کنید فایل libPaint.so را که فایل حجیمی هم هست داریم، یک برنامه به این فایل تحت همین نام، و برنامه ی دیگری به همین فایل ولی با نام libPaint1.so نیاز دارد. اولین راهی که به ذهن ما میرسد این است که یک کپی از libpaint.so به نام libPaint1.so ایجاد کنیم، اما گفتم که این فایل حجم زیادی دارد و در ضمن راه حل معقولی نیست، در این شرایط از لینک کردن استفاده میکنیم، اکنون یک فایل به نام libPaint1.so خواهیم داشت که به همان libPaint.so اشاره میکند.
اما چگونه اینکار را انجام دهیم؟ دستور ln نام جدیدی (آرگومان دوم) را به یک فایل نسبت میدهد. مثال زیر را ببینید:
کد:
$ ln libPaint.so libPaint1.so
حالا با لیست کردن دیرکتوری خواهیم داشت:
کد:
$ ls -l
-rw-r--r-- 2 ali-rnt ali-rnt 0 Jul 12 08:53 libPaint1.so
-rw-r--r-- 2 ali-rnt ali-rnt 0 Jul 12 08:53 libPaint.so
اکنون به نظر میاید که دیرکتوری شامل یک فایل جدید به نام libPaint1.so است، اما درواقع ما فقط دو فایل داریم که به یک فایل رجوع میکنند. Reference counter این عدد را مشخص میکند و در خروجی ls -l نیز میتوانید آنرا ببینید، در دومین ستون عدد ۲ نشان میدهد که این فایل دو نام دارد. راه دیگر استفاده از ls -i است، در این صورت میبینید که شماره هر دو فایل یکسان است یعنی این دو فایل درواقع یکی هستند:
کد:
$ ls -i
1576000 libPaint1.so 1576000 libPaint.so
این شماره به نام inode number نیز شناخته میشود. Inode کوتاه شده ی Indirectional Node است، Inode ها تمامی اطلاعاتی که سیستم درباره فایل دارد را نگهداری میکنند، به جز نام فایل را. برای هر فایل دقیقاً فقط یک Inode وجود دارد.
اگر محتویات فایلی را تغییر دهید، محتویات فایلهای لینک شده به آن نیز تغییر میکند. چون ما فقط یک فایل با دو نام داریم، نه یک فایل و یک کپی از آن.
نکته: دیرکتوری ها فقط جدول هایی هستند که نام فایلها را به Inode مرتبط میکنند. و میتوان در یک جدول خانههای مختلفی داشت که نام های متفاوت ولی شماره Inode یکسان دارند. به هر یک از خانههای دیرکتوری که یک نام و شماره ی Inode داشته باشد یک لینک گفته میشود.
باید بدانید که برای فایلی با دو لینک، تقریباً غیر ممکن است که بتوان فهمید کدام یک فایل اصلی است. از دید سیستم هر دو نام با هم برابر و غیر قابل تشخیص اند.
حذف کردن یکی از لینک ها عدد مرجع را یک واحد کاهش میدهد. برای مثال اگر در مثال قبلی libPaint1.so را حذف کنیم:
کد:
$ls -l
-rw-r--r-- 2 ali-rnt ali-rnt 0 Jul 12 08:53 libPaint1.so
-rw-r--r-- 2 ali-rnt ali-rnt 0 Jul 12 08:53 libPaint.so
$ rm libPaint1.so
$ ls -l
-rw-r--r-- 1 ali-rnt ali-rnt 0 Jul 12 08:53 libPaint.so
میبینید که عدد مرجع از دو به یک کاهش پیدا کرده.
نکتهای در مورد حذف فایل ها: اگر فایلی را حذف کنید، این فایل دیگر نمیتواند توسط برنامهای باز شود، اما اگر قبل از حذف شدن برنامهای آنرا باز کرده باشد، سیستم صبر میکند تا آن برنامه بسته شود تا آن فایل را حذف کند. این روش در جاهایی کاربرد دارد که برنامه ما یک فایل موقت ایجاد میکند، در این صورت برنامه فایل مورد نیاز خود را باز میکند و بلافاصله آنرا حذف میکند، و به این ترتیب هنگامی که برنامه خاتمه مییابد فایل نیز حذف میشود.
لینک نمادی (Symbolic link)
نوعی از لینک که تا کنون بررسی کردیم لینک سخت (hard link) بود که برای ایجاد متکی بر شماره inode فایل بود. نوع دیگری از لینک نیز وجود دارد که لینک نمادی (یا لینک نرم (soft link) در تقابل با لینک سخت) نام گرفته است. این نوع لینک درواقع یک فایل است که نام فایل هدف را ذخیره میکند و دارای یک flag است که به سیستم میگوید این فایل یک لینک است. بر خلاف لینک سخت، فایل هدف نمیداند که از آن لینکی ایجاد شده (شماره مرجع آن به لینک نمادی ربطی ندارد) و حذف لینک ها به فایل هدف آسیبی نمیزند. همچنین، اگر فایل هدف را حذف کنید، هنگام باز کردن لینک نمادی آن با خطا مواجه خواهید شد چون آن لینک به هیچ جا اشاره نمیکند (به جایی که وجود ندارد.)
یکی از مشکلات لینک های سخت این بود که شما نمیتوانستید آنرا برای دیرکتوری ها به کار برید، که خوشبختانه این مشکل با لینک های نرم برطرف شده.
یک مثال از این مزیت: در حال حاضر بنابر توافق ایمیلهای خوانده نشده در دیرکتوری var/mail/ ذخیره میشوند، اما در گذشته این دیرکتوری var/spool/mail/ بود و برنامههای زیادی این مسیر را استفاده میکردند. برای اینکه این برنامهها کار کنند، دیرکتوری var/spool/mail/ را به دیرکتوری جدید لینک میکردند. بدون استفاده از لینک های نمادی این کار غیر ممکن بود.
ایجاد لینک های نمادی ساده است و شما کافی است گزینه ی s- را به دستور ln بدهید:
کد:
$ ln test.c -s testProg.c
$ ls -l
-rw-r--r-- 1 ali-rnt ali-rnt 0 libPaint.so
-rw-r--r-- 1 ali-rnt ali-rnt 0 test.c
lrwxrwxrwx 1 ali-rnt ali-rnt 6 testProg.c -> test.c
تمرین:
۱. در پوشه ی خانه خود، فایلی با یک متن دلخواه ایجاد کنید و سپس یک لینک سخت از آن ایجاد کنید. اکنون فایل را با یک ویرایشگر متن باز کنید و تغییر دهید. چه اتفاقی می افتد؟
۲.مانند تمرین قبل اینبار یک لینک نمادی از فایل اصلی ایجاد کنید. اینبار آنرا با ویرایشگر باز کنید و ببینید چه اتفاقی می افتد. همچنین بینید در صورت حذف فایل اصلی (فایل هدف) چه رخ میدهد؟
۳. میدانید که .. نیز یک لینک است (در دروس قبلی توضیح داده شده). امتحان کنید و ببینید که .. در مسیر ریشه یا همان / به کجا لینک شده است؟
۴. دستور زیر و خروجی اش را در نظر بگیرید.
کد:
$ ls -ai /
2 . 330211 etc 1 proc 4303 var
2 .. 2 home 65153 root
4833 bin 244322 lib 313777 sbin
228033 boot 460935 mnt 244321 tmp
330625 dev 460940 opt 390938 usr
میبینید که / و home/ شماره inode یکسانی دارند، در حالی که دو فایل در یک دیرکتوری نمیتوانند شماره inode یکسانی داشته باشند. علت این پدیده را توضیح دهید.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]