مشاهده نسخه کامل
: آموزش Linux Essentials
درود
تصمیم گرفتم که در این تاپیک آموزش Linux Essentials که مقدمه ای برای مدرک LPIC است را شروع کنم.
این آموزش ها فقط برای مدرک LPIC نیست و همه افرادی که دوست دارند لینوکس را یاد بگیرند میتوانند از این آموزش ها استفاده کنند. دقت کنید که سطح آموزش، مبتدی میباشد.
تمامی حقوق این آموزش ( که در واقع برگرفته شده از کتاب Linux Essentials - The LPI introducery programme میباشد) متعلق به انجمن P30World و وبلاگ شخصی من ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) میباشد.
مطالب این تاپیک:
۱. معرفی لینوکس و توزیع های لینوکسی
۲.تاریخچه ای کوتاه از لینوکس، نرم افزار آزاد، نرم افزار های ازاد معروف ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
۳.توزیع های مهم لینوکس، تفاوت میان توزیعها ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
۴.ورود به سیستم و خروج از آن (Login and Logout) ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
۵.ترمینال و پوسته، دلایل استفاده از پوسته ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
۶. راهنمایی گرفتن درباره ی فرمانها ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
۷. عملیات مربوط به فایل و پوشه ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
================================================== =================
۱.معرفی لینوکس و توزیع های لینوکسی
لینوکس توسط دانشجوی فنلاندی، لینوس تروالدز در اوایل دهه ی ۹۰ میلادی ساخته شد. لینوکس بر اساس یونیکس ساخته شد، یونیکس، سیستم عاملی ساخته شده در دهه ۷۰ بود که برای استفاده در رایانه های کوچک طراحی شده بود. لینوکس از ایده ها، استاندارد ها و طراحی یونیکس بهره میبرد اما کد آن کاملا مستقل از یونیکس است.
یکی از مواردی که لینوکس را از سیستم عامل هایی مانند ویندوز و مک متمایز میسازد، این است که این سیستم عامل قدرتمند توسط شرکت خاصی پشتیبانی نمیشود و آزادانه در دسترس است (گاهی اوقات در متن های انگلیسی با کلمه ی free مواجه میشوید که به معنای رایگان نیست بلکه به معنای ازاد است). آزاد بودن آن بدین معناست که هر کس میتواند کد آنرا به رایگان دریافت کند و استفاده کند، یا آنرا از نو بسازد و منتشر کند (حتی غیر رایگان، اما برنامه باید ازاد بماند. در مورد برنامه های ازاد در آینده بیشتر توضیح خواهیم داد)
آنچه که باید بدانید، این است که لینوکس تنها هسته (کرنل) میباشد. به بیان ساده، بخشی از سیستم عامل که وظایفی مانند اختصاص منابع سیستم مانند حافظه به برنامه ها و ... را بر عهده دارد. اما یک سیستم عامل تنها با یک کرنل قابل استفاده نیست و نیاز به برنامه های دیگری نیز دارد. این برنامه ها به همراه کرنل لینوکس در یک بسته بندی به نام "توزیع لینوکسی" منتشر میشوند. پس یک توزیع لینوکس، یک پکیج است که از کرنل لینوکس ، مستندات (Documentation) و برنامه های کاربردی تشکیل شده است. اینکه یک توزیع از چه برنامه های اساسی تشکیل میشود را در آینده خواهید آموخت...
تفاوت ها و شباهت های لینوکس
در واقع سه سیستم عامل قدرتمند، یعنی لینوکس، OSX و ویندوز تنها در جزئیات با یکدیگر تفاوت دارند. هر سه یک محیط گرافیکی به کاربر ارائه میدند که به آنها اجازه میدهد با رایانه به ساده ترین نحو ارتباط برقرار کنند. برنامه های ضروری و مهم برای هر سه در دسترس است. این یک مزیت مهم است که مهاجرت بین این سه سیستم عامل به راحتی میسر باشد.
در کنار محیط گرافیکی، هر سه سیستم عامل یک خط فرمان را نیز ارائه میدهند. در ویندوز و OS X این قابلیت بیشتر به درد مدیران سیستم میخورد و کاربران عادی از آن استفاده نمیکنند، اما در لینوکس، خط فرمان ضروری ترین بخش سیستم عامل است و بسیاری از اعمال به وسیله آن انجام میشوند. خط فرمان در لینوکس (و همچنین OS X) ابزار های کاربردی بسیاری را به کاربران ارائه میدهد .
در لینوکس، یادگیری خط فرمان به اندازه محیط گرافیکی - و حتی بیشتر از آن - اهمیت دارد.
۲.تاریخچه ای کوتاه از لینوکس، نرم افزار آزاد، نرم افزار های ازاد معروف
تاریخچه ای کوتاه از لینوکس
لینوکس توسط لینوس تروالدز به وجود آمد، در واقع او به دنبال ساخت هسته یک سیستم عامل نبود، بلکه براس سرگرمی داشت یک شبیه ساز ترمینال که مستقل از سیستم عامل اجرا میشد مینوشت، تا بتواند به سیستم یونیکس دانشگاه دسترسی پیدا کند. این برنامه رشد پیدا کرد و بالاخره به لینوکس تبدیل شد. بسیاری از دانشجویان و بیکاران و گیک ها به توسعه آن کمک کردند. نسخه ۰.۹۹ با مجوز GPL (کمی جلوتر خواهید خواند) منتشر شد (دسامبر ۱۹۹۲) و تقریبا یک سیستم عامل کامل ولی ساده بود. در سال ۱۹۹۶ نسخه ۲.۰ لینوکس با پشتیبانی از پردازنده های چندهسته ای منتشر شد و میتوانست ماژول های کرنل را هنگامی که در حال کار بود بارگذاری کند.
یکی دیگر از ویژگی های نسخه ی ۲.۰، معرفی Tux بود، پنگوئنی که نماد لینوکس بود.
توسعه پروژه لینوکس همچنان ادامه دارد و هم اکنون که این متن را مینویسم آخرین نسخه آن ۴.۴.۴ میباشد.
آزاد یا متن باز؟
در گذشته و همین الان برنامه های رایانه ای به وسیله ی کپی رایت محافظت میشوند. به این معنی که شما نمیتوانید این گونه برنامه هارا بدون اجازه ی صاحبش کپی کنید. تا اینکه ریچارد ام. استالمن که یک پژوهشگر در MIT بود تصمیم گرفت که به جای این شیوه، شیوه ی جدیدی در ارائه نرم افزار و مجوز آن به وجود آورد که بر روی اشتراک گذاری و پیشرفت نرم افزار تمرکز داشت. این پروژه GNU نام گرفت . استالمن پدر برنامه آزاد نام گرفت و برای یک برنامه ی ازاد در توافقنامه ی GNU چهار شرط اصلی تعریف میکنید:
۰: آزادی در اجرای برنامه به هر منظوری
۱: آزادی در مطالعه ی یک برنامه و شیوه کارکرد آن و تغییر آن برای انجام کارهای دلخواه خود
۲: آزادی در انتشار مجدد یک کپی از نرم افزار
۳: آزادی در تغییر و پیشبرد یک برنامه، و انتشار این پیشرفت ها (و به طور کلی نسخه دستخوش تغییر شده) به عموم، بنابراین تمام جامعه از آن سود میبرد.
قطعا برای اینکه یک برنامه ازادی های شماره ۱ و ۳ را به کاربران بدهد باید سورس (متن برنامه) خود را نیز منتشر کند.
اما یک برنامه چگونه میتواند یک برنامه ی ازاد تلقی شود؟ اینکار به وسیله ی مجوز (License) صورت میگیرد، یک سند رسمی که هنگام خرید، دانلود، ... یک برنامه به همراه آن ارائه میشود. برای برنامه های آزاد مجوز های زیادی قابل استفاده میباشند که معروف ترین آنها GPL (General Public License) میباشد. مجوزی که لینوکس تحت آن منتشر میشود. بنابر مجوز GPL، برنامه باید به شکل سورس کد در دسترس قرار بگیرد، میتواند مورد تغییر قرار گیرد و دوباره منتشر شود اما به شرطی که دوباره با مجوز GPL منتشر شود (یعنی نمیتونید برنامه ای رو با مجوز GPL بگیرید و تغییر بدید، اما با مجوز دیگه ای منتشر کنید) ، همچنین بنابر این مجوز میتوان برنامه را به صورت اجرایی هم منتشر کرد (یا فروخت) اما متن برنامه نیز باید به شیوه ای در اختیار قرار گیرد.
برنامه های آزاد معروف
برنامه های آفیس
از این دسته برنامه ها میتوان به OpenOffice,org ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])، libreOffice ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) اشاره کرد.
گرافیک و چند رسانه ای
Gimp ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) ، Inkscape ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]), Imge Magik ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برای ویرایش تصویر
Audacity ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برای ضبط و میکس صدا
Cinelerra ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) وOpenShot ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برای ویرایش فیلم
Blender ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برای مدلینگ و انیمیشن
سرویس اینترنت
بدون لینوکس، دنیای وب غیر قابل تصور است. صدها هزار سرور گوگل با لینوکس کار میکنند و و بسیاری از سرویس های محتوا. از جمله برنامه های ازاد اینترنت میتوان به آپاچی و MySQL اشاره کرد.
۳.توزیع های مهم لینوکس، تفاوت میان توزیعها
توزیعهای مهم لینوکس
اگر شخصی بگوید که روی رایانه اش «لینوکس» اجرا میکند، معمولاً منظورش این نیست که کرنل را به تنهایی اجرا میکند، بلکه منظورش این است که یک محیط نرم افزاری بر پایه لینوکس را اجرا میکند که به آن یک توزیع لینوکس میگویند، که معمولاً شامل پوسته (bash)، ابزار های خط فرمان که معمولاً مربوط به پروژه GNUهستند، سرور گرافیک X.Org و یک محیط دسکتاپ مانند KDE و Gnome، و چندین نرمافزار ضروری مانند مرورگر وب، ابزار های آفیس و … میباشد.
یک فرد میتواند به تنهایی تمامی این ابزار ها را گردآوری و نصب کند، اما اکثر کاربران ترجیح میدهند از یک مجموعه نرمافزار پیش ساخته یا به عبارتی دیگر، یک توزیع لینوکس، استفاده کنند.
نخستین توزیع های لینوکس در اوایل ۱۹۹۲ تولید شدند، که البته همه ی آنها متوقف و فراموش شده اند. قدیمی ترین توزیعی که همچنان نیز فعال است، Slackware میباشد که در جولای ۱۹۹۳ برای نخستین بار منتشر شد.
برای اطلاعات بیشتر در مورد توزیعهای لینوکسی میتوانید به وبسایت Distrowatch.com مراجعه کنید.
رد هت (Red Hat) ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
ردهت در ۱۹۹۳ توسط 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 وارد سیستم شدهام و در مسیر /usr هستم.
ساختار دستورات
دستورات رشته ای از کاراکتر ها هستند که سینتکس (syntax) مشخصی دارند و با فشردن Enter تمام شده و به شل ارسال میشوند. بسیاری از دستورات به زبان انگلیسی اند یا از این زبان برگرفته شدهاند. وقتی شما دستوری را وارد میکنید شل ابتدا آنرا به صورت کلمه به کلمه تقسیم میکند، کلمات، مانند آنچه که در متون واقعی هم هست، با فاصله از هم جدا میشوند. معمولاً اولین کلمه، همان دستوری است که میخواهیم اجرا شود و بقیه کلمات پارامتر های آن هستند که اطلاعات بیشتری به شل میدهند.
نکتهای که باید به آن توجه کنید این است که شل میان حروف کوچک و بزرگ تفاوت قائل میشود، و این برخلاف تجربه ایست که کاربران ویندوز و DOS داشته اند. برای مثال دستور CD و cd و cD در شل با هم فرق دارند، در حالی که DOS آنها را یکسان میبیند. در شل، تقریباً تمامی دستورات از حروف کوچک تشکیل شده اند.
و یک نکته ی دیگر، یک فاصله همان کاری را میکند که چندتا فاصله انجام میدهند. یعنی شل برای جداسازی کلمات به تعداد فاصله هایی که بین آنها گذاشته اید توجه نمیکند، همچنین با کاراکتر tab هم میتوانید کلمات را جدا کنید.
گاهی اوقات دستوری که مینویسید خیلی طولانی است و میخواهید آنرا در چند خط بنویسید، برای اینکار، در انتهای هر خط یک / بگذارید و سپس اینتر را بزنید.
پارامتر های ارسالی به یک فرمان دو دسته اند:
۱.آنهایی که با – شروع میشوند: به این پارامتر ها گزینه (Option) میگویند.اینها معمولاً اختیاری هستند و نیاز به وارد کردن آنها ندارید، مگر اینکه بخواهید فرمان عملیات را به شکلی دیگر انجام دهد. در قسمت بعد که به معرفی فرمانها خواهیم پرداخت با مثالهای زیاد وظایف آنها را خواهید فهمید.
۲.آرگومان ها:پارامتر هایی هستند که بدون – وارد میشوند و معمولاً نام فایل هستند که فرمان باید پردازش کند.
ساختار یک فرمان، در نهایت، به شکل زیر خلاصه میشود:
فرمان: کاری باید انجام شود؟
گزینه ها (Options): چگونه انجام شود؟
آرگومان ها: بر روی چه چیزی باید عملیات شود؟
انواع دستورات
در شل ها، دستورت به دو دسته تقسیم میشوند:
دستورات داخلی: دستوراتی که توسط خود شل فراهم شدهاند. Bash حدود ۳۰ دستور داخلی دارد که میتوانند خیلی سریع اجرا شوند (نسبت به نوع دوم دستورات).
دستورات خارجی: این دستورات درواقع یک برنامه (فایل اجرایی) هستند. وقتی شما یک دستور خارجی را وارد میکنید، شل درواقع فایل اجرایی آنرا که در مسیری از هارد دیسک (معمولاً bin/ یا /usr/bin) وجود دارد را اجرا میکند.
برای تشخیص نوع دستور، آنرا به عنوان آرگومان به دستور type بفرستید. هماکنون اینکار را انجام دهید. ترمینال را اجرا کنید و بنویسید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این مثال به شما قسمتهای مختلف یک فرمان را هم نشان میدهد. Type فرمانی است که باید اجرا شود، و echo هم یک آرگومان است، یعنی آنچه که باید روی آن عملیات انجام شود. فرمان type یک دستور را به عنوان آرگومان میگیرد و بررسی میکند که داخلی است یا خارجی. پس از وارد کردن دستور بالا باید خروجی مانند این ببینید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به آن معنی که echo یک فرمان داخلی است. اگر یک فرمان خارجی را بررسی کنید، مسیر فایل اجرایی آنرا به شما میگوید. مثلاً فرمان date :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خروجی اش به این صورت است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور echo که بررسی کردید برای نمایش پیام و یک سری کارهای دیگر استفاده میشود. کافیست متنی که میخواهید را به عنوان آرگومان به آن بدهید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و date هم تاریخ فعلی را نمایش میدهد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نکته: از این پس برای تشخیص فرمان وارد شده و خروجی آن در مثال ها، اول دستوراتی که وارد میشود یک $ قرار میدهیم. اما توجه کنید که شما نباید آن را وارد کنید.
۶. راهنمایی گرفتن درباره ی فرمانها
لینوکس سیستم عاملی قوی و پیچیده است و همانند سایر سیستم عامل های پیچیده، باید مستندات جامع و کاملی برای آن وجود داشته باشد تا بتوان این پیچیدگی را مدیریت کرد. بخشهای بسیاری از لینوکس (متأسفانه نه تمامی آنها) به خوبی مستند سازی شده اند. در این بخش از آموزش برخی روشهای متداول برای دسترسی به مستندات (Documentation) در لینوکس را معرفی و تشریح کنیم.
نکته: مستندات، به متنی گفته میشود که همراه یک محصول، نرمافزار یا هر چیز دیگر ارائه میشود و شامل معرفی آن برنامه، روش استفاده از آن است.
دستور help و گزینه ی help--
در بش، برای دسترسی به توضیحات و جزئیات بیشتر درباره دستورات داخلی میتوانید از دستور help استفاده کنید و دستوری را که درباره آن راهنمایی میخواهید، به عنوان یک آرگومان به این دستور بفرستید. مثلا برای راهنمایی در مورد دستور exit:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همانگونه که میبینید دستور 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 به ما میدهد.
راههای دیگر
برای تقریباً تمامی برنامههای نصب شده میتوانید به مسیر
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یا
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بروید (به توزیع نصب شده بستگی دارد. همچنین میتوانید مرورگر را باز کنید، در نوار آدرس عبارت google.com را وارد کرده و اینتر را بزنید و در مورد دستور جستجو کنید. در محیط گرافیکی هم بسیاری از برنامهها در منو گزینه ای را برای دریافت راهنمایی قرار داده اند. سایتهای زیر هم میتواند مفید باشند:
tldp.org
پروژه ی مستند سازی لینوکس که صفحات راهنما و HOWTO ها را اداره میکند.
linux.org
یک پرتال برای علاقهمندان لینوکس
linuxwiki.com
و بسیاری دیگر.
۷. عملیات مربوط به فایل و پوشه
از این قسمت آموزش به بعد، هر قسمت آموزش مطالب بیشتری رو در بر میگیره، قسمتهای قبلی حجم زیادی چرت و پرت داشت. وقتی با آموزش قبلی خودم (آموزش CMD) مقایسش کردم دیدم که اون آموزش خیلی بهتر از این شده چون همه چی خلاصه و مفید بوده. پس از این قسمت، این آموزش هم روال آموزش CMD رو خواهد داشت.
نام فایلها در لینوکس
شما میتوانید از هر کاراکتری که میخواهید استفاده کنید. اما برخی از کاراکتر ها غیر مجازند چون در سیستم عامل معنای خاصی دارند. دو کارکتر کاملاً غیر مجاز، / و بایت صفر (کاراکتری که در کد اسکی مقدار ۰ را دارد یا همان نول) هستند. شما میتوانید از فاصله و نقطه و … نیز استفاده کنید. اما دقت کنید که این کار توصیه نمیشود چون مشکلاتی در زمینه ی قابلیت انتقال دارد (Portability). برای مثال در ویندوز \ یک کاراکتر غیر مجاز است در حالی که در لینوکس اینگونه نیست.
طول نام فایل بستگی به سیستم فایل پارتیشنی دارد که فایل در آن ذخیره شده، اما میتوانید آنرا ۲۵۵ کاراکتر در نظر بگیرید چون برخی سیستم فایلها مانند NTFS بیش از این مقدار را پشتیبانی نمیکنند.
تفاوت مهم دیگر هم این است که برخلاف ویندوز که نوع فایل را از پسوند فایل تشخیص میدهد، لینوکس اصلاً به پسوند توجهی نمیکند. درواقع اگر فایل متنی به نام textFile داشته باشید، برای لینوکس فرقی نمیکند که آنرا به نام textFile ذخیره کنید یا textFile.txt ، اکثر افراد ترجیح میدهند برای فایلهای متنی معمولی پسوندی انتخاب نکنند.
در لینوکس نام فایلهای مخفی با . شروع میشود. یعنی برای مخفی کردن فایل کافیست ابتدای نام آن یک . قرار دهید تا مخفی شود. و همچنین اندروید.
همانگونه که گفتیم برای اینکه در قابلیت انتقال مشکلی پیش نیاید بهتر است از کاراکتر های خاص استفاده نکنید. برای همین یک لیست از کاراکتر ها تعریف شده که اگر از آنها استفاده کنید میتوانید مطمئن باشید که نام فایل در همه ی سیستم عامل ها مورد قبول خواهد بود.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و نکته ی آخر هم اینکه نام فایل باید حتماً با یکی از این کاراکتر هاکه گفتیم شروع شود.
به چند مثال توجه کنید و سپس به کار با پوشه ها میپردازیم.
نام های زیر برای فایلها کاملاً مجازند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما این اسامی غیر مجاز میباشند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دایرکتوری ها
در لینوکس دایرکتوری ها همان فایلها هستند، گرچه شما نمیتوانید تمامی عملیاتی را که روی فایلهای معمولی انجام میدادید روی دایرکتوری ها انجام دهید. بنابراین، نام فایلها از همان قوانین مربوط به نام فایلها تبعیت میکند. هر ایرکتوری میتواند شامل دایرکتوری های دیگر باشد و بدین ترتیب یک ساختار درختی تشکیل میشود. در لینوکس، دایرکتوری که بالاترین سطح را دارد / نام دارد و دایرکتوری ریشه (root) نام دارد. البته توجه داشته باشید که این root هیچ ربطی با کاربر root ندارد.
مسیر مطلق و مسیر نسبی
هر فایل با اسمی مشخص میشود که با یک / شروع میشود و با عنوان کردن تمام دایرکتوری ها به آن فایل میرسد. برای مثال، اگر فایل stdlib.h در پوشه یinclude، پوشه ی include در پوشه ی usr و پوشه ی usr در دایرکتوری ریشه (/) قرار داشته باشد، این فایل اینگونه مشخص میشود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چنین نامی که با / آغاز میشود، مسیر مطلق یا Absolute path نامیده میشود.
یک مسیر نسبی، همانگونه که از اسمش مشخص است، بر اساس دایرکتوری فعلی مشخص میشود. برای مثال اگر هماکنون در پوشه ی lib باشیم و بخواهیم فایل fstab در پوشه ی init را مشخص کنیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نکتهای دیگر، وجود دو میانبر خاص است که در تمام دایرکتوری ها وجود دارند (البته / استثناء است). این دو میانبر . و .. هستند.
. به معنای پوشه ی فعلی و .. به معنی پوشه ی والد پوشه ی فعلی است. اکنون چند مثال میزنیم تا این موضوع روشنتر شود.
فرض کنیم فایل 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 را درون آن بسازیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما اگر دایرکتوری Documents هماکنون وجود نداشته باشد چه؟ به این مثال دقت کنید: میخواهیم دایرکتوری به نام new در مسیر فعلی بسازیم و داخل آن نیز دایرکتوری dir را ایجاد کنیم. خب، دستور قبلی که بررسی شد، فقط برای دایرکتوری ای که هماکنون وجود دارد جواب میدهد. میتوانیم این کار را انجام دهیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما یک راه سادهتر هم وجود دارد و آن استفاده از گزینه ی p- است. یعنی به جای دستور بالا میتوان نوشت:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا برای حذف یک دایرکتوری، میتوانیم از rmdir استفاده کنیم. برای حذف دایرکتوری new در مثال قبل مینویسیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
الگوهای جستجوی فایل
بعضی وقتها نیاز داریم تا دستوری را برای فایلهای خاصی به کار ببریم. مثلاً همه ی فایلهایی که با حرف p شروع میشوند حذف کنیم. یکی از راههای انجام اینکار کاراکتر * است. به جای این کاراکتر هررشته ای از حروف میتواند بنشیند. برای مثال، اگر فایلهای زیر را داشته باشیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر بخواهیم نام همه ی فایلهایی که با حرف c شروع میشوند ببینیم، مینویسیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به تصویر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
میبینید که فایل main.c نمایش داده نمیشود. البته دقت داشته باشید که فایلهای مخفی نادیده گرفته میشوند.
کاراکتر دیگر ؟ است. برخلاف ستاره که به جای آن یک رشته میتواند بنشیند، به جای علامت سؤال فقط یک کاراکتر میتواند بنشیند. همان مثال قبل:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در قسمت بعدی آموزش به ادامه ی بحث عملیات مربوط به فایلها میپردازیم.
(این قسمت آموز در وبلاگ من ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) نیز در دسترس است)
۸. عملیات فایل و پوشه - قسمت دوم
کلاسهای کاراکتری
یک الگوی جستجوی دیگر کلاس کاراکتر است، الگوی جستجوی زیر را در نظر بگیرید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کاراکتر هایی که درون براکت قرار دارند یک به یک جایگزین کل براکت میشوند. مثلاً الگوی جستجوی بالا با فایلهای
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مطابقت میکند. اما با فایلهای زیر خیر:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
۱. دقیقاً یک کاراکتر بعد از prog و قبل از c. نیاز است.
۲. ۴ معرفی نشده است.
۳. a نیز معرفی نشده است
۴. فقط یک کاراکتر مورد نظر است نه دو تا
یک روش دیگر استفاده از کلاسهای کاراکتری، به کارگیری «محدوده ها» است. به این صورت:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در خط اول، به جای کل براکت هر رقم دلخواه و در خط دوم، هر حرف بزرگ انگلیسی قرار میگیرد. اکنون به بررسی مثالهای بیشتری میپردازیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این الگو علاوه بر اینکه نام هایی مانند progB.c و progx.c را شامل میشود، به نام فایلی مانند prog_.c نیز اشاره میکند. علت آن نیز ترتیب کاراکتر ها در جدول اسکی است. برای مشاهده این جدول میتوانید man ascii را در ترمینال وارد کنید. اگر بخواهیم الگویی بنویسیم که حروف کوچک و بزرگ را در برگیرد به جای الگوی قبل مینویسیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یک روش دیگر استفاده از کلاسهای کاراکتر وارونه (Negated Character Classes) است. میتوانید آنرا به صورت «هر کاراکتری به جز» بخوانید. مثلا:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمامی فایلهایی را در برمیگیرد که کاراکتری که بین g و . قرار میگیرد جزء حروف الفبا نباشد.
براکت ها
عبارات براکت دار مانند عبارت زیر:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توسط شل به صورت نام سه فایل مجزا در نظر گرفته میشود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توجه داشته باشید که براکت ها از یک نظر مانند کلاسهای کاراکتری و الگو ها عمل نمیکنند، و این تفاوت در آن است که در استفاده از براکت ها، وجود فایل مهم نیست. برای مثال در مثال قبل، اگر فایل blue.txt وجود نداشته باشد باز هم شل جا به جایی را انجام میدهد. این نکته در مواردی مانند مثال زیر به کار میرود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پوشه ی python را ایجاد و درون آن سه پوشه به نام firstProject، secondProject و thirdProject ایجاد میکند.
تمرین
۱. دایرکتوری فعلی (دایرکتوری که در آن قرار داریم) شامل فایلهای زیر است:
prog.c prog1.c prog2.c progabc.c prog
p.txt p1.txt p21.txt p22.txt p22.dat
برای هر کدام از الگوهای جستجوی زیر، کدام فایلها صدق میکنند؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
۲. تفاوت ls و * ls چیست؟ (میتوانید هر دو را در یک دایرکتوری که شامل چند زیرشاخه است امتحان کنید)
عملیات مربوط به فایلها
کپی، انتقال و حذف
برای کپی کردن فایلها از دستور cp استفاده میکنیم. این کار به دو روش انجام پذیر است:
اگر به cp دو آرگومان بدهید، که یکی از آنها نام فایل مبدأ و دیگری نام فایل مقصد باشد، در این صورت یک کپی یک به یک صورت میگیرد. توجه داشته باشید که در صورت وجود داشتن فایلی با همین نام در مقصد، به شما هشداری داده نمیشود و فایل بازنویسی میشود. برای جلوگیری از آن از آپشن -i استفاده میکنیم. دستور زیر فایل new.txt را از مسیر جاری به پوشه Documents کپی میکند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در این مثال نام فایل مقصد را مشخص نکردهایم بنابراین فایل با همان نام قبلی خود به پوشه ی Documents کپی میشود. اما با مشخص کردن نام فایل مقصد مانند مثال زیر، نام فایل پس از کپی تغییر میکند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
روش دوم استفاده از cp این است که نام چندین فایل را به عنوان مبدأ بدهید و یک دایرکتوری را نیز به عنوان مقصد بدهید (آرگومان اول تا یکی مانده به آخر نام فایلهای مبدأ و آرگومان آخر دایرکتوری مقصد است) همچنین میتوانید یک کلاس کاراکتری یا الگوی جستجو را نیز ارائه کنید.
برای انتقال فایل یا تغییر نام آن از دستور mv استفاده میشود. این دستور نام فایلی را به عنوان آرگومان اول میگیرد و به فایلی با نامی که توسط آرگومان دوم مشخص شده است انتقال میدهد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این دستور فایل new.txt را به فایل 1.txt در همان مسیر انتقال میدهد، یا به بیان سادهتر تغییر نام میدهد. این دستور نیز مانند cp فایلهای از قبل موجود را رونویسی میکند.
برای حذف فایلها نیز از rm استفاده کنید. دقت کنید که این دستور سطل ذباله ای نمیشناسد و فایلها را برای همیشه حذف میکند!
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمامی فایلهایی را که نامشان با list شروع میشود حذف میکند. اگر بخواهید قبل از حذف هر فایل به شما هشدار دهد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خطهای دوم و سوم هشدار های این فرمان هستند که با فشردن 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 نام جدیدی (آرگومان دوم) را به یک فایل نسبت میدهد. مثال زیر را ببینید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا با لیست کردن دیرکتوری خواهیم داشت:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اکنون به نظر میاید که دیرکتوری شامل یک فایل جدید به نام libPaint1.so است، اما درواقع ما فقط دو فایل داریم که به یک فایل رجوع میکنند. Reference counter این عدد را مشخص میکند و در خروجی ls -l نیز میتوانید آنرا ببینید، در دومین ستون عدد ۲ نشان میدهد که این فایل دو نام دارد. راه دیگر استفاده از ls -i است، در این صورت میبینید که شماره هر دو فایل یکسان است یعنی این دو فایل درواقع یکی هستند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این شماره به نام inode number نیز شناخته میشود. Inode کوتاه شده ی Indirectional Node است، Inode ها تمامی اطلاعاتی که سیستم درباره فایل دارد را نگهداری میکنند، به جز نام فایل را. برای هر فایل دقیقاً فقط یک Inode وجود دارد.
اگر محتویات فایلی را تغییر دهید، محتویات فایلهای لینک شده به آن نیز تغییر میکند. چون ما فقط یک فایل با دو نام داریم، نه یک فایل و یک کپی از آن.
نکته: دیرکتوری ها فقط جدول هایی هستند که نام فایلها را به Inode مرتبط میکنند. و میتوان در یک جدول خانههای مختلفی داشت که نام های متفاوت ولی شماره Inode یکسان دارند. به هر یک از خانههای دیرکتوری که یک نام و شماره ی Inode داشته باشد یک لینک گفته میشود.
باید بدانید که برای فایلی با دو لینک، تقریباً غیر ممکن است که بتوان فهمید کدام یک فایل اصلی است. از دید سیستم هر دو نام با هم برابر و غیر قابل تشخیص اند.
حذف کردن یکی از لینک ها عدد مرجع را یک واحد کاهش میدهد. برای مثال اگر در مثال قبلی libPaint1.so را حذف کنیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میبینید که عدد مرجع از دو به یک کاهش پیدا کرده.
نکتهای در مورد حذف فایل ها: اگر فایلی را حذف کنید، این فایل دیگر نمیتواند توسط برنامهای باز شود، اما اگر قبل از حذف شدن برنامهای آنرا باز کرده باشد، سیستم صبر میکند تا آن برنامه بسته شود تا آن فایل را حذف کند. این روش در جاهایی کاربرد دارد که برنامه ما یک فایل موقت ایجاد میکند، در این صورت برنامه فایل مورد نیاز خود را باز میکند و بلافاصله آنرا حذف میکند، و به این ترتیب هنگامی که برنامه خاتمه مییابد فایل نیز حذف میشود.
لینک نمادی (Symbolic link)
نوعی از لینک که تا کنون بررسی کردیم لینک سخت (hard link) بود که برای ایجاد متکی بر شماره inode فایل بود. نوع دیگری از لینک نیز وجود دارد که لینک نمادی (یا لینک نرم (soft link) در تقابل با لینک سخت) نام گرفته است. این نوع لینک درواقع یک فایل است که نام فایل هدف را ذخیره میکند و دارای یک flag است که به سیستم میگوید این فایل یک لینک است. بر خلاف لینک سخت، فایل هدف نمیداند که از آن لینکی ایجاد شده (شماره مرجع آن به لینک نمادی ربطی ندارد) و حذف لینک ها به فایل هدف آسیبی نمیزند. همچنین، اگر فایل هدف را حذف کنید، هنگام باز کردن لینک نمادی آن با خطا مواجه خواهید شد چون آن لینک به هیچ جا اشاره نمیکند (به جایی که وجود ندارد.)
یکی از مشکلات لینک های سخت این بود که شما نمیتوانستید آنرا برای دیرکتوری ها به کار برید، که خوشبختانه این مشکل با لینک های نرم برطرف شده.
یک مثال از این مزیت: در حال حاضر بنابر توافق ایمیلهای خوانده نشده در دیرکتوری var/mail/ ذخیره میشوند، اما در گذشته این دیرکتوری var/spool/mail/ بود و برنامههای زیادی این مسیر را استفاده میکردند. برای اینکه این برنامهها کار کنند، دیرکتوری var/spool/mail/ را به دیرکتوری جدید لینک میکردند. بدون استفاده از لینک های نمادی این کار غیر ممکن بود.
ایجاد لینک های نمادی ساده است و شما کافی است گزینه ی s- را به دستور ln بدهید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمرین:
۱. در پوشه ی خانه خود، فایلی با یک متن دلخواه ایجاد کنید و سپس یک لینک سخت از آن ایجاد کنید. اکنون فایل را با یک ویرایشگر متن باز کنید و تغییر دهید. چه اتفاقی می افتد؟
۲.مانند تمرین قبل اینبار یک لینک نمادی از فایل اصلی ایجاد کنید. اینبار آنرا با ویرایشگر باز کنید و ببینید چه اتفاقی می افتد. همچنین بینید در صورت حذف فایل اصلی (فایل هدف) چه رخ میدهد؟
۳. میدانید که .. نیز یک لینک است (در دروس قبلی توضیح داده شده). امتحان کنید و ببینید که .. در مسیر ریشه یا همان / به کجا لینک شده است؟
۴. دستور زیر و خروجی اش را در نظر بگیرید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میبینید که / و home/ شماره inode یکسانی دارند، در حالی که دو فایل در یک دیرکتوری نمیتوانند شماره inode یکسانی داشته باشند. علت این پدیده را توضیح دهید.
این قسمت در وبلاگ ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
۱۰. نمایش محتویات فایل ها - more و less
از این به بعد آموزش های لینوکس کوتاه تر میشوند تا هر قسمت آموزش فقط به یک مضوع خاص بپردازد.
برای نمایش محتویات فایل بر روی صفحه میتوانید به راحتی از دستور more استفاده کنید، این دستور میتواند محتویات یک فایل متنی را صفحه به صفحه برای شما نمایش دهد. یک صفحه از محتویات فایل نمایش داده میشود، و سپس در آخرین خط –-More-- را میبینید، میتوانید با فشردن کلید های معرفی شده در جدول زیر متن را پیمایش کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
میتوانید more را با گزینه های خاصی که پشتیبانی میکند اجرا کنید. گزینه ی s- (مخفف squeeze) در صورت وجود چند خط خالی، فقط یک خط خالی را نمایش میدهد (صرفه جویی در فضای صفحه). با استفاده از گزینه ی n number- میتوانید تعین کنید که هر صفحه از چند خط تشکیل شود، در غیر این صورت، بر اساس مختصات ترمینال تنظیم خواهد شد.
خروجی more محدودیتهایی نیز دارد، مثلاً نمیتوانید به عقب بازگردید تا به ابتدای فایل برسید. بنابراین بهتر است از نسخه بهبود یافته آن به نام less استفاده کرد. Less به شما این امکان را میدهد تا با کلید های جهت متن را پیمایش کنید، عملکرد جستجو بهبود یافته و این امکان را میدهد که از ابتدا یا انتهای متن شروع به جستجو کنید. دستور های معمول در جدول زیر آمده اند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
جستجوی فایلها – find
برای پیدا کردن فایلی که نمیدانید دقیقاً کجا ذخیره کردهاید میتوانید از ابزار find استفاده کنید. این ابزار تمامی دیرکتوری ها را به طور بازگشتی جستجو میکند تا فایل مشابه را پیدا کند. بازگشتی (Recursively) به این معناست که اگر یک دیرکتوری را به آن بدهید، زیر شاخهها، زیر شاخههای آنها و به همین ترتیب را جستجو میکند. خروجی find شامل مسیر فایل هاست، که میتواند به دیگر برنامهها منتقل شود. برای شناخت ساختار این فرمان به مثال زیر توجه کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این دستور مسیر فعلی را برای یافتن فایلهای متعلق به کاربر joe جستجو میکند.گزینه ی print – در اینجا یک عمل (action) است، که به دستور میگوید نتایج را روی صفحه بنویسد. گرچه اگر عملی را تعیین نکنید دستور find به طور خودکار print را در نظر میگیرد. دستور find به آرگومان هایی هم نیاز دارد.
دیرکتوری شروع
دیدید که یکی از آرگومان های مورد نیاز این دستور، دیرکتوری ای را مشخص میکند که جستجو از آن آغاز میشود. در انتخاب این دیرکتوری باید دقت کافی داشت. برای مثال اگر محل شروع را ریشه (/) در نظر بگیرید، باز هم فایل پیدا میشود، اما جستجو بیشتر طول میکشد. همچنین به مجوز ها نیز دقت کنید و وقت خودتان را صرف جستجو در مکان هایی که مجوزشان را ندارید نکنید.
نکته: اگر به دستور یک مسیر نسبی تحویل بدهید، مسیری که به شما میدهد هم نسبی است و همین موضوع در مورد مسیر قطعی هم صدق میکند. به مثال قبلی توجه کنید.
شما میتوانید به جای یک دیرکتوری، لیستی از چندین دیرکتوری بدهید تا بررسی شوند.
شروط تست
این گزینه ها به دستور میگویند که فایل مورد نظر دارای چه شرایط و نیازمندی هایی است. مهمترین شروط تست در جدول زیر آمده اند
شرط تست
توضیحات
-type
نوع فایل را مشخص میکند( در آینده توضیح داده میشود)
b: block device file
c: character device file
d: directory
f: plain file
l: symbolic link
p: FIFO (named pipe)
s: Unix domain socket
-user
مشخص میکند که مالک فایل کدام کاربر باشد، میتواند نام کاربری یا UID باشد.
-group
تعیین میکند که مالک فایل عضو کدام گروه کاربری است.
-size
فایلهایی با سایز مشخص را جستجو میکند.اگر تنها یک عدد بدهید واحد آن یک بلاک ۵۱۲ بایتی در نظر گرفته میشود، واحد بایت و kibibyte هم میتوان استفاده کرد (با اضافه کردن c یا k به انتهای عدد). گذاشتن – یا + قبل از عدد هم باعث میشود فایلهایی با حجم کمتر یا بیشتر از عدد تعین شده جستجو شوند.
-atime
بر اساس زمان آخرین دسترسی به فایل جستجو میکند، عددی که به این تست و دوتای بعدی میدهید، بر اساس روز محاسبه میشود. برای استفاده از دقیقه به جای روز، time… را با min… عوض کنید.
-mtime
بر اساس آخرین ویرایش فایل
-ctime
بر اساس آخرین تغییر inode ( مانند تغییر مجوز، دسترسی به محتویات، تغییر نام، و غیره)
-perm
با استفده از این تست تعیین میکنید فایلهای مورد نظر دارای چه مجوزی هستند. این مجوز ها یک عدد در مبنای هشت اند.
-links
تعیین میکند فایل موردنظر چه شماره مرجعی دارد. در قسمت ۹ دیدیم که این شماره با ساختن لینک ها تغییر میکند.
-inum
جستجو بر اساس inode
-name
الگوی نام فایل را مشخص میکند (در قسمتهای قبلی توضح داده شد). با گزینه ی iname- جستجو به کوچک یا بزرگی حروف حساس نمیشود.
عملگر ها:
گزینه
عملگر
معنا
!
Not
تستی که بعد از این علامت میآید نباید درست باشد.
-a
And
تست قبل و بعد از این گزینه هر دو باید درست باشند.
-o
Or
حداقل یکی از دو تست قبل و بعد از این گزینه باید درست باشند.
اگر بخواهیم از چندین تست استفاده کنیم، آنها را با هم And میکنیم. اگر از پرانتز استفاده شد، باید قبل از پرانتز \ بگذارید. یک مثال که فایلهایی که با A شروع میشوند یا دیرکتوری هستند را جستجو میکند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
عملها (Actions)
قبلاً یکی از عملها را دیدید (print-). علاوه بر آن، دو عمل دیگر نیز وجود دارند که دستوراتی را برای فایلها اجرا میکنند. فرق میان این دو، این است که exec- قبل از اجرای فرمان از کاربر تأیید نمیخواهد ولی ok- از کاربر میخواهد که انجام فرمان را تأیید کند.
دستوری که پس از exec- می آید، باید در انتها با ; همراه شود و چون این کاراکتر، یک کاراکتر خاص است، باید با گذاشتن \ پیش از آن، آنرا متمایز کنید.
دو براکت ({}) در دستور با نام فایلی که پیدا شده جایگزین میشود. بهتر است براکت ها را در ' محدود کنید تا با فایلهایی که در اسم آنها فاصله وجود دارد به مشکل بر نخورید.
مثال:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این مثال فایلهای متعلق به joe را در دیرکتوری فعلی جستجو میکند و برای هر کدام دستور ls -l را اجرا میکند.
مثال:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این دستور فایلهایی را که بیش از دو هفته از آخرین دسترسی به آنها گذشته را با اعلان به کاربر (i-) حذف میکند.
نکته:
گاهی اوقات مانند مثال بالا، اجرای پردازش rm برای هر فایل کار غیر مفیدی است، در این شرایط، دستور xargs به کمک ما می آید. به این نمونه توجه کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کاراکتری که قبل از xargs میبینید، خط لوله نام دارد و خروجی یک دستور را به عنوان ورودی به دستور دیگری میدهد، که در این مثال نام فایلهای یافت شده است. Xargs ورودی های خود را تا یک حد مجاز (که قابل تنظیم است) میخواند و آنها را به عنوان آرگومان به دستور میدهد. این عبارات خوانده شده با فاصله جدا میشوند.
نکته:
فایلهای با اسمی عجیب (مانند آنها که دارای فاصله اند)، در استفاده از ترکیب find و xargs دردسر ساز میشوند. راه حل استفاده از print0- به جای print- است که به جای جداسازی با فاصله یا خط جدید، از بایت نول (Null Byte) استفاده میکند که شل با آن به مشکلی بر نخورد. همچنین xargs نیز باید با 0r- به جای r- اجرا شود.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمرین
۱. تمامی فایلهای با حجم بیشتر از ۱ مگابایت را پیدا کنید، و نام آنها را نمایش دهید.
۲. چگونه میتوان با استفاده از find یک فایل با نام غیر عادی (که شل های قدیمی پشتیبانی نمیکنند) را حذف کرد؟
۳. چگونه میتوان مطمئن شد که فایلهای موجود در دیرکتوری tmp/ که متعلق به شماست بعد از خروج از سیستم حذف شده اند؟
جستجوی سریع فایلها – locate و slocate
دستور find قوی اما پیچیده است، همچنین کند است چرا که باید تمام درخت دیرکتوری را طی کند، بنابراین برای کارهای ساده به صرفه نیست. دستور locate یک راه سریعتر است که یک نام فایل یا الگوی نام فایل را میگیرد، و نام آنها را مینویسد.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با وجود اهمیت locate، در برخی از توزیعها به طور پیشفرض نصب نشده است.
میتوانید از الگو ها هم استفاده کنید، فقط توجه کنید که locate فایلهایی را پیدا میکند که «کاملا» با الگو مطابق باشند، از ابتدا تا انتها. بنابراین در ابتدای الگو از * استفاده میکنیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همچنین یادتان باشد که در مواردی که از الگو ها استفاده میکنید، آرگومان را در کوتیشن ها قرار دهید تا شل اقدام به گسترش آنها نکند.
علت سرعت locate، استفاده از دیتابیس ایجاد شده توسط updatedb به جای پیمایش درخت دیرکتوری است. این دیتابیس بسته به برنامه ی cron (که برای برنامهریزی عملیات در سیستم استفاده میشود) در فواصل زمانی مختلف به روز رسانی میشود. برنامه ی cron در لینوکس پیشرفته آموزش داده میشود.
برنامه ی slocate جایگزینی برای locate است. مشکلی که updatedb دارد، این است که به عنوان کاربر ریشه اجرا میشود و تمامی فایلها را در دیتابیس ذخیره میکند. همچنین دسترسی آن محدود است. برنامه ی slocate علاوه بر نام فایل ها، اطلاعات مالک، گروه و مجوز ها را نیز در فایل ذخیره میکند. بنابراین فقط زمانی نام فایل جستجو شده را نمایش میدهد که کاربری که برنامه را اجرا کرده، مجوز دسترسی به فایل را داشته باشد. این برنامه به همراه updatedb نصب میشود. در بسیاری موارد، سیستم به گونهای تنظیم شده که اجرای locate منجر به اجرای slocate میشود.
تمرین
۱. README یک نام فایل متداول است، مسیر کامل تمامی فایلهای README در سیستم را پیدا کنید.
۲. ابتدا فایل جدید را در پوشه خانگی خود ایجاد کنید، سپس
الف) فایل را با locate جستجو کنید.
ب) اکنون updatedb را اجرا و مجدداً جستجو را انجام دهید.
پ) حالا فایل را حذف کنید و مجدداً locate را برای جستجوی فایل استفاده کنید.
۳. بررسی کنید که آیا میتوانید فایل etc/shadow/ را با slocate پیدا کنید؟
دوستان به پایان بخش فایلها رسیدیم. در این بخش قوانین مربوط به نام فایل، الگو های جستجو، لینک ها، عملیات مربوط به فایل، نمایش فایل ها، جستجو و خیلی چیز های دیگر را یاد گرفتید. منتظر قسمت بعدی آموزش باشید!
نمایش مطلب در وبلاگ ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
از این قسمت به بعد، همانگونه که گفته شد مبحث عبارات با قاعده را شروع میکنیم. مبحثی کسل کننده :n29: اما در عین حال به شدت کاربردی که میتواند بسته به مهارت شما پیچیده یا ساده باشد. پس این چند قسمت را تحمل کنید و پا به پای من بیایید تا به فیض برسید. و باز هم عذرخواهی میکنم که آموزش ها مختصر و با تاخیر ارائه میشود.
عبارات باقاعده: مقدمات
دستورات لینوکس معمولاً برای انجام عملیاتی بر روی متن استفاده میشوند. قدرتمند ترین ابزار برای انجام این عملیات و اعمال الگوها بر روی متن فایل ها، عبارات باقاعده است. عبارات باقاعده، رشتههایی هستند که برای جستجو در متن استفاده میشوند. در نگاه اول، آنها شبیه الگوهای جستجوی فایل به نظر میرسند، که در قسمتهای قبلی آموزش دادیم. اما این عبارات به طرز متفاوتی کار میکنند و امکانات بیشتری دارند.
اینکه چرا باید کسی با این عبارات کار کند مشخص است. ما قصد داریم یک کاربر حرفهای لینوکس شویم که میتواند یک برنامه نویس باشد که در حین کار قطعاً با پردازش متن مواجه میشود، یا یک کاربر که نیاز به جستجو و مطابقت متن دارد. همه ی این کارها به عبارات باقاعده مربوط است و پیشنهاد میشود حتماً این قسمت را فراگیرید.
عبارات باقاعده معمولاً به صورت بازگشتی، و از عباراتی ایجاد میشوند که خودشان هم باقاعده اند. سادهترین عبارات باقاعده حروف، کاراکتر ها، ارقام و خیلی چیز های دیگر هستند که به جای خودشان قرار میگیرند (به معنی خودشان هستند). برای مثال، a، یک عبارت باقاعده است که با کاراکتر a جور میشود.
کلاسهای کارکتری، که قبلاً کمی در مورد آنها بحث کردیم، با روشی مشابه الگوهای جستجوی شل ایجاد میشوند. بنابراین عبارت باقاعده [a-e] (که یک محدوده (range) نیز نامیده میشود) دقیقاً با یک کاراکتر از a تا e مطابقت میکند، و a[xy]b با یکی از دو رشته ی axb یا ayb مطابقت میکند. میتوان این رشتهها را به طور مسلسل وار نوشت، مانند [A-Za-z] که با تمامی حروف کوچک و بزرگ مطابقت میکند.
مکمل محدوده ها اما با روشی متفاوت از شل نوشته میشود. در عبارات با قاعده، برای مثال، محدوده [abc^] با تمامی حروف به جز a, b, c مطابقت میکند. در صورتی که در شل مینوشتیم [abc!]. نقطه، هم ارز علامت سؤال در الگوهای جستجوی شل است، یعنی با دقیقاً یک حرف مطابقت میکند. تنها کاراکتری که . با آن مطابقت نمیکند خط جدید (n\) است. پس a.c با abc و a/c مطابقت دارد، اما نه با
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
علت این است که اغلب برنامهها بر مبنای رشتههای یک خطی کار میکنند، چرا که پردازش چند خط کار را سخت تر میکند. اگر چه گاهی اوقات کار با چند خط آسانتر است.
تفاوت دیگر عبارات با قاعده و کلاسهای کاراکتری، این است که کلاسهای کاراکتری با ابتدای نام فایل مقایسه میشدند، اما عبارات باقاعده با هر قسمتی از یک خط میتواند مطابقت داشته باشد. البته میتوانید اینرا محدود کنید، اگر میخواهید فقط ابتدای خط بررسی شود ابتدای عبارت ^ و اگر میخواهید انتهای خط بررسی شود در انتهای عبارت، $ قرار دهید. در ضمن در صورت استفاده از $ نیازی به اشاره به کاراکتر خط جدید (n\) نیست. یعنی برای جستجوی خطوطی که با xyz تمام میشوند میتوان نوشت $xyz، و نیازی به $xyz\n نیست.
نکته: ^ و $ درواقع با کاراکتر های مخفی مطابقت میکنند که ابتدا و انتهای خط را مشخص میکنند.
از * نیز میتوان برای تکرار عبارت باقاعده ی پیش از آن استفاده کرد. یک مثال میزنیم. الگوی جستجوی a*.txt را در نظر بگیرید که با تمامی فایلهایی که با a شروع و با txt. خاتمه میافتند مطابق بود. عبارت باقاعده ی معادل آن اینگونه است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
.a میگوید که هر رشته ای که با a شروع شود موردنظر ماست. همچنین ^ مشخص میکند که جستجو از ابتدای خط شروع شود. سپس میخواهیم قسمت ثابت متن یعنی txt. را مشخص کنیم. اما نمینویسیم txt. چرا که در عبارات باقاعده . معادل «هر رشته ای» بود. پس آن را با گذاشتن دو \\، escape میکنیم.
مشاهده در وبلاگ و دانلود PDF ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
با درودی دگرباره، با قسمتی جدید از آموزش Linux Essentials با شما هستم. در این قسمت مطالب قبلی را تکمیل میکنیم و شما را برای کاربرد های عملی grep آماده میکنیم. مثال های کاربردی منبع کم بود و در حال تهیه چند مثال کاربردی تر هستم ^.^
۱۳.۱ عبارات باقاعده: اضافیات
توضیحات قسمت قبلی تقریباً با تمامی برنامههایی که از عبارات باقاعده پشتیبانی میکنند مطابقت دارد. برنامههای مختلف به عبارات باقاعده بسط (extension) هایی اضافه میکنند تا کارایی برنامه هارا افزایش دهند. امثال آن زبانهای اسکریپتی Perl, Tclو پایتون هستند، که قابلیتهایی فراتر از عبارات باقاعده دارند.
برخی از بسط های متداول:
براکت های کلمات: >\ با آغاز یک کلمه و <\ با پایان یک کلمه مطابقت میکند (یک کلمه با حرفی که قبل از آن کاراکتری غیر از حروف آمده آغاز، و با حرفی که بعد از آن کاراکتری غیر از حرف آمده پایان میابد).
دسته بندی: توسط پرانتز ها میتوانید عبارات را به قسمتهای مجزا تقسیم کنید. مثلاً
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با یک حرف a که به دنبال آن هر چند تا bc آمده مطابقت دارد.
جایگزینی: با خط عمودی | میتوانید چند عبارت دلخواه را تعیین کنید تا انتخاب شوند. مثلا:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با motor bike، motor cycle و motor boat مطابقت میکند اما نه هیچ چیز دیگر.
عبارت اختیاری: با علامت سؤال تعیین میکنید که یک عبارت میتواند وجود نداشته باشد یا یک بار وجود داشته باشد. مثلا:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با Ali و Ali Rashidi مطابقت میکند.
حداقل یکبار تکرار: با استفاده از + به جای * درواقع همان عمل * را انجام میدهید، اما اینبار حداقل یکبار باید عبارت تکرار شود. مثلاً
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
عبارت اول با a و ali و alili و … مطابقت دارد، در حالی که دومی با a مطابقت نمیکند.
تعیین مرتبه تکرار: با استفاده از براکت میتوان تعیین کرد یک متن چند بار تکرار شود. مثلا:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با abb، abbb و abbbb مطابقت دارد. میتوانید حداقل یا حداکثر را حذف کنید. در صورت حذف حداقل، ۰ در نظر گرفته میشود و در صورت حذف حداکثر، بینهایت.
ارجاع به قبل: عبارتی مانند n\\ تکرار مرتبه ی nام عبارت بلی که در پرانتز آمده را سبب میشود. (از تعریف که هیچی معلوم نیست) برای مثال:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با abab مطابقت دارد، چرا که مرتبه ۱ پرانتز قبلی همان ab است. و عبارت زیر:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ابتدا ببینیم عبارت داخل پرانتز با چه چیزی جور میشود. در مرتبه ۱ با abaad و در مرتبه ۲ با abaaad جور میشود. یک x نیز به آن اضافه میشود. 2\\ یعنی مرتبه دوم پرانتز و در نهایت این عبارت با این دو رشته جور میشود: abaadxabaaad abaaadxabaaad اطلاعات بیشتر در راهنمای GNU grep موجود است.
عملگرهای غیر حریص (Non-greedy): عملگرهای ، + و ? رفتاری حریصانه دارند، یعنی سعی میکنند با بیشترین مقدار ورودی که ممکن است جور شوند. مثلاً اعمال عبارت a.*a^ به رشته ورودی abacada فقط با abacada جور میشود، نه با aba یا abaca. برای اعمال محدودیت میتوان از عملگر های غیر حریص
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده کرد که سعی میکنند کمترین ورودی ممکن را بگیرند. در مثال قبلی اگر از
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده کنیم با رشته ی aba جور میشود.
توجه کنید که تمامی برنامهها از این بسط ها پشتیبانی نمیکنند. جدول زیر را ببینید:
بسط (Extension)
GNU grep
GNU egrep
trad egrep
vim
emacs
Perl
Tcl
براکت های کلمات
•
•
•
•1
•1
•4
•4
دسته بندی
•1
•
•
•1
•1
•
•
جایگزینی
•1
•
•
•2
•1
•
•
عبارت اختیاری
•1
•
•
•3
•
•
•
حداقل یکبار تکرار
•1
•
•
•1
•
•
•
تعیین مرتبه تکرار (اعمال محدودیت)
•1
•
•1
•1
•
•
ارجاع به قبل
•
•
•
•
•
عملگر های غیر حریص
•4
•
•
•
∘: پشتیبانی نشده، •: پشتیبانی شده.
1. به یک \ قبل از عملگر نیاز است، مثلاً +\ab به جای +ab
2. به پرانتز نیازی ندارد، عبارات جایگزین همواره به یک عبارت باقاعده کامل اشاره دارند.
3. از =\ به جای ? استفاده شود.
4. شیوه نوشتاری کاملاً متفاوتی دارند، مستندات را مطالعه کنید.
حالا وقت آن رسیده که بدانید چگونه از این عبارات باقاعده استفاده کنید.
۱۳.۲ جستجوی متن در فایلها – grep
معروف ترین و مهمترین برنامه ی جستجو که از عبارات باقاعده استفاده میکند، در لینوکس، grep است. این برنامه خطوط فایل را میگردد و هر خطی را که با عبارت جور شود به خروجی میبرد. باقی خطوط نادیده گرفته میشوند.
دو گونه از grep وجود دارد: نسخه قدیمی و ابتدایی به نام fgrep که از عبارات باقاعده پشتیبانی نمیکند و به رشتههای کاراکتری محدود میشود. اما یک مزیت مهم دارد که سرعت آن است. گونه ی دیگر، egrep است (Extended grep) که عبارات با قاعده را نیز پشتیبانی میکند اما کمی کندتر است.
نحوه نوشتاری grep به این صورت است که به حداقل یک عبارت باقاعده برای جستجو نیاز دارد. آرگومان دوم نام فایلی است که مورد جستجو واقع میشود. اگر تعیین نشود، ورودی استاندارد در نظر گرفته میشود. (در آینده توضیح داده خواهد شد).
هنگام استفاده از grep عملگر های +\، ?\ و }\ با یک ممیز شناور قبل از خود همراه میشوند (در egrep اینکار ضروری نیست). متاسفانه، عملگر های غیر حریص در grep وجود ندارند.
نکته: عبارات باقاعده را در نقل و قولها محدود کنید تا از گسترش آنها توسط شل جلوگیری کنید. مخصوصاً اگر عبارت پیچیده و دارای عبارات مشابه الگوهای جستجو میباشد.
ابزار grep هم مانند هر ابزار دیگری میتواند گزینه (option) هایی را از طریق خط فرمان بگیرد که در جدول زیر مشاهده میکنید:
گزینه
نتیجه
-c (count)
فقط تعداد مطابقت ها را به خروجی میبرد.
-i (insert)
میان حروف کوچک و بزرگ تفاوتی قائل نمیشود.
-l (list)
فقط نام فایلهایی که مطابقت دارند را لیست میکند.
-n (number)
تعداد خطوطی که مطابقت دارند را نیز به خروجی میبرد.
-r (recursive)
فایلها را در زیر شاخه (subdirectory) ها نیز جستجو میکند.
-v (invert)
خطوطی را به خروجی میبرد که با عبارت مطابقت ندارند.
با استفاده از گزینه ی f- میتوانید فایلی شامل عبارت باقاعده را تعیین کنید. اگر فایل شامل چندین خط باشد هر خط به عنوان یک عبارت باقاعده مجزا در نظر گرفته میشود و این عبارات به صورت همزمان جستجو میشوند. ذخیره کردن عبارات در فایل راهکار خوبی برای جستجوی الگوهایی است که مکرراً استفاده میشوند.
در این قسمت ورودی-خروجی استاندارد و انتقال آنها را بررسی میکنیم.
۱.۱ کانالهای استاندارد
اغلب دستورات لینوکس برای گرفتن ورودی، پردازش آنها و دادن خروجی به کار میروند. برای مثال، با نوشتن:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خطوطی را مینویسید (ورودی)، grep آنها را پردازش میکند و فقط خطوط شامل xyz را به خروجی میبرد (خطوط درشت ورودی ما و خطوط معمولی خروجی اند):
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مفهومی به نام «کانالهای استاندارد»1 وجود دارد و کانالهای استاندارد ما در اینجا، صفحهکلید به عنوان «ورودی استاندارد2» و کنسول یا ترمینال به عنوان «خروجی استاندارد3» میباشند. یک کانال دیگر «خروجی استاندارد خطا4» است که پیغام های خطای برنامه، مانند فایل ورودی ناموجود یا اشتباه نحوی در عبارت باقاعده، به آن منتقل میشوند.
در این قسمت از آموزش به شما یاد میدهیم که چگونه خروجی استاندارد یک برنامه را به یک فایل منتقل کنید، ورودی استاندارد برنامهای را از یک فایل بگیرید و خروجی استاندارد برنامهای را به عنوان ورودی استاندارد به برنامهای دیگر بدهید. به این طریق میتوانیم با در کنار هم قرار دادن ابزار های کوچک و ساده لینوکس یک ساختار هدفمند و یک برنامه پیچیده تشکیل دهیم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
معمولاً از نام کوتاه یا شماره کانال استفاده میکنیم. شل میتواند این کانالها را از برنامهای به برنامه دیگر منتقل کند بدون آنکه برنامه متوجه شود. خروجی کانالها تنها به صفحه نمایش یا کنسول منتقل نمیشود، بلکه گاهی به یک فایل انتقال می یابد. این فایل میتواند یک دستگاه، مانند پرینتر یا دستگاه ذخیره سازی، یا یک فایل متنی باشد.
کانال ورودی استاندارد هم میتواند به روشهایی منتقل شود، به گونهای که به جای صفحهکلید ورودی اش را از یک فایل بگیرد.
نکته: صفحهکلید و صفحه نمایش ترمینالی که با آن کار میکنید، به وسیله ی dev/tty/ در دسترس است. در صورتی که اطلاعات را از آن بخوانید به منزله کیبرد، و در صورت نوشتن اطلاعات در آن، به عنوان صفحه نمایش به کار میرود. مثال اول متنی را در tty مینویسد و میبینید که مانند این است که آنرا مستقیماً در صفحه نمایش بنویسیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در مثال دوم فایل ورودی grep را همین دستگاه تعیین کرده ایم، که مانند خواندن از صفحهکلید است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این فایلهای خاص در قسمتهای بعدی به طور مفصلتر بحث خواهند شد.
۱.۲ انتقال (تغییر مسیر) کانالهای استاندارد
عملگر شلِ < (علامت بزرگتر) برای انتقال کانال خروجی استاندارد به کار میرود. برای مثال:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خروجی دستور ls -laF را به فایل fileList منتقل میکند و همانطور که میبینید چیزی روی صفحه نمایش داده نمیشود و شل آماده دریافت دستور بعدی است.
نکات:
۱. فایل fileList در صورتی که موجود نباشد ایجاد و در صورتی که هماکنون موجود باشد، اطلاعات آن رونویسی میشود.
۲. ایجاد یا رونویسی فایل قبل از اجرای برنامهای که خروجی آن به فایل منتقل میشود، انجام میگیرد. یعنی اگر دستور اشتباه باشد یا دارای اشتباه نوشتاری/نحوی باشد، قبل از بررسی این مورد فایل ایجاد/رونویسی میشود اما خالی میماند.
۳. برای جلوگیری از رونویسی فایل، از دستور زیر استفاده کنید تا در صورت انتقال خروجی به یک فایل موجود، یک خطا به جای رونویسی رخ دهد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا که از عملگر انتقال استفاده کردید، بیایید محتویات فایل fileList را ببینیم، اگر دقت کنید میبینید که فایل fileList هم با حجم صفر وجود دارد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این نشانی بر این نکته است که فایل fileList قبل از اجرای دستور ایجاد شده و حجم آن هم صفر بوده، و پس از اجرای دستور خروجی به آن منتقل شده. توجه کنید که ls ابتدا محتوای دیرکتوری را میخواند و سپس خروجی میدهد.
برای اینکه خروجی یک دستور را به فایلی ببرید، بدون اینکه محتوای قبلی آن پاک شود (اضافه کردن یا append کردن) از عملگر << به جای < استفاده کنید. فایل مورد نظر در صورت عدم وجود ایجاد میشود.
یک راه دیگر برای انتقال خروجی استاندارد، استفاده از بک تیک (علامت `) می باشد. این روش خروجی استاندارد دستوری که داخل بک تیک ها قرار دارد را به عنوان ورودی به برنامه میدهد. یک مثال:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اکنون نوبت به تغییر مسیر ورودی استاندارد میرسد که با عملگر > امکانپذیر است. مثلاً فیلتر wc که تعداد کلمات را میشمارد، در مثال زیر ورودی اش را به جای کیبرد از فایل میگیرد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نکته: برای ارسال محتوای چند فایل به یک برنامه میتوانید از این روش استفاده کنید. با | کمی جلوتر آشنا میشوید. فعلاً همین شکل را به خاطر داشته باشید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اکنون شما باید بدانید که چگونه ورودی و خروجی استاندارد را همزمان منتقل کنید. مثلا:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کمی قبل تر گفته شد که یک کانال استاندارد دیگر هم به نام کانال خروجی استاندارد خطا وجود دارد که با شماره ۲ مشخص میشود. نکتهای که هنگام استفاده از عملگر ها باید بدانید این است که باید کانالی که عملگر روی آنها اعمال میشود مشخص شود.
اینکار برای کانالهای ۰ و ۱ اختیاری است. یعنی نوشتن < با <1 و > با >0 فرقی ندارد. اما برای کانال ۲ اجباری است. با استفاده از این نکته و همچنین اینکه برای انتقال یک کانال به کانال دیگر از &< استفاده میکنیم، میتوانیم کار با کانال ۲ را شروع کنیم.
مثال:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور بالا خروجی استاندارد و خروجی استاندارد خطای برنامه make را به make.log منتقل میکند.
توجه کنید که ترتیب مهم است، دستور بالا ابتدا مشخص میکند که خروجی استاندارد به make.log منتقل شود و بعد میگوید که کانال ۲ را به کانال ۱ یعنی خروجی استاندارد منتقل کند، و چون خروجی استاندارد را فایل make.log مشخص کردهایم به آن منتقل میشود. اما اگر به این ترتیب بنویسیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ابتدا کانال ۲ را به خروجی استاندارد (یعنی صفحه نمایش، ترمینال یا کنسول) منتقل میکند و سپس خروجی استاندارد را به make.log میبرد که در این مرحله شامل کانال ۲ (خروجی استاندارد خطا) نمیشود.
تمرینها
1. با گزینه U- در دستور ls فایلها بدون اینکه مرتب شوند به خروجی میروند. اما با این حال پس از اجرای
ls -laU >fileList سایز fileList همچنان صفر میماند. علت چیست؟
2. خروجی دو دستور زیر را مقایسه و علت را بیان کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.