توی این تاپیک قصد دارم دستورات خط فرمان لینوکس رو برای کسانی که به تازگی با دنیای نرم افزارهای آزاد آشنا شدن یا قصد دارن از انحصار مایکروسافت بیان بیرون آموزش بدم. بخش عمده ای از مطالب این تاپیک از کتاب The Linux Command Line - A Complete Introduction نوشته آقای William E. Shotts Jr. گرفته شده ولی هرجا احساس کردم مطلب گنگ هست، تجربه شخصی و مطالب سایر منابع رو هم بهش اضافه کردم. با ما همراه باشین.
رتبه موضوع:
آموزش خط فرمان لینوکس
|
24-03-1394، 10:01 ب.ظ
تشکر شده توسط: meysam1366 , mehdi king , YN97 , Alireza , n0o0b_sina , __undercover , arash691 , mahdirabbani , fatima-php , php , farazsahebdel , majidganji
24-03-1394، 10:15 ب.ظ
میخوام براتون یه قصه بگم. نه، قصه اینکه چطور در سال 1991، لینوس توروالدز اولین نسخه از هسته لینوکس رو نوشت رو نمیخوام بگم. میتونید این قصه رو توی خیلی از کتابهای لینوکس بخونید. قصه اینکه چطور چند سال قبل، ریچارد استالمن پروژه GNU (بخونید گِنو) رو شروع کرد تا یک سیستم عامل آزاد مبتنی بر یونیکس بسازه رو هم نمیخوام بگم. اینم قصه مهمیه ولی خیلی کتابهای دیگه درمورد لینوکس به این قصه هم پرداختن. نه، من میخوام قصه اینکه چطور میتونید کنترل کامپیوترتون رو دوباره در دست بگیرین، صحبت کنم.
وقتی که من کار با کامپیوتر رو بعنوان یه دانشجو در اواخر دهه 1970 شروع کردم، یک انقلاب درحال رخ دادن بود. اختراع میکروپروسسور به افراد معمولی مثل من و شما اجازه میداد که واقعاً یه کامپیوتر شخصی داشته باشیم. برای خیلی از مردم امروزه تصور اینکه دنیا چه شکلی بود وقتی فقط شرکتهای عظیم و دولتهای بزرگ کامپیوترها رو اداره میکردن، واقعاً سخته. فقط میتونم بگم که هیچ کار خاصی نمیتونستین انجام بدین!
امروزه، دنیا خیلی فرق کرده. کامپیوترها همه جا هستن. از ساعت مچی های ظریف تا دیتاسنترهای غول پیکر و هر چیز دیگه که بین اونهاست. علاوه بر کامپیوترهای همه جا حاضر، ما همه جا اتصالات شبکه متنوعی هم برای وصل کردنشون داریم. این موضوع یک عصر شگفت انگیز و جدید از قدرتهای شخصی و آزادی خلاقانه فراهم کرده، اما در چند دهه اخیر، یه اتفاق دیگه هم افتاده. یه شرکت بزرگ کنترل خودش رو روی اکثر کامپیوترهای دنیا گسترش داده و تصمیم میگیره که شما چیکار میتونید یا نمیتونید با کامپیوترتون انجام بدین. خوشبختانه، مردم از سرتاسر جهان دارن یه کارهایی برای مقابله باهاش انجام میدن. اونها دارن میجنگن تا کنترل کامپیوترهای شخصی خودشون رو با نوشتن نرم افزارهای شخصی در دست داشته باشن. اونها Linux رو میسازن.
مردم زیادی با احترام درباره «آزادی» وقتی اسم لینوکس میاد، حرف میزنن، ولی فکر نمیکنم خیلی از مردم بدونن این آزادی واقعاً چه معنایی داره. آزادی، قدرت تصمیم گیری درمورد اینه که کامپیوتر شما چه کاری باید انجام بده، و تنها راهی که بشه به این آزادی رسید اینه که بدونید همین الآن، کامپیوترتون داره چیکار میکنه. آزادی، یک کامپیوتره که هیچ رازی پشت پرده نداره، کامپیوتری که هر چیزی رو بتونید درموردش بفهمین، فقط به این شرط که براتون اهمیت داشته باشه.
تشکر شده توسط: meysam1366 , YN97 , n0o0b_sina , __undercover , mahdirabbani , fatima-php , farazsahebdel , majidganji
24-03-1394، 10:28 ب.ظ
چرا از خط فرمان استفاده کنیم؟
تا بحال فیلمهایی رو دیدین که یک سوپر هکر (همون آدمی که میتونه به کامپیوتر فوق محرمانه نظامی در کمتر از 30 ثانیه نفوذ کنه)، میشینه پشت یه کامپیوتر و اصلاً به ماوس دست نمیزنه؟ این موضوع بخاطر اینه که فیلمسازها فهمیدن که ما آدما، ناخودآگاه قبول کردیم که تنها راهی که واقعاً بشه کارها رو روی کامپیوتر انجام بدیم، تایپ کردنشون با کیبورده.
اکثر کاربران کامپیوتر امروزی با رابط گرافیکی کاربر (GUI) آشنا هستن و این ذهنیت به اونها توسط سازندگان کامپیوتر القا شده که رابط خط فرمان (CLI) یه چیز ترسناک متعلق به گذشته است. این موضوع مایه تأسفه، چون یک رابط خط فرمان خوب، بطرز شگفت آوری یک راه مناسب و توصیفی برای برقراری ارتباط با کامپیوتر، به همون شکلی هست که کلمات گفتاری خودمون رو روی کاغذ مینویسیم. درواقع میشه GUI رو به مکالمه و CLI رو به مکاتبه تشبیه کرد و همه میدونیم که خیلی حرفها رو تو نامه میشه بهتر و راحتتر گفت. گفته میشه: «رابط گرافیکی کاربر باعث میشه کارهای آسون، آسون انجام بشن، درحالی که رابط خط فرمان باعث میشه کارهای سخت، ممکن بشن» و این موضوع، امروزه همچنان صحت داره.
از اونجایی که لینوکس بعد از خانواده Unix در سیستمهای عامل طراحی شده، خط فرمان بسیار قدرتمند اون رو به ارث برده. Unix به شکل قابل کاربرد، در اوایل دهه 1980 ساخته شد (هرچند اولین بار یک دهه قبل درست شده بود)، قبل از اینکه رابط گرافیکی کاربر اینهمه محبوب بشه و درنتیجه، بجای رابط گرافیکی غنی، یک خط فرمان فوق العاده قدرتمند داخل خودش داشت. درحقیقت، یکی از مهمترین دلایلی که کاربران امروزی لینوکس تصمیم میگیرن بجای ویندوز ازش استفاده کنن، رابط خط فرمان قدرتمند لینوکس محسوب میشه که باعث میشه «کارهای سخت، ممکن بشه».
تشکر شده توسط: meysam1366 , YN97 , n0o0b_sina , __undercover , mahdirabbani , fatima-php , farazsahebdel , majidganji
24-03-1394، 10:49 ب.ظ
توی این آموزش قراره درباره چی حرف بزنیم؟
این آموزش یک دید کلی از «زندگی» توی خط فرمان لینوکس به شما میده. برخلاف برخی از آموزشها که روی یک برنامه خاص متمرکز میشن (مثل برنامه shell یا همون bash)، این آموزش سعی میکنه به شما تجربه حسی عمیقتری از رابط خط فرمان بده. چطور کار میکنه؟ چه کارهایی میتونه انجام بده؟ بهترین روش استفاده از اون چیه؟
این آموزش، درمورد روش مدیریت سیستم لینوکس نیست. با وجود اینکه هر بحث جدی درخصوص خط فرمان درنهایت منجر به مدیریت بهتر سیستم میشه، اما توی این آموزش فقط به چند مورد از مباحث مدیریتی سیستم پرداخته میشه. این آموزش درنهایت خواننده رو برای مطالعه بیشتر در زمینه خط فرمان، با فراهم کردن یک زیربنای محکم در استفاده از اون بعنوان یک ابزار حیاتی برای هر کار جدی در زمینه مدیریت سیستم، آماده میکنه.
این آموزش روی لینوکس متمرکز شده. خیلی از آموزشهای دیگه هستن که سعی میکنن شعاع تمایلشون رو با دربر گرفتن بسترهای دیگه مثل Unix عمومی یا Max OS X و... گسترش بدن. با این کار، اونها باعث میشن محتواشون فقط به مباحث عمومی و مشترک محدود بشه. درمقابل، این آموزش فقط توزیعهای مختلف لینوکس رو شامل میشه. 95٪ محتوای این آموزش برای کاربران سایر سیستمهای مبتنی بر Unix مناسب و کاربردیه ولی این آموزش هدفش فقط تبدیل شما به یک کاربر پیشرفته و امروزی خط فرمان لینوکسه.
تشکر شده توسط: meysam1366 , YN97 , __undercover , mahdirabbani , fatima-php , farazsahebdel , majidganji
24-03-1394، 11:00 ب.ظ
چه کسانی باید این آموزش رو بخونن؟
این آموزش برای کاربران جدید لینوکس هست که از بسترهای دیگه به سمتش اومدن. بیشتر شما یک «کاربر حرفه ای» توی برخی نسخه های ویندوز مایکروسافت بودین. شاید رئیس شما بهتون گفته که یه سرور لینوکس رو مدیریت کنید، یا شاید شما فقط یک کاربر معمولی دسکتاپ هستین که از تمام مشکلات امنیتی خسته شدین و میخواین لینوکس رو امتحان کنید. خیلی خوبه. همتون خوش اومدین.
گفته میشه که هیچ میانبری برای حرفه ای شدن توی لینوکس وجود نداره. این حرف از این جهت درسته که یادگیری خط فرمان یک موضوع چالش برانگیزه و تلاش زیادی میخواد. رابط خط فرمان نه تنها سخته، بلکه گسترده هم هست. یک سیستم متوسط لینوکس تقریباً هزاران برنامه داره که میتونید توی خط فرمان به کار بگیرین. پس از الان کمربنتون رو سفت ببندین: یادگیری خط فرمان لینوکس چیزی نیست که توی اوقات فراغتتون دنبالش باشین.
درمقابل، یادگیری خط فرمان لینوکس به شدت همراه با جایزه است! اگه فکر میکنین الان یه «کاربر حرفه ای» هستین، فقط صبر کنین. هنوز نمیدونید قدرت واقعی یعنی چی. و برخلاف خیلی از مهارتهای کامپیوتر، دانش خط فرمان چون دستوراتش زیاد تغییر نمیکنه، تا مدتها براتون کاربردی هست و فراموش نمیشه. مهارتهایی که امروز یاد میگیرین، 10 سال دیگه هم بدردتون میخوره. خط فرمان از آزمون زمان زنده بیرون اومده!
ضمناً فرض میکنیم که شما هیچ تجربه برنامه نویسی ندارین. نگران نشین، خیلی زود به سطح مهارتهای زیاد برمیگردیم.
تشکر شده توسط: sm_pakdel , meysam1366 , abdollah110110 , YN97 , __undercover , mahdirabbani , fatima-php , farazsahebdel , majidganji
25-03-1394، 12:14 ق.ظ
شِل چیه؟
وقتی درمورد خط فرمان حرف میزنیم، در اصل داریم به Shell اشاره میکنیم. شل (پوسته) یه برنامه است که دستورات صفحه کلید رو میگیره و اونها رو به سیستم عامل میده تا انجام بده. تقریباً تمام توزیعهای لینوکس یه برنامه شل از پروژه GNU به اسم bash رو همراه خودشون دارن. bash مخفف Bourne Again Shell هست که بیانگر این حقیقته که bash یک نسخه توسعه یافته و جایگزین شده sh یعنی برنامه شل اصلی Unix هست که توسط Steve Bourne نوشته شده.
شبیه سازهای ترمینال
وقتی از یه رابط گرافیکی کاربر استفاده میکنیم، نیاز به یه برنامه دیگه داریم به اسم «شبیه ساز ترمینال» (Terminal Emulator) تا بتونیم با شل کار کنیم. اگه توی منوهای سیستمتون بگردین، حتماً یکیشونو پیداش میکنید. کاربران KDE از konsole استفاده میکنن و کاربران GNOME از gnome-terminal که میشه به شکل خلاصه، ternimal صداش زد. شبیه سازهای دیگری هم برای لینوکس وجود دارن همه اونها یه کار مشترک انجام میدن: به ما اجازه میدن به شل دسترسی پیدا کنیم. ممکنه شما یکیشون رو بخاطر یکسری امکانات جانی که داره، به بقیه ترجیح بدین ولی در کل، همه اونها کار اصلی که گفتیم رو انجام میدن.
اولین فشردن دکمه های کیبورد توسط شما
خوب بگذارین شروع کنیم. شبیه سازی ترمینال رو اجرا کنید. وقتی اجرا شد، یه چیزی شبیه این میبینید:
[me@ncis-ir ~]$ به این، «اعلان شل» (Shell Prompt) میگن و هروقت شل آماده دریافت ورودی از شما باشه، ظاهر میشه. با اینکه برحسب توزیع لینوکس ازنظر ظاهر ممکنه تفاوتهای توش وجود داشته باشه، معمولاً شامل username@machinename و بعد، مسیر کاری فعلی (بعداً درباره اش بیشتر توضیح میدیم) و یه علامت دلار هست. اگه آخرین کارکتر اعلان، بجای دلار، علامت هش بود (#) ترمینال توی وضعیت superuser هست. این به معنای لاگین شدن بعنوان کاربر root (ریشه) یا استفاده از ترمینالی هست که به ما اجازه دسترسی به مجوزهای superuser (مدیر سیستم) رو میده. فرض میکنیم همه چیز تا الان خوب پیش رفته. بگذارین یکم تایپ کنیم. یه چیز الکی تایپ کنید مثل این: [me@ncis-ir ~]$ kaekfjaeifj از اونجایی که این دستور معنا نداره، شل بهمون میگه که این دستور رو پیدا نکرده و یه شانس دوباره به ما میده: bash: kaekfjaeif: command not found [me@ncis-ir ~]$ تاریخچه دستورات
اگه جهت بالا رو روی کیبورد بزنید، میبینید که دستور قبلی یعنی kaekfjaeifj دوباره ظاهر میشه. به این میگن تاریخچه دستورات. اغلب توزیعهای لینوکس بطور پیشفرض 500 دستور آخر رو حفظ میکنن. جهت پایین رو بزنین تا دستور قبلی ناپدید بشه.
حرکت مکان نما
دستور قبلی رو دوباره با جهت بالا صدا بزنید. حالا کلیدهای چپ و راست کیبورد رو تست کنید. میبینید که میشه مکان نما رو هرجایی توی خط فرمان جابجا کرد؟ این موضوع ویرایش دستورات رو راحت میکنه.
کمی توضیح درباره ماوس و تمرکز
با اینکه شل فقط با کیبورد سروکار داره، ولی میتونید از ماوس هم توی شبیه ساز ترمینالتون استفاده کنید. مکانیزمی که داخل سیستم X Window هست (موتور پشت پرده ای که GUI لینوکس رو میسازه) از یک تکنیک کپی و الصاق سریع پشتیبانی میکنه. اگه متنی رو با نگه داشتن دکمه چپ ماوس و کشیدنش انتخاب کنید (یا روی یک کلمه دوبار کلیک کنید)، توی بافر X (کلیپ بورد) کپی میشه. فشاردادن دکمه وسط ماوس متن رو جایی که مکان نما قرار داره الصاق میکنه. امتحانش کنید.
سعی نکنید از کلیدهای Ctrl+C و Ctrl+V برای کپی و الصاق استفاده کنید چون کار نمیکنه. توی شل، این کنترلها معنای دیگری نسبت به اون چیزی که سالها ویندوز برای اونها درنظر گرفته بود، دارن.
محیط گرافیکی دسکتاپ شما (مثل KDE یا GNOME) در تلاش برای رفتار مشابه ویندوز، ممکنه سیاست تمرکز اون رو تقلید کرده باشن. این به معنای اونه که برای اینکه یک پنجره مورد تمرکز باشه (فعال بشه) باید روش کلیک کنید. البته این با رفتار سنتی X که میگه تمرکز دنبال ماوس میاد فرق میکنه که میگه یه پنجره وقتی ماوس روش قرار میگیره فعال میشه. البته پنجره تا وقتی که روش کلیک نکنید، جلو نمیاد ولی قادر به دریافت ورودی خواهد بود. تنظیم کردن سیاست تمرکز روی «تمرکز به دنبال ماوس» کارکردن با پنجره های ترمینال رو راحتتر میکنه. امتحانش کنید. فکر میکنم اگه بهش یه شانس بدین، اون رو به روش ویندوز ترجیح بدین. تنظیمات مربوط به این کار رو توی برنامه تنظیمات مدیر پنجره خودتون میتونید پیدا کنید.
تشکر شده توسط: meysam1366 , abdollah110110 , YN97 , __undercover , mahdirabbani , fatima-php , php , farazsahebdel
26-03-1394، 01:59 ق.ظ
چند دستور ساده رو امتحان کنید
حالا که یاد گرفتیم تایپ کنیم، اجازه بدین چند دستور ساده رو امتحان کنیم. اولین دستور date هست. این دستور زمان و تاریخ جاری رو نشون میده: [me@ncis-ir ~]$ date Tue Jun 16 01:47:11 IRDT 2015 یکی از دستورات مرتبط، cal هست که بطور پیشفرض، تقویم ماه جاری رو نشون میده: [me@ncis-ir ~]$ cal June 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 اگه میخواین بدونین چقدر فضای خالی روی درایوهای هارد دیسکتون دارین، دستور df رو بنویسید: [me@ncis-ir ~]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 14317616 9052392 4514888 67% / none 4 0 4 0% /sys/fs/cgroup udev 1014056 4 1014052 1% /dev tmpfs 204972 900 204072 1% /run none 5120 0 5120 0% /run/lock none 1024848 88 1024760 1% /run/shm none 102400 32 102368 1% /run/user اگه خواستین بفهمین چقدر RAM خالی دارین از دستور free استفاده کنید: [me@ncis-ir ~]$ free total used free shared buffers cached Mem: 2049696 757848 1291848 7968 67008 311708 -/+ buffers/cache: 379132 1670564 Swap: 2095100 0 2095100 خاتمه دادن به جلسه ترمینال میتونیم جلسه ترمینالی که باز کردن رو با بستن پنجره شبیه ساز ترمینال یا واردکردن دستور exit جلوی اعلان شل خاتمه بدیم: [me@ncis-ir ~]$ exit نقل قول:کنسول پشت پرده تشکر شده توسط: Alireza , __undercover , mahdirabbani , fatima-php , farazsahebdel , Thorin , majidganji
26-03-1394، 05:09 ب.ظ
حرکت داخل سیستم فایل
اولین چیزی که نیاز لازمه یاد بگیریم (درکنار تایپ کردن)، نحوه حرکت توی سیستم فایل لینوکس هست. توی این قسمت دستورات زیر رو معرفی میکنیم:
نقل قول:یادآوری: اوایل که سیستم یونیکس اومد، از یه مفهومی به اسم Segment بجای File استفاده میکرد که مفهومشون کاملاً مشابه بود و برای همین اسم این دستور بجای lf شد ls درک درخت سیستم فایل مشابه ویندوز، یک سیستم شبه یونیکس مثل لینوکس فایلهاش رو داخل چیزی که بهش میگیم «ساختار سلسله مراتبی پوشه ها» نگهداری میکنه. معناش اینه که یه ساختار درختی برای مسیرها (پوشه ها) وجود داره که توی اون، هر پوشه میتونه شامل یکسری فایل یا پوشه دیگه باشه و پوشه های داخل یک پوشه، پوشه های فرعی اون محسوب میشن. اولین پوشه توی سیستم فایل به اسم ریشه (root) شناخته میشه. خود پوشه root شامل یکسری فایل و پوشه های دیگه است که هرکدوم به نوبه خودشون فایلها و پوشه های دیگه ای دارن. دقت کنید که برخلاف ویندوز که یک سیستم فایل جدا برای هر دیسک یا درایو داره، سیستمهای شبه یونیکس مثل لینوکس کلاً یک سیستم فایل دارن و مهم نیست چندتا درایو یا دیسک به سیستم وصل کرده باشین. دیسکهای مختلف میتونن براساس نظر مدیر سیستم، در نقاط مختلفی روی درخت وصل (یا بطور دقیقتر سوار - Mount) بشن یا برحسب نظر مدیر سیستم، اونها رو جدا (پیاده - Unmount) کرد. مسیر کاری فعلی اغلب ما با یک مدیر فایل گرافیکی که درخت سیستم فایل رو نشون میده از قبل آشنایی داریم. شکل زیر رو ببینید: دقت کنید که درخت معمولاً بصورت بالا به پایین نشون داده میشه. یعنی ریشه در بالاست و انشعابهای مختلفش به ترتیب از زیرش گسترش پیدا میکنن. خوب خط فرمان هیچ تصویری نداره و درنتیجه برای حرکت توی درخت سیستم فایل، ما نیاز به این داریم که از یه راه دیگه وارد بشیم. تصور کنید که سیستم فایل شبیه یه درخت سر و ته شده است (ریشه درخت، بالاست) و ما میتونیم هرجایی وسط این درخت و در بین شاخه های اون وایستیم. در هر زمان ما توی یکی از شاخه ها هستیم و فقط میتونیم شاخه های فرعی و برگهای همون شاخه که توشیم رو ببینیم. تنها راه رفتن به یه شاخه دیگه (که جزو شاخه های فرعی شاخه فعلی ما نیست) هم اینه که اینقدر به شاخه والد شاخه فعلی بریم (برگردیم بالا) که به یه شاخه برسیم که والد شاخه موردنظرمون هم هست (اون شاخه که میخوایم بهش بریم، زیرمجموعه شاخه ای هست که بهش رسیدیم). البته شاید بعضی وقتا لازم باشه تا خود ریشه هم بالا بریم. اون شاخه ای که الان داخلش هستیم رو بهش میگن مسیر کاری فعلی (Current working directory) و با دستور pwd میتونید ببینیم چیه: [me@ncis-ir ~]$ pwd /home/me وقتی که اولین بار وارد سیستم میشیم یا یک پنجره ترمینال جدید باز میکنیم، مسیر کاری ما، پوشه خانه (Home) کاربر جاری هست. هر حساب کاربری توی لینوکس یک پوشه خانگی شخصی داره که تنها جاییه که وقتی بعنوان یک کاربر معمولی داره از سیستم استفاده میکنه، مجاز به نوشتن روی فایلها و پوشه های داخلشه (البته میشه حق دسترسی به فایلهای دلخواه دیگه رو هم توسط مدیر سیستم یا کاربری که مالک اون فایلهاست بهش بدیم ولی فعلاً مدنظر ما نیست و بعداً درموردش توضیح میدیم). نمایش محتوای یک پوشه برای نمایش فایلها و پوشه های داخل مسیر کاری فعلی، از دستور ls استفاده میکنیم: [me@ncis-ir ~]$ ls Applications Documents Music Public Templates ZS Workspace Desktop Downloads Pictures Shared Videos البته ممکنه نتیجه شما با مثال بالا یکی نباشه چون فایلهای شما فرق میکنه. درحقیقت، ما میتونیم از ls برای فهرست کردن محتوای هر پوشه ای (نه فقط پوشه کاری فعلی) استفاده کنیم و این دستور میتونه کارهای خیلی جالب بیشتری هم انجام بده. توی جلسات بعدی وقت بیشتری رو صرف ls میکنیم. تغییر پوشه کاری فعلی برای تعییر پوشه کاری فعلیتون (جایی که الان روی درخت ایستادین) باید از دستور cd استفاده کنید. جلوی دستور cd باید مسیری که میخواین به اونها حرکت کنید رو بنویسید. مسیرها رو میشه به دو شکل مشخص کرد: مطلق یا نسبی. خوب اول بیاین بریم سراغ مسیرهای مطلق مسیرهای مطلق یک مسیر مطلق از ریشه شروع میشه و شاخه به شاخه میاد جلو تا برسه به پوشه یا فایل موردنظر. برای مثال، پوشه ای توی سیستم شما هست که اغلب برنامه های شما اونجا نصب شده. مسیر این پوشه usr/bin/ هست. این معناش اینه که از ریشه (همون / اول مسیر) یه پوشه وجود داره به اسم usr که حاوی یه پوشه دیگه به اسم bin هست: [me@ncis-ir ~]$ cd /usr/bin [me@ncis-ir bin]$ pwd /ust/bin [me@ncis-ir bin]$ ls ... Listing of many, many files ... حالا میتونید ببینید که مسیر کاری فعلی رو به usr/bin/ تغییر دادیم و این مسیر پر از کلی فایله. به خطوط 2 و 4 دقت کردین که چطور بعد از تغییر مسیر کاری فعلی، اعلان شل عوض شد؟ برای راحتی کار شما، معمولاً سیستم لینوکس طوری تنظیم شده که بطور خودکار اسم آخرین پوشه از مسیر کاری فعلی رو نشون بده. مسیرهای نسبی وقتی مسیرهای مطلق از ریشه شروع میشن و به مقصد میرسن، مسیرهای نسبی از مسیر کاری فعلی شروع میشن. برای این کار، یکسری علامتهای خاص برای نمایش مسیرهای نسبی توی درخت سیستم فایل تعریف شده. این علامتهای ویژه . (dot) و .. (dot dot) هستن. علامت . به مسیر کاری فعلی و علامت .. به پوشه والدش اشاره میکنه. برای اینکه بهتر متوجه بشین، بگذارین برگردیم توی مسیر usr/bin/ : [me@ncis-ir ~]$ cd /usr/bin [me@ncis-ir bin]$ pwd /usr/bin خوب حالا میخوایم برگردیم به پوشه والد usr/bin/ که میشه usr/ و اگه بخوایم با مسیر مطلق بریم، باید اینطوری بنویسیم: [me@ncis-ir bin]$ cd /usr [me@ncis-ir usr]$ pwd /usr یا با مسیر نسبی: [me@ncis-ir bin]$ cd .. [me@ncis-ir usr]$ pwd /usr دو روش بالا نتایج یکسانی تولید میکنن. از کدوم باید استفاده کنیم؟ اونی که تایپ کمتری لازم داره! به همین شکل برای اینکه از مسیر usr/ به usr/bin/ بریم، باز هم دو راه داریم. یکی مسیر مطلق: [me@ncis-ir usr]$ cd /usr/bin [me@ncis-ir bin]$ pwd /usr/bin و یکی مسیر نسبی: [me@ncis-ir usr]$ cd ./bin [me@ncis-ir bin]$ pwd /usr/bin خوب حالا یه نکته مهم رو باید بگم. تقریباً در تمام موارد، میتونید از /. چشمپوشی کنید چون بطور ضمنی درنظر گرفته میشه. تایپ کردن دستور زیر: [me@ncis-ir usr]$ cd bin کارش با دستور قبلی یکیه. بطور کلی، اگه مسیری رو برای چیزی مشخص نکنید، مسیر کاری فعلی درنظر گرفته میشه. چند میانبر مفید رفتن به پوشه Home کاربری که الان توی سیستم وارد شده: cd cd ~ رفتن به پوشه قبلی که توش بودیم: cd - رفتن به پوشه Home هر کاربر دلخواه: cd ~me نکته: بجای me اسم کاربر موردنظر رو بنویسید. یکسری نکات مهم درباره اسامی فایلها
تشکر شده توسط: __undercover , YN97 , mahdirabbani , fatima-php , farazsahebdel , majidganji
05-04-1394، 06:04 ق.ظ
کاوش در سیستم
حالا که فهمیدیم چطور توی سیستم فایل حرکت کنیم، وقتشه تور آموزشی خودمون رو توی سیستم لینوکس شروع کنیم. قبل از شروع، میخوایم چند تای دیگه از دستوراتی که میتونن توی مسیر برامون مفید باشن رو یاد بگیریم:
یکم تفریح بیشتر با ls ls احتمالاً پرکاربردترین دستوره. با کمک اون، میتونیم محتوای یه پوشه رو ببینیم و یکسری جزئیات مهم درباره فایلها و پوشه ها رو بفهمیم. همونطور که دیدیم، میتونید خیلی ساده ls رو بنویسیم تا فهرست فایلها و پوشه های فرعی داخل مسیر کاری فعلی رو ببینیم: [me@ncis-ir ~]$ ls Applications Documents Music Public Templates ZS Workspace Desktop Downloads Pictures Shared Videos درکنار مسیر کاری فعلی، میتونیم مسیری که میخوایم محتواش رو ببینیم هم مشخص کنیم: [me@ncis-ir ~]$ ls /usr bin games include lib local sbin share src یا حتی میتونیم چند مسیر رو مشخص کنیم. توی مثال زیر، ما پوشه خانه کاربر جاری (با نماد ~) و پوشه usr/ رو نمایش میدیم: [me@ncis-ir ~]$ ls ~ /usr /home/me: Applications Documents Music Public Templates ZS Workspace Desktop Downloads Pictures Shared Videos /usr: bin games include lib local sbin share src ما میتونیم فرمت نمایش خروجی رو برای بدست آوردن جزئیات بیشتر، تغییر بدیم: [me@ncis-ir ~]$ ls -l total 44 drwxrwxr-x 3 me me 4096 Feb 11 16:29 Applications drwxr-xr-x 2 me me 4096 May 9 11:33 Desktop drwxr-xr-x 2 me me 4096 Feb 3 16:37 Documents drwxr-xr-x 10 me me 4096 Jun 21 02:20 Downloads drwxr-xr-x 2 me me 4096 Feb 3 16:37 Music drwxr-xr-x 2 me me 4096 Feb 3 21:21 Pictures drwxr-xr-x 2 me me 4096 Feb 3 16:37 Public drwxr-xr-x 2 me me 4096 Feb 8 21:19 Shared drwxr-xr-x 2 me me 4096 Feb 3 16:37 Templates drwxr-xr-x 2 me me 4096 Feb 3 16:37 Videos drwxr-xr-x 4 me me 4096 Feb 17 09:32 ZS Workspace با اضافه کردن l- به دستور، خروجی رو به صورت طولانی (Long) تغییر دادیم. انتخاب ها و پارامترها این موضوع ما رو به یه نکته خیلی مهم درباره نحوه کار دستورات میرسونه. دستورات اغلب با یک یا چند انتخاب (Option) دنبال میشن که رفتار اونها رو تغییر میده و بعدش، یک یا چند پارامتر (Argument) میاد که مشخص کننده آیتم هایی هست که دستور باید روی اونها اجرا بشه و کارش رو انجام بده. بنابراین، اغلب دستورات به شکل زیر دیده میشن: command -options arguments بیشتر دستورات از انتخابهایی استفاده میکنن که از یک کارکتر تک بعد از یک خط تیره تشکیل شده (مثل l-) اما بعضی دستورات (شامل اونهایی که از پروژه GNU - گنو اومدن)، از انتخابهای طولانی که شامل یک کلمه بعد از دو خط تیره هستن هم پشتیبانی میکنن. همچنین خیلی از دستورات اجازه میدن چندتا از انتخابهای کوتاه رو با هم ادغام کنید. برای نمونه، دستور ls توی مثال زیر دو انتخاب داره، l برای قالب طولانی و t برای مرتب کردن فایلها بر اساس زمان تغییر: [me@ncis-ir ~]$ ls -lt ما انتخاب طولانی reverse-- رو برای برعکس کردن ترتیب نتایج اضافه میکنیم: [me@ncis-ir ~]$ ls -lt --reverse دستور ls تعداد زیادی انتخاب داره. رایج ترین اونها شامل موارد زیر هست:
یه نگاه عمیقتر به قالب طولانی همونطور که دیدیم، انتخاب l- باعث میشه ls نتایج رو در قالب طولانی نمایش بده. این قالب شامل اطلاعات سودمند زیادیه. مثالی از محتوای یکی از پوشه ها رو مشاهده کنید: -rw-r--r-- 1 root root 3576296 2012-04-03 11:05 Experience ubuntu.ogg -rw-r--r-- 1 root root 1186219 2012-04-03 11:05 kubuntu-leaflet.png -rw-r--r-- 1 root root 47584 2012-04-03 11:05 logo-Edubuntu.png -rw-r--r-- 1 root root 44355 2012-04-03 11:05 logo-Kubuntu.png -rw-r--r-- 1 root root 34391 2012-04-03 11:05 logo-Ubuntu.png -rw-r--r-- 1 root root 32059 2012-04-03 11:05 oo-cd-cover.odf -rw-r--r-- 1 root root 159744 2012-04-03 11:05 oo-derivatives.doc -rw-r--r-- 1 root root 27837 2012-04-03 11:05 oo-maxwell.odt -rw-r--r-- 1 root root 98816 2012-04-03 11:05 oo-trig.xls -rw-r--r-- 1 root root 453764 2012-04-03 11:05 oo-welcome.odt -rw-r--r-- 1 root root 358374 2012-04-03 11:05 ubuntu Sax.ogg اجازه بدین به هر بخش از اطلاعات یکی از فایلها نگاهی داشته باشیم:
تشخیص نوع فایل با دستور file وقتی توی سیستم داریم میگردیم، فهمیدن اینکه یه فایل شامل چه محتوایی هست، سودمنده. برای انجام این کار، از دستور file استفاده میکنیم تا بفهمیم نوع فایل چیه. همونطور که قبلاً گفتیم، اسامی فایلها توی لینوکس لازم نیست پسوند داشته باشن و نوع فایل هم از روی پسوندش تشخیص داده نمیشه. برای مثال، ممکنه توی ویندوز فایل picture.jpg حتماً یه عکسه ولی توی لینوکس ممکنه اینطور نباشه. ممکنه حتی فایل عکسی داشته باشیم که پسوند نداشته باشه. ما میتونیم از دستور file به شکل زیر برای فهمیدن نوع یه فایل استفاده کنیم: file filename وقتی که این دستور رو صدا بزنیم، یه شرح خلاصه از محتوای فایل دریافت میکنیم. مثال: [me@ncis-ir ~]$ fiel picture.jpg picture.jpg JPEG image data, JFIF standard 1.01 انواع خیلی زیادی از فایلها وجود دارن. درحقیقت، یکی از ایده های کلی توی سیستمهای عاملی مثل لینوکس اینه که «هر چیزی یه فایله». همونطور که توی آموزشهامون جلو میریم، خواهیم دید که چطور این عبارت درست از آب در میاد. با وجود اینکه خیلی از فایلها روی سیستم شما آشنا هستن (مثلاً فایلهای MP3 و JPEG)، خیلی انواع دیگه وجود دارن که کمتر واضحن و یه تعدادی هم کمی عجیب بنظر میان. نمایش محتوای فایل با less دستور less یه برنامه برای نمایش محتوای فایلهای متنی محسوب میشه. توی سیستم لینوکس، فایلهای زیادی هستن که محتوای قابل خوندن توسط انسان دارن. دستور less به راه مناسب برای بررسی اونها محسوب میشه. چرا میخوایم فایلهای متنی رو بررسی کنیم؟ چون خیلی از فایلهایی که شامل تنظیمات سیستم هستن (و بهشون فایلهای پیکربندی میگیم) با این قالب ذخیره شدن و توانایی خوندن اونها به ما دید خوبی درباره نحوه کارکرد سیستم میده. بعلاوه، خیلی ازبرنامه های واقعی که سیستم ازشون استفاده میکنه (که بهشون اسکریپت میگیم) هم با این قالب ذخیره شدن. توی آموزشهای آینده، یاد میگیریم که چطور فایلهای متنی رو برای تغییر تنظیمات سیستم، تغییر بدیم و اسکریپتهای سفارشی خودمون رو بنویسیم ولی برای الان، فقط میخوایم محتواشون رو ببینیم. نقل قول:«متن» چیه؟ دستور less به شکل زیر استفاده میشه: less filename وقتی دستور اجرا شد، less به شما اجازه میده توی محتوای فایل به جلو یا عقب حرکت کنید. برای مثال، اگه میخواین فایلی که تمامی اکانتهای کاربران سیستم رو تعریف میکنه رو مشاهده کنید، دستور زیر رو اجرا کنید: [me@ncis-ir ~]$ less /etc/passwd وقتی برنامه less شروع به کار کرد، میتونیم محتوای فایل رو ببینیم. اگه فایل از یه صفحه بزرگتر بود، میتونیم با جهتهای بالا و پایین فایل رو پیمایش کنیم. برای خروج از less کلید Q رو بزنید. توی فهرست زیر میتونید فهرست برخی از کلیدهایی که توی less کاربرد دارن رو مشاهده کنید:
نقل قول:LESS is MORE یه تور همراه با راهنما ساختار سیستم فایل توی سیستم لینوکس شما خیلی شبیه چیزیه که توی بقیه سیستمهای شبیه Unix دیده میشه. طراحی اون درحقیقت توی یه استاندارد منتشر شده به اسم «استاندارد سلسله مراتبی سیستم فایل لینوکس» تعریف شده. تمام توزیعهای لینوکس دقیقاً از این استاندارد پیروی نمیکنن، اما اغلبشون خیلی بهش نزدیک هستن. خوب، میخوایم کمی دوروبر سیستم فایل بچرخیم تا ببینیم چه چیزی سیستم لینوکس ما رو تشکیل داده. یکی از چیزهایی که ما کشف خواهیم کرد اینه که خیلی از فایلهای جذاب، متنهای عادی و خوانا برای انسان هستن. همینطور که توی تور جلو میریم، موارد زیر رو امتحان کنید:
نکته: ترفند Copy و Paste رو به خاطر بیارین. اگه از ماوس استفاده میکنید، میتونید روی یک نام فایل دوبار کلیک کنید تا توی حافظه کپی بشه و با کلیک وسط ماوس، اون رو توی دستور الصاق کنید (بچسبونید). همینطور که جلو میریم، از اینکه به همه چیز یه نگاهی بندازین نترسین. کاربران عادی معمولاً از دستکاری چیزهای مختلف منع میشن. این کار وظیفه مدیران سیستمه! اما نگاه کردن که ضرری نداره، داره؟ اگه یه دستور درباره یه چیزی بهتون هشدار داد، بیخیالش بشین و گزینه بعدی رو امتحان کنید. فراموش نکنید که توی لینوکس هیچ راز مخفی وجود نداره! فهرست زیر فقط چند مورد از پوشه هایی هست که میتونیم بررسی کنیم. راحت باشین و چیزهای دیگه رو هم امتحان کنید.
لینک نمادین (Symbolic Link) همینطور که اینطرف و اونطرف میگردین، ممکنه یکسری فایلها ببینید که جزئیاتشون شبیه این نمونه است: lrwxrwxrwx 1 root root 11 2012-08-11 07:34 lib.so.6 -> libc-2.6.so متوجه شدین که حرف اول کد بالا l هست و بنظر میاد دوتا اسم داره؟ این یه نوع خاص فایله که بهش لینک نمادین میگن (که به اسامی لینک نرم یا Soft link یا Symlink هم میشناسنش. توی اغلب سیستمهای شبیه یونیکس، این امکان وجود داره که یه فایل، توسط اسامی مختلفی صدا زده بشه. با وجود اینکه ممکنه الان ارزشش خیلی واضح نباشه، ولی واقعاً یه قابلیت سودمند محسوب میشه. این سناریو رو تصور کنید: یه برنامه نیاز به استفاده از یه منبع مشترک از هر نوعی رو داره که حاوی یه فایل به اسم foo هست ولی foo چند تغییر نسخه مختلف داشته. بهتره که شماره نسخه رو هم توی اسم فایل بیاریم تا مدیر سیستم یا هر فرد دیگه که میخواد از سیستم استفاده کنه، بفهمه که چه نسخه ای از foo نصب شده. خوب این یه مشکل ایجاد میکنه. اگه ما اسم فایل منبع مشترک رو عوض کنیم، مجبوریم تمام برنامه هایی که ازش استفاده کرده بودن رو بررسی کنیم و اونها رو به شکلی تغییر بدین که دنبال foo با اسم جدیدش بگردن و این کار باید هربار که نسخه جدیدی ثبت میشه، انجام بشه. این کار بنظر اصلاً جالب نیست. خوب این الان مثال خوبیه از جایی که یه لینک نمادین، روز شما رو نجات میده. فرض کنید ما نسخه 2.6 از foo رو نصب کردیم که اسم فایلش foo-2.6 هست و بعد، یه لینک نمادین براش درست کردیم که بهش یه اسم ساده تر foo رو دادیم و وقتی foo اجرا میشه، درحقیقت foo-2.6 رو صدا میزنه و معناش اینه که وقتی برنامه ای foo رو باز کنه، foo-2.6 باز میشه. حالا همه خوشحالن. برنامه ای که با foo وابسته است، میتونه پیداش کنه و ما هم میتونیم بفمهیم الان چه نسخه ای از foo نصب شده. وقتی نوبت به ارتقاء foo به نسخه 2.7 برسه، ما فقط فایل رو به سیستم اضافه میکنیم، لینک نمادین foo رو حذف میکنیم و یه foo جدید که به foo-2.7 اشاره میکنه میسازیم. ته تنها این کار مشکل ارتقاء نسخه رو حل میکنه، بلکه به ما اجازه میده هر دو نسخه رو روی سیستم داشته باشیم. تصور کنید نسخه 2.7 یه باگ داشته باشه (از دست این برنامه نویسهای بد!) و ما نیاز به بازگشت به نسخه قدیمی داریم. خوب میتونیم دوباره لینک نمادین رو حذف کنیم و یکی دیگه که به foo-2.6 اشاره میکنه بجاش بسازیم. مثال بالا (از پوشه lib/ توی یه سیستم Fedora) یه لینک نمادین رو داره نشون میده که اسمش libc.so.6 هست و به یه فایل کتابخانه مشترک به اسم libc-2.6.so اشاره میکنه و معناش اینه که برنامه هایی که دنبال libc.so.6 هستن، درحقیقت libc-2.6.so رو دریافت میکنن. درمورد روش ساخت لینکهای نمادین توی جلسات بعد توضیح میدیم. نقل قول:لینکهای سخت تشکر شده توسط: YN97 , __undercover , mahdirabbani , fatima-php , farazsahebdel , Alireza , majidganji
13-04-1394، 03:51 ب.ظ
دستکاری فایلها و پوشه ها
تو این مرحله، آماده ایم که یکم کار واقعی انجام بدیم. این قسمت از آموزش به دستورات زیر اختصاص داره:
این 5 دستور جزو پرکاربردترین دستورات لینوکس هستن و برای دستکاری فایلها و پوشه ها کاربرد دارن. خوب، بگذارین رک صحبت کنیم. بعضی از این دستورات رو میشه با یه مدیر فایل گرافیکی راحتتر انجام داد. با کمک یه مدیر فایل، میتونیم یه فایل رو از یه پوشه بکشیم و توی یه پوشه دیگه رها کنیم، فایلها رو برش بزنیم و الصاق کنیم، حذف کنیم و خیلی کارهای دیگه. پس چرا از این برنامه های قدیمی خط فرمان استفاده کنیم؟ جواب، قدرت و انعطاف پذیریه. انجام دستکاریهای ساده روی فایلها با یه مدیر فایل گرافیکی راحته، اما کارهای پیچیده رو میشه با برنامه های خط فرمان، راحتتر انجام داد. برای مثال، چطور میخواین تمام فایلهای HTML رو از یه پوشه به یکی دیگه کپی کنید، متنها فقط اونهایی که توی پوشه مقصد وجود ندارن یا جدیدتر از نسخه موجود توی پوشه مقصد هستن؟ خوب این کار با مدیر فایل شاید خیلی سخت باشه، درحالی که با خط فرمان خیلی راحته: cp -u *.html destination نشانه های جایگزین قبل از اینکه دستوراتمون رو توضیح بدین، لازمه درباره قابلیتی از Shell که این دستورات رو اینقدر قدرتمند کرده صحبت کنیم. بدلیل اینکه شل خیلی با اسامی فایلها کار میکنه، یکسری کارکترهای خاص معرفی کرده که به شما توی مشخص کردن سریع گروههای از فایلها کمک میکنه. این کارکترهای خاص، نشانه های جایگزین (Wildcard) نامیده میشن. استفاده از نشانه های جایگزین (که بهش Globbing هم میگن)، به شما اجازه میده که اسامی فایلها رو براساس الگوهای کارکترها انتخاب کنید. فهرست زیر، نشانه های جایگزین و چیزی که میتونن انتخاب کنن رو نشون میده:
فهرست زیر هم کلاسهایی رو مشخص میکنه که میتونین استفاده کنین:
استفاده از نشانه های جایگزین به شما امکان انتخابهای موردنظرتون رو برای اسامی فایلها میده. به چند مثال دقت کنید:
نشانه های جایگزین رو میتونید توی هر دستوری که اسم فایل بعنوان پارامتر میگیره، استفاده کنید ولی درموردشون بعداً بیشتر صحبت میکنیم. نقل قول:محدوده کارکترها نقل قول:کارکترهای جایگزین توی GUI هم کار میکنن mkdir ساخت پوشه ها دستور mkdir که مخفف Make Directory هست، پوشه ها رو میسازه. برای استفاده از اون باید این شکلی کار کنید: mkdir directory... نکته مهم: توی این آموزش هروقت سه نقطه بعد از یه پارامتر توی یه دستور اومد (مثل بالا)، معناش اینه که میتونین اون پارامتر رو تکرار کنید. بنابراین، توی این مثال: mkdir dir1یه پوشه به اسم dir1 میسازه درحالی که: mkdir dir1 dir2 dir3سه پوشه dir1 و dir2 و dir3 رو تولید میکنه. cp کپی فایلها و پوشه ها دستور cp که مخفف Copy هست، فایلها و پوشه ها رو کپی میکنه. میشه از اون به دو شکل مختلف استفاده کرد: cp item1 item2برای کپی کردن یه فایل یا پوشه به اسم item1 به فایل یا پوشه item2 و: cp item... directoryبرای کپی کردن چند فایل یا پوشه داخل یک پوشه مقصد. دستور cp چند سوئیچ انتخاب هم داره که قبل از پارامترهای مبدأ و مقصد باید بنویسید (نسخه کوتاه و طولانی، معادل هم هستن) :
مثالهایی از cp : cp file1 file2file1 رو توی file2 کپی میکنه. اگه file2 وجود داشته باشه، با محتوای file1 رونویسی میشه. اگه وجود نداشته باشه هم ایجاد میشه. cp -i file1 file2مثل بالا، فقط با این تفاوت که اگه file2 وجود داشته باشه، از کاربر برای رونویسی اون اجازه گرفته میشه. cp file1 file2 dir1file1 و file2 رو داخل پوشه dir1 کپی میکنه. dir1 باید از قبل وجود داشته باشه. cp dir1/* dir2با کمک نشانه جایگزین * تمام فایلهای داخل dir1 توی پوشه dir2 کپی میشن. dir2 باید وجود داشته باشه. cp -r dir1 dir2dir1 (و تمام فایلها و پوشه های فرعی داخلش) رو داخل dir2 کپی میکنه. اگه dir2 وجود نداشته باشه، ایجاد میشه و محتواش دقیقاً مثل dir1 خواهد بود. mv جابجایی و تغییر نام فایلها و پوشه ها دستور mv که مخفف Move هست، هر دو کار جابجایی و تغییر نام رو بسته به اینکه چطور ازش استفاده کنین، انجام میده. در هر دو صورت، فایل یا پوشه اصلی دیگه بعد از انجام کار، وجود نخواهد داشت. روش کار mv خیلی شبیه cp هست: برای جابجایی یا تغیین نام یه فایل یا پوشه: mv item1 item2 و برای منتقل کردن یک یا چند فایل یا پوشه به پوشه جدید: mv item... directory دستور mv توی چندتا از انتخابها و سوئیچها با cp مشترکه:
مثالهایی از mv : [*]mv file1 file2file1 رو به file2 تغییر نام میده. اگه file2 وجود داشته باشه، با محتوای file1 رونویسی میشه. اگه وجود نداشته باشه هم ساخته میشه. درهرصورت file1 دیگه وجود نخواهد داشت. mv -i file1 file2مثل بالا با این فرق که اگه file2 وجود داشته باشه، قبل از رونویسی از شما اجازه میگیره. mv file1 file2 dir1file1 و file2 رو به پوشه dir1 منتقل میکنه. dir1 باید وجود داشته باشه. mv dir1 dir2dir1 (و محتوای داخلش رو) به داخل dir2 منتقل میکنه. اگه dir2 وجود نداشته باشه، ساخته میشه (عملاً dir1 به dir2 تغییر نام داده میشه). rm حذف فایلها و پوشه ها دستور rm که مخفف Remove هست، برای حذف فایلها و پوشه ها بکار میره. اینطوری: rm item... نقل قول:حواستون به rm باشه فهرست سوئیچهای rm رو مشاهده کنید:
مثالهایی از rm : rm file1file1 رو بی سروصدا حذف میکنه. rm -i file1قبل از حذف file1 از شما اجازه میگیره. rm -r file1 dir1file1 و dir1 و محتوای داخلش رو حذف میکنه. rm -rf file1 dir1مثل بالایی ولی فقط با این تفاوت که اگه هرکدوم از file1 و dir1 وجود نداشت، پیغام خطا نمیده و ساکت، کارشو ادامه میده. ln ساخت لینک دستور ln که مخفف Link هست، برای ساخت لینک سخت (Hard) یا نمادین (Symbolic) بکار میره. به دو صورت زیر میشه ازش استفاده کرد: ساخت لینک سخت: ln file link ساخت لینک نمادین که item میتونه فایل یا پوشه باشه: ln -s item link لینکهای سخت لینکهای سخت روش اصلی و قدیمی یونیکس برای ساخت لینک محسوب میشن و لینکهای نمادین مدرن تر هستن. بطور پیشفرض، هر فایلی یه لینک سخت داره که به شما اسمش رو میگه. وقتی یه لینک سخت درست میکنیم، داریم یه ورودی جدید توی پوشه برای اون فایل میسازیم. لینکهای سخت دو محدودیت مهم دارن:
لینکهای سخت رو نمیشه از خود فایل متمایز کرد. برخلاف پوشه هایی که حاوی لینکهای نمادین هستن، اگه یه پوشه حاوی لینک سخت باشه، هیچ تفاوتی توی نمایش فهرست فایلهای داخلیش مشاهده نمیکنید. وقتی یه لینک سخت رو حذف میکنید، لینک حذف میشه ولی محتوای فایل توی دیسک وجود داره (یعنی فضای فایل روی دیسک آزاد نمیشه) تا وقتی که تمام لینکهایی که به اون فایل اشاره میکردن، حذف بشن. خیلی مهمه که حواستون به لینکهای سخت باشه چون ممکنه با اونها بارها و بارها مواجه بشین، البته امروزه استفاده از لینکهای نمادین ترجیح داده میشه. لینکهای نمادین لینکهای نمادین برای غلبه بر محدودیتهای لینکهای سخت تولید شدن. لینکهای نمادین با ساخت نوع خاصی از فایل که شامل یه اشاره گر متنی به فایل یا پوشه مرجع هست، تولید میشن. به این ترتیب، میتونن شبیه میانبرها (Shortcut) توی ویندوز عمل کنن، البته یادتون نره که چندین سال قبل از این قابلیت ویندوز وجود داشتن و علت اشاره به میانبرهای ویندوز، فقط بخاطر آشنایی شما با مفهومش بود! یه فایل که توسط یه لینک نمادین بهش اشاره شده و خود لینک نمادین رو خیلی سخت میشه از هم متمایز کرد. برای مثال، اگه چیزی توی لینک نمادین بنویسین، توی فایل مرجع هم نوشته خواهد شد. البته اگه لینک نمادین رو حذف کنید، فقط لینک حذف میشه و فایل اصلی سر جاش خواهد بود. اگه فایل رو قبل از حذف لینک حذف کنید، فقط فایل حذف میشه و لینک باقی میمونه ولی به هیچی اشاره نمیکنه. اینجور وقتها به لینک میگن «شکسته» (Broken). در خیلی از توزیعهای لینوکس، دستور ls لینکهای شکسته رو با یه رنگ مشخص (مثلاً قرمز) نشون میده تا شما رو از وجودشون مطلع کنه. مفهوم لینکها ممکنه گیج کننده بنظر بیاد ولی صبر کنید. همه این موارد رو میخوایم امتحان کنیم و اونوقت - امیدواریم - براتون جا بیفته. بیاین زمین بازی رو بسازیم از اونجا که میخواین یکم دستکاری واقعی روی سیستم فایل انجام بدیم، اجازه بدین یه مکان امن برای «بازی» با دستورات دستکاری فایلها بسازیم. اول نیاز داریم به پوشه بسازیم تا داخلش کار کنیم. ما اینکار رو با ساخت یه پوشه به اسم playground داخل پوشه خانه کاربر خودمون انجام میدیم. ساخت پوشه ها دستور mkdir برای ساخت یه پوشه به کار میره. برای ساخت پوشه playground، اول باید مطمئن بشیم که توی پوشه خانه کاربر خودمون هستیم و بعد پوشه رو بسازیم: [me@ncis-ir ~]$ cd [me@ncis-ir ~]$ mkdir playground برای اینکه یکم زمین بازی رو جذابتر کنیم، بذارین چندتا پوشه دیگه داخلش به اسامی dir1 و dir2 بسازیم. برای اینکار اول باید مسیر کاری فعلی رو به playground تغییر بدیم: [me@ncis-ir ~]$ cd playground [me@ncis-ir playground]$ mkdir dir1 dir2 یادتون باشه که دستور mkdir چند پارامتر همزمان قبول میکنه که به شما اجازه میده هر دو پوشه رو با یه دستور بسازین. کپی کردن فایلها حالا بگذارین یکم اطلاعات وارد زمین بازیمون کنیم. اینکار رو با کپی کردن فایلها انجام میدیم. از دستور cp استفاده کنید تا فایل passwd از مسیر etc/ به پوشه جاری کپی بشه: [me@ncis-ir playground]$ cp /etc/passwd . دقت کنید که چطور از میانبر مسیر جاری فعلی یعنی . استفاده کردیم. حالا اگه فایلها رو بخوایم نشون بدیم، میتونیم از ls استفاده کنیم: [me@ncis-ir playground]$ ls -l drwxrwxr-x 2 me me 4096 2015-07-04 12:48 dir1 drwxrwxr-x 2 me me 4096 2015-07-04 12:48 dir2 -rw-rw-r-- 1 me me 1962 2015-07-04 12:49 passwd خوب حالا برای تفریح هم که شده، بگذارین عملیات کپی رو با سوئچی v- تکرار کنیم تا ببینیم چیکار میکنه: [me@ncis-ir playground]$ cp -v /etc/passwd . ‘/etc/passwd’ -> ‘./passwd’ دستور cp دوباره کپی رو انجام داد ولی این دفعه یه پیام هم نشون داد که داشته چه کاری انجام میداده. دقت کنید که cp کپی اولی رو بدون هیچ پیغام هشداری رونویسی کرد. خوب حالا بذارین سوئیچ i- رو تست کنیم: [me@ncis-ir playground]$ cp -i /etc/passwd . cp: overwrite ‘./passwd’? جواب دادن به سؤال بالا با y باعث رونویسی فایل میشه. هر کارکتر دیگه (مثلاً n) باعث میشه cp فایل رو تنها بذاره و کاری به کارش نداشته باشه. جابجایی و تغییر نام فایلها خوب اسم passwd خیلی جذاب بنظر نمیرسه و اینجا هم یه زمین بازیه. پس بذارین اسمشو عوض کنیم: [me@ncis-ir playground]$ mv passwd fun خوب بگذارین یکم بیشتر تفریح کنیم و فایلی که تغییر نام دادیم رو توی پوشه ها جابجا کنیم و بعد برگردونیم سر جاش: [me@ncis-ir playground]$ mv fun dir1 [me@ncis-ir playground]$ mv dir1/fun dir2 [me@ncis-ir playground]$ mv dir2/fun . حالا بذارین ببینیم mv روی پوشه ها چه اثری داره؟ اول فایلمون رو میبریم توی پوشه dir1 : [me@ncis-ir playground]$ mv fun dir1 حالا dir1 رو میبریم داخل dir2 و چک میکنیم درست منتقل شده یا نه؟ [me@ncis-ir playground]$ mv dir1 dir2 [me@ncis-ir playground]$ ls -l dir2 total 4 drwxrwxr-x 2 me me 4096 2015-07-04 13:10 dir1 [me@ncis-ir playground]$ ls -l dir2/dir1 total 4 -rw-r--r-- 1 me me 1962 2015-07-04 13:03 fun دقت کنین که چون dir2 وجود داشت، mv پوشه dir1 رو به داخل dir2 منتقل کرد. اگه dir2 وجود نداشت، mv پوشه dir1 رو به dir2 تغییرنام میداد. بگذارین همه چیز رو برگردونیم سر جاش: [me@ncis-ir playground]$ mv dir2/dir1 . [me@ncis-ir playground]$ mv dir1/fun . ایجاد لینکهای سخت خوب یکم بریم سراغ لینکها. اول لینک سخت میسازیم. چندتا لینک برای فایلمون میسازیم: [me@ncis-ir playground]$ ln fun fun-hard [me@ncis-ir playground]$ ln fun dir1/fun-hard [me@ncis-ir playground]$ ln fun dir2/fun-hard حالا که 4 نمونه از فایل fun داریم، بگذارین نگاهی به پوشه playround خودمون بندازیم: shcode=bash][me@ncis-ir playground]$ ls -l total 16 drwxrwxr-x 2 me me 4096 2015-07-04 13:16 dir1 drwxrwxr-x 2 me me 4096 2015-07-04 13:16 dir2 -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun-hard[/shcode] نکته ای که احتمالاً متوجهش شدین اینه که توی فهرست، fun و fun-hard هردو شامل عدد 4 هستن. این عدد تعداد لینکهای سختی هست که برای فایل وجود داره. بخاطر میارین که فایلها همیشه حداقل یه لینک دارن چون اسم فایل ازطریق یه لینک سخت معرفی میشه؟ خوب حالا از کجا بفهمیم fun و fun-hard در اصل هر دو، یه فایل هستن؟ در این مورد، ls کمکی نمیکنه. البته میتونیم ببینیم که حجم فایل دوتاشون یکیه (ستون 5) اما چیز بیشتری دستگیرمون نمیشه و این مورد هم چیزی رو ثابت نمیکنه. برای حل این مشکل، باید یکم عمیقتر بشیم. وقتی درمورد لینکهای سخت فکر میکنین، تصور کردن اینکه فایلها از دو بخش تشکیل شدن میتونه مفید باشه: بخش داده که شامل محتوای فایله و بخش اسم که شامل نام فایله. وقتی لینک سخت میسازیم، درحقیقت فقط داریم به بخش فایل اضافه درست میکنیم که به همون بخش داده فایل اصلی اشاره میکنه. سیستم یه زنجیره از بلاکهای دیسک رو برای بخش داده های فایل درنظر میگیره که بهش inode گفته میشه و بعد، اون رو با بخش اسم، مرتبط میکنه. درنتیجه، هر لینک سخت به یه inode مشخص که شامل محتوای فایل هست اشاره میکنه. دستور ls راهی برای کشف این اطلاعات داره. باید اون رو با سوئیچ i- صدا بزنید: [me@ncis-ir playground]$ls -li total 16 669404 drwxrwxr-x 2 me me 4096 2015-07-04 13:16 dir1 673911 drwxrwxr-x 2 me me 4096 2015-07-04 13:16 dir2 675344 -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun 675344 -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun-hard توی این مدل از فهرست فایلها، اولین ستون شماره inode هست و همونطور که میبینید، هر دو مورد fun و fun-hard از یه inode دارن استفاده میکنن که تأیید میکنه که هردو، یه فایل هستن. ساخت لینکهای نمادین لینکهای نمادین برای غلبه به دو نقصی که لینکهای سخت داشتن ایجاد شدن: لینکهای سخت نمیتونن فراتر از دیسک فیزیکی خودشون برن و ضمناً نمیتونن به پوشه ها اشاره کنن. لینکهای نمادین نوع خاصی از فایل هستن که شامل یه اشاره گر متنی به فایل یا پوشه مقصد هست. ساخت لینک نمادین شبیه ساخت لینک سخته: [me@ncis-ir playground]$ ln -s fun fun-sym [me@ncis-ir playground]$ ln -s ../fun dir1/fun-sym [me@ncis-ir playground]$ ln -s ../fun dir2/fun-sym اولین دستور که خیلی سرراسته. ما فقط یه سوئیچ s- اضافه کردیم تا بگیم لینک نمادین (Symbolic) میخوایم بسازیم. اما دوتای دیگه چی؟ یادتون نره که وقتی لینک نمادین میسازیم، داریم یه شرح متنی از جایی که فایل یا پوشه مقصد نسبت به خود لینک قرار داره تولید میکنیم. درک این موضوع با نگاه کردن به خروجی ls راحتتره: [me@ncis-ir playground]$ ls -l dir1 total 4 -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun-hard lrwxrwxrwx 1 me me 6 2015-07-04 14:18 fun-sym -> ../fun همونطور که میبینید، ls داره میگه fun-sym توی dir1 یه لینک نمادین هست که درحقیقت داره به فایل fun/.. اشاره میکنه که درست هم هست: نسبت به مکان fun-sym فایل fun یک پوشه بالاتر قرار داره. دقت کنید که حجم فایل لینک نمادین 6 هست (تعداد کارکترهای fun/..) نه حجم فایل اصلی fun که بهش اشاره میکنه. وقتی لینک نمادین درست میکنید، میتونین مسیر مطلق هم بدین: [me@ncis-ir playground]$ ln -s /home/me/playground/fun dir1/fun-sym استفاده از مسیرهای نسبی بیشتر رایجه چون اجازه میده پوشه ای که حاوی فایل اصلی هست رو تغییر نام بدین و اگه لینک و فایل اصلی رو به نحوی جابجا کنید که مسیرشون نسبت به هم تغییر نکنه، مشکلی پیش نمیاد و لینک نمیشکنه. علاوه بر فایلهای معمولی، لینکهای نمادین میتونن به پوشه ها هم اشاره کنن: [me@ncis-ir playground]$ ln -s dir1 dir1-sym [me@ncis-ir playground]$ ls -l total 16 drwxrwxr-x 2 me me 4096 2015-07-04 15:09 dir1 lrwxrwxrwx 1 me me 4 2015-07-04 15:13 dir1-sym -> dir1 drwxrwxr-x 2 me me 4096 2015-07-04 14:18 dir2 -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun -rw-r--r-- 4 me me 1962 2015-07-04 13:03 fun-hard lrwxrwxrwx 1 me me 3 2015-07-04 14:17 fun-sym -> fun حذف فایلها و پوشه ها همونطور که قبلاً گفتیم، دستور rm برای حذف فایلها و پوشه ها بکار میره. میخوایم این دستور رو برای اینکه زمین بازی رو کمی پاکسازی کنیم، بکار ببریم. اول بگذارین یکی از لینکهای سخت رو حذف کنیم: [me@ncis-ir playground]$ rm fun-hard [me@ncis-ir playground]$ ls -l total 12 drwxrwxr-x 2 me me 4096 2015-07-04 15:09 dir1 lrwxrwxrwx 1 me me 4 2015-07-04 15:13 dir1-sym -> dir1 drwxrwxr-x 2 me me 4096 2015-07-04 14:18 dir2 -rw-r--r-- 3 me me 1962 2015-07-04 13:03 fun lrwxrwxrwx 1 me me 3 2015-07-04 14:17 fun-sym -> fun خوب کاری که میخواستیم انجام شد. فایل fun-hard حذف شد و همونطور که میبینید، تعداد لینکهای fun از 4 به 3 رسید (ستون دوم). خوب حالا میخوایم خود فایل fun رو حذف کنیم و فقط برای تفریح، از سوئیچ i- استفاده میکنیم تا ببینیم چی میشه: [me@ncis-ir playground]$ rm -i fun rm: remove regular file ‘fun’? با واردکردن y بعنوان جواب، فایل حذف میشه. حالا ببینیم خروجی ls چیه؟ دقت کنید که چی به سر fun-sym اومده؟ چون یه لینک نمادین هست و به فایلی اشاره میکنه که وجود نداره، یه لینک شکسته محسوب میشه و ls اون رو با رنگ قرمز مشخص میکنه. [me@ncis-ir playground]$ ls -l total 8 drwxrwxr-x 2 me me 4096 2015-07-04 15:09 dir1 lrwxrwxrwx 1 me me 4 2015-07-04 15:13 dir1-sym -> dir1 drwxrwxr-x 2 me me 4096 2015-07-04 14:18 dir2 lrwxrwxrwx 1 me me 3 2015-07-04 14:17 fun-sym -> fun اغلب توزیعهای لینوکس ls رو طوری تنظیم میکنن که لینکهای شکسته رو نشون بده. توی Fedora لینکهای شکسته با متن قرمز چشمک زن! نشون داده میشن. وجود یه لینک شکسته به خودیخود خطرناک نیست ولی یه جورایی کثیف کاری محسوب میشه. اگه بخوایم با یه لینک شکسته کار کنیم، چنین چیزی میبینیم: [me@ncis-ir playground]$ less fun-sym fun-sym: No such file or directory خوب بگذارین یکم دیگه تمیزکاری کنیم. لینکهای نمادین رو حذف میکنیم: [me@ncis-ir playground]$ rm fun-sym dir1-sym [me@ncis-ir playground]$ ls -l total 8 drwxrwxr-x 2 me me 4096 2015-07-04 15:09 dir1 drwxrwxr-x 2 me me 4096 2015-07-04 14:18 dir2 یه چیز دیگه که باید درمورد لینکهای نمادین بخاطر بسپارین اینه که اغلب عملیات فایل روی مقصد لینک انجام میشن نه خود لینک. البته rm استثناست و وقتی لینک رو حذف میکنید، خود لینک حذف میشه نه فایل یا پوشه مقصدش. درنهایت، کل زمین بازی رو حذف میکنیم. برای انجام این کار، به پوشه خانه کاربرمون برمیگردیم و از سوئیچ r- دستور rm استفاده میکنیم تا پوشه playground و محتوای داخلش رو بصورت بازگشتی حذف کنه: [me@ncis-ir playground]$ cd [me@ncis-ir ~]$ rm -r playground نقل قول:ساخت لینک نمادین با GUI نکته پایانی این قسمت از آموزش توی این قسمت خیلی کارها کردیم و اطلاعاتی که کسب کردین نیاز به زمان داره تا حسابی ملکه ذهنتون بشه. تمرینهایی که انجام دادیم رو بارها و بارها تکرار کنید تا وقتی که بطور کامل درکش کنید. آگاهی کامل و خوب از دستورات پایه دستکاری فایلها و نشانه های جایگزین خیلی مهمه. با خیال راحت زمین بازی تمرین خودتون رو با اضافه کردن فایلها و پوشه های بیشتر با کمک نشانه های جایگزین برای مشخص کردن فایلها برای عملیات مختلف، گسترش بدین. مفهوم لینکها یکم در ابتدا ممکنه گیج کننده بنظر بیاد ولی براش وقت بگذارین تا بطور کامل نحوه کارشون رو یاد بگیرین. در آینده این لینکها میتونن خیلی جاها جون شما رو نجات بدن. تشکر شده توسط: fatima-php , __undercover , mahdirabbani , farazsahebdel , YN97 , majidganji
|
|
کاربران در حال بازدید این موضوع: 2 مهمان