# การดูแลรักษาระบบเบื้องต้น

สำหรับในระบบลีนุกซ์จะมีความแตกต่างจากระบบยูนิกซ์เซอร์ฟเวอร์ขนาดใหญ่ เช่นระบบของซันไมโครซิสเต็ม หรือระบบของ HP/UX ซึ่งระบบเหล่านั้นถูกออกแบบให้มาใช้งานในลักษณะของเซอร์ฟเวอร์ (หรือผู้ให้บริการ) เต็มรูปแบบจริงๆ ระบบเหล่านั้นต้องการผู้ดูแลโดยเฉพาะ ซึ่งในแต่ละวันจะมีหน้าที่คอยตรวจสอบ บริหารระบบ และทำการปรับปรุงระบบ ซึ่งอาจจะเป็นงานที่เกี่ยวข้องกับการดูแลระบบฐานข้อมูล หรือการบริหารระบบเครือข่ายเป็นต้น การใช้งานในลักษณะของงานส่วนตัวในลักษณะของ PC โดยทั่วไปมักจะไม่นิยมกระทำกันบนเครื่องเซอร์ฟเวอร์เหล่านั้น ตัวอย่างนี้คุณอาจจะสังเกตุได้จาก ไมโครซอฟต์จะแบ่งระบบปฏิบัติการของ Window NT ออกเป็นสองระดับก็คือ NT server และ NT workstation โดยจะวาง NT server ในระดับของเครื่องเซอร์ฟเวอร์ขององค์กรซึ่งอาจจะมีการรันระบบฐานข้อมูล และ NT workstation จะนำไปใช้ในลักษณะของงานส่วนบุคคล เช่นการพัฒนาระบบงาน การทำงานสำนักงานเป็นต้น
ในระบบลีนุกซ์ จะไม่ได้มีการแบ่งแยกอย่างชัดเจน ว่าจะอยู่ในส่วนของ server หรือ workstation ทั้งนี้ก็คงขึ้นอยู่กับรูปแบบในการปรับแต่งของผู้เป็นเจ้าของระบบเองว่า ต้องการจะใช้งานลีนุกซ์ในฐานะอะไร หากคุณต้องการจะใช้ในฐานะของเซอร์ฟเวอร์ไม่ว่าจะเป็น ดาต้าเบสเซอร์ฟเวอร์ (ระบบฐานข้อมูล), อินทราเน็ตเซอร์ฟเวอร์ หรืออินเทอร์เน็ตเซอร์ฟเวอร์ ก็ตาม การใช้งานในระดับนี้คุณก็จะต้องมีความรู้ในฐานะของผู้ดูแลระบบ (System Administrator) พอสมควร แต่ถ้าคุณใช้ลีนุกซ์ในฐานะของ เวอร์กสเตชั่น คุณอาจจะไม่จำเป็นจะต้องมีความรู้ในฐานะของผู้ดูแลระบบมากก็ได้ เพราะซอฟต์แวร์ส่วนใหญ่บนลีนุกซ์ที่ใช้ในฐานะของเวอร์กสเตชั่น จะถูกออกแบบมาให้ทำการดูแล รักษาและใช้งานง่าย รวมทั้งการจัดเตรียมระบบมาตรฐานที่มีมาให้จากดิสตริบิวเตอร์ ก็สามารถทำให้คุณใช้งานได้อย่างสะดวกสบาย และมีสถิติที่บ่งบอกว่ามีผู้ใช้งานลีนุกซ์จำนวนมากที่ไม่ได้เคยผ่านการใช้งานยูนิกซ์มาก่อน ซึ่งเขาเหล่านั้นก็สามารถใช้งานลีนุกซ์ได้โดยไม่มีปัญหาอะไร แต่อย่างไรก็ตามหากคุณเรียนรู้เรื่องของการดูแลระบบไว้บ้างคุณก็จะมีความเข้าใจและปรับแต่งระบบให้ทำงานได้อย่างมีประสิทธิภาพขึ้น
เอกสารต่อไปนี้จะอธิบายเกี่ยวกับ ความรู้พื้นฐานของการเป็นผู้ดูแลระบบ หรือ System administrator ซึ่งคุณจะได้นำความรู้เหล่านี้ไปศึกษาและทดลองต่อด้วยตนเองในระดับสูงต่อไปได้
ผู้ใช้ทั่วไปจะถูกจำกัดการใช้งาน ให้อยู่ในขอบเขตตามที่ผู้ดูแลระบบกำหนด แต่สำหรับงานที่เกี่ยวข้องกับการดูแลรักษาระบบแล้ว จำเป็นต้องใช้สิทธิในระดับของ super user การเป็น super user หรือ root นั้นหมายถึงการมีสิทธิอำนาจสูงสุดในระบบ คุณสามารถที่จะทำการแก้ไขและเปลี่ยนแปลงได้ทุกอย่าง แต่คุณก็ต้องระมัดระวังเมื่อจะทำการแก้ไขดังกล่าวนั้นด้วย เนื่องจากหากมีความผิดพลาดอาจหมายถึงการทำลายระบบลงได้
คุณสามารถจะเป็น super user ได้สองวิธีคือ ทำการล็อกอินเข้าด้วยชื่อผู้ใช้ "root" หรือใช้คำสั่ง "su" ที่คอมมานด์ไลน์เพื่อขอเปลี่ยนสิทธิผู้ใช้ให้เป็นระดับของ superuser

### เครื่องมือที่ช่วยในการดูแลระบบ

เราสามารถจะใช้เครื่องมือเล็กๆสองตัวคือ grep กับ find เพื่อช่วยในการบริหารงานระบบได้ สำหรับ grep จะใช้เลือก output ที่มีความสอดคล้องกับที่เราระบุไว้ขึ้นมาและ find จะใช้สำหรับตรวจหาไฟล์ที่ต้องการ
ตัวอย่างการตรวจหาโพรเซส (โปรแกรมที่ถูกโหลดไว้ในหน่วยความจำ) ของผู้ใช้ชื่อ "twg"

    # ps -aux | grep twg
    twg        524  0.0  2.3  2416   728  ?  S   14:03   0:04 fvwm95-2
    twg        531  0.0  1.6  2208   512  ?  S   14:03   0:00 /usr/X11R6/lib/X11/fv
    twg        532  0.0  2.4  2292   740  ?  S   14:03   0:01 /usr/X11R6/lib/X11/fv
    twg        536  0.0  1.4  2192   432  ?  S   14:03   0:00 /usr/X11R6/lib/X11/fv
    twg        537  0.0  2.9  3336   896  ?  S   14:03   0:00 xclock -bg #c0c0c0 -p
    twg        538  0.0  2.8  3372   880  ?  S   14:03   0:00 xload -nolabel -bg gr
    twg        541  0.0  1.8  1268   572  p1 S   14:03   0:00 -bash
    twg        554  0.0  1.9  1264   612  p2 S   14:03   0:00 -bash
    twg        649  0.0  0.6  1552   204  ?  S   14:16   0:00 /opt/applix/axdata/ax
    twg       1325  1.0 36.7 16968 11304  ?  S   15:09   0:45 netscape -geometry 79
    twg       1326  0.0  3.0 10276   936  ?  S   15:09   0:00 (dns helper)
    twg       1648  0.0  2.0  1212   636  p2 S   16:15   0:00 vi sysadmin1.txt
    twg       1661  0.0  1.6  1188   500  p2 S   16:19   0:00 /bin/bash -c (ps -aux
    twg       1662  0.0  1.7  1192   540  p2 S   16:19   0:00 /bin/bash -c (ps -aux
    twg       1663  0.0  1.3   928   416  p2 R   16:19   0:00 ps -aux
    twg       1664  0.0  1.0   912   308  p2 R   16:19   0:00 grep twg

หากต้องการให้ระบุส่วนหัวซึ่งจะอธิบายความหมายของคอลัมน์แต่ละคอลัมน์ด้วย ให้ใช้คำสั่งดังต่อไปนี้

    # ps -aux | egrep 'twg|PID'

คำสั่ง find จะใช้ในการตรวจค้นหาไฟล์ซึ่งมีรูปแบบในการใช้งานดังนี้
# find (ไดเรกทอรีที่เริ่มต้นค้นหา) (เงื่อนไขที่ใช้ตรวจหาและคำสั่งที่ทำเมื่อพบ)
ตัวอย่างของเงื่อนไขที่ใช้ตรวจหาคือ

คำสั่ง | ความหมาย
atime n | ไฟล์ที่ถูกใช้งาน (accessed) ไปเมื่อ n วันที่ผ่านมาแล้ว
mtime n | ไฟล์ที่ถูกแก้ไข (modified) ไปเมื่อ n วันที่ผ่านมาแล้ว
size n | ไฟล์ที่มีขนาดความยาวเท่ากับ n X 512 ไบต์
type c | ไฟล์ที่มีชนิดเป็น : f = ไฟล์ธรรมดา, d = ไดเรกทอรี เป็นต้น
fstype typ | ระบุประเภทของระบบไฟล์ : เช่น nfs (Network file system)
name nam | ไฟล์ที่มีชื่อเป็น nam
user usr | ไฟล์ที่มีเจ้าของชื่อ usr
group grp | ไฟล์ที่เป็นของกลุ่มที่ชื่อ grp
perm p | ไฟล์ที่มีรูปแบบการอนุญาตการใช้งานเป็น p

คุณสามารถระบุเครื่องหมาย + (มากกว่า) และเครื่องหมาย - (น้อยกว่า) ประกอบไปกับเงื่อนไขต่างๆได้
ตัวอย่าง

- -mtime +7 หาไฟล์ที่มีการแก้ไขมาแล้วมากกว่า 7 วัน
- -atime -2 หาไฟล์ที่มีการใช้งานน้อยกว่า 2 วัน
- -size +100 ไฟล์ที่มีขนาดใหญ่กว่า 50K (512*100)

คุณสามารถจะใช้ wildcard ควบคู่ไปกับการใช้ -name ได้เช่นในเงื่อนไข -name '*.dat' หมายถึงให้หาไฟล์ที่มีชื่อลงท้ายด้วย .dat
ในการใช้หลายๆเงื่อนไขประกอบกัน จะถูกถือว่าเป็นเงื่อนไขที่รวมเข้าด้วยกัน (AND) เช่นเงื่อนไขต่อไปนี้จะหมายถึงหาไฟล์ที่ถูกแก้ไขเมื่อ 4 เดือน (หรือนานกว่า) และถูกใช้งานมาเมื่อ 2 เดือนที่แล้ว (หรือนานกว่า) คือ

        -atime +60 -mtime +120

ให้ใช้ -o เพื่อระบุว่าเป็น เงื่อนไข "หรือ" (OR) เช่น

        \( -mtime +7 -o -atime +30 \)

เราสามารถใช้เครื่องหมายอัศเจรีย์เพื่อบอกว่าไม่เป็นเงื่อนไขนั้น (NOT) ได้ ตัวอย่างต่อไปนี้หมายถึงให้หาไฟล์ที่มีนามสกุลเป็น .dat ทุกตัวยกเว้น gold.dat

        \! -name gold.dat -name \*.dat

พวกตัวอักษรวงเล็บ "(", ")" หรือ ดอกจัน "*" เชลล์จะถือว่าเป็นตัวอักษรพิเศษที่มีความหมาย เราต้องใช้เครื่องหมาย backslash "\" ในการบังคับไม่ให้เชลล์นำตัวอักษรเหล่านั้นไปตีความ
คำสั่งที่กระทำเมื่อค้นหาพบ

คำสั่ง | ความหมาย
print | ให้พิมพ์ชื่อแบบยาวของไฟล์ที่ค้นหาเจอ
exec cmd | ให้กระทำคำสั่ง cmd กับไฟล์ที่หาเจอ
ok cmd | ให้ถามยืนยันก่อนที่จะทำคำสั่ง cmd กับไฟล์ที่หาเจอ

ตัวอย่างเช่นให้หาไฟล์ที่เป็นซอร์สโค๊ดของภาษาซี (จะลงท้ายด้วย .c) แล้วพิมพ์ราย
ชื่อของไฟล์ที่เจอออกมา

    # find . -name \*.c -print

ตัวอย่างที่ซับซ้อนขึ้น : ค้นหาไฟล์ที่อยู่ในไดเรกทอรี /home/u1 และ /home/u2 ที่มีขนาดใหญ่กว่า 500 K และถูกใช้งานครั้งสุดท้ายเมื่อ 30 วันผ่านมาแล้ว (ไม่ได้ใช้งานมานาน 30 วัน) เมื่อพบก็ให้พิมพ์ไฟล์เหล่านี้ออกมา นอกจากนี้ถ้าหากเจอไฟล์ที่ชื่อ core (ซึ่งเป็นไฟล์ core dump ที่เกิดจากรันโปรแกรมแล้วมีปัญหาเช่นเขียนโปรแกรมให้จัดการกับหน่วยความจำไม่ถูกต้อง เมื่อระบบตรวจเจอก็จะหยุดการทำงานของโปรแกรมและเก็บสถานะของระบบในขณะนั้นลงไฟล์นี้ เพื่อนำไปตรวจสอบหาบักในภายหลัง) เมื่อเจอไฟล์นี้ก็จะลบทิ้งไปด้วย จะใช้คำสั่ง find กับเงื่อนไขดังต่อไปนี้

    # find /home/u1 /home/u2 -type f -atime +30 -size +1000 -print \
      -name core -exec rm {} \;

การใช้คำสั่ง find จะช่วยผู้ดูแลระบบในเรื่องต่อไปนี้

- ตรวจสอบการใช้เนื้อที่ของดิสก์ เพื่อบริหารการใช้งานดิสก์อย่างมีประสิทธิภาพ
- ค้นหาไฟล์ที่อาจมีปัญหาเกี่ยวกับเรื่องระบบการรักษาความปลอดภัย
- ทำงานที่ซ้ำๆกัน

บางครั้งคุณจำเป็นต้องใช้คำสั่งง่ายๆ แทนคำสั่งอื่นๆในกรณีฉุกเฉิน ตัวอย่างเช่น

    echo *

คำสั่งนี้คุณสามารถใช้แทน "ls *" ได้

HTML developed by Kaiwal Development Team (kaiwal@geocities.com)