آشنایی با سیستم عامل لینوکس

پروتکلی است که این امکان را فراهم می‌کند تا داده‌ها میان دو بخش در یک شبکه منتقل شوند. عموما برای دسترسی به shell از لینوکس و سیستم‌های Unix based استفاده می‌شود. این پروتکل به شما اجازه می‌دهد تا به کامپیوتر سرور از راه دور وصل شوید. از این طریق می‌توانید برای مثال فایل‌های داخل سرور را کپی کنید، جابه‌جا کنید، پاک کنید، پوشه و شاخه جدید ایجاد کنید و …

برای اتصال به سرور و برای برقراری ارتباط از راه دور شما نیاز به یک ssh client در کامپیوتر خود دارید. یکی از این client ها putty نام دارد.

با استفاده از نرم‌افزار putty می‌توانید به سرور لینوکس دانشکده متصل شوید. برای کار در این محیط باید دستورات linux را بشناسید.

برای این‌که به وسیله این نرم‌افزار به سرور دانشکده متصل شوید، در قسمت هاست، ce.sharif.edu را نوشته و port22 را انتخاب کنید. سایر تنظیمات را تغییر ندهید و کلید open را بزنید.

در صورتی که به اینترنت متصل باشید، به شبکه دانشکده وصل خواهید شد، از شما ابتدا username و سپس password خواسته می‌شود. ( هنگام وارد کردن password بر روی صفحه چیزی که شما می‌نویسید نمایش داده نمی‌شود.) و در صورتی که با username و password صحیح وارد شوید می‌توانید به درایو Z خود (که در دانشکده به هرکس به صورت مجزا تعلق می‌گیرد دسترسی داشته باشید.)

هسته‌ی مرکزی

هر سیستم عامل، یک هسته مرکزی و یک لایه بیرونی دارد. آن‌چه ما به عنوان کاربر با آن سر و کار داریم و به آن دسترسی داریم، همین لایه بیرونی است. به هسته مرکزی سیستم عامل که بدنه اصلی سیستم عامل را تشکیل می‌دهد، kernel می‌گویند.

انواع shell

برنامه و لایه‌ای است که دستورات را از محیط بیرونی گرفته و به Kernel منتقل می‌کند و از این طریق آن‌ها را اجرا می‌کند. در واقع shell به عنوان یک واسط و interface برای انجام کارها و اعمال دستورات در سیستم‌عامل است.

انواع shell ها عبارتند از:

TC, KORN, BASH, Z, C, Bourne   

هرچیزی در این محیط به عنوان یک فایل شناخته می‌شود. برای کار با آن‌ها می‌بایست نام دقیق به همراه فرمت مشخص آن‌ها را استفاده می‌کنیم. در ضمن file ها case sensitive هستند. ( به این معنا که بزرگ یا کوچک بودن حروف در اسامی آن‌ها مهم است و به بزرگ یا کوچک بودن حساس است.)

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

دستورات مقدماتی

دراین‌جا تعدادی از دستورات مقدماتی موردنیاز در محیط shell لینوکس را با هم خواهیم دید:

فرض کنید در محلی که قرار داریم ترتیبی از فایل‌ها و دایرکتوری‌ها به صورت زیر وجود دارد:

(دایرکتوری اصلی home نام دارد. درون آن دو فایل به همراه دو فولدر folder1 و folder2 است. درون folder2 چند فایل قرار دارد و درون folder1 هم علاوه بر چند فایل یک فولدر با نام folder3 قرار دارد. )

pwd: محلی که در آن قرار داریم را نشان می‌دهد: فرض کنید در folder1 قرار داشته باشیم. پس از اجرای دستور pwd چنین نتیجه‌ای را مشاهده خواهیم کرد:

home/folder1

cd: دستوری است که برای جابه‌جایی میان دایرکتوری‌ها استفاده می‌شود.

از هر فولدر، به فولدر بالایی و آن‌چه در فولدر کنونی وجود دارد، دسترسی داریم. آدرس‌دهی‌ها به صورت نسبی و نسبت به مکانی که هم‌اکنون در آن قرار گرفته‌ایم هستند.

مثلا در folder1 قرارداریم و می‌خواهیم وارد folder3 شویم:

cd folder3

اگر در folder1 باشیم و بخواهیم به home برویم:

cd ..

(.. یک دایرکتوری بالاتر را نشان می‌دهد و . دایرکتوری جاری را نشان می‌دهد.)

اگر در folder1 باشیم و بخواهیم به folder2 برویم:

cd ../folder2

ls: دستوری است که فایل‌های دایرکتوری‌های موجود در دایرکتوری جاری را نشان می‌دهد.

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

w.docx folder3

ls -a: تمام فایل‌ها و دایرکتوری‌های موجود در دایرکتوری جاری را نشان می‌دهد. (حتی فایل‌های مخفی)

ls -l: علاوه بر نمایش فایل‌ها و دایرکتوری‌ها، جزئیات مربوط به آن‌ها را نیز نمایش می‌دهد. ( اطلاعاتی چون سطوح دسترسی، تاریخ به‌روز رسانی و …)

cp: دستوری برای کپی کردن فایل‌هاست. دستور cp file1 file2 که file1 را در مسیری که در قسمت file2 مشخص کرده‌اید کپی می‌کند. به عنوان نمونه، در folder1 قرار داریم، می‌خواهیم فایل w.docx را در folder2 با نام w2 کپی کنیم:

cp w.docx ../folder2/w2.docx

در صورتی که می‌خواستیم در همان محلی که هستیم یک کپی از w با نام w2 ایجاد کنیم:

cp w.docx w2.docx

mv: در صورتی که بخواهید یک دایرکتوری یا فایلی را از جایی به جای دیگر جا‌به‌جا کنید از این دستور استفاده می‌کنید. ( برای تغییر نام دادن یک فایل یا دایرکتور نیز از این دستور استفاده می‌شود.)

مثلا در folder1 با اجرای دستور mv w.docx a.docx نام فایل متنی از w به a تغییر خواهد کرد. در صورتی‌که بخواهیم فایل w.docx را به کلی به folder3 منتقل کنیم:

mv w.docx folder3/w.docx 

rm: برای پاک کردن فایل‌ها و دایرکتوری‌ها استفاده می‌شود. rm برای پاک کردن فایل و rmdir برای پاک‌‌ کردن یک دایرکتوری:

rm w.docx
rmdir folder3

mkdir: برای ساخت یک دایرکتوری استفاده می‌شود:

دستور زیر در محلی که هم‌اکنون قرار داریم یک دایرکتوری با نام folder4 ایجاد خواهد کرد:

mkdir folder4

می‌توان آدرس دیگری نیز برای ساخت دایرکتوری مشخص کرد. مثلا:

mkdir ../folder5

ln: ایجاد یک لینک

در سورتی که از ln به تنهایی استفاده کنید، همانند عمل کپی‌کردن عمل می‌کند. با این فرق که دیگر نام فایل موردنظر در مقصد را مشخص نمی‌کنید. فرض کنید در home قرار داریم. دستور زیر فایل big.cpp را در folder1 کپی می‌کند.

ln big.cpp folder1

ln -s: یک لینک نمادین(میانبر) از فایل موردنظر در دایرکتوری مقصد ایجاد می‌کند:

ln -s file1 lnk1 که در آن به جای file1 مسیر فایل یا دایرکتوری موردنظر و به جای lnk1 مسیر دایرکتوری که قرار است فایل یا دایرکتوری میانبر در آن ایجاد شود را قرار دهید.

دستورات کار با فایل

touch: تاریخ ویرایش یا تغییر یک فایل یا دایرکتوری را تغییر می‌دهد:

touch big.cpp

تاریخ به روزرسانی فایل مذکور را مطابق با تاریخ کنونی می‌کند.

cat: محتویات یک فایل را از سطر اول تا انتها به بعد به نمایش می‌گذارد:

cat set.txt

head: ده خط اول یک فایل را نمایش می‌دهد:

head set.txt

tail: ده خط آخر یک فایل را نمایش می‌دهد.

دستور tail -f برای فایل‌هایی که دائما در حال تغییر هستند، تا زمانی که از این دستور بیرون نیاییم 10 خط انتهایی را نمایش می‌دهد.

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

vim new.txt

در vim دو mod وجود دارد. یکی insert و دیگری command. برای ورود به مد insert کلید i را می‌زنیم. سپس در این شرایط می‌توانید محتوای فایل را ویرایش کنید. به آن چیزی اضافه کرده یا از آن چیزی حذف کنید.

برای ورود به مد command کلید Esc را می‌زنیم. از مد command برای اجرای دستوراتی مثل save و … استفاده می‌شود.

فرض کنید ابتدا در مد insert تغییراتی را در فایل مذکور ایجاد کردیم. سپس با زدن دکمه Esc به مد command وارد می‌شویم. در این صورت با نوشتن هریک از دستورات زیر

w: ذخیره می‌کند
q: از محیط خارج می‌شود
:wq ابتدا ذخیره کرده و سپس خارج می‌شود

find: دستوری برای حست‌و جوی یک فایل که به این صورت نوشته می‌شود:

find address -name file_name

مثلا می‌خواهیم داخل دایرکتوری folder1 به دنبال فایلی به نام a.txt بگردیم:

find home/folder1 -name a.txt

whereis: مکان یک فایل را نمایش می‌دهد. مثلا در مثالی که در تصویر داشتیم، با فرض آن‌که home در درایو C قرار دارد:

whereis M.jpg

نتیجه حاصل C:\home\folder1\folder3\M.jpg خواهد بود.

which: مسیر کامل یک فایل باینری یا اجرایی را نمایش می‌دهد.

دستورات سطح دسترسی

chmod: برای تعیین و تغییر سطح دسترسی گروه‌های مختلف به یک فایل استفاده می‌شود. سه گروه owner، group و other وجود دارد که برای هریک می‌توان سطوح دسترسی خواندن، نوشتن و اجرا تعیین کرد. این سطوح دسترسی با کمک یک عدد سه رقمی تعیین می‌شود. این عدد خود از سه بخش read، write و execute تشکیل شده است.

هر کدام از این گروه‌ها شامل سه بخش است، برای هر بخش، این سه قسمت را در کنار یکدیگر یک عدد binary در نظر می‌گیریم که در صورت وجود آن امتیاز، 1 و در غیر این صورت 0 می‌شود. مثلا در نمونه بالا برای owner عدد 111 و برای Group و Other نیز به همین ترتیب خواهد بود. سپس برای به دست آمدن عدد سه رقمی اصلی که سطوح دسترسی را تعیین می‌کند عدد مربوط به این سه دسته را به ده‌دهی تبدیل می‌کنیم. که در این مثال به عدد 777 خواهیم رسید.

برای آن‌که مد دسترسی یک فایل را مطابق جدول بالا داشته باشیم (مثلا برای فایل a.txt) از دستور زیر استفاده می‌کنیم:

chmod 777 a.txt

برای نمونه دیگر دسترسی زیر را در نظر بگیرید:

عدد باینری حاصل برای owner برابر 111، برای Group برابر 100 و برای Other نیز 100 است. پس عدد نهایی 744 خواهد بود:

chmod 744 a.txt

chgrp: گروه یک فایل را تغییر می‌دهد. که به صورت زیر نویشته می‌شود:

chgrp group2 file_name

chown: مالکیت یک فایل را تغییر می‌دهد. مثلا هنگامی که چند user داشته باشیم، این دستور به صورت زیر نوشته می‌شود:

chown user filename

su: switch user تغییر کاربر

passwd: دستوری برای تغییر password کاربر کنونی

logout: خارح شدن از سیستم و مجددا به صفحه ورود منتقل شدن. (در صورتی که از این دستور استفاده کنید مجددا برای ورود از شما مانند ابتدای کار نام کاربری و گذرواژه درخواست می‌کند.)

sort: دستور sort file1 file2 محتویات فایل اول و دوم را ترکیب کرده و نمایش می‌دهد.

less: محتوای یک فایل را نمایش می‌دهد. اما در صورتی که فایل طولانی باشد، ابتدا مقداری از ابتدای آن را نمایش می‌دهد و سپس در صورت نیاز، می‌توانید بخش‌های بعدی محتوای فایل را نیز مشاهده کنید. برای بیرون آمدن از این دستور ctrl + z را بزنید.

دستورات مدیریتی

ps: پردازه‌های در حال اجرا را نمایش می‌دهد. هر پردازه یک شماره تحت عنوان PID دارد که معرف آن است.

kilL: دستوری است که به عنوان ورودی، PID پردازه موردنظر را دریافت کرده و آن پردازه را از کار می‌اندازد. ( کاری مانند end task در task manager ویندوز)

free: دستور free -m میزان حافظه خالی RAM را نمایش می‌دهد.

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

du: لیست دایرکتوری‌های موجود در دایرکتوری جاری را که بر اساس حجم مرتب شده‌اند، نمایش می‌دهد.

who: دستور who افرادی را که در آن زمان به شبکه متصل هستند نمایش می‌دهد.

whoami: شناسه مربوط به خودتان (ID) را در شبکه نمایش می‌دهد.

دایرکتوری home با علامت ~ نمایش داده می‌شود.

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

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

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

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

مثلا به جای

cp a.txt ../b.txt

(البته این دستور طولانی نیست!) می‌توان به صورت مقابل نوشت:

cp a.txt\
../b.txt

برای آشنایی با نحوه عملکرد دستورها می‌توانید از man و یا –help و هم‌چنین info استفاده کنید. مثلا برای شناخت دستور ls:

man ls
ls --help

می‌توانید در شبکه با دیگر کاربران پیغام رد و بدل کنید. با دستور write و نوشتن ID یکی دیگر از userهای حاضر در شبکه می‌توانید با او صحبت کنید.

whatis keyword: کارایی برنامه‌ای را که مشخص کرده‌ایم، توضیح می‌دهد.

apropos keyword: این دستور، لیست تمام دستورهایی که کلمه‌ی کلیدی را داشته باشند نمایش می‌دهد. وقتی که کارایی دستور را می‌دانید ولی خود دستور را نمی‌دانید می‌توان از این دستور استفاده کرد.

استفاده از tab و Arrow keys

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

با استفاده از کلید ↑ و ↓ می‌توانید به دستوراتی که پیش از این نوشته بودید دسترسی داشته باشید و دیگر مجددا آن‌ها را ننویسید. با این کلیدها بین این دستورات جابه‌جا می‌شوید.

با استفاده از ← , → نیز در یک خط جابه‌جا می‌شوید و می‌توانید به بخشی از آن عبارتی را اضافه یا کم کنید و آن خط را تصحیح کنید.

کاراکترهای خاص مانند * و ؟

* با تمام کاراکترها هماهنگ می‌شود.(تعداد نیز مشخص نیست) به این صورت که *a کلماتی چون a، a1، a23، abc و … را در برمی‌گیرد.

؟ با تمام کاراکترها هماهنگ می‌شود. اما تنها در یک حرف. یعنی عبارت ?a عباراتی چون a1 و ab را شامل می‌شود. اما abc را شامل نمی‌شود.

می‌توان یک بازه برای match کردن عبارات تعیین کرد. مثلا a[1,8] با عباراتی چون a1, a2,…, a8 هم‌خوانی دارد. یا a[A,C] با aA, aB, aC هماهنگ می‌شود.

*.txt یعنی هر فایلی با پسوند .txt

از این روش‌ها در دستورات مختلف می‌توانید استفاده کنید. مثلا همان‌طور که در کلاس دیدید برای دستور ls می‌توان ورودی تعیین کرد. مثلا می‌خواهیم بگوییم لیست تمام فایل‌هایی که با نام a شروع می‌شوند را نشان بده:

ls a*

لیست تمام فایل‌هایی که نامشان دو حرفی است و با a شروع می‌شوند و پسوند آن‌ها txt است:

ls a?.txt

لیست فایل‌هایی که نامشان 3 حرفی است و ابتدای نام آن‌ها با یکی از اعداد 1 تا 5 آغاز شده و پسوند آن‎ها نیز txt است:

ls [1, 5]??.txt

استفاده از این روش‌ها در دستوراتی مانند find کاربرد بیشتری دارد.

<: با استفاده از < می‌توانید خروجی یک دستور را در یک فایل ذخیره کنید. مثلا:

ls -l > a.out

این دستور حاصل ls -l را در فایل با نام a.out ذخیره می‌کند.

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

ls -l >> a.out

>: برعکس مورد قبل، ورودی یک دستور را از یک فایل دریافت می‌کند.

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

یا دستور ls | sort خروجی دستور ls را گفته و به sort می‌دهد و در نتیجه ما لیستی مرتب شده مشاهده خواهیم کرد.

فشرده سازی فایل‌ها در لینوکس

برای فشرده‌سازی فایل‌ها و فولدرها در لینوکس از دستور tar استفاده می‌شود:

برای این‌که فایل فشرده‌ای را از حالت فشرده درآوریم (extract) از دستور tar xf به صورت زیر استفاده می‌کنیم:

tar xf assignment.tar

این دستورها با فایل‌های فشرده با فرمت tar کار می‌کنند.

دستور gzip file1 فایل را با فرمت gzip فشرده می‌کند.