119-Linux Shell Scripting
119-Linux Shell Scripting
کتاب کار
یس
ربانهمنو ی شلاسکریپت رد لینوکس
فهرست
عنوان۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰صفحه
#!/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 * 1>&2
stderr 2 stdout
grep * 2>&1
stderr and stdout 2 file
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
۷ مجموعه مثالهای گام به گام
#!/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 یافتن
#!/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برنامهای بنوسید که عدد ورودی ۱$را در ۱تا ۱۰ضرب نماید و
۱۱ مجموعه تمرینات تشریحی
: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برنامهای بنویسید که یک اسم فایل و یک لغت را به عنوان ورودی دریافت کند و چک کند
که آیا لغت در فایل وجود دارد یا خیر؟
۱۳ مجموعه تمرینات تشریحی
!(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>
ارائه میکند؟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
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
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";;
۲۷ پاسخنامه
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 "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را ایجاد کنید:
کتاب کار برنامهنویسی شلاسکریپت در لینوکس ۴۲
.۴هنگام بازگشت به پنل انتخاب هارد دیسک ،تغییرات 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میباشند که فایلهای
مایکروسافت آفیس را میتوانند بخوانند و در صورت نیاز تغییراتی در آن اعمال کرد.
لینوکس سازگار نیستند کار میکند .اکثر چنین مودمهایی با لینوکس کار نمیکنند .هر چند
برخی از آنها میتوانند سازگار شوند .به این مودمها 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
پاسخ :بله کاربران ردهت با اجرای 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 :بخش پنجم
سوأل :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
کتاب کار برنامهنویسی شلاسکریپت در لینوکس ۶۰
.۳بر روی 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استفاده کنید .برای تغییر سایر حسابهای کاربری ،به عنوان کاربر
۶۵ بخش هفتم :حسابهای کاربری ،گروهها و مجوزها
(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).
۶۷ متفرقه:بخش هشتم