اسکریپتهای شروع به کار و خاموشی سیستم در شاخه /etc/rc.d، استفادههای (و سودمندی) بسیاری از این فرمانها را روشن میسازند. این فرمانها به طور معمول توسط root فراخوانی میگردند و برای نگهداری یا تعمیرات اضطراری سیستمفایل به کار میروند. با احتیاط به کار ببرید، چون ممکن است برخی از این فرمانها در اثر استفاده نادرست، به سیستم شما آسیب برسانند.
تمام کاربران متصل شده به سیستم را نمایش میدهد. این فرمان یک معادل تقریبی فرمان who -q است.
کاربر جاری و تمام گروههایی را که او به آنها تعلق دارد، لیست میکند. این فرمان مشابه متغیر داخلی $GROUPS است، اما به جای شماره گروهها نام آنها را ارایه میدهد.
bash$ groups bozita cdrom cdwriter audio xgrp bash$ echo $GROUPS 501
فرمان chown مالکیت فایل یا فایلها را تغییر میدهد. این فرمان روش مفیدی است که root میتواند برای تعویض مالکیت یک فایل از یک کاربر به کاربر دیگر، به کار ببرد. یک کاربر معمولی نمیتواند مالکیت فایلها، حتی فایلهای خودش، را تغییر بدهد. [1]
root# chown bozo *.txt
فرمان chgrp مالکیت گروه فایل یا فایلها را تغییر میدهد. برای انجام این کار، شما باید مالک فایل(ها) و همچنین عضوی از گروه مقصد (یا کاربر ارشد) باشید.
chgrp --recursive dunderheads *.data #اکنون گروه dunderheads مالک تمام فایلهای «*.data» است. #+تا پایینترین نقطه در درخت دایرکتوری $PWD (آنچه recursive معنی میدهد).
فرمان مدیریتی useradd یک حساب کاربری به سیستم اضافه میکند و یک دایرکتوری خانگی اگر مشخص شده باشد برای آن کاربر بخصوص ایجاد مینماید. فرمان متناظر userdel یک حساب کاربری و فایلهای مربوطه را از سیستم حذف میکند.[2]
فرمان adduser یک مترادف برای useradd است و معمولا یک پیوند نمادین به آن است. |
ویرایش یک حساب کاربری. تغییرات میتواند روی کلمه عبور، عضویت گروه، تاریخ منقضی شدن، و دیگر مشخصات یک حساب کاربری معین انجام بشود. با این فرمان، یک گذر واژه کاربری، میتواند قفل بشود که دارای اثر غیرفعال کردن حساب است.
ویرایش یک گروه مفروض. نام و-یا شماره ID گروه میتواند با استفاده از این فرمان تعویض گردد.
فرمان id شمارههای ID حقیقی و موثر کاربر و گروهِ مرتبط با پردازش جاری را لیست میکند. نظیر متغیرهای $UID، $EUID، و $GROUPS داخلی Bash است.
bash$ id uid=501(bozo) gid=501(bozo) groups=501(bozo),22(cdrom),80(cdwriter),81(audio) bash$ echo $UID 501
فرمان id شمارههای ID موثر را فقط موقعی که با شمارههای واقعی تفاوت داشته باشند، نشان میدهد. |
همچنین مثال 9-5 را ببینید.
فرمان lid (list ID) گروه یا گروههایی را که یک کاربر معین به آنها تعلق دارد، یا به طور جایگزین کاربران متعلق به یک گروه مفروض را نمایش میدهد. فقط توسط کاربر ارشد(root) میتواند به کار برود.
root# lid bozo bozo(gid=500) root# lid daemon bin(gid=1) daemon(gid=2) adm(gid=4) lp(gid=7)
نمایش تمام کاربران متصل شده به سیستم.
bash$ who bozo tty1 Apr 27 17:45 bozo pts/0 Apr 27 17:46 bozo pts/1 Apr 27 17:47 bozo pts/2 Apr 27 17:49
گزینه -m فقط اطلاعاتی در باره کاربر جاری ارایه میکند. دادن دو شناسه به who معادل است با who -m، همچون در who am i یا who The Man.
bash$ who -m localhost.localdomain!bozo pts/2 Apr 27 17:49
whoami مشابه who -m است، اما فقط نام کاربر را لیست میکند.
bash$ whoami bozo
تمام کاربران متصل به سیستم و پردازشهای متعلق به آنها را نشان میدهد. این یک نگارش توسعهیافته از فرمان who است. خروجی w میتواند جهت یافتن یک کاربر و-یا پردازش بخصوص به grep لولهکشی بشود.
bash$ w | grep startx bozo tty1 - 4:22pm 6:41 4.47s 0.45s startx
نام لاگین کاربر جاری را (به طوریکه در /var/run/utmp یافته) نمایش میدهد. این فرمان یک معادل نزدیک برای whoami فوق است.
bash$ logname bozo bash$ whoami bozo
در حالیکه . . .
bash$ su Password: ...... bash# whoami root bash# logname bozo
در حالیکه logname نامی را که کاربر با آن لاگین نموده است، نمایش میدهد whoami نام کاربری مربوط به پردازش جاری را ارایه میکند. به طوری که الساعه دیدیم، گاهی اوقات این دو نام یکسان نیستند. |
یک برنامه یا اسکریپت را به عنوان یک substitute user(کاربر جایگزین) اجرا میکند. su rjones به عنوان کاربر rjones یک پوسته راهاندازی میکند. پیشفرض یک su تنها و بدون شناسه، root است. مثال A-14 را ببینید.
یک فرمان را به عنوان root (یا یک کاربر دیگر) اجرا میکند. این فرمان میتواند در یک اسکریپت به کار برود، به این طریق به یک کاربر عادی امکان اجرای اسکریپت را میدهد.
#!/bin/bash #چند فرمان. sudo cp /root/secretfile /home/bozo/secret #چند فرمان دیگر.
فایل /etc/sudoers نام کاربران مجاز برای فراخوانی sudo را نگهداری میکند.
کلمه عبور یک کاربر را تنظیم، تعویض، یا مدیریت میکند.
فرمان passwd میتواند در یک اسکریپت به کار برود، اما شاید بهتر باشد استفاده نشود.
مثال 17-1. تنظیم یک کلمه عبور جدید
#!/bin/bash # #اجرای این اسکریپت به طور واقعی، ایده مناسبی نیست. #این اسکریپت باید به عنوان root اجرا گردد. ROOT_UID=0 #Root دارای $UID برابر 0 است. E_WRONG_USER=65 #root نیست؟ E_NOSUCHUSER=70 SUCCESS=0 if [ "$UID" -ne "$ROOT_UID" ] then echo; echo "Only root can run this script."; echo exit $E_WRONG_USER else echo echo "You should know better than to run this script, root." echo "Even root users get the blues... " echo fi username=bozo NEWPASSWORD=security_violation #کنترل وجود کاربر bozo grep -q "$username" /etc/passwd if [ $? -ne $SUCCESS ] then echo "User $username does not exist." echo "No password changed." exit $E_NOSUCHUSER fi echo "$NEWPASSWORD" | passwd --stdin "$username" #گزینه --stdin به passwd اجازه میدهد یک کلمه عبور #+جدید از stdin (یا یک لوله) دریافت نماید. echo; echo "User $username's password changed!" #به کار بردن فرمان passwd در یک اسکریپت خطرناک است. exit 0
گزینههای -l، -u، و -d فرمان passwd، قفل کردن، باز کردن قفل، و حذف یک کلمه عبور کاربر را میسر میکنند. فقط کاربر ارشد میتواند این گزینهها را به کار ببرد.
زمان لاگین بودن کاربر را در نتیجه خواندن از فایل /var/log/wtmp نشان میدهد. این یکی از برنامههای سودمند گزارش گنو است.
bash$ ac total 68.08
آخرین کاربران متصل شده به سیستم را به طوری که از فایل /var/log/wtmp خوانده، لیست میکند. این فرمان اتصالهای راه دور را هم میتواند نمایش بدهد.
برای مثال، برای نمایش چند مرتبه اخیری که سیستم راهاندازی مجدد(reboot) گردیده:
bash$ last reboot reboot system boot 2.6.9-1.667 Fri Feb 4 18:18 (00:02) reboot system boot 2.6.9-1.667 Fri Feb 4 15:20 (01:27) reboot system boot 2.6.9-1.667 Fri Feb 4 12:56 (00:49) reboot system boot 2.6.9-1.667 Thu Feb 3 21:08 (02:17) . . . wtmp begins Tue Feb 1 12:50:09 2005
ID گروه کاربر را بدون قطع ارتباط(logout) کردن تغییر میدهد. این فرمان دستیابی به فایلهای گروه جدید را مجاز مینماید. چون کاربران میتوانند به طور همزمان عضو چند گروه باشند، این فرمان مورد استفاده محدودی دارد.
Kurt Glaesemann اشاره میکند که فرمان newgrp میتواند در تنظیم مجوزهای قراردادی گروه فایلهایی که یک کاربر مینویسد مفید واقع شود. با این وجود، شاید فرمان chgrp برای این منظور، مناسبتر باشد. |
نام (نامفایل) ترمینال کاربر جاری را بازتاب میدهد. توجه نمایید که هر پنجره xterm جداگانه
bash$ tty /dev/pts/1
تنظیمات ترمینال را نمایش و-یا تغییر میدهد. این فرمان پیچیده، با به کار رفتن در یک اسکریپت میتواند رفتار ترمینال و نحوه نمایش خروجی را کنترل نماید. صفحه info را ببینید و به دقت مطالعه نمایید.
مثال 17-2. تنظیم یک کاراکتر پاککن
#!/bin/bash #کاربرد stty برای تنظیم یک کاراکتر پاککن در هنگام خواندن ورودی. erase.sh: echo -n "What is your name? " read name #backspace را برای پاک کردن کاراکترهای #+ورودی امتحان کنید. #مشکلی هست؟ echo "Your name is $name." stty erase '#' #تنظیم علامت # به عنوان کاراکتر پاککن. echo -n "What is your name? " read name ## را برای حذف کاراکتر آخر امتحان کنید. echo "Your name is $name." exit 0 #حتی پس از خروج اسکریپت، مقدار کلید جدید تنظیم شده باقی میماند. #تمرین: چگونه میتوانید کاراکتر پاککن را دوباره به مقدار پیشفرض تنظیم کنید؟
مثال 17-3. کلمه عبور مخفی: از کار انداختن بازتاب ترمینال
#!/bin/bash #کلمه عبور مخفی secret-pw.sh: echo echo -n "Enter password " read passwd echo "password is $passwd" echo -n "If someone had been looking over your shoulder, " echo "your password would have been compromised." echo && echo #دو سطر جدید برای فاصله گذاری. stty -echo #بازتاب صفحه نمایش را خاموش میکند. #همچنین با read -sp passwd نیز میتواند انجام گردد. #با سپاس فراوان از Leigh James برای اشاره به این مورد. echo -n "Enter password again " read passwd echo echo "password is $passwd" echo stty echo #برگردانیدن بازتاب صفحه نمایش. exit 0 #برای مطالعه بیشتر در باره این فرمان مفید اما دشوار، یک info stty انجام بدهید.
یک استفاده ابتکاری فرمان stty، شناسایی ضربه کلید کاربر (بدون زدن ENTER) است.
#!/bin/bash #تشخیص یک ضربه کلید کاربر («کلیدهای فوری»). echo old_tty_settings=$(stty -g) #ذخیره تنظیمات قدیمی (چرا؟). stty -icanon Keypress=$(head -c1) #یادستور زیر در سیستمهای غیر گنو #$(dd bs=1 count=1 2> /dev/null) echo echo "Key pressed was \""$Keypress"\"." echo stty "$old_tty_settings" #بازیابی تنظیمات قدیمی. #با تشکر از Stephane Chazelas exit 0
همچنین مثال 9-3 و مثال A-43 را ببینید.
تنظیم برخی خصوصیات ترمینال. این فرمان رشتهای را در خروجی استاندارد ترمینالش مینویسد که رفتار آن ترمینال را تغییر میدهد.
bash$ setterm -cursor off bash$
فرمان setterm میتواند در داخل یک اسکریپت برای تغییر دادن ظاهر متن نوشته شده درstdout به کار برود، گرچه برای این منظور مسلماً ابزارهای بهتری در دسترس هستند.
setterm -bold on echo bold hello setterm -bold off echo normal hello
تنظیمات ترمینال را نشان داده یا مقداردهی میکند. این فرمان، نگارش کمتر کارآمد stty است.
bash$ tset -r Terminal type is xterm-xfree86. Kill is control-U (^U). Interrupt is control-C (^C).
تنظیم یا نمایش پارامترهای درگاه سریال. این فرمان باید توسط root اجرا گردد و معمولاً در یک اسکریپت تنظیم سیستم یافت میشود.
#از اسکریپت /etc/pcmcia/serial script IRQ=`setserial /dev/$DEVICE | sed -e 's/.*IRQ: //'` setserial /dev/$DEVICE irq 0 ; setserial /dev/$DEVICE irq $IRQ
پردازش مقداردهی اولیه یک ترمینال، از فرمان getty یا agetty جهت تنظیم آن برای لاگین توسط یک کاربر استفاده میکند. این فرمانها داخل اسکریپتهای پوسته به کار نمیروند. همتای اسکریپتنویسی آنها فرمان stty است.
دسترسی نوشتن در ترمینال کاربر جاری را فعال یا غیرفعال میکند. غیرفعال کردن دسترسی، از نوشتن یک کاربر دیگر شبکه روی ترمینال پیشگیری خواهد نمود.
داشتن پیغامی در باره سفارش پیتزا که به طور ناگهانی در وسط فایل متنی که در حال ویرایش آن هستید ظاهر گردد، میتواند کاملاً آزار دهنده باشد. بنابراین شاید در یک شبکه چند کاربره، موقعی که نیازمند پرهیز از تعلیقها هستید، بخواهید دسترسی نوشتن در ترمینالتان راغیر فعال نمایید. |
این فرمان یک مخفف برای «write all» است، یعنی فرستادن یک پیغام به تمام کاربران در هر ترمینال وارد شده به شبکه. در اصل یک ابزار مدیریت سیستم سودمند است، به عنوان مثال، موقع هشدار دادن به همه در مورد اینکه به واسطه یک مشکل، بزودی سیستم از کار انداخته میشود (مثال 19-1 را ببینید).
bash$ wall System going down for maintenance in 5 minutes! Broadcast message from bozo (pts/1) Sun Jul 8 13:53:27 2001... System going down for maintenance in 5 minutes!
اگر دسترسی نوشتن ترمینال خاصی با فرمان mesg غیر فعال شده باشد، آنوقت wall نمیتواند پیغامی به آن ترمینال بفرستد. |
مشخصات سیستم (سیستم عامل، نگارش کرنل، وغیره) را در stdout بیرون میدهد. فراخوانی با گزینه -a اطلاعات طولانی سیستم را ارایه میکند (مثال 16-5 را مشاهده نمایید). گزینه -s فقط نوع سیستم عامل را نشان میدهد.
bash$ uname Linux bash$ uname -s Linux bash$ uname -a Linux iron.bozo 2.6.15-1.2054_FC5 #1 Tue Mar 14 15:48:33 EST 2006 i686 i686 i386 GNU/Linux
نمایش معماری سیستم. معادل uname -m است. مثال 11-27 را ملاحظه نمایید.
bash$ arch i686 bash$ uname -m i686
اطلاعاتی در باره فرمان قبلی، به طوری که در فایل /var/log/account/pacct نگهداری شده، ارایه میکند. نام فرمان و نام کاربر میتواند به وسیله گزینهها تعیین بشود. این یکی از برنامههای گزارش (accounting) گنو است.
لیست زمان آخرین لاگین تمام کاربران سیستم. این فرمان به فایل /var/log/lastlog مراجعه میکند.
bash$ lastlog root tty1 Fri Dec 7 18:43:21 -0700 2001 bin **Never logged in** daemon **Never logged in** ... bozo tty1 Sat Dec 8 21:14:29 -0700 2001 bash$ lastlog | grep root root tty1 Fri Dec 7 18:43:21 -0700 2001
اگر کاربر فراخوانی کننده دارای مجوز خواندن فایل /var/log/lastlog نباشد، این فرمان موفق نخواهد شد. |
فهرست فایلهای باز. این فرمان یک جدول تفصیلی از تمام فایلهایی که در حال حاضر باز هستند و اطلاعاتی در باره مالک، اندازه، پردازشهای مرتبط با آنها، و موارد دیگر، ارایه میکند. البته، lsof میتواند برای تجزیه و تحلیل نتایجش به grep و/یا awk لولهکشی بشود.
bash$ lsof COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root mem REG 3,5 30748 30303 /sbin/init init 1 root mem REG 3,5 73120 8069 /lib/ld-2.1.3.so init 1 root mem REG 3,5 931668 8075 /lib/libc-2.1.3.so cardmgr 213 root mem REG 3,5 36956 30357 /sbin/cardmgr ...
فرمان lsof یک ابزار سودمند اما پیچیده مدیریتی است. اگر شما قادر به پیاده کردن (dismount) یک سیستمفایل نیستید و پیغام خطایی دریافت مینمایید که هنوز در حال استفاده است، آنوقت اجرای lsof به تعیین آن که کدام فایلها روی آن سیستمفایل هنوز باز هستند کمک میکند. گزینه -i فایلهای socket باز شبکه را لیست میکند، و این میتواند به ردیابی سوءقصدهای نفوذ یا hack کمک نماید.
bash$ lsof -an -i tcp COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME firefox 2330 bozo 32u IPv4 9956 TCP 66.0.118.137:57596->67.112.7.104:http ... firefox 2330 bozo 38u IPv4 10535 TCP 66.0.118.137:57708->216.79.48.24:http ...
برای یک استفاده موثر از lsofمثال 30-2 را ببینید .
System trace: ابزار تشخیص و اشکالزدایی جهت ردیابی سیگنالها و فراخوانهای سیستم. این فرمان و ltrace در ادامه، برای تشخیص دادن آن که چرا اجرای یک برنامه یا بسته ناموفق است . . . شاید ناشی از فقدان کتابخانهها یا دلایل مرتبط ... مفید هستند.
bash$ strace df execve("/bin/df", ["df"], [/* 45 vars */]) = 0 uname({sys="Linux", node="bozo.localdomain", ...}) = 0 brk(0) = 0x804f5e4 ...
این یک معادل لینوکس برای فرمان truss سولاریس است.
Library trace: ابزار تشخیص و اشکالزدایی که فراخوانهای کتابخانه احضار شده به وسیله یک فرمان مفروض را ردیابی میکند.
bash$ ltrace df __libc_start_main(0x804a910, 1, 0xbfb589a4, 0x804fb70, 0x804fb68 <unfinished ...>: setlocale(6, "") = "en_US.UTF-8" bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale" textdomain("coreutils") = "coreutils" __cxa_atexit(0x804b650, 0, 0, 0x8052bf0, 0xbfb58908) = 0 getenv("DF_BLOCK_SIZE") = NULL ...
برنامه سودمند nc (netcat) یک جعبه ابزار کامل برای ارتباط و گوش دادن به درگاههای TCP و UDP است. به عنوان یک ابزار تشخیص و بررسی و به عنوان یک جزء سازنده خادم و مخدومهای ساده HTTP بر پایه اسکریپت مفید است.
bash$ nc localhost.localdomain 25 220 localhost.localdomain ESMTP Sendmail 8.13.1/8.13.1; Thu, 31 Mar 2005 15:41:35 -0700
یک مثال کاربردی راستین.
مثال 17-5. کنترل یک خادم راهدور برای identd
#! /bin/sh ## ## ## ## ## ##+ ## ##+ # # # E_BADARGS=65 # TWO_WINKS=2 # THREE_WINKS=3 IDPORT=113 # RAND1=999 RAND2=31337 TIMEOUT0=9 TIMEOUT1=8 TIMEOUT2=4 # case "${2}" in "" ) echo "Need HOST and at least one PORT." ; exit $E_BADARGS ;; esac # nc -z -w $TIMEOUT0 "$1" $IDPORT || \ { echo "Oops, $1 isn't running identd." ; exit 0 ; } # # # RP=`expr $$ % $RAND1 + $RAND2` TRG="$1" shift while test "$1" ; do nc -v -w $TIMEOUT1 -p ${RP} "$TRG" ${1} < /dev/null > /dev/null & PROC=$! sleep $THREE_WINKS echo "${1},${RP}" | nc -w $TIMEOUT2 -r "$TRG" $IDPORT 2>&1 sleep $TWO_WINKS # # #+ kill -HUP $PROC RP=`expr ${RP} + 1` shift done exit $? # # # #+ # #+ #+
و البته اسکریپت یک سطری معروف دکتر Andrew Tridgell در BitKeeper Affair:
echo clone | nc thunk.org 5000 > e2fsprogs.dat
حافظه و cache مورد استفاده را در یک شکل جدولی نمایش میدهد. برای تجزیه خروجی این فرمان از grep، awk یا Perl استفاده میشود. فرمان procinfo تمام اطلاعاتی که free ارایه میدهد و خیلی بیشتر از آن را نشان میدهد.
bash$ free total used free shared buffers cached Mem: 30504 28624 1880 15820 1608 16376 -/+ buffers/cache: 10640 19864 Swap: 68540 3128 65412
برای نمایش حافظه RAM استفاده نشده(آزاد):
bash$ free | grep Mem | awk '{ print $4 }' 1880
اطلاعات و آمار را از سیستمفایل کاذب /proc استخراج و لیست میکند. این برنامه یک لیست بسیار گسترده و تفصیلی ارایه میکند.
bash$ procinfo | grep Bootup Bootup: Wed Mar 21 15:15:50 2001 Load average: 0.04 0.21 0.34 3/47 6829
لیست کردن دستگاهها، یعنی نمایش سختافزارهای نصب شده.
bash$ lsdev Device DMA IRQ I/O Ports ------------------------------------------------ cascade 4 2 dma 0080-008f dma1 0000-001f dma2 00c0-00df fpu 00f0-00ff ide0 14 01f0-01f7 03f6-03f6 ...
نمایش فضای مصرفی فایل(دیسک)، به طور بازگشتی. پیشفرض آن دایرکتوری کاری جاری است، مگر اینکه مورد دیگری تعیین شده باشد.
bash$ du -ach 1.0k ./wi.sh 1.0k ./tst.sh 1.0k ./random.file 6.0k . 6.0k total
اطلاعات استفاده از سیستمفایل را در یک قالب جدولی نمایش میدهد.
bash$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda5 273262 92607 166547 36% / /dev/hda8 222525 123951 87085 59% /home /dev/hda7 1408796 1075744 261488 80% /usr
تمام پیغامهای بالا آمدن سیستم را در خروجی استاندارد لیست میکند. برای اشکالزدایی و معلوم نمودن آن که کدام گردانندههای دستگاه نصب گردیدهاند و کدام وقفههای سیستم در حال استفاده هستند، به کار میآید. البته خروجی dmesg میتواند از داخل یک اسکریپت با grep، sed، یا awk تجزیه شود.
bash$ dmesg | grep hda Kernel command line: ro root=/dev/hda2 hda: IBM-DLGA-23080, ATA DISK drive hda: 6015744 sectors (3080 MB) w/96KiB Cache, CHS=746/128/63 hda: hda1 hda2 hda3 < hda5 hda6 hda7 > hda4
آمار مفصل و طولانی در مورد یک فایل معین (حتی یک دایرکتوری یا فایل دستگاه) یا گروهی از فایلها ارایه میدهد.
bash$ stat test.cru File: "test.cru" Size: 49970 Allocated Blocks: 100 Filetype: Regular File Mode: (0664/-rw-rw-r--) Uid: ( 501/ bozo) Gid: ( 501/ bozo) Device: 3,8 Inode: 18185 Links: 1 Access: Sat Jun 2 16:40:24 2001 Modify: Sat Jun 2 16:40:24 2001 Change: Sat Jun 2 16:40:24 2001
اگر فایل هدف موجود نباشد، stat یک پیغام خطا برگشت میدهد.
bash$ stat nonexistent-file nonexistent-file: No such file or directory
در یک اسکریپت، میتوانید از stat برای بیرون کشیدن اطلاعات فایلها (و سیستمفایل) و تنظیم متغیرهای متناسب آن استفاده کنید.
#!/bin/bash # fileinfo2.sh #طبق پیشنهاد Joël Bourquard و . . . #http://www.linuxquestions.org/questions/showthread.php?t=410766 FILENAME=testfile.txt file_name=$(stat -c%n "$FILENAME") #البته همانند $FILENAME file_owner=$(stat -c%U "$FILENAME") file_size=$(stat -c%s "$FILENAME") #مسلماً آسانتر از کاربرد ls -l $FILENAME و سپس تجزیه با sed است file_inode=$(stat -c%i "$FILENAME") file_type=$(stat -c%F "$FILENAME") file_access_rights=$(stat -c%A "$FILENAME") echo "File name: $file_name" echo "File owner: $file_owner" echo "File size: $file_size" echo "File inode: $file_inode" echo "File type: $file_type" echo "File access rights: $file_access_rights" exit 0bash$ sh fileinfo2.sh File name: testfile.txt File owner: bozo File size: 418 File inode: 1730378 File type: regular file File access rights: -rw-rw-r--
نمایش آمار حافظه مجازی.
bash$ vmstat procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 0 11040 2636 38952 0 0 33 7 271 88 8 3 89
مدت زمانی را که سیستم در حال اجرا بوده همراه با آمار مرتبط نشان میدهد.
bash$ uptime 10:28pm up 1:57, 3 users, load average: 0.17, 0.34, 0.27
یک load average برابر یا کمتر از 1 بیانگر آن است که سیستم پردازشها را بیدرنگ اداره میکند. یک میانگین بار(load average) بزرگتر از 1 به معنی آن است که پردازشها در صف قرار داده میشوند. وقتی میانگین بار بیشتر از 3 (روی پردازشگر یک هستهای) بشود، آنوقت کارایی سیستم به طور چشمگیری کاهش یافته است. |
نام میزبان سیستم را لیست میکند. این فرمان نام میزبان را در یک اسکریپت برپاسازی (/etc/rc.d/rc.sysinit یا مشابه آن) در /etc/rc.d تنظیم میکند. معادل با uname -n، و همتای متغیر داخلی $HOSTNAME است.
bash$ hostname localhost.localdomain bash$ echo $HOSTNAME localhost.localdomain
مشابه فرمان hostname، فرمانهای domainname، dnsdomainname، nisdomainname، و ypdomainname هستند. از این فرمانها برای نمایش یا تنظیم DNS سیستم یا NIS/YP نام قلمرو استفاده کنید. گزینههای متنوع hostname نیز این کارها را انجام میدهند.
یک شناسه عددی هگزادسیمال 32 بیتی برای ماشین میزبان بازتاب میدهد.
bash$ hostid 7f0100
ظاهراً این فرمان یک شماره سریال «منحصر به فرد» برای یک سیستم خاص واکشی میکند. برخی روالهای نامنویسی محصول، این عدد را برای نشانهگذاری پروانه یک کاربر خاص به کار میبرند. متاسفانه، hostid فقط آدرس شبکه ماشین بر حسب هگزادسیمال را که جفت بایتهای آن جابه جا شدهاند، برگشت میدهد.
آدرس شبکه یک ماشین لینوکس غیر شبکهای نوعی، در /etc/hosts یافت میشود. bash$ cat /etc/hosts 127.0.0.1 localhost.localdomain localhost همچنانکه معلوم است، با پس و پیش کردن جفت بایتهای 127.0.0.1،ما به آدرس 0.127.1.0 میرسیم، که معادل آن در هگزادسیمال 007f0100 است، دقیقاً همان چیزی که hostid فوق برگشت میدهد. فقط چند میلیون ماشین لینوکس دیگر با این hostid یکسان وجود دارد. |
فراخوانی sar (برگرفته از System Activity Reporter) آمار خیلی مشروحی از کار سیستم ارایه میکند. پایگاه سانتاکروز ( SCO قدیم) در ژوئن 1999 برنامه sar را به صورت منبع باز منتشر نمود.
این فرمان، قسمتی از توزیع لینوکس نیست، اما میتواند به عنوان بخشی از بسته sysstat نوشته شده به وسیله Sebastien Godard تهیه گردد.
bash$ sar Linux 2.4.9 (brooks.seringas.fr) 09/26/03 10:30:00 CPU %user %nice %system %iowait %idle 10:40:00 all 2.21 10.90 65.48 0.00 21.41 10:50:00 all 3.36 0.00 72.36 0.00 24.28 11:00:00 all 1.12 0.00 80.77 0.00 18.11 Average: all 2.23 3.63 72.87 0.00 21.27 14:32:30 LINUX RESTART 15:00:00 CPU %user %nice %system %iowait %idle 15:10:00 all 8.59 2.40 17.47 0.00 71.54 15:20:00 all 4.07 1.00 11.95 0.00 82.98 15:30:00 all 0.79 2.94 7.56 0.00 88.71 Average: all 6.33 1.70 14.71 0.00 77.26
اطلاعات و آماری در باره یک فایل باینری elf مشخص شده نمایش میدهد. این فرمان بخشی از بسته binutils است.
bash$ readelf -h /bin/bash ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) . . .
فرمان size [/path/to/binary] اندازه سگمنت یک فایل باینری قابل اجرا یا فایل بایگانی را ارایه میدهد. این فرمان، بیشتر مورد استفاده برنامهنویسان است.
bash$ size /bin/bash text data bss dec hex filename 495971 22496 17392 535859 82d33 /bin/bash
یک پیغام تولیدشده کاربر را به فایل ثبت رخداد سیستم (/var/log/messages)
logger Experiencing instability in network connection at 23:10, 05/21. #اکنون یک tail /var/log/messages اجرا کنید.
با جاسازی یک فرمان logger در اسکریپت، نوشتن اطلاعات اشکالزدایی در فایل /var/log/messages امکانپذیر میشود.
logger -t $0 -i Logging at line "$LINENO". #گزینه -t علامت برای ورودی logger را مشخص میکند. #گزینه -i شماره ID پردازش را ثبت میکند. bash$ tail /var/log/message ... Jul 7 20:48:58 localhost ./test.sh[1712]: Logging at line 3.
این برنامه سودمند فایلهای ثبت رخداد سیستم را مدیریت میکند، به طور مقتضی آنها را نوبتی میکند، فشرده میسازد، حذف میکند، و-یا ایمیل میکند. این فرمان از شلوغ شدن /var/log با فایلهای لاگ قدیمی پیشگیری میکند. معمولاً cron به طور روزانه logrotate را اجرا میکند.
افزودن یک مدخل مناسب به /etc/logrotate.conf مدیریت فایلهای ثبت رخداد شخصی را علاوه بر فایلهای کل سیستم، میسر میسازد.
Stefano Falsetto برنامه rottlog را تولید کرده است، که در نظر داشته نگارش بهبودیافتهای از logrotate باشد. |
Process Statistics (آمار پردازشها): پردازشهای در حال اجرای جاری را با مالک و PID (ID پردازش) آنها لیست میکند. این فرمان به طور معمول با گزینههای ax یا aux فراخوانده میشود و ممکن است برای جستجوی یک پردازش خاص به grep یا sed لولهکشی بشود ( مثال 15-14 و مثال 29-3 را ببینید).
bash$ ps ax | grep sendmail 295 ? S 0:00 sendmail: accepting connections on port 25
برای نمایش پردازشهای سیستم در قالب «درخت» گرافیکی: ps afjx یا ps ax --forest.
تلفیق فرمان ps با grep یا kill.
bash$ ps a | grep mingetty 2212 tty2 Ss+ 0:00 /sbin/mingetty tty2 2213 tty3 Ss+ 0:00 /sbin/mingetty tty3 2214 tty4 Ss+ 0:00 /sbin/mingetty tty4 2215 tty5 Ss+ 0:00 /sbin/mingetty tty5 2216 tty6 Ss+ 0:00 /sbin/mingetty tty6 4849 pts/2 S+ 0:00 grep mingetty bash$ pgrep mingetty 2212 mingetty 2213 mingetty 2214 mingetty 2215 mingetty 2216 mingetty
رفتار pkill را با killall قیاس کنید.
پردازشهای در حال اجرای جاری را در قالب «درختی» لیست میکند. گزینه -p علاوه بر نام پردازشها، PIDها را نیز نشان میدهد.
نمایش مرتباً به هنگام شونده پردازشهایی که دارای بیشترین مصرف cpu هستند. گزینه -b در وضعیت متنی نمایش میدهد، به طوری که خروجی میتواند از یک اسکریپت دستیابی یا تجزیه بشود.
bash$ top -b 8:30pm up 3 min, 3 users, load average: 0.49, 0.32, 0.13 45 processes: 44 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 13.6% user, 7.3% system, 0.0% nice, 78.9% idle Mem: 78396K av, 65468K used, 12928K free, 0K shrd, 2352K buff Swap: 157208K av, 0K used, 157208K free 37244K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 848 bozo 17 0 996 996 800 R 5.6 1.2 0:00 top 1 root 8 0 512 512 444 S 0.0 0.6 0:04 init 2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd ...
اجرای یک job پسزمینه با یک اولویت تغییر یافته. اولویتها از 19 (پایینترین) تا -20 (بالاترین) تغییر میکنند. فقط کاربر ارشد میتواند اولویتهای منفی (بالاتر) را تنظیم نماید. فرمانهای مرتبط، renice و snice هستند که اولویت پردازش یا پردازشهای در حال اجرا را تغییر میدهند، و skill که یک سیگنال kill به پردازش یا پردازشها میفرستد.
یک فرمان را حتی بعد از قطع اتصال (log off)کاربر، در حال اجرا نگاه میدارد. فرمان به عنوان یک پردازش پیشزمینه اجرا میگردد، مگر اینکه با & دنبال بشود. اگر شما از nohup داخل یک اسکریپت استفاده میکنید، همراه کردن آن را با wait، به منظور پیشگیری از ایجاد یک پردازش یتیم یا زامبی در نظر داشته باشید.
ID پردازش (PID) یک job در حال اجرا را شناسایی میکند. چون فرمانهای کنترل job از قبیل kill و renice روی PID یک پردازش (نه نام آن) عمل میکنند، گاهی اوقات مشخص کردن آن PID لازم است. فرمان pidof معادل تقریبی متغیر داخلی $PPID است.
bash$ pidof xclock 880
مثال 17-6. pidof به کشتن یک پردازش کمک میکند
#!/bin/bash #kill-process.sh NOPROCESS=2 process=xxxyyyzzz #استفاده از پردازش ناموجود. #فقط به منظور یک نمونه نمایشی... #... در عمل یک پردازش واقعی را با این اسکریپت از بین نبرید. # #اگر، برای مثال، میخواستید این اسکریپت را برای قطع ارتباط #اینترنت به کار ببرید: process=pppd t=`pidof $process` #پیدا کردن pid (id پردازشِ) $process. #pid برای kill لازم میشود (با نام برنامه نمیتواند kill شود). if [ -z "$t" ] #اگر پردازش موجود نباشد pidof هیچ را برگشت میدهد. then echo "Process $process was not running." echo "Nothing killed." exit $NOPROCESS fi kill $t #برای پردازش سمج، ممکن است kill -9 لازم باشد. #در اینجا یک کنترل برای دیدن آنکه پردازش، مجاز به کشتن خود باشد لازم است. #شاید یک " t=`pidof $process` " دیگر یا ... #تمام این اسکریپت میتوانست با #kill $(pidof -x process_name) #یا #killall process_name تعویض بشود #اما، نمیتوانست آموزنده باشد. exit 0
پردازشهایی (با PID) را که در حال دستیابی به یک فایل معین، مجموعهای از فایلها، یا یک دایرکتوری هستند، مشخص میکند. همچنین ممکن است با گزینه -k فراخوانی گردد، که آن پردازشها را kill میکند. این دارای پیامدهای جالبی برای امنیت سیستم است، مخصوصاً در اسکریپتها از دستیابی کاربران غیر مجاز به سرویسهای سیستم پیشگیری میکند.
bash$ fuser -u /usr/bin/vim /usr/bin/vim: 3207e(bozo) bash$ fuser -u /dev/null /dev/null: 3009(bozo) 3010(bozo) 3197(bozo) 3199(bozo)
یک کاربرد با اهمیت برای fuser هنگام وصل کردن یا جداسازی فیزیکی رسانههای ذخیره، از قبیل دیسکهای CD ROM یا USB است. گاهی اوقات تلاش برای umount با یک پیغام «device is busy» با شکست مواجه میگردد. این به معنای آن است که کاربر(ان) معینی و/یا پردازش(ها) در حال دستیابی آن دستگاه هستند. یک fuser -um /dev/device_name معما را فاش خواهد نمود، به طوریکه شما میتوانید هر پردازش مرتبط را kill نمایید.
bash$ umount /mnt/usbdrive umount: /mnt/usbdrive: device is busy bash$ fuser -um /dev/usbdrive /mnt/usbdrive: 1772c(bozo) bash$ kill -9 1772 bash$ umount /mnt/usbdrive
فرمان fuser که با گزینه -n فراخوانی شده، پردازش در حال دسترسی به یک port را شناسایی میکند. این مخصوصاً در ترکیب با nmap سودمند است.
root# nmap localhost.localdomain PORT STATE SERVICE 25/tcp open smtp root# fuser -un tcp 25 25/tcp: 2095(root) root# ps ax | grep 2095 | grep -v grep 2095 ? Ss 0:00 sendmail: accepting connections
برنامه مدیریتی زمانبندی، وظایفی از قبیل پاکسازی و حذف فایلهای ثبت رخداد سیستم و به هنگامسازی بانک اطلاعات slocate را انجام میدهد. این فرمان، نگارش کاربر ارشد فرمان at است (اگر چه، هر کاربر ممکن است دارای فایل crontab خودش باشد که میتواند با فرمان crontab تغییر داده شود). این فرمان به صورت یک daemon راهاندازی میشود و مدخلهای زمانبندی شده را از فایل /etc/crontab اجرا میکند.
برخی گونههای لینوکس، crond، نگارش Matthew Dillon از crontab را اجرا میکنند. |
فرمان init پدر تمام پردازشها است. در آخرین مرحله بوت شدن فراخوانده میشود، init سطح اجرایی سیستم را از /etc/inittab تعیین میکند. با مستعارش telinit، و فقط توسط root فراخوانی میگردد.
یک پیوند نمادین به init، این وسیلهای برای تعویض سطح اجرایی سیستم است، کاری که معمولاً برای نگهداری سیستم یا تعمیر اضطراری سیستمفایل انجام میشود. فقط به وسیله root فراخوانی میشود. این فرمان میتواند خطرناک باشد -- قبل از به کار بردن آن مطمئن شوید که آن را خوب میفهمید!
سطح اجرایی جاری و قبلی را نشان میدهد، یعنی آیا سیستم متوقف شده (سطح اجرایی 0)، در وضعیت یک کاربری (1)، در وضعیت چند کاربری (2 یا 3)، در وضعیت گرافیکی X Windows (5)، یا در حال راهاندازی مجدد (6) است. این فرمان فایل /var/run/utmp را دستیابی میکند.
مجموعه فرمانها برای پایین آوردن سیستم، معمولاً درست قبل از خاموش کردن.
در بعضی توزیعهای لینوکس، فرمان halt دارای مجوزهای 755 است، بنابراین میتواند به وسیله کاربری غیر از root نیز فراخوانی گردد. یک halt بیدقت در ترمینال یا در یک اسکریپت ممکن است سیستم را خاموش کند! |
یک service در سیستم را شروع یا متوقف میکند. اسکریپتهای راهاندازی در شاخه /etc/init.d و /etc/rc.d برای شروع سرویسها در هنگام بالا آمدن سیستم، از این فرمان استفاده میکنند.
root# /sbin/service iptables stop Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ]
ترسیم کننده شبکه (Network mapper) و پوینده درگاه. این فرمان یک سرویسدهنده را برای تعیین کردن درگاههای باز و سرویسهای مرتبط با آن درگاهها تجسس میکند. همچنین میتواند اطلاعاتی در باره فیلترهای packet و دیوارههایآتش گزارش نماید. این یک ابزار امنیتی مهم برای محافظت یک شبکه در مقابل تلاشهای دستیابی غیر مجاز است.
#!/bin/bash SERVER=$HOST #قلمرو محلی روی میزبان محلی (127.0.0.1) PORT_NUMBER=25 #درگاه SMTP nmap $SERVER | grep -w "$PORT_NUMBER" #آیا آن درگاه خاص باز است؟ #grep -w فقط کلمات را به طور کامل مطابقت میدهد، بنابراین، به عنوان #+مثال، با درگاه 1025 مطابقت نخواهد نمود. exit 0 #25/tcp open smtp
پیکربندی واسط شبکه و برنامه سودمند میزانسازی.
bash$ ifconfig -a lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:700 (700.0 b) TX bytes:700 (700.0 b)
فرمان ifconfig اکثر اوقات برای تنظیم واسطها در زمان بالا آمدن سیستم، یا برای از کارانداختن آنها هنگام راهاندازی مجدد (rebooting) به کار میرود.
#قطعه کد جداشده از /etc/rc.d/init.d/network #... #کنترل اینکه شبکه فعال است. [ ${NETWORKING} = "no" ] && exit 0 [ -x /sbin/ifconfig ] || exit 0 #... for i in $interfaces ; do if ifconfig $i 2>/dev/null | grep -q "UP" >/dev/null 2>&1 ; then action "Shutting down interface $i: " ./ifdown $i boot fi #گزینه -q ویژه گنو برای grep به معنی quiet، یعنی بدون ارایه خروجی است. #بنابراین تغییر مسیر دادن خروجی به /dev/null به طور صریح، لازم نیست. #... echo "Currently active devices:" echo `/sbin/ifconfig | grep ^[a-z] | awk '{print $1}'` # #برای پرهیز از globbing باید نقلقولی بشود. #موارد زیر نیز کار میکنند. # # #با تشکر از S.C. برای توضیحات افزوده.
همچنین مثال 32-6 را ببینید.
نمایش آمار و اطلاعات شبکه جاری، مانند جدولهای مسیریابی و اتصالهای فعال. این برنامه سودمند اطلاعات داخل /proc/net را دستیابی میکند (فصل 29). مثال 29-4 را ببینید.
netstat -r معادلی برای route است.
bash$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 11 [ ] DGRAM 906 /dev/log unix 3 [ ] STREAM CONNECTED 4514 /tmp/.X11-unix/X0 unix 3 [ ] STREAM CONNECTED 4513 . . .
یک netstat -lptu سوکتهایی را که در حال گوش دادن به درگاهها هستند و پردازشهای مربوط را نمایش میدهد. این فرمان میتواند برای تعیین اینکه آیا یک کامپیوتر در خطر افتاده یا هک گردیده است مفید باشد. |
این یک مجموعه فرمان برای پیکربندی یک شبکه بیسیم است. معادل بیسیم ifconfig فوق است.
برنامه سودمند چندمنظوره برای تنظیم کردن، تعویض نمودن، و تحلیل کردن IP (Internet Protocol) شبکهها و دستگاههای متصل شده است. این فرمان بخشی از بسته iproute2 است.
bash$ ip link show 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:d0:59:ce:af:da brd ff:ff:ff:ff:ff:ff 3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0 bash$ ip route list 169.254.0.0/16 dev lo scope link
یا در یک اسکریپت:
#!/bin/bash #اسکریپت توسط Juan Nicolas Ruiz نوشته شده #استفاده شده با اجازه محبتآمیز ایشان. #تنظیم (و متوقف کردن) یک GRE tunnel #--- tunnel.sh شروع --- LOCAL_IP="192.168.1.17" REMOTE_IP="10.0.5.33" OTHER_IFACE="192.168.0.100" REMOTE_NET="192.168.3.0/24" /sbin/ip tunnel add netb mode gre remote $REMOTE_IP \ local $LOCAL_IP ttl 255 /sbin/ip addr add $OTHER_IFACE dev netb /sbin/ip link set netb up /sbin/ip route add $REMOTE_NET dev netb exit 0############################################# #--- tunnel.sh توقف --- REMOTE_NET="192.168.3.0/24" /sbin/ip route del $REMOTE_NET dev netb /sbin/ip link set netb down /sbin/ip tunnel del netb exit 0
نمایش اطلاعات در باره جدول مسیریابی کرنل یا ایجاد تغییرات در آن
bash$ route Destination Gateway Genmask Flags MSS Window irtt Iface pm3-67.bozosisp * 255.255.255.255 UH 40 0 0 ppp0 127.0.0.0 * 255.0.0.0 U 40 0 0 lo default pm3-67.bozosisp 0.0.0.0 UG 40 0 0 ppp0
مجموعه فرمان iptables یک ابزار فیلتر کردن بسته است که بیشتر برای مقاصد امنیتی مانند تنظیم دیوارههای آتش شبکه به کار میرود. این یک ابزار پیچیده است، و توضیح مشروح کاربرد آن فراتر از حوزه این راهنما است. راهنمای آموزشی Oskar Andreasson نقطه شروع قابلقبولی است.
همچنین متوقف کردن iptables و مثال 30-2 را ببینید.
کنترل پیکربندی شبکه و سیستم. این فرمان سرویسهای شبکه و سیستم را که در زمان بالاآمدن سیستم در دایرکتوری /etc/rc?.d شروع شدهاند، لیست و مدیریت میکند.
در اصل از IRIX به لینوکس Red Hat منتقل گردیده است، chkconfig ممکن است بخشی از نصب اولیه برخی توزیعهای لینوکس نباشد.
bash$ chkconfig --list atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off rwhod 0:off 1:off 2:off 3:off 4:off 5:off 6:off ...
استشمام کننده بسته شبکه. این ابزاری است برای تجزیه و تحلیل و عیبزدایی ترافیک روی شبکه، به وسیله نسخهبرداری سرآیند بستههایی که با معیارهای تعیین شده مطابقت دارند.
رونوشت برداری مخابره ip packet میان میزبانهای bozoville و caduceus:
bash$ tcpdump ip host bozoville and caduceus
البته، خروجی tcpdump میتواند با برخی برنامههای پردازش متن که قبلاً بحث شده، تجزیه بشود.
سوار کردن یک سیستم فایل، معمولاً روی یک دستگاه خارجی، از قبیل یک فلاپی یا CDROM. فایل /etc/fstab فهرست قابل استفادهای از سیستمفایلها، پارتیشنها، و دستگاههای در دسترس، به انضمام گزینهها، که میتوانند به طور خودکار یا دستی سوار بشوند ارایه میکند. فایل /etc/mtab پارتیشنها و سیستمفایلهایی را که در حال حاضر سوار شدهاند، (شامل سیستمفایلهای مجازی از قبیل /proc) نشان میدهد.
mount -a تمام سیستمفایلها و پارتیشنهای لیست شده در /etc/fstab، غیر از آنها که با گزینه noauto همراه هستند، سوار میکند. در زمان بالا آمدن سیستم، یک اسکریپت راهاندازی در /etc/rc.d (rc.sysinit یا چیزی مشابه آن) برای سوار کردن همه سیستم فایلهایی که باید متصل بشوند، این فرمان را فراخوانی میکند.
mount -t iso9660 /dev/cdrom /mnt/cdrom #CD ROM را سوار میکند. ISO 9660 یک سیستمفایل استاندارد برای CD ROM است. mount /mnt/cdrom #راه میانبر، در صورتیکه /mnt/cdrom در /etc/fstab لیست شود.
فرمان فراگیر mount حتی میتواند یک فایل معمولی را روی یک دستگاه بلوکی سوار کند، و فایل همانطور که اگر یک سیستمفایل بود، عمل میکند. mount این کار را به وسیله مرتبط کردن فایل با یک دستگاه loopback device به انجام میرساند. یک کاربرد این مورد برای سوار کردن و آزمایش یک image سیستمفایل ISO9660 قبل از نوشتن آن روی یک CDR است. [3]
مثال 17-7. بازبینی یک CD image
#به عنوان root... mkdir /mnt/cdtest #آماده کردن محل سوار کردن، در صورتیکه از قبل موجود نباشد. mount -r -t iso9660 -o loop cd-image.iso /mnt/cdtest #سوار کردن image. #گزینه -o loop معادل است با فرمان losetup /dev/loop0 cd /mnt/cdtest #اکنون، بررسی image. ls -alR #لیست فایلها در درخت دایرکتوری آنجا.
پیاده کردن یک سیستمفایل سوار شده جاری. قبل از جداکردن فیزیکی دیسک CDROM یا فلاپی قبلاً سوار شده، دستگاه باید umount بشود، وگرنه ممکن است سیستم فایل خراب بشود.
umount /mnt/cdrom #اکنون میتوانید دکمه eject را بزنید و بدون خطر دیسک را جدا کنید .
برنامه سودمند automount، اگر به طور صحیح نصب شده باشد، میتواند دیسکهای فلاپی یا CDROM را همچنانکه دستیابی میگردند یا جدا میشوند، mount یا umount نماید. اما در لپتاپهای «multispindle» دارای درایوهای با قابلیت تعویض حالت بین فلاپی یا دیسک نوری، این برنامه میتواند باعث مشکلاتی بشود. |
نوشتن فوری تمام دادههای به هنگام شده از بافرها به دیسک سخت را اجباری میکند(هماهنگسازی درایو با بافرها). در حالیکه به طور سختگیرانه ضروری نیست، اما یک sync به مدیر سیستم یا کاربر اطمینان میدهد که دادههای الساعه تغییر داده شده، در یک خاموشی ناگهانی ار بین نمیروند. در زمانهای قبل، یک sync; sync (دوبار، فقط برای اطمینان کامل) قبل از reboot سیستم یک اقدام پیشگیرانه احتیاطی بود.
گاه گاهی، ممکن است شما بخواهید یک تخلیه فوری بافر را الزامی کنید، مانند موقع حدف یک فایل به طور مطمئن (مثال 16-61 را ببینید) یا وقتی لامپها شروع به سوسو زدن میکنند.
دستگاههای loopback را تنظیم یا پیکربندی میکند.
مثال 17-8. ایجاد یک سیستمفایل در یک فایل
SIZE=1000000 #1 meg head -c $SIZE < /dev/zero > file #تنظیم فایل به اندازه مشخص شده. #dd if=/dev/zero of=file count=2048 مترجم: یا با استفاده از این دستور losetup /dev/loop0 file #تنظیم آن به عنوان loopback device mke2fs /dev/loop0 #ایجاد سیستمفایل. mount -o loop /dev/loop0 /mnt #سوار کردن آن. #با تشکر از S.C.
ایجاد یک فایل یا پارتیشن swap. پس از آن، ناحیه swap باید با swapon فعال گردد.
فعال و غیر فعال کردن پارتیشن یا فایل swap. این فرمانها معمولاً در زمان بالا آمدن و خاموش شدن سیستم اجرا میشوند.
ایجاد یک سیستم فایل ext2 لینوکس. این فرمان باید به عنوان کاربر ارشد فراخوانی بشود.
مثال 17-9. اضافه کردن یک دیسک سخت جدید
#!/bin/bash #اضافه نمودن یک دیسک سخت دوم به سیستم. #پیکربندی نرمافزاری. فرض میکند که سختافزار از قبل mount گردیده. #از یک گفتار مولف راهنمای ABS (این سند). #در شماره 38 نشریه _Linux Gazette_ در http://www.linuxgazette.com ROOT_UID=0 #این اسکریپت باید به عنوان کاربر ارشد اجرا شود. E_NOTROOT=67 #خطای خروج کاربر ارشد نبودن. if [ "$UID" -ne "$ROOT_UID" ] then echo "Must be root to run this script." exit $E_NOTROOT fi #با نهایت دقت استفاده نمایید! #اگر اشتباهی رخ بدهد، ممکن است شما سیستم فایل جاری را از دست بدهید. NEWDISK=/dev/hdb #فرض میکند /dev/hdb آزاد است. کنترل کنید! MOUNTPOINT=/mnt/newdisk #یا یک نقطه اتصال دیگر انتخاب کنید. fdisk $NEWDISK mke2fs -cv $NEWDISK1 #کنترل برای بلوکهای نامناسب (خروجی مفصل). #توجه: /dev/hdb1، *نه* /dev/hdb mkdir $MOUNTPOINT chmod 777 $MOUNTPOINT #ایجاد دسترسی همه کاربران به درایو جدید. #اکنون، بررسی ... #mount -t ext2 /dev/hdb1 /mnt/newdisk #ایجاد یک دایرکتوری را امتحان کنید. #اگر عمل کرد، آن را umount کنید، و پیش بروید. #مرحله پایانی: #سطر زیر را به فایل /etc/fstab اضافه کنید. # exit
همچنین مثال 17-8 و مثال 31-3 را ببینید.
ایجاد یک سیستمفایل FAT داس.
تنظیم سیستمفایل ext2. میتواند برای تغییر دادن پارامترهای سیستمفایل، از قبیل حداکثر تعداد mount استفاده گردد. این فرمان باید به عنوان کاربر ارشد فراخوانی شود.
این یک فرمان بینهایت خطرناک است. با مسئولیت خودتان از آن استفاده کنید، چون ممکن است به طور ناخواسته سیستمفایلتان را تخریب نمایید. |
رونوشت (لیست کردن به stdout) خیلی طولانی اطلاعات سیستمفایل. این فرمان باید به عنوان root فراخوانی بشود.
root# dumpe2fs /dev/hda7 | grep 'ount count' dumpe2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 Mount count: 6 Maximum mount count: 20
لیست کردن یا تغییر دادن پارامترهای دیسک. این فرمان باید به عنوان root فراخوانده شود، و اگر به طور نامناسب استفاده شود، میتواند خطرناک باشد.
ایجاد یا تغییر جدول پارتیشن روی یک دستگاه ذخیرهسازی، به طور معمول یک دیسک سخت. این فرمان بایستی به عنوان root فراخوانی گردد.
این فرمان را با دقت فراوان به کار ببرید. اگر اشتباهی صورت بگیرد، ممکن است شما سیستمفایل موجود را نابود کنید. |
مجموعه فرمان کنترل، تعمیر، و اشکالزدایی سیستمفایل.
fsck: نرمافزاری برای کنترل یک سیستمفایل یونیکس (ممکن است سایر برنامهها را فراخوانی نماید). به طور معمول پیشفرض آن برای نوع سیستمفایل واقعی، ext2 است.
e2fsck: کنترل کننده سیستمفایل ext2.
debugfs: اشکالیاب سیستمفایل ext2. یکی از موارد استفاده این فرمان چندکاره اما خطرناک، (تلاش برای) بازیابی فایلهای حذف شده است. فقط برای کاربران پیشرفته!
همه این فرمانها باید به وسیله root فراخوانی بشوند، و اگر به طور نادرست استفاده شوند میتوانند به سیستمفایل آسیب زده یا آن را نابود کنند. |
یک دستگاه ذخیره را برای بلوکهای بد (نقص فیزیکی) بررسی میکند. این فرمان هنگام فرمت کردن یک دیسک سخت تازه نصب شده، یا آزمایش صحت یک رسانه پشتیبان مورد استفاده مییابد. [4] به عنوان یک مثال، badblocks /dev/fd0 یک دیسک فلاپی را بررسی میکند.
فرمان badblocks میتواند به طور مخرب (رونویسی تمام دادهها) یا در وضعیت فقط خواندنی غیر مخرب فراخوانی بشود. اگر کاربر ارشد مالک دستگاه مورد بررسی باشد، که به طور معمول این حالت است، آنوقت root باید این فرمان را فراخوانی نماید.
فرمان lsusb تمام گذرگاههای USB (Universal Serial Bus) و دستگاههای وصل شده به آنها را لیست میکند.
فرمان usbmodules اطلاعاتی در باره درایور دستگاههای USB متصل شده را بیرون میدهد.
bash$ usbmodules Bus 001 Device 001: ID 0000:0000 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.00 bDeviceClass 9 Hub bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0000 idProduct 0x0000 . . .
گذرگاههای pci موجود را لیست میکند.
bash$ lspci 00:00.0 Host bridge: Intel Corporation 82845 845 (Brookdale) Chipset Host Bridge (rev 04) 00:01.0 PCI bridge: Intel Corporation 82845 845 (Brookdale) Chipset AGP Bridge (rev 04) 00:1d.0 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #1) (rev 02) 00:1d.1 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #2) (rev 02) 00:1d.2 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #3) (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 42) . . .
یک فلاپی بوت ایجاد میکند که اگر به عنوان مثال، MBR (master boot record) خراب بشود، میتواند برای بالا آوردن سیستم به کار برود. گزینه مخصوصاً جالب، گزینه --iso است که mkisofs را برای ایجاد یک image سیستمفایل ISO9660 که مناسب تهیه یک CDR قابل بوت است، به کار میبرد.
فرمان mkbootdisk در حقیقت یک اسکریپت Bash در دایرکتوری /sbin است که به وسیله Erik Troan نوشته شده است.
یک سیستمفایل ISO9660 مناسب برای یک CDR image ایجاد میکند.
تعویض دایرکتوری ریشه. معمولاً فرمانها از $PATH نسبت به /، دایرکتوری ریشه پیشفرض، واکشی میگردند. این فرمان دایرکتوری ریشه را با یک دایرکتوری متفاوت تعویض میکند (و همچنین دایرکتوری کاری را به آنجا تغییر میدهد). این کار برای مقاصد امنیتی مفید است، برای نمونه وقتی مدیر سیستم میخواهد برخی کاربران را، از قبیل آنهایی که از طریق telnet وارد میشوند، به یک بخش حفاظت شده از سیستمفایل محدود نماید (گاهی اوقات این کار به عنوان محدود کردن یک کاربر مهمان در یک «زندان chroot» قلمداد میگردد)، از آن استفاده میشود. توجه نمایید که بعد از یک chroot، مسیر اجرا برای فایلهای باینری سیستم دیگر معتبر نیست.
یک chroot /opt باعث خواهد گردید که ارجاعها به /usr/bin به صورت ارجاع به /opt/usr/bin ترجمه بشوند. به همچنین، chroot /aaa/bbb /bin/ls در موارد بعدی اجرای فرمان ls، به جای دایرکتوری / که در حالت عادی ریشه است، /aaa/bbb را به عنوان دایرکتوری ریشه در نظر میگیرد. یک alias XX 'chroot /aaa/bbb ls' در فایل ~/.bashrc یک کاربر، به طور موثر بخشی از سیستمفایل را که آن کاربر میتواند فرمان «XX» را در آن اجرا نماید، مرزبندی میکند.
فرمان chroot همچنین موقع اجرا از یک فلاپی بوت اضطراری (chroot به /dev/fd0)، یا به عنوان یک گزینه برای lilo هنگام بازیابی یک سیستم از کار افتاده، سودمند است. سایر استفادهها شامل نصب از یک سیستمفایل متفاوت (یک گزینه rpm) یا اجرای یک سیستمفایل فقط خواندنی از یک CD ROM میشود. فقط به عنوان root فراخوانی کنید، و با دقت به کار ببرید.
شاید کپی برخی فایلهای سیستم به یک دایرکتوری chroot شده لازم باشد، چون $PATH عادی دیگر نمیتواند مورد استناد باشد. |
این برنامه سودمند، بخشی از بسته procmail (www.procmail.org) است. یک lock file تولید میکند، یک semaphore که دستیابی به یک فایل، دستگاه، یا منبع را کنترل میکند.
فایل قفل (lock file) به عنوان علامتی که این فایل، دستگاه، یا منبع بخصوص به وسیله یک پردازش در دست استفاده است (و بنابراین «اشغال» است) به کار میرود. حضور یک فایل قفل فقط دستیابی محدود (یا هیچ دسترسی) را برای سایر پردازشها مجاز میکند.
lockfile /home/bozo/lockfiles/$0.lock #یک فایل قفل با نام اسکریپت که در برابر نوشتن محافظت شده، تولید میکند. lockfile /home/bozo/lockfiles/${0##*/}.lock #یک نگارش بیخطرتر آن، همچنانکه توسط E. Choroba اشاره گردیده است.
فایلهای قفل در برنامههای کاربردی برای مواردی از قبیل محافظت پوشههای mail سیستم در برابر تغییر یافتن همزمان توسط چند کاربر، مشخص کردن آنکه یک درگاه مودم در حال دستیابی است، و نشان دادن آنکه یک نمونه از «Firefox» در حال استفاده از cache آن است، به کار میروند. اسکریپتها میتوانند جهت تعیین اینکه یک پردازش در حال اجرا هست، وجود یک فایل قفل ایجاد شده توسط آن پردازش معین را بررسی کنند. توجه نمایید که اگر اسکریپت سعی در ایجاد یک فایل قفل از قبل موجود بنماید، احتمالا اسکریپت هنگ خواهد کرد.
به طور عادی، برنامههای کاربردی فایلهای قفل را در دایرکتوری /var/lock ایجاد و بررسی میکنند. [5] یک اسکریپت میتواند وجود یک فایل قفل را با موردی مانند نمونه زیر، بررسی کند.
appname=xyzip #برنامه "xyzip" فایل قفل "/var/lock/xyzip.lock" را ایجاد کرده. if [ -e "/var/lock/$appname.lock" ] then #+جلوگیری کردن از دسترسی سایر برنامهها و اسکریپتها به #فایلها یا منابع مورد استفاده به وسیله xyzip. ...
فرمان flockبسیار کمتر از lockfile مفید است. این فرمان یک قفل «مشورتی» روی یک فایل ایجاد میکند و سپس در حالیکه قفل برقرار است یک فرمان را اجرا میکند. این به منظور آن است که تا موقع تکمیل آن فرمان مشخص شده، از تنظیم یک قفل توسط هر پردازش دیگری بر روی آن فایل جلوگیری بشود.
flock $0 cat $0 > lockfile__$0 #روی اسکریپتی که سطر فوق در آن ظاهر میشود، در مدتیکه اسکریپت #+در حال لیست شدن در stdout است، یک قفل برقرار میکند.
بر خلاف lockfile، فرمان flock به طور خودکار فایل قفل ایجاد نمیکند. |
فایلهای دستگاه کاراکتری یا بلوکی ایجاد میکند (شاید هنگام نصب کردن سختافزار جدید روی سیستم لازم باشد). برنامه سودمند MAKEDEV تقریبا دارای تمام تواناییهای mknod هست و استفاده از آن آسانتر است.
برنامه سودمند برای ایجاد فایلهای دستگاه. باید به عنوان root و در دایرکتوری /dev اجرا گردد. این فرمان نوعی نگارش پیشرفته mknod است.
فایلهایی را که در یک دوره زمانی مشخص شده دستیابی نگردیدهاند به طور خودکار حذف میکند. معمولا به وسیله cron برای حذف فایلهای ثبت رخداد کهنه فراخوانی میگردد.
حد فوقانی استفاده از منابع سیستم را تنظیم میکند. معمولاً با گزینه -f که حدی برای اندازه فایل تنظیم میکند، فراخوانی میگردد (ulimit -f 1000 فایلها را به حداکثر 1 meg محدود میکند) [7]. گزینه -c اندازه روگرفت حافظه (coredump) را محدود میکند (ulimit -c 0 روگرفتها را از قلم میاندازد). به طور عادی، مقدار ulimit در /etc/profile و-یا ~/.bash_profile تنظیم خواهد گردید (پیوست H را ببینید).
استفاده با درایت از ulimit میتواند سیستم را در مقابل بمب خوشهای ترسناک محافظت نماید. #!/bin/bash # یک ulimit -Hu XX (که در آن XX حد پردازش کاربر است) در /etc/profile وقتی این اسکریپت از حد تعیین شده تجاوز نماید، آن را از کار خواهد انداخت. |
نمایش سهمیههای دیسک کاربر یا گروه.
تنظیم سهمیههای دیسک کاربر یا گروه از طریق خط فرمان.
ایجاد mask مجوزهای فایل کاربر. صفات پیشفرض فایل برای یک کاربر بخصوص را محدود میکند. تمام فایلهای ایجاد شده به وسیله آن کاربر، صفتهای تعیین شده به وسیله umask را میگیرند. مقدار (اکتال) داده شده به umask مجوزهای فایل غیرفعال شده را تعیین میکند. برای مثال، umask 022 تضمین میکند که فایلهای جدید حداکثر دارای مجوزهای 755 (777 NAND 022) [8] خواهند بود. البته، ممکن است کاربر بعداً صفتهای فایلهای خاصی را با فرمان chmod تغییر بدهد. روال معمول، تنظیم مقدار umask در /etc/profile و-یا ~/.bash_profile است ( پیوست H را ببینید).
مثال 17-10. کاربرد umask برای پنهان کردن یک فایل خروجی از چشمان نامحرم
#!/bin/bash #rot13a.sh: همانند اسکریپت rot13.sh، اما خروجی را در یک فایل «امن» مینویسد. #کاربرد: ./rot13a.sh filename #یا ./rot13a.sh <filename #یا ./rot13a.sh و تامین ورودی از صفحهکلید umask 177 #ایجاد mask فایل. #فایلهای ایجاد شده به وسیله این اسکریپ دارای مجوزهای 600 خواهند بود OUTFILE=decrypted.txt #خروجی در فایل decrypted.txt حاصل میشود، که فقط توسط #+فراخواننده (یا root)میتواند خوانده یا نوشته شود. cat "$@" | tr 'a-zA-Z' 'n-za-mN-ZA-M' > $OUTFILE #ورودی از stdin یا یک فایل. خروجی به فایل هدایت شده. exit 0
دریافت اطلاعات یا ایجاد تغییرات در دستگاه اصلی، فضای swap، یا وضعیت تصویری. تواناییهای rdev به طور کلی به وسیله lilo به عهده گرفته شده، اما rdev برای تنظیم یک ram disk سودمند باقی مانده. در صورت استفاده نادرست، فرمانی خطرناک است.
فرمان dump یک برنامه سودمند استادانه پشتیبانی از سیستمفایل است، به طور کلی، در تاسیسات بزرگتر و شبکهها استفاده میشود. [6] پارتیشنهای دیسک را به طور خام میخواند و یک فایل پشتیبان در قالب باینری مینویسد. فایلهایی که باید پشتیبانگیری شوند میتوانند در رسانههای ذخیره متنوع، از جمله دیسکها و نوارهای مغناطیسی، قرار داشته باشند. فرمان restore پشتیبانهای تهیه شده به وسیله dump را بازیابی میکند.
یک فرمت سطح پایین روی دیسک نرم (/dev/fd0*) انجام میدهد.
لیست کردن moduleهای کرنل نصبشده.
bash$ lsmod Module Size Used by autofs 9456 2 (autoclean) opl3 11376 0 serial_cs 5456 0 (unused) sb 34752 0 uart401 6384 0 [sb] sound 58368 0 [opl3 sb uart401] soundlow 464 0 [sound] soundcore 2800 6 [sb sound] ds 6448 2 [serial_cs] i82365 22928 2 pcmcia_core 45984 0 [serial_cs ds i82365]
انجام یک cat /proc/modules همان اطلاعات را ارایه میکند. |
اجبار به نصب یک module کرنل (در صورت امکان modprobe را به جای آن به کار ببرید). باید به عنوان root فراخوانی گردد.
اجبار به تخلیه یک module کرنل. باید به عنوان root فراخوانی گردد.
بارکننده module که معمولاً به طور خودکار در یک اسکریپت راهاندازی فراخوانی میشود. باید به عنوان root فراخوانی شود.
فایل وابستگی module را ایجاد میکند. معمولاً از یک اسکریپت راهاندازی فراخوانی میگردد.
بیرون دادن اطلاعات در باره یک module قابل بارگذاری.
bash$ modinfo hid filename: /lib/modules/2.4.20-6/kernel/drivers/usb/hid.o description: "USB HID support drivers" author: "Andreas Gal, Vojtech Pavlik <vojtech@suse.cz>" license: "GPL"
یک برنامه یا اسکریپت را با مجموعه متغیرهای محیطی معین یا تغییر یافته (بدون تغییر محیط کلی سیستم) اجرا میکند. عبارت [varname=xxx] تغییر متغیر محیطی varname را برای مدت اجرای اسکریپت مجاز میسازد. کاربرد این فرمان بدون مشخص نمودن گزینه، تمام تنظیمات متغیرهای محیطی را لیست میکند. [9]
نمایش وابستگیهای کتابخانهای به اشتراک گذاشته شده برای یک فایل اجرایی.
bash$ ldd /bin/ls libc.so.6 => /lib/libc.so.6 (0x4000c000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
اجرای تکراری یک فرمان در فاصلههای زمانی تعیین شده.
پیشفرض آن فاصلههای دو ثانیهای است، اما میتواند با گزینه -n تغییر داده شود.
watch -n 5 tail /var/log/messages #قسمت انتهای لاگ سیستم /var/log/messages را هر پنج ثانیه یکبار نمایش میدهد.
مرجعهای نمادین اشکالزدایی را از یک فایل باینری قابل اجرا حذف میکند. این کار اندازه فایل را کاهش میدهد، اما اشکالزدایی آن را غیرممکن میسازد.
این فرمان بیشتر اوقات در یک Makefile، اما به ندرت در یک اسکریپت پوسته یافت میشود.
لیست کردن نمادهای یک باینری کامپایل شده strip نشده.
ابزار خط فرمانی برای دستکاری پنجره اصلی صفحه نمایش.
مثال 17-11. Backlight: روشنایی پسزمینه صفحه نمایش (laptop) را تغییر میدهد
#!/bin/bash #backlight.sh #تاریخ انتشار دوم دسامبر 2011 #یک باگ در Fedora Core 16/17 کنترلهای صفحهکلیدی نور پسزمینه را مغشوش میکند. #این اسکریپت یک راهکار سرهمبندی شده است، در اصل یک اسکریپت پوسته wrapper #+برای xrandr. کنترلی بیش از نوار لغزنده و ویجتهای روی صفحه نمایش ارایه میکند. OUTPUT=$(xrandr | grep LV | awk '{print $1}') #به دست آوردن نام نمایشگر! INCR=.05 #برای کنترل ریز دانهتر، INCR را به .03 یا .02 تنظیم کنید. old_brightness=$(xrandr --verbose | grep rightness | awk '{ print $2 }') if [ -z "$1" ] then bright=1 #اگر شناسه خط فرمان وجود ندارد، تنظیم روشنایی به 1.0 (پیشفرض). else if [ "$1" = "+" ] then bright=$(echo "scale=2; $old_brightness + $INCR" | bc) # else if [ "$1" = "-" ] then bright=$(echo "scale=2; $old_brightness - $INCR" | bc) # else if [ "$1" = "#" ] #روشنایی فعلی را بازتاب میدهد، آن را تغییر نمیدهد. then bright=$old_brightness else if [[ "$1" = "h" || "$1" = "H" ]] then echo echo "Usage:" echo "$0 [No args] Sets/resets brightness to default (1.0)." echo "$0 + Increments brightness by 0.5." echo "$0 - Decrements brightness by 0.5." echo "$0 # Echoes current brightness without changing it." echo "$0 N (number) Sets brightness to N (useful range .7 - 1.2)." echo "$0 h [H] Echoes this help message." echo "$0 any-other Gives xrandr usage message." bright=$old_brightness else bright="$1" fi fi fi fi fi xrandr --output "$OUTPUT" --brightness "$bright" #صفحه man xrandr را ببینید. E_CHANGE0=$? echo "Current brightness = $bright" exit $E_CHANGE0 #=========== یا به طور جایگزین . . . ==================== # #!/bin/bash #backlight2.sh #تاریخ انتشار 20 ژوئن 2012 #یک باگ در Fedora Core 16/17 کنترلهای صفحهکلیدی نور پسزمینه را مغشوش میکند. #این یک راهکار سرهم بندی شده، یک جایگزین برای backlight.sh است. target_dir=\ /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/backlight/acpi_video0 #دایرکتوری سختافزار. actual_brightness=$(cat $target_dir/actual_brightness) max_brightness=$(cat $target_dir/max_brightness) Brightness=$target_dir/brightness let "req_brightness = actual_brightness" #روشنایی مورد درخواست. if [ "$1" = "-" ] then #یک درجه کاهش روشنایی. let "req_brightness = $actual_brightness - 1" else if [ "$1" = "+" ] then #یک درجه افزایش روشنایی. let "req_brightness = $actual_brightness + 1" fi fi if [ $req_brightness -gt $max_brightness ] then req_brightness=$max_brightness fi #از حداکثر روشنایی طراحی سختافزار تجاور نمیشود. echo echo "Old brightness = $actual_brightness" echo "Max brightness = $max_brightness" echo "Requested brightness = $req_brightness" echo #========================================= echo $req_brightness > $Brightness #برای اینکه این عملی گردد، باید root باشد. E_CHANGE1=$? #آیا موفق است؟ #========================================= if [ "$?" -eq 0 ] then echo "Changed brightness!" else echo "Failed to change brightness!" fi act_brightness=$(cat $Brightness) echo "Actual brightness = $act_brightness" scale0=2 sf=100 #Scale factor. pct=$(echo "scale=$scale0; $act_brightness / $max_brightness * $sf" | bc) echo "Percentage brightness = $pct%" exit $E_CHANGE1
سرویسگیرنده توزیع راه دور: هماهنگسازی، تولیدمثل، یا تهیه پشتیبان یک سیستمفایل روی یک سرویسدهنده راه دور.
[1] | این حالتی روی یک ماشین لینوکس یا سیستم یونیکس با سهمیههای دیسک است. |
[2] |
اگر کاربری که حذف میشود هنوز در حال لاگین باشد، فرمان userdel ناموفق خواهد شد. |
[3] |
برای توضیح مفصل در باره سوزاندن CDRها، گفتار Alex Withers، ایجاد CDها در شماره اکتبر 1999 نشریه Linux Journal را ببینید. |
[4] | گزینه -c با mke2fs نیز یک بررسی برای بلوکهای نامناسب را فراخوانی میکند. |
[5] | چون فقط root دارای مجوز نوشتن در دایرکتوری /var/lock است، یک اسکریپت کاربر نمیتواند فایل قفل در آنجا قرار بدهد. |
[6] | به طور کلی، متصدیان سیستمهای لینوکس تککاربره مورد سادهتری برای تهیه پشتیبان، از قبیل tarرا ترجیح میدهند. |
[7] |
از به روز رسانی نگارش 4 در Bash، گزینههای -f و -c وقتی پوسته در وضعیت POSIX باشد، از اندازه بلوک 512 پیروی میکنند. به طور اضافه، دو گزینه جدید وجود دارد: -b برای اندازه بافر socket، و -T برای محدودیت تعداد threadها. |
[8] |
NAND عملگر منطقی not-and است. تاثیر آن تا اندازهای مشابه تفریق است. |
[9] |
در Bash و سایر پوستههای ریشه گرفته از پوسته Bourne، تنظیم متغیرها در محیط یک فرمان منفرد امکانپذیر است. var1=value1 var2=value2 commandXXX # |