0% found this document useful (0 votes)
2 views

119-Linux Shell Scripting

Uploaded by

alborzjfrnk
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

119-Linux Shell Scripting

Uploaded by

alborzjfrnk
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 67

‫کتاب کار‬

‫ک‬ ‫ن‬ ‫ی‬‫ل‬ ‫یپ‬ ‫ک‬‫س‬ ‫ش‬ ‫ن یس‬


‫ربانهم و ی ل ا ر ت رد و س‬
‫دپارتمان‪ :‬فناوری اطالعات و نرمافزار‬
‫موضوع‪ :‬کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬
‫شناسه افزوده‪۱ :‬پ‪LSw۰/‬‬
‫چاپ اول‪ :‬بهار ‪۱۳۹۶‬‬
‫آدرس وبسایت‪Www.Paravid.com :‬‬
‫آدرس پست الکترونیک‪[email protected], [email protected] :‬‬
‫آدرس‪ :‬تهران‪ ،‬خیابان آزادی‪ ،‬ضلع شمالی دانشگاه صنعتی شریف‪ ،‬کوچه گلستان‪ ،‬پالک ‪۹‬‬
‫تلفن‪۰۲۱۶۶۱۵۶۸۸۴ -۰۲۱۶۶۱۵۶۸۷۷ :‬‬
‫کلیه حقوق این جزوه متعلق به پرآوید است و هرگونه کپیبرداری‪ ،‬تکثیر و چاپ کاغذیی بذدون اجذازه پرآویذد‬
‫تخلف محسوب میشود‪.‬‬

‫کتاب کار‬
‫یس‬
‫ربانهمنو ی شلاسکریپت رد لینوکس‬
‫فهرست‬
‫عنوان‪۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰‬صفحه‬

‫مجموعه مثالهای گام به گام ‪5 .....................................................................................‬‬

‫مجموعه تمرینات تشریحی ‪10 ......................................................................................‬‬

‫مجموعه سؤاالت چند گزینهای ‪14 ................................................................................‬‬

‫پاسخنامه ‪19 ................................................................................................................‬‬

‫مجموعه نمونه سؤاالت ‪39 ...........................................................................................‬‬

‫بخش اول‪ :‬نصب (‪41 ........................................................................ )INSTALLATION‬‬

‫بخش دوم‪ :‬مهاجرت از ویندوز )‪45 .......................... (MIGRATION FROM WINDOWS‬‬

‫بخش سوم‪ :‬پیکربندی و نصب )‪45 .................................. (CONFIGURATION & SETUP‬‬

‫بخش چهارم‪ :‬استفاده عمومی )‪49 ................................................... (GENERAL USAGE‬‬

‫بخش پنجم‪52 ............................................................................. COMMAND SHELL :‬‬

‫بخش ششم‪ :‬فایلها و دایرکتوریها )‪56 .............................. (FILES AND DIRECTORIES‬‬

‫بخش هفتم‪ :‬حسابهای کاربری‪ ،‬گروهها و مجوزها‪63 ..................................................‬‬

‫بخش هشتم‪ :‬متفرقه ‪66 .................................................................................................‬‬


‫مجموعه مثالهای گام به گام‬

‫اسکریپتهای بسیار ساده‬ -1


hello World ‫ اسکریپت سنتی‬

#!/bin/bash
echo Hello World
backup ‫ اسکریپت بسیار ساده‬

#!/bin/bash
tar −cZf /var/my−backup.tgz /home/me/
redirection ‫همه چیز درباره‬ -2
 stdout 2 file

ls −l > ls−l.txt
 stderr 2 file

grep da * 2> grep−errors.txt


 stdout 2 stderr

grep da * 1>&2
 stderr 2 stdout

grep * 2>&1
 stderr and stdout 2 file

rm −f $(find / −name core) &> /dev/null


Pipes -3
 Pipe ‫ ساده با‬sed

ls −l | sed −e "s/[aeio]/u/g"
ls −l *.txt ‫ جایگزینی برای‬

ls −l | grep "\.txt$"

‫متغیرها‬ -4
‫ با استفاده از متغیر‬hello world ‫ مثال‬

#!/bin/bash
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۶

STR="Hello World!"
echo $STR
)‫ (کمی بهتر‬backup ‫ مثال اسکریپت‬

#!/bin/bash
OF=/var/my−backup−$(date +%Y%m%d).tgz
tar −cZf $OF /home/me/
‫ متغیرهای محلی‬

#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO
‫شرطیها‬ -5
if... then ‫ مثال شرطی پایه‬

#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
fi
if...then…else ‫ مثال شرطی پایه‬

#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
‫ شرطیها با متغیرها‬

#!/bin/bash
T1="foo"
T2="bar"
if [ "$T1" = "$T2" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
for, While, Until ‫حلقههای‬ -6
۷ ‫مجموعه مثالهای گام به گام‬

for ‫ مثال حلقه‬

#!/bin/bash
for i in $( ls ); do
echo item: $i
C ‫ شبیه برنامه نویسی‬for 

#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done
while ‫ مثال حلقه‬

#!/bin/bash
COUNTER=0
while [ $COUNTER −lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
until ‫ مثال حلقه‬

#!/bin/bash
COUNTER=20
until [ $COUNTER −lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER−=1
done
‫توابع‬ -7
‫ مثال توابع‬

#!/bin/bash
function quit {
exit
}
function hello {
echo Hello!
}
hello
quit
echo foo
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۸

‫ توابع با پارامترهای ساده‬

#!/bin/bash
function quit {
exit
}
function e {
echo $1
}
e Hello
e World
quit
echo foo
‫رابطهای کاربری‬ -8
‫ برای ایجاد منوها‬select ‫ استفاده از‬

#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done
‫ استفاده از خط فرمان‬

#!/bin/bash
if [ −z "$1" ]; then
echo usage: $0 directory
exit
fi
SRCD=$1
TGTD="/var/backups/"
OF=home−$(date +%Y%m%d).tgz
tar −cZf $TGTD$OF $SRCD
‫متفرقه‬ -9
read ‫ خواندن ورودی کاربر با‬

#!/bin/bash
echo Please, enter your name
۹ ‫مجموعه مثالهای گام به گام‬

read NAME
echo "Hi $NAME!"
‫ انجام محاسبات‬

echo 1 + 1
echo $((1+1))
bash ‫ یافتن‬

find./ −name bash


ls −l /bin/bash
ls −l /sbin/bash
ls −l /usr/local/bin/bash
ls −l /usr/bin/bash
ls −l /usr/sbin/bash
ls −l /usr/local/sbin/bash
‫ بازگشت مقدار یک برنامه‬

#!/bin/bash
cd /dada &> /dev/null
echo rv: $?
cd $(pwd) &> /dev/null
echo rv: $?
‫ ذخیره خروجی دستورات‬
#!/bin/bash
DBS=`mysql −uroot −e"show databases"`
for b in $DBS ;
do
mysql −uroot −e"show tables from $b"
done

‫ آرایهها‬-10
‫ مقایسه دو رشته‬
#!/bin/bash
S1='string'
S2='String'
if [ $S1=$S2 ];
then
echo "S1('$S1') is not equal to S2('$S2')"
fi
if [ $S1=$S1 ];
then
echo "S1('$S1') is equal to S1('$S1')"
fi
‫مجموعه تمرینات تشریحی‬
‫‪ :1‬برنامهای بنویسید که با اجرای آن صفحه نمایش پاک شود و اشاره گر در باالی صفحه قرار‬
‫گیرد؟ (نحوه نوشتن شل اسکریپت)‬
‫‪ :2‬برنامهای بنوسید که دو متغیر ‪ x‬و ‪ X‬را ‪ ۱۰‬و ‪ ۲۰‬مقدار دهی نماید و متغیر ‪ y‬را مقدار دهی‬
‫نکند و سپس این سه متغیر را چاپ نماید؟ (تعریف متغیرها)‬
‫نکته‪ :‬در شل اسم متغیرها ‪ case sensitive‬میباشد و حروف بزرگ و کوچک با هم تفاوت دارند‪.‬‬
‫متغیرهای سیستمی معموالً با حروف بزرگ و متغیرهایی که کاربر تعریف میکند معموالً با حروف‬
‫کوچک نام گیاری میشوند‪.‬‬
‫‪ :3‬برنامهای بنویسید که مقدار ‪ $1‬را توسط فرمان ‪ test‬و عملگرهای مقایسهای ( < > = >= <=‬
‫‪ )۰‬با صفر ‪ ۰‬مقایسه نماید و پیغام مناسب برای هر مقایسه را نمایش دهد؟ (تعریف متغیرها)‬
‫‪ :4‬برنامهای بنویسید که مقدار دو متغیر رشتهای زیر را با هم مقایسه نماید (استفاده از عملگرهای‬
‫مقایسهای رشتهای) و خالی بودن متغیر ‪ string_null‬را نیز چک نماید و نتایج مقایسهها نیز‬
‫نمایش داده شود؟ (عملگرهای رشتهای)‬
‫""=‪string_null‬‬
‫"‪string1="string1‬‬
‫‪ :5‬برنامهای بنویسید که یک نام از کذاربر سذاال کنذد و اطالعذات زیذر را نمذایش دهذد؟ (فایذل و‬
‫دایرکتوری)‬
‫خالی بودن فایل‬ ‫‪‬‬
‫وجود فایل‬ ‫‪‬‬
‫دایرکتوری است یا خیر؟‬ ‫‪‬‬
‫فقط خواندنی است؟‬ ‫‪‬‬
‫اجرایی است؟‬ ‫‪‬‬

‫‪ :6‬برنامهای بنویسید که در زمان اجرا از کاربر عددی را دریافت کند و بررسی شذود کذه آیذا عذدد‬
‫مثبت است یا منفی؟ (فرمانهای شرطی ‪)if...else...fi‬‬
‫بررسی فرمان شرطی ‪if... then... else... fi‬‬ ‫‪:7‬‬
‫‪ :8‬برنامهای بنویسید که پیغام ‪ welcome $i times‬را ‪ ۵‬بار با مقادیر ‪ I=1 2 3 4 5‬نمایش دهد؟‬
‫(حلقه ‪)for‬‬
‫‪ :9‬برنامهای بنوسید که عدد ورودی ‪ ۱$‬را در ‪ ۱‬تا ‪ ۱۰‬ضرب نماید و نمایش دهد؟ (حلقه ‪)for‬‬
‫‪ :10‬با استفاده از حلقه ‪ while‬برنامهای بنوسید که عدد ورودی ‪ ۱$‬را در ‪ ۱‬تا ‪ ۱۰‬ضرب نماید و‬
‫‪۱۱‬‬ ‫مجموعه تمرینات تشریحی‬

‫نمایش دهد؟ (حلقه ‪)while‬‬


‫‪ :11‬بررسی توابع در شل (تعریف تابع)‬
‫‪ :12‬با استفاده از فرمان ‪ read‬برنامهای بنویسید که ‪ Name‬و ‪ Age‬کاربر را نمایش دهد (نحوه‬
‫گرفتن اطالعات از ‪)Shell‬‬
‫‪ :13‬با استفاده از ‪ read‬و ‪ case‬یک منو ساده ایجاد کنید که بر اساس ‪ item‬انتخابی فعالیتی را‬
‫انجام دهد؟ (ایجاد منو با استفاده از فرمانهای ‪ read‬و ‪)Case‬‬
‫‪ :14‬تعریف متغیرهای محیطی در برنامه‬
‫‪ :15‬برنامهای بنوسید که نام یک فایل را به عنوان ‪ $1‬ارائه شود و تعداد کلمات موجود در فایل را‬
‫نمایش دهد؟ (شمارش تعداد لغات یک فایل)‬
‫‪ :16‬برنامهای بنویسید که توسط فرمان ‪ rsync‬به صورت ‪ remote‬از یک ‪ host‬فایل پشتیبان تهیه‬
‫نماید؟ (نحوه تهیه فایل پشتیبان توسط فرمان ‪)rsync‬‬
‫‪select‬‬ ‫‪ :17‬ساخت منوی‬
‫‪ :18‬برنامهای بنویسد که برنامه عددی را در نظر داشته باشد و تا زمانی که کاربر آن عدد را حدس‬
‫نزده است به کاربر پیغام دهد‪( .‬این برنامه به صورت یک مسابقه میباشد و نحوه گرفتن اطالعات‬
‫از کاربر را نشان میدهد)‬
‫‪ :19‬استفاده از فرمان ‪ let‬و ‪printf‬‬
‫‪getopts‬‬ ‫‪ :20‬استفاده از فرمان‬
‫‪ :21‬با استفاده از امکانات فرمان ‪ echo‬یک صفحه شطرنج طراحی نمایید؟ (کاربرد ‪ option‬های‬
‫فرمان ‪)echo‬‬
‫‪ :22‬برنامهای بنویسد که به کاربر حق انتخاب موارد زیر را ارائه دهد؟ (کاربرد ‪)case‬‬
‫اعالم تاریخ‬ ‫‪.۱‬‬
‫لیست فایلهای دایرکتوری جاری‬ ‫‪.۲‬‬
‫نمایش تقویم‬ ‫‪.۳‬‬
‫باز کردن برنامه ویرایشگر ‪vim‬‬ ‫‪.۴‬‬
‫خروج‬ ‫‪.۵‬‬
‫‪ :23‬برنامهای بنویسید که پیغامی را به کاربر نمایش دهد‪( .‬کار با ‪)dialog‬‬
‫‪ :24‬با استفاده از ‪ dialog yes no box‬از کاربر تأیید و یا پییرفتن حیف یک فایل را بگیرید؟ (کار‬
‫با ‪)dialog‬‬
‫‪ :25‬با استفاده از ‪ dialog input box‬نام کاربر را به عنوان ورودی از کاربر دریافت نمایید؟ (کار با‬
‫‪)dialog‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۱۲‬‬

‫‪ :26‬برنامهای بنویسید که تعداد خطهای یک فایل را بشمارد و نمایش دهد‪( .‬شمارش تعداد‬
‫خطهای یک فایل)‬
‫‪ :27‬برنامه ای بنویسید که تعداد خطوط چندین فایل را بشمارد و نمایش دهد‪( .‬شمارش تعداد‬
‫خطوط چندین فایل)‬
‫تعریف شده در متغیر ‪PATH‬‬ ‫‪ :28‬پیدا کردن یک فایل مشخص در دایرکتوریهای‬
‫‪ :29‬برنامهای بنویسید که نام فایلهای داده شده را به ‪ lowercase‬تبدیل نماید؟‬
‫‪ :30‬برنامهای بنویسید که برای نامهای داده شده در متغیر ‪ names‬در برنامه نام کاربری و رمز‬
‫عبور ایجاد نماید‪.‬‬
‫‪ :31‬برنامهای بنویسید که یک فایل را که در آن فقط لیست نام کاربران میباشد را دریافت کرده و‬
‫برای هر اسم یک نام کاربری ایجاد نماید؟‬
‫فایل لیست نام کاربران‬ ‫‪‬‬
‫برنامه‬ ‫‪‬‬

‫‪ :32‬برنامهای بنویسید که تمامی کاربران سیستم را به همراه فایلهایشان به جز کاربر ‪ root‬را از‬
‫سیستم حیف نماید؟‬
‫نکته‪ :‬این برنامه را روی سیستم عملیاتی اجرا ننمایید‪.‬‬
‫‪ :33‬برنامهای بنویسید که یک عدد را به عنوان ورودی دریافت کند و اعداد زوج و فرد کوچکتر از‬
‫آن عدد را مشخص نماید؟‬

‫‪ :34‬برنامهای بنویسید که تا زمانی که توسط کاربر متوقف نشده است از عدد ‪ ۱‬با وقفهای برابر با‬
‫عدد بعدی آن را چاپ نماید؟‬
‫‪ :35‬برنامهای بنویسید که نام یک دایرکتوری را به عنوان ورودی دریافت کند و فایلهای تحت آن‬
‫دایرکتوری را حیف نماید؟‬
‫‪ :36‬برنامهای بنویسید که ‪ ping‬سرور را به طور اتوماتیک انجام دهد‪( .‬کاربرد فرمان ‪ trap‬در‬
‫برنامه)‬
‫‪ :37‬برنامهای بنویسید که سرورهای ‪ linux‬یا ‪ HP-UX‬و یا ‪ Sunos‬را چک نمایید‪.‬‬
‫‪ :38‬برنامهای بنویسید که توسط فرمان ‪ rsync‬فایلها را کپی نماید؟‬
‫‪ :39‬برنامهای بنویسید که فایلهای اضافی را حیف نماید؟‬
‫‪ :40‬برنامهای بنویسید که یک اسم فایل و یک لغت را به عنوان ورودی دریافت کند و چک کند‬
‫که آیا لغت در فایل وجود دارد یا خیر؟‬
‫‪۱۳‬‬ ‫مجموعه تمرینات تشریحی‬

‫‪ :41‬برنامهای بنویسید که ‪ IP‬های ‪ local‬را بررسی و ‪ip‬های موجود را لیست نماید؟‬


‫‪ :42‬برنامهای بنویسید که انتقال فایل از طریق ‪ ftp‬را اتوماتیک نماید؟‬
‫‪ :43‬برنامهای بنویسید که زمان ‪ up‬شدن آدرس ‪ IP‬هایی را که در برنامه تعریف کشده است را‬
‫اعالم نماید؟‬
‫‪ :44‬برنامهای بنویسید که ‪ ۱۰‬فرمانی را که بیشتر توسط کاربر اجرا شدهاند به همراه تعداد اجرا‬
‫لیست نماید؟‬
‫‪ :45‬برنامهای بنویسید که میزان ‪ cpu‬استفاده شده در یک ساعت گیشته را نمایش دهد؟‬
‫مجموعه سؤاالت چند گزینهای‬
‫‪ -۴۶‬گزینه مخالف را انتخاب کنید‬
‫‪(a) hsh‬‬
‫‪(b) csh‬‬
‫‪(c) ksh‬‬
‫‪(d) bash‬‬
‫‪ -۴۷‬کدام دستورات از نظر گرامری صحیح میباشند؟ (دو گزینه صحیح)‬
‫*‪[a] ls -ld a* b‬‬
‫*‪[b] ls -l-d a* b‬‬
‫*‪[c] ls -l -d a* b‬‬
‫*‪[d] ls -l a* -d b‬‬
‫‪ -۴۸‬به دستورات زیر توجه کنید که به ترتیب اجرا میشوند‪ .‬نشان دهیذد کذه کذدام خروجذی بذه‬
‫وسیله آخرین دستور ایجاد میشود؟‬
‫‪$ mkdir a‬‬
‫‪$ cd a‬‬
‫‪$ ps > a‬‬
‫‪$ ls > b‬‬
‫‪$ cat b a‬‬

‫!‪(a) Error‬‬
‫‪(b) PID TTY TIME CMD‬‬
‫‪29362 pts/3 0:00 -ksh‬‬
‫‪92598 pts/3 0:00 ps‬‬
‫‪a‬‬
‫‪b‬‬
‫)‪(c‬‬
‫‪a‬‬
‫‪b‬‬
‫‪PID TTY TIME CMD‬‬
‫‪29362 pts/3 0:00 -ksh‬‬
‫‪92598 pts/3 0:00 ps‬‬
‫‪(d) a‬‬
‫‪PID TTY TIME CMD‬‬
‫‪29362 pts/3 0:00 -ksh‬‬
‫‪92598 pts/3 0:00 ps‬‬
‫‪(e) PID TTY TIME CMD‬‬
‫‪29362 pts/3 0:00 -ksh‬‬
‫‪92598 pts/3 0:00 ps‬‬
‫‪A‬‬
‫‪ -۴۹‬کدام گزینه‪ ،‬چهار کلید هدایتگر (‪ )navigation‬در ‪ vi‬میباشند؟‬
‫‪(a) h - j - k - l‬‬
‫‪(b) l - u - d - r‬‬
‫‪(c) h - u - n - j‬‬
‫‪۱۵‬‬ ‫مجموعه سااالت چند گزینهای‬

‫‪(d) a - q - s – d‬‬
‫‪ -۵۰‬در ‪ ،vi‬کدام کلید ترکیبی‪ ،‬عملگر متفاوتی نسبت به گزینههای دیگر دارد؟‬
‫‪(a) G‬‬
‫‪(b) $G‬‬
‫‪(c) $‬‬
‫‪(d):$‬‬
‫‪ -۵۱‬فرض کنید که در حالت خط فرمذان ویرایشذگر ‪ vi‬قذرار داریذم و مذیخذواهیم فایذل لیسذت‬
‫دایرکتوری را مشاهده کنیم‪ .‬برای این منظور از دستور زیر استفاده میشود‪:‬‬
‫>‪(a) <esc>:! ls -l <enter‬‬
‫>‪(b):!ls <enter‬‬
‫>‪c) :ls <enter‬‬
‫”‪(d) This is not possible without closing “vi‬‬
‫‪ -۵۲‬با توجه به نتیجه خروجی زیر‪ ،‬به سه ساال زیر پاسخ دهید‪:‬‬
‫‪-rw-r--r-- 2 tb00029 staff 74 Dec 26 16:50 a‬‬
‫‪-rw-r--r-- 1 tb00029 staff 0 Dec 26 16:50 b‬‬
‫‪drwxr-xr-x 2 tb00029 staff 512 Dec 26 16:50 c‬‬
‫‪-rw-r--r-- 2 tb00029 staff 74 Dec 26 16:50 d‬‬
‫‪lrwxrwxrwx 1 tb00029 staff 1 Dec 26 16:51 e -> c‬‬
‫کدام دستور‪ ،‬این خطوط را ایجاد میکند؟‬
‫‪(a) ls -l‬‬
‫‪(b) ls -al‬‬
‫‪(c) ls -pl‬‬
‫‪(d) ls –pe‬‬
‫‪ -۵۳‬در وضعیت مشابه‪ ،‬کدام دستورات فایل ‪ b‬را ایجاد خواهند کرد؟‬
‫‪[a] >b‬‬
‫‪[b] cat > b‬‬
‫‪[c] cat | b‬‬
‫‪[d] touch b‬‬
‫‪ -۵۴‬در وضعیت مشابه‪ ،‬فایل ‪ d‬چگونه ایجاد خواهد شد؟‬
‫‪(a) >d‬‬
‫‪(b) touch d‬‬
‫‪(c) cat > d‬‬
‫‪(d) cp a d‬‬
‫‪(e) ln a d‬‬
‫‪(f) ln -s a d‬‬
‫‪ -۵۵‬با شروع هر دایرکتوری‪ ،‬کدام دستور برای اینکه بالفاصله به دایرکتذوری ‪ home‬برگذردد بایذد‬
‫وارد شود؟‬
‫>‪(a) cd. <enter‬‬
‫>‪(b) cd - <enter‬‬
‫>‪(c) cd <enter‬‬
‫>‪(d) cd HOME <enter‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۱۶

‫ دستور‬،C ‫ شروع میشوند به زیر دایرکتوری‬a ‫ برای کپی کردن تمامی فایلهایی که با حرف‬-۵۶
:‫زیر را وارد میکنیم‬
(a) cp a* c
(b) cp a? c/
(c) cp a[*] c
(d) mv a? /c/a
(e) cp a* /c/a
(f) mv a* c/
)‫ از اولین به دومین بکار میرود؟ (دو پاسخ‬a ‫ کدام دستور برای تغییر مجوز فایل‬-۵۷
-rw-r--r-- 2 tb00029 staff 74 Dec 26 16:50 a
......
-rwxrw---x 2 tb00029 staff 74 Dec 26 16:50 a
[a] chmod 761 a
[b] chmod 167
[c] chmod +124 a
[d] chmod ou+x,g+w,o-r a
[e] chmod u+x a; chmod o+x;
[f] none of the above.
[g] This is impossible with a single command. One needs a command to remove
permissions
and one to add permissions back.
‫ موجب تولید نتیجه زیر میشود؟‬،‫ کدام دستور‬-۵۸
PID TTY TIME CMD
35622 pts/0 0:01 -ksh
46828 pts/0 0:00 ps
Tue Nov 27 14:38:26 NFT 2005 Socrates
(a) ps#date#hostname
(b) ps|date|hostname
(c) ps>date>hostname
(d) ps;date;hostname
(e) ps/date/hostname
:‫ براساس وضعیت زیر‬-۵۹
$ls <enter>
abc abc1 abc11 abc13 abc2 abc3
‫ خروجی دستور زیر میباشد؟‬،‫کدام گزینه‬
$ls abc[13]<enter>

(a) abc1 abc3


(b) abc1 abc2 abc3 abc13
(c) abc1 abc13 abc3
(d) abc1 abc2 abc3
(e) abc abc1 abc13 abc3
۱۷ ‫مجموعه سااالت چند گزینهای‬

‫ ارائه میکند؟‬root ‫ کدام گزینه مجوز تعداد ارتباطات (نتیجه به صورت عدد) توسط کاربر‬-۶۰
(a) who|grep root|wc -l
(b) who > grep root|wc -l
(c) who|grep root>wc -l
(d) who|grep >/dev/null|wc -l
(e) grep root|who|wc -l
(f) wc -l|grep root|who
(g) wc -l<grep root<who
:‫ با مشاهده نتیجه زیر‬-۶۱
echo $abc <enter>
Tue Dec 27 15:15:57 NFT 2005
‫ بکار میرود؟‬korn ‫ یا‬bash ‫ توسط‬abc ‫ برای شناسایی‬،‫کدام دستور‬
(a) set abc=date
(b) abc=date
(c) abc="date"
(d) $abc=$date
(e) abc=$(date)
(f) abc=exec(date)
(g) $abc=(date)
‫ در پس‬s ‫اسکریپتی با نام‬ ‫ ترتیب کلیدهای وارد شده و دستور برای اجرای‬،‫ کدام گزینه‬-۶۲
‫ سپس انتقال به پیش زمینه و در نهایت ایجاد وقفه و کشتن آن میباشد؟‬،‫زمینه‬
(a) s&<enter>
ctrl-z
fg %1<enter>
stop %1<enter>
(b) s&<enter>
ctrl-z<enter>
fg %1<enter>
stop %1<enter>
kill %1<enter>
(c) s&<enter>
fg %1<enter>
ctrl-z
stop %1<enter>
kill %1<enter>
(d) s&<enter>
ctrl-z<enter>
fg %1<enter>
kill %1<enter>
(e) s&<enter>
fg %1<enter>
ctrl-z
kill %1<enter>
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۱۸

:‫ جهت یافتن نتیجه زیر بکار میرود‬find ‫ کدام گزینه برای دستور‬-۶۳
-rw-r--r-- 1 tb00029 staff 0 Dec 27 14:48 abc
-rw-r--r-- 1 tb00029 staff 0 Dec 27 14:48 abc1
-rw-r--r-- 1 tb00029 staff 0 Dec 27 14:48 abc11
-rw-r--r-- 1 tb00029 staff 0 Dec 27 14:54 abc13
-rw-r--r-- 1 tb00029 staff 0 Dec 27 14:48 abc2
-rw-r--r-- 1 tb00029 staff 0 Dec 27 14:49 abc3
drwxr-xr-x 2 tb00029 staff 512 Dec 27 16:10 abc4
drwxr-xr-x 2 tb00029 staff 512 Dec 27 16:11 abc5
:find ‫نتیجه دستور‬
drwxr-xr-x 2 tb00029 staff 512 Dec 27 16:10./abc4
drwxr-xr-x 2 tb00029 staff 512 Dec 27 16:11./abc5
(a) find. -name "abc[345]" -type d
(b) find. -name "abc[345]" -type d | ls -l
(c) find. -name 'abc[345]' -type d -exec ls -ld {} \;
(d) find. -name -type d -exec ls -ld {} ";"
(e) find. -name abc\[345\] -type d -exec ls -l {} \;
-‫ کار میکنند را صادر می‬csh ‫ و‬ksh ‫فایل کاربرانی که هم با‬ ‫ امکان انتخاب از‬،‫ کدام دستور‬-۶۴
:‫کند؟ برای این منظور از محتوای فایل زیر استفاده کنید‬
> cat p
tb00029:!:202:1:Eric:/home/tb00029:/usr/bin/ksh
tb00041:!:448:1:Peter:/home/tb00041:/usr/bin/bash
student1:!:297:103:Student 1:/opt/bmc/pem/u/student1:/usr/bin/csh
student2:!:298:103:Student 2:/opt/bmc/pem/u/student2:/usr/bin/csh
team00:!:203:205:Student 00:/home/curaix/team00:/usr/bin/ksh
team01:!:204:205:Student 01:/home/curaix/team01:/usr/bin/ksh
:‫نتیجه دستور‬
tb00029:!:202:1:Eric:/home/tb00029:/usr/bin/ksh
student1:!:297:103:Student 1:/opt/bmc/pem/u/student1:/usr/bin/csh
student2:!:298:103:Student 2:/opt/bmc/pem/u/student2:/usr/bin/csh
team00:!:203:205:Student 00:/home/curaix/team00:/usr/bin/ksh
team01:!:204:205:Student 01:/home/curaix/team01:/usr/bin/ksh
(a) grep '/ksh' p ; grep '/csh' p
(b) grep '/ksh' p | grep '/csh'
(c) grep '/[kc]sh$' p
(d) grep '/(k|c)sh' p
(e) grep '[kc]sh^' p
‫ مفهوم نتیجه زیر را بهتر نشان میدهد؟‬،‫ کدام گزینه‬-۶۵
echo $?<enter>
1

(a) The variable $? has been initialized to 1 by a preceding command ($?=1).


(b) The command preceding the ‘echo’ command ran without errors.
(c) The command preceding the ‘echo’ command did not function correctly.
(d) The command preceding the ‘echo’ command received one single parameter.
‫پاسخنامه‬
:1 ‫پاسخ سؤال‬
#
# My first shell script
#
clear
echo "first shell script"
:2 ‫پاسخ سؤال‬
#!/bin/bash
x=10 #NOT x = 10 no spaces
X=20 #variables are case sensitive
$y= #NULL variable
echo "x = $x"
echo "X = $X"
echo "y = $y"
:3 ‫پاسخ سؤال‬
string_null=""
string1="string1"
if [ $string_null -n ]
then
echo "not null string"
else
echo "null string"
fi

if [ $string_null -z ]
then
echo "null string"
else
echo "not null string"
fi

if [ "$string_null" == "$string1" ]
then
echo "strings equal"
else
echo "strings not equal"
fi

if [ "$string_null" != "$string1" ]
then
echo "strings not equal"
else
echo "strings equal"
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۲۰

fi
:4 ‫پاسخ سؤال‬
string_null=""
string1="string1"
if [ $string_null -n ]
then
echo "not null string"
else
echo "null string"
fi

if [ $string_null -z ]
then
echo "null string"
else
echo "not null string"
fi

if [ "$string_null" == "$string1" ]
then
echo "strings equal"
else
echo "strings not equal"
fi

if [ "$string_null" != "$string1" ]
then
echo "strings not equal"
else
echo "strings equal"
fi
:5 ‫پاسخ سؤال‬
#!/bin/bash

if test -s $1
then
echo "$1 not empty file"
fi

if test -f $1
then
echo "$1 normal file. Not a directory"
fi
if test -e $1
then
echo "$1 exists"
fi
۲۱ ‫پاسخنامه‬

if test -d $1
then
echo "$1 is directory and not a file"
fi

if test -r $1
then
echo "$1 is read-only file"
fi

if test -x $1
then
echo "$1 is executable"
fi
:6 ‫پاسخ سؤال‬
#!/bin/sh
#
# Script to see whether argument is positive or negative
#
if [ $# -eq 0 ]
then
echo "$0 : You must give/supply one integers"
exit 1
fi
if test $1 -gt 0
then
echo "$1 number is positive"
else
echo "$1 number is negative"
fi

:7 ‫پاسخ سؤال‬
#!/bin/sh
# Script to test if..elif...else
#
if [ $1 -gt 0 ]; then
echo "$1 is positive"
elif [ $1 -lt 0 ]
then
echo "$1 is negative"
elif [ $1 -eq 0 ]
then
echo "$1 is zero"
else
echo "Opps! $1 is not number, give number"
fi
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۲۲

:8 ‫پاسخ سؤال‬
#!/bin/bash
for i in 1 2 3 4 5
do
echo "Welcome $i times"
done
:9 ‫پاسخ سؤال‬
#!/bin/bash
#
#Script to test for loop
#
#
if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table for given number"
exit 1
fi
n=$1
for i in 1 2 3 4 5 6 7 8 9 10 #or for (( i=0;i<=10;i++ ))
do
echo "$n * $i = `expr $i \* $n`"
done
:10 ‫پاسخ سؤال‬
#!/bin/sh
#
#Script to test while statement
#
if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo " Use to print multiplication table for given number"
exit 1
fi
n=$1
i=1
while [ $i -le 10 ]
do
echo "$n * $i = `expr $i \* $n`"
i=`expr $i + 1`
done
:11 ‫پاسخ سؤال‬
sum()
{
۲۳ ‫پاسخنامه‬

if [ -z "$2" ]; then
echo $1
else
a=$1;
shift;
b=`sum $@`
echo `expr $a + $b`
fi
}
:12 ‫پاسخ سؤال‬
/bin/sh
echo "Name?"
read name
echo "Age?"
read age
echo "Hello $name, you are $age years old"
:13 ‫پاسخ سؤال‬
# Script to create simple menus and take action according to that selected
# menu item
#
while :
do
clear
echo "-------------------------------------"
echo " Main Menu "
echo "-------------------------------------"
echo "[1] Show Todays date/time"
echo "[2] Show files in current directory"
echo "[3] Show calendar"
echo "[4] Start editor to write letters"
echo "[5] Exit/Stop"
echo "======================="
echo -n "Enter your menu choice [1-5]: "
read yourch
case $yourch in
1) echo "Today is `date` , press a key..." ; read ;;
2) echo "Files in `pwd`" ; ls -l ; echo "Press a key..." ; read ;;
3) cal ; echo "Press a key..." ; read ;;
4) vi ;;
5) exit 0 ;;
*) echo "Opps!!! Please select choice 1,2,3,4, or 5";
echo "Press a key..." ; read ;;
esac
done
:14 ‫پاسخ سؤال‬
# This script displays the date, time, username and
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۲۴

# current directory.
echo "Date and time is:"
date
echo
echo "Your username is: `whoami` \n"
echo "Your current directory is: \c"
pwd
:15 ‫پاسخ سؤال‬
if [ $# -ne 1 -o ! -f $1 ]
then
echo "Usage: $0 FILENAME"
exit 1
fi

words=0
for a in $(cat $1)
do
# echo "["$a"]"
words=$((1+$words))
done

echo "Num of words is" $words


:16 ‫پاسخ سؤال‬
#!/bin/bash
echo -e "What directory would you like to back up?"
read directory
DESTDIR=
[email protected]:$directory/
rsync --progress -avze ssh --exclude="*.iso" $directory $DESTDIR
:17 ‫پاسخ سؤال‬
#!/bin/bash
PS3="Choose (1-5):"
echo "Choose from the list below."
select name in red green blue yellow magenta
do
break
done
echo "You chose $name."
:18 ‫پاسخ سؤال‬
secretNumber=$(( ((`date +%N` / 1000) % 100) +1 ))
guess=-1
while [ "$guess" != "$secretNumber" ]; do
echo -n "I am thinking of a number between 1 and 100. Enter your guess:"
read guess
if [ "$guess" = "" ]; then
echo "Please enter a number."
۲۵ ‫پاسخنامه‬

elif [ "$guess" = "$secretNumber" ]; then


echo -e "\aYes! $guess is the correct answer!"
elif [ "$secretNumber" -gt "$guess" ]; then
echo "The secret number is larger than your guess. Try again."
else
echo "The secret number is smaller than your guess. Try again."
fi
done
:19 ‫پاسخ سؤال‬
y=1
while [ $y -le 12 ]; do
x=1
while [ $x -le 12 ]; do
printf "% 4d" $(( $x * $y ))
let x++
done
echo ""
let y++
done
:20 ‫پاسخ سؤال‬
vflag=off
filename=
while getopts vf: opt
do
case "$opt" in
v) vflag=on;;
f) filename="$OPTARG";;
\?) # unknown flag
echo >&2 \
"usage: $0 [-v] [-f filename] [file ...]"
exit 1;;
esac
done
shift `expr $OPTIND - 1`
:21 ‫پاسخ سؤال‬
#!/bin/bash
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###
do
tot=`expr $i + $j`
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then
echo -e -n "\033[47m "
else
echo -e -n "\033[40m "
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۲۶

fi
done
echo -e -n "\033[40m" #### set back background colour to black
echo "" #### print the new line ###
done
:22 ‫پاسخ سؤال‬
#!/bin/bash
# Script to create simple menus and take action according to that selected
# menu item
while : do
clear
echo "-------------------------------------"
echo " Main Menu "
echo "-------------------------------------"
echo "[1] Show Todays date/time"
echo "[2] Show files in current directory"
echo "[3] Show calendar"
echo "[4] Start editor to write letters"
echo "[5] Exit/Stop"
echo "======================="
echo -n "Enter your menu choice [1-5]: "
read yourch
case $yourch in
1) echo "Today is `date` , press a key..." ; read ;;
2) echo "Files in `pwd`" ; ls -l ; echo "Press a key..." ; read ;;
3) cal ; echo "Press a key..." ; read ;;
4) vi ;;
5) exit 0 ;;
*) echo "Opps!!! Please select choice 1,2,3,4, or 5";
echo "Press a key..." ; read ;;
esac
done
:23 ‫پاسخ سؤال‬
dialog --title "Linux Dialog Utility Msgbox" --backtitle "Linux Shell Script\
Tutorial" --msgbox "This is dialog box called msgbox, which is used\
to show some information on screen which has also Ok button, Thanks to Savio Lam\
and Stuart Herbert to give us this utility. Press any key... " 9 50
:24 ‫پاسخ سؤال‬
$ cat > dia3
dialog --title "Alert : Delete File" --backtitle "Linux Shell Script\
Tutorial" --yesno "\nDo you want to delete '/usr/letters/date\
file" 7 60
sel=$?
case $sel in
0) echo "User select to delete file";;
1) echo "User select not to delete file";;
۲۷ ‫پاسخنامه‬

255) echo "Canceled by user by pressing [ESC] key";;


esac
:25 ‫پاسخ سؤال‬
dialog --title "Inputbox - To take input from you" --backtitle "Linux Shell\
Script Tutorial" --inputbox "Enter your name please" 8 60 2>/tmp/input.$$
sel=$?
na=`cat /tmp/input.$$`
case $sel in
0) echo "Hello $na" ;;
1) echo "Cancel is Press" ;;
255) echo "[ESCAPE] key pressed" ;;
esac
rm -f /tmp/input.$$
:26 ‫پاسخ سؤال‬
#!/bin/bash
# Counting the number of lines in a list of files
# for loop over arguments
# count only those files I am owner of
if [ $# -lt 1 ]
then
echo "Usage: $0 file ..."
exit 1
fi

echo "$0 counts the lines of code"


l=0
n=0
s=0
for f in $*
do
if [ -O $f ] # checks whether file owner is running the script
then
l=`wc -l $f | sed 's/^\([0-9]*\).*$/\1/'`
echo "$f: $l"
n=$[ $n + 1 ]
s=$[ $s + $l ]
else
continue
fi
done

echo "$n files in total, with $s lines in total"


:27 ‫پاسخ سؤال‬
#!/bin/bash
######################################################################
######
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۲۸

# Usage: loc7.sh [options] file ...


#
# Count the number of lines in a given list of files.
# Uses a for loop over all arguments.
#
# Options:
# -h ... help message
# -d n ... consider only files modified within the last n days
# -w n ... consider only files modified within the last n weeks
#
# Limitations:
#. only one option should be given; a second one overrides
######################################################################
######
help=0
verb=0
weeks=0
# defaults
days=0
m=1
str="days"
getopts "hvd:w:" name
while [ "$name" != "?" ] ; do
case $name in
h) help=1;;
v) verb=1;;
d) days=$OPTARG
m=$OPTARG
str="days";;
w) weeks=$OPTARG
m=$OPTARG
str="weeks";;
esac
getopts "hvd:w:" name
done

if [ $help -eq 1 ]
then no_of_lines=`cat $0 | awk 'BEGIN { n = 0; } \
/^$/ { print n; \
exit; } \
{ n++; }'`
echo "`head -$no_of_lines $0`"
exit
fi

shift $[ $OPTIND - 1 ]

if [ $# -lt 1 ]
۲۹ ‫پاسخنامه‬

then
echo "Usage: $0 file ..."
exit 1
fi

if [ $verb -eq 1 ]
then echo "$0 counts the lines of code"
fi
l=0
n=0
s=0
for f in $*
do
x=`stat -c "%y" $f`
# modification date
d=`date --date="$x" +%y%m%d`
# date of $m days/weeks ago
e=`date --date="$m $str ago" +%y%m%d`
# now
z=`date +%y%m%d`
#echo "Stat: $x; Now: $z; File: $d; $m $str ago: $e"
# checks whether file is more recent then req
if [ $d -ge $e -a $d -le $z ] # ToDo: fix year wrap-arounds
then
# be verbose if we found a recent file
if [ $verb -eq 1 ]
then echo "$f: modified (mmdd) $d"
fi
# do the line count
l=`wc -l $f | sed 's/^\([0-9]*\).*$/\1/'`
echo "$f: $l"
# increase the counters
n=$[ $n + 1 ]
s=$[ $s + $l ]
else
# not strictly necessary, because it's the end of the loop
continue
fi
done

echo "$n files in total, with $s lines in total"


:28 ‫پاسخ سؤال‬
if test $# = 0
then
echo "Usage $0: <program>" 1>&2
exit 1
fi
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۳۰

for program in "$@"


do
program_found=''
for directory in `echo "$PATH" | tr ':' ' '`
do
f="$directory/$program"
if test -x "$f"
then
ls -ld "$f"
program_found=1
fi
done
if test -z $program_found
then
echo "$program not found"
fi
done
:29 ‫پاسخ سؤال‬
if test $# = 0
then
echo "Usage $0: <files>" 1>&2
exit 1
fi
for filename in "$@"
do
new_filename=`echo "$filename" | tr A-Z a-z`
test "$filename" = "$new_filename" && continue
if test -r "$new_filename"
then
echo "$0: $new_filename exists" 1>&2
elif test -e "$filename"
then
mv "$filename" "$new_filename"
else
echo "$0: $filename not found" 1>&2
fi
done
:30 ‫پاسخ سؤال‬
#!/bin/bash
i=1
names="npardis mtaheri nirandoost"
for userlist in $names
do
useradd $userlist
echo password | passwd --stdin $userlist
done
۳۱ ‫پاسخنامه‬

:31 ‫پاسخ سؤال‬


:1
#vim userlist
senthil
babu
kumar
ravi
ragu
:wq!
:2
#!/bin/bash
i=1
for username in `awk -F: '{print $1}' /root/Desktop/userlist`
do
useradd $username
echo "password" | passwd --stdin $username
done
:32 ‫پاسخ سؤال‬
#!/bin/bash
i=1
cd /home
for remove in *
do
userdel -rf $remove
echo "sucessfully removed user $remove "
done
:33 ‫پاسخ سؤال‬
#!/bin/bash
echo "Enter number range : "
read num
for ((e=0, o=1; e<=$num, o<=$num; e=e+2, o=o+2))
do
echo "ODD Number: $o EVEN Number: $e"
done
:34 ‫پاسخ سؤال‬
#!/bin/bash
i=1
for (( ; ; ))
do
sleep $i
echo "Number: $((i++))"
done
:35 ‫پاسخ سؤال‬
#!/bin/bash
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۳۲

echo "Enter Folder Name under which you want to remove files:";
read fname
echo "Enter the pattern to remove (for eg, if swap files give as *~ else if thumbs.db
give as Thumbs.db)";
read name1
echo "Total Count of files found on the pattern" $name1;
find $fname -type f -name "$name1" | xargs wc -l
find $fname -type f -name "$name1" -exec rm {} \;
:36 ‫پاسخ سؤال‬
############################
function trap_exit
{
# Tell the co-process to break out of the loop
BREAK_OUT=’Y’
print -p $BREAK_OUT # Use "print -p" to talk to the co-process
}
############################
function proc_watch
{
# This function is started as a co-process!!!
while : # Loop forever
do
Some Code Here
read $BREAK_OUT # Do NOT need a "-p" to read!
if [[ $BREAK_OUT = ’Y’ ]]
then
return 0
fi
done
}
############################
##### Start of Main ########
############################
### Set a Trap ###
trap ’trap_exit; exit 2’ 1 2 3 15
TOTAL_SECONDS=300
BREAK_OUT=’N’
proc_watch |& # Start proc_watch as a co-process!!!!
PW_PID=$1 # Process ID of the last background job
until (( TOTAL_SECONDS == 0 ))
do
(( TOTAL_SECONDs = TOTAL_SECONDS - 1 ))
sleep 1
done
BREAK_OUT=’Y’
# Use "print -p" to communicate with the co-process variable
print -p $BREAK_OUT
kill $PW_PID # Kill the background co-process
۳۳ ‫پاسخنامه‬

exit 0
:37 ‫پاسخ سؤال‬
function ping_host
{
HOST=$1 # Grab the host to ping from ARG1.
PING_COUNT=3
PACKET_SIZE=54
# This next case statement executes the correct ping
# command based on the Unix flavor
case $(uname) in
AIX|OpenBSD|Linux)
ping -c${PING_COUNT} $HOST 2>/dev/null
;;
HP-UX)
ping $HOST $PACKET_SIZE $PING_COUNT 2>/dev/null
;;
SunOS)
ping -s $HOST $PACKET_SIZE $PING_COUNT 2>/dev/null
;;
*)
echo "\nERROR: Unsupported Operating System - $(uname)"
echo "\n\t...EXITING...\n"
exit 1
esac
}
:38 ‫پاسخ سؤال‬
#!/bin/Bash
#
# SCRIPT: generic_rsync.Bash
# AUTHOR: Randy Michael
# DATE: 11/18/2007
# REV: 1.0
# PURPOSE: This is a generic shell script to copy files
# using rsync.
#
# set -n # Uncomment to check script syntax without execution
# set -x # Uncomment to debug this script
#
# REV LIST:
#
#
##############################################
# DEFINE FILES AND VARIABLES HERE
##############################################
# Define the source and destination files/directories
SOURCE_FL="/scripts/"
DESTIN_FL="booboo:/scripts"
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۳۴

##############################################
# BEGINNING OF MAIN
##############################################
# Start the rsync copy
rsync -avz "$SOURCE_FL" "$DESTIN_FL"
# End of generic_rsync.Bash
:39 ‫پاسخ سؤال‬
#!/bin/bash
#Filename: remove_duplicates.sh
#Description: Find and remove duplicate files and keep one sample of
each file.
ls -lS | awk 'BEGIN {
getline;getline;
name1=$8; size=$5
}
{ name2=$8;
if (size==$5)
{
"md5sum "name1 | getline; csum1=$1;
"md5sum "name2 | getline; csum2=$1;
if ( csum1==csum2 )
{print name1; print name2 }
};
size=$5; name1=name2;
}' | sort -u > duplicate_files
cat duplicate_files | xargs -I {} md5sum {} | sort | uniq -w 32 | awk
'{ print "^"$2"$" }' | sort -u > duplicate_sample
echo Removing..
comm duplicate_files duplicate_sample -2 -3 | tee /dev/stderr | xargs
rm
echo Removed duplicates files successfully.
:40 ‫پاسخ سؤال‬
#Filename: silent_grep.sh
#Description: Testing whether a file contain a text or not
if [ $# -ne 2 ];
then
echo "$0 match_text filename"
fi
match_text=$1
filename=$2
grep -q $match_text $filename
if [ $? -eq 0 ];
then
echo "The text exists in the file"
else
echo "Text does not exist in the file"
fi
۳۵ ‫پاسخنامه‬

:‫نحوه اجرا‬
$./silent_grep.sh Student student_data.txt
The text exists in the file
:41 ‫پاسخ سؤال‬
#!/bin/bash
#Filename: ping.sh
# Change base address 192.168.0 according to your network.
for ip in 192.168.0.{1..255} ;
do
ping $ip -c 2 &> /dev/null ;
if [ $? -eq 0 ];
then
echo $ip is alive
fi
done
:‫نحوه اجرا‬
$./ping.sh
192.168.0.1 is alive
192.168.0.90 is alive
:42 ‫پاسخ سؤال‬
#!/bin/bash
#Filename: ftp.sh
#Automated FTP transfer
HOST='domain.com'
USER='foo'
PASSWD='password'
ftp -i -n $HOST <<EOF
user ${USER} ${PASSWD}
binary
cd /home/slynux
puttestfile.jpg
getserverfile.jpg
quit
EOF
:43 ‫پاسخ سؤال‬
#!/bin/bash
#Filename: uptime.sh
#Description: Uptime monitor
IP_LIST="192.168.0.1 192.168.0.5 192.168.0.9"
USER="test"
for IP in $IP_LIST;
do
utime=$(ssh $USER@$IP uptime | awk '{ print $3 }' )
echo $IP uptime: $utime
done
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۳۶

:‫نحوه اجرا‬
$./uptime.sh
۱۹۲.۱۶۸.۰.۱uptime: 1:50.
۱۹۲.۱۶۸.۰.۵uptime: 2:15.
۱۹۲.۱۶۸.۰.۹uptime: 10:15.
:44 ‫پاسخ سؤال‬
#!/bin/bash
#Filename: top10_commands.sh
#Description: Script to list top 10 used commands
printf "COMMAND\tCOUNT\n" ;
cat ~/.bash_history | awk '{ list[$1]++; } \
END{
for(i in list)
{
printf("%s\t%d\n",i,list[i]); }
}'| sort -nrk 2 | head
:‫نحوه اجرا‬
./top10_commands.sh
COMMAND COUNT
ping 80
ls 56
cat 35
ps 34
sudo 26
du 26
cd 26
ssh 22
sftp 22
clear 21
:45 ‫پاسخ سؤال‬
#!/bin/bash
#Name: pcpu_usage.sh
#Description: Script to calculate cpu usage by processes for 1 hour
SECS=3600
UNIT_TIME=60
#Change the SECS to total seconds for which monitoring is to be
performed.
#UNIT_TIME is the interval in seconds between each sampling
STEPS=$(( $SECS / $UNIT_TIME ))
echo Watching CPU usage... ;
for((i=0;i<STEPS;i++))
do
ps -eo comm,pcpu | tail -n +2 >> /tmp/cpu_usage.$$
sleep $UNIT_TIME
۳۷ ‫پاسخنامه‬

done
echo
echo CPU eaters :
cat /tmp/cpu_usage.$$ | \
awk '
{ process[$1]+=$2; }
END{
for(i in process)
{
printf("%-20s %s",i, process[i] ;
}
}' | sort -nrk 2 | head
rm /tmp/cpu_usage.$$
#Remove the temporary log file
:‫نحوه اجرا‬
$./pcpu_usage.sh
Watching CPU usage...
CPU eaters :
Xorg 20
firefox-bin 15
bash 3
evince 2
pulseaudio 1.0
pcpu.sh 0.3
wpa_supplicant 0
wnck-applet 0
watchdog/0 0
usb-storage 0
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۳۸‬‬

‫‪46. a‬‬
‫‪47. a c‬‬
‫‪48. c‬‬
‫‪49. a‬‬
‫‪50. c‬‬
‫‪51. b‬‬
‫‪52. a‬‬
‫‪53. a d‬‬
‫‪54. e‬‬
‫‪55. c‬‬
‫‪56. a‬‬
‫‪57. a d‬‬
‫‪58. d‬‬
‫‪59. a‬‬
‫‪60. a‬‬
‫‪61. e‬‬
‫‪62. e‬‬
‫‪63. c‬‬
‫‪64. c‬‬
‫‪65. c‬‬
‫مجموعه نمونه سؤاالت‬
‫(حل این سؤاالت برعهده دانشجو میباشد که اکثر پاسخها در این مجموعه ارائهه شهده‬
‫است)‬
‫سؤال ‪ :1‬برنامهای بنویسید که اگر ‪ ۹۰‬درصد حافظه پر شد نامهای به مدیر سیستم ارسال نماید‪.‬‬
‫سؤال ‪ :2‬برنامهای بنویسید که معماری پردازنده کامپیوتر را نمایش دهد‪( .‬از دستور ‪ case‬استفاده‬
‫شود)‪ .‬همچنین تعداد پردازندههای کامپیوتر را نیز نمایش دهید‪.‬‬
‫سؤال ‪ :3‬فرض کنید که کلید ‪ Bk Sp‬خراب شده است‪ .‬برنامهای بنویسید که یک نام را بخواند و‬
‫اگر کاربر از حرف ‪ #‬در صورت تایپ اشتباه حروف نام خود بجای‪ Bk Sp‬استفاده نماید‪.‬‬
‫سؤال ‪ :4‬تفاوت بین دو دستور ‪ $command date‬و ‪ $date‬چیست؟‬
‫سؤال ‪ :5‬چه کنیم که پیام ‪ command not found‬در قبال فرمان ناشناختهای که وارد میشود‬
‫تغییر یابد‪.‬‬
‫سؤال ‪ :6‬برنامهای بنویسید که نام کاربری را ساال کند و مجموع زمان اتصال کاربر به سرور را‬
‫نمایش دهد‬
‫سؤال ‪ :7‬برنامهای بنویسید که یک نام و اندازه بر حسب بایت را از کاربردریافت کند و فایلی با نام و‬
‫اندازه داده شده تولید نماید‪.‬‬
‫نکته‪ :‬اگر فایل وجود دارد ساال کند که آیا آنرا پاک کند‪.‬‬
‫کاربرد‪ :‬در تولید فایلهای پایگاه اطالعاتی‬
‫سؤال ‪ :8‬برنامهای بنویسید که چند فرمان از کاربر دریافت کند و آن را در یک فایل قرار دهد و‬
‫سپس فایل را اجرا نماید و در نهایت فایل را پاک کند‪.‬‬
‫سؤال ‪ :9‬برنامهای بنویسید و نام آنرا ‪ demo‬قرار دهید که فقط تاریخ را نمایش دهد و اگر کاربری‬
‫نام برنامه را عوض کرد پیغام ‪ Date Not Available‬را نمایش دهد‪.‬‬
‫کاربرد‪ :‬کنترل نمودن نام فرمانهای چند منظوره‬
‫پس از‪crash‬‬ ‫سؤال ‪ :10‬برنامهای بنویسید که فایل ‪ /etc/fstab‬را بخواند و بگوید کدام فایل سیستم‬
‫شدن سیستم بوسیله ‪ fsck‬تست خواهد شد‪ .‬همچنین تعداد فایل سیستمهائی که قرار است‬
‫کنترل شوند را نمایش دهید‪.‬‬
‫سؤال ‪ :11‬برنامهای بنویسید که اگر یکی از فایل سیستمهای ‪ /home‬و یا ‪ ۹۰ /tmp‬درصد پر شد‬
‫نامهای به مدیر سیستم ارسال نماید‬
‫سؤال ‪ :12‬برنامهای بنویسید که ‪ ۲‬فرمان از کاربر دریافت کند و آن را در یک فایل قرار دهد و‬
‫در نهایت پاک نماید‪.‬‬ ‫سپس فایل را ایجاد و‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۴۰‬‬

‫سؤال ‪ :13‬برنامهای بنویسید که یک عدد ‪ HEXA DECIMAL‬را خوانده و معادل عدد را در‬
‫مبنای ‪ DECIMAL‬نمایش دهد‪ .‬غیرعددی بودن ورودی کنترل گردد‪.‬‬
‫سؤال ‪ :14‬برنامهای بنویسید تا نام کاربری را که بیشترین اتصال به سرور را داشته است به آدرس‬
‫پستی ‪ admin‬ارسال نماید‪.‬‬
‫سؤال ‪ :15‬برنامهای بنویسید که از فایل ‪ namef‬که شامل نام‪ ،‬نام خانوادگی و نمره دانشجو می‬
‫باشد‪ ،‬میانگین نمرات دانشجویان را تا دو رقم اعشار محاسبه و به آدرس پستی ‪ admin‬ارسال‬
‫نماید‪.‬‬
‫سؤال ‪ :16‬برنامهای به نام ‪ News‬بنویسید که به محض ورود کاربر به سیستم‪ ،‬آخرین اخبار را‬
‫نمایش دهد‪ .‬محل قرارگیری برنامه در سیستم نمایش داده شود‪.‬‬
‫سؤال ‪ :17‬برنامهای بنویسید که نام یک ‪ userid‬را پرسیده و تعداد پروسس هائی که تحت این‬
‫‪ userid‬در حافظه وجود دارد را بشمرد و اگر تعداد پروسسها بیشتر از ‪ ۱۰‬بود پیامی برای او صادر‬
‫شود‪.‬‬
‫سؤال ‪ :18‬برنامهای بنویسید که اعداد یک الی بیست را بجز اعداد ‪ ۳‬و ‪ ۱۱‬نمایش دهد‪.‬‬
‫سؤال ‪ :19‬برنامهای بنویسید که نام فایلی را از کاربر دریافت کند و اگر فایل وجود داشت در ابتدای‬
‫فایل‪ ،‬لغت ‪ start‬و در انتهای فایل‪ ،‬لغت ‪ stop‬را اضافه نماید‬
‫سؤال ‪ :20‬برنامهای بنویسید که هر نیم ساعت یکبارفایل ‪ /var/log/messages‬را کنترل نموده و‬
‫اگر پیامهای اضافه شده بیش از ‪ ۵۰‬خط بود آنرا به آدرس پستی ‪ admin‬ارسال نماید‪.‬‬
‫بخش اول‪ :‬نصب (‪)Installation‬‬
‫سوأل ‪ :1‬در طول نصب لینوکس یک پارتیشن ‪ swap‬ایجاد میشود‪ .‬چرا به این پارتیشن‬
‫نیاز میباشد و تفاوت آن با فایل ‪ swap‬ویندوز چیست؟‬
‫پاسخ‪ :‬همانند ویندوز‪ ،‬لینوکس مقدار فضای مشخصی را برای نگهداری برنامههای موقت هنگامی‬
‫که ‪ RAM‬فضای کافی نداشته باشد استفاده میکند‪ ،‬به طور معمول آخرین برنامه استفاده شده از‬
‫حافظه بر روی یک فایل در هارد دیسک کپی میشود‪ ،‬به طور همزمان آخرین برنامه جاری به آن‬
‫مکان منتقل میشود و اولین برنامه از حافظه بیرون رانده میشود‪ .‬این فایل در ویندوز یا ‪OS/2‬‬
‫یک فایل ‪ swap‬نام دارد که در لینوکس ””‪ swap space‬میباشد اما همانند موارد قبل‪ ،‬شکلی از‬
‫یک فایل داده است که وظیفه خواندن و نوشتن دادهها را در حین اجرای برنامههای سیستم شما‬
‫را به عهده دارد‪.‬‬
‫ویندوز فایل ‪( swap‬یک فایل سیستم پنهان با نامهای متفاوت برای نسخههای مختلف ویندوز) را‬
‫در پارتیشن داده ‪ bootable‬بطور پیش فرض قرار میدهد‪.‬‬
‫‪ OS/2‬نیز به شکل مشابه عمل میکند اما با تغییر فایل ‪ CONFIG.SYS‬یک کاربر میتواند فایل‬
‫‪ swap‬را در هر دایرکتوری در هر پارتیشنی بر روی هر درایوی که دوست دارد قرار دهد‪ .‬لینوکس‪،‬‬
‫به طور پیش فرض‪ ،‬نیازمند یک پارتیشن ‪ swap‬ویژه برای ذخیرهسازی فایل ‪ swap‬دارد‪.‬‬
‫‪Extended‬‬ ‫سوأل ‪ :2‬در طول نصب‪ ،‬گزینه ایجاد ‪ swap‬در یک پارتیشن ‪ primary‬یا‬
‫وجود دارد‪ .‬کدامیک باید انتخاب شود؟‬
‫پاسخ‪ :‬هر دو را می توان انتخاب کرد‪ .‬هیچگونه مزیت فنی وجود ندارد اما تنها محدودیت تعداد‬
‫پارتیشنهای ‪ primary‬که میتوان ایجاد کرد وجود دارد‪ ،‬بنابراین اگر قصد نصب بیش از یک‬
‫سیستم عامل دارید بهتر است که ‪ swap‬را بر روی پارتیشن ‪ Extended‬نصب کنید و پارتیشن‬
‫‪ primay‬را برای سایر کاربردها حفظ کنید‪.‬‬
‫سوأل ‪ :3‬فضای مربوط به پارتیشن ‪ swap‬چقدر باید در نظر گرفته شود؟‬
‫پاسخ‪ :‬اگر چه این فضا می تواند کمتر باشد‪ ،‬اما برای بهترین نتیجه‪ ،‬اندازه پارتیشن باید حداقل‬
‫برابر مقدار حافظه نصب شده بر روی سیستم باشد‪ ،‬ترجیحاً دو برابر مقدار حافظه فیزیکی؛ به‬
‫عبارت دیگر اگر حافظه ‪ RAM‬شما ‪ 64MB‬میباشد مقدار پارتیشن ‪ swap‬خود را دو برابر آن‬
‫یعنی ‪ 128MB‬قرار دهید‪.‬‬
‫اگر نیازمند فضای بیش از ‪ 128MB‬هستید اما از توزیعهای قدیمیتر استفاده میکنید فایل ‪swap‬‬
‫بزرگتر از ‪ 128MB‬را پشتیبانی نمیکند‪ ،‬برای این منظور ‪ ۲‬روش وجود دارد که فایل ‪swap‬‬
‫بزرگتر از ‪ 128MB‬را ایجاد کنید‪:‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۴۲‬‬

‫‪ )۱‬لینوکس امکان ایجاد بیش از یک پارتیشن ‪ swap‬را بر روی یک درایو فراهم‬


‫میسازد‬
‫‪ )۲‬لینوکس همچنین امکان قرار دادن فایلهای ‪ swap‬در پارتیشنهای داده را فراهم‬
‫میسازد‪.‬‬
‫سوأل ‪ :4‬چگونه میتوان کارایی را با استفاده از پارتیشنهای ‪ swap‬چندگانه افزایش‬
‫داد؟‬
‫پاسخ‪ :‬اگر سیستم شما چندین درایو دارد آرایه ‪ RAIDO‬را راهاندازی کنید‪ ،‬این موضوع موجب‬
‫گسترش دادهها در طول تمامی درایوهای موازی به طور خودکار میشود‪ ،‬به طور شگفتانگیز‬
‫باعث افزایش سرعت نوشتن دیسک در مقایسه با نصب حالت بدون ‪ RAID‬خواهد شد‪ .‬البته‪ ،‬هر‬
‫فردی توانایی نصب ‪ RAID‬را ندارد‪ :‬خوشبختانه یک حالت جایگزین وجود دارد که مزایای افزایش‬
‫کارایی مشابه را در یک محیط چند دیسکی ایجاد میکند‪.‬‬
‫یک روش برای موازیسازی فایل خواندن‪/‬نوشتن ‪ swap‬از طریق استفاده از تنظیمات اولویت در‬
‫فایل ‪ /etc/fstab‬وجود دارد‪( .‬نکته‪ :‬این موضوع با درایوهای ‪ SCSI‬و کنترلها بهتر کار میکند‪).‬‬
‫روش دوم‪ ،‬استفاده از یک ابزار مناسب (همانند ‪ )Kfstab‬برای باز کردن فایل ‪ /etc/fstab‬است‪ .‬این‬
‫فایل پارتیشنهای استفاده شده توسط لینوکس شامل ‪ swap‬را لیست میکند‪.‬‬
‫هنگام باز کردن ‪ fstab‬اگر چندین درایو ‪ SCSI‬همراه با پارتیشن ‪ swap‬در هر کدام داشته باشید‬
‫چیزی شبیه زیر را مشاهده خواهید کرد‪:‬‬
‫‪<partition <mount <partition <mount <backup‬‬
‫>‪name‬‬ ‫>‪point> type‬‬ ‫>‪options> dump> <pass‬‬
‫‪/dev/sda2 none swap‬‬ ‫‪sw‬‬ ‫‪0 0‬‬
‫‪/dev/sdb2 none swap‬‬ ‫‪sw‬‬ ‫‪0 0‬‬
‫‪/dev/sdc2 none swap‬‬ ‫‪sw‬‬ ‫‪0 0‬‬
‫‪/dev/sdd2 none swap‬‬ ‫‪sw‬‬ ‫‪0 0‬‬
‫‪ /dev/sda2‬به عنوان ‪ swap‬و سپس ‪ /dev/sdb2‬استفاده‬ ‫در حالت نرمال‪ ،‬لینوکس از پارتیشن‬
‫خواهد کرد؛ به عبارت دیگر اگر تنظیمات را به شکل زیر تغییر دهید‪:‬‬
‫‪/dev/sda2 none swap sw,pri=3 0 0‬‬
‫‪/dev/sdb2 none swap sw,pri=3 0 0‬‬
‫‪/dev/sdc2 none swap sw,pri=3 0 0‬‬
‫‪/dev/sdd2 none swap sw,pri=1 0 0‬‬
‫میتوانید ‪ ۳‬پارتیشن اول را با همان اولویت سطح ‪ _ a‬باالتر از پارتیشن چهارم قرار دهید‪ .‬این‬
‫موضوع موجب میشود که لینوکس مجبور به نوشتن بر روی اولین ‪ ۳‬پارتیشن به طور موازی شود‪.‬‬
‫پارتیشن چهارم در صورت پر شدن ‪ ۳‬پارتیشن اول مورد استفاده واقع خواهد شد‪.‬‬
‫سوأل ‪ :5‬چگونه میتوان چندین پارتیشن ‪ swap‬را بر روی یک یا چند درایو ایجاد کرد؟‬
‫پاسخ‪ :‬برای ایجاد چندین پارتیشن ‪:swap‬‬
‫‪۴۳‬‬ ‫بخش اول‪ :‬نصب (‪)Installation‬‬

‫‪ .۱‬ابتدا دستور ‪ SU -‬را بر روی ورود به عنوان کاربر ‪ root‬استفاده کنید‪.‬‬


‫‪ .۲‬دستور ‪ fdisk /dev/hda‬را وارد کنید (در صورتی که درایو هارد بوت ‪ IDE‬باشد)‬
‫یا ‪( fdisk /dev/sda‬در صورتی که درایو هارد بوت ‪ SCSI‬باشد‪).‬‬
‫‪ .۳‬پس از مشاهده ‪:prompt‬‬
‫‪ .a‬تایپ کنید‪ .p :‬برای مشاهده پارتیشنهای جاری‪ ،‬شماره نمایش داده شده در‬
‫انتهای هر ستون برای آخرین سیلندر لیست شده را بررسی کنید‪ ،‬اگر این شماره کمتر‬
‫از شماره سیلندر مرحله ‪ ۲‬باشد‪ ،‬محلی برای پارتیشن دیگر محسوب میشود‪ .‬تفاوت‬
‫بین دو شماره نشان دهنده میزان فضای موجود برای استفاده است‪.‬‬
‫‪ .b‬اگر پارتیشن ‪ swap‬ای وجود دارد که فضای کافی ندارد دستور ‪ d‬را تایپ کنید‪.‬‬
‫(به معنای ‪.)delete‬‬
‫‪ N .c‬را برای ایجاد پارتیشن جدید تایپ کنید‪.‬‬
‫‪ .d‬اگر در حال ایجاد پارتیشن ‪ primary‬هستید‪:‬‬
‫‪ P‬را برای ایجاد این پارتیشن تایپ کنید‪.‬‬ ‫‪.۱‬‬
‫شماره پیشنهاد شده برای اولویت سیلندر را وارد کنید (باید یکی باالتر از‬ ‫‪.۲‬‬
‫آخرین سیلندر باشد‪).‬‬
‫ال ‪.+128MB‬‬ ‫اندازه پارتیشن را به مگابایت وارد کنید‪ .‬مث ً‬ ‫‪.۳‬‬
‫مجدداً ‪ P‬را برای تأیید پارتیشن جدید ایجاد شده وارد کنید‪ .‬باید شماره ‪ID‬‬ ‫‪.۴‬‬
‫‪ ۸۳‬و نوع سیستم لینوکس را نمایش دهد‪.‬‬
‫‪ t‬را برای تغییر نوع پارتیشن وارد کنید‪.‬‬ ‫‪.۵‬‬
‫اگر قصد ایجاد پارتیشن ‪ Extended‬را دارید‪:‬‬ ‫‪.e‬‬
‫‪ E‬را برای ایجاد پارتیشن تایپ کنید‪.‬‬ ‫‪.۱‬‬
‫شماره پیشنهاد شده برای اولین سیلندر را وارد کنید (باید یکی باالتر از‬ ‫‪.۲‬‬
‫آخرین سیلندر باشد‪).‬‬
‫‪ Enter‬را برای نمایش تمامی فضاهای موجود فشار دهید‪.‬‬ ‫‪.۳‬‬
‫‪ P‬را مجدداً برای تأیید پارتیشن ‪ Extended‬جدید وارد کنید‪.‬‬ ‫‪.۴‬‬
‫‪ t‬را برای تغییر نوع پارتیشن وارد کنید‪.‬‬ ‫‪.۵‬‬
‫‪ n.۶‬را برای ایجاد یک پارتیشن جدید تایپ کنید‪.‬‬
‫‪ t‬را برای تغییر نوع پارتیشن وارد کنید‪.‬‬ ‫‪.۷‬‬
‫درصورتی که تمامی فضاهای پارتیشن موجود در مرحله ‪ ۶‬را استفاده‬ ‫‪.۸‬‬
‫نکردهاید‪ ،‬یک یا بیشتر پارتیشن اضافی را برای نگهداری دادهها ایجاد کنید‪.‬‬
‫برای اعمال تغییرات بر روی هارد دیسک و خروج از برنامه‪ w :‬را تایپ کنید‪.‬‬ ‫‪.f‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۴۴‬‬

‫‪ .۴‬هنگام بازگشت به پنل انتخاب هارد دیسک‪ ،‬تغییرات ‪ no further‬را انتخاب کنید‪.‬‬
‫‪ .۵‬مراحل ‪ ۲‬تا ‪ ۴‬را برای هر هارد دیسک اضافی که میخواهید پارتیشن ‪ swap‬را در‬
‫آن بیفزایید تکرار کنید‪.‬‬
‫سوأل ‪ :6‬چگونه یک فایل ‪ swap‬را در یک پارتیشن داده لینوکس موجود میتوان ایجاد‬
‫کرد؟‬
‫پاسخ‪ :‬اگر به هر دلیلی نمیتوانید یا نمیخواهید پارتیشنهای ‪ swap‬لینوکس را ایجاد کنید یا‬
‫‪swap‬‬ ‫اینکه فضای کافی برای استفاده از یک پارتیشن ‪ swap‬جدید ندارید‪ ،‬امکان ایجاد فایلهای‬
‫با پارتیشنهایی که در حال حاضر برنامهها را نگهداری میکنند وجود دارد‪ .‬شما میتوانید بیش از‬
‫‪ ۸‬فایل ‪ swap‬در صورت نیاز ایجادکنید‪ .‬لینوکس داده ‪ swap‬شده را بین این فایلها تقسیمبندی‬
‫میکند‪.‬‬
‫برای ایجاد یک فایل ‪ swap‬در یک پارتیشن ‪ ،data‬دستور مشابه زیر را استفاده کنید‪.‬‬
‫>‪dd if=/dev/zero of=<swap path> bs=<size> count=<size‬‬
‫به عنوان مثال‪:‬‬
‫‪dd if=/dev/zero of=/Swapdir/Swapfile bs=1024 count=65536‬‬
‫‪ swap‬استفاده میشود‪ .‬پارامتر =‪ if‬منبع فایل ورودی برای ایجاد فایل‬ ‫دستور ‪ dd‬برای ایجاد فایل‬
‫‪ swap‬را تعیین میکند =‪ of‬جایی است که مسیر خروجی فایلی که میخواهید ایجاد شود را‬
‫مشخص میکند‪ bs= ،‬اندازه بلوک برای استفاده و =‪ count‬جایی است که میزان فایل ‪ swap‬را‬
‫تعیین میکند‪.‬‬
‫مرحله بعد‪ ،‬شناسایی فایل ‪ swap‬میباشد برای این منظور دستور زیر را بکار برید‪:‬‬
‫‪mkswap /Swapdir/Swapfile 65536‬‬
‫پس از شناساندن فایل‪ ،‬همزمان سازی جهت اطمینان از نوشتن بر روی یک فایل انجام میشود‪:‬‬
‫‪Sync‬‬
‫و در نهایت‪ ،‬اشاره به لینوکس برای شروع استفاده از این فایل ‪ swap‬جدید‬
‫‪swapon /Swapdir/Swapfile‬‬
‫این دستور فایل ‪ swap‬را به طور موقت فعال میکند‪.‬‬
‫سوأل ‪ :7‬من یک فایل ‪ swap‬بسیار بزرگ در پارتیشن ویندوزی خود دارم؛ بنابراین‪،‬‬
‫امکان اشاره به مسیر فایل ‪ swap‬ویندوز در لینوکس بجای ایجاد فایل دیگر وجود دارد؟‬
‫پاسخ‪ :‬بله اگر چه لینوکس در استفاده از قالب دادههای فضای ‪ swap‬بسیار دقیق میباشد؛‬
‫بنابراین‪ ،‬امکان اشاره به مسیر فایل ‪ swap‬ویندوز در لینوکس وجود دارد‪( .‬همانگونه که در‬
‫سوأالت باال اشاره شد‪).‬‬
‫روش دیگر موجود‪ ،‬اشتراکگیاری فضای ‪ swap‬توسط هر دو سیستم عامل است‪.‬‬
‫بخش دوم‪ :‬مهاجرت از ویندوز )‪(Migration from Windows‬‬
‫‪Bookmark‬‬ ‫سوأل ‪ :8‬چگونه میتوان ‪ NetScape‬را در لینوکس جهت شناسایی فایلهای‬
‫ویندوز استفاده کرد؟‬
‫پاسخ‪ :‬برای بهترین نتیجه‪ ،‬از نسخه مشابه بر روی هر دو سیستم استفاده کنید‪ .‬از ‪ xfind‬یا مشابه‬
‫برای تعیین محل فایل ‪ Bookmark‬پیشفرض استفاده کنید‪ .‬آن باید در دایرکتوری به نام‬
‫‪ /home/username/.netscape‬موجود باشد‪ ،‬اگر امکان کپی کردن فایل ‪ Bookmark.htm‬از ویندوز‬
‫بر روی دیسک و سپس دایرکتوری مناسب لینوکس باشد ‪ netscape‬خود را راهاندازی مجدد کنید‪.‬‬
‫اگر فایل ‪ Bookmark‬را نشناخت مشکل در نام آن میباشد که باید فایل ‪ bookmark.htm‬به‬
‫‪ bookmarks.html‬تغییر یابد‪:‬‬
‫ابتدا‪ ،‬فایل ‪ bookmark.htm‬را از سیستم ویندوز کپی کنید‪ .‬اگر از فالپی‪ ،‬دیسک یا سایر رسانهها‬
‫استفاده میکنید‪ ،‬می توانید فایل را بر روی دیسک پیش از کپی کردن بر روی سیستم لینوکسی‬
‫تغییر نام دهید‪.‬‬
‫بر روی کامپیوتر لینوکسی ‪ KDE‬میتوان فایل را در دایرکتوری ‪ /home/username/.netscape‬با‬
‫استفاده از مدیر فایل ‪ K‬کپی کند‪ .‬کاربران ‪ Gnome‬میتوانند از مدیر فایل ‪ Gnome‬استفاده کنند‪.‬‬
‫اگر کار با خط فرمان را ترجیح میدهید از دستور زیر استفاده کنید‪:‬‬
‫‪cp /dev/fd0/bookmarks.html /home/yourusername/.netscape‬‬
‫به عنوان مثال جایگزین‪ ،‬می توانید مراحل کپی کردن و تغییر نام را ترکیب کنید با استفاده از‬
‫دستور زیر‪:‬‬
‫‪Mv /dev/fd0/bookmark.htm /home/yourusername/.netscape/bookmarks.html‬‬
‫سوأل ‪ :9‬آیا برنامههای لینوکسی برای خواندن و نوشتن فایلهای مایکروسافت آفیس‬
‫وجود دارد؟‬
‫پاسخ‪ :‬بله‪ .‬نرمافزارهای مشابه این نرمافزار‪ star office ،‬و ‪ openoffice‬میباشند که فایلهای‬
‫مایکروسافت آفیس را میتوانند بخوانند و در صورت نیاز تغییراتی در آن اعمال کرد‪.‬‬

‫بخش سوم‪ :‬پیکربندی و نصب )‪(Configuration & Setup‬‬


‫سوأل ‪ :10‬چگونه میتوان ”‪ “winmodem‬را در لینوکس راهاندازی کرد؟‬
‫پاسخ‪ Winmodem :‬در حقیقت برندی از شرکت ‪ 3com‬میباشد اما اغلب به عنوان کالسی از‬
‫مودمهای نرمافزاری کمهزینه به شمار میروند و به صورت کمقیمت برای جایگزینی با سخت‪-‬‬
‫افزارهای گران قیمتتر بکار میرود‪ .‬این نرمافزار معموالً با توابع ویندوزی سطح پایین که با‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۴۶‬‬

‫لینوکس سازگار نیستند کار میکند‪ .‬اکثر چنین مودمهایی با لینوکس کار نمیکنند‪ .‬هر چند‬
‫برخی از آنها میتوانند سازگار شوند‪ .‬به این مودمها‪ linmodems‬گفته میشود‪ .‬در اکثر مواقع‪،‬‬
‫سادهترین راه غیرفعالسازی مودم نرم افزاری و نصب یک اداپتور مودم سنتی یا افزودن یک مودم‬
‫خارجی به پورت ‪ usb‬یا سریال میباشد‪ .‬اکثر مودمهای ‪ 56K‬این روزها ارزان قیمت میباشند‪.‬‬
‫سوأل ‪ :11‬چگونه میتوان میزان حافظه استفاده شده توسط لینوکس را مشاهده کرد؟‬
‫پاسخ‪ :‬از طریق خط فرمان دستور ‪ cat /proc/meminfo‬برای اطالعات میزان استفاده حافظه بکار‬
‫برید‪ .‬شما باید خطی که با چیزی شبیه ‪ Mem: 646ss360‬شروع میشود مشاهده کنید‪ .‬این کل‬
‫حافظه لینوکسی است که برای استفاده موجود میباشد‪ .‬اگر حافظه ‪ RAM‬بیش از ‪ 64MB‬نصب‬
‫شده است و عددی نزدیک عدد فوق را مشاهده کردید لینوکس فضایی را اشغال نکرده است‪ .‬برای‬
‫مشاهده میزان حافظه استفاده نشده از دستور ‪ free‬استفاده کنید‪.‬‬
‫سوأل ‪ :12‬گر لینوکس تمامی حافظه نصب شده را استفاده نمیکند‪ ،‬چگونه میتوان‬
‫مابقی آن را استفاده کرد؟‬
‫پاسخ‪ :‬برای مجبور ساختن لینوکس به تشخیص و استفاده تمامی فضای حافظه‪ ،‬یک ترمینال باز‬
‫کنید و به عنوان کابر ‪ root‬با دستور ‪ SU‬وارد شوید‪ .‬هنگام نمایش ‪ ،prompt‬کلمه عبور ‪ root‬را‬
‫ال‬
‫وارد کنید‪ .‬در خط فرمان از یک ویرایشگر برای بازکردن فایل ‪ /etc/lilo.conf‬استفاده کنید‪ ،‬مث ً‬
‫‪ pico /etc/lilo.conf‬و خط اول این فایل باید با =‪ boot‬شروع شود‪ ،‬سایر خطوط برای ‪ maps‬و‬
‫=‪ install‬و غیره میباشد‪ .‬مکان نما در ابتدای ”‪ “b‬مربوط به ‪ boot‬قرار دارد خط زیر را به آن‬
‫اضافه کنید‪ append=”mem=128M’ :‬و ‪ Enter‬کنید‪ .‬در نهایت‪ ،‬ویرایشگر را ببندید و از فایل‬
‫خارج شوید‪ .‬در ‪ /sbin/lilo prompt‬را برای راه اندازی مجدد ‪ LILO‬تایپ کنید‪ .‬سپس تایپ کنید‪:‬‬
‫‪ exit‬برای خروج از کاربر ‪ root‬و ‪ exit‬دوباره برای بستن ‪ .shell session‬با راهاندازی مجدد لینوکس‬
‫باید تمامی حافظه مورد استفاده قرار گیرد‪.‬‬
‫سوأل ‪ :13‬نام پورت موازی که پرینتر به آن متصل شده است در لینوکس چه میباشد؟‬
‫‪LPT3‬‬ ‫پاسخ‪ :‬هنگام ارائه ‪ prompt‬برای نامگیاری پورت موازی در لینوکس‪ ،‬در ‪ LPT2 ،LPT1‬یا‬
‫استفاده میشود و از ‪ /dev/lp1 ,/dev/lp0‬یا ‪ /dev/lp2‬استفاده میشود‪.‬‬
‫سوأل ‪ : 14‬نام پورت سریالی که دستگاهی به آن متصل شده است در لینوکس چه نام‬
‫دارد؟‬
‫پاسخ‪ com1 :‬تا ‪ com8‬که با ‪ /dev/ttySo‬تا ‪ /dev/ttyS7‬جایگیاری میشود‪.‬‬
‫سوأل ‪ :15‬فالپی درایو در لینوکس چه نام دارد؟‬
‫پاسخ‪ a: :‬در لینوکس با ‪ /dev/floppy , /dev/fdo‬یا ‪ /mnt/floppy‬جایگیاری میشود‪ .‬البته‬
‫بستگی به توزیع لینوکس استفاده شده دارد‪.‬‬
۴۷ )Configuration & Setup( ‫ پیکربندی و نصب‬:‫بخش سوم‬

‫ آیا به معنای این است که حروف درایوی در لینوکس وجود‬،wait aminute! :16 ‫سوأل‬
‫ندارد؟‬
‫ و سایر دستگاههایی که در‬zip ،‫ درایو‬CD ،‫ فالپی درایو‬،‫ هارد درایو‬.‫ کامالً صحیح است‬:‫پاسخ‬
،‫ با توجه به نوع دستگاه‬.‫ویندوز وجود دارند در لینوکس باید با کلماتی شناسانده شوند‬
.‫طراحیهایی توسط لینوکس بر اساس ذیل انجام میشود‬
Floppy drives
A: drive (in Windows) = /dev/fd0 (or /dev/floppy or /mnt/floppy in Linux, as
explained above)
B: drive = /dev/fd1

IDE/EIDE disk drives


C: drive (boot drive; first/primary drive on the first disk controller) = /dev/hda
D: drive (second/slave drive on the first disk controller) = /dev/hdb
E: drive (first/primary physical drive on the second controller) = /dev/hdc
F: drive (second/slave physical drive on the second controller) = /dev/hdd
(CD-ROM drives will often be attached as the primary drive on the second controller,
or
/dev/hdc. IDE/ATA Zip drives will generally take the next available drive letter after
the hard drives and/or CD-ROM drives.)

SCSI disk drives


C: drive (boot drive; lowest-numbered drive on the primary controller) = /dev/sda
D: drive (second lowest-numbered drive on the primary controller) = /dev/sdb
E: drive (third lowest-numbered drive on the primary controller) = /dev/sdc
(And so on. There can be many SCSI drives, on one or more controllers. The mount
point designations just keep incrementing up through /dev/sdz. If there are more than
26 physical drives, they will be incrementally labeled from /dev/sdaa up through
/dev/sdzz.)
‫ در خصوص پارتیشنهای دیسک چطور؟ آیا آنها نیز کلمات درایوی ندارند؟‬:17 ‫سوأل‬
‫ اگر‬،‫ به عنوان مثال‬.‫ لینوکس تنها شمارههایی را به انتهای شناسنامه درایو اضافه میکند‬:‫پاسخ‬
.‫نام نامگیاری میشود‬/‫ به صورت شماره‬،‫ باشد‬primary ‫ پارتیشن‬۳ ‫ دارای‬IDE ‫اولین درایو هارد‬
‫ باشد به صورت‬primary ‫ اگر دومین هارد دارای دو پارتیشن‬/dev/hda1/ /dev/hda2, /dev/hda3
‫ پارتیشن‬۳ ‫ با‬SCSI ‫ یک هارد‬،‫ به طور مشابه‬.‫ نامگیاری میشوند‬/dev/hdb2 ‫ و‬/dev/hdb1
‫ حال اگر‬.‫ بر چسبگیاری میشوند‬/dev/sda3 ‫ و‬/dev/sda2 ,/dev/sda1 ‫ به صورت‬primary
‫ یک هارد‬،‫ به عنوان نمونه‬.‫ به بعد شمارهگیاری میشوند‬۵ ‫ باشند از عدد‬extended ‫پارتیشنها‬
:‫ به صورت زیر نامگیاری میشوند‬extended ‫ پارتیشن‬۲ ‫ و‬primary ‫ پارتیشن‬۲ ‫ با‬IDE
/dev/hda1 , /dev/hda2 , /dev/hda5 , /dev/hda6
‫ شده وجود‬mount ‫مشاهده دستگاهها و درایورهای‬ ‫ آیا روش سادهتری برای‬:18 ‫سوأل‬
‫دارد؟‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۴۸‬‬

‫پاسخ‪ :‬بله کاربران ردهت با اجرای ‪ KDE‬و کلیک بر روی منوی ‪ KDE‬و انتخاب ‪ ،Red Hat‬سپس‬
‫‪ system‬و در نهایت ‪ .Disk management‬این کار موجب نمایش پنلی برای مشاهده دستگاههای‬
‫‪ mount‬شده میباشد‪.‬‬
‫کاربران گنوم میتوانند ‪ file manager‬را از آیکون ‪ Gnome‬بر روی پنل و سپس کلیک بر روی‬
‫آیکون ‪ /mnt‬انتخاب کنند‪.‬‬
‫سوأل ‪ :19‬آیا روشی برای تغییر زبان پیش فرض استفاده شده توسط سیستمعامل و‬
‫برنامهها وجود دارد؟‬
‫پاسخ‪ :‬به طور خالصه باید گفت بله البته با توجه به توزیع لینوکس‪ ،‬رابطه کاربری (محیط‬
‫رومیزی)‪ ،‬برنامهها و احتماالً سایر عوامل دیگر‪.‬‬
‫بخش چهارم‪ :‬استفاده عمومی )‪(General Usage‬‬
‫سوأل ‪ :20‬چگونه یک دیسک را میتوان فرمت کرد؟‬
‫پاسخ‪ :‬اگر از محیط گرافیکی ‪ KDE‬استفاده میکنید‪ ،‬سادهترین روش استفاده از ابزار فرمت‬
‫کردن دیسک میباشد‪ .‬به سادگی بر روی آیکون ‪ KDE‬کلیک کنید‪ utilities ،‬را انتخاب کنید‬
‫سپس ‪ .KFloppy‬گزینه ‪ file system‬امکان انتخاب فایل سیستمهای ‪ FAT‬یا فایل سیستمهای‬
‫لینوکسی ‪ ext2fs‬را فراهم میسازد‪ .‬اگر از محیط گرافیکی ‪ Gnome‬استفاده میکنید‪ ،‬به آیکون‬
‫‪ Gnome‬بروید و ‪ utilities‬را انتخاب کنید و سپس ‪.GFFloppy‬‬
‫با استفاده از خط فرمان برای فرمت کردن دیسک برای فایل سیستم اصلی لینوکس از دستور‬
‫‪ mke2fs‬استفاده کنید‪ .‬میتوانید از ابزار ‪ mtools‬برای دسترسی به دیسکهای فرمت شده‬
‫ویندوزی استفاده کنید‪.‬‬
‫از دستورات ‪ mcopy ,mformat‬و ‪ mdel‬بدون پارامترها برای مشاهده لیستی از گزینههای دستور‬
‫استفاده کنید‪.‬‬
‫سوأل ‪ :21‬ایا مستندات آنالین برای برنامهها وجود دارد؟‬
‫پاسخ‪ :‬بله ابزار کمک رسمی برای لینوکس ‪( man‬کوتاه شده ‪ ) manual‬نام دارد‪ .‬برای خواندن‬
‫‪ manual‬برنامههای مختلف تایپ کنید‪ ،man <something> :‬به عنوان مثال برای خواندن‬
‫‪ manual‬آنالین خود دستور ‪ .man man :man‬همچنین میتوانید از یک مشاهده کننده بنام ‪less‬‬
‫برای مشاهده ‪ manual‬استفاده کنید‪man man | less :‬‬
‫بسیاری از برنامههای جدید به ابزار ‪ info‬بجای ‪ man‬منتقل شدهاند‪ .‬همانند ‪ man‬میتوان‬
‫صفحات ‪ info‬را با استفاده از دستور >‪ info <something‬مشاهده کرد‪ .‬گزینه دیگر انتقال‬
‫‪ manual‬به یک فایل متنی برای مرور با یک ویرایشگر میباشد‪ .‬به عنوان مثال‪man mv | col –b ،‬‬
‫‪ > move.txt‬برای چاپ ‪ manual‬نیازمند ‪ pipe‬برای یک برنامه میباشید‪ .‬به عنوان مثال‪:‬‬
‫‪info mv | col –b | lpr‬‬
‫‪ lpr‬برنامهای است که متن را برای چاپ ارسال میکند‪.‬‬
‫منبع اطالعات کمکی دیگر‪ ،‬دستور ‪ whatis‬میباشد‪ Whatis .‬یک مجموعه خالصه از بسیاری از‬
‫ال ‪ whatis whereis‬که میگوید دستور‬
‫دستورات ارائه میدهد‪ .‬به عنوان مثال‪ .whatis man ،‬یا مث ً‬
‫‪ whereis‬چه کاری انجام میدهد‪.‬‬
‫نکته‪ :‬در صورتی که دستور ‪ whatis‬به درستی کار نکرد بدین معناست که پایگاه داده آن هنوز‬
‫ایجاد نشده است برای ایجاد آن ابتدا از دستور ‪ SU -‬برای ورود به عنوان کاربر ‪ root‬استفاده‬
‫کنید و سپس ‪ /usr/sbin/makewhatis‬را تایپ کنید‪.‬‬
‫سوأل ‪ :22‬چگونه میتوان یک برنامهای که قفل شده است را ‪ kill‬کرد؟‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۵۰‬‬

‫پاسخ‪ :‬اگر شما مالک برنامه نیستید‪ ،‬باید به عنوان کاربر ‪ root‬وارد سیستم شوید‪ .‬سپس در یک‬
‫خط و فرمان‪ ،‬تایپ کنید‪ PS :‬به معنای ‪ process status‬که برنامههای در حال اجرا را نشان‬
‫ال ‪ 506‬وجود دارد‪ .‬این برای کشتن برنامه‬
‫میدهد‪ .‬در سمت راست نام هر فرآیند شماره فرآیند مث ً‬
‫مورد استفاده قرار میگیرد‪ .‬در خط فرمان تایپ کنید‪( kill pid :‬به عنوان مثال‪ )kill 506 :‬این‬
‫دستور به شما میگوید که برنامه هم پاسخ نرمال داده میشود و هم خود را میبندد‪ ،‬این دستور‬
‫مشکل شما را حل خواهد کرد‪ .‬با استفاده از گزینه ‪( -۹‬سیگنال ‪ )۹‬برنامه راحتتر بسته میشود‪.‬‬
‫گزینه جایگزین دیگر برای کشتن فرایندهای پس زمینه یا ‪ daemon‬استفاده از پارامتر ‪–HUP‬‬
‫میباشد‪ .‬مثالً‪kill –HUP 506 :‬‬
‫سوأل ‪ :23‬آیا روشی برای افزایش اولویت یک برنامه جهت اجرای سریعتر وجود دارد؟‬
‫پاسخ‪ :‬بله اگر برنامهای وجود دارد که بهطور معمولی در حال اجرا میباشد و واقعاً‪ ،‬واقع ًا نیازمند‬
‫اجرای سریعتر آن هستید‪ ،‬باید سطح اولویت آن را تقویت کنید به گونهای که سیکلهای‬
‫پردازشگر بیشتری مورد استفاده قرار گیرند‪ .‬البته این بدان معناست که تمامی سایر برنامههای‬
‫اجرایی جاری کندتر اجرا خواهند شد‪ ،‬اما اگر به آن نیاز دارید از دستور ‪ nice‬استفاده کنید‪.‬‬
‫لینوکس سطوح اولویتبندی را از ‪(۱۹‬پایینترین) تا ‪( -۲۰‬باالترین) با مقدار پیشفرض ‪۰‬‬
‫پشتیبانی می کند‪ .‬برای تغییر اولویت به یک شماره منفی (افزایش اولویت) باید ابتدا به عنوان‬
‫کاربر ‪ root‬وارد سیستم شوید‪ ،‬سپس برای شروع یک برنامه بنام ‪ myprog‬با اولویت باالی ‪ ،-10‬از‬
‫دستور زیر استفاده کنید‪:‬‬
‫‪nice –n –10 myprog‬‬
‫اگر میخواهید اولویت یک برنامه در حال اجرا را افزایش دهید از دستور ‪ renice‬استفاده کنید‪:‬‬
‫‪renice –10 506‬‬
‫سوأل ‪ :24‬آیا یک ‪ spelling checher‬بدون استفاده از ویرایشگر ورد وجود دارد؟‬
‫پاسخ‪ :‬بله لینوکس دارای برنامهای بنام ‪ ispell‬میباشد که هر فایل متنی را میخواند‪ ،‬کلمات‬
‫سوألی را برجسته میکند‪ ،‬جایگزینها را پیشنهاد می دهد و به شما امکان افزودن کلمات را به‬
‫دایرکتوری ‪ ispell‬فراهم میسازد‪ .‬این دستور از طریق خط فرمان اجرا میشود‪ .‬تعدادی پارامتر نیز‬
‫که میتوان استفاده کرد وجود دارد؛ اما سادهترین استفاده برای بررسی یک فایل بنام ‪laitec.txt‬‬
‫عبارتست‪ispell laitec.txt :‬‬
‫این برنامه حتی مجموعهای از فایلها را به ترتیب بررسی میکند‪ ،‬به عنوان مثال‬
‫‪ ispell laitec.txt sharif.txt‬یا حتی ‪( ispell *.txt‬برای چک کردن تمامی فایلهای با پسوند ‪)txt‬‬
‫هنگام اجرای این برنامه‪ ،‬یک کلمه سوألی با محتوای خط متنی شامل کلمه و ارائه پیشنهادات‬
‫جایگزین در یک لیست شمارهگیاری شده نشان میدهد‪ .‬برای انتخاب یکی از پیشنهادات لیست‬
‫ارائه شده برای جایگیاری با کلمه اصل‪ ،‬به سادگی شماره کلمه را تایپ کنید‪ .‬همچنین چندین‬
‫منو در زیر برنامه وجود دارد برای جایگیاری کلمه با چیزی که تایپ کردهاید‪ ،‬تایپ کنید ‪A.R‬‬
‫‪۵۱‬‬ ‫بخش چهارم‪ :‬استفاده عمومی (‪)General Usage‬‬

‫برای پییرش کلمه موجود‪ L ،‬برای افزودن کلمه موجود به دایرکتوری ‪ U, ispell‬برای خروج از‬
‫حالت حروف بزرگ‪ Q ،‬یا ‪ X‬برای پایان داده به برنامه‪.‬‬
‫بخش پنجم‪Command Shell :‬‬
‫سوأل ‪ :25‬اگر بخواهیم دستوری را وارد کنیم‪ ،‬چگونه یک ‪ prompt‬دستور را باز کنیم؟‬
‫پاسخ‪ :‬در لینوکس به طور عامیانه این موضوع به عنوان یک دستور ‪ shell‬یا خالصه ‪ shell‬ارجاع‬
‫میشود‪ .‬هر توزیع لینوکسی شامل حداقل یک شل است‪ .‬متداولترین استفاده آن ‪ bash‬میباشد‪.‬‬
‫برای باز کردن شل پیش فرض برای توزیع خود‪ ،‬کاربران ‪ KDE‬میتوانند بر روی آیکون ‪ kvt‬بر‬
‫روی پنل کلیک کنید یا ‪ ctrl+Alt+F1‬را فشار دهند‪.‬‬
‫کاربران گنوم میتوانند به آیکون ‪ Gnome‬بر روی پنل مراجعه کنند و از منوی ‪ system‬هر گزینه‬
‫‪ Xterm‬یا ‪ Command prompt window‬را انتخاب نمایند‪.‬‬
‫برای سریعتر انجام دادن این کار تنها کافیست کلیدهای ‪ Alt_F2‬را فشار دهید تا یک ترمینال باز‬
‫شود‪.‬‬
‫سوأل ‪ :26‬دستورات معادل ویندوز در لینوکس کدامها هستند؟‬
‫پاسخ‪ :‬دستوراتی در لینوکس وجود دارند که مشابه یا معادل نام یا تابع دستورات ‪ DOS‬هستند‪.‬‬
‫در جدول زیر به برخی از این دستورات اشاره میشود‪:‬‬
۵۳ Command Shell :‫بخش پنجم‬

Command Purpose Command Purpose Command Purpose


Change to the parent cd.. or cd.. (short for cd..
directory change directory)
Change to the root cd\ or cd \ cd / (note the forward
directory slash)
Clear the screen cls clear
Close a command prompt exit exit
window
Compare the contents of fc (file compare) diff (difference)
two files
Copy a file copy cp (copy)
Create a directory mkdir or md (make mkdir
directory)
Delete files del or erase rm (remove)
Delete directories rmdir or rd (remove dir) Rmdir
Display file contents, a More more or less
screen at a time
Display the amount of Mem Free
available RAM
Display/change the date date Date
Display/change the time Time Date
Echo output to the screen Echo Echo
Find a file by filename dir or attrib Locate
Find a file by date or other dir (not by date) Find
file Attributes
Find a text string in a file Find Grep
Format a floppy Format mke2fs (or mformat, for
a
DOS/Windows floppy)
List files in directory dir (directory) ls (list) or dir
Move files Move mv (move)
Rename a file ren (short for rename) Mv
Show the current filepath Cd pwd (print working
directory)
‫ پارامترهای این دستورات ممکن‬،‫همچنین برخی از دستورات وجود دارند که کامالً مشابه هستند‬
‫ به عنوان مثال به بررسی تفاوتهای بین تغییر‬.‫است که بین ویندوز ولینوکس متفاوت باشند‬
.‫تاریخ و ساعت در لینوکس و ویندوز میپردازیم‬
‫ همچنین‬،۲۰۰۰ ‫ دسامبر‬۳۱ ‫ برای تغییر تاریخ به‬date 12-31-2000 :‫در ویندوز باید تایپ شود‬
.‫ درج شود‬time 14:00:00 ‫ باید‬2:00 p.m ‫برای تغییر ساعت به‬
‫ وارد سیستم شوید و سپس باید دستور‬root ‫ ابتدا باید به عنوان کاربر‬،‫در لینوکس به عبارت دیگر‬
.‫ در رشته مخفی شده است‬۱۴:۰۰ ‫ در نظر داشته باشید که‬.‫ را تایپ کنید‬date 123114002000
:‫هر چند اگر بخواهید تنها زمان را تغییر دهید دستور زیر را استفاده کنید‬
date –s 1400
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۵۴‬‬

‫سوأل ‪ :27‬هنگام فراموش کردن نام دستوری که نیاز داریم چکار باید کرد؟‬
‫پاسخ‪ :‬میتوانید از صفحه ‪ manual‬دستوری که میخواهید را جستجو کنید اما روش سریعتر‬
‫استفاده از دستور ‪ apropos‬میباشد‪ .‬به عنوان مثال اگر میخواهید بر روی یک درایو فالپی کار‬
‫کنید اما دستوری که باید استفاده شود را بیاد ندارید تایپ کنید‪ .apropos floppy:‬باید نتیجهای‬
‫مشابه زیر را مشاهده کنید‪:‬‬
‫‪fd (4) - floppy disk device‬‬
‫‪fdformat (8) - Low-level formats a floppy disk‬‬
‫‪mbadblocks (1) - tests a floppy disk and marks the bad blocks‬‬
‫‪in the FAT‬‬
‫‪mformat (1) - add an MSDOS filesystem to a low-level‬‬
‫‪formatted floppy disk‬‬
‫‪mkbootdisk (8) - creates a stand-alone boot floppy for the‬‬
‫‪running system‬‬
‫‪setfdprm (8) - sets user-provided floppy disk parameters‬‬
‫نکردن دستور ‪ apropos‬بدان معناست که پایگاه داده ‪ whatis‬هنوز ساخته‬ ‫نکته‪ :‬در صورت کار‬
‫نشده است‪.‬‬
‫ال متفاوت از آخرین‬
‫سوأل ‪ :28‬من تنها یک دستور را استفاده کردهام و نتایج کام ً‬
‫استفاده نمایش میدهد‪ .‬دلیل این امر چیست؟‬
‫پاسخ‪ :‬بخاطر داشته باشید که لینوکس حساس به حروف میباشد‪ ،‬از پارامترهای استفاده شده‬
‫برای دستور مطمئن شوید‪ .‬به عنوان مثال اگر تایپ کنید ‪ tar –xvf filename.tar‬و بار دیگر تایپ‬
‫کنید‪:‬‬
‫‪TAR –XVF FILENAME.TAR‬‬
‫مطمئناً نتایج متفاوتی دریافت خواهید کرد زیرا ‪ x‬و ‪ v ،X‬و ‪ f ،V‬و ‪ F‬معتبر هستند ولی متفاوت‪.‬‬
‫سوأل ‪ :29‬نوشتن مسیرهای طوالنی مشکل میباشد‪ .‬آیا روشی برای استفاده میانبر از‬
‫آنها وجود دارد؟‬
‫پاسخ‪ :‬بله در برخی موارد اگر ‪ bash‬یا سایر شلها با تواناییهای مشابه استفاده کنید‪ ،‬میتوانید‬
‫مزایای یک ویژگی نام پسوند نام فایل را با استفاده از کلید تب دریافت کنید‪ .‬میتوانید بخش اول‬
‫نام دایرکتوری را تایپ کنید و سپس کلید ‪ Tab‬را فشار دهید‪ ،‬بدین تریتیب نام کامل میشود‪.‬‬
‫سوأل ‪ :30‬آیا روشی ب رای استفاده از یک دستور جهت شروع کردن بیش از یک برنامه به‬
‫طور همزمان وجود دارد؟‬
‫پاسخ‪ :‬بله شل امکان استفاده از دستورات ‪ stack‬را در یک خط فرمان برای اجرا شدن فراهم‬
‫میسازد‪ .‬به عنوان مثال‪ ،‬اگر تایپ کنید‪:‬‬
‫‪ls –l; cd..; ls –a‬‬
‫لینوکس محتوای دایرکتوری جاری را لیست میکند )‪ ،(ls –l‬سپس دایرکتوری پدر جاری را تغییر‬
‫‪۵۵‬‬ ‫‪Command Shell‬‬ ‫بخش پنجم‪:‬‬

‫میدهد )‪ (cd..‬و در نهایت تمامی فایلهای دایرکتوری را لیست میکند )‪ .(ls –a‬سمیکالن‬
‫دستورات را از یکدیگر جدا میکند و به لینوکس این امکان را میدهد که با پایان یافتن یک‬
‫دستور‪ ،‬دستور بعدی آغاز شود‪.‬‬
‫برای کپی کردن یک دایرکتوری دیگر و سپس به یک فالپی و در نهایت نمایش محتوای فالپی‬
‫تنها کافیست تایپ کنید‪:‬‬
‫‪cp /dir1/myfile.dat /dir2; cp /dir1/myfile.dat /dev/fd0/myfile2.dat; ls –a /dev/fd0‬‬
‫سوأل ‪ :31‬آیا روشی برای ‪ stack‬کردن دستورات و اجرای آنها بطور همزمان در ‪session‬‬
‫دیگر وجود دارد؟‬
‫پاسخ‪ :‬بله با اجرای دستورات ‪ stack‬شده در مثالهایی از سوأل قبل این اتفاق میافتد و دستورات‬
‫یکی پس از دیگری اجرا میشوند‪ .‬البته در یک ‪ session‬به گونهای که در انتهای یک دستور‪،‬‬
‫دستور بعدی آغاز خواهد شد‪ .‬حال اگر بخواهیم دستورات در ‪ session‬جدید برای دستور اول‬
‫ایجاد شوند‪ ،‬سپس به اجرای دستورات باقیمانده در آن ‪ session‬هنگامی که دستور اول خاتمه‬
‫یافت ادامه دهد‪ .‬در واقع‪ session ،‬اصلی برای استفاده موجود میباشد‪.‬‬
‫اگر بخواهید هر دستوری در ‪ session‬خودش اجرا شود‪ ،‬تنها کافیست عالمت & به انتهای تمامی‬
‫آنها اضافه شود؛ مانند زیر‪:‬‬
‫‪cp /dir1/myfile.dat /dir2&; cp /dir1/myfile.dat /dev/fd0/myfile2.dat; ls –a /dev/fd0‬‬
‫بخش ششم‪ :‬فایلها و دایرکتوریها )‪(Files and Directories‬‬
‫سوأل ‪ :32‬دایرکتوری ‪ root‬چیست؟‬
‫پاسخ‪ :‬ریشههای یک درخت از پیوندهایی برای کل درخت تشکیل میشود‪ .‬تنه درخت شاخههای‬
‫زیادی دارد‪ .‬این شاخهها به شاخههای کوچکتر هدایت میشوند تا جایی که کوچکتر و کوچکتر‬
‫میشوند که در نهایت برگها را تشکیل میدهند‪ .‬با استفاده از این آنالوژی‪ ،‬دایرکتوری ‪ root‬از‬
‫تمامی دایرکتوریها تشکیل میشود‪ .‬داخل این دایرکتوریها فایلهای داده و برنامهها قرار دارند‪.‬‬
‫سوأل ‪ :33‬آیا میتوانید تشریح بیشتری از ساختار دایرکتوریهایی که در لینوکس کار‬
‫میکنند ارائه دهید؟‬
‫پاسخ‪ :‬تفاوت اصلی بین ویندوز و لینوکس این است که در لینوکس از ‪ ) \ ( back slashes‬بجای‬
‫‪ (/) slashes‬در نام مسیرهای دایرکتوری استفاده میشود‪ .‬در زیر‪ ،‬سلسله مراتب مجموعه‬
‫دایرکتوریهای ‪ root‬ارائه میشود‪:‬‬
‫‪/‬‬
‫‪/home‬‬
‫‪/home/mark‬‬
‫‪/home/mark/.netscape‬‬
‫‪/home/mark/.netscape/cache‬‬
‫‪/home/mark/StarOffice51‬‬
‫‪/home/mark/StarOffice51/database‬‬
‫‪/home/mark/StarOffice51/gallery‬‬
‫‪/home/mark/StarOffice51/gallery/clipart‬‬
‫‪/home/susan‬‬
‫‪/home/susan/.netscape‬‬
‫‪/home/susan/.netscape/cache‬‬
‫‪/usr‬‬
‫‪/ust/etc‬‬
‫برای نمایش آن به روش دیگر‪ ،‬به صورت عمقی بر اساس دیاگرام زیر نمایش داده میشود‪:‬‬

‫‪/home/mark‬‬ ‫‪ /‬شاخه ‪ root‬را نمایش میدهد‪ /home .‬دایرکتوری خانه کاربران میباشد‪ .‬داخل‬
‫دایرکتوریهایی به نام ‪ /netscape‬و ‪ /staroffices‬وجود دارند که دایرکتوریهای شاخه شده از‬
‫آنها میباشد‪.‬‬
‫سوأل ‪ :34‬دایرکتوریهایی در دایرکتوری ‪ root‬وجود دارند که آنها را نمیتوانیم‬
‫بشناسیم این دایرکتوریها چه هستند؟‬
‫پاسخ‪ :‬این دایرکتوریها‪ ،‬فایلهای سیستمی و برنامههای ضروری را ذخیره میکنند‪ .‬به عنوان‬
‫مثال‪ /etc ،‬شامل فایلهای پیکربندی میباشد که تنظیمات سیستم و برنامهها در آن ذخیره‬
‫‪۵۷‬‬ ‫بخش ششم‪ :‬فایلها و دایرکتوریها (‪)Files and Directories‬‬

‫میشوند‪ /etc/skel .‬شامل فایلهای ‪ shell‬یا فایلهای اسکلتی استفاده شده برای ایجاد حسابهای‬
‫کاربری میباشند‪ /usr .‬سایر فایلهای مهم شامل کتابخانههای برنامه در ‪ ،/usr/lib‬صفحات‬
‫‪ manual‬برای ابزار ‪ man‬در ‪ /usr/man‬و سایر مستندات در ‪ /usr/doc‬و ‪ /usr/info‬را در بر میگیرد‪.‬‬
‫سایر دایرکتوریهای سیستمی مانند ‪ /opt ،/lib‬و ‪ /var‬نیز برای ذخیرهسازی اطالعات سیستمی‬
‫همانند فایلهای امنیتی‪ ،‬ماژول های سیستمی‪ ،‬بانک اطالعاتی‪ ،‬بستههای نرمافزاری‪ ،‬فایلهای‬
‫پیغامی و ‪ log‬ها را در خود دارند‪.‬‬
‫سوأل ‪ :35‬آیا دستور میانبر برای ورود به دایرکتوری وجود دارد؟‬
‫پاسخ‪ :‬بله از هر خط فرمانی تایپ کنید‪ cd :‬و کلید ‪ enter‬را فشار دهید‪.‬‬
‫سوأل ‪ :36‬برخی نام فایلها توسط یک نقطه ارائه میشوند‪ .‬این به چه معناست؟‬
‫ال ‪ .bashrc‬یا‪ .netscape‬که یک فایل مخفی‬
‫پاسخ‪ :‬یک نام فایل با یک نقطه آغاز میشود مث ً‬
‫میباشد‪ .‬آنها اغلب برای نگهداری تنظیمات کاربری و سایر اطالعات پیکربندی استفاده میشوند‪.‬‬
‫این فایلها مخفی هستند تا به طور تصادفی پاک نشوند‪ .‬با دستور ‪ ls -l‬امکان مشاهده این فایلها‬
‫وجود ندارد اما با دستور ‪ ls –a‬تمامی این فایلها را میتوان دید‪.‬‬
‫سوأل ‪ :37‬دستور ‪ ls‬همه چیز را در دایرکتوری نشان نمیدهد‪ .‬مشکل کجاست؟‬
‫پاسخ‪ :‬دستور ‪ ls‬دارای پارامترهای متعددی برای نمایش محتوای دایرکتوری به روشهای مختلف‬
‫میباشد‪ .‬به عنوان مثال‪ ls –a ،‬تمامی فایلها را نشان میدهد و ‪ ls –al‬تمامی فایلها را به شکل‬
‫”‪ “long‬نمایش میدهد‪ ،‬در حالی که ‪ ls –a --color‬طیفی از رنگها برای تفاوتسازی انواع‬
‫مختلف فایلها اضافه میکند‪.‬‬
‫سوأل ‪ :38‬میخواهیم یک ‪ wildcard‬را برای فایلهایی با؟ یا * در نامشان جستجو کنیم‪.‬‬
‫چگونه این کار انجام میشود؟‬
‫پاسخ‪ :‬بر خالف ویندوز‪ ،‬لینوکس امکان اسذتفاده از ایذن کاراکترهذا را بذه خذوبی ( و ) و ‪ :‬و سذایر‬
‫دایرکتوری میدهد‪ .‬برای تشخیص بین یک جسذتجوی ‪wildcard‬‬ ‫کاراکترهای خاص در نام فایل و‬
‫با استفاده از؟ یا * و یک جستجوی برای کاراکترهذای خذاص نیذاز بذه افذزودن یذک ( \ ) قبذل از‬
‫کاراکتر ‪ wildcard‬میباشذد‪ .‬بذه عنذوان مثذال‪ ls hello\?.txt :‬یذا ‪ ls myfile\*.c‬یذا ‪ls mc\)127.h‬‬
‫فایلهای ‪ hello?.txt ,myfile*.c‬و ‪ mc)127.h‬را جستجو میکنند‪.‬‬
‫سوأل ‪ :39‬چگونه میتوان یک فایل را ایجاد یا تغییر نام داد با استفاده از کاراکترهای‬
‫خاص در نام آن؟‬
‫پاسخ‪ :‬بر اساس سوأل قبلی‪ ،‬نیاز به استفاده از ) \ ( پس از کاراکتر خاص میباشد‪ .‬به عنوان مثال‪،‬‬
‫‪touch myfile\*.c‬‬ ‫‪ touch hello\?.txt‬یک فایل خالی به نام ‪ hello?.txt‬تولید میکند‪ .‬نتیجه‬
‫خواهد بود‪ myfile*.c :‬و ‪ touch mc\)127.h‬فایل ‪ mc)127.h‬را ایجاد خواهد کرد‪ .‬به طور مشابه‪،‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۵۸‬‬

‫‪ mv hello.txt hello\?.txt‬یک؟ برای نام فایل اضافه میکند‪ .‬برای استفاده از چندین کاراکتر‬
‫خاص‪ ،‬به سادگی یک \ قبل از هر یک اضافه میشود‪ .‬برای نمونه‪ touch myfile\(\*\*\).txt :‬فایلی‬
‫به صورت ‪ myfile(**).txt‬را تولید میکند‪ ،‬این رویه برای تمامی کاراکترهای خاص دیگر به طور‬
‫مشابه میباشد‪.‬‬
‫سوأل ‪ :40‬طول نام یک فایل چقدر میتواند باشد؟‬
‫پاسخ‪ :‬نام فایل میتواند تا ‪ ۲۵۵‬کاراکتر طول داشته باشد که شامل اعداد‪ ،‬حروف و سمبلهای‬
‫خاص‪ ،‬ترکیبی از حروف کوچک و بزرگ باشد‪ .‬هرچند‪ ،‬برای راحتی خواندن و تایپ آن از خط‬
‫فرمان‪ ،‬نامهای کوتاهتر ترجیح داده میشوند‪ ،‬این محدودیت ‪ ۲۵۵‬کاراکتری شامل مسیر کامل‬
‫نمیباشد؛ به عبارت دیگر‪ ،‬اگر فایلی به نام ‪ ThisIsMyVeryLongFilename.txt‬در دایرکتوری‬
‫‪ /user/mark/garbage/files‬نامیده شود‪ ،‬نام فایل تنها میتواند ‪ ۲۵۵‬کاراکتر باشد‪ .‬مسیر کامل‬
‫به شکل زیر میباشد‪:‬‬
‫‪/user/mark/garbage/files/ThisIsMyVeryLongFilename.txt‬‬
‫که تنها ‪ ۲۸‬کاراکتر پس از آخرین‪ /‬به عنوان نام فایل در نظر گرفته میشود‪.‬‬
‫سوأل ‪ :41‬لیست دایرکتوری طوالنی میباشد و اسکرول صفحه به اتمام رسیده است‪ ،‬آیا‬
‫روشی برای مشاهده یک صفحه به طور همزمان وجود دارد؟‬
‫پاسخ‪ :‬بله برنامههایی به نام ”‪ “pagers‬وجود دارند که این کار را انجام میدهند‪ .‬تنها در ویندوز‬
‫میتوان از ‪ dir c:\ | more‬استفاده کرد و در لینوکس‪:‬‬
‫‪ls –a / | more‬‬
‫یا با استفاده از یک ابزار جایگزین‪:‬‬
‫‪ls –a / | less‬‬
‫سوأل ‪ :42‬ایا روشی برای یافتن فایلها از خط فرمان وجود دارد؟‬
‫پاسخ‪ :‬در لینوکس‪ ،‬دستور ‪ locate‬این کار را انجام میدهد‪ .‬این دستور فایلهای داده‪ ،‬برنامهها‪،‬‬
‫دایرکتوریها و سایر موضوعات را جستجو میکند‪ .‬به عنوان مثال ‪ locate myfile‬فایلهای‬
‫‪ myfile.txt, /myfile‬و سایر موارد را پیدا میکند‪ .‬در واقع ‪ locate‬پایگاه داده را بر روی درایو هارد‬
‫شما جستجو میکند‪.‬‬
‫به عنوان جایگزین‪ ،‬اگر دنبال یک فایل باینری‪ source ،‬و صفحات ‪ manual‬میگردید از دستور‬
‫‪ whereis‬میتوان استفاده کرد‪ .‬برای مشاهده تفاوت بین ‪ whereis‬و ‪ locate‬دو دستور زیر مقایسه‬
‫میشود‪ whereis passwd :‬و ‪ . locate passwd‬همانگونه که مشاهده میشود دستور ‪ whereis‬تنها‬
‫فایلهای محدودی را جستجو میکند‪ ،‬در حالی که دستور ‪ locate‬تعداد بیشتری را لیست میکند‪.‬‬
‫برای تمرین‪ ،‬بهتر است که دو دستور زیر را اجرا کنید‪ whereis *.doc :‬و ‪locate *.doc‬‬
‫سوأل ‪ :43‬آیا دستوری برای جستجوی متن فایلها برای یک رشته کاراکتری خاص‬
‫وجود دارد؟‬
‫‪۵۹‬‬ ‫بخش ششم‪ :‬فایلها و دایرکتوریها (‪)Files and Directories‬‬

‫پاسخ‪ :‬بله در واقع می توان یک فایل را با ویرایشگر متنی باز کنید و از تابع ‪ search‬استفاده کنید‪.‬‬
‫هر چند‪ ،‬اگر ترجیح میدهید که از خط فرمان برای جستجو استفاده کنید میتوانید ابزار ‪ grep‬را‬
‫بکار ببرید‪ .‬به عنوان مثال‪ ،‬به شما گفته میشود که یک دایرکتوری مشتمل بر فایلهای متنی‬
‫وجود دارد و میدانید که یکی از آنها شامل اصطالح ‪“laitec: learn all information‬‬
‫”‪ technology‬میباشد‪:‬‬
‫”‪Grep “laitec: learn all information technology‬‬
‫دستور ‪ grep‬تمام خط متنی شامل رشته جستجو شده را نشان میدهد‪.‬‬
‫سوأل ‪ Hard :44‬و ‪ symblolic‬لینکها را توضیح دهید وچگونه میتوان آنها را‬
‫شناسایی کرد؟‬
‫پاسخ‪ :‬لینکهای ‪ symbolic‬یا ‪ soft‬همانند میانبرها در ویندوز هستند‪ ،‬به عنوان اشارهگر به‬
‫برنامهها‪ ،‬فایلهای داده یا دایرکتوریهای قرار گرفته در هر جایی عمل میکنند‪ .‬لینکهای‬
‫‪ symbolic‬امکان شروع یک برنامه از بیش از یک پوشه بدون داشتن فایلهای تکراری در‬
‫مکانهای تکراری را فراهم می سازند‪ .‬گفتنی است در صورتی که فایل اصلی به هر دلیلی جابجا‪،‬‬
‫حیف یا تغییر نام شود‪ ،‬لینک از بین خواهد رفت‪.‬‬
‫لینکهای ‪ symbolic‬را میتوان با استفاده از مدیر فایل ‪ (kfm) k‬یا سایر مدیر فایل گرافیکی‬
‫شناسایی کرد‪ .‬از طریق خط فرمان نیز میتوان نیز از دستور ‪ ls –F‬استفاده کرد که فایلهای‬
‫لیست شده همان لینکهای ‪ symbolic‬میباشند‪ .‬به عنوان مثال‪ ،‬با مشاهده فایلهای لیست شده‬
‫دایرکتوری ‪ ،/bin‬فایلهای زیر مشخص میشوند که در انتهای لینکهای ‪ symbolic‬عالمت @‬
‫قرار گرفته است‪:‬‬
‫*‪arch‬‬
‫*‪ash‬‬
‫*‪ash.static‬‬
‫*‪aumix-minimal‬‬
‫@‪awk‬‬
‫*‪basename‬‬
‫*‪bash‬‬
‫*‪bash2‬‬
‫@‪bsh‬‬
‫بنابراین‪ bsh@ , awk@ ،‬لینکهای ‪ symbolic‬میباشند‪.‬‬
‫نوع دیگری از لینکها‪ ،‬هارد لینکها میباشند‪ .‬این لینکها نیز وظایفی همانند لینکهای ‪ soft‬بر‬
‫عهده دارند با این تفاوت که به محض حیف‪ ،‬تغییرنام یا جابجایی فایل اصلی‪ ،‬لینک از بین‬
‫نمیرود‪ .‬هارد لینکها تنها به فایلهای داده یا برنامهها ارجاع میشوند نه دایرکتوریها‪.‬‬
‫برای مشاهده هارد لینکها میتوان از دستور ‪ ls –il‬استفاد کرد‪ .‬به عنوان مثال‪:‬‬
‫‪619880 -rw-rw-rw- 2 ownerid groupid 428 Apr 14 19:42 myfile.txt‬‬
‫‪145389 -rw-rw-r-- 1 ownerid groupid 7285 Sep 30 10:17 coffee.txt‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ۶۰

268394 -rw-rw-rw- 1 ownerid groupid 8912 Nov 4 19:42 tea.txt


619880 -rw-rw-rw- 2 ownerid groupid 428 Apr 14 19:42 person.txt
‫ نام فایل مختلف لیست شده است اما توجه کنید که کلیدهای مشابه بین دو فایل از آنها وجود‬۴
.‫ اندازه و مشخصات یکسانی دارد‬،‫ زمان‬،‫ که دقیقاً تاریخ‬myfile.txt ‫ و‬person.txt :‫دارد‬
.‫" را برای شماره لینکهای هارد نشان میدهند‬۲" ‫ هر دو آنها‬،‫بعالوه‬
‫ چگونه میتوان لینکها را ایجاد کرد؟‬:45 ‫سوأل‬
‫ برای ایجاد یک هارد‬،‫ به عنوان مثال‬.‫ می تواند برای هر دو نوع فایل استفاده شود‬ln ‫ دستور‬:‫پاسخ‬
ln myfile.txt myfile2.txt:‫ مینویسیم‬myfile.txt ‫ به یک فایل بنام‬myfile2.txt ‫لینک به نام‬
:‫ به همان فایل اصلی مینویسیم‬myfile3.txt ‫ بنام‬symbolic ‫برای ایجاد یک لینک‬
ln –s myfile.txt myfile3.txt
‫ را در‬ZIP, HTM, TXT, WAV,GIF,JPG ‫ تعدادی از انواع فایلها همچون‬:46 ‫سوأل‬
‫ آنها برای چه‬،‫ویندوز میشناسیم اما بسیاری از سایر انواع فایلها را نمیشناسیم‬
‫موضوعی بکار میروند؟‬
‫ تعدادی پسوند فایل وجود دارد که در لینوکس متداول هستند اما به طور عموم در ویندوز‬:‫پاسخ‬
:‫ در زیر به برخی از آنها اشاره میشود‬.‫دیده نمیشوند‬
.a – Archive file
.png – Image file (like.jpg/.gif)
.au – Audio file (like.wav)
.ps – PostScript printer-formatted file
.bzip2,.bz2 – Archive file compressed with
bzip2
.rpm – RPM Package Manager file
.c – C programming language source file
.so – Program library file
.conf – Configuration file
.tar – Archive file
.cpp – C++ language source file
.tar.bzip2,.tar.bz2 – Archive file compressed with bzip2
.gz,.gzip – File compressed with gzip.tar.gz,.tar
.Z – Archive file compressed with gzip
.h – C or C++ language header file
.tga – Image file
.html – HTML file (same as.htm)
.tgz – Archive file compressed with gzip
.o – Program object file
.xpm – Image file
.pl – Perl script file.z,
.Z – Older gzip file
‫ برای یافتن‬file ‫نوع آن را تشخیص ندادید میتوانید از دستور‬ ‫در صورت مشاهده فایلی که‬
file laitec ‫ یا‬file laitec.xyz ،‫ به عنوان مثال‬.‫اطالعات بیشتر در مورد آن استفاده کنید‬
‫‪۶۱‬‬ ‫بخش ششم‪ :‬فایلها و دایرکتوریها (‪)Files and Directories‬‬

‫سوأل ‪ :47‬آیا میتوان از کل سیستم پشتیبان گیری کرد؟‬


‫پاسخ‪ :‬این سوأل سادهای برای پاسخگویی نمیباشد‪ .‬یک سیستم پیکربندی شده با سیستم عامل‬
‫برنامههای بسیار بزرگ‪ ،‬فایلهای داده و احتماالً کتابخانهای از فایلهای چند رسانهای میتواند‬
‫چندین گیگابایت اطالعات شود‪ .‬حتی اگر ظرفیت باال و سرعت باال نیز باشد احتماالً‬
‫پشتیبانگیری همه آنها عملی نخواهد بود؛ به عبارت دیگر‪ ،‬احتماالً نرمافزارهایی از برخی ‪ CD‬ها‬
‫نصب شدهاند و نیازی به گرفتن پشتیبان از سیستمعامل و برنامهها نمیباشد‪ .‬اگر میخواهید تنها‬
‫از فایلهای داده‪ ،‬فایلهای نصب شده‪ ،‬فایلهای محاسباتی و سایر فایلهای نصب شده و تغییر‬
‫یافته پشتیبان تهیه کنید‪ ،‬میتوانید همواره از ‪ ,CD‬نرمافزار مربوطه را دوباره نصب کنید‪.‬‬
‫در لینوکس‪ ،‬دایرکتوریهایی که باید حتماً از آنها پشتیبان تهیه کنید عبارتند از‪:‬‬
‫‪/etc‬‬
‫‪/home‬‬
‫‪/opt‬‬
‫‪/usr/lib‬‬
‫‪/usr/local‬‬
‫)‪/usr/src/linux (if you have modified any of the kernel programming‬‬
‫‪/usr/X11R6/lib/X11 (if you are using X Windows)—Case is important in this folder‬‬
‫!‪name‬‬
‫‪/var/spool/mail‬‬
‫اگر محدودیت فضا دارید میتوانید فایلهای هر برنامه را در مجموعه دیسک با استفاده از یک ابزار‬
‫آرشیوی‪/‬فشردهسازی همانند ‪ bzip2, gzip, tar‬یا ‪ zip‬استفاده کنید‪.‬‬
‫سوأل ‪ :48‬نرمافزار پشتیبانگیری که باید استفاده شود را نام ببرید؟‬
‫پاسخ‪ :‬نرم افزارهای رایگان و تجاری متعددی وجود دارد که برای این منظور میتوان استفاده کرد‪.‬‬
‫بسیاری از آنها به صورت رابط گرافیکی هستند که کار را سادهتر میکنند‪ .‬همچنین ابزارهای‬
‫بسیاری نیز وجود دارد که برای تشریح آنها استفاده میشوند؛ اما چند دستور متداول وجود دارد‬
‫که عبارتند از‪:‬‬
‫‪ :Tar‬متداولترین ابزار فشردهسازی در لینوکس محسوب میشود‪ .‬اگر از ابزار ‪ zip/unzip‬در ویندوز‬
‫استفاده کردهاید‪ ،‬مطمئناً با مفهوم ‪ tar‬بهتر آشنا خواهید شد‪.‬‬
‫فایلها با ‪ tar‬فشردهسازی میشوند‪ .‬همچنین اگر با ‪ gzip‬این کار را انجام دهید‪ ،‬پسوند‬
‫فایل ‪ .tar.gz,.tar.Z‬یا‪ .tgz.‬دارند‪.‬‬
‫‪ Gzip :Gzip lgunzip‬ابزاری است که برای فشردهسازی فایلهای ‪ tar‬استفاده شده و به طور‬
‫مشابه ‪ gunzip‬برای خارج کردن از حالت فشرده بکار میرود‪.‬‬
‫‪ Bzip2 :Bzip2/bunzip2‬نسخه جدیدتر و سریعتر ‪ gzip‬محسوب میشود‪ .‬دارای یک ساختار‬
‫فرمانی مشابه است اما عمل فشردهسازی و خروج از فشردهسازی را سریعتر انجام میدهد‪.‬‬
‫‪ :Pkzip/pkunzip‬یک ابزار فشردهسازی تجاری متداول در ویندوز میباشد‪ Pkzip .‬این عمل را‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۶۲‬‬

‫بسیار سریع انجام میدهد‪.‬‬


‫بخش هفتم‪ :‬حسابهای کاربری‪ ،‬گروهها و مجوزها‬
‫سوأل ‪ :49‬بعضی اوقات دستورات به ما میگویند که باید کاربر "‪ "root‬باشید‪ .‬این به چه‬
‫معناست؟‬
‫پاسخ‪ :‬بدان معناست که باید به عنوان کاربر ‪ root‬وارد سیستم شوید‪ ،‬اگر نیاز دارید که برای‬
‫اجرای یک دستور به عنوان کاربر ‪ root‬باشید میتوانید یک شل باز کنید و این دستور را تایپ‬
‫کنید‪ .SU:‬از شما کلمه عبور میخواهد‪.‬‬
‫برخی از دستورات بدون ورود تحت عنوان کاربر ‪ root‬کار نمیکنند‪.‬‬
‫سوأل ‪ :50‬حساب کاربری ‪ root‬چیست و تفاوت آن با حساب کاربری عادی چه میباشد؟‬
‫پاسخ‪ :‬هنگام نصب لینوکس از شما سوأل میشود که یک کلمه عبور ‪ root‬وارد کنید‪ .‬حساب‬
‫کاربری ‪ root‬معادل دسترس سطح سیستمی در ویندوز میباشد با توانایی حیف‪ ،‬ایجاد و فرمت‬
‫کردن پارتیشنها‪ ،‬حیف و ایجاد دایرکتوریها و فایلها یا هر کار دیگری‪ .‬لینوکس همانند یک‬
‫سیستم کالینت‪/‬سرور شبکه عمل میکند‪ .‬حساب ‪ root‬همانند یک مدیر سیستم قادر به کنترل‬
‫دسترسی اختیار کالینتهای (کاربران) مختلف را دارد که میتواند کاربران مختلفی را در خود‬
‫داشته باشد‪ .‬این موضوع برای محیطهای کسب و کار که چندین نفر یک سیستم مشابه را به‬
‫اشتراک میگیرند بسیار مفید میباشد‪.‬‬
‫سوأل ‪ :51‬چرا باید حسابهای کاربری دیگر را به سیستم اضافه کرد؟‬
‫پاسخ‪ :‬اگر شما تنها کسی هستید که از سیستم خود استفاده میکنید نیازی به ایجاد حسابهای‬
‫کاربران وجود ندارد؛ به عبارت دیگر اگر کامپیوتر خود را با سایر افراد به اشتراک بگیارید حتی اگر‬
‫چاپگر یا سایر دستگاه های موجود را به افراد حاضر در شبکه به اشتراک بگیارید نیاز به ایجاد‬
‫حسابهای کاربری فردی و حسابهای گروهی میباشد‪.‬‬
‫سوأل ‪ :52‬چگونه میتوان کاربران را اضافه کرد؟‬
‫پاسخ‪ :‬ابزارهای متفاوتی برای این کار وجود دارد‪ .‬به عنوان مثال‪ ،‬در ردهت میتوان از ابزار‬
‫مدیریت دیسک ردهت )‪ (linuxconf‬استفاده کرد‪ .‬اگر استفاده از خط فرمان را نیز ترجیح‬
‫میدهید مجموعهای از برنامههای حالت متنی وجود دارند که اغلب با ‪ adduser‬و ‪ useradd‬کار‬
‫میکنند‪.‬‬
‫برای استفاده از ‪:linux conf‬‬
‫در خط فرمان اجرا کنید‪linuxconf :‬‬ ‫‪.۱‬‬
‫هنگام باز شدن پنل ‪ linuxconf‬به قسمت ‪ user accounts‬و زیر عنوان ‪normal‬‬ ‫‪.۲‬‬
‫مراجعه کنید‪.‬‬
‫کتاب کار برنامهنویسی شلاسکریپت در لینوکس‬ ‫‪۶۴‬‬

‫‪ .۳‬بر روی ‪ user accounts‬دوبار کلیک کنید تا پنل مربوط باز شود که حسابهای‬
‫موجود را لیست میکند‪.‬‬
‫‪ .۴‬برای ایجاد یک کاربر جدید‪ ،‬بر روی دکمه ‪ Add‬کلیک کنید‪ .‬یک زیر پنل با چهار‬
‫تب را مشاهده خواهید کرد‪.Privileges, mail settings, params, Save info .‬‬
‫‪ .۵‬هنگام تکمیل کردن اطالعات ضروری‪ ،‬دکمه ‪ Accept‬را برای ذخیره تغییرات‬
‫فشار دهید‪.‬‬
‫اگر توزیع لینوکس استفاده شده‪ ،‬ابزار گرافیکی ارائه نمیدهد یا اینکه ترجیح میدهید که از خط‬
‫فرمان استفاده کنید میتوانید از ‪ adduser‬برای این منظور بهره ببرید‪ .‬تایپ کنید‪adduser :‬‬
‫‪newusername‬‬
‫سوأل ‪ :53‬چگونه کاربران را حذف کنیم؟‬
‫پاسخ‪ :‬برای این کار‪ ،‬مجموعه فعالیت زیر را انجام دهید‪:‬‬
‫‪ .۱‬به عنوان کاربر ‪ root‬وارد سیستم شوید‬
‫‪ .۲‬از دستور ‪ userdel‬با نام کاربری که میخواهید حیف کنید استفاده کنید‪.‬‬
‫‪userdel mary‬‬
‫‪groupdel‬‬ ‫‪ .۳‬دستور ‪ groupdel‬را برای حیف اطالعات گروه کاربر پیگیری کنید‪:‬‬
‫‪groupname‬‬
‫‪ .۴‬هرگز اطالعات دیگر کاربر را حیف نکنید‪:‬‬
‫‪usermod –G username username‬‬
‫‪ ID‬ورود از فایل ‪ /etc/group‬استفاده کنید‪.‬‬‫‪ .۵‬از یک ویرایشگر متنی برای حیف‬
‫‪ .۶‬دایرکتوری ‪ home‬کاربر و ‪ mailbox‬آن را با استفاده از دستور زیر حیف کنید‪:‬‬
‫‪Rm _R /home/username/user/spool/mail/user name‬‬
‫سوأل ‪ :54‬آیا روشی برای غیر فعالسازی کاربر وجود دارد؟‬
‫پاسخ‪ :‬بله اگر از پسوردهای ‪ shadow‬استفاده میکنید‪ ،‬سادهترین روش غیرفعالسازی یک‬
‫حساب کاربری از طریق دستور ‪ usermod‬میباشد‪ .‬با تنظیم تاریخ انقضاء میتوان این کار را نیز‬
‫انجام داد‪:‬‬
‫‪Usermod _e 01101/92 mary‬‬
‫روش دیگر‪ ،‬تنظیم کاربران منقضی شده با ویرایش فایل ‪ /etc/passwd‬است‪ .‬برای غیرفعالسازی‬
‫کاربر‪ ،‬خطی که کاربر مربوطه در آن قرار دارد را پیدا کنید و عالمت * را در جلوی کلمه عبور قرار‬
‫دهید‪.‬‬
‫سوأل ‪ :55‬چگونه میتوان اطالعات شخصی یک حساب کاربری را اضافه کرد یا تغییر‬
‫داد؟‬
‫پاسخ‪ :‬اگر می خواهید نام‪ ،‬آدرس و شماره تلفن را به حساب خود اضافه کنید یا اطالعات موجود‬
‫را تغییر دهید از دستور ‪ chfn‬استفاده کنید‪ .‬برای تغییر سایر حسابهای کاربری‪ ،‬به عنوان کاربر‬
‫‪۶۵‬‬ ‫بخش هفتم‪ :‬حسابهای کاربری‪ ،‬گروهها و مجوزها‬

‫‪ root‬وارد سیستم شوید و به صورت ‪ chfn ali‬اطالعات آن را تغییر دهید‪.‬‬


‫سوأل ‪ :56‬پسورد ‪ shadow‬چیست؟‬
‫پاسخ‪ :‬پسوردهای ‪ shadow‬برای محافظت پسوردهای سیستم با ایجاد فایل شامل آن پسوردها که‬
‫تنها توسط کاربر ‪ root‬قابل خواندن میباشد بکار میرود‪ .‬برای مشاهده پسوردهای ‪ shadow‬فعال‬
‫بر روی سیستم‪ ،‬دستور زیر را استفاده کنید‪ls /etc/shadow:‬‬
‫اگر در هنگام مشاهده‪ ،‬با پیغام ‪ no such file or directory‬مواجه شوید‪ ،‬در نظر بگیرید که این‬
‫فایلها نصب نشدهاند‪.‬‬
‫ متفرقه‬:‫بخش هشتم‬
‫ از کجا میتوان نرمافزار لینوکس را خریداری یا دانلود کرد؟‬:57 ‫سوأل‬
DLR Fresh Archive (http://www.go.dlr.de/fresh/linux/src)
Freshmeat (http://freshmeat.net; love the name!)
Linux Apps (http://www.linuxapps.com)
Linux Archives (http://home.linuxarchives.com/software.html)
Linux Game Tome (http://www.happypenguin.org)
Linux Games (http://www.linuxgames.com)
Linux Software Encyclopedia
(http://stommel.tamu.edu/~baum/linuxlist/linuxlist/linuxlist.html)
Linuxberg/Tucows Linux (http://linux.tucows.com)
Slashdot (http://slashdot.org)
Indelible Blue (http://www.indelibleblue.com)
Linux Mall (http://www.linuxmall.com)
The Linux Store (http://www.thelinuxstore.com)
Everything Linux (http://www.everythinglinux.com.au)

‫ از کجا میتوان اطالعات و سوأالت تخصصی در خصوص لینوکس را دریافت‬:58 ‫سوأل‬


‫کرد؟‬
Caldera Linux support page (http://www.caldera.com/support).

(http://www.valinux.com/services/support/?session_hash=7d7ccc8f28c0f42cddc98da0
37d7875a
Gnome Web site (http://www.gnome.org) — Home of the Gnome desktop
environment.
KDE Web site (http://www.kde.org) — Home of the KDE desktop environment.
Linux at IBM (http://www-4.ibm.com/software/is/mp/linux) — The IBM Linux home
page,containing news, software downloads and support options.
Linux Documentation Project (http://www.linuxdoc.org) — A collection of Frequently
Asked Questions (FAQs), how-to documents, manuals and online magazines.
Linux Gazette (http://www.linuxgazette.com) — It includes articles, columns and even
comic strips.
Linux Guide (http://www.firstlinux.com/guide) — A glossary of Linux and
communications terms.
Linux Journal (http://www.linuxjournal.com) — It contains links to newsgroups, chat
rooms, online manuals, FAQs, vendor support sites, local Linux user groups and more.
Linux Man Pages (http://linux.ctyme.com) — A collection of the man (manual)
instructions for various Linux commands and utilities.
Linux Newbies (http://www.linuxnewbies.org) — Help files for “newbies” (those new
to Linux).
Red Hat Linux support page (http://www.redhat.com/apps/support).
Slick Penguin (http://www.slickpenguin.com) — White papers, case studies and other
Linux business-related implementation success stories.
SuSE Linux support page (http://www.suse.com/us/support/index.html).
۶۷ ‫ متفرقه‬:‫بخش هشتم‬

TurboLinux support page (http://www.turbolinux.com/support).

You might also like