Linux-Essentialss Dec
Linux-Essentialss Dec
لیــنوکس مقدماتی
مقدماتی ...در طی تجارب تدریس��م متوجه شدهام که بسیاری از
کاربرانی که خیلی با سیستم عامل لینوکس آشنایی ندارند
هنگام گذراندن دوره LPIC-1دچار سختی میشوند ،لذا
بهنظرم رسید که دوره لینوکس مقدماتی را به چاپ برسانم
تا برای افرادی که هیچ چیز زیادی از این سیستم عامل منیدانند ،دنبال کردن
و یادگیری مطالب آن راحتتر بوده و درواقع این دوره مثل پلی است که راه
رسیدن به دوره LPIC-1را هموارتر خواهد ساخت .بنابراین اگر هیچ چیزی
از لینوکس منیدانید نگران نباشید و برای یادگیری آن با من همراه شوید.
صوفیاعلیخانی
شابک 978-600-8680-01-7
صوفیاعلیخانی
لینوکـس
مقدماتی
نوشته:صوفیاعلیخانی
:علیخانی ،صوفیا ،- ۱۳۴۷ سرشناسه
:لینوکس مقدماتی/نوشته صوفیا علیخانی. عنوان و نام پديدآور
:تهران :نشر تعالی.۱۳۹۵ ، مشخصات نشر
: ۱۴۰ص. مشخصات ظاهری
: :978-600-8680-01-7 : ۱۸۰۰۰۰ریال شابک
:فیپا وضعیت فهرستنویسی
:سیستم عامل لینوکس موضوع
Linux : موضوع
:سیستمهای عامل (کامپیوت ر) موضوع
)Operating systems (Computers : موضوع
:۸ ۱۳۹۵ع۹۴سQA ۷۶/۷۶ / ردهبندی کنگره
:۰۰۵/۴۳۲ ردهبندی دیویی
۴۵۶۳۵۲۷ : شماره کتابشناسی ملی
لینوکس مقدماتی
صوفیا علیخانی
صفحهآرایی :جعفر خدادی
نارش :تعالی
نوبت چاپ :اول1395 -
شامرگان ۱۰۰۰ :نسخه
قیمت 18000 :تومان
شابک978-600-8680-01-7 :
https://www.linuxmahz.com
با سپاس
صوفیا علیخانی
مقدمه 9 /
انقالب لینوکس11 /
آشنایی با برنامههای کاربردی متن آزاد 19 /
مهارت ICTو کار با لینوکس25 /
دستورات اولیه لینوکس35 /
49 / Help linux
مدیریت فایلها و دایرکتوریها در لینوکس59 /
ایجاد حذف و جابهجایی فایلها در لینوکس65 /
نحوه پشتیبانگیری از دادهها در لینوکس75 /
نحوه جستجوی متن در فایلها87 /
دادههای ما کجا ذخیره میشوند؟99 /
انواع کاربران سیستم عامل لینوکس و مفاهیمی از
مقدمه
تمام افرادی که میخواهند با سیستمعامل لینوکس آشنا شوند دورههایی را بهصورت
بینالمللی طی میکنند که یکی از این دورهها با نام دوره LPIC-1میباش��د .در طی
تجارب تدریسم متوجه شدهام که بسیاری از کاربرانی که خیلی با سیستمعامل لینوکس
آشنایی ندارند هنگام گذراندن دوره LPIC-1دچار سختی میشوند .لذا به نظرم رسید
که دوره لینوکس مقدماتی را به چاپ برسانم تا برای افرادی که چیزی از این سیستمعامل
نمیدانند ،دنبال کردن و یادگیری مطالب آن راحتتر بوده و درواقع این دوره مثل پلی
باشد که راه رسیدن به دوره LPIC-1را هموارتر سازد.
بنابراین اگر هیچچیزی از لینوکس نمیدانید نگران نباشید و برای یادگیری آن با من
همراه شوید.
کلیدهایموفقیت:
تنها راه موفقیت و یادگیری لینوکس ،تمرین مداوم میباشد.
9
انقالب لینوکس
و شناسایی
یعامل
سیستمها
مطرح
لینوکـس مقدماتی
لینوکـس مقدماتی
در این حالت ش��ما میتوانید این دس��تور پخت را گرفته و بر اس��اس ذائقه خود آن
را تغییر داده کم ش��یرین یا ش��یرینتر کرده یا گردو اضافه کنید و یا هر س��لیقهای که
دارید روی آن پیاده کرده و محصول جدید خود را به دیگران ،یا بفروش��ید یا آزادانه در
اختیارشان قرار دهید.
اینها مثالهایی از آزادی است.
در سیستمعامل و برنامههایی ازایندست دقیقاً این مفهوم بهکار میرود .سیستمهای
متن بازی داریم که در ازای گرفتن پول ،کل دستور پخت و ساختار سیستمعامل یا برنامه
خاص در اختیارتان قرار میگیرد و یا بدون دریافت پول این نسخه به شما داده میشود.
در حالت اول ش��ما پولی پرداخت میکنید و دستور پخت را میگیرد بعد به سلیقه
خود آن را تغییر میدهید.
در حالت دوم شما بدون پرداخت پول این دستورالعمل را تهیه کرده و تغییر میدهید.
در سیس��تمعامل لینوکس و برنامههای تحت آن دقیق��اً این مفاهیم آزادی مصداق
پیدا میکند یعنی مواردی از برنامهها هستند که در ازاي پول نسخه اصلی آن و یا نحوه
ساخت برنامهها ،با تمام سورس برنامه در اختیارتان قرار میگیرد و گاهی بدون دریافت
پول و کام ً
ال آزاد تمام مراحل ساخت آن در اختیار شما قرار میگیرد.
هردوی این موارد نشانه آزادی هستند و هرکدام مزایا و معایب خود را دارا میباشند.
مث ً
ال کمپانی RedHatکلیه س��ورس برنامهها و س��اخت سیس��تمعامل را در ازای
دریافت پول به شما میفروشد و شما قادرید آن سورس را بر اساس نیاز خود تغییر داده
و نسخه جدیدی ارائه دهید و بر اساس میل خود این نسخه را بفروشید یا آزادانه و بدون
دریافت پول در اختیار دیگران قرار دهید. 14
یا مث ً
ال نس��خه CentOSهمان س��ورس نس��خه RedHatمیباش��د ک��ه ازآنجا
خریداریشده ولی بعدا ً از طریق این کمپانی به شکل کام ً
ال آزاد در اختیار دیگران قرار
میگیرد؛ یعنی این کمپانی برای در اختیار قرار دادن نس��خه خود هیچ پولی از ش��ما
لینوکـس مقدماتی
#!/bin/bash
"?echo "what is your favorite color
echo
read COLOR
"?echo "what is your favorite number
echo
read NUMBER
RED
3
15
Here is my gift to you
1 RED
2 RED
3 RED
لینوکـس مقدماتی
کد نوشتهش��ده برنامه باال را میتوان در اختیار دیگران قرار داده تا دیگران بر اساس
سلیقه خود آن را تغییر دهند .این همان مفهوم آزادی در متن برنامه میباشد؛ یعنی ما
متن و یا سورس برنامههایی را که نوشتیم ،در اختیار همگان قرار داده و دیگران میتوانند
بر اساس نیاز خود آن را دستکاری کرده و به شکل دلخواه خود نوشته و اجرا نمایند.
دقیقاً مثلاینکه من دستور پخت باقلوا را در اختیار شما قرار دهم ،اینجا دستور ساخت
این فایل و خروجی آن را در اختیار شما قرار دادهام و این همان مفهوم سیستم متنباز
یا آزادی در متن برنامه میباشد.
حاال اجازه دهید که در مورد انواع مختلف نسخههای لینوکس و آزادی آنها صحبت
کنیم.
مث ً
ال در نس��خه Debianهس��ته اصلی سیس��تمعامل یا همان دستور پخت اولیه
سیس��تمعامل گرفتهش��ده و تغییراتی بر اس��اس دلخواه در آن اعمالشده و مث ً
ال نحوه
اجرای برنامهها یا بهاصطالح پکیجها و یا نحوه بهروزرسانیها متفاوت از نسخه RedHat
میباشد.
یا مث ً
ال نسخه دیگر سیستمعامل لینوکس مثل SUSEاز محیط گرافیک متفاوت و
یا ابزارهای متفاوتی از نسخه Debianاستفاده میکند و یا مث ً
ال Ubuntuنسخه دیگری
از لینوکس که دارای محیط گرافیکی متفاوت و دستورات اجرایی متفاوت بوده و شبیه
Debianمیباش��د ولی ممکن است در بعضی موارد فرق کنند ،مثلاینکه شما به یک
باقلوا گردو اضافه کنید و به دیگری بادام.
در CentOS , RedHatدقیقاً دستورالعملها مانند هم بوده و مثل این است که هر
دو از دستورالعمل یکسان پخت باقلوا پیروی میکنند. 16
همچنین الحاق شدن لینوکس را نیز میتوانید در موارد زیر نیز مشاهده نمایید:
مث ً
ال گوشیهای موبایل که سیستمعامل آنها اندروید میباشد یا Rokuکه وسیلهای
است برای دانلود و تماشای فیلم از روی اینترنت یا Kindleکه ابزاری است برای دانلود
لینوکـس مقدماتی
17
آشنایی با
برنامههای
متن آزاد
لینوکـس مقدماتی
دستهبندیهایی که میتوان برای این نوع برنامهها در نظر گرفت میتواند بهصورت
زیر باشد:
1-3- Desktop
2-3- Server
3-3- Admin
4-3- programming
5-3- mobile
در محیط دستکتاپ میتوان برنامههای زیر را بهعنوان برنامههای متن آزاد نام برد:
openoffice
liberoffice
firefox
Thunderbird
chromium
-در محیط سرور میتوان برنامههای زیر را بهعنوان برنامههای متن آزاد نام برد:
- Apache
- Samba
- mysql
21 - oracle
- NFS
-LDAP
- postfix
لینوکـس مقدماتی
: در محیط ادمین ابزارهای زیر از نوع متنباز هستند-
- apt-get
- yum
- webmin
- GUI Tools
:در محیط برنامهنویسی
-C
- ++C
- java
- Python
-PHP
-perl
-Ruby
- shell
: در محیط موبایل-
- ssh client
- mobile browser
- Dolphin (desktop mode)
22
تعری��ف سیس��تم م�تن آزاد و ی��ا open sourceو مفه��وم licenseبرای
سیست مهایمنتباز
در دنیای سیستمهای متن آزاد دو نوع سازمان هستند که لیسانس الزم برای دریافت
لینوکـس مقدماتی
23
مهارت ICT
و کار با لینوکس
لینوکـس مقدماتی
cloud computing -يا همان مبحث رايانش ابري مانند سرويس آمازون.
-سیستمهای الحاقي يا embeddedمانند دستگاههای موبايل.
factory automation -که از محيط DOSبه لينوکس تغییریافته است.
mars rover -
27
اما آنچه در ادامه در مورد آن میخواهیم صحبت کنيم درباره اس��تفاده لينوکس در
محيط دسکتاپ يا صفحه شخصي کامپيوتر شما میباشد.
ازجمله مطالبي که در اين قسمت پوشش خواهم داد ،عبارتاند از:
لینوکـس مقدماتی
-چگونگي استفاده از مدير دسکتاپ يا Desktop Manager
-برنامههای کاربردي آفيس
-مرورگرها Browser
-نحوه ذخيره فايلها
-مفهوم ترمينال
-چگونگي بهکارگیری کلمه رمز يا پسورد
در ش��کل زير يک محيط شخصیس��ازی بهنام KDEرا نمايش دادهام .يک محيط
کام ً
ال گرافيکي ش��بيه آنچه در محيط ويندوز داريد و با همه ابزارهاي گرافيکي مربوط
به آن.
28
همچنين در شکل زير محيط Gnome
لینوکـس مقدماتی
لینوکـس مقدماتی
استفاده میشود يا در نس��خه ubuntuاز محيط unitryاستفاده میشود که هرکدام
ویژگیهای مخصوص خود را براي مديريت دسکتاپ بهکار میبرند.
اما در هرکدام از نسخههای لينوکس میتوان هرکدام از محیطهای گرافيک ديگر را
ني��ز نصب و اجرا کرد .مث ً
ال در SUSEمیتوان بهجاي محيط پیشفرض گرافيکي آن
KDEاز GNOMEيا unityيا محیطهای ديگر نيز استفاده نمود و بهراحتی میتوان
هرکدام از محیطهای موردعالقه کاربر را نصب و بهکار برد.
اينکه از چه ن��وع محيط گرافيکي براي کارهاي روزانهتان اس��تفاده میکنید کام ً
ال
سلیقهای بوده و بر اساس اينکه در کدام محيط راحتتر کار میکنید میتوانید هرکدام
را که مايليد روي سيستم نصب و بهکارگیرید.
بهعنوان نمونه من از محيط گرافيکي سيستم خودم که با centos 7است نمونهای
نمايش دادم تا ببينيد بهراحتی میتوان در اين محيط گرافيکي کليه کارهاي روزمره را
انجام داد
30
در داخل این محیط گرافیکی به راحتی به لیس��ت فایله��ا و دایرکتوریهای خود
دسترس��ی داش��ته با حرکت موس روی آنها میتوانید آنها را حذف یا کپی و پیست
نمایید ،دقیقاً مثل زمانی که در محیط ویندوز کار میکنید.
لینوکـس مقدماتی
در شکل باال مشاهده میکنید که کليه فولدرها و فایلها بهصورت گرافيک نمايش
دادهشده است و میتوانیم با حرکت موس داخل هر پوشهای که میخواهیم پيمايش
کنيم يا فایلهای داخل آنها را حذف کرده يا جاي ديگري منتقل کنيم.
31
در اين قسمت قصد دارم بهطور خالصه در مورد ساختار فایلهای داخل سیستمعامل
لينوکس صحبت کنم.
فرض کنيد يک هارددیسک داريم که در محيط لينوکس قابلاستفاده است .درزمانی
لینوکـس مقدماتی
که من بهعنوان کاربر سیستمعامل لينوکس وارد اين سیستمعامل میشوم ،يعني جايي
که نام کاربري و پسورد خودم را میدهم و در صورت شناخته شدن وارد محيط گرافيکي
خود میشوم درواقع در مسيري خاص بنام /home/قرار دارم.
حاال اگر نام کاربري من مث ً
ال Deebaباشد در مسير /home/Deeba/قرار دارم و
در زير اين مسير پوشههایی با نام ,Document, Downloadو يا پوشههای ديگر نيز
وجود دارند.
اين موضوع دقیقاً شبيه به آنچه در محيط ويندوز مشاهده میکنید میباشد.
تمام مسیرها در لينوکس از يک مسير اصلي ريشه يا rootکه با نماد “ ”/نشان داده
میشود نشات میگیرد.
/home/به معني مسير خانه میباشد.
يعني هر کاربري در سیستمعامل داراي خانه اختصاصي خود میباشد و کليد ورود به
خانه به هر کاربر مالک آن خانه داده میشود.
در تمام اين محیطهای گرافيکي ابزاري بهنام ترمينال داريم که از آن میتوانیم وارد
محيط متني شده و دستورات لينوکس را تحت آن اجرا نماييم.
32
لینوکـس مقدماتی
33
دستورات اولیه
در لینوکس
لینوکـس مقدماتی
لینوکـس مقدماتی
-استفاده از عالمت نقلقول یا quote
-تعریف متغیرهای محیطی و چند مثال از آنها مانند متغیر PATH
در ابتدا نیاز به محیطی داریم که دستورات لینوکس را در آن وارد کنیم.
نام این محیط ترمینال اس��ت که محیط پوس��ته را در اختیار ما قرار میدهد .برای
استفاده از محیط ترمینال چنانچه در محیط گرافیکی باشیم ،مث ً
ال اگر در محیط اوبونتو
هستیم کافیست کلمه terminalرا تایپ کنیم تا شکل گرافیکی آن نمایش داده شود و
سپس با انتخاب آن و زدن کلید موس آن را انتخاب میکنیم .در این حالت یک ترمینال
به شکل زیر روی صفحه برای ما ظاهر میشود:
در ش��کل فوق روی صفحه بنفش ظاهرشده که همان ترمینال ماست این عبارت را
مشاهده میکنید:
]~ $ oracle@master
این عبارت میگوید نام کاربری که با آن وارد سیس��تم ش��دم oracleاست و کلمه
masterنام ماش��ینی که روی آن کار میکنیم .اینجا نام ماش��ین من masterاست و
عالمت ~ نشاندهنده مسیری که در آن هستم ،که به معنی خانه شخصی من یا home
directoryمیباشد.
و عالمت $معموالً برای مشخص کردن نشانه پوسته افرادی که rootنیستند بهکار
میرود. 38
لینوکـس مقدماتی
در ش��کل ،من دس��تور ls -lرا جلوی عالمت $اجرا کردهام و با زدن کلید Enter
این فرمان یا این عبارت به پوس��ته داده میش��ود و حاال پوس��ته این عبارت را با کتاب
مترجم خود یا دیکشنری خود مقایسه کرده و چنانچه بتواند ترجمه کند ،آن را به هسته
لینوکس یا کرنل میدهد و کرنل آن را اجرا کرده و جواب خروجی را به ما برمیگرداند.
عبارت واردشده یعنی ls -lاز دو قسمت تشکیلشده است:
-۱فرمان ls
-۲گزینه -lبه همراه این دستور
دس��تور lsکه مخفف کلمه listمیباشد از کلیه فایلها و دایرکتوریهای مسیری
که در حال حاضر در آن قرار داریم یعنی مسیر خانه شخصی ما لیستی تهیه کرده و از
خصوصیات آنها بهصورت جزءبهجزء اطالعاتی روی ترمینال ظاهر میکند.
و گزینه -lبه معنی این است که این لیست را با جزییات کامل به من نمایش بده.
در لیست ظاهرشده ،ستون اول از چپ مجوزهای دسترسی این فایل و ستون سوم
مالک فایل و ستون چهارم گروه این فایل و ستون بعدی سایز فایل و ستون بعدی تاریخ
ایجاد یا آخرین تغییر فایل و ستون آخر نام فایل را نمایش میدهد.
39 فرمان lsرا اگر بدون هیچ گزینهای اجرا نماییم لیست نمایش دادهشده فقط شامل
نام فایلها و دایرکتوریهای مسیرمان میشود و اطالعاتی کاملتر از مالک و سایز و غیره
نمیدهد.
لینوکـس مقدماتی
دستور بعدی دستور catمیباشد
این دستور برای نمایش محتوای یک فایل بهکار میرود که عموماً این فایلها بهصورت
متنی هستند حاال ممکن است این متن یک متن برنامهنویسی به زبانی خاص باشد یا
متن خاصی از یک کتاب و یا هر متنی دیگر.
ولی عموماً دستور catبرای نمایش محتوای فایلها بهکار میرود.
حاال در ترمینال بعد از اجرای فرمان ls -lلیست فایلها را مشاهده میکنیم و یکی
از فایلها را انتخاب کرده و با دستور catمحتوای آن را نمایش میدهیم.
اما انتهای آنها عبارت txtوجود داشته باشد .به این منظور دستور زیر را وارد میکنیم:
oracle@master ~]$ ls *.txt
در دو دستور باال حرف * به معنی هر کاراکتری که باشد ،یعنی میخواهد نام فایل
عدد باشد یا حروف الفبا باشد یا هر چیز دیگری برایم مهم نیست ،بلکه مهم این است
که انتهای فایل txtباشد.
پس هنگامیکه بخواهیم بهصورت دستهجمعی دستوری را اجرا نماییم از عالمت *
به معنی رخداد صفر تا هر تعداد از یک واقعه را جایگزین میکنیم.
در مثالهای باال هر فایلی ،چه یکحرفی ،دوحرفی یا هر تعداد حرفی باشد ،بهشرط
آنکه انتهای آن رشته یا عبارت txtوجود داشته باشد برای ما نمایش داده میشود.
حاال اگر بخواهیم فقط بهجای یک حرف خاص از عالمتی استفاده کنیم ،مث ً
ال فقط
میخواهیم بگوییم کلیه فایلهایی را نشان بده که یکحرفی هستند ،آنوقت از عالمت?
بهصورت زیر استفاده میکنیم:
oracle@master ~]$ ls -l ?.txt
در مثال باال لیست کلیه فایلها و پوشههایی را الزم داریم که نامشان یکحرفی است
حاال این حرف الفبا باشد یا عدد مهم نیست ولی انتهای آن با txt.خاتمه مییابد .حاال
اگر چنین فایلهایی در مسیر موردنظرمان وجود داشته باشد که نام فایلها را مشاهده
میکنیم و اگر وجود نداشته باشد سیستم پیغام خطا داده و میگوید چنین فایلی وجود
ندارد.
41 یا وقتی بگویم:
oracle@master ~]$ cat ?.txt
یعنی محتویات تمام فایلهای یکحرفی که انتهای آنها عبارت txt.است را نمایش
بده.
لینوکـس مقدماتی
یکی دیگر از دستورات ساده لینوکس دستور echoیا همان انعکاس میباشد.
دستور echoهر عبارتی را که جلوی آن قرار گیرد ،نمایش میدهد .یا به عبارتی روی
صفحه منعکس میکند .مث ً
ال:
دستور echo Helloکلمه Helloرا روی صفحهنمایش میدهد.
حاال اگر در دس��تور باال یعنی ehco Helloبین کلمه echoو Helloهر تعداد
فاصل��ه خالی هم بگذارم باز هنگام نمایش روی صفحه تنه��ا یکفاصله بین آنها قرار
میدهد .همچنین اگر دستور زیر را وارد کنیم:
echo Hello World
و یا
echo Hello World
خروجی در دو حالت باال چه زمانی که فقط یکفاصله بین دو کلمه Hello world
باشد یا زمانی که تعداد بیشتری فاصله بین این دو حرف باشد یعنی Hello world
خروجی فرمان بهصورت فقط یک فاصل ظاهر میشود ،یعنی بهصورت زیر:
Hello World
چنانچه قصد ما از نمایش متن این است که دقیقاً فاصله بین دو حرف عین آن چیزی
که مینویس��یم در نظر گرفته شود ،بنابراین دو کلمه را در داخل عالمت نقلقول یا “”
قرار میدهیم بنابراین برای ظاهر ش��دن دو کلمه Hello worldبا در نظر گرفتن
بیشتر از یکفاصله بین آنها ،این عبارت را داخل عالمت نقلقول قرار میدهیم ،یعنی
بهصورت زیر:
echo “Hello ”world 42
در این حالت گزینه ورودی به دس��تور ehcoبهصورت یکرش��ته با در نظر گرفتن
فاصله موجود بین آنها به دستور دادهشده و خروجی آن نیز عیناً مانند آنچه در داخل
عالمت نقلقول نشان دادیم روی صفحهنمایش داده میشود.
لینوکـس مقدماتی
خروجی دس��تور با خطا مواجه میش��ود و بهصورت زیر پیامی روی صفحه مشاهده
میکنیم:
در شکل ،بعد از خط اجرا ،پیغام bash: there command not foundرا مشاهده
میکنید .این پیام ،یعنی من دستوری بهنام thereپیدا نمیکنم که اجرا نمایم.
درواقع با زدن دس��تور a=hello thereپوس��ته مجموعه این عبارات را به هسته یا
کرنل لینوکس میفرستد اما وقتی هسته در کتابچه لیست دستورات خود نگاه میکند
میبیند که در ابتدا عبارت a=helloدارد که برای سیس��تمعامل این معنی را میدهد
که متغیری بهنام aوجود دارد که با دستور باال میگوییم مقدار این متغیر را برابر با کلمه
helloقرار بده و بعد کلمه thereرا میبیند و این کلمه برای سیس��تمعامل ،چون به
دنبال عبارت a=helloآمده ،به معنی نام یک دس��تور میباشد ،یعنی سیستمعامل در
لیست دستوراتش به دنبال دستوری با نام thereمیگردد و میبیند چنین دستوری
ندارد .پس در خروجی مینویس��د که من چنین دس��توری ندارم که بفهمم منظورش
چیست.
43 به عبارتی اگر منظور ما از اجرای a=hello thereاین باش��د که کل عبارت hello
thereرا به متغیر aتخصیص دهیم این اتفاق نمیافتد و فقط مقدار helloبه متغیر a
تخصیص داده میشود و چون فاصلهای بین کلمه helloو worldوجود دارد این فاصله
برای سیستمعامل به معنی اجرای فرمان بعدی میباشد.
لینوکـس مقدماتی
حاال اگر منظور ما دقیقاً این باشد که عبارت hello thereرا به متغیر aنسبت بده
در این صورت باید این عبارت را داخل عالمت نقلقول قرار دهیم ،یعنی به این صورت
“a=”hello there
در این صورت مقدار متغیر aبرابر با رش��ته hello thereخواهد ش��د که شکل باال
گویای خروجی آن است .حاال برای نمایش مقدار متغیر aبا دستور echo $aمحتوای
این متغیر را نمایش میدهیم.
پس زمانی که عالمت $را به همراه نام متغیر میآوریم منظورمان محتوای این متغیر
میباشد که همهجا از آن استفاده میکنیم.
در ش��کل مثالی دیگر از بهکارگیری مقدار متغیرها میباش��د .در مثال بعدی که در
شکل مشاهده میکنید مقدار متغیر aرا برابر با مقدار “ “ hello thereو مقدار متغیر b
را برابر با “ ”good dayقرار دادم .حاال با دس��تور echo $a $bمقدار این دو متغیر به
صورتی که در شکل با یکفاصله میبینید ظاهر میشود.
حاال چنانچه دستور زیر را وارد کنیم: 44
”echo “$a$b
خروجی به صورتی ظاهر میشود که هیچ فاصلهای بین دو رشته حرفی helo there
و good dayوجود ندارد.
لینوکـس مقدماتی
در ش��کل ،در داخل عالمت نقلقول محتوای دو متغیر a, bرا بدون هیچ فاصلهای
قراردادی��م و خروج��ی آن ،مقدار محتوای این دو متغیر را بدون فاصله کنار هم نمایش
میدهد ،یعنی بهصورت hello theregoodday.
با گفتن این مقدمه در مورد متغیرها و چگونگی مقداردهی به آنها ،میخواهم راجع
به بعضی از متغیرهای داخل سیستمعامل لینوکس صحبت کنم.
در سیستمعامل لینوکس یکسری متغیر داریم که برای سیستمعامل معنی خاصی
دارد و در آنها مقادیر خاصی را ذخیره و نگهداری میکند و در جای مناس��ب از آنها
استفاده میکند .بهعنوان مثال یکی از این متغیرها PATHنام دارد.
این متغیر همانطور که از اس��م آن پیداس��ت مسیری را در خود نگهداری میکند.
PATHیعنی مسیر.
در ضمن ،کلیه متغیرهای داخل سیستمعامل که خود سیستمعامل از آنها استفاده
میکند با حروف بزرگ نگهداری شده و معنی خاص خود را دارند.
یادمان باشد که در لینوکس حروف بزرگ و کوچک هرکدام بهصورت مجزا هستند،
یعنی اگر فایلی با نام txt.File1و فایلی با نام txt.file1داشته باشیم این دو نام ،دو نام
مجزا برای سیستمعامل محسوب میشوند .درواقع یعنی دو فایل داریم که یکی با حرف
45 Fبزرگ و دیگری با حرف fکوچک نوشتهشده است.
ازاینرو در سیستمعامل متغیرهای خاصی که برای لینوکس مقدار خاصی را ذخیره
میکنند نیز با حروف بزرگ ثبتشدهاند .متغیر PATHکه همگی با حرف بزرگ هستند
به معنی این است که مسیر برنامههای اجرایی در آن ذخیره میگردد.
لینوکـس مقدماتی
و از مقدمه این بخش آموختیم که چنانچه بخواهیم مقدار یک متغیر را نمایش دهیم
از عالمت $در ابتدای آن استفاده میکنیم.
بنابراین اگر بخواهیم مقدار متغیر PATHرا نمایش دهیم قبل از نام متغیر عالمت $
میگذاریم و با دستور echo $PATHمقدار متغیر را مشاهده میکنیم.
فع ً
ال تا اینجا بدانید که متغیری به این نام در سطح سیستمعامل وجود دارد و کارش
این است که یکسری مسیر و آدرسهایی را در خود ذخیره میکند که سیستمعامل از
این مسیرها استفاده میکند.
متغی��ر بع��دی متغیر SHELLبا حروف بزرگ اس��ت که نوع پوس��تهای را که در
سیس��تمعامل اس��تفاده میکنیم ،در خود نگهداری میکند و برای اینکه بدانیم با چه
پوستهای کار میکنیم با اجرای دستور echo $SHELLمقدار آن را مشاهده میکنیم.
همچنین اگر بخواهیم چند دس��تور از دستورات سیس��تمعامل را روی یک خط و
بهصورت ترتیبی و پشت سرهم بیاوریم بهطوریکه به ترتیب اجرا گردند از عالمت ; در
بین دستورات استفاده میکنیم:
مث ً
ال
oracle@master ~]$ ls ; echo $PATH 46
دس��تور باال میگوید اول دستور lsرا اجرا کن و بعدازآن دستور echo $PATHرا
اجرا کن.
لینوکـس مقدماتی
در شکل ،سه دستور echo $PATH;echo $a; echo $bرا مشاهده میکنید که
هر دستور در خطوطی مجزا اجراشده است.
درواقع بهجای اینکه هر دستور را در خطوط مجزا بدهیم همگی را در یک خط داده
و با عالمت; آنها را جداسازی مینماییم.
تا اینجا متوجه شدیم که پارهای از عالئم برای سیستمعامل معنی دارد مثل:
* برای کلیه حروف یک عبارت مثلls *.txt :
? بهجای یک حرف مثلls ?.txt :
“” برای قرار دادن یکرشته که بین آنها فاصله است مث ً
ال “ a=”hello Ali
; برای جداسازی فرامین در یک خط فرمان مثلls;echo $PATH :
47
لینوکـس مقدماتی
یکی دیگر از دس��تورات ساده لینوکس دستور historyبه معنی تاریخچه میباشد.
این دستور تاریخچه دستوراتی را که از قبل اجرا کردهاید ،نمایش میدهد.
فرض کنید امروز صبح وارد سیستم شدید و دستوری را اجرا کردید و حاال بعدازظهر
است و یادتان نمیآید کدام دستور بود .با اجرای فرمان historyمیتوانید لیست کلیه
دس��توراتی را که اجرا کرده بودید ،مشاهده کنید و دستور موردنظر را از لیست نمایش
دادهشده بیابید.
تا اینجا با تعدادی از دستورات ساده لینوکس آشنا شدید.
ازآنجاکه نمیخواهم در ابتدای راه گیج شوید به همین مقدار بسنده میکنم .بسیاری
از فرامین مفید دیگری هس��ت که با ش��رکت در دورهها و کالس آموزش��ی لینوکس
میتوانید با آنها آشنا شده و موارد استفاده آنها را بیاموزید.
48
چگونه در لینوکس
از Help
استفاده کنیم
لینوکـس مقدماتی
خب فرض کنید که رفتید به فضا و زبان فضاییها را بلد نیستید و دنبال این هستید
که حرفهایتان را برایشان ترجمه کنید در این حالت چه کار میکنید؟
خ��ب نیاز به یه مترجم یا یه راهنما دارید که در جاهایی که کلمات آنها را متوجه
نمیشوید به آن مراجعه و ترجمه حرفهای فضاییها را در آن بیابید.
دقیقاً همین کار را در سیس��تمعامل لینوکس میکنیم .یعنی میتوانیم در ترمینال
و در قسمتی که عالمت shellظاهرشده است دستور موردنظر را با کلمه –helpوارد
کنیم.
یعنی زمانی که ما اص ً
ال معنی بعضی از دستورات لینوکس را متوجه نمیشویم نیاز
به یک مترجم داریم که آنها را برایمان ترجمه کند و بگوید نحوه استفاده از آن چگونه
است.
اما روشهای مختلفی در سیستمعامل لینوکس وجود دارد که میتواند ما را در مسیر
یادگیری صحیح دستورات بهخوبی راهنمایی کند.
که عبارتاند از:
- Man
- Info
یکی از روشهایی که این مشکل را برای ما برطرف میکند استفاده از دستور man
میباش��د .دس��تور Manمخفف manualمیباش��د به معنی دس��تورالعمل که به ما
لینوکـس مقدماتی
توضیحات کاملی از یک دستور به همراه تمام گزینههای مرتبط با این دستور را نمایش
میدهد .بهمنظور بهکارگیری manباید این دستور را به همراه دستوری که میخواهیم
راجع به آن اطالعاتی کسب کنیم بهکار ببریم .مث ً
ال:
$ man ls
یعن��ی میخواهم بدانم دس��تور lsچی هس��ت چکار میکند و ب��ا چه گزینههایی
قابلاستفاده است.
ب��رای اینکه بدانیم با خود دس��تور manچگونه کارکنیم ،از دس��تور man man
استفاده میکنیم که صفحهای به شکل زیر ظاهر میشود:
ی��ک روش دیگر برای فهمیدن اینکه یک دس��تور در لینوکس چگونه کار میکند،
استفاده از infoمیباشد.
برای اس��تفاده از دس��تور infoاین فرمان را با یکی از دس��تورات دلخواهمان اجرا
میکنیم مانند شکل زیر:
$ info ls
53
این دستور هم مانند Man lsتوضیحاتی راجع به دستور میدهد و در بعضی از موارد
مثالهایی از گزینههای مختلف به همراه دستور را نمایش میدهد.
شکل زیر نمایشی از این دستور میباشد.
لینوکـس مقدماتی
در هنگام اس��تفاده از دس��تور man lsما باید نام دستوری را که میخواهیم همراه
manبیای��د ،بدانیم ،یعنی دس��تور .lsحاال فرض کنید که اص ً
ال م��ا نمیدانیم که نام
دس��تورمان چیست ولی مث ً
ال میدانیم که این دس��تور قرار است چکاری انجام دهد یا
مرتبط با چهکاری میباشد.
مث ً
ال میخواهیم دستوری مرتبط با پیکربندی شبکه را بیابیم .خب پس میدانیم که
این دستور مرتبط با شبکه است اما نمیدانیم که نامش چیست .در این حالت کافی است
که دستور manرا با گزینه –kبهکار ببریم که بهصورت زیر نمایشی از آن را میدهم:
$man -k ping
در دستور باال من میدانم که مث ً
ال میخواهم یک ارتباط شبکهای را تست نمایم .پس
حداقل میدانیم که pingبین دو ماشین را میخواهم حاال با اجرای دستور man -k
pingلیستی از دستورات مرتبط با pingبرای ما ظاهر میشود که وقتی این لیست را 54
ببینیم دستوری را که به دنبال آن هستیم خواهیم یافت .ممکن است این لیست طوالنی
و ش��امل مث ً
ال 200یا 300دس��تور مرتبط باش��د اما برای هر دستور در یک خط یک
توضیح کوتاه از کار آن دستور دادهشده است که بدینوسیله کاربر متوجه میشود که این
لینوکـس مقدماتی
دستور آیا همان دستوری هست که دنبالش هست یا خیر؟ این دستور در بسیاری موارد
کمککننده میباش��د و خیلی از موارد حتی مدیران سیستم تمامی دستورات را حفظ
نیستند و با کمک این روش میتوانند دستوری را که دنبالش هستند ،بیابند.
شکل زیر نمایشی از اجرای این دستور میباشد.
روش��ی دیگر استفاده از دستور aproposمیباشد دستور aproposبه همراه یک
دستور درست مانند man –kعمل میکند .یعنی لیستی از دستورات مرتبط با دستوری
را که همراه aproposآمده است ،میدهد .مث ً
ال apropos pingیا apropos echo.
تمامی این موارد لیست دستورات مرتبط با دستور pingیا دستور echoرا نمایش
میدهند.
یکی از روشهایی که میتوانیم ببینیم در سیستمعامل لینوکس چه دستوراتی داریم
و توضیحات هر دستور را بهصورت یک دفترچه راهنمای کامل مطالعه کنیم ،رفتن به
مسیر usr/share/doc/میباشد .وقتی به این مسیر میرویم لیستی از تمامی دستورات
لینوکس را که در س��طح سیستمعامل نصبشده است ،مشاهده میکنیم که بهصورت
پوش��ههایی از نام آنها قابلمش��اهده اس��ت .حاال اگر داخل یک پوشه برویم لیستی از
فایلهای داخل آن پوش��ه میبینیم که بهصورت فش��رده یا gz.موجود میباشد .مث ً
ال
فرض کنید که دس��تور pythonرا روی سیستم نصبکردهایم و میخواهیم در مورد
آن مطالعه کاملی داشته باشیم .بنابراین به مسیر usr/share/doc/python/میرویم و
لیستی از فایلهای این مسیر را مشاهده میکنیم حاال برای آنکه فایلهای فشردهشده را
بدون اینکه بخواهیم از حالت فشردگی دربیاوریم مشاهده کنیم ،از دستور lessبه همراه
55 نام فایل استفاده میکنیم.
مث ً
ال less python-policy.txt.gzبا اجرای این دستور توضیحات موجود در این
فایل فش��رده بهطور کامل و صفحه به صفحهنمایش داده میش��ود که میتوانیم آن را
بهطور کامل مطالعه نماییم.
لینوکـس مقدماتی
روش دیگر برای اینکه بفهمیم یک دستور چکار میکند ،استفاده از دستور whatis
میباشد .بدینصورت که این دستور را به همراه دستوری که میخواهیم از آن اطالعات
کسب نماییم بهکار میبریم.
مث� ً
لا whatis lsی��ا whatis catکه در این صورت یک خط خروجی و توضیح
کوتاهی از اینکه این فرمان چیس��ت به ما نش��ان داده میشود .مانند شکل زیر :دستور
دیگر whereisمیباشد این دستور به همراه دستور دلخواه مث ً
ال whereis lsمیگوید
که دستور lsاز چه مسیرهایی اجرا میشوند و در چه مسیری مستندات مربوط به این
دستور قرار دارد.
مث ً
ال whereis ls
در این بخش قصد دارم به توضیح در مورد دستوراتی که بهوسیله آن میتوانیم لیست
فایلها و پوشههای خود را در یک مسیر خاص نمایش دهیم و دستورات مرتبط به لیست
فایلها و دایرکتوریها را توضیح دهم.
دستوراتی که در این بخش دنبال میکنم عبارتاند از:
• نحوه استفاده از دستور cdیا change directory
• استفاده از مسیر مطلق و مسیر نسبی
• معنی .و ..در مسیر
• دستور pwdیا Present working directory
الزم به توضیح اس��ت که در مورد س��اختار فایل سیستمهای در لینوکس در فصل
دیگری توضیح خواهم داد.
لینوکـس مقدماتی
home directory
و “ ”..به معنی یک مسیر باالتر از مسیری که در آن قرار داریم یا بهاصطالح parent
مسیر جاری میباشد.
پس با اجرای فرمان “ ”. cdاتفاق خاصی نمیافتد .یعنی میگویم برو به مسیر جاری
و این در حالی است که در مسیر جاری قرار داریم.
اما دستور “ ”.. cdیعنی برو به یک مسیر باالتر یا برو به مسیر والد من یا یک مسیر
به عقب برگرد ،یعنی اگر در مسیر home/oracle/باشیم با اجرای فرمان “ ”.. cdیعنی
یک مسیر برو عقب ،یعنی به مسیر home/وارد میشویم.
همچنین عالمت “~” برای سیستمعامل معنی دارد و معنی آن یعنی مسیر خانه
ما یا بهاصطالح home directoryیعنی “~ ”cdیعنی برو به مس��یر خانه خودت یا
ب��ه home directoryخودت برو .برای مث ً
ال فرض کنید در مس��یر etc/قرار داریم و
میخواهیم به مسیر خانه خودمان برگردیم در این حالت میتوانیم به دو صورت عمل
کنیم
1- Cd /home/oracle
~ 2- Cd
لینوکـس مقدماتی
بنابراین اجرای دستور “ “ ls -aلیستی از تمامی فایلها و دایرکتوریهای مسیر
موردنظر که چه پنهان باشند یا نباشند را نشان میدهد .توجه داشته باشید که در هر
مسیری دو تا فایل بهصورت پنهان وجود دارند ،یکی بهنام “ ”.و دیگری بهنام “ ”..که “”.
به معنی مسیر جاری و “ ”..به معنی مسیر عقبتر از این مسیر یا والد این مسیر میباشد.
حاال فرض کنید در مس��یر موردنظر فایلی با نام “ ”htpasswd.وجود داشته باشد.
دیدن نام این فایل بدون گزینه “ ”ls –aامکانپذیر نمیباشد.
برای مشاهده لیست فایلهای داخل یک مسیر میتوانیم از گزینه “ ”ls -laکه نام
فایلها و دایرکتوریها را با جزییات بیشتر و همچنین نام فایلهای پنهان را نیز مشاهده
نماییم.
64
ایجاد ،حذف
و یا انتفال فایلها
در لینوکس
لینوکـس مقدماتی
در این بخش قصد دارم به چگونگی اس��تفاده از دستوراتی که برای ایجاد یک فایل
جدید یا حذف فایل یا انتقال فایل به مسیر دیگر صحبت کنم .در این راستا لیستی از
دستورات به شرح زیر بهکار میرود:
• دستور touchکه برای ایجاد یک فایل خالی بهکار میرود.
• دستور rmیا removeکه برای حذف یک فایل و دایرکتوری بهکار میرود.
• دستور mvیا move directory or fileکه برای انتقال فایل یا دایرکتوری و یا
تغییر نام فایل یا دایرکتوری استفاده میشود.
• دستور cpبرای کپی کردن فایل و دایرکتوری
• دستور mkdirبرای ایجاد یک دایرکتوری خالی
• دستور rmdirبرای پاک کردن یک دایرکتوری خالی
در هرکدام از این دس��تورات با اس��تفاده از گزینه –rو یا –Rمیتوانیم دستورات را
بهصورت تودرتو یا recursiveانجام دهیم.
حاال به توضیح هر یک از دستورات باال میپردازم.
دستور touch
این دس��تور برای ایجاد یک فایل با س��ایز صفر یا یک فایل خالی استفاده میشود.
یعنی اگر فایلی بهنام myfileوجود نداشته باشد با استفاده از دستور touch myfile
67 در مسیر جاری یک فایل با نام myfileکه خالی است ایجاد میگردد.
حاال اگر مث ً
ال فایلی بهنام testداش��ته باش��یم و دستور touch testرا بزنیم اتفاقی
که میافتد این اس��ت که زمان فایل تغییر میکند .یعنی با فرمان “ ”ls -lمیتوانیم
مشاهده کنیم که زمان فایل روی سیستم تغییر کرده است.
لینوکـس مقدماتی
نکات موردتوجه
در لینوکس حروف بزرگ از کوچک متمایز است .یعنی فایلی با نام Myfileبا فایلی
با نام myfileدو فایل متفاوت هستند که دریکی با حرف بزرگ Mو در دیگری با حرف
کوچک mنام فایل آمده است.
فاصله بین نام فایل یعنی اگر میخواهم فایلی با نام مث ً
ال My Fileداشته باشم در
هنگام اس��تفاده از دستور touch My Fileبهجای یک فایل ،دو فایل با نامهای My
و Fileخواهیم داشت حاال اگر منظورمان تنها یک فایل با نام My Fileاست در این
صورت نام فایل را در داخل “” قرار میدهیم .یعنی دستور را به این شکل اجرا میکنیم
”touch “My Fileدر این حالت رشته “ ”My Fileبه همراه فاصله بین آنها بهصورت
نام فایل لحاظ خواهد شد.
برای س��اختن یک پوشه یا دایرکتوری از دستور mkdirبه همراه نام پوشه استفاده
میکنیم.
مث ً
ال mkdir Mydir1یعنی پوشهای با نام Mydir1ایجاد کن.
حاال اگر این پوشه از قبل وجود نداشته باشد با اجرای این دستور ایجاد میشود.
قوانی��ن فاصل��ه در ن��ام فایل یا دایرکتوری و ح��روف بزرگ و کوچ��ک در مورد نام
دایرکتوریها هم صدق میکند.
دستور mvکه برای انتقال یا تغییر نام یک فایل یا دایرکتوری بهکار میرود.
مث ً
ال اگر دستور mv myfile mydir1را بدهیم ،یعنی اگر فایلی بهنام myfile
در مسیر جاری وجود دارد به مسیر myfileیا پوشه myfileکه در مسیر جاری قرار 68
دارد انتقال بده.
/home/oracle
لینوکـس مقدماتی
myfile
mydir1
$ ls mydir1
در این حالت فایل myfileاز مسیر قبلی که قرار داشت پاکشده و به مسیر جدید
منتقل میشود.
نکته :هنگام انتقال فایلهای بزرگ از یک مسیر به مسیر دیگر دقت کنید ،خصوصاً
زمانی که این انتقال از یک ماشین به ماشین دیگر و تحت شبکه انجام میشود .ازآنجاکه
انتقال به معنی حذف فایل از مسیر جاری و انتقال به مسیر جدید است .اگر فایل بزرگ
باش��د و در حین انتقال برق برود یا به هر شکل ارتباط دو ماشین قطع شود فایل اولیه
خراب خواهد شد و ممکن است بهراحتی قابلدسترس نباشد ،لذا در اینگونه موارد ابتدا
فایل را کپی کرده و سپس در مسیر اولیه آن را حذف میکنیم.
دس��تور mvهمچنین برای تغییر نام فایل و دایرکتوری نیز بهکار میرود .یعنی اگر
دستو ر mv myfile newfileرا اجرا کنیم اتفاقی که میافتد این است که فایل �my
fileبه newfileتغییر نام میدهد.
دس��تور cpیا copyکه برای کپی کردن فایل و دایرکتوری از یک مس��یر به مسیر
دیگر بهکار میرود.
مث ً
ال cp myfile mydir1یعنی فایلی با نام myfileرا به ش��اخه mydir1در
مسیر جاری کپی کن.
69 یعنی با فرض اینکه در مس��یر جاری پوش��های با نام mydir1وجود داشته باشد و
با فرض اینکه فایلی با نام myfileدر مس��یر جاری وجود داش��ته باشد این فایل عالوه
بر اینکه در مس��یر جاری وجود دارد ،بلکه یک کپی از آن در مسیر mydir1نیز کپی
میشود.
لینوکـس مقدماتی
دستور rmیا removeکه برای پاک کردن فایل و دایرکتوریها بهکار میرود.
مث ً
ال اجرای دس��تور rm myfileیعنی اگر فایلی با ن��ام myfileوجود دارد آن را
پاک کن.
حاال هنگام پاک کردن ممکن اس��ت سیس��تمعامل از ما سؤال کند که آیا مطمئن
هستی که فایل پاک شود و شما با دادن پاسخ بله یا خیر که با “ ”yیا “ ”nآن را مشخص
میکنید.
اگر حرف ‘ ’yرا وارد کنید یعنی بله پاک کن.
اگر حرف ‘ ’nرا انتخاب کنید یعنی پاک نکن.
71
نکتـه:
یک روش اس�تفاده از دستورات لینوکس بهصورت استفاده از عالئم خاص
میباشد .یعنی اگر من میخواهم تمام فایلهایی که انتهای نامشان مث ً
ال حروف
لینوکـس مقدماتی
txtدارد را حذف کنم از عالمت “*” بهجای کلیه نام فایل به همراه حروف txt
استفاده میکنم .یعنی چی؟
فرض کنید فایلهای با نام “file1.txt” , “file2.txt” , “file3.txt” , “file4.
”txtداریم و میخواهیم همه این فایلها را حذف کنیم .در این صورت با دستور “ rm
”*.txtکلیه فایلهایی که اسم آنها هر چه باشد ولی پسوند انتهای آن “ ”txt.باشد را
حذف خواهد کرد.
مثال بعدی:
ف��رض کنید فایلهایی ب��ا ن��ام “ cc” , “2.cc” , “3.cc” , “4.cc.1داریم در این
صورت برای پاک کردن این فایلها از دستور “ ”rm ?.ccیعنی فایلهایی که نامشان
یکحرفی است و با پسوند “ ”cc.خاتمه پیدا میکند را پاک کن.
عالمت؟ بهجای یک کاراکتر یا یک حرف بهکار میرود.
مثال:
ف��رض کنید فایلهایی با ن��ام “ ”ali” , “Ahamahداریم و میخواهیم آنها را به
مس��یری دیگر کپی کنیم برای این حالت میتوانیم از دستور “cp [aA]* /home/
”oracle/mydir1استفاده کنیم .این دستور میگوید از مسیر جاری هر فایلی که نام
آن با حرف aکوچک یا Aبزرگ شروع میشد و انتهای آن هر چه میخواهد باشد را به
مسیر home/oraclr/mydir1/کپی کن.
توجه داشته باشید که کلیه موارد و حروف خاص مثل “*” یا “؟” در کلیه دستورات
ذکرشده باال قابلاستفاده میباشد و باعث میشود که عملیات حذف و انتقال و یا کپی
کردن را بهصورت دستهجمعی روی فایلها و دایرکتوریهایمان انجام دهیم و در زمان 72
انجام صرفهجویی میکند؛ زیرا زمانی که شما با تعداد مث ً
ال هزار فایل در یک مسیر مواجه
هستید و میخواهید این هزار فایل که مشخصه مشترکی دارند را کپی یا حذف یا تغییر
مسیر دهید بهتر است از این عالئم برای خالصه کردن عمل خود و صرفهجویی در زمان
لینوکـس مقدماتی
استفاده نمایید.
نکته :استفاده از گزینه “ ”r-به همراه دستورات cp , mv , rmبه این معنی است
که عملیاتی که قرار است انجام دهید را بهصورت تودرتو در مسیر موردنظر و کلیه فایلها
و پوشههای داخل آن مسیر انجام بده.
یعنی اگ��ر در مس��یر home/oracle/mydir1/mydir2/mydir3/چندین
پوشه و زیرپوشه وجود داشته باشد با استفاده از گزینه “ ”r-میتوانیم بهیکباره و تودرتو
کلیه فایلها و دایرکتوری مس��یر home/oracle/mydir1/mydir2/mydir3/را
حذف کرده یا انتقال دهیم یا کپی نماییم.
73
نحوه گرفتن نسخه
پشتیبان از فایلها و
دایرکتوریهای موجود در
سیستم عامل لینوکس
لینوکـس مقدماتی
Archiving compression
در شکل باال دو دایره میبینیم ،یکی برای گرفتن نسخه پشتیبان که در آن از دستور
tarکه مخفف کلمه Tape Archiveمیباش��د و در دایره بعدی دستوراتی که برای
فشردهسازی بهکار میروند ،مانند gzip, bz2نشان دادهشده است .در شکل باال نقطه
اشتراک میان این دو قسمت ،دستور zipمیباشد .در سیستمعامل لینوکس عموماً برای
فشردهس��ازی از مکانیزم gzip, bz2اس��تفاده میشود و استفاده از دستور zipخیلی
در سیستمعاملهای لینوکسی باب نیست و یا کمتر استفاده میگردد .دستور tarکه از
دیرباز از سیستمهای یونیکسی آمده است میتواند به همراه دستوراتی برای فشردهسازی
نسخه پشتیبان مانند gzip, bz2بهکار رود.
آنچه در این فصل میخواهم به آن اش��ارهکنم عبارت است از استفاده از دستور tar
برای تهیه نسخه پش��تیبان یا backupو چگونگی استفاده از دستورات فشردهسازی
gzip, bz2برای فشرده کردن نسخههای پشتیبان.
77 ازآنجاکه برای هر فشردهسازی میبایست نحوه بازآوری فایل فشرده را نیز بدانیم پس
به ازای هر دس��تور فشردهسازی ،دستوری برای بازگردانی آن نسخه از حالت فشرده به
حالت غیر فشرده نیز وجود دارد که در این فصل بهتفصیل درباره آن صحبت خواهم کرد.
لینوکـس مقدماتی
دستور فشردهسازی gzip bz2 zip
در جدول باال بهاختصار نام هر دس��تور فشردهسازی به همراه دستوری که از حالت
فشرده خارج میسازد آورده شده است.
اما برای تهیه نسخه پشتیبان از فایلها و یا پوشههای داخل سیستمعامل میتوانیم
از دستور tarاستفاده نماییم.
برای استفاده از دستور tarحالتهای زیر را میتوانیم بهکار بریم:
• برای ایجاد نسخه پشتیبان با استفاده از دستور tar -c
• برای دیدن محتوای نسخه پشتیبان با استفاده از دستور tar -t
• برای استخراج نسخه پشتیبان تهیهشده از دستور tar -xاستفاده میکنیم.
دس��تور tarرا میتوانیم با اس��تفاده از گزینههای فشردهسازی نیز بهکار بریم .بدین
منظور در هر یک از حاالت سهگانه باال میتوانیم گزینه – zو یا j-را بهکار ببریم .برای
روشن شدن مطلب به مثالهای زیر توجه کنید.
مث ً
ال فرض کنید که میخواهم از مسیر خانه شخصی خودم در لینوکس یا بهاصطالح
home directoryخودم ،یک نسخه پشتیبان تهیه کنم .برای این کار از دستور زیر
استفاده مینمایم:
$ tar -cf /tmp/home_oracle.tar /home/Oracle
در دستور باال میگویم با استفاده از گزینههای c-یعنی ایجاد نسخه پشتیبان و قرار
دادن این نس��خه پشتیبان در فایلی در مس��یر tmp/و با نام home_oracle.tarاز
78
مسیر home/Oracle/نسخه پشتیبان تهیه کن.
دقت کنید که در دستور tarابتدا مقصد یا مکانی را که میخواهیم فایل پشتیبان در
آنجا ذخیره گردد ،مینویسیم و بدین منظور از گزینه – fدر دستور tarاستفاده کردیم.
لینوکـس مقدماتی
این گزینه میگوید که نسخه پشتیبان مرا در فایلی با مشخصهای که در دستور آوردهام
قرار بده.
دستور:
tar -cf /tmp/home_oracle.tar /home/Oracle
درواقع از کلیه فایلها و دایرکتوریهای مسیر home/Oracle/یک نسخه پشتیبان
در مسیر tmp/و با نام home_oracle.tarایجاد میکند .دقت کنید که این نام یک
نام دلخواه است و هر نام دیگری میتواند باشد ،اما برای درک کاربر که بعدها زمانی که
به سیستم مراجعه میکند و اینکه بداند این فایل چه بوده ،بهتر است نامهای انتخابی را
با موضوع فایل نزدیک انتخاب نماییم؛ یعنی در لینوکس فرقی نمیکند که شما نام فایل
را چه بگذارید اما چنانچه چند روز یا چند ماه بعد به سیستم مراجعه کردید برای اینکه
با یک نگاه متوجه شوید که محتوای این فایل چه میتواند باشد ،نام فایلها در دستور
tarرا با پسوند tarانتخاب میکنیم.
اتفاقی که در دستور tarمیافتد این است که کلیه فایلها و دایرکتوریها را بهصورت
یک فایل و با فرمت tarدر مکانی ذخیره میکند.
شکل زیر ،نمایش دستور:
*/~ tar -cf /tmp/oracle.tar
در این دس��تور بهجای استفاده از مسیر home/oracle/با فرض اینکه در مسیر /
home/oracleقرار دارم و یا اینکه با نام کاربری oracleوارد سیستم شدهام از عالمت
~ به معنی home directoryاستفاده میکنم.
79
لینوکـس مقدماتی
حاال فرض کنید که تعداد فایلها و دایرکتوریهای شما زیاد باشد و فایل پشتیبانی
که با دستور tarمیگیرید بزرگ بوده و فضای کافی برای ذخیرهسازی نداشته باشید ،در
چنین حالتی با استفاده از گزینههای فشردهسازی ،این نسخه tarرا فشرده میکنیم تا
حجم فایل تولیدشده کم گردد .بدین منظور از دستور tarبا گزینه z-یا j-بهصورت
زیر استفاده میکنیم:
$ tar -czf /tmp/home_oracle.tar.gz /home/Oracle
در دستور باال میگویم که از مسیر home/oracle/یک نسخه پشتیبان بگیر و آن
را فشرده کن و در فایلی بهنام home_oracle.tar.gzدر مسیر tmp/قرار بده.
دقت کنید که نام فایل را بر اس��اس گزینه z-بهصورت home_oracle.tar.gz
انتخاب کردم که به من یادآوری میکند که این فایل از نوع tarفایل بوده و بهصورت
فشرده و از نوع gzipمیباشد.
شکل زیر نحوه استفاده از گزینه فشردهسازی را در دستور tarنشان میدهد:
80
لینوکـس مقدماتی
81
لینوکـس مقدماتی
جهت نمایش محتوای یک tar fileاز گزینه t-استفاده میکنیم .فرض کنید که در
دستور باال نسخه پشتیبانی تهیهکردهایم حاال میخواهیم ابتدا محتوای آن را ببینم و بعد
به استخراج آن بپردازیم .بدین منظور از دستور زیر استفاده میکنیم:
$ tar -tzvf /tmp/home_oracle.tar.gz
$ tar -tjvf /tmp/home_oracle.tar.bz2
با استفاده از دستورات باال میتوانیم محتوای فایل پشتیبانی که با فرمتهای gzip
,bz2را که قب ً
ال ایجاد کرده بودیم ،تماشا کنیم.
حاال فرض کنید که میخواهیم این نسخههای پشتیبان را استخراجکنیم.
نکته :در هنگام استخراج یک نسخه پشتیبان ،حتماً در ابتدا به مکانی غیر از مکان
اصلی اس��تخراج بروید .مث ً
ال فرض کنید که من میخواهم فایل home_oracle.tar.
gzرا استخراجکنم بنابراین در ابتدا به مسیر home/oracle/نمیروم که در آنجا این
استخراج را انجام دهم ،زیرا اگر این کار را انجام دهم کلیه فایلهای نسخه پشتیبان روی
فایلهای قبلی نوش��ته میشود و کلیه فایلهای قبلی از بین خواهند رفت .بنابراین در
ابتدا یک پوش��ه مث ً
ال با نام دلخواه mybackupدر مس��یری دلخواه حاال یا در مسیر /
home/oracleیا در مسیری مثل tmp/میسازم و سپس نسخه پشتیبان را در آنجا
استخراج میکنم و پس از اطمینان از صحت فایلهای استخراجشده میتوانم این فایلها 82
را در مسیر دلخواهم کپی نمایم و یا پس از اطمینان از صحت آنچه این فایل پشتیبان در
اختیارم گذاشته است به مسیر اصلی رفته و در آنجا این عمل استخراج را انجام میدهم.
برای استخراج فایلهای پشتیبان از گزینه x-استفاده میکنیم:
لینوکـس مقدماتی
لینوکـس مقدماتی
میخواهیم یک فایل را بهصورت فشرده و با مکانیزم zipفشرده نماییم .بدین منظور از
دستور zip file.zip fileاستفاده میکنیم .حاال فرض کنید که میخواهیم یک
پوشه یا دایرکتوری را فشرده نماییم .در این حالت باید بدانیم که دستور zipبهتنهایی
قادر به انجام عمل فشردهسازی بهصورت تودرتو نمیباشد .به عبارتی وقتیکه از دستور
zipجهت فشردهس��ازی یک پوش��ه استفاده میکنیم و مث ً
ال دس��تور zip dir.zip
dir_nameرا میزنیم در این حالت دس��تور zipمتوجه نمیش��ود که dir_name
یک دایرکتوری اس��ت که باید محتوای داخل آن را فش��رده کند و بنابراین عم ً
ال کاری
انجام نمیدهد .بدین منظور از گزینه r-به همراه دستور zipاستفاده مینماییم که
بهصورت زیر نمایش دادهام:
$ zip -r dir.zip dir_name
در ش��کل باال یک دایرکتوری با نام mydirس��اختم و در داخل آن س��ه فایل با 84
zip -r نامهای file1,file2, file3ایجاد کردم و س��پس با دس��تور mydir.
zip mydirاین دایرکتوری و محتوای داخل آن را فشرده کردهام ،اما چون فایلهای
من خالی میباش��د لذا مقدار 0%را در ش��کل باال مش��اهده میکنیم .اما اگر فایلها و
لینوکـس مقدماتی
دایرکتوریهای مسیر انتخابی خالی نباشند این میزان درصد نیز متفاوت خواهد بود و
صرفاً مثال باال برای چگونگی استفاده از دستور zipمیباشد.
برای گرفتن نسخه پشتیبان با گزینه – fمیتوانیم بگوییم که این نسخه پشتیبان
را در روی tapeنگه��داری ک��ن .بدین منظور باید ن��ام tape deviceمتناظر را روی
سیستمعامل لینوکس بدانیم .مث ً
ال tape deviceهای از نوع اسکازی معموالً با نام st0
یا scsci tapeنامیده میش��وند که عدد 0به اولین deviceاش��اره میکند .بنابراین
اگر بخواهیم که محتوای فایل پش��تیبان را روی tapeمنتقل کنیم دس��تور زیر را وارد
میکنیم:
# tar -czf /dev/st0 /home/oracle
در دستور باال میگویم که یک فایل پشتیبان بساز روی deviceی بهنام dev/st0/
و از کلیه محتوای مسیر home/oracle/و در ضمن فشرده هم کردیم.
dev/st0/به مس��یر tape deviceروی سیستمعامل اشاره میکند .ازآنجاکه در
سیس��تمعامل لینوکس کلیه deviceهای جانبی در مس��یر dev/قرار دارند و نیز به
خاطر اینکه tapeنیز یک وسیله خارجی متصل به سیستمعامل است لذا نام آن در این
مسیر نگهداری میشود .به عبارتی سیستمعامل با دیدن نام dev/st0/به دنبال tape
deviceی از نوع اسکازی میگردد و اگر این دستگاه به ماشین لینوکس ما متصل باشد
فایل پشتیبان را روی آن منتقل میکند.
در مورد تهیه نس��خه پشتیبان روی tapeبا گزینههای متفاوتی روبرو هستیم .مث ً
ال
میدانیم در این روزها سایز و فضای tape deviceها زیاد است و به ترابایت میرسد
85 بنابراین اگر میخواهیم نس��خه پشتیبانی روی tapeتهیه کنیم که حجم آن کمتر از
حجم tapeمیباش��د بهتر است از فضای tapeبهینه استفاده نماییم .در این حالت از
گزین��ه tar -czf /dev/st0n /hom/oracleاس��تفاده میکنی��م .دقت کنید /
dev/st0nبه سیستمعامل میگوید که نسخه پشتیبانی تهیه کن که بعد از تهیه این
لینوکـس مقدماتی
نسخه tapeبه عقب و به اول نوار برنگردد .حرف nمخفف non rewinedمیباشد.
در حالتی که از dev/st0/استفاده کنیم بعد از عمل پشتیبانگیری tapeبه عقب و به
ابتدا بازمیگردد و سرخط میایستد اما در حالتی که از گزینه dev/st0n/استفاده کنیم
مثل این است که نوار را بخشبندی کردهایم و هر قسمت از نسخه پشتیبان را روی یک
بخش از نوار مغناطیسی ذخیره نمودهایم .در حالت استفاده از st0nبعد از تهیه نسخه
پشتیبان؛ هد نوار مغناطیسی درست بعد از آخرین داده پشتیبان قرارگرفته و چنانچه
بخواهیم نسخه پشتیبان دیگری روی نوار قرار دهیم از این نقطه به بعد اطالعات ما در
نوار ذخیره میگردد.
ازآنجاکه این کتاب مربوط به دانس��تنیهای لینوکس مقدماتی میباش��د لذا در این
خصوص بیش��تر صحبت نمیکنم و صرفاً خواس��تم تا نس��بت ب��ه گزینههای مختلف
پشتیبانگیری آشنایی پیدا نمایید .اس��تفاده از دستورات نوار مغناطیسی ،خود بخش
مجزایی را طلب میکند.
86
چگونه داخل فایلها
و دایرکتوریهای
لینوکس جستجو کرده
و متن موردنظر را
بیابیم؟
لینوکـس مقدماتی
بهراس��تی چگونه میتوانیم ب��ه کاله قرمزی کمک کنیم تا تیله خ��ودش را از میان
اینهمه تیله پیدا کند؟
خب ممکن است بگوییم میتوانیم تیلهها را بر اساس اندازه مرتب کنیم و سپس بر
اساس رنگ دستهبندی کنیم و اینطوری دستههای کوچکتری پیداکرده و بنابراین پیدا
کردن تیله کاله قرمزی در این دس��تههای کوچکتر راحتتر خواهد بود .بدین منظور
در لینوکس دستور بسیار قدرتمندی بهنام grepداریم که بهصورت زیر از آن استفاده
میکنیم:
”تیله من “ “همه تیلهها“ $ grep
89 خط باال یک مثال است که بهجای عبارت “تیله من “ و “همه تیلهها” درواقع عبارت مورد
جستجو و نام کلیه فایلهایی که میخواهیم این عبارت در آن جستجو گردد را وارد میکنیم.
بنابراین مث ً
ال اگر بخواهیم به دنبال عبارت “ ”abcدر داخل فایل file1.txtبگردیم از
دستور grep “abc” file1.txtاستفاده میکنیم.
لینوکـس مقدماتی
فرض کنید چندین فایل داریم و نمیدانیم که عبارت موردنظر ما در کدام فایل اس��ت.
بنابراین عبارت موردنظر را در همه فایلها جستجو میکنیم و این عمل را با دستور grep
“abc” file*.txtانج��ام میدهیم .در این مثال میخواهم به دنبال عبارت “ ”abcدر
کلیه فایلهایی که نام آنها با کلمه fileشروعشده و ادامه آن هر حرفی میخواهد باشد و
انتهای آن با کلمه txt.پایانیافته باشد ،بگردم.
اما روشهای دیگر جس��تجو این اس��ت که مانند مثال باال که برای کاله قرمزی استفاده
کردیم ابتدا محتوای یک فایل را مرتب کنیم و بر اساس مقادیر مرتبشده بر اساس مث ً
ال رنگ
تیله یا اندازه تیلهها به دنبال تیله موردنظر بگردیم .این عمل در سیستمعامل لینوکس نیز
قابل انجام است و با استفاده از ترکیب چند دستور با هم که به آن عمل pipingیا لولهکشی
میگویند انجام میشود .درواقع در مثال کاله قرمزی مثل اینکه ما از چند سبد سوراخدار با
اندازههای متفاوت برای جداسازی تیلههای درشت از تیلههای کوچک استفاده کنیم.
90
عمل pipeیا لولهکش��ی در لینوکس باعث میشود که خروجی اجرای یک دستور
بهعنوان ورودی دستور بعدی بهکار رود .دقیقاً مثل زمانی که کل تیلههای کاله قرمزی
را از یک آبکش اولیه عبور دادیم و نتیجه تیلههای بهدستآمده را از آبکش بعدی عبور
لینوکـس مقدماتی
دادیم.
در اس��تفاده از دس��تور pipeدر لینوکس در هنگام جستجوی یک عبارت در میان
محتوای یک فایل میتوانیم به روش زیر عمل کنیم که ابتدا محتوای فایل را با دستور
catنمایش داده و این محتوا را از دس��تور grepعبور دهیم تا عبارت موردنظر را پیدا
نماییم.
بدین منظور به روش زیر عمل میکنیم:
$ cat file1.txt | grep abc
در شکل باال خروجی دستور catرا به دستور moreدادهایم که بتوانیم محتوای فایل
را صفحه به صفحه مشاهده کنیم.
اینها روشهایی از pipeکردن دستورات در لینوکس میباشند.
میخواهم در این بخش مجموعهای از دس��تورات مفید لینوکس جهت جستجوی
91 متنی در فایل یا فایلهای موردنظر را بهصورت اختصار توضیح دهم.
دستور tail
این دستور برای نمایش خطوط انتهایی یک فایل بهکار میرود و جالب است بدانید
که این دستور به همراه گزینه – fجهت مانیتورینگ الگ فایلهای سیستم بسیار مفید
لینوکـس مقدماتی
است و نحوه استفاده آن بهصورت میباشد.
مث� ً
لا اگر بخواهیم یکی از الگ فایلهای مهم سیس��تمعامل لینوکس بهنا م�mes
sagesرا که در مسیر var/log/قرار دارد ،مانیتور کنیم از دستور:
tail -f /var/log/messages
استفاده میکنیم.
اگر در دستور tailتعداد خطوطی را که میخواهیم روی صفحهنمایش ببینم ،ندهیم
سیستمعامل بهطور پیشفرض ده خط آخر فایل را نمایش میدهد ،اما میتوانیم تعداد
خط��وط موردنیاز را هم در این دس��تور ارائه کنیم .مث ً
ال بگوی��م tail -n 50 /var/
log/messagesیعنی 50خط آخر فایل var/log/messages/را برایم نمایش بده.
دستور head
این دس��تور برعکس دستور tailاز ابتدای فایل تعدادی خطوط را نمایش میدهد.
چنانچه هیچ عددی در این دس��تور ندهیم ،بهط��ور پیشفرض 10خط ابتدای فایل را
نمایش میدهد و چنانچه عدد بدهیم به تعداد عدد دادهش��ده از خطوط ابتدای فایل را
به ما نمایش میدهد.
مث ً
ال tail -n 20 /var/log/messagesیعنی 20خط اول این فایل را برایم
نمایش بده.
دستور less
Lessدس��توری اس��ت که باعث میش��ود خروجی یک فرمان بهصورت صفحه به 92
صفحهنمایش داده شود .عالوه بر آن ،این امکان را به ما میدهد که بتوانیم روی صفحات
مرور کنیم ،یعنی به صفحه باالیی و پایینی حرکت کنیم.
مث ً
ال اگر میخواهیم محتوای فایل messagesدر مسیر var/log/را مشاهده کنیم
لینوکـس مقدماتی
دستور find
این دستور مکان مستقر یک فایل را در سیستمعامل لینوکس نمایش میدهد.
مث ً
ال اگر میخواهیم به دنبال فایلی بگردیم که اسم آن را کامل نمیدانیم اما میدانیم
این فایل در انتها با پسوند tar.gz.تمام شده ولی نمیدانیم کجای سیستم ذخیرهشده
است ،با استفاده از دستور findآن را جستجو میکنیم.
find / -name مث ً
ال مینویسیم ”“*.tar.gz
در این دستور ،مسیری را که میخواهم به دنبال فایل یا فایلهای موردنظرم بگردم،
وارد کردهام که در مثال باال عالمت “ ”/یعنی از ریشه اصلی به دنبال فایل موردنظر بگرد
و به دنبال تمام فایلهایی باش که نام آنها شامل عبارت “ ”tar.gzمیباشد.
در این حالت سیس��تمعامل از ریشه شروع به جستجوی فایل یا فایلهایی با ویژگی
موردنظر ما میگردد و در صورت پیدا کردن نام ،مسیر فایل را روی صفحهنمایش میدهد.
دستور sort
Sortبرای مرتبسازی محتوای یک فایل بهکار میرود و دقیقاً مثل حالتی که کاله
قرمزی میخواهد تیلههای موردنظر خود را در میان انبار تیلهها پیدا کند میتوانیم این
تیلهها را بر اساس اندازه یا رنگ مرتب کنیم که این عمل یک نوع مرتبسازی میباشد.
دس��تور sortدقیقاً عمل مرتبسازی را روی محتوای فایلها انجام میدهد .مث ً
ال وقتی
93 میگوی��م sort myfileدر این حالت فایل myfileبر اس��اس ح��روف الفبا از a-z
مرتبشده و روی صفحه نمایش داده میشود.
دستور cut
لینوکـس مقدماتی
این دستور برای قیچی کردن تکهای از محتوای یک فایل بهکار میرود و قابلیتهای
ال فرض کنید که از یک فایل دادهای ،خصوصاً در
زیادی را در اختیار ما قرار میدهد .مث ً
فایلهای مربوط به ذخیرهسازی پایگاههای اطالعاتی ،ما با انبوهی از اطالعات بهصورت
س��تون به ستون روبرو هس��تیم و حاال فرض کنید که ما ستون یا دسته خاصی از این
دادهها را نیاز داریم .در این زمان با استفاده از دستور cutمیتوانیم ستون یا ستونهای
موردنیاز را از فایل کنده و در جای دیگر ذخیره نماییم .در دس��تور cutدو گزینه مهم
داریم ،یکی جداکننده س��تونها که مش��خصاً میگوییم از چه عالمتی برای جداسازی
ستونها استفاده کردهایم و یکی شماره ستون یا ستونهایی که میخواهیم قیچی کنیم.
مث ً
ال فرض کنید فایل etc/passwd/در سیستمعامل را که محل ذخیرهسازی نام
و مشخصات کاربران سیستم میباشد ،میخواهیم به صورتی قیچی کنیم که فقط نام
کاربران از آن پاره شده و این نامها در فایل دیگری ذخیره گردد .بدین منظور بهصورت
زیر عمل میکنیم:
اوالً قسمتی از محتوای یک فایل etc/passwd/را در زیر نمایش میدهم تا دقیقاً
ببینم که چه عالمتی بین ستونها جداکننده است:
94
لینوکـس مقدماتی
در ش��کل باال نمایی از محتویات فایل etc/passwd/را میبینیم که هر س��تون با
عالمت “ ”:از ستون بعدی جداشده است .ستون اول نام کاربران میباشد .بنابراین اگر
میخواهیم ستون اول را از این فایل قیچی کرده و محتوا را در فایلی مث ً
ال بهنام users
ذخیره کنیم ،با دستور زیر این عمل انجام میشود:
”$ cut -d”: -f1 /etc/passwd > /tmp/usres
در فرمان باال میگوییم که از فایل etc/passwd/فیلد 1را که با – f1نشان دادهایم
ج��دا کند و خروجی آن را در فایلی بهن��ام tmp/usders/قرار دهد که این عمل را با
عالمت “>” انجام میدهیم .عالمت “<” به معنی این است که خروجی یک دستور را
به فایلی دیگر وارد یا ذخیره کن.
حاال در فایل etc/passwd/اگر من س��تونهای اول و سوم و چهارم را بخواهم چه
دستوری را اجرا میکنم؟
$ cut -d”:” -f1,3,4 /etc/passwd
در این حالت خروجی اجرای فرمان باال بهصورت زیر خواهد بود:
95
لینوکـس مقدماتی
دستور wc
این دستور مخفف کلمه word countمیباشد ،یعنی تعداد کلمات .با استفاده از
دستور wcمیتوانیم تعداد کلمات یا تعداد حروف یا تعداد خطوط یک فایل را بشماریم.
این دس��تور گزینههای مختلفی دارد .مث ً
ال اگر بگوی��م wc myfileدر این حالت
دستور ، wcهم تعداد حروف ،هم تعداد کلمات و هم تعداد خطوط فایل myfileرا به
ما نشان میدهد ،اما اگر فقط تعداد خطوط را نیاز داشته باشیم میتوانیم از گزینه – lبه
معنی Lineفقط تعداد خطوط فایل را در خروجی نمایش دهیم .بدین منظور از دستور
wc -l myfileاستفاده میکنیم تا تعداد خطوط یک فایل را بیابیم.
در جس��تجوی عب��ارات موردنظر در داخل فایلها یکس��ری عالئ��م داریم که برای
سیستمعامل معنیدار هستند که این عالئم عبارتاند از:
• ^ این عالمت به معنی ابتدای فایل میباشد .مث ً
ال وقتی میگوییم برو داخل فایل و
به دنبال تمام عباراتی باش که در ابتدای آن مث ً
ال حرف aقرار دارد و آنها را نشان بده
در این صورت با دستور grep ^a myfileاین عمل را انجام میدهیم.
• $این عالمت برای نمایش انتهای فایل است و زمانی که به دنبال متنی هستیم که 96
مث ً
ال در انتهای فایل یک حرف بهخصوصی دارد میتوانیم از این عالمت استفاده کنیم.
مث� ً
لا میتوانیم بگوییم برو داخل فایل و به دنبال تمام عباراتی باش که انتهای آنها با
txtتمام میشود و آنها را پیدا کن که با دستور grep $txt myfileمیتوانیم
لینوکـس مقدماتی
لینوکـس مقدماتی
#find / -size +50M -size -100M
-9به دنبال عبارت “ ”phpدر فایلهای مختلف میگردیم:
# grep php -r /
-10به دنبال فایلهایی با پسوند phpدر سیستم میگردیم:
”# find / -type f -name “*.php
98
دادههای ما
در سیستم عامل
در کجا ذخیره
میشوند؟
لینوکـس مقدماتی
در این بخش میخواهیم به این موضوع بپردازیم که دادههای ما در سیستمعامل لینوکس
در کجا نگهداری میشوند.
بدین منظور بهتر است طرحی از ساختار پوشههای سیستمعامل لینوکس را توضیح دهم.
مسیرetc /
در سیس��تمعامل لینوکس ،مس��یری با ن��ام etc/داریم که مح��ل ذخیره فایلهای
پیکربندی سیستمعامل میباشند.
در سیستمعامل لینوکس فایلهایی هستند که اطالعاتی در ارتباط با نام ماشین و یا
اطالعات شبکه را در خود نگهداری میکنند .این اطالعات برای سیستمعامل بسیار مهم
میباشند و هنگامیکه سیستم روشن میشود به این اطالعات نیازمند است .بیشتر این
اطالعات در مسیر etc/نگهداری میشوند.
لینوکـس مقدماتی
فایلهایی که در این مس��یر قرار میگیرند خیلی ش��بیه به فایلهای dll.در ویندوز
میباشند.
مسیر var/log/
در مس��یر var/کلیه فایلهایی که سایز آنها در طول حیات و روشن بودن سیستم
تغییر میکند ،نگهداری میشود .مانند الگ فایلهای سیستم.
ازجمل��ه این الگ فایلها در مس��یر /var/log/میباش��د که مح��ل نگهداری الگ
فایلهای سیستمعامل میباشد .مث ً
ال فایل مهم messagesدر مسیر var/log/در این
مسیر نگهداری میشود.
مسیر home/
محل نگهداری فایلهای مربوط به کاربران موجود در سیس��تمعامل که قادر به وارد
شدن به سیستم هستند ،میباشد.
مث ً
ال کاربر oracleکه اجازه ورود به سیس��تم را دارد ،دارای خانه شخصی home//
oracleمیباشد که میتواند فایلهای خود را در آنجا ذخیره و نگهداری کند.
بنابراین متوجه میشویم که دادههای ما در سطح سیستمعامل بر طبق نظمی خاص 102
و بر اساس موضوعی که آن داده در خود ذخیره میکند در مکانی خاص در سیستمعامل
نگهداری میشود.
لینوکـس مقدماتی
فرمان ps
نمایش processهای در حال اجرا ،با اجرای فرمان psبدون هیچ گزینهای لیستی
از پردازشهای کاربر موردنظر که الگین کرده است نمایش داده میشود .مانند شکل زیر:
103
حال اگر بخواهیم اطالعات جامعتری از پردازشهای در سطح سیستمعامل مشاهده
کنیم میتوانیم از دستور psبه همراه گزینههای مختلف استفاده کنیم .مث ً
ال ps -aux
کلیه پردازشهای روی سیستمعامل را نمایش میدهد.
لینوکـس مقدماتی
همانگونه که در شکل باال مشاهده میکنید خروجی دستور ps auxبسیار طوالنی
میباشد ولی اگر بخواهیم از این لیست مث ً
ال ببینیم آیا سرویس پست الکترونیکی ما مثل
postfixدر حال اجرا هس��ت یا خیر ،میتوانیم با استفاده از عمل Pipeدو دستور ps
و grepرا بهخوبی برای رسیدن بهمنظور خود استفاده نماییم .بدین منظور کافی است
این فرمان را اجرا نماییم:
$ ps aux | grep postfix
در این حالت در لیست پردازشهای سیستم ،فقط آنهایی نمایش داده میشوند که
عبارت postfixدر آنها یافت شود.
فرمان top
فرمان��ی که برای مانیتورین��گ processها بهکار میرود اطالع��ات جامعی از نام 104
پردازشها و میزان فضای اشغالی و بر اساس اولویت میزان حافظه و یا میزان پردازندهای
که برای آن پردازش در سیستم مصرف میگردد ،این لیست نمایش داده میشود.
دستور topخروجیای شبیه به شکل زیر دارد:
لینوکـس مقدماتی
دستور free
این دستور میزان حافظه روی سیستم و میزان فضای آزاد را نشان میدهد .با استفاده
از گزینه –mمیتوانیم میزان فضای آزاد را بر اساس مگابایت مشاهده کنیم .مانند شکل
زیر:
105
انواع کاربران و مفاهیمی
از امنیت اولیه در سطح
سیستم عامل لینوکس
در ارتباط با کاربران
لینوکـس مقدماتی
در این فصل قصد دارم توضیحاتی در مورد انواع کاربرانی که در سطح سیستمعامل
لینوکس وجود دارند صحبت کنم و بعد در مورد حق دسترسی هر گروه از این کاربران
صحبت خواهم کرد.
بهطورکلی در سطح سیستمعامل سه نوع کاربر وجود دارد:
-1کاربران استاندارد standard
-2کاربر root
-3کاربر سیستمی system
-2کاربر root
این کاربر ،کاربر ارشد سیستمعامل یا مدیر ارشد سیستمعامل میباشد که اجازه هر 109
کاری را در سطح سیستمعامل دارا میباشد.
-3کاربر سیستمی
لینوکـس مقدماتی
این کاربران برای اجرای یک برنامه خاص در س��طح سیستمعامل تعریف میشوند.
بهعنوانمثال فرض کنید که قرار است در ماشین لینوکس شما ،یک سرویس وب اجرا
گردد .بنابراین سیستمعامل نیاز به کاربری برای اجرای این سرویس دارد که مث ً
ال با نام
apacheاین کاربر را جهت اجرای سرویس وب تخصیص میدهد .درواقع این کاربر نیاز
به ورود به سیس��تم به صورتی که بتواند از دستورات خط فرمان لینوکس استفاده کند
ندارد ،بلکه فقط به این منظور ساختهشده است تا سرویس وب را اجرا نماید.
یا مث ً
ال اگر قرار است پایگاه دادهای mysqlرا روی سیستم خود اجرا نمایید نیاز به
کاربری با نام mysqlدارید تا این سرویس را اجرا نماید.
پس کاربران سیستمی ،کاربرانی هستند که در سطح سیستمعامل لینوکس قرار است
سرویسی را اجرا نمایند.
مث ً
ال در شکل باال با اجرای فرمان idروی صفحه اطالعاتی از کاربری با نام oracleو
عدد کاربری او در سطح سیستمعامل یعنی عدد 500و نام گروهی که این کاربر عضو آن 110
است که گروه oracleبا عدد 501و اطالعات دیگر در مورد این کاربر را به ما میدهد.
دستور w
لینوکـس مقدماتی
این دستور میگوید چه دستورات در حال اجرا توسط شخصی که الگین کرده است
در سیستم وجود دارد.
دستور who
دستور whoمیگوید در حال حاضر چه کسانی وارد سیستم شدهاند و از طریق چه
ترمینالی به سیستم متصل هستند.
دستور sudo
با اس��تفاده از دس��تور sudoمیتوانیم اجازههای کاربر rootسیس��تم را داش��ته و
دستوراتی را با اجازه کاربر rootاجرا نماییم.
لینوکـس مقدماتی
و مسیر خانه شخصی این کاربر یا home directoryاین کاربر چه هست ،میباشد.
همچنین ستون دوم این فایل شامل کلمه عبور کاربران میباشد که به لحاظ امنیت
با حرف “ ”xنشان دادهشده است تا کسی نتواند به کلمه عبور کاربران پی ببرد.
نمونه فایلetc/passwd/
-2فایل /etc/shadow
این فایل شامل اطالعاتی از کاربران میباشد که ستون اول آن دقیقاً مثل ستون اول
فایل etc/passwd/شامل نام کاربران سیستم و ستون دوم آن رمز عبور کاربران است که
بهصورت رمزگذاری شده در این فایل قرار دارد ،تا کسی پی به ماهیت آن نبرد.
ازجمله اطالعات دیگری که در این فایل ذخیرهش��ده است در مورد طول عمر کلمه
عبور ،اینکه تا چه زمانی فرصت دارند کلمه عبور خود را تغییر دهند .اینکه چه کاربری
قفل یا Lockشده است و اجازه ورود ندارد.
فایل /etc/group
این فایل اطالعاتی در مورد گروههای موجود در سیس��تم را ذخیره میکند .مث ً
ال با
اجرای فرمان groupsمتوجه میشویم که کاربر oracleبه چه گروهی متعلق است.
ب��ا اجرای فرمان less /etc/groupمیتوانیم محتوای این فایل را صفحه به صفحه
مشاهده کنیم
113
لینوکـس مقدماتی
نکتـه :
برای استفاده از دستور sudoبرای کاربری که rootنیست باید حتم ًا این کاربر
جزء کاربرانی که حق اس�تفاده از دس�تور sudoرا دارند تعریفش�ده باشد وگرنه
سیسم عامل اجازه استفاده از این قدرت به هر کاربری نمیدهد .این عمل عموم ًا در
فایل etc/sudoers/انجام میشود که فایلی با پیکربندی مخصوص خود میباشد که
جهت تعریف دستهای از دستورات و کاربرانی میباشد که قرار است قدرت کاربری
دیگر را به ارث ببرند.
ازآنجاک�ه این بخش توضیحات مقدماتی لینوکس اس�ت بنابراین کاربران را با
مفاهیم خیلی تخصصی نمیخواهم سردرگم نمایم.
در دورههای LPIC-1در مورد این فایل و نحوه استفاده از آن شرح داده میشود. 114
ایجاد کاربران و
گروههای کاربری
لینوکـس مقدماتی
- Groupadd
- Id
- Last
- Passwd
دستور useradd
این دس��تور که همگی با حروف کوچک نوشته میشود برای ایجاد یک کاربر جدید
در سیستم مورد استفاد قرار میگیرد .برای ایجاد کاربر جدید حتماً باید rootبوده و یا
با استفاده از sudoاجازه این کار به کاربری دیگر داده شده باشد.
برای ایجاد نام کاربر جدید دستور زیر را اجرا میکنیم:
#useradd oracle
مث ً
ال در دس��تور باال کاربری با نام oracleدر سیس��تم ایجاد کردهام .چنانچه این
کاربر قب ً
ال وجود داشته باشد که سیستمعامل این خطا را روی صفحه ظاهر میکند و اگر
وجود نداشته باش این کاربر جدید در سیستم با یک عدد منحصربهفرد ایجاد میشود.
در هر سیس��تمعاملی از لینوکس ،عددی خاص برای شروع ایجاد کاربران استاندارد
سیستم در نظر گرفته میشود .مث ًال در بعضی از نسخههای لینوکس عدد 500به بعد 117
برای ایجاد کاربران اس��تاندارد در نظر گرفته میشود .بنابراین چنانچه در هنگام ایجاد
کاربر جدید عددی را به سیستمعامل معرفی نکنیم این سیستمعامل است که این عدد
را بر اساس پیشفرضهای خود در نظر میگیرد و مث ً
ال از 500به بعد اگر عددی وجود
لینوکـس مقدماتی
داشته باشد که هنوز به کاربری تخصیص داده نشده به این کاربر جدید تخصیص داده
میشود.
همچنی��ن در هنگام ایجاد کاربر جدید بافرمان useraddسیس��تمعامل یک گروه
اختصاص��ی برای ای��ن کاربر با نام کاربری او در نظر میگی��رد و یک عدد واحد را برای
این گروه اختصاصی به این کاربر تخصیص میدهد .مث ً
ال در دستور باال با اجرای فرمان
useradd oracleاگر این کاربر ،اولین کاربر اس��تاندارد سیس��تم باشد uidاین کاربر
ال با همان 500میباشد .البته اگر عدد 500قب ً
ال برای معادل 500و gidاین کاربر مث ً
هیچ گروه دیگری تخصیص نیافته باشد.
پس در ابتدای اجرای فرمان useradd oracleاین اتفاقات رخ میدهد:
-1کاربری با نام oracleدر سطح سیستمعامل ایجاد میشود.
-2یک عدد واحد بهنام uidبر اساس پیشفرض سیستمعامل مث ً
ال از عدد 500به
باال به این کاربر تخصیص داده میشود.
-3یک گروه مخصوص این کاربر با نام oracleدر سطح سیستم بهوجود میآید.
-4یک gidیا عدد واحد بر اس��اس پیشفرضهای سیس��تمعامل برای این کاربر
تخصیص داده میشود.
-5پوش��های با ن��ام این کاربر (در اینجا )oracleدر مس��یر home/ایجادش��ده و
مجموعهای از حق دسترسیها به این کاربر در این مسیر داده میشود تا بتواند فایلهای
خود را در این مسیر ذخیره و مدیریت نماید.
-6یک shellیا مترجمی که بتواند دستورات کاربر را برای سیستمعامل ترجمه کند
در اختیار کاربر قرار داده میشود .بهطور پیشفرض این shellاز نوع bashمیباشد که 118
نوعی مفسر یا ترجمه کننده دستورات برای سیستمعامل لینوکس است.
در این میان چنانچه هنگام ایجاد کاربری جدید بخواهیم این کاربر حتماً از یک عدد
مخصوص برای uidو gidخود استفاده نماید الزم است که این اعداد را در زمان اجرای
لینوکـس مقدماتی
دستور groupadd
این دس��تور برای ایجاد یک گروه جدید بهکار میرود که همانند دستور useradd
میتوانیم از پیشفرض سیستمعامل استفاده کرده و بگذاریم سیستمعامل عدد موردنظر
119 را به گروه بدهد یا اینکه در ابتدای ایجاد عدد را خودمان وارد نماییم.
مث ً
ال:
groupadd -g 1001 oinstallیا groupadd oinstall
لینوکـس مقدماتی
-3استفاده از دستور Id
دستور idبه ما میگوید که این کاربر متعلق به چه گروهی یا گروههایی میباشد و
uid, gidکاربر را نیز نمایش میدهد مث ً
ال:
# id oracle
به ما نش��ان میدهد که کاربر oracleدر چه گروه یا گروههایی عضو است و مقدار
uid, gidاین کاربر در سیستم چه میباشد.
دستور last
این دس��تور میگوید که آخرین بار در چه س��اعت و تاریخی چه کسانی به سیستم
واردشدهاند.
اجرای آن بهصورت زیر میباشد:
-در راستای دستوراتی برای ایجاد کاربر جدید یا گروه کاربری جدید ،دستوراتی برای
حذف و تغییر کاربر و گروه کاربری نیز داریم که عبارتاند از:
Usedelحذف کاربر 120
Groupedحذف گروه
Usermodتغییر کاربر
Goupmodتغییر گروه
لینوکـس مقدماتی
-
نکتـه:
کلیه این دستورات با حروف کوچک در سیستمعامل لینوکس استفاده میشود.
دستور userdelبرای حذف یک کاربر بهکار میرود زمانی که این دستور را با گزینه
“ ”r-بهکار ببریم در سطح سیستمعامل حذف میکنیم چه اتفاقاتی میافتد؟
-1نام کاربری او از فایل etc/passwd/حذف میگردد.
-2نام کاربر از گروهی که متعلق به آن است حذف میشود.
-3مسیر home directoryکاربر حذف میگردد بنابراین کلیه دادههای ذخیرهشده
در این مسیر پاک خواهند شد.
-4کاربر قادر به ورود به سیستم نخواهد بود.
-5هیچ سرویسی با نام این کاربر قادر به اجرا نخواهد بود.
بنابراین زمان حذف کاربر بهتر است به موارد باال توجه داشته باشیم و شاید الزم باشد
نسخه پشتیبانی از مسیر home directoryاین کاربر در جایی خاص داشته باشیم و
بعد اقدام به حذف او کنیم.
دس��تور usermodبرای انجام پارهای از تغیی��رات در نام یا shellیا uidیا gidیا
home directoryکاربر بهکار میرود.
مث� ً
لا کاربری با نام oracleداریم و میخواهیم عالوه بر اینکه عضو گروه oinstall
است ،عضو گروهی بهنام gridنیز باشد با استفاده از دستور:
121 # groupmod -a -G grid oracle
میتوانیم تغییری در کاربر oracleدهیم که عضو گروه gridنیز باشد.
دستور passwd
لینوکـس مقدماتی
این دستور برای تغییر کلمه رمز کاربری بهکار میرود و هر کاربری حق دارد کلمه
رمز خود را تغییر دهد.
البته در سطح کل سیستم این کاربر rootاست که قادر است کلمه رمز کلیه کاربران
را تغییر دهد.
بهعنوانمثال ،اگر من بهعنوان کاربر oracleمیخواهم رمز خود را تغییر دهم کافی
است در سطح shellدستور Passwdرا وارد کنم .در این صورت سیستمعامل در ابتدا
کلمه رمزی را که در حال حاضر در سیستم استفاده میکنم ،میپرسد و اگر این کلمه را
درست وارد کرده باشیم اجازه میدهد کلمه رمز جدید را برای خود انتخاب نماییم و دو
بار این کلمه را سؤال میکند و سپس تغییرات در فایل etc/shadow/اعمال میگردد.
122
نحوه اجازه دسترسی
به کاربران
لینوکـس مقدماتی
در این فصل قصد دارم مختصری در مورد اجازههای دسترسی فایلها و پوشههایی که
در سطح سیستمعامل میسازیم و همچنین مدیریت فایلها و دایرکتوریها در لینوکس
بحث کنم.
در ابتدا فرض کنید با کاربر oracleوارد سیستم شدهایم و دستور ls -lرا که لیستی
کامل از کلیه فایلها و پوشههایمان ،نمایش میدهد ،نشان میدهیم:
همانگونه که در ش��کل باال مشاهده میکنید لیست فایلها و پوشههای مربوط به
کاربر oracleلیس��ت شده اس��ت .اطالعاتی که در صفحه مشاهده میکنید بهقرار زیر
است:
• س��تون اول که بهصورت drwxr-xr-xو یا —–rw-rwrنمایش دادهشده است
چه چیزی را نشان میدهد؟
• س��تونی که drwxr-xr-xرا دارا میباش��د میگوید آنچه مشاهده میکنید یک 125
پوشه یا دایرکتوری است و حرف ” ”dمخفف directoryمیباشد .همچنین این عبارت
میگوی��د که این پوش��ه دارای مجوز readبهطور اختص��ار “ ”rو writeیا خواندن که
بهطور اختصار با “ ”wو همچنین مجوز اجرای یا executeکه بهطور اختصار با حرف
لینوکـس مقدماتی
“ ”xنمایش دادهشده است برای خود کاربر oracleمیباشد.
پس rwxدر اولین س��تون اجازههای دسترس��ی کاربر را روی این پوش��ه مشخص
میکند که میگوید کاربر oracleاجازه دارد وارد این پوش��ه ش��ود و یا این پوش��ه و
محتویاتش را حذف کند یا تغییر دهد و یا لیستی از فایلها و پوشههای داخل این مسیر
بگیرد.
اما r-xستون بعدی میگوید که گروهی که این کاربر به آن متعلق است قادر است
محتویات این پوشه را بخواند یا فرمان lsرا روی این پوشه اعمال کند و همچنین قادر
اس��ت روی پوش��ه قدرت اجرا داش��ته باش��د .قدرت اجرا یا executeدر سطح پوشه،
یعنی گروهی که کاربر به آن متعلق است قادر است با فرمان cdوارد این پوشه شود و
لیست فایلها را مشاهده نماید؛ اما ازآنجاکه بهجای حرف “ ”wحرف “ ”-در این قسمت
گذاشتهشده یعنی گروه این کاربر قادر به تغییر این فایلها در این پوشه نمیباشد.
اما r-xدر قسمت آخر این عبارت میگوید افرادی بهجز کاربر و گروهی که کاربر به
آن متعلق است یعنی باقی کاربران سیستم چه اجازهها و حقوق دسترسی به این پوشه
را دارند .در اینجا میگوید دیگران در سطح سیستم اجازه خواندن یا readو اجازه اجرا
یا executeرا روی این پوشه دارند؛ یعنی در سطح سیستمعامل باقی کاربران میتوانند
داخل این پوشه با دستور cdروند و یا دستور lsبرای لیست کردن فایلهای داخل پوشه
را اجرا نمایند اما قادر به تغییر این فایلها یا نام پوشه یا محتویات آن نیستند.
تا اینجای کار با مبانی امنیت در لینوکس در سطح فایل و پوشه کمی آشنایی پیدا
کردیم.
اما س��تون سوم از دس��تور “ ”ls -lمیگوید که مالک این فایل و پوشهها چه کسی 126
است و ستون چهارم میگوید گروهی که این کاربر به آن متعلق است چه گروهی است و
ستون پنجم سایز فایل یا پوشه را ذکر میکند .ستونهای 6و 7تاریخ و زمان ایجاد فایل
یا پوشه را نمایش میدهند و ستون آخر نام فایل یا پوشه را نشان میدهد.
لینوکـس مقدماتی
پس متوجه ش��دیم که با یک دستور س��اده “ ”ls –lدر یک مسیر خاص میتوانیم
اطالعات امنیتی اولیه مربوط به فایلها و پوشههای موجود در آن مسیر را پیدا کنیم.
در این قس��مت میخواهم در مورد اجازههای دسترس��ی که در باال صحبت کردیم
بیشتر توضیح دهم.
گفتیم در لینوکس چه برای کاربر چه برای گروهی که کاربر در آن عضو است و چه
برای باقی کاربران یکسری اجازههای دسترسی در نظر گرفته میشود .شرح این موضوع
به این صورت است که سه دسته اجازه در سطح سیستمعامل داریم
-1کاربر که میتواند اجازه خواندن؛ نوشتن و یا اجرا را در سطح فایل یا پوشه داشته
باش��د .این اجازهها را بهص��ورت read,write,executeو با حروف اختصاری “”rwx
نمایش میدهیم؛ اما ازآنجاکه سیس��تمعامل دارای زبان ماش��ین است و ماشین ،عدد
میفهمد ،لذا این حروف به اعداد تبدیل میشوند و این اعداد غالباً در مبنای 2میباشند.
اما چگونه؟
در سیستمعامل اجازههای دسترسی از راست به چپ به این صورت لحاظ میشود که
اولین ستون سمت راست با عدد 2به توان صفر در نظر گرفته میشود1= 2^0 .
ستون دوم میشود 2=2^1
ستون سوم 4=2^2
این محاسبه برای اجازههای دسترسی در سطح گروه و دیگران نیز به همین صورت
میباشد ،یعنی 1و 2و .4
بنابراین اگر فایل یا پوشهای دارای همه مجوزهای خواندن ،نوشتن و اجرا باشد یعنی
مجموع اعداد 4و 2و 1را داراس��ت که مجموع این ارقام یعنی 7 = 1+2+4میباش��د؛ 127
بنابراین اگر فایل یا پوش��های مجوز عددی 7را دارا باشد یعنی هر کاری روی این فایل
میشود انجام دهد یا به عبارتی کلیه مجوزها را دارا میباشد.
حاال اگر فایلی اجازه خواندن و اجرا داشته باشد اما اجازه نوشتن نداشته باشد مجوز
لینوکـس مقدماتی
عددی آن چگونه میشود؟
خب فایل اجازه خواندن دارد و گفتیم از سمت چپ آخرین مجوز مربوط به خواندن
است که در جایگاه 4=2^2قرار دارد .پس فایلی که مجوز خواندن دارد از لحاظ عددی
مقدار 4را خواهد داشت.
همچنین فایل مجوز نوشتن ندارد .مجوز نوشتن دومین مجوز و یا در مکان 2=2^1
است؛ اما وقتی فایل مجوز نوشتن ندارد یعنی این مجوز صفر است .پس مقدار 0را برای
نوشتن در نظر میگیریم.
و فایل اجازه اجرا دارد که این اجازه از سمت راست اولین مکان یا 1=2^0را شامل
میشود.
بنابراین فایل ما در س��طح کاربر دارای مجوز 4برای خواندن و 0برای نوش��تن و 1
برای اجرا میباشد که مجموع این ارقام یعنی 5=1+0+4مقدار عددی مجوز این فایل در
سطح کاربر را نمایش میدهد.
اگر این فایل در سطح گروه هم همین مجوزها را داشته باشد بنابراین در سطح گروه
هم عدد 5را دارا میباشد.
حاال اگر این فایل برای باقی کاربران فقط مجوز خواندن داش��ته باش��د مقدار آنچه
میشود؟
مج��وز خواندن یا readیعنی 4=2^2و چون مجوزهای دیگر را دارا نیس��ت یعنی
مقدار 0را برای نوشتن و اجرا در نظر میگیریم .بنابراین مجموع مجوزهای آن میشود
.4=0+0+4
در اینجا میتوانیم بگوییم که این فایل دارای مجوز 7برای کاربر و 5برای گروه و 4 128
برای دیگران میباشد .یعنی عدد 754که بهصورت متنی عبارت “— “rwxr-xrرا برای
فایل مشاهده خواهیم کرد.
شکل زیر گویای این شرح میباشد:
لینوکـس مقدماتی
-1حالت مطلق
در حالت مطلق ما کاری به اینکه در حال حاضر مجوزهای فایل یا پوشه چه هستند
نداری��م و بهیکب��اره مجوز موردنظر را اعمال میکنیم .یعنی اگ��ر قب ً
ال اجازه خواندن و
نوشتن و اجرا را در سطح کاربر یا گروه یا دیگران داشته یا نداشته برای ما مهم نیست
ما میخواهیم از اآلن به بعد مث ً
ال مجوز فقط خواندن و نوشتن برای کاربر و فقط خواندن
129 برای گروه و فقط اجرا برای دیگران داشته باشد.
-2حالت نسبی
در این حالت ما مجوزهایی را به فایل یا پوشه نسبت به مجوزهایی فعلی آن میدهیم؛
یعنی میگوییم اگر فایل مجوز خواندن و اجرا دارد ،داشته باشد ،حاال مجوز نوشتن را به
لینوکـس مقدماتی
آن اضافه کن .یا به مجوز گروه و کاربران دیگر دست نزن و فقط مجوز کاربر را تغییر بده.
برای تغییر مجوز روی فایل و پوشهها از دستور chmodاستفاده میکنیم.
بدینصورت که میتوانیم از حالت مطلق بهصورت “ ”755 chmodروی یک فایل
اس��تفاده کنیم که در این حالت میگویم کلیه مجوزهای خواندن و نوشتن و اجرا را به
کاربر یا مالک فایل بده و فقط مجوز خواندن و اجرا را به گروه و دیگران اعطا کن.
میتوانیم با استفاده از دستور “ ”chmod g-wبگوییم که مجوز نوشتن را از گروه
بگیر .در این حالت کاری به باقی مجوزها نداریم .مث ً
ال کاری نداریم که مجوز روی افراد
غیر از گروه چه هست و فقط میگویم مجوز نوشتن را از گروه بگیر یعنی بهصورت نسبی
تغییر اجازه دسترسی میدهیم.
در شکل زیر مثال دیگری آورده شده است:
130
مث ً
ال وقتی میگویم “ ”chmod go-wیعنی مجوز نوشتن یا تغییر دادن فایل را از
گروه و دیگران سلب کردهایم اما به باقی مجوزها کاری نداریم.
یا وقتی میگوییم “ ”chmod ugo-wیعنی از کاربر و گروه و دیگران مجوز نوشتن
لینوکـس مقدماتی
را بگیر.
عالمت “ ”-یعنی گرفتن یک اجازه
و عالمت “ ”+یعنی دادن یک اجازه
مث ً
ال دس��تور “ ”chmod go+xیعنی به گروه و افراد غیر از گروه اجازه اجرای فایل
را بده.
دستور chown
این دس��تور برای تغییر مالک فایل بهکار میرود .البته چون اجازههای دسترس��ی و
امنی��ت فایلها با این روش به خطر میافتد لذا تنه��ا کاربر rootو یا کاربرانی که قب ً
ال
باقدرت rootدر سیستم تعریفشده باشند قادر به اجرای این دستور میباشند.
با این دس��تور میتوانی��م مالک یک فایل را تغییر دهیم .مث� ً
لا chown root /
home/oracleیعنی میگوییم که مالک مسیر home/oracle/کاربر rootباشد .اگر
بخواهیم عمل تغییر مالک را بهصورت تودرتو در داخل یک مسیر و تمام زیر مسیرهای
آن و روی تمام فایلهای داخل مسیرهای زیرین آن انجام دهیم از گزینه “ ”R-استفاده
میکنیم.
مث ً
ال اگر بخواهیم در مس��یر u01/مالک کل مسیر و تمام زیر مسیر و فایلهای آن
بهنام کاربر oracleشود از دستور
”“chown -R oracle /u01
استفاده میکنیم
131
دستور chgrp
این دستور برای تغییر گروه یک مسیر و فایلهای یک مسیر میباشد و مانند chwon
باید اجازه rootرا دارا باشد.
لینوکـس مقدماتی
تغییر دهیم با اجرای دستور 01 oinstallرا به /uمث ً
ال اگر میخواهیم گروه مس��یر
”“chgrp -R oinstall /u01
این عمل را انجام میدهیم.
نکته :در دستور chownمیتوانیم همزمان مالک و گروه را تغییر بدهیم.
شکل استفاده از دستور به این صورت است “ ”chown oracle:oinstall /u01
در اینجا فقط پوشه بیرونی یعنی u01/دارای مالک oracleو گروه oinstallمیشود و
اگر بخواهیم این عمل را روی کل پوشه و زیرپوشهها و فایلهای آن انجام دهیم از گزینه
“ ”R-بهص��ورت “ ”chown -R oracle:oinstall /u01اس��تفاده میکنی��م.
عالمت “ ”:برای جداسازی مالک از گروه میباشد.
132
لیــنوکس
لیــنوکس مقدماتی
مقدماتی ...در طی تجارب تدریس��م متوجه شدهام که بسیاری از
کاربرانی که خیلی با سیستم عامل لینوکس آشنایی ندارند
هنگام گذراندن دوره LPIC-1دچار سختی میشوند ،لذا
بهنظرم رسید که دوره لینوکس مقدماتی را به چاپ برسانم
تا برای افرادی که هیچ چیز زیادی از این سیستم عامل منیدانند ،دنبال کردن
و یادگیری مطالب آن راحتتر بوده و درواقع این دوره مثل پلی است که راه
رسیدن به دوره LPIC-1را هموارتر خواهد ساخت .بنابراین اگر هیچ چیزی
از لینوکس منیدانید نگران نباشید و برای یادگیری آن با من همراه شوید.
صوفیاعلیخانی
شابک 978-600-8680-01-7
صوفیاعلیخانی