0% found this document useful (0 votes)
38 views134 pages

Linux-Essentialss Dec

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views134 pages

Linux-Essentialss Dec

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 134

‫لیــنوکس‬

‫لیــنوکس مقدماتی‬
‫مقدماتی‬ ‫‪ ...‬در طی تجارب تدریس��م متوجه شده‌ام که بسیاری از‬
‫کاربرانی که خیلی با سیستم عامل لینوکس آشنایی ندارند‬
‫هنگام گذراندن دوره ‪ 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 :‬‬

‫نشانی مرکز پخش‪ :‬تهران‪ ،‬میدان انقالب‪ ،‬خیابان جاملزاده جنوبی‬


‫کوچه رشتچی‪ ،‬پالک ‪ ،۱۵‬واحد ‪۵‬‬
‫تلفن‪۶۶۹۱۲۰44 -۶۶۹۱۲۰45 ،۰۹۱۲۲۰۲۷۴۲۵ :‬‬
‫نشانی پست الکرتونیک‪[email protected] :‬‬
‫نشانی اینرتنتی‪www.taalibook.com :‬‬
Course Title Linux Essentials
Date 10/24/2016
Location Tehran/Iran
Instructor Name Sophia Alikhani
Instructor Email [email protected]
[email protected]

https://www.linuxmahz.com

‫بازخورد شام نسبت به مطالب ارائه شده‬


.‫باعث ارائه بهرت و بیشرت مطالب در وب‌سایت خواهد شد‬
.‫پس منتظر ارائه نظرات خوب شام عزیزان هستم‬

‫با سپاس‬
‫صوفیا علیخانی‬
‫مقدمه ‪9 /‬‬
‫انقالب لینوکس‪11 /‬‬
‫آشنایی با برنامه‌های کاربردی متن آزاد ‪19 /‬‬
‫مهارت ‪ ICT‬و کار با لینوکس‪25 /‬‬
‫دستورات اولیه لینوکس‪35 /‬‬
‫‪49 / Help linux‬‬
‫مدیریت فایل‌ها و دایرکتوری‌‌ها در لینوکس‪59 /‬‬
‫ایجاد حذف و جابه‌جایی فایل‌ها در لینوکس‪65 /‬‬
‫نحوه پشتیبان‌گیری از داده‌ها در لینوکس‪75 /‬‬
‫نحوه جستجوی متن در فایل‌ها‪87 /‬‬
‫داده‌های ما کجا ذخیره می‌شوند؟‪99 /‬‬
‫انواع کاربران سیستم عامل لینوکس و مفاهیمی از‬

‫امنیت اولیه در ارتباط با کاربران‪107 /‬‬


‫ایجاد کاربران و گروه‌های کاربری‪115 /‬‬
‫نحوه اجازه دسترسی به کاربران‪123 /‬‬
‫لینوکـس مقدماتی‬

‫مقدمه‬
‫تمام افرادی که می‌خواهند با سیستم‌عامل لینوکس آشنا شوند دوره‌هایی را به‌صورت‬
‫بین‌المللی طی می‌کنند که یکی از این دوره‌ها با نام دوره ‪ LPIC-1‬می‌باش��د‪ .‬در طی‬
‫تجارب تدریسم متوجه شده‌ام که بسیاری از کاربرانی که خیلی با سیستم‌عامل لینوکس‬
‫آشنایی ندارند هنگام گذراندن دوره ‪ LPIC-1‬دچار سختی می‌شوند‪ .‬لذا به نظرم رسید‬
‫که دوره لینوکس مقدماتی را به چاپ برسانم تا برای افرادی که ‌چیزی از این سیستم‌عامل‬
‫نمی‌دانند‪ ،‬دنبال کردن و یادگیری مطالب آن راحت‌تر بوده و درواقع این دوره مثل پلی‬
‫باشد که راه رسیدن به دوره ‪ LPIC-1‬را هموارتر سازد‪.‬‬
‫بنابراین اگر هیچ‌چیزی از لینوکس نمی‌دانید نگران نباشید و برای یادگیری آن با من‬
‫همراه شوید‪.‬‬

‫کلیدهایموفقیت‪:‬‬
‫تنها راه موفقیت و یادگیری لینوکس‪ ،‬تمرین مداوم می‌باشد‪.‬‬

‫‪9‬‬
‫انقالب لینوکس‬
‫و شناسایی‬
‫یعامل‬
‫سیستم‌ها ‌‬
‫مطرح‬
‫لینوکـس مقدماتی‬

‫آنچه در این بخش می‌خواهم عنوان کنم این است که اص ً‬


‫ال لینوکس چیست و مفهوم‬
‫‪ open source‬که به فارسی به آن متن‌باز می‌گوییم یعنی چی؟‬
‫ابتدا به تعریف فلسفه ‪ open source‬می‌پردازم‪.‬‬
‫اما مفهوم آزادی در این سیستم‌ها چیست؟‬
‫مفهوم از آزادی را می‌توان به اشکال زیر تعریف نمود‪:‬‬
‫‪ -۱‬آزادی در داشتن کل متن برنامه نوشته‌شده‪.‬‬
‫‪ -۲‬آزادی در تعداد کپی‌هایی که می‌توان از برنامه داشت‪.‬‬
‫‪ -۳‬آزادی در داش��تن متن برنامه و تغییر در آن و اجرای آن به ش��کل دلخواه و در‬
‫اختیار قرار دادن این نسخه جدید به دیگران‪.‬‬
‫‪ -۴‬آزادی در قرار دادن متن برنامه برای دیگران‪ ،‬اما گرفتن پول برای پشتیبانی و یا‬
‫اعمال تغییرات در آن‪.‬‬
‫در حالت‌های باال مشاهده می‌کنیم که تعاریف مختلف و بنابراین مفاهیم مختلفی از‬
‫دامنه‌های تعریف‌شده برای مفهوم آزادی در برنامه‌ها داریم‪.‬‬
‫گاهی اوقات آزادی در متن برنامه به معنی پول گرفتن و در اختیار قرار دادن کل آن‬
‫به خریدار است و گاهی بدون گرفتن پول می‌باشد‪ ،‬مانند نسخه ‪ RedHat‬و ‪CentOS‬‬
‫برای روشن شدن مطلب یک مثال می‌زنم‪.‬‬
‫مث ً‬
‫ال شما به یک شیرینی فروشی می‌روید و شیرینی فروشی می‌گوید شما آزادید هر‬
‫‪13‬‬ ‫مقدار باقلوا می‌خواهید همین‌جا میل کنید‪.‬‬
‫این‌یک مفهوم از آزادی است و شما پولی بابت این مقدار پرداخت نمی‌کنید‪.‬‬
‫حاال فرض کنید به شیرینی فروشی می‌روید و شیرینی فروشی می‌گوید من دستور‬
‫پخت این باقلوا را بدون گرفتن هزینه به شما می‌دهم‪.‬‬

‫لینوکـس مقدماتی‬
‫در این حالت ش��ما می‌توانید این دس��تور پخت را گرفته و بر اس��اس ذائقه خود آن‬
‫را تغییر داده کم ش��یرین یا ش��یرین‌تر کرده یا گردو اضافه کنید و یا هر س��لیقه‌ای که‬
‫دارید روی آن پیاده کرده و محصول جدید خود را به دیگران‪ ،‬یا بفروش��ید یا آزادانه در‬
‫اختیارشان قرار دهید‪.‬‬
‫این‌ها مثال‌هایی از آزادی است‪.‬‬
‫در سیستم‌عامل و برنامه‌هایی ازاین‌دست دقیقاً این مفهوم به‌کار می‌رود‪ .‬سیستم‌های‬
‫متن بازی داریم که در ازای گرفتن پول‪ ،‬کل دستور پخت و ساختار سیستم‌عامل یا برنامه‬
‫خاص در اختیارتان قرار می‌گیرد و یا بدون دریافت پول این نسخه به شما داده می‌شود‪.‬‬
‫در حالت اول ش��ما پولی پرداخت می‌کنید و دستور پخت را می‌گیرد بعد به سلیقه‬
‫خود آن را تغییر می‌دهید‪.‬‬
‫در حالت دوم شما بدون پرداخت پول این دستورالعمل را تهیه کرده و تغییر می‌دهید‪.‬‬
‫در سیس��تم‌عامل لینوکس و برنامه‌های تحت آن دقیق��اً این مفاهیم آزادی مصداق‬
‫پیدا می‌کند یعنی مواردی از برنامه‌ها هستند که در ازاي پول نسخه اصلی آن و یا نحوه‬
‫ساخت برنامه‌ها‪ ،‬با تمام سورس برنامه در اختیارتان قرار می‌گیرد و گاهی بدون دریافت‬
‫پول و کام ً‬
‫ال آزاد تمام مراحل ساخت آن در اختیار شما قرار می‌گیرد‪.‬‬
‫هردوی این موارد نشانه آزادی هستند و هرکدام مزایا و معایب خود را دارا می‌باشند‪.‬‬
‫مث ً‬
‫ال کمپانی ‪ RedHat‬کلیه س��ورس برنامه‌ها و س��اخت سیس��تم‌عامل را در ازای‬
‫دریافت پول به شما می‌فروشد و شما قادرید آن سورس را بر اساس نیاز خود تغییر داده‬
‫و نسخه جدیدی ارائه دهید و بر اساس میل خود این نسخه را بفروشید یا آزادانه و بدون‬
‫دریافت پول در اختیار دیگران قرار دهید‪.‬‬ ‫‪14‬‬
‫یا مث ً‬
‫ال نس��خه ‪ CentOS‬همان س��ورس نس��خه ‪ RedHat‬می‌باش��د ک��ه ازآنجا‬
‫خریداری‌شده ولی بعدا ً از طریق این کمپانی به شکل کام ً‬
‫ال آزاد در اختیار دیگران قرار‬
‫می‌گیرد؛ یعنی این کمپانی برای در اختیار قرار دادن نس��خه خود هیچ پولی از ش��ما‬
‫لینوکـس مقدماتی‬

‫دریافت نمی‌کند و کام ً‬


‫ال آزادانه آن را در اختیار دیگران قرار می‌دهد‪.‬‬
‫به‌عنوان‌مثال به برنامه مقابل توجه کنید که کد آن را نوشته و اجرا می‌کنم‪:‬‬

‫‪#!/bin/bash‬‬
‫"?‪echo "what is your favorite color‬‬
‫‪echo‬‬
‫‪read COLOR‬‬
‫"?‪echo "what is your favorite number‬‬
‫‪echo‬‬
‫‪read NUMBER‬‬

‫" ‪echo "Here is my gift to you‬‬


‫)"}‪#for i in $(eval echo "{1..$COLOR‬‬
‫)"}‪for i in $(eval echo "{1..$NUMBER‬‬
‫‪do‬‬
‫"‪echo "$i $COLOR‬‬
‫‪done‬‬
‫زمانی که این برنامه را اجرا می‌کنیم با خروجی زیر مواجه می‌شویم‪:‬‬

‫‪[oracle@master linuxessential]$ ./1.sh‬‬

‫?‪what is your favorite color‬‬

‫‪RED‬‬

‫?‪what is your favorite number‬‬

‫‪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‬که ابزاری است برای دانلود‬
‫لینوکـس مقدماتی‬

‫کتاب از آمازون و یا ‪chrome book.‬‬


‫در همگی این موارد از سیستم‌عامل لینوکس استفاده‌شده است و ابزارهای متفاوتی با‬
‫استفاده از آن ساخته‌شده و در اختیار دیگران قرارگرفته است‪.‬‬
‫پس می‌بینیم که لینوکس همه‌جا مشاهده می‌شود و زمانی که ما از لینوکس استفاده‬
‫می‌کنیم می‌دانیم که سورس آن در اختیار ما قرار دارد تا بر اساس نیاز آن را تغییر دهیم‪.‬‬
‫یعنی به شکل باورنکردنی می‌توانیم به هر شکلی که می‌خواهیم آن را تغییر داده و‬
‫برنامه‌ای جدید از آن تولید نماییم‪.‬‬

‫‪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‬برای‬
‫سیست ‌مهایمنت‌باز‬
‫در دنیای سیستم‌های متن آزاد دو نوع سازمان هستند که لیسانس الزم برای دریافت‬
‫لینوکـس مقدماتی‬

‫مدرک متن آزاد بودن را ارائه می‌کنند‪:‬‬


‫‪1- FSF Free Software Fundation‬‬

‫‪2- OSI Open Source Initiative‬‬

‫هیچ‌ک��دام از ای��ن دو کمپانی بر دیگ��ری ارجحیت ندارند‪ ،‬بلکه هرکدام سیاس��ت‬


‫مخصوص خود در ارائه مدرک را بر عهده‌دارند و هرکدام هدفی خاص را در این راس��تا‬
‫دنبال می‌کنند‪.‬‬
‫‪ FSF‬از استاندارهای ‪ GPL‬تبعیت می‌کند که در این استاندارد آزادی مطلق بر هر‬
‫نرم‌اف��زاری وجود دارد‪ .‬آزادی برای هر چی��زی‪ .‬هیچ حق تقدمی وجود ندارد هیچ حق‬
‫تقدمی در برنامه‌ها یا درایورها و یا هر چیز دیگری در سیس��تم وجود ندارد و همه‌چیز‬
‫آزاد است‪.‬‬

‫‪23‬‬
‫مهارت ‪ICT‬‬
‫و کار با لینوکس‬
‫لینوکـس مقدماتی‬

‫‪ ICT‬به معني ‪ Information and Communication Technology skills‬يا‬


‫مهارت استفاده از اطالعات و ارتباطات در محيط لينوکس می‌باشد‪.‬‬
‫به عبارت ساده‌تر می‌خواهیم بدانيم چگونه در لينوکس می‌توانیم کارهاي روزمره و يا‬
‫پروژه‌های اجرايي خود را به‌کار ببريم‪.‬‬
‫خب اول به اين سؤال جواب بدهيم که لينوکس در کجاها يافت می‌شود؟‬
‫امروز می‌توان لينوکس را در همه‌جا مشاهده کرد‪ ،‬مانند‪:‬‬
‫‪ -‬محيط ‪server room‬‬

‫‪ virtualization hosts -‬يا محیط‌های مجازی‌سازی مثل ‪vmware‬‬

‫‪ cloud computing -‬يا همان مبحث رايانش ابري مانند سرويس آمازون‪.‬‬
‫‪ -‬سیستم‌های الحاقي يا ‪ embedded‬مانند دستگاه‌های موبايل‪.‬‬
‫‪ factory automation -‬که از محيط ‪ DOS‬به لينوکس تغییریافته است‪.‬‬
‫‪mars rover -‬‬

‫‪27‬‬
‫اما آنچه در ادامه در مورد آن می‌خواهیم صحبت کنيم درباره اس��تفاده لينوکس در‬
‫محيط دسکتاپ يا صفحه شخصي کامپيوتر شما می‌باشد‪.‬‬
‫ازجمله مطالبي که در اين قسمت پوشش خواهم داد‪ ،‬عبارت‌اند از‪:‬‬

‫لینوکـس مقدماتی‬
‫‪ -‬چگونگي استفاده از مدير دسکتاپ يا ‪Desktop Manager‬‬
‫‪ -‬برنامه‌های کاربردي آفيس‬
‫‪-‬مرورگرها ‪Browser‬‬
‫‪ -‬نحوه ذخيره فايل‌ها‬
‫‪ -‬مفهوم ترمينال‬
‫‪ -‬چگونگي به‌کارگیری کلمه رمز يا پسورد‬
‫در ش��کل زير يک محيط شخصی‌س��ازی به‌نام ‪ KDE‬را نمايش داده‌ام‪ .‬يک محيط‬
‫کام ً‬
‫ال گرافيکي ش��بيه آنچه در محيط ويندوز داريد و با همه ابزارهاي گرافيکي مربوط‬
‫به آن‪.‬‬

‫‪28‬‬
‫همچنين در شکل زير محيط ‪Gnome‬‬
‫لینوکـس مقدماتی‬

‫همچنين شکل مقابل که محيط دسکتاپ اوبونتو به‌نام ‪ unity‬می‌باشد‪.‬‬


‫و بسياري محیط‌های گرافيکي ديگر در مديريت کارهاي روزانه در سیستم‌عامل‌های‬
‫‪29‬‬ ‫مختلف لينوکس داريم‪.‬‬
‫هر يک از نسخه‌های لينوکس به‌طور پیش‌فرض از يکي از اين محیط‌های گرافيکي‬
‫براي محيط دسکتاپ خود استفاده می‌کنند‪ .‬مث ً‬
‫ال در نسخه ‪ SUSE‬به‌طور پیش‌فرض‬
‫از ‪ KDE‬اس��تفاده می‌ش��ود و در ‪ fedora , centos‬به‌صورت پیش‌فرض ‪GNOME‬‬

‫لینوکـس مقدماتی‬
‫استفاده می‌شود يا در نس��خه ‪ ubuntu‬از محيط ‪ unitry‬استفاده می‌شود که هرکدام‬
‫ویژگی‌های مخصوص خود را براي مديريت دسکتاپ به‌کار می‌برند‪.‬‬
‫اما در هرکدام از نسخه‌های لينوکس می‌توان هرکدام از محیط‌های گرافيک ديگر را‬
‫ني��ز نصب و اجرا کرد‪ .‬مث ً‬
‫ال در ‪ SUSE‬می‌توان به‌جاي محيط پیش‌فرض گرافيکي آن‬
‫‪ KDE‬از ‪ GNOME‬يا ‪ unity‬يا محیط‌های ديگر نيز استفاده نمود و به‌راحتی می‌توان‬
‫هرکدام از محیط‌های موردعالقه کاربر را نصب و به‌کار برد‪.‬‬
‫اينکه از چه ن��وع محيط گرافيکي براي کارهاي روزانه‌تان اس��تفاده می‌کنید کام ً‬
‫ال‬
‫سلیقه‌ای بوده و بر اساس اينکه در کدام محيط راحت‌تر کار می‌کنید می‌توانید هرکدام‬
‫را که مايليد روي سيستم نصب و به‌کارگیرید‪.‬‬
‫به‌عنوان نمونه من از محيط گرافيکي سيستم خودم که با ‪ centos 7‬است نمونه‌ای‬
‫نمايش دادم تا ببينيد به‌راحتی می‌توان در اين محيط گرافيکي کليه کارهاي روزمره را‬
‫انجام داد‬

‫‪30‬‬
‫در داخل این محیط گرافیکی به راحتی به لیس��ت فایل‌ه��ا و دایرکتوری‌های خود‬
‫دسترس��ی داش��ته با حرکت موس روی آن‌ها می‌توانید آن‌ها را حذف یا کپی و پیست‬
‫نمایید‪ ،‬دقیقاً مثل زمانی که در محیط ویندوز کار می‌کنید‪.‬‬
‫لینوکـس مقدماتی‬

‫به شکل زير دقت نماييد‪:‬‬

‫در شکل باال مشاهده می‌کنید که کليه فولدرها و فایل‌ها به‌صورت گرافيک نمايش‬
‫داده‌شده است و می‌توانیم با حرکت موس داخل هر پوشه‌ای که می‌خواهیم پيمايش‬
‫کنيم يا فایل‌های داخل آن‌ها را حذف کرده يا جاي ديگري منتقل کنيم‪.‬‬

‫براي يادگيري بيشتر نياز داريد که در کالس‌های آموزشی‌ای که در اين زمينه‬


‫ترتيب داده‌ام شرکت کنيد تا از نزديک با محيط گرافيکي و نحوه به‌کارگیری‬
‫ابزارهاي آن آشنايي پيدا نماييد‪.‬‬

‫‪31‬‬
‫در اين قسمت قصد دارم به‌طور خالصه در مورد ساختار فایل‌های داخل سیستم‌عامل‬
‫لينوکس صحبت کنم‪.‬‬
‫فرض کنيد يک هارددیسک داريم که در محيط لينوکس قابل‌استفاده است‪ .‬درزمانی‬

‫لینوکـس مقدماتی‬
‫که من به‌عنوان کاربر سیستم‌عامل لينوکس وارد اين سیستم‌عامل می‌شوم‪ ،‬يعني جايي‬
‫که نام کاربري و پسورد خودم را می‌دهم و در صورت شناخته شدن وارد محيط گرافيکي‬
‫خود می‌شوم درواقع در مسيري خاص بنام ‪ /home/‬قرار دارم‪.‬‬
‫حاال اگر نام کاربري من مث ً‬
‫ال ‪ Deeba‬باشد در مسير ‪ /home/Deeba/‬قرار دارم و‬
‫در زير اين مسير پوشه‌هایی با نام ‪ ,Document, Download‬و يا پوشه‌های ديگر نيز‬
‫وجود دارند‪.‬‬
‫اين موضوع دقیقاً شبيه به آنچه در محيط ويندوز مشاهده می‌کنید می‌باشد‪.‬‬
‫تمام ‌مسیرها در لينوکس از يک مسير اصلي ريشه يا ‪ root‬که با نماد “‪ ”/‬نشان داده‬
‫می‌شود نشات می‌گیرد‪.‬‬
‫‪ /home/‬به معني مسير خانه می‌باشد‪.‬‬
‫يعني هر کاربري در سیستم‌عامل داراي خانه اختصاصي خود می‌باشد و کليد ورود به‬
‫خانه به هر کاربر مالک آن خانه داده می‌شود‪.‬‬
‫در تمام اين محیط‌های گرافيکي ابزاري به‌نام ترمينال داريم که از آن می‌توانیم وارد‬
‫محيط متني شده و دستورات لينوکس را تحت آن اجرا نماييم‪.‬‬

‫‪32‬‬
‫لینوکـس مقدماتی‬

‫ش��کل باال نمايش يک ترمينال بازش��ده در محيط گرافيکي سیستم‌عامل لينوکس‬


‫نسخه ‪ CentOS7‬می‌باشد‪.‬‬
‫پس در هر سیس��تم‌عامل لينوکس به ازای کاربران تعریف‌شده در سيستم هر کس‬
‫می‌توان��د در محيط گرافيکي يا غير گرافيکي واردش��ده و کارهاي خود را در آن دنبال‬
‫نمايد‪.‬‬

‫‪33‬‬
‫دستورات اولیه‬
‫در لینوکس‬
‫لینوکـس مقدماتی‬

‫چگونه از دستورات ساده لینوکس استفاده کنیم‪.‬‬


‫برای اینکه در محیط لینوکس بتوانیم دستوراتمان را اجرا کنیم محیطی در اختیار‬
‫کاربران قرار می‌گیرد که دس��تورات واردش��ده را به زبانی که لینوکس متوجه آن شود‬
‫ترجمه می‌کند که به آن ‪ shell‬یا پوسته می‌گویند درواقع این پوسته دور هسته اصلی‬
‫لینوکس کشیده شده است‪.‬‬
‫به‌طور پیش‌فرض کس��ی به‌طور مس��تقیم با هسته لینوکس صحبت نمی‌کند چون‬
‫زبان صحبت با هسته متفاوت از زبانی است که من و شما برای صحبت معمولی استفاده‬
‫می‌کنیم‪.‬‬
‫درس��ت مثل ‌اینکه ش��ما به ش��هری با زبان دیگری می‌روید و در آنجا برای ترجمه‬
‫حرف‌هایتان نیاز به مترجم دارید‪ .‬در اینجا هم این پوسته کار ترجمه حرف‌ها و دستورات‬
‫ما را برای هسته لینوکس انجام می‌دهد‪.‬‬
‫به محیطی که در آن دستورات لینوکس را وارد می‌کنیم تا برای هسته لینوکس آن را‬
‫ترجمه نماید‪ ،‬محیط متنی پوسته لینوکس یا ‪ Linux Command Shell‬می‌گویند‪.‬‬
‫درواقع این پوس��ته نقش مفسر را بازی می‌کند یعنی هر کلمه‌ای که در پوسته وارد‬
‫کنیم سریعاً برای هسته ترجمه می‌کند‪ .‬حاال اگر کلمه ما بتواند با توجه به دفترچه لغات‬
‫سیستم‌عامل لینوکس قابل ترجمه بوده و معنی داشته باشد‪ ،‬نتیجه آن به ما بازمی‌گردد‬
‫و چنانچه کلمه یا جمله ما معنی خاصی برای سیس��تم‌عامل نداشته باشد با یک پیغام‬
‫‪37‬‬ ‫خطا ما را متوجه این موضوع می‌کند‪.‬‬
‫خب قصد دارم در این قسمت به شرح موضوعات زیر بپردازم‪:‬‬
‫‪ -‬دستورات و گزینه‌های مربوط به آن‌ها‬
‫‪ -‬استفاده از کاراکترهای خاص برای یافتن نام فایل‌ها و دایرکتوری‌ها‬

‫لینوکـس مقدماتی‬
‫‪ -‬استفاده از عالمت نقل‌قول یا ‪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‬محتوای آن را نمایش می‌دهیم‪.‬‬

‫‪oracle@master ~]$ cat “581672061”.txt‬‬

‫در مث��ال ب��اال “‪ txt.”581672061‬نام یکی از فایل‌های من می‌باش��د که با اجرای‬


‫دستور باال محتوای داخل فایل نمایش داده می‌شود‪.‬‬
‫یا مث ً‬
‫ال دس��تور ‪ cat tel.site‬با فرض اینکه فایلی به‌نام ‪ tel.site‬وجود داشته باشد‬
‫محتوای داخل آن را نمایش می‌دهد که در شکل زیر خروجی را مشاهده می‌کنید‪.‬‬
‫می‌توانیم در اجرای فرمان ‪ cat‬از نام چند فایل استفاده کنیم‪ .‬مث ً‬
‫ال اگر ‪file1 ,file2‬‬
‫داش��ته باش��یم با اجرای فرمان ‪ cat file1 file2‬خروجی ظاهرش��ده روی ترمینال از‬
‫محتوای دو فایل به‌نام‌های ‪ file1 ,file2‬می‌باشد‪.‬‬
‫در خروجی لیست فایل‌های من فایل‌هایی هستند که همگی با عدد شروع‌ شده‌اند و‬
‫انتهای آن‌ها رشته یا عبارت ‪ txt‬به چشم می‌خورد‪ .‬حاال چنانچه من بخواهم لیست کلیه‬ ‫‪40‬‬
‫فایل‌هایی را ببینم که می‌دانم انتهای آن‌ها عبارت ‪ txt‬وجود دارد‪ ،‬کافی است در دستور‬
‫‪ ls‬یا ‪ cat‬از عالمت * به معنی هر چیزی به‌صورت زیر استفاده کنم‪:‬‬
‫می‌خواهم لیستی از فایل‌ها و یا پوشه‌هایی بگیرم که نام آن‌ها هر چه می‌خواهد باشد‬
‫لینوکـس مقدماتی‬

‫اما انتهای آن‌ها عبارت ‪ txt‬وجود داشته باشد‪ .‬به این منظور دستور زیر را وارد می‌کنیم‪:‬‬
‫‪oracle@master ~]$ ls‬‬ ‫‪*.txt‬‬

‫‪oracle@master ~]$ cat *.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‬به‌صورت یک‌رش��ته با در نظر گرفتن‬
‫فاصله موجود بین آن‌ها به دستور داده‌شده و خروجی آن نیز عیناً مانند آنچه در داخل‬
‫عالمت نقل‌قول نشان دادیم روی صفحه‌نمایش داده می‌شود‪.‬‬
‫لینوکـس مقدماتی‬

‫حاال فرض کنیم من دستور زیر را روی ترمینال اجرا می‌کنم‪:‬‬


‫‪oracle@master ~]$ a=hello there‬‬

‫خروجی دس��تور با خطا مواجه می‌ش��ود و به‌صورت زیر پیامی روی صفحه مشاهده‬
‫می‌کنیم‪:‬‬
‫در شکل‪ ،‬بعد از خط اجرا‪ ،‬پیغام ‪ 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‬‬

‫‪- Main -k‬‬


‫‪- Apropos‬‬
‫‪51‬‬ ‫‪- Which‬‬
‫‪- Whereis‬‬

‫یکی از روش‌هایی که این مشکل را برای ما برطرف می‌کند استفاده از دستور ‪man‬‬
‫می‌باش��د‪ .‬دس��تور ‪ Man‬مخفف ‪ manual‬می‌باش��د به معنی دس��تورالعمل که به ما‬

‫لینوکـس مقدماتی‬
‫توضیحات کاملی از یک دستور به همراه تمام گزینه‌های مرتبط با این دستور را نمایش‬
‫می‌دهد‪ .‬به‌منظور به‌کارگیری ‪ man‬باید این دستور را به همراه دستوری که می‌خواهیم‬
‫راجع به آن اطالعاتی کسب کنیم به‌کار ببریم‪ .‬مث ً‬
‫ال‪:‬‬
‫‪$ man ls‬‬

‫یعن��ی می‌خواهم بدانم دس��تور ‪ ls‬چی هس��ت چکار می‌کند و ب��ا چه گزینه‌هایی‬
‫قابل‌استفاده است‪.‬‬
‫ب��رای اینکه بدانیم با خود دس��تور ‪ man‬چگونه کارکنیم‪ ،‬از دس��تور ‪ man man‬‬
‫استفاده می‌کنیم که صفحه‌ای به شکل زیر ظاهر می‌شود‪:‬‬

‫با زدن دستور ‪ man ls‬صفحه‌ای به شکل زیر ظاهر می‌شود‪:‬‬


‫‪52‬‬
‫لینوکـس مقدماتی‬

‫ی��ک روش دیگر برای فهمیدن اینکه یک دس��تور در لینوکس چگونه کار می‌کند‪،‬‬
‫استفاده از ‪ 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‬‬

‫روش دیگر اس��تفاده از راهنمای دس��تورات استفاده از دستور ‪ which‬می‌باشد‪ .‬این‬


‫دس��تور زمانی به‌کار می‌رود که می‌خواهیم بدانیم که دس��توری که در حال اجرای آن‬
‫هستیم یا می‌خواهیم اجرا کنیم از چه مسیری در حال اجراشدن است‪ .‬به عبارتی مسیر‬
‫اجرایی دس��تورات را به ما نش��ان می‌دهد‪ .‬به عبارت بهتر می‌گوید کرنل از کجا متوجه‬
‫می‌شود که مث ً‬
‫ال دستور ‪ ls‬از کجا اجرا شود‪.‬‬
‫برای مثال می‌دانیم در سطح سیستم‌عامل دستوری به‌نام ‪ ls‬داریم و حاال فرض کنید‬
‫که کاربر نیز برنامه‌ای نوش��ته و نام آن را ‪ ls‬گذاش��ته است‪ .‬حاال وقتی من فرمان ‪ ls‬را‬
‫اجرا می‌کنم سیستم‌عامل کدام ‪ ls‬را اجرا می‌کند؟ آیا ‪ls‬ی که خود سیستم‌عامل جزو‬ ‫‪56‬‬
‫دستورات اولیه‌اش دارد یا دستور ‪ls‬ی که خودم نوشته‌ام؟‬
‫در ای��ن حالت با اجرای فرمان ‪ which ls‬می‌توانیم بفهمیم که مس��یر اجرایی که‬
‫سیستم‌عامل برای اجرای دستور ‪ ls‬استفاده می‌کند چیست‪.‬‬
‫لینوکـس مقدماتی‬

‫پس به‌طور خالصه در این فصل یاد گرفتیم‪:‬‬


‫‪ -1‬با استفاده از گزینه ‪ –help‬با یک دستور دلخواه‪ ،‬نحوه استفاده از دستور به همراه‬
‫گزینه‌های آن دستور را به‌طور خالصه روی صفحه می‌بینیم‪ .‬مثل ‪ ls --help‬یا ‪date‬‬
‫‪ --help‬که به‌طور خالصه توضیحاتی از دستور ‪ ls‬یا دستور ‪ date‬به همراه گزینه‌هایی‬
‫که با این دستورات همراه است برای ما نمایش داده می‌شود‪.‬‬
‫‪ -2‬دس��تور ‪ man ls‬یا ‪ man echo‬یا ‪ man ping‬یعنی همراه کردن دس��تور با‬
‫دستور ‪ man‬به ما توضیحی کامل از دستور و گزینه‌های آن می‌دهد‪.‬‬
‫‪ -3‬دستور ‪ info ls‬یا ‪ info ping‬یا ‪ Info man‬یعنی دستور ‪ info‬به همراه دستور‬
‫دلخواه برای ما توضیحاتی از دستور را می‌دهد‪.‬‬
‫‪ -4‬دس��تور ‪ man -k ls‬یعنی همراه کردن ‪ man –k‬به همراه دس��تور موردنظر‬
‫یا قس��متی از دستوری که به یاد می‌آوریم باعث می‌شود لیستی از کلیه دستوراتی که‬
‫به‌نوعی با عبارتی که مابعد از گزینه ‪ k‬وارد کرده‌ایم به همراه یک توضیح کوتاه از دستور‬
‫روی صفحه ظاهر شود و در این صورت می‌توانیم دستورات را مشاهده و دستوری را که‬
‫فراموش کرده‌ایم به یاد بیاوریم‪.‬‬
‫‪ -5‬دستور ‪ apropos ls‬که مانند ‪ man -k ls‬عمل می‌کند‪.‬‬
‫‪ -6‬دستور ‪ whatis ls‬که توضیح کوتاهی از دستور ‪ ls‬را در این مث ً‬
‫ال نشان می‌دهد‪.‬‬
‫‪ -7‬دستور ‪ whereis ls‬می‌گوید که دستور ‪ ls‬از چه مسیری اجرا می‌شود و همچنین‬
‫در چه مسیری توضیحات این دستور آمده است‪.‬‬
‫‪ -8‬دس��تور ‪ which ls‬می‌گوید که می‌گوید مث ً‬
‫ال دستور ‪ ls‬از چه مسیری در حال‬
‫‪57‬‬ ‫اجراست‪ .‬این‌طوری ما می‌فهمیم که آیا دستور ‪ ls‬را از مسیر درست اجرا کرده‌ایم یا خیر؟‬
‫مدیریت فایل‌ها و‬
‫دایرکتوری‌ها‬
‫در لینوکس‬
‫لینوکـس مقدماتی‬

‫در این بخش قصد دارم به توضیح در مورد دستوراتی که به‌وسیله آن می‌توانیم لیست‬
‫فایل‌ها و پوشه‌های خود را در یک مسیر خاص نمایش دهیم و دستورات مرتبط به لیست‬
‫فایل‌ها و دایرکتوری‌ها را توضیح دهم‪.‬‬
‫دستوراتی که در این بخش دنبال می‌کنم عبارت‌اند از‪:‬‬
‫• نحوه استفاده از دستور ‪ cd‬یا ‪change directory‬‬
‫• استفاده از مسیر مطلق و مسیر نسبی‬
‫• معنی ‪ .‬و ‪ ..‬در مسیر‬
‫• دستور ‪ pwd‬یا ‪Present working directory‬‬
‫الزم به توضیح اس��ت که در مورد س��اختار فایل سیستم‌های در لینوکس در فصل‬
‫دیگری توضیح خواهم داد‪.‬‬

‫طریقه استفاده از دستور ‪cd‬‬


‫گفتیم دستور ‪ cd‬یعنی مسیرت را عوض کن یا برو به فالن مسیر‪.‬‬
‫اوالً با فرض اینکه می‌دانیم در لینوکس همه‌چیز از ‪ /‬یا ریشه شروع می‌شود و هر مسیر‬
‫از مس��یر دیگر با عالمت “‪ ”/‬جدا می‌گردد‪ .‬حاال وقتی مث ً‬
‫ال بخواهیم به مسیر ‪home//‬‬
‫‪ oracle‬برویم با استفاده از دستور ‪ cd /home/oracle‬این کار را انجام می‌دهیم‪.‬‬
‫ی��ا مث ً‬
‫ال اگر بخواهم به مس��یر ‪ etc/‬بروم با اجرای فرم��ان ‪ cd /etc‬این کار را انجام‬
‫‪61‬‬ ‫می‌دهم‪.‬‬
‫اما در سیستم‌عامل لینوکس در هر مسیری دو فایل می‌بینیم‪ ،‬یکی با نام “‪ ”.‬و دیگری‬
‫با نام “‪”..‬‬
‫فایلی که نام “‪ ”.‬را دارد به معنی مس��یری اس��ت که در آن قرار داریم یا به‌اصطالح‬

‫لینوکـس مقدماتی‬
‫‪home directory‬‬
‫و “‪ ”..‬به معنی یک مسیر باالتر از مسیری که در آن قرار داریم یا به‌اصطالح ‪parent‬‬
‫مسیر جاری می‌باشد‪.‬‬
‫پس با اجرای فرمان “‪ ”. cd‬اتفاق خاصی نمی‌افتد‪ .‬یعنی می‌گویم برو به مسیر جاری‬
‫و این در حالی است که در مسیر جاری قرار داریم‪.‬‬
‫اما دستور “‪ ”.. cd‬یعنی برو به یک مسیر باالتر یا برو به مسیر والد من یا یک مسیر‬
‫به عقب برگرد‪ ،‬یعنی اگر در مسیر ‪ home/oracle/‬باشیم با اجرای فرمان “‪ ”.. cd‬یعنی‬
‫یک مسیر برو عقب‪ ،‬یعنی به مسیر ‪ home/‬وارد می‌شویم‪.‬‬
‫همچنین عالمت “~” برای سیستم‌عامل معنی دارد و معنی آن یعنی مسیر خانه‬
‫ما یا به‌اصطالح ‪ home directory‬یعنی “~ ‪ ”cd‬یعنی برو به مس��یر خانه خودت یا‬
‫ب��ه ‪ home directory‬خودت برو‪ .‬برای مث ً‬
‫ال فرض کنید در مس��یر ‪ etc/‬قرار داریم و‬
‫می‌خواهیم به مسیر خانه خودمان برگردیم در این حالت می‌توانیم به دو صورت عمل‬
‫کنیم‬
‫‪1- Cd‬‬ ‫‪/home/oracle‬‬

‫~ ‪2- Cd‬‬

‫هر دو دستور باال ما را به مسیر خانه خودمان هدایت می‌کند‪.‬‬


‫فرض کنید شخصی به تهران سفر می‌کند و به دنبال آدرس برج میالد است و زمانی‬
‫که به ما مراجعه می‌کند ما می‌توانیم بگوییم تهران‪ -‬بزرگ‌راه همت – خروجی برج میالد‬
‫یا اینکه نسبت به مکانی که در آن قرار داریم آدرس را به شخص موردنظر بدهیم‪ .‬یعنی‬
‫دیگر نمی‌گوییم تهران – بزرگ‌راه همت‪ ،‬بلکه بسته به اینکه اآلن کجا هستیم مث ً‬
‫ال آیا‬ ‫‪62‬‬
‫در جنوب تهرانیم یا شمال یا شرق یا غرب‪ ،‬آدرس رسیدن به برج میالد را می‌دهیم‪.‬‬
‫در حالتی که آدرس‌دهی را از نقطه آغازین یعنی تهران می‌دهیم از مسیردهی مطلق‬
‫اس��تفاده کرده‌ایم و زمانی که آدرس را نس��بت به مس��یری که اآلن در آن قرار داریم‬
‫لینوکـس مقدماتی‬

‫می‌دهیم از مسیردهی نسبی استفاده نموده‌ایم‪.‬‬


‫خب پس وقتی من می‌گویم برو به مسیر خانه یا ‪ home directory‬وقتی می‌گویم ‬
‫‪ cd /home/oracle‬یعنی مسیردهی مطلق استفاده کرده‌ام و وقتی مث ً‬
‫ال در ‪home/‬‬
‫قرار دارم و دس��تور دهم ‪ cd oracle‬یعنی نس��بت به‌جایی که اآلن قرار دارم برو به‬
‫مسیر ‪ oracle.‬دقیقاً مثل مثال باال که نسبت به آدرسی که در آن قرار داریم آدرس برج‬
‫میالد را به‌طرف مقابل می‌دهیم‪.‬‬
‫همچنین اس��تفاده از دستور ‪ ../.. cd‬یعنی دو تا مسیر برو عقب‌تر‪ .‬یعنی اگر مث ً‬
‫ال در‬
‫مسیر ‪ home/oracle/app/product/‬قرار داریم و دستور ‪ ../.. cd‬را اجرا کنیم به مسیر ‬
‫‪ /home/oracle/‬وارد می‌شویم‪.‬‬
‫یا مث ً‬
‫ال اگر در هر مسیری باشیم و دستور ‪ cd ~/app‬را اجرا کنیم یعنی برو به مسیر‬
‫خانه من و در آنجا برو به مسیر ‪app.‬‬
‫در اینجا خانه من منظور خانه کاربری است که با آن وارد سیستم شده‌ایم‪.‬‬
‫حاال از کجا بفهمیم که اص ً‬
‫ال در چه مسیری قرار داریم؟‬
‫با اجرای دستور ‪ pwd‬می‌فهمیم که اآلن در چه مسیری قرار داریم‪ .‬مث ً‬
‫ال فرض کنید‬
‫دستور ‪ pwd‬را اجرا کردیم و دیدیم که مث ً‬
‫ال در مسیر ‪home/oracle/app/product/‬‬
‫قرار داریم حاال می‌توانیم مث ً‬
‫ال دستور ‪ .. cd‬را اجرا کنیم و یک مسیر به عقب یعنی به‬
‫مسیر ‪ home/oracle/app/‬وارد شویم‪.‬‬
‫حاال که فهمیدیم چگونه به مسیرهای موردنظرمان در سیستم‌عامل لینوکس برویم‬
‫می‌خواهیم بدانیم در این مس��یرها چگونه لیست فایل‌ها و دایرکتوری‌های آن مسیر را‬
‫‪63‬‬ ‫ببینیم که این کار با اجرای دستور ‪ ls‬انجام می‌شود‪.‬‬
‫اما در هر مس��یر فایل‌هایی هستند که با اجرای دس��تور ‪ ls‬به‌صورت ساده نمایش‬
‫داده نمی‌شوند‪ .‬به این نوع فایل‌ها پنهان می‌گویند‪ .‬یعنی نامشان قابل‌رؤیت نیست‪ .‬برای‬
‫مشاهده نام این نوع فایل‌ها باید از دستور ‪ ls‬به همراه گزینه ‪ a-‬استفاده نماییم‪.‬‬

‫لینوکـس مقدماتی‬
‫بنابراین اجرای دستور “‪ “ 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‬‬

‫‪$ mv 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‬را انتخاب کنید یعنی پاک نکن‪.‬‬

‫دستور ‪ rmdir‬یعنی یک دایرکتوری را پاک کن‬


‫مث ً‬
‫ال ‪rmdir mydir1‬‬
‫در اجرای دس��تور باال چنانچه ‪ mydir1‬خالی نباشد سیستم با اعالن خطایی ما را‬
‫متوجه می‌سازد که این پوشه خالی نیست‪ .‬بنابراین اول باید فایل‌های داخل این مسیر‬
‫را با دستور ‪ rm‬پاک کنیم‪ .‬برای این کار می‌توانیم با دستور ‪ rm‬و نام هر فایل به ترتیب‬
‫هر فایل را پاک نماییم‪ ،‬اما فرض کنید صد تا فایل در این مسیر دارید و باید صدبار این‬
‫فرمان را وارد کنید که وقت‌گیر اس��ت‪ .‬بنابراین از عالئم مخصوص برای خالصه کردن‬
‫استفاده می‌کنیم چگونه؟‬
‫مث ً‬
‫ال اگر می‌خواهیم هر چه فایل در مسیر ‪ home/oracle/mydir1/‬وجود دارد‬
‫را پاک کنیم از دستور‬
‫‪$ rm -f /home/oracle/myfile1‬‬ ‫‪70‬‬
‫استفاده می‌کنیم و سپس می‌توانیم دستور ‪ rmdir /home/oracle/mydir1‬را‬
‫اجرا کنیم‪.‬‬
‫ح��اال زمان‌هایی پیش می‌آید که مطمئن به پاک کردن یک دایرکتوری و فایل‌های‬
‫لینوکـس مقدماتی‬

‫داخل آن هس��تیم‪ ،‬در این حال��ت از دس��تور”‪”rm –rf /home/oracle/mydir1‬‬


‫استفاده می‌کنیم‪ .‬در این حالت کل پوشه ‪ mydir1‬به همراه تمام فایل‌ها و پوشه‌های‬
‫داخل آن به‌یک‌باره پاک خواهند شد‪ .‬خب این دستور کار ما را راحت می‌کند اما خطری‬
‫نیز ما را تهدید خواهد کرد و اینکه در بس��یاری از موارد مش��اهده کرده‌ام که کاربران‬
‫به‌اشتباه مسیری را حذف می‌کنند که از اطالعات آن مسیر نیز نسخه پشتیبانی ندارند‬
‫و در این هنگام کلیه داده‌های ما در این پوش��ه از بین خواهد رفت؛ بنابراین بهتر اس��ت‬
‫زمانی که می‌خواهیم اطالعات یک پوشه را به‌طور کامل پاک کنیم حتماً از قبل برای آن‬
‫نسخه پشتیبانی تهیه کنیم و سپس اقدام به حذف پوشه نماییم‪ .‬زیرا در این حالت اگر‬
‫اش��تباهاً چیزی را حذف کرده باشیم قابل بازیابی می‌باشد‪ .‬بدین منظور از دستور “‪ cp‬‬
‫‪ ”-R mydir1 mydir1.backup‬می‌توانیم استفاده کنیم ‪ .‬در این دستور گفته‌ام که‬
‫از پوشه ‪ mydir1‬عیناً یک نسخه با نام ‪ mydir1.backup‬بساز‪ .‬حاال که خیالم راحت‬
‫ش��د که یک نسخه مثل نسخه قبل را دارم اگر با دستور “‪rm -rf /home/oracle/‬‬
‫‪ ”mydir1‬تمام اطالعات پوشه ‪ mydir1‬را پاک کنم نیز اشکالی پیش نخواهد آمد‪.‬‬
‫دوس��تان به این نکته بسیار توجه کنید زیرا در بسیاری از موارد مشاهده کرده‌ام که‬
‫افرادی که خصوصاً روی برنامه‌نویسی کار می‌کنند و کدهای یک ماه یا یک‌هفته‌ای خود‬
‫را به‌صورت نسخه پشتیبان تهیه نکرده‌اند‪ ،‬گاهاً با یک اشتباه ساده کل پوشه تغییرات را‬
‫حذف می‌کنند و اگر نسخه پشتیبانی توسط مدیر سیستم وجود نداشته باشد یعنی کل‬
‫تغییرات آن‌ها از بین رفته است‪.‬‬

‫‪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‬‬

‫دستور غیرفشرده‌سازی‬ ‫‪gunzip‬‬ ‫‪Bunzip2‬‬ ‫‪unzip‬‬

‫در جدول باال به‌اختصار نام هر دس��تور فشرده‌سازی به همراه دستوری که از حالت‬
‫فشرده خارج می‌سازد آورده شده است‪.‬‬
‫اما برای تهیه نسخه پشتیبان از فایل‌ها و یا پوشه‌های داخل سیستم‌عامل می‌توانیم‬
‫از دستور ‪ 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‬‬
‫لینوکـس مقدماتی‬

‫حال فرض کنید که می‌خواهیم از مکانیزم ‪ bz2‬برای فشرده‌س��ازی استفاده کنیم‪.‬‬


‫بدین منظور با استفاده از دستور زیر عمل می‌کنیم‪:‬‬
‫‪$ tar‬‬ ‫‪-cjf‬‬ ‫‪/tmp/home_oracle.tar.gz‬‬ ‫‪/home/oracle‬‬
‫حاال چنانچه هنگام گرفتن نس��خه پشتیبان بخواهیم محتوای مسیری که در حال‬
‫پشتیبان‌گیری است روی صفحه مانیتور نمایش داده شود از گزینه ‪ v-‬استفاده می‌کنیم‪.‬‬
‫با استفاده از این گزینه کلیه فایل‌ها و دایرکتوری‌های مسیر موردنظر به‌صورت هم‌زمان‬
‫که در فایل مقصد پشتیبان‌گیری می‌شوند روی صفحه‌نمایش داده می‌شوند‪.‬‬
‫بدین منظور از دستور زیر استفاده می‌کنیم‪:‬‬
‫‪$ tar -czvf /tmp/home_oracle.tar.gz /home/oracle‬‬
‫و یا‬
‫‪$ tar -cjvf /tmp/home_oracle.tar.bz2 /home/oracle‬‬

‫‪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-‬استفاده می‌کنیم‪:‬‬
‫لینوکـس مقدماتی‬

‫‪$ tar -xzvf /tmp/home_oracle.tar.gz‬‬


‫‪$ tar -xjvf /tmp/home_oracle.tar.bz2‬‬
‫در دو دستور باال فرض بر این است که فایل پشتیبان از نوع فشرده بوده و در مسیر ‪/‬‬
‫‪ tmp‬و با نام ‪ home_oracle.tar.gz‬و یا ‪ home_oracle.tar.bz2‬قرار دارد‪ .‬حاال‬
‫می‌توانیم یک پوشه با نام ‪ mybackup‬ساخته و به داخل آن رفته و یکی از دستورات‬
‫باال را اجرا نماییم‪ .‬بنابراین به‌صورت زیر عمل می‌کنیم‪:‬‬
‫‪$ mkdir /tmp/mybackup‬‬
‫‪$ cd /tmp/mybacku‬‬
‫‪$ tar –xzvf /tmp/home_oracle.tar.gz‬‬
‫ویژگی دس��تور ‪ tar‬در این اس��ت که ‪ owner‬و ‪ group‬و اجازه‌های دسترس��ی‬
‫فایل‌ها را در خود ذخیره می‌کند‪ .‬این مسئله به‌شدت در زمان استخراج نسخه پشتیبان‬
‫مهم می‌باش��د؛ زیرا در زمان اس��تخراج فایل‌ها و دایرکتوری‌ها اگر مث ً‬
‫ال از دستور کپی‬
‫استفاده کنیم ‪ owner, group‬فایل‌ها بر اساس نام و گروه شخصی که در حال انجام‬
‫اس��تخراج اس��ت تغییر می‌کند و همچنین اجازه‌های دسترس��ی فایل‌ها نیز بر اساس‬
‫اجازه‌های دسترسی مسیری که در آن عمل استخراج انجام می‌شود تغییر خواهد کرد‬
‫و گاهی تغییر یک اجازه دسترس��ی روی یک فای��ل و یا تغییر نام کاربری و گروه فایل‬
‫منجر به اجرا نشدن آن فایل می‌گردد‪ .‬لذا با استفاده از دستور ‪ tar‬هم می‌توانیم ‪owner‬‬
‫‪ , group‬فایل و هم اجازه‌های دسترس��ی فایل‌ها را ذخیره و در هنگام اس��تخراج عیناً‬
‫به‌صورت اول بازیابی نماییم‪.‬‬
‫‪83‬‬ ‫درواقع دس��تور ‪ tar‬به ن��وع مانند کپی کردن فایل‌ها در جای دیگر می‌باش��د‪ ،‬ولی‬
‫مکانی��زم خاصی دارد که می‌تواند خصوصیاتی از فایل را که در آن ‪ owner, group‬و‬
‫اجازه‌های دسترسی فایل را نیز در خود ذخیره کند‪.‬‬
‫یکی دیگر از روش‌های فشرده‌سازی استفاده از دستور ‪ zip‬می‌باشد‪ .‬مث ً‬
‫ال فرض کنید‬

‫لینوکـس مقدماتی‬
‫می‌خواهیم یک فایل را به‌صورت فشرده و با مکانیزم ‪ 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/‬را مشاهده کنیم‬
‫لینوکـس مقدماتی‬

‫با دستور ‪ less /var/log/messages‬این کار را به‌راحتی می‌توانیم انجام دهیم‪.‬‬

‫دستور ‪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‬می‌توانیم‬
‫لینوکـس مقدماتی‬

‫این جستجو را انجام دهیم‪.‬‬


‫چند مثال خوب‬
‫‪ -1‬فرض کنید که در سیستم به دنبال الگ فایل‌های بزرگی که مث ً‬
‫ال سایز آن‌ها از‬
‫‪ 10‬مگابایت بیشتر بوده و بیشتر از یک ماه است که در سیستم دست‌نخورده باقی‌مانده‬
‫و نام آن‌ها با پسوند ‪ log‬تمام می‌شود‪ ،‬می‌گردیم‪ .‬دراین حالت با استفاده از فرمان ‪ find‬‬
‫و گزینه‌های آن‪ ،‬این کار را انجام می‌دهیم‪.‬‬
‫ ”‪$ find / -atime 30 -size 10M -name “*log‬‬
‫با مطالعه ‪ man find‬یا ‪ Info find‬می‌توانید گزینه‌های مختلف دس��تور ‪ find‬را‬
‫بیابید‪.‬‬
‫‪ -2‬فرض کنید به دنبال فایل‌های فقط خواندنی یا ‪ read only‬سیستم هستیم‪ .‬با‬
‫دستور زیر این فایل‌ها را جستجو می‌کنیم‪.‬‬
‫‪# find / -perm /u=r‬‬
‫‪ -3‬فرض کنید به دنبال پوشه‌های خالی در مسیر ‪ tmp/‬می‌گردیم‪.‬‬
‫‪# find /tmp -type d -empty‬‬
‫‪ -4‬فرض کنید که در مسیر ‪ home/oracle/‬به دنبال فایل‌های مخفی می‌گردیم‪.‬‬
‫”*‪# find /home/oracle -type f -name “.‬‬
‫‪ -5‬لیست فایل‌هایی را می‌خواهیم که بین ‪ 50‬تا ‪ 100‬روز پیش تغییر کرده‌اند‪:‬‬
‫‪#find / -mtime +50 -mtime -100‬‬
‫‪ -6‬لیست فایل‌هایی را که یک ساعت قبل تغییر کرده‌اند‪ ،‬می‌خواهیم‪:‬‬
‫‪97‬‬ ‫‪#find‬‬ ‫‪/ -cmin 60‬‬
‫‪ -7‬به دنبال تمام فایل‌هایی هستیم که مالک آن‌ها کاربر ‪ oracle‬باشد‪:‬‬
‫‪#find / -user oracle‬‬
‫‪ -8‬لیست تمام فایل‌هایی را که سایز آن‌ها بین ‪ 50‬تا ‪ 100‬مگابایت است‪ ،‬می‌خواهیم‪:‬‬

‫لینوکـس مقدماتی‬
‫‪#find / -size +50M -size -100M‬‬
‫‪ -9‬به دنبال عبارت “‪ ”php‬در فایل‌های مختلف می‌گردیم‪:‬‬
‫‪# grep‬‬ ‫‪php‬‬ ‫‪-r /‬‬
‫‪ -10‬به دنبال فایل‌هایی با پسوند ‪ php‬در سیستم می‌گردیم‪:‬‬
‫”‪# find / -type f -name “*.php‬‬

‫‪98‬‬
‫داده‌های ما‬
‫در سیستم عامل‬
‫در کجا ذخیره‬
‫می‌شوند؟‬
‫لینوکـس مقدماتی‬

‫در این بخش می‌خواهیم به این موضوع بپردازیم که داده‌های ما در سیستم‌عامل لینوکس‬
‫در کجا نگهداری می‌شوند‪.‬‬
‫بدین منظور بهتر است طرحی از ساختار پوشه‌های سیستم‌عامل لینوکس را توضیح دهم‪.‬‬

‫مسیر‪etc /‬‬
‫در سیس��تم‌عامل لینوکس‪ ،‬مس��یری با ن��ام‪ etc/‬داریم که مح��ل ذخیره فایل‌های‬
‫پیکربندی سیستم‌عامل می‌باشند‪.‬‬
‫در سیستم‌عامل لینوکس فایل‌هایی هستند که اطالعاتی در ارتباط با نام ماشین و یا‬
‫اطالعات شبکه را در خود نگهداری می‌کنند‪ .‬این اطالعات برای سیستم‌عامل بسیار مهم‬
‫می‌باشند و هنگامی‌که سیستم روشن می‌شود به این اطالعات نیازمند است‪ .‬بیشتر این‬
‫اطالعات در مسیر ‪ etc/‬نگهداری می‌شوند‪.‬‬

‫مسیر ‪ lib/‬و ‪ usr/lib/‬و ‪ usr/lib64/‬و ‪lib64/‬‬


‫این مس��یرها محل نگهداری فایل‌های کتابخانه‌ای یا ‪ library‬های سیس��تم‌عامل‬
‫می‌باش��ند‪ .‬فایل‌های کتابخانه‌ای درواقع کدهای نوشته‌ش��ده و اجراشده‌ای هستند که‬
‫فایل‌های اجرایی سیس��تم به آن‌ها نیاز دارند‪ .‬در سیستم‌های کنونی که از معماری ‪101 64‬‬
‫بیتی استفاده می‌کنند عالوه بر ‪ lib , /usr/lib/‬مسیر ‪ usr/lib64/ , lib64/‬نیز اضافه‌شده‬
‫اس��ت‪ .‬درواقع ‪ lib , /usr/lib/‬محل نگهداری ‪ library‬های ‪ 32‬بیتی و ‪usr// ,lib64/‬‬
‫‪ lib64‬محل نگهداری ‪ library‬های ‪ 64‬بیتی سیستم می‌باشد‪.‬‬

‫لینوکـس مقدماتی‬
‫فایل‌هایی که در این مس��یر قرار می‌گیرند خیلی ش��بیه به فایل‌های‪ dll.‬در ویندوز‬
‫می‌باشند‪.‬‬

‫مسیر ‪bin /usr/bin/‬‬


‫این مس��یر محل نگهداری فایل‌های اجرایی سیستم‪ ،‬مانند دستورات مورداستفاده‬
‫سیستم مثل دستور ‪ ls , find, wc‬و غیره می‌باشند‪.‬‬

‫مسیر ‪var/log/‬‬
‫در مس��یر‪ var/‬کلیه فایل‌هایی که سایز آن‌ها در طول حیات و روشن بودن سیستم‬
‫تغییر می‌کند‪ ،‬نگهداری می‌شود‪ .‬مانند الگ فایل‌های سیستم‪.‬‬
‫ازجمل��ه این الگ فایل‌ها در مس��یر ‪ /var/log/‬می‌باش��د که مح��ل نگهداری الگ‬
‫فایل‌های سیستم‌عامل می‌باشد‪ .‬مث ً‬
‫ال فایل مهم ‪ messages‬در مسیر ‪ var/log/‬در این‬
‫مسیر نگهداری می‌شود‪.‬‬

‫مسیر ‪home/‬‬
‫محل نگهداری فایل‌های مربوط به کاربران موجود در سیس��تم‌عامل که قادر به وارد‬
‫شدن به سیستم هستند‪ ،‬می‌باشد‪.‬‬
‫مث ً‬
‫ال کاربر ‪ oracle‬که اجازه ورود به سیس��تم را دارد‪ ،‬دارای خانه شخصی ‪home//‬‬
‫‪ oracle‬می‌باشد که می‌تواند فایل‌های خود را در آنجا ذخیره و نگهداری کند‪.‬‬
‫بنابراین متوجه می‌شویم که داده‌های ما در سطح سیستم‌عامل بر طبق نظمی خاص‬ ‫‪102‬‬
‫و بر اساس موضوعی که آن داده در خود ذخیره می‌کند در مکانی خاص در سیستم‌عامل‬
‫نگهداری می‌شود‪.‬‬
‫لینوکـس مقدماتی‬

‫مفهومی به‌نام ‪process‬‬


‫زمانی که ما فرمان ‪ ls‬را اجرا می‌کنیم درواقع یک فایل اجرایی را اجرا می‌کنیم‪ .‬این‬
‫فایل اجرایی یا همان ‪ ls‬یک کپی از فایل ‪ ls‬می‌باشد که کاربر در لحظه موردنیاز آن را‬
‫به‌کار می‌گیرد‪ .‬حاال اگر هم‌زمان ‪ 10‬نفر این فرمان را اجرا نمایند انگار ‪ 10‬نسخه کپی‬
‫از فرمان ‪ ls‬در اختیار این ده نفر قرارگرفته است‪ .‬این نسخه‌های کپی از برنامه اجرایی را‬
‫که در لحظه اجرا می‌شوند ‪ process‬می‌گویند‪ .‬بنابراین ‪ process‬چیزی بیش از یک‬
‫برنامه اجرایی نیس��ت‪ .‬منتها نسخه‌ای از یک برنامه اجرایی‌ای می‌باشد که در لحظه در‬
‫حال استفاده شدن است و به عبارتی در حافظه سیستم بارگذاری شده است‪.‬‬
‫بنابراین یک ‪ process‬برنامه اجرایی‌ای می‌باشد که در حافظه قرارگرفته است‪.‬‬
‫کاربران سیس��تم‌های‌عامل‌ لینوکس��ی می‌توانند هم‌زمان چندین دس��تور را یا یک‬
‫دستور را به‌صورت چندین مرتبه اجرا نمایند‪ .‬لذا سیستم‌عامل لینوکس حاوی پاره‌ای از‬
‫دستورات جهت مدیریت و نمایش ‪ process‬ها می‌باشد‪ .‬ازجمله این دستورات‪ ،‬دستور‬
‫‪ ps‬یا ‪ process status‬یا همان نشان دادن وضعیت ‪ process‬ها می‌باشد‪.‬‬

‫فرمان ‪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‬‬

‫‪ -1‬کاربران استاندارد سیستم عامل لینوکس چه کسانی هستند؟‬


‫این کاربران ش��امل کاربرانی می‌ش��ود که مدیر سیس��تم آن‌ها‪ ،‬بعد از روشن شدن‬
‫سیستم‪ ،‬ایجاد می‌کند که می‌توانند شامل تمام افرادی که قرار است با این سیستم‌عامل‬
‫کار کنند‪ ،‬باشد‪ .‬مث ً‬
‫ال کاربرانی که قرار است با پایگاه داده‌ای اوراکل کار کنند از این نوع‬
‫کاربران هستند‪ .‬یا کاربرانی که قرار است در یک پروژه خاص کار کنند نیز از نوع کاربران‬
‫استاندارد سیستم می‌باشند‪.‬‬
‫این کاربران می‌توانند قدرت مدیر سیستم یا ‪ root‬را دارا بوده و یا فاقد آن باشند‪.‬‬

‫‪ -2‬کاربر ‪root‬‬
‫این کاربر‪ ،‬کاربر ارشد سیستم‌عامل یا مدیر ارشد سیستم‌عامل می‌باشد که اجازه هر ‪109‬‬
‫کاری را در سطح سیستم‌عامل دارا می‌باشد‪.‬‬

‫‪ -3‬کاربر سیستمی‬

‫لینوکـس مقدماتی‬
‫این کاربران برای اجرای یک برنامه خاص در س��طح سیستم‌عامل تعریف می‌شوند‪.‬‬
‫به‌عنوان‌مثال فرض کنید که قرار است در ماشین لینوکس شما‪ ،‬یک سرویس وب اجرا‬
‫گردد‪ .‬بنابراین سیستم‌عامل نیاز به کاربری برای اجرای این سرویس دارد که مث ً‬
‫ال با نام‬
‫‪ apache‬این کاربر را جهت اجرای سرویس وب تخصیص می‌دهد‪ .‬درواقع این کاربر نیاز‬
‫به ورود به سیس��تم به صورتی که بتواند از دستورات خط فرمان لینوکس استفاده کند‬
‫ندارد‪ ،‬بلکه فقط به این منظور ساخته‌شده است تا سرویس وب را اجرا نماید‪.‬‬
‫یا مث ً‬
‫ال اگر قرار است پایگاه داده‌ای ‪ mysql‬را روی سیستم خود اجرا نمایید نیاز به‬
‫کاربری با نام ‪ mysql‬دارید تا این سرویس را اجرا نماید‪.‬‬
‫پس کاربران سیستمی‪ ،‬کاربرانی هستند که در سطح سیستم‌عامل لینوکس قرار است‬
‫سرویسی را اجرا نمایند‪.‬‬

‫ابزارهای الزم برای مشاهده نوع کاربر در سیستم‌عامل لینوکس‬


‫دستور ‪id‬‬
‫دس��تور ‪ id‬اطالعاتی در مورد شخصی که به سیستم وارد یا به‌اصطالح الگین کرده‬
‫است می‌دهد‪ .‬با اجرای این فرمان خروجی‌ای به شکل زیر نمایش داده می‌شود‪:‬‬

‫مث ً‬
‫ال در شکل باال با اجرای فرمان ‪ id‬روی صفحه اطالعاتی از کاربری با نام ‪ oracle‬و‬
‫عدد کاربری او در سطح سیستم‌عامل یعنی عدد ‪ 500‬و نام گروهی که این کاربر عضو آن‬ ‫‪110‬‬
‫است که گروه ‪ oracle‬با عدد ‪ 501‬و اطالعات دیگر در مورد این کاربر را به ما می‌دهد‪.‬‬

‫دستور ‪w‬‬
‫لینوکـس مقدماتی‬

‫این دستور می‌گوید چه دستورات در حال اجرا توسط شخصی که الگین کرده است‬
‫در سیستم وجود دارد‪.‬‬

‫دستور ‪who‬‬
‫دستور ‪ who‬می‌گوید در حال حاضر چه کسانی وارد سیستم شده‌اند و از طریق چه‬
‫ترمینالی به سیستم متصل هستند‪.‬‬

‫دستور ‪sudo‬‬
‫با اس��تفاده از دس��تور ‪ sudo‬می‌توانیم اجازه‌های کاربر ‪ root‬سیس��تم را داش��ته و‬
‫دستوراتی را با اجازه کاربر ‪ root‬اجرا نماییم‪.‬‬

‫فایل‌های مرتبط با کاربران‬


‫‪ -1‬فایل ‪etc/passwd/‬‬
‫این فایل اطالعاتی از کلیه کاربران سیستم اعم از کاربران سیستمی یا استاندارد و یا ‪111‬‬
‫‪ root‬را در خود ذخیره می‌کند‪ .‬اطالعات داخل این فایل شامل نام کاربران و عدد واحدی‬
‫که برای آن کاربر در سیستم در نظر گرفته‌شده و نام گروهی که کاربر در آن عضو است‬
‫به همراه عدد گروه و نیز توضیح مختصری از این کاربر که قرار است چه‌کاری انجام دهد‬

‫لینوکـس مقدماتی‬
‫و مسیر خانه شخصی این کاربر یا ‪ home directory‬این کاربر چه هست‪ ،‬می‌باشد‪.‬‬
‫همچنین ستون دوم این فایل شامل کلمه عبور کاربران می‌باشد که به لحاظ امنیت‬
‫با حرف “‪ ”x‬نشان داده‌شده است تا کسی نتواند به کلمه عبور کاربران پی ببرد‪.‬‬
‫نمونه فایل‪etc/passwd/‬‬

‫‪ -2‬فایل ‪/etc/shadow‬‬

‫این فایل شامل اطالعاتی از کاربران می‌باشد که ستون اول آن دقیقاً مثل ستون اول‬
‫فایل‪ etc/passwd/‬شامل نام کاربران سیستم و ستون دوم آن رمز عبور کاربران است که‬
‫به‌صورت رمزگذاری شده در این فایل قرار دارد‪ ،‬تا کسی پی به ماهیت آن نبرد‪.‬‬

‫نمونه‌ای از فایل ‪etc/shadow/‬‬ ‫‪112‬‬


‫لینوکـس مقدماتی‬

‫ازجمله اطالعات دیگری که در این فایل ذخیره‌ش��ده است در مورد طول عمر کلمه‬
‫عبور‪ ،‬اینکه تا چه زمانی فرصت دارند کلمه عبور خود را تغییر دهند‪ .‬اینکه چه کاربری‬
‫قفل یا ‪ Lock‬شده است و اجازه ورود ندارد‪.‬‬

‫فایل ‪/etc/group‬‬
‫این فایل اطالعاتی در مورد گروه‌های موجود در سیس��تم را ذخیره می‌کند‪ .‬مث ً‬
‫ال با‬
‫اجرای فرمان ‪ groups‬متوجه می‌شویم که کاربر ‪ oracle‬به چه گروهی متعلق است‪.‬‬

‫ب��ا اجرای فرمان ‪ less /etc/group‬می‌توانیم محتوای این فایل را صفحه به صفحه‬
‫مشاهده کنیم‬

‫‪113‬‬
‫لینوکـس مقدماتی‬
‫نکتـه ‪:‬‬
‫برای استفاده از دستور ‪ sudo‬برای کاربری که ‪ root‬نیست باید حتم ًا این کاربر‬
‫جزء کاربرانی که حق اس�تفاده از دس�تور ‪ sudo‬را دارند تعریف‌ش�ده باشد وگرنه‬
‫سیسم عامل اجازه استفاده از این قدرت به هر کاربری نمی‌دهد‪ .‬این عمل عموم ًا در‬
‫فایل ‪ etc/sudoers/‬انجام می‌شود که فایلی با پیکربندی مخصوص خود می‌باشد که‬
‫جهت تعریف دسته‌ای از دستورات و کاربرانی می‌باشد که قرار است قدرت کاربری‬
‫دیگر را به ارث ببرند‪.‬‬
‫ازآنجاک�ه این بخش توضیحات مقدماتی لینوکس اس�ت بنابراین کاربران را با‬
‫مفاهیم خیلی تخصصی نمی‌خواهم سردرگم نمایم‪.‬‬
‫در دوره‌های ‪ LPIC-1‬در مورد این فایل و نحوه استفاده از آن شرح داده می‌شود‪.‬‬ ‫‪114‬‬
‫ایجاد کاربران و‬
‫گروه‌های کاربری‬
‫لینوکـس مقدماتی‬

‫دستوراتی که در این قسمت شرح خواهم داد عبارتند از‪:‬‬


‫‪- Useradd‬‬

‫‪- 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‬خود استفاده نماید الزم است که این اعداد را در زمان اجرای‬
‫لینوکـس مقدماتی‬

‫فرمان به سیستم‌عامل معرفی کنیم‪.‬‬


‫مث ً‬
‫ال‬
‫‪#useradd -u 5000 -g 5000 -d /var/vmail -s /sbin/nologin‬‬
‫‪vmail‬‬
‫در دستور باال کاربری با نام ‪ vmail‬ایجاد کرده‌ایم که ‪ uid‬آن برابر ‪ 5000‬و ‪ gid‬او‬
‫برابر ‪ 5000‬و مسیر خانه شخصی این کاربر در ‪ var/vmail/‬و مفسر یا ‪ shell‬این کاربر‬
‫‪ nologin‬تعریف‌شده است‪ .‬زمانی که برای کاربری ‪ shell‬را از نوع ‪ nologin‬یا ‪false‬‬
‫انتخاب می‌نماییم یعنی این کاربر از نوع کاربرانی است که قرار است سرویسی را در سطح‬
‫سیستم‌عامل ارائه دهند و نیاز به گرفتن ‪ shell‬برای اجرای دستورات ندارند‪.‬‬
‫در دستور باال تمامی پارامترها را از حالت پیش‌فرض خارج کرده و هنگام ایجاد این‬
‫پارامترها را به‌صورت دستی تعیین کرده‌ایم‪.‬‬
‫ی��ا مث ً‬
‫ال اگر می‌خواهیم کارب��ری با نام ‪ oracle‬ایجاد کنیم که قرار اس��ت در گروه‬
‫‪ oinstall‬عضو باشد ابتدا گروهی به‌نام ‪ oinstall‬ایجاد کرده و سپس کاربر ‪ oracle‬را‬
‫به‌صورت زیر ایجاد می‌کنیم‪:‬‬
‫‪#useradd -g oinstall oracle‬‬

‫دستور ‪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‬به‌صورت مطلق این مجوزها را به فایل بدهیم‪.‬‬
‫‪ -2‬به‌صورت نسبی این مجوزها را به فایل بدهیم‪.‬‬

‫‪ -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‬‬

‫صوفیاعلیخانی‬

You might also like