ติดตั้งผ่าน web เซิร์ฟเวอร์ 4. FTP .... server = /usr/sbin/ipop3d l og_on_success + = HOST DURATION log_on_failure + = H...
บทที่ 1 โครงสร้าง ฮาร์ดดิสก์และการเรียกชื่อฮาร์ดดิสก์
1
ฮาร์ดดิสก์ประกอบด้วย 1. MBR (Master Boot Record) 2. Primary Partition 3. Extended Partition 4. Logical Partition MBR MBR ย่อมาจากคำาว่า Master Boot Record ซึ่ง MBR จะอยู่ที่เซกเตอร์แรกสุดของฮาร์ดิสก์ MBR จะประกอบด้วยสองส่วน คือ IPL (Initial Program Loader) ขนาด 446 byte เป็นพื้นที่ที่โปรแกรมบูทโหลดเดอร์ของลีนุกซ์จะไปติดตั้งอยู่ ใช้ในการบูทของลีนุกซ์ และ Partition table ขนาด 66 byte ดังรูปที่ 1-1 Initial Program Loader (IPL) 466 Byte
Partition table 66 Byte
รูปที่ 1-1 รูปแสดงส่วนประกอบของ MBR การสร้าง partition ให้กับฮาร์ดดิสก์ มี 3 แบบ คือ Primary, Extended และ Logical ในการสร้างพาร์ติชันฮาร์ดดิสก์ ถ้าเราสร้างทุกพาร์ติชันให้เป็น Primary ทั้งหมด จะสร้างได้เพียง 4 พาร์ติชันเท่านั้น ถ้าต้องการมากกว่านั้นต้องใช้ 1 พาร์ติชนั เป็น Extended แล้ว แบ่งย่อย Extended เป็น Logical ตัวอย่างดังภาพ ที่ 1-2 และ 1-3 ตัวอย่างการแบ่งพาร์ติชนั `
รูปที่ 1-2 ตัวอย่างการแบ่ง Partition แบบที่ 1 ใช้พาร์ติชันที่ 4 เป็น Extended
รูปที่ 1-3 ตัวอย่างการแบ่ง Partition แบบ ที่ 2 ใช้พาร์ติชันที่ 2 เป็น Extended
2
ลีนุกซ์เคอร์เนลมีข้อจำากัดในการจัดการพาร์ติชันที่เป็นฮาร์ดดิสก์ IDE ได้ 63 พาร์ติชนั ฮาร์ดดิสก์ SCSI จะได้ 15 พาร์ติชนั พาร์ติชนั แรกของ Logical partition จะเป็น Partition ที่ 5 เสมอ
การเรียกชื่อฮาร์ดดิสก์ ฮาร์ดดิสก์ IDE มีการเชื่อมต่อกับสาย IDE ตรงตำาแหน่งต่างๆ จะมีชื่อเรียกดังนี้ Primary Master เรียกว่า /dev/hda Primary Slave เรียกว่า /dev/hdb Secondary Master เรียกว่า /dev/hdc Secondary Slave เรียกว่า /dev/hdd ลำาดับที่ของ พาร์ติชันของฮาร์ดดิลำาดับที่เท่าไหร่ก็จะเรียก /dev/hda1, /dev/hda2 ..., /dev/hdb1, /dev/hdb2..., /dev/hdc1, /dev/hdc2... ฮาร์ดดิสก์ SCSI จะเรียกชื่อตาม SCSI ID SCSI ID 0 เรียกว่า /dev/sda SCSI ID 1 เรียกว่า /dev/sdb SCSI ID 2 เรียกว่า /dev/sdc SCSI ID 3 เรียกว่า /dev/sdd SCSI ID.. เรียกว่า /dev/sd... เรื่อยไปตามจำานวนฮาร์ดดิสก์ที่สามารถใส่ได้ของ SCSI ลำาดับที่ของพาร์ติชันก็เช่นเดียวกันกับฮาร์ดดิสก์แบบ IDE เช่น /dev/sda1, /dev/sda2..., /dev/sdb1, /dev/sdb2..., /dev/sdc1, /dev/sdc2... ส่วน ฮาร์ดดิสก์ SATA ก็จะเรียกชื่อ partition เหมือนกับฮาร์ดดิสก์ SCSI เมื่อเรารู้จักการเรียกชื่อฮาร์ดดิสก์แล้วเราก็พร้อมที่จะติดตั้งลีนุกซ์แล้ว
รูปที่ 1-4 แสดงฮาร์ดดิสก์ แบบ IDE , SCSI และ SATA ตามลำาดับ
บทที่ 2 วิธกี ารที่จะติดตั้งลีนุกซ์และหลักการติดตั้งลีนุกซ์
3
ติดตั้งลีนุกซ์ได้อย่างไรบ้าง วิธีการติดตั้งลีนุกซ์ทุกค่ายคือการติดตั้งด้วยแผ่น CD หรือ DVD สำาหรับการติดตั้งวิธีการอื่นก็สามารถทำาได้ ลีนุกซ์ Red Hat มีวธิ ีการติดตั้งดังนี้ 1. CD / DVD เป็นวิธีที่ง่าย และสะดวก ได้รับความนิยมมากที่สุด 2. NFS เป็นการติดตั้งผ่าน NFS Network file system ซึ่งเป็นการแชร์ไฟล์ของลีนุกซ์ วิธีนี้เหมาะสำาหรับการติดตั้งเพื่อการอบรมลีนุกซ์ สามารถติดตั้งได้พร้อมกันหลายๆ เครื่อง จะเร็วกว่าติดตั้งจาก CD เนื่องจากไม่ต้องคอยเปลี่ยนแผ่น 3. HTTP ติดตั้งผ่าน web เซิร์ฟเวอร์ 4. FTP ติดตั้งผ่าน FTP เซิร์ฟเวอร์ 5. Hard Disk ติดตั้งผ่านฮาร์ดดิสก็ อีกลูกหรืออีกพาร์ติชันหนึ่ง 6. Kickstart ติดตั้งโดยใช้ไฟล์ kickstart เหมาะสำาหรับการติดตั้งลีนุกซ์พร้อมกันจำานวนมาก โดยที่เครื่องสเปคเดียวกัน และติดตั้งเหมือนกันหมดไม่ว่าจะเป็นขนาด partition หรือจำานวน package หลักการติดตั้ง ลีนุกซ์ การติดตั้งลีนุกซ์ มีส่วนสำาคัญตรงขั้นตอนแบ่งพาร์ติชัน เพราะเราต้องรูว้ ่าเราจะติดตั้งลีนุกซ์ เพื่อใช้งานอะไร ในการติดตั้งลีนุกซ์ พาร์ติชันที่จำาเป็นได้แก่ / (อ่านว่า รูท), /boot, swap แต่ในการนำาลีนุกซ์ เซิร์ฟเวอร์ ไปใช้งานจริงนั้นการแบ่งพาร์ติชันเพียงเท่านี้ ไม่สะดวกในการนำาไปใช้งาน จะต้องมีการแบ่งพาร์ติชัน อืน่ ๆ ออกมาด้วย เช่น ต้องการทำา mail เซิร์ฟเวอร์ /boot พื้นที่เก็บ Kernel และไฟล์ที่เกี่ยวข้องกับการบูท / พื้นที่เก็บไฟล์ซิสเต็ม /home พื้นที่ใช้งานของ user /var/spool/mail พื้นที่เก็บ mail /tmp พื้นที่เก็บไฟล์ชั่วคราว swap พื้นที่ที่ใช้เป็นหน่วยความจำาสำารอง เวลา RAM ไม่พอ ต้องการทำา PostgreSQL Database เซิร์ฟเวอร์ /boot พื้นที่เก็บ Kernel และไฟล์ที่เกี่ยวข้องกับการบูท / พื้นที่เก็บไฟล์ซิสเต็ม /usr/local/pgsql พื้นที่เก็บข้อมูลของ PostgreSQL /backup พื้นที่ไว้สำารองข้อมูลของ PostgreSQL /tmp พื้นที่เก็บไฟล์ชั่วคราว swap พื้นที่ที่ใช้เป็นหน่วยความจำาสำารอง เวลา RAM ไม่พอ
4
ขนาด partiton /boot 100 MB / 6-8 GB /tmp 256 MB swap 2 เท่าของ RAM แต่ไม่เกิน 2 GB ส่วนพาร์ติชันอื่นๆ แบ่งตามขนาดของฮาร์ดดิสก์ และความต้องการใช้งาน พาร์ติชัน /tmp เป็นพาร์ติชันที่แยกออกมาเพื่อความปลอดภัยของเซิร์ฟเวอร์ถ้าพาร์ติชัน / ข้อมูลเต็มก็จะไม่มีผลกระทบกับระบบ พาร์ตชิ ันที่แยกออกมาได้และไม่ได้จาก / ของการติดตั้งลีนุกซ์ พาร์ติชนั ที่ไม่สามารถแยกออกจาก / (รูทไดเรกทอรี) หรือแยกจากไฟล์ซิสเต็มได้ คือ /etc, /lib, /bin, /sbin, /dev พาร์ติชนั ที่สามารถแยกออกมาได้ /tmp, /usr, /usr/local, /home, /var, /opt ทำาไมต้องแยกหรือแบ่งพาร์ติชันออกมา เพื่อความยืดหยุ่นในการใช้งาน สามารถแก้ปัญหาได้ง่ายเมื่อฮาร์ดดิสก์เต็ม สามารถทำาโควต้าได้ ถ้าเราไม่แบ่ง พาร์ติชนั แยกออกมาจะไม่สามารถทำาโควต้าได้ นอกจากนั้นยังสะดวกในการสำารองข้อมูล พาร์ตชิ ัน /boot พาร์ติชนั /boot ต้องเป็นพาร์ติชันแรกของฮาร์ดดิสก์
บทที่ 3 กระบวนการบูทของลีนุกซ์
รูปที่ 3-1 รูปแสดงกระบวนการบูทของลีนุกซ์ หลังจากที่เราติดตั้งลีนุกซ์เสร็จ บูทเครื่องใหม่ หรือเปิดสวิทช์ หลังจากที่เครื่องคอมพิวเตอร์ตรวจสอบตัวเองแล้วค้นหาอุปกรณ์ที่ใช้บูท ถ้าตรวเจออุปกรณ์ที่ใช้บูทเป็นฮาร์ดดิสก์ก็จะไปทำางานต่อที่ MBR ซึ่ง GRUB ฝังตัวอยู่ในส่วน IPL ของ MBR มาทำาความเข้าใจเกี่ยวกับโปรแกรม Boot Loader ที่ชื่อ GRUB กันก่อนครับ
5
6
GRUB (Grand Unified Bootloader) GRUB เป็นโปรแกรมที่จัดการเกี่ยวการบูทของลีนุกซ์ ในลีนุกซ์รุ่นเก่าจะใช้ โปรแกรม LILO ซึ่งมีข้อจำากัดและข้อด้อยกว่า GRUB ปัจจุบันทั้งลีนุกซ์ทุกค่ายรวมถึง Solaris ก็หนั มาใช้ GRUB เป็นบูทโหลดเดอร์กันทั้งนั้น ข้อเด่นของ GRUB • สามารถใช้สำาสั่งแบบ Command-line ได้ • ใช้ได้กับไฟล์ซิสเต็มเหล่านี้ ext2/ext3, ReiserFS, JFS, FAT, minix, FFS • มีระบบป้องกันด้วยรหัสผ่านที่เข้าระหัสแบบ MD5 • เปลี่ยนค่าใน grub.conf มีผลทันที • ถ้า MBR ใน /dev/hda ถูกทำาลาย ติดตั้งใหม่ได้ /sbin/grub-install /dev/hda ตัวอย่าง ไฟล์ /boot/grub/grub.conf GRUB version ใหม่ ไฟล์ config จะเปลี่ยนเป็น /boot/grub/menu.lst เราสามารถเปลี่ยนค่าต่างในไฟล์ config นี้ default=0 timeout=10 splashimage=(hd0,1)/grub/splash.xpm.gz #ชุดคำำสัง่ หรือ เมนู ท่ี 0 title Linux TLE (2.4.22-6_1.2163.nptl_03tle) root (hd0,1) kernel /vmlinuz-2.4.22-6_1.2163.nptl_03tle ro root=/dev/hda3 hdc=ide-scsi rhgb initrd /initrd-2.4.22-6_1.2163.nptl_03tle.img #ชุดคำำสัง่ หรือ เมนู ท่ี 1 title Windows rootnoverify (hd0,0) chainloader +1
ถ้า default=0 บูทเข้า ลีนุกซ์ ถ้า default=1 บูทเข้า Windows timeout=10 แสดงหน้าจอเมนูบูทอยู่ 10 วินาที แลัวจึงบูทเข้า default หลังจากที่ผ่านโปรแกรม Boot loader โปรแกรม Boot loader ก็จะส่งการทำางานต่อมาที่ partition /boot ซึ่งในพาร์ติชันนี้จะเก็บ kernel ในลักษณะของไฟล์บีบอัด kernel จะขยายตัวมันเอง ตรวจสอบฮาร์แวร์และติดตั้งไดรเวอร์ หลังจากนัน้ จะเมาท์ root file system แบบ read only แล้วจึงเข้าสู่ขั้นตอน init
7
กระบวนการ init ในกระบวนการบูท ขั้นตอนการ init คือการรันคำาสั่ง /sbin/init นัน่ เอง เริ่มจากอ่านข้อมูลจากไฟล์ /etc/inittab แล้วไปทำางานต่อที่ /etc/rc.d/rc.sysinit ไฟล์ /etc/inittab ในไฟล์ /etc/inittab จะมีรายละเอียดบางส่วนที่จะต้องมาทำาความเข้าใจกันดังนี้ Red Hat ลีนุกซ์จะมี runlevel อยู่ 6 runlevel ใช้งานอยู่จริงๆ 5 runlevel ตามรายละเอียดด้านล่างนี้ 1 2 3 4 5 6 7 8 9 10 11 12 13
# Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit
เลข 3 ในบรรทัดที่ 10 เป็นการบอกว่า บูทให้เข้าสู่ runlevel 3 เป็นค่าปกติ ถ้าหากเราต้องการให้เข้า runlevel 5 โดยให้บูทเข้ากราฟิกโหมด หรือ X11 ก็ทำาได้โดยการเปลี่ยน เลข 3 เป็นเลข 5 id:5:initdefault: ถ้าค่า initdefault มีคา่ เป็น 3 ในกระบวนการบูทหลังจากที่รัน script /etc/rc.d/rc.sysinit แล้วก็จะไปทำางานต่อที่ /etc/rc.d/rc3.d/ ถ้าค่า initdefault มีคา่ เป็น 5 ในกระบวนการบูทหหลังจากที่รัน script /etc/rc.d/rc.sysinit แล้วก็จะไปทำางานต่อที่ /etc/rc.d/rc5.d/ ซึ่งใน directory เหล่านี้จะเป็นที่เก็บลิงค์ไฟล์ start script (ลิงค์มาจาก /etc/init.d/) ของ service ต่างๆ ซึ่งเป็นตัวบอกว่าในการบูทขึ้นมาจะให้ start service นัน้ ๆ หรือไม่ หลังจากที่ start service เรียบร้อยแล้วก็จะมาอ่านไฟล์ /etc/rc.d/rc.local ซึ่งเป็นไฟล์ที่เก็บคำาสั่งที่ใช้ start service สำาหรับโปรแกรมที่ไม่มี start script ใน /etc/init.d สุดท้ายก็เข้าสู่กระบวนการ Login ถ้าเป็น Text mode ก็รนั โปรแกรม getty ถ้าเป็น Graphic mode ก็รนั xdm, gdm,
8
kdm ให้ Login ขึ้นอยู่กับว่าใช้ Window Managers ตัวไหน ไฟล์ /etc/rc.d/rc.sysinit ไฟล์ rc.sysinit การรันไฟล์นี้จะเป็นการทำางานของระบบ เช่น set kernel parameter, set เวลา, โหลด keymaps , ใช้งาน swap partition, hostname, ตรวจเชค และเมาท์พาร์ติชันอื่นๆ ฯลฯ ซึ่งจะเป็นทำางานเกี่ยวข้องกับระบบทั้งหมด การ Login การ Login แบบ กราฟิกโหมด (runlevel 5)
รูปที่ 3-3 แสดงการ Login แบบกราฟิก การ Login แบบ Text Mode (runlevel 3) Red Hat Enterprise Linux AS release 4 (Nahant) Kernel 2.6.95.EL on an i686 training1 Login: root Password: Last login: Sun Jul 16 04:24:10 from 192.168.1.99 You have new mail. [root@training1~]#
9
Login เข้ามาแล้วจะรีบทู หรือปิดเครื่องอย่างไร บนกราฟิกโหมดคงไม่ต้องพูดถึงนะครับเพราะเห็นกันอยู่แล้วว่าจะรีบูทหรือจะปิดเครื่อง สำาหรับบน text mode มาดูคำาสั่งที่ใช้ในการรีบูท และปิดเครื่องกันนะครับ shutdown -h now ปิดเครื่องทันที shutdown -r now รีบูทเครื่องทันที reboot รีบูทเครื่อง init 6 รีบูทเครื่อง init 0 ปิดเครื่อง poweroff ปิดเครื่อง halt ปิดเครื่อง เลือกใช้กันตามสะดวกนะครับอย่าปิดเครื่องโดยใช้นิ้วปิดสวิทช์เลย อันตรายต่อข้อมูลขอให้ปิดตามขั้นตอน ไฟล์ที่เกี่ยวข้องในบทนี้ /boot/grub/menu.lst หรือ /boot/grub/grub.conf /etc/inittab /etc/rc.d/rc.sysinit /etc/rc.d/rc.local คำาสั่งที่เกี่ยวข้องในบทนี้ init reboot shutdown poweroff halt
บทที่ 4 การเปิดปิด Service
10
service บนลีนุกซ์ มี 2 ประเภท ได้แก่ stand alone service และ xinetd control stand alone service เป็น service ทีอ่ ยู่ได้ดว้ ยตัวเอง ลักษณะสำาคัญของ stand alone service ได้แก่ 1. ทำางานตอนบูท 2. Service เปิดอยู่ตลอดเวลา 3. ไฟล์ start script เก็บอยู่ที่ /etc/init.d การใช้คำาสั่งสำาหรับการ start service ต่างๆ ไม่ว่าจะเป็นลีนุกซ์ Red Hat หรือ Fedora จะใช้คำาสั่ง service เช่น service ชื่อ service {start|stop|restart|reload|status} เช่น service httpd start สำาหรับลีนุกซ์ทั่วไปจะใช้คำาสั่ง /etc/init.d/ชือ่ service {start|stop|restart|force-reload} เช่น /etc/init.d/httpd start สำาหรับคำาสั่งนี้ บนลีนุกซ์ตระกูล Red Hat ก็สามารถ ใช้คำาสั่งนี้ได้เช่นกัน xinetd control เป็น service ทีถ่ ูกควบคุมด้วยโปรแกรม xinetd ลักษณะสำาคัญของ xinetd control service ได้แก่ 1. service ถูกความคุมโดยโปรแกรม xinetd 2. service จะทำางานหรือให้บริการเมื่อมีการร้องขอ 3. ไฟล์ start script เก็บอยู่ที่ /etc/xinit.d สำาหรับการ start service บน Red Hat จะใช้คำาสั่ง chkconfig ชือ่ service on เช่น chkconfig pop3 on หรือจะแก้ไขไฟล์ start script โดยตรงเช่น pop3 { disable = yes socket_type = stream wait = no user = root server = /usr/sbin/ipop3d l og_on_success + = HOST DURATION log_on_failure + = HOST } ถ้าเราต้องการเปิด service ของ pop3 เราให้แก้ไขบรรทัด disable = yes ให้เป็น disable = no service อื่นๆ ก็เช่นกัน
เครื่องมือที่ช่วยในการเปิดปิด service ตอนบูท ลีนุกซ์ตระกูล Red Hat จะมีเครื่องมือช่วยให้ service ต่างๆทำางานตั้งแต่ตอนบูท ดังนี้ 1. chkconfig
รูปที่ 4-1 แสดงการใช้คำาสั่ง chkconfig chkconfig เป็นคำาสั่งแบบ command line การใช้งานง่าย chkconfig –list แสดง service ทั้งหมด chkconfig –add เพิ่ม service เข้าไปในระบบ chkconfig ชื่อ service on | off เปิด-ปิด service 2. ntsysv
รูปที่ 4-2 แสดงโปรแกรม ntsysv
11
12
ntsysv เป็นโปรแกรมแบบ Text User Interface หากต้องการให้ service ที่ต้องการทำางานตั้งแต่ตอนบูทก็ให้ กด spacebar ให้มีเครื่องหมาย * หากไม่ต้องการให้ service นัน้ ๆ ทำางานตอนบูท ก็ กด spacebar อีกครั้งหนึ่งให้เครื่องหมาย * หายไป 3. serviceconf / redhat-config-service / system-config-service
รูปที่ 4-3 แสดงโปรแกรม serviceconf / system-config-service serviceconf / redhat-system-config / system-config-service เป็นโปรแกรมแบบ GUI สามารถรันได้บนกราฟิกโหมดเท่านั้น ข้อเสียของ ntsysv และ serviceconf คือ มันจะมีผลต่อการเปิดปิด service ตอนบูทเฉพาะรัน Level ที่เรา ทำางานอยู่เท่านั้นเช่น เรียกใช้งานโปแกรมใน runlevel 5 แล้วบูทเครื่องเข้ามา runlevel 3 service ที่เปิดหรือปิดเอาไว้ก็จะไม่มีผลเมื่อบูทเข้ามาใน runlevel 3 ไดเรกทอรีที่เกี่ยวข้อง /etc/init.d /etc/xinet.d ไฟล์ที่เกี่ยวข้อง /etc/init.c/* /etc/xinet.d/* คำาสั่งที่เกี่ยวข้อง service chkconfig
13
บทที่ 5
โครงสร้างของไดเรกทอรีของลีนุกซ์ ผู้ใช้งานวินโดว์จะมีความคุ้นเคยกับลักลักษณะโครงสร้างไดเรกทอรี ที่มี Driver C:\ , D:\ และโฟลเดอร์ แต่สำาหรับลีนุกซ์นั้น จะไม่มีไดรฟ์แต่จะมี ไดเรกทอรีเหนือสุดคือ / (รูทไดเรกทอรี) หลังจากที่เราติดตั้งลีนุกซ์เสร็จ ก็จะมีไดเรกทอรีมากมาย ซึ่งเหมือนกับตอนที่เราติดตั้งวินโดว์เสร็จเราจะเห็นโฟลเดอร์ Windows, Programs File ฯลฯ มุมมองแบบไดเรกทอรี
รูปที่ 5-1 แสดงไดเรกทอรีทั้งหมดของลีนุกซ์ มุมมองแบบภาพ หรือ โฟลเดอร์แบบวินโดว์
รูปที่ 5-2 แสดงไดเรกทอรีในมุมมองแบบโฟลเดอร์ในวินโดว์
14
มุมมองโครงสร้างแบบต้นไม้
รูปที่ 5-3 แสดงโครงสร้างไดเรกทอรีแบบแผนภูมิต้นไม้ การเปลี่ยนไปทำางานยังไดเรกทอรีต่างๆด้วยคำาสั่ง cd ที่เขียนเรื่องนี้มาเพราะจะเจอปัญหาความไม่เข้าใจเกี่ยวกับการเปลี่ยนการทำางานไปยังไดเรกทอรีต่างๆ มากสำาหรับลีนุกซ์มือใหม่ คือไม่รู้ว่าต้อง มี / หรือ ไม่มี มาดูต่อครับ สิ่งที่ต้องจำาและทำาความเข้าใจ รูทไดเรกทอรี คือ / เป็นไดเรกทอรี่เหนือสุด เทียบกับวินโดว์ก็ Drive C:\ โฮมไดเรกทอรีของ user root คือ /root บ้านของคนชื่อ root เป็นคนที่มีสิทธิสูงสุดในระบบอย่าหลง / (รูทไดเรกทอรี) กับ /root (บ้านของคนชื่อ root) ไดเรกทอรีที่อยู่ถัดจากรูทไดเรกทอรี คือ /boot, /etc, /initrd, /misc, /opt, /root, /sys, /usr, /bin, /dev, /home, /lib, /media, /mnt, /proc, /sbin, /tmp, /var การใช้คำาสั่ง cd เพื่อเปลี่ยนไดเรกทอรี ถ้าต้องการเปลี่ยนไดเรกทอรีไปทำางานที่ติดกับ / ต้องมี / นำาหน้า เช่น cd /boot, cd /etc , cd /usr, cd /mnt กรณีที่ไดเรกทอรี ที่อยูใ่ นลำาดับขั้นถัดไปจากที่เราทำางานอยู่ ไม่ต้องใส่เครื่องหมาย / เช่น ทำางานอยู่ที่ /usr ต้องการเข้าไปทำางานที่ /usr/local/pgsql ก็สามารถใช้คำาสั่ง cd local/pgsql ได้เลย ข้อควรจำา ถ้าเปลี่ยน ไดเรกทอรีไปทำางานที่ไดเรกทอรีที่ไม่ติดกับ / และเป็นไดเรกทอรีถัดไปก็ไม่ต้องใส่เครื่องหมาย /
15
ตัวอย่างการใช้คำาสั่ง cd เพื่อเปลี่ยนการทำางานไปยังไดเรกทอรีต่างๆ ทำางานอยู่ที่ /root เปลี่ยนไปทำางานที่ /usr/local/pgsql ใช้คำาสั่ง cd /usr/local/pgsql ทำางานอยู่ที่ /usr/local/pgsql เปลี่ยนไปทำางานที่ /var/www ใช้คำาสั่ง cd /var/www ทำางานอยู่ที่ / เปลี่ยนไปทำางานที่ /usr/local/pgsql ใช้คำาสั่ง cd usr/local/pgsql ` ทำางานอยู่ที่ / เปลี่ยนไปทำางานที่ /etc ใช้คำาสั่ง cd etc ทำางานอยู่ที่ /root เปลี่ยนไปทำางานที่ /etc/httpd/ ใช้คำาสั่ง cd /etc/httpd ไม่สนใจว่าทำางานอยู่ที่ไหน ต้องการเปลียนไปไปทำางาน ที่ /var/www/html ใช้คำาสั่ง cd /var/www/html คำาสั่ง pwd เป็นคำาสั่งที่แสดงชื่อของไดเรกทอรีปัจจุบันที่เราทำางานอยู่ตัวอย่างดังรูปที่ 5-4
รูปที่ 5-4 แสดงการใช้คำาสั่ง pwd คำาสั่ง pwd จะช่วยให้เรารู้ว่าเราทำางานอยู่ที่ตำาแหน่งไดเรกทอรีไหน จะได้ไม่หลงไดเรกทอรี คำาสั่งที่เกี่ยวข้องในบทนี้ cd pwd
บทที่ 6 การใช้งาน Vi
16
การใช้งานลีนุกซ์หนีไม่พ้นที่จะต้องใช้งาน Text Editor ตัวใดตัวหนึ่ง เพราะ ลีนุกซ์มีความจำาเป็นต้องแก้ คอนฟิกไฟล์ ทีเป็น Text ไฟล์ โปรแกรม Text Editor มีหลายตัว เช่น pico, nano, mc, Vi ฯลฯ แต่ในที่นี้จะพูดถึง Vi เพราะเป็น Text Editor ที่มาคู่กับ Unix มานาน และได้รับความนิยมมากตัวหนึ่ง Vi (ออกเสียงว่า "veeeye")เป็นคำาเรียกสั้นๆ ของ Visual editor
รูปที่ 6-1 แสดงโปรแกรม Vi เริ่มใช้งาน vi เราสามารถเรียกใช้งาน Vi โดยพิมพ์คำาสั่ง vi ตามด้วยชื่อไฟล์ ชื่อไฟล์นี้เป็นไปได้ทั้งไฟล์ที่มีอยู่แล้ว และชื่อไฟล์ใหม่ ตัวอย่าง # vi /etc/samba/smb.conf # vi newfilename.txt vi Mode
17
vi มี 2 โหมด ● command mode ใช้สำาหรับรับคำาสั่ง ของผู้ใช้ เช่น จะเข้าสู่ insert mode บันทึกไฟล์ ออกจากโปรแกรม ฯลฯ ● insert mode ใช้สำาหรับแก้ไขไฟล์ เช่น พิมพ์ข้อมูลเพิ่ม ลบคำา เมื่อเราเปิดโปรแกรม vi ขึน้ มาโปรแกรมจะเข้าสู่ command mode เราจะพิมพ์ข้อความลงไปไม่ได้ จนกว่าเราจะเข้าสู่ insert mode โดยการกดปุ่ม i (หรืออื่นๆ) เมื่อเราทำางานใน insert mode เราสามารถแก้ไขข้อมูลในไฟล์ได้ ถ้าเราต้องการบันทึกไฟล์ หรือออกจากการใช้งาน vi ก็ต้องกลับเข้าสู่ command mode โดยการกดปุ่ม Esc เข้าสู่ insert mode เพื่อแก้ไขข้อความ a เพิ่มข้อความที่อยู่ข้างหลัง A เพิ่มข้อความต่อท้ายบรรทัดปัจจุบัน i แทรกข้อความที่อยู่หน้าเคอร์เซอร์ I แทรกข้อความที่ต้นบรรทัดปัจจุบัน o เพิ่มบรรทัดว่างๆใหม่อีกหนึ่งบรรทัด ถัดจากบรรทัดที่เคอร์เซอร์อยู่ O เพิ่มบรรทัดว่างๆใหม่อีกหนึ่งบรรทัด เหนือจากบรรทัดที่เคอร์เซอร์อยู่ การบันทึกไฟล์และออกจากโปรแกรม (command mode) ถ้าทำางานอยู่ใน insert mode เข้าสู่ command mode โดยการกด Esc แล้วค่อยพิมพ์คำาสั่ง ZZ ออกจากโปรแกรมบันทึกไฟล์ :q! ออกจากโปรแกรมไม่บันทึกไฟล์ :wq ออกจากโปรแกรมบันทึกไฟล์ การเลื่อนเคอร์เซอร์ไปยังตำาแหน่งต่างๆ ใน 1 จอภาพ h เลื่อนเคอร์เซอร์ไปทางซ้าย 1 ตัวอักษร j เลื่อนเคอร์เซอร์ไปยังบรรทัดล่าง 1 บรรทัด k เลื่อนเคอร์เซอร์ไปยังบรรทัดบน 1 บรรทัด l เลื่อนเคอร์เซอร์ไปทางขวา 1 ตัวอักษร เลื่อนเคอร์เซอร์ทีละคำา ประโยค ย่อหน้า w เลื่อนเคอร์เซอร์ไปยังตัวอักษรแรกของคำาที่อยู่ถัดไป e เลื่อนเคอร์เซอร์ไปยังตัวอักษรสุดท้ายของคำาที่อยู่ถัดไป b เลื่อนเคอร์เซอร์ไปยังตำาแหน่งแรกของคำาที่อยู่ก่อนหน้า
18
การเลื่อนจอภาพ ^F เลื่อนจอภาพเพื่อดูข้อมูลที่อยู่ในหน้าถัดไป ^B เลื่อนจอภาพเพื่อดูข้อมูลที่อยู่ก่อน 1 หน้า ^D เลื่อนจอภาพไปอีกครึ่งจอภาพ ^U เลื่อนจอภาพย้อนกลับไปอีกครึ่งจอภาพ ^R หรือ ^L ให้แสดงจอภาพปัจจุบันอีกครั้งหนึ่ง การลบ
dd dw de db d^ d$
ลบเฉพาะบรรทัดที่เคอร์เซอร์อยู่ ลบคำาตั้งแต่ตัวอักษรที่เคอร์เซอร์อยู่ไปจนถึงตัวอักษรแรกของคำาต่อไป ลบคำาตั้งแต่ตัวอักษรที่เคอร์เซอร์อยู่ไปจนถึงตัวอักษรสุดท้ายของคำาปัจจุบัน ลบคำาตั้งแต่ตัวอักษรที่อยู่หน้าเคอร์เซอร์ไปถึงอักษรแรกของคำาปัจจุบัน ลบคำาตั้งแต่ตัวอักษรที่อยู่หน้าเคอร์เซอร์ไปจนถึงตัวอักษรแรกของบรรทัดที่ไม่ใช่ space ลบคำาตั้งแต่ตัวอักษรที่เคอร์เซอร์อยู่ไปจนถึงตัวสุดท้ายของบรรทัด
การโยกย้ายและการทำาสำาเนา ym นำาข้อความที่ต้องการเก็บลงใน buffer (m=จำานวนบรรทัด) yy นำาข้อความทั้งบรรทัด ที่เคอร์เซอร์อยู่ไปเก็บใน buffer p นำาข้อความใน buffer มาวางหลังเคอร์เซอร์ การยกเลิกคำาสั่ง u undo . redo การค้นหาคำา /Test /This is test /^Test หาคำาว่า Test /Test$ หาคำาว่า Test /^$
หาคำาว่า Test หาวลี This is test หาคำาว่า Test ที่ปรากฏที่ต้นบรรทัด หาคำาว่า Test ที่ปรากฏที่ท้ายบรรทัด หาบรรทัดที่เป็นบรรทัดว่างๆ
บทที่ 7 การใช้คำาสั่ง RPM (RPM Package Manager)
19
โปรแกรมบนลีนุกซ์ส่วนใหญ่จะเขียนด้วยภาษา C ในการติดตั้งต้องเอา source code ของโปรแกรมมา compile ด้วย 3 คำาสั่งหลัก ./configure, make, make install ซึ่งเป็นเรื่องยาก และไม่สะดวกสำาหรับผู้ใช้งานทั่วไป เพราะฉะนัน้ ลีนุกซ์แต่ละค่าย ก็พยายามที่จะอำานวยความสะดวกในการติดตั้งโปรแกรมให้กับผู้ใช้งาน ก็จะมีวิธีการ และเทคโนโลยีที่ต่างๆกันไป เช่น ลีนุกซ์ Debain ubuntu ใช้ apt-get, Red Hat ใช้ rpm (RPM Package Manager) รูปแบบของไฟล์ RPM name version release architecture noarch
ชื่อ Package เวอร์ชัน ปรับปรุงครั้งที่ i386, i586, athlon : Intel x86 Compatible Alpha : Digital Alpha/AXP ia64 : IA-64 (Itanium) s300: S/390 architecture-independency code
ตัวอย่าง postgresql-7.3.2-3.i386.rpm ชื่อ package คือ postgresql version คือ 7.3.2 release คือ 3 architecture คือ i386 setup-2.5.25-1.noarch.rpm noarch คือ ไม่ขนึ้ กับสถาปัตถยกรรม CPU ติดตั้งและลบ package (โปรแกรม) nstall: rpm -i ติดตั้ง Upgrade: rpm -U อัพเกรด Freshen: rpm -F อัพเกรดถ้ามีอยู่ / ถ้าไม่มีไม่ทำาอะไร Erase: rpm -e ลบ Output option: -v, -h แสดงเครื่องหมาย # ขณะทำางาน
20
rpm Query รูปแบบ rpm -q what_package what_information • Package Options; • -a • package_name • -f filename • -p package_file_name • Information Options: • Default: package name • -i: general information • -l: file list ตัวอย่างการใช้คำาสั่ง rpm query rpm -qa มี Package อะไรติดตั้งอยู่บ้าง rpm -qi postgresql ดูข้อมูลของ Package rpm -ql postgresql ดูว่ามีไฟล์อะไรอยู่บ้างใน Package postgresql rpm -qf /usr/bin/psql ไฟล์นี้อยู่ใน Package อะไร rpm -qlp postgresql-7.3.2-3.i386.rpm ไฟล์นี้ติดตั้งแล้วไปมีไฟล์อะไรบ้างไปติดตั้งอยู่ที่ไหน rpm -qip zip-2.3-16.i386.rpm ดูข้อมูลของไฟล์นี้ ตัวอย่างผลของการใช้คำาสั่ง rpm quey [root@localhost ]# rpm -ql postgresql /usr/bin/clusterdb /usr/bin/createdb /usr/bin/createlang /usr/bin/createuser /usr/bin/dropdb /usr/bin/droplang ... [root@localhost]# rpm -qi postgresql Name : postgresql Relocations: (not relocateable) Version : 7.3.2 Vendor: Red Hat, Inc. Release : 3 Build Date: อา. 16 ก.พ. 2546, 10:21:48 Install Date: ส. 3 พ.ค. 2546, 06:39:59 Build Host: porky.devel.redhat.com
21
Group : Applications/Databases Source RPM: postgresql-7.3.2-3.src.rpm Size : 6481748 License: BSD Signature : DSA/SHA1, จ. 24 ก.พ. 2546, 12:43:22, Key ID 219180cddb42a60e Packager : Red Hat, Inc. URL : http://www.postgresql.org/ Summary : PostgreSQL client programs and libraries. Description : PostgreSQL is an advanced Object-Relational database management system (DBMS) that supports almost all SQL constructs, including ...
คำาสั่งที่เกี่ยวข้องในบทนี้ rpm
บทที่ 8 การบริหารจัดการบัญชีรายชื่อผู้ใช้ระบบ User / Group Accounts อย่างที่ได้กล่าวไปแล้วว่าลีนุกซ์มีการทำางานแบบผู้ใช้งานคราวละหลายคน (multi user) การจัดการบัญชีรายชื่อมีความจำาเป็นเพื่อง่ายและสะดวกในการดูแลรักษาเซิฟเวอร์ ลีนุกซ์ Red Hat ถ้าเราเพิ่ม user เข้าไปโดยใช้คำาสั่ง useradd ตามด้วยชื่อ user โดยไม่มี option -g ระบบก็จะทำาการเพิ่มกลุ่มให้อีก 1 กลุ่มตามชื่อ user นัน้ ซึ่งเรียกว่า Private Group คำาสั่งที่เกี่ยวข้องกับการจัดการ User ได้แก่ groupadd, groupdel, useradd, userdel, usermod หากเราไม่ต้องการ Private Group ก็สามารถเพิ่มกลุ่มเข้ามาเองโดยใช้คำาสั่ง groupadd คำาสั่ง groupadd เพิ่มกลุ่มใหม่ groupadd option ชื่อ group ที่ต้องการเพิ่ม -g gid (group id) ตัวอย่าง #เพิ่มกลุ่มชื่อ manager โดยมีหมายเลข gid = 1000 #เพิ่มกลุ่มชื่อ web #เพิ่มกลุ่มชื่อ hr #เพิ่มกลุ่มชื่อ hr
groupadd g 1000 manager groupadd web groupadd hr groupadd sale
คำาสั่ง groupdel ลบกลุ่มออก groupdel ชื่อgroupที่ต้องการลบ ตัวอย่าง groupdel manager คำาสั่ง useradd เพิม่ ผู้ใช้งานใหม่ useradd option user -d ระบุโฮมไดเรคตอรี -g ระบุ group -m สร้างโฮมไดเรคทอรีให้ด้วย -c ระบุชื่อของ user -u ระบุ user id
22
23
ตัวอย่าง หลังจากที่เราเพิ่มกลุ่มเรียบร้อยแล้วเราก็สามารถเพิ่ม user ได้เลย
useradd g manager c “Mr. Somchai” somchai
#เพิ่มผู้ใช้งาน ชื่อ somchai อยุ่ในกลุ่ม manager มีชื่อว่า Mr. Somchai
useradd g web c ”Miss Manee” manee
#เพิ่มผู้ใช้งาน ชื่อ somchai อยุ่ในกลุ่ม manager มีชื่อว่า Mr. Somchai useradd g web c “Mr. Piti” piti #เพิ่มผู้ใช้งาน ชื่อ somchai อยุ่ในกลุ่ม manager มีชื่อว่า Mr. Somchai useradd g hr c “Miss Chuchai” chuchai #เพิ่มผู้ใช้งาน ชื่อ somchai อยุ่ในกลุ่ม manager มีชื่อว่า Mr. Somchai useradd g sale c “Mr. Mana” mana #เพิ่มผู้ใช้งาน ชื่อ somchai อยุ่ในกลุ่ม manager มีชื่อว่า Mr. Somchai passwd somchai passwd manee passwd piti passwd chuchai passwd mana
# Set password ให้กับ user somchai # Set password ให้กับ user manee # Set password ให้กับ user piti # Set password ให้กับ user chuchai # Set password ให้กับ user mana
คำาสั่ง userdel ลบผู้ใช้งานออก userdel option userที่ต้องการลบ -r ลบไฟล์ของ user ในโฮม และใน /var/spool/mail การเปลี่ยนแปลงข้อมูลของผู้ใช้งานด้วย usermod usermod option user ที่ต้องการเปลี่ยนแปลง -c เปลี่ยน comment หรือชื่อของ user -d เปลี่ยนโฮมไดเรคทอรีของ user -e ตั้งวันหมดอายุให้กับ user -g เปลี่ยนกลุ่มของ user -G group1 [ ,group2,... , [groupN] เพิ่มกลุ่มให้กับ user ให้ user มีกลุ่มหลายกลุ่มได้ -u uid เปลี่ยน uid ของ user -L ล๊อคไม่ให้ user เข้าใช้งาน -U ยกเลิกการล๊อค
24
ตัวอย่างการจัดการบัญชีรายชื่อ [root@training1 ~]# useradd g manager c "Mr. Somchai" somchai [root@training1 ~]# useradd g web c "Miss Manee" manee [root@training1 ~]# useradd g web c "Mr. Piti" piti [root@training1 ~]# useradd g hr c "Miss Chuchai" chuchai [root@training1 ~]# useradd g sale c "Mr. Mana" mana [root@training1 ~]# id piti uid=502(piti) gid=501(web) groups=501(web) [root@training1 ~]# finger piti Login: piti Name: Mr. Piti Directory: /home/piti Shell: /bin/bash Never logged in. No mail. No Plan. [root@training1 ~]# usermod g hr c “Piti” piti [root@training1 ~]# id piti uid=502(piti) gid=502(hr) groups=502(hr) [root@training1 ~]# finger piti Login: piti Name: Piti Directory: /home/piti Shell: /bin/bash Never logged in. No mail. No Plan. [root@training1 ~]# [root@training1 ~]# passwd somchai Changing password for user somchai. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@training1 ~]# usermod g hr c “Piti Yindee” piti [root@training1 ~]# usermod L piti [root@training1 ~]#
คำาสั่งที่เกี่ยวข้องในบทนี้ groupadd groupmod groupdel useradd usermod userdel passwd id finger
บทที่ 9 Permission ของไฟล์ และ Directory
25
เนื่องจากลีนุกซ์มีระบบการทำางานแบบผู้ใช้งานคราวละหลายคน เพราะฉะนัน้ จำาเป็นต้องมีการจำากัดสิทธิของการเข้าถึงไฟล์ และไดเรกทอรี ในระบบไฟล์ของลีนุกซ์จะแบ่งกลุ่มของการเข้าถึงไฟล์ออกเป็น 3 กลุ่ม คือ 1. คนที่เป็นเจ้าของไฟล์ 2. คนที่อยู่ในกลุ่มเดียวกัน 3. คนที่ไม่ใช่เจ้าของไฟล์ และไม่ได้อยู่กลุ่มเดียวกัน เมื่อเราใช้คำาสั่ง ls -l ก็จะเห็นรายละเอียดของไฟล์และไดเรกทอรี drwxrxrx drwxrxrx rwrr
3 8 1
root root 4096 20060703 07:20 Desktop root root 4096 20060701 08:33 MyDownload root root 4529 20060703 17:09 test.php
ในแต่ละกลุ่มจะมีการกำาหนดสิทธิได้ 3 แบบ ตัวอักษร r มาจาก Read หมายถึง อ่าน ตัวอักษร w มาจาก Write หมายถึง เขียน ตัวอักษร x มาจาก Execute หมายถึง ประมวลผล สิทธิ
เมื่อใช้กบั ไฟล์
เมื่อใช้กบั ไดเร็คทอรี
read
ดูเนื้อหา
writer
เปลี่ยนแปลง และแก้ไขเนื้อหาในไฟล์ สร้างหรือลบไฟล์ในไดเร็คทอรี
execute
สั่ง execute (ประมวลผลได้)
ตัวอย่าง : ไม่มีสิทธิอะไรเลย (เลขที่ใช้คือ 0) x : ประมวลผลได้อย่างเดียว (เลขที่ใช้คือ 1) r : อ่านได้อย่างเดียว (เลขทีใ่ ช้คือ 4) rw : อ่าน และเขียนได้ (เลขทีใ่ ช้คือ 6) rx : อ่าน และประมวลผลได้ (เลขทีใ่ ช้คือ 5) rwx : อ่าน เขียน และประมวลผลได้ (เลขที่ใช้คือ 7)
ดูรายชื่อไฟล์ในไดเร็คทอรี เปลี่ยนไดเร็คทอรี, ค้นหา หรือสำาเนาจากไฟล์ในไดเร็คทอรีนั้น
26
รูปที่ 8-1 แสดงค่าของการกำาหนดสิทธิ ความหมายของ rwxrwxrwx จะห็นว่ามีอักษร 9 ตัว (ความจริง 10 ตัว) ตัวแรก ไม่นับเป็นตัวบอกชนิดของไฟล์ - หมายถึงไฟล์ d หมายถึง ไดเรกทอรี l หมายถึงลิงค์ไฟล์ (ภาษาวินไดว์ เรียกว่า shortcut) 3 ตัวแรกหมายถึง เจ้าของ 3 ตัวที่สองหมายถึง คนในกลุ่มเดียวกัน 3 ตัวที่สามหมายถึง คนอืน่ ที่ไม่ใช่เจ้าของและไม่ใช่คนในกลุ่มเดียวกัน ตัวอย่าง rwx : เจ้าของเท่านั้นที่มีสิทธิทุกอย่างคนในกลุ่มและคนอื่นไม่มีสิทธิ (เลขทีใ่ ช้คือ 700) rwxrwx : เจ้าของ และสมาชิกกลุ่มเดียวกันมีสิทธิทุกอย่างคนอื่นไม่มีสิทธิ (เลขที่ใช้คือ 770) rwrwrw : เจ้าของ และสมาชิกกลุ่มเดียวกันและคนอื่นอ่านและเขียนได้ (เลขที่ใช้คือ 666) rwxrxrx : เจ้าของทำาได้หมด ส่วนกลุ่มและคนอืน ่ อ่านและประมวลผลได้ (เลขที่ใช้คือ 755) rrr : ทุกคนอ่านได้อย่างเดียว (เลขทีใ่ ช้คือ 444)
คำาสั่งที่ใช้ในการเปลี่นสิทธิของไฟล์และไดเรกทอรี chmod เปลี่ยนโหมด chown เปลียนเจ้าของ chgrp เปลี่ยนกลุ่ม
27
ตัวอย่าง การใช้งานคำาสั่ง chmod root@sothorn:~# touch test.html root@sothorn:~# ls l test.html rwrr 1 root root 0 20060712 11:03 test.html root@sothorn:~# chmod 755 test.php root@sothorn:~# ls l test.html rwxrxrx 1 root root 0 20060712 11:03 test.html root@sothorn:~# chmod 666 test.html root@sothorn:~# ls l test.html rwrwrw 1 root root 0 20060712 11:03 test.html root@sothorn:~# ls l test.html rwrwrw 1 root root 0 20060712 11:03 test.html root@sothorn:~# chmod 700 test.html root@sothorn:~# ls l test.html rwx 1 root root 0 20060712 11:03 test.html root@sothorn:~#
ปัญหาที่เกิดขึ้นที่เราทำางานกับสิทธิที่ไม่ถูกต้อง เช่น ไบนารีไฟล์ จะไม่สามารถ execute ได้ root@sothorn:/usr/local/firefox# chmod 660 firefox root@sothorn:/usr/local/firefox# ./firefox bash: ./firefox: Permission denied root@sothorn:/usr/local/firefox# chmod 755 firefox root@sothorn:/usr/local/firefox# ./firefox
ไฟล์ .html ไม่สามารถ execute ได้ เมื่อเรียกผ่าน browser จะเกิด error ดังภาพ
รูปที่ 8-2 แสดงข้อความ error เมื่อ browser เรียกไฟล์ที่ไม่สามารถ execute ได้
28
ตัวอย่าง การใช้คำาสั่ง chown และ chgrp root@sothorn:~# ls l test.sql rwxrxrx 1 root root 0 20060712 11:03 test.sql root@sothorn:~# chgrp postgres test.sql root@sothorn:~# ls l test.sql rwxrxrx 1 root postgres 0 20060712 11:03 test.sql root@sothorn:~# chown postgres test.sql root@sothorn:~# ls l test.sql rwxrxrx 1 postgres postgres 0 20060712 11:03 test.sql root@sothorn:~# root@sothorn:~# ls l test.sql rwxrxrx 1 root root 0 20060712 11:03 test.sql root@sothorn:~# chown postgres test.sql root@sothorn:~# ls l test.sql rwxrxrx 1 postgres root 0 20060712 11:03 test.sql root@sothorn:~# chown root test.sql root@sothorn:~# ls l test.sql rwxrxrx 1 root root 0 20060712 11:03 test.sql root@sothorn:~# chown postgres.postgres test.sql root@sothorn:~# ls l test.sql rwxrxrx 1 postgres postgres 0 20060712 11:03 test.sql
คำาสั่งที่เกี่ยวข้องในบทนี้ chmod chgrp chown
บทที่ 10 การใช้งาน System Config ต่าง ๆ ลีนุกซ์ Red Hat มีเครื่องมือในการช่วยปรับแก้ config ต่างๆของระบบ เช่น การเปลี่ยน IP การปรับวันที่ เวลา ฯลฯ เราสามารถทดลองดูได้ว่ามีโปรแกรมอะไรบ้าง โดยการพิมพ์ system- แล้วกด Tab สองครั้งก็จะเห็นดังภาพ สำาหรับ Red Hat ใน เวอร์ชันตำ่ากว่า Enterprise 4 หรือ FC4 ก็จะขึ้นต้นด้วย redhat[root@training1 ~]# system systemcdinstallhelper systemconfigpackages systemconfigauthentication systemconfigprinter systemconfigdate systemconfigprintergui systemconfigdisplay systemconfigprintertui systemconfighttpd systemconfigrootpassword systemconfigkeyboard systemconfigsamba systemconfiglanguage systemconfigsecuritylevel systemconfiglvm systemconfigsecurityleveltui systemconfigmouse systemconfigservices systemconfignetwork systemconfigsoundcard systemconfignetworkcmd systemconfigtime systemconfignetworkdruid systemconfigusers systemconfignetworkgui systemcontrolnetwork systemconfignetworktui systeminstallpackages systemconfignfs systemlogviewer
โปรแกรมต่างๆ เหล่านี้จะอยู่ในเมนูอยู่แล้ว โปรแกรมจะช่วยเราทำางานใน Graphic Mode เท่านั้น
รูปที่ 10- 1 แสดงโปรแกรม System Settings
29
30
ติดตั้งโปรแกรม system-config ถ้าในขั้นตอนติดตั้งลีนุกซ์ไม่ได้เลือก Package Server Configuration Tools และ Administration Tools ก็ไม่สามารถใช้งานโปแกรม system-config ต่างๆได้
รูปที่ 10-2 การติดตั้งโปรแกรม Server Configuration Tools
รูปที่ 10-3 การติดตั้งโปรแกรม Administration Tools
31
system-config-network / neat ช่วยในการเปลี่ยน IP
รูปที่ 10-4 แสดงโปรแกรม system-config-network system-config-display ช่วยในการเปลี่ยนความละเอียดของหน้าจอ
รูปที่ 10-5 แสดงโปรแกรม system-config-display
32
ส่วนการทำางานใน Text Mode ให้ใช้คำาสั่ง setup
รูปที่ 10-6 รูปแสดงการใช้คำาสั่ง setup
รูปที่ 10-7 แสดงการใช้คำาสั่ง setup เลือกเมนู Network configuration
การเปลี่ยนแปลงค่า Network TCP/IP โดยการแก้ไฟล์คอนฟิก
33
ถ้าหากเราต้องการเปลี่ยน IP ของเครื่องโดยที่เราไม่ใช้เครื่องมือช่วยก็สามารถแก้ไฟล์ได้สะดวกเวลาที่เราทำางานบน Text Mode การเปลี่ยน IP Address ไดเรกทอรีที่เกี่ยวกับ Network ของ Red Hat อยู่ที่ /etc/sysconfig/networkscripts/ [root@training1 ~]# cd /etc/sysconfig/networkscripts/ [root@training1 networkscripts]# ls ifcfgeth0 ifdownipv6 ifup ifupisdn ifupsit ifcfglo ifdownisdn ifupaliases ifupplip ifupsl ifdown ifdownpost ifupippp ifupplusb ifupwireless ifdownaliases ifdownppp ifupipsec ifuppost init.ipv6global ifdownippp ifdownsit ifupipv6 ifupppp networkfunctions ifdownipsec ifdownsl ifupipx ifuproutes networkfunctionsipv6 [root@training1 networkscripts]#
ไฟล์ที่เราต้องแก้คือ ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static BROADCAST=192.168.1.255 HWADDR=00:10:B5:CC:98:36 IPADDR=192.168.1.5 NETMASK=255.255.255.0 NETWORK=192.168.1.0 ONBOOT=yes TYPE=Ethernet
ถ้าหากต้องการเปลี่ยน IP ก็สามารถทำาได้โดยการแก้ไขบรรทัด IPADDR หรือบรรทัดอื่นๆ ตามต้องการ แก้เสร็จให้ใช้คำาสั่ง service network restart หรือ /etc/init.d/network restart แค่นี้เปลี่ยน IP ได้แล้วครับ การเปลี่ยน Name เซิร์ฟเวอร์ Name เซิร์ฟเวอร์ สามารถเปลี่ยนได้ที่
/etc/resolv.conf
nameserver 203.155.33.1
หมายเลข IP ของเนมเซิร์ฟเวอร์สามารถเปลี่ยนได้ตาม ISP ที่ทา่ นใช้บริการอยู่
34
การแก้ปัญหากรณีที่ใช้ system-comfig-display แล้วยังเข้า X Window ไม่ได้ กรณีที่ติดตั้งลีนุกซ์ใช้งานอยู่แล้วเปลี่ยนจอทำาให้เข้า X Window ไม่ได้ ให้แก้ปัญหาโดยการบูทเข้า runlevel 3 แล้วใช้คำาสั่ง system-config-display แล้วปรับแก้ค่าต่างๆ แล้วพิมพ์คำาสั่ง startx เพื่อเข้าสู่ X Window ถ้าไม่สามารถเข้า X Window ได้ ก็ให้แก้ไขไฟล์ /etc/X11/xorg.conf ถ้าเป็นลีนุกซ์เวอร์ชันเก่า /etc/X11/XF86Config Section "Screen" Identifier "Screen0" Device "Videocard0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 16 Modes "800x600" "640x480" EndSubSection SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection
ลดขนาด Resolution ของ หน้าจอลงมาโดยการลบ "1024x768" ออก Section "Screen" Identifier "Screen0" Device "Videocard0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 16 Modes "800x600" "640x480" EndSubSection SubSection "Display" Viewport 0 0 Depth 24 Modes "800x600" "640x480" EndSubSection EndSection
หรือ ให้ปรับลดค่า
HorizSync VertRefresh ให้ลดลงจากเดิม
35
Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "LCD Panel 1024x768" HorizSync 31.5 48.5 VertRefresh 40.0 70.0 Option "dpms" EndSection
คำาสั่งที่เกี่ยวข้องในบทนี้ neat setup system-config-display system-config-network system-config-packages system-config-*
บทที่ 11 การ mount ไฟล์ system อื่นๆ
36
การใช้งานบนวินโดว์เวลาเราต้องการเอาอุปกรณ์บันทึกข้อมูลอื่นใส่เข้าไปวินโดว์ก็จะรู้จัก และแสดงไดรว์ให้เห็นและสามารถใช้งานได้เลย บนลีนุกซ์เวอร์ชันใหม่ๆ ก็มีความสามารถแบบนั้นแล้วเช่นกัน แต่ก็ควรรู้เอาไว้หากลีนุกซ์ไม่ทำางานให้อัตโนมัติจะ mount อย่างไร mount point หรือ ไดเรกทอรีทตี่ ้องการ mount mount point คือ ไดเรกทอรีที่ต้องการเอาไฟล์บนอุปกรณ์ที่จะเมาท์มาแสดง ไดเรกทอรีที่นิยมสำาหรับการ เมาท์ คือ /mnt เช่น /mnt/floppy , /mnt/cdrom, แต่ในปัจจุบันในลีนุกซ์เวอร์ชันใหม่ๆ จะนิยมเอา mount point ไปไว้ที่ /media เช่น /media/cdrom, /media/hda1 ชือ่ อุปกรณ์ที่จะ mount /dev/cdrom เป็น CD/DVD Drive /dev/fd0 เป็น Flopy Disk /dev/hda1 เป็น ฮาร์ดดิสก์ Primary Master IDE พาร์ติชนั ที่ 1 /dev/sda1 เป็น ฮาร์ดดิสก์ SCSI พาร์ติชนั ที่ 1 /dev/sda เป็น อุปกรณ์พวก Thumb drive USB ถ้าฮาร์ดดิสก์ เป็น /dev/sda อุปกรณ์พวกนี้ ก็จะเป็น /dev/hdb จะมีหมายเลขพาร์ติชันหรือไม่ขึ้นกับอุปกรณ์นั้นๆ ต้องลองเช่น บางอัน mount /dev/sda บางอันก็ mount /dev/sda1 การใช้คำาสั่ง mount mount options device | dir หรือ mount options device dir ตัวอย่าง mount -t vfat /dev/hda1 /mnt/hda1 mount /dev/fd0 /mnt/fd0 mount /dev/cdrom /mnt/cdrom mount /dev/sda /mnt/thumb mount /dev/cdrom mount /mnt/cdrom การ mount แบบย่อ mount options device | dir เช่น mount /mnt/cdrom การที่จะใช้คำาสั่งแบบนี้ได้ จะต้องมีข้อมูลของอุปกรณ์ หรือ พาร์ติชนั อยู่ในไฟล์ /etc/fstab ก่อน ก่อนที่จะ mount directory /mnt/fd0, /mnt/cdrom, /mnt/thumb จะเป็นไดเรกทอรีเปล่าๆ เมื่อ mount ได้สำาเร็จในไดเรกทอรีเหล่านั้นก็จะมีไฟล์ต่างที่อยู่ซึ่งเป็นไฟล์ในอุปกรณ์ที่ mount ขึ้นมานั่นเอง
37
ยกเลิกการเมาท์ เมื่อเมาท์ได้สำาเร็จ จะต้องยกเลิกการเมาท์ การยกเลิกการเมาท์ ใช้คำาสั่ง umount เช่น CD-ROM จะเอาแผ่น CD ออกไม่ได้ถ้าไม่ยกเลิกการเมาท์ หรืออาจทำาความเสียหายให้กับอุปกรณ์ประเภท USB ได้ การใช้งาน umount umount option dir | device ตัวอย่างการยกเลิกการเมาท์ด้วยคำาสั่ง umount umount /mnt/fd0 umount /mnt/cdrom umount /mn/thumb
คำาสั่งที่เกี่ยวข้องในบทนี้ mount umount
บทที่ 12 การใช้โปรแกรมบีบอัดไฟล์เพื่อ Backup ข้อมูล
คำาสั่ง tar (Tape Archiver) คำาสั่ง tar เป็นคำาสั่งที่ใช้สำารองไฟล์ลง Tape Backup แต่ยังใช้สำาหรับบีบอัดไฟล์หรือไดเรกทอรีให้มีขนาดเล็กลง ให้รวมเป็น .tar ไฟล์เดียว เมื่อระบุออปชัน -z ก็จะบีบอัดด้วยโปรแกรม gzip อีกครั้งหนึ่ง ซึ่งจะมีนามสกุล .tar.gz รูปแบบการใช้คำาสั่ง tar ออปชัน ชื่อไฟล์ที่บีบอัด ไฟล์หรือไดเรกทอรีที่ต้องการบีบอัด ออปชันของ tar c สร้าง archive ไฟล์ x กู้ข้อมูลจาก archive ไฟล์ v แสดงรายละเอียดของการ tar z บีบอัดด้วย gzip -f file กำาหนดชื่อของ archive ไฟล์ ซึ่งจะเป็นไฟล์ธรรมดา หรือไฟล์อุปกรณ์ก็ได้ ตัวอย่าง การบีบอัดไฟล์ด้วย tar และ gzip [root@training1 backup]# tar cvfz postgres_data.tar.gz /usr/local/pgsql/data /usr/local/pgsql/data/ /usr/local/pgsql/data/pg_ident.conf /usr/local/pgsql/data/postgresql.conf /usr/local/pgsql/data/pg_xlog/ ... [root@training1 backup]# ls postgres_data.tar.gz
ตัวอย่างการขยายไฟล์ [root@training1 ~]# tar xvfz postgresql8.0.7.tar.gz postgresql8.0.7/ postgresql8.0.7/doc/ postgresql8.0.7/doc/src/ postgresql8.0.7/doc/src/FAQ/ postgresql8.0.7/doc/src/FAQ/FAQ.html ... [root@training1 ~]# ls l drwxrwxrwx 6 70 70 4096 Feb 13 07:31 postgresql8.0.7
38
39
คำาสั่ง zip เป็นคำาสั่งที่ใช้บีบอัดไฟล์ไฟล์ที่บีบอัดบนลีนุกซ์ แล้วสามารถนำาไปขยายไฟล์ได้บนวินโดว์โดยใช้ winzip หรือ winrar คำาสั่ง zip มี ออปชันมากมายแต่จะไม่พูดถึงในที่นี้ ออปชัน -r zip รวมเอาไฟล์ที่อยู่ในไดเรกทอรีย่อยด้วย [root@training1 backup]# zip r postgres_backup.zip /usr/local/pgsql/data/ adding: usr/local/pgsql/data/ (stored 0%) adding: usr/local/pgsql/data/pg_ident.conf (deflated 54%) adding: usr/local/pgsql/data/postgresql.conf (deflated 65%) adding: usr/local/pgsql/data/pg_xlog/ (stored 0%) ... [root@training1 backup]# ls l rwrr 1 root root 2313921 Jul 18 12:19 postgres_backup.zip
ขยายไฟล์ด้วย unzip [root@training1 backup]# unzip postgres_backup.zip Archive: postgres_backup.zip creating: usr/local/pgsql/data/ inflating: usr/local/pgsql/data/pg_ident.conf inflating: usr/local/pgsql/data/postgresql.conf creating: usr/local/pgsql/data/pg_xlog/ ...
คำาสั่งที่เกี่ยวข้องในบทนี้ tar zip unzip ที่ยกตัวอย่างมายังกล่าวถึงรายละเอียดของแต่ละคำาสั่งยังไม่หมดหากต้องการดูวธิ ีการใช้งานเพิ่มเติม ใช้คำาสั่ง man tar man zip man unzip
40
บทที่ 13 คำาสั่งที่เกี่ยวข้องกับการดูแลเซิร์ฟเวอร์ การใช้งานเซิร์ฟเวอร์จะเกิดปัญหาขึ้นมาถ้าไม่เกิดจากการถูกแฮก ก็จะเกิดจากผู้ดูแลระบบเองไม่ใส่ใจดูแล เช่น ฮาร์ดดิสก์เต็ม ซึ่งจะสร้างปัญหาปวดหัวให้กับผู้ดูแลระบบมือใหม่พอสมควร เพราะฉะนัน้ ควรจะป้องกันเอาไว้ก่อนโดยใช้คำาสั่งเพื่อตรวจสอบอยู่บ่อยๆ คำาสั่ง df df เป็นคำาสั่งที่รายงานการใช้งานพื้นที่ฮาร์ดดิสก์ ซึ่งมีออปชันต่างๆ แต่ที่ใช้บ่อยคือ -h ซึ่งจะแสดงขนาดพื้นที่ที่เหลือและที่ใช้ไปแล้ว ออกมาเป็น K, M, G ซึ่งอ่านเข้าใจง่าย ตัวอย่าง [root@training1 ~]# df h Filesystem Size Used Avail Use% Mounted on /dev/hda2 7.7G 2.6G 4.8G 36% / /dev/hda5 9.7G 2.8G 6.4G 31% /backup /dev/hda1 99M 8.3M 86M 9% /boot /dev/hda6 4.9G 42M 4.6G 1% /home /dev/hda3 13G 4.4G 7.5G 38% /usr/local/pgsql
คำาสั่ง ps ps เป็นคำาสั่งที่ใช้ดูสถานะการทำางานของแต่ละโปรแกรมที่รนั อยู่ (Process) คำาสั่ง ps มีออปชันเยอะมาก แต่มี่ที่ใช้อยู่บ่อย คือ -e แสดงทุกโปรเซส -f แสดงแบบเต็มรูปแบบ ตัวอย่าง [root@training1 ~]# ps ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 02:30 ? 00:00:00 init [5] root 2 1 0 02:30 ? 00:00:00 [ksoftirqd/0] root 3 1 0 02:30 ? 00:00:00 [events/0] root 4 3 0 02:30 ? 00:00:00 [khelper] ...
คอลัมน์ซ้ายสุดจะเป็นเจ้าของโปเซส ถัดมาเป็นหมายเลขโปรเซส คอลัมน์ขวาสุดจะเป็นคำาสั่งที่ทำางานอยู่ กรณีที่ต้องการดูเฉพาะโปรเซสที่ต้องการก็สามารใช้ | grep ร่วมด้วย
41 [root@training1 ~]# ps ef |grep postgres postgres 17952 1 0 10:13 ? 00:00:00 /usr/local/pgsql/bin/postmaster D /usr/local/pgsql/data postgres 17954 17952 0 10:13 ? 00:00:00 postgres: writer process postgres 17955 17952 0 10:13 ? 00:00:00 postgres: stats buffer process postgres 17956 17955 0 10:13 ? 00:00:00 postgres: stats collector process
คำาสั่ง kill ใช้สำาหรับหยุดการทำางานของโปรเซส หรือพูดได้วา่ ฆ่าโปรเซสทิ้ง ในการใช้คำาสั่ง kill ตามด้วยหมายเลข โปรเซส (PID) เช่น [root@training1 ~]# kill 17952
คำาสั่ง top เป็นการดูโปรเซสโดยรวมของเครื่องแบบ real time ซึ่งจะ refresh ตามเวลาที่กำาหนด การใช้คำาสั่ง top -d 1 ให้ refresh ทุก 1 วินาที . top 14:49:32 up 12:19, 4 users, load average: 0.00, 0.00, 0.00 Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.3% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 515108k total, 422216k used, 92892k free, 23012k buffers Swap: 2112508k total, 160k used, 2112348k free, 253544k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 16 0 3156 560 480 S 0.0 0.1 0:00.72 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root 5 10 0 0 0 S 0.0 0.0 0:00.00 events/0 4 root 6 10 0 0 0 S 0.0 0.0 0:00.00 khelper 5 root 15 10 0 0 0 S 0.0 0.0 0:00.00 kacpid 20 root 5 10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0 30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush 31 root 15 0 0 0 0 S 0.0 0.0 0:00.28 pdflush 33 root 11 10 0 0 0 S 0.0 0.0 0:00.00 aio/0 21 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd 32 root 16 0 0 0 0 S 0.0 0.0 0:00.77 kswapd0 107 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod 186 root 15 0 0 0 0 S 0.0 0.0 0:00.20 kjournald 1047 root 6 10 2124 448 376 S 0.0 0.1 0:00.01 udevd 1644 root 16 0 0 0 0 S 0.0 0.0 0:00.02 kjournald 1645 root 19 0 0 0 0 S 0.0 0.0 0:00.00 kjournald
คำาสั่งในบทนี้ df ps
42
kill top
บทที่ 14 การติดตั้ง JAVA บนลีนุกซ์ตระกูล Red Hat ดาวน์โหลด j2sdk เวอร์ชัน 1.4.2_05 จาก http://java.sun.com หรือ http://java.sun.com/j2se/1.4.2/download.html ไฟล์ที่ได้มา ชื่อไฟล์ j2sdk-1_4_2_05-linux-i586.rpm.bin หากไฟล์ที่ดาวน์โหลดมายังไม่เป็น mode execute ให้ใช้คำาสั่ง [root@localhost root]# chmod 755 j2sdk-1_4_2_05-linux-i586.rpm.bin [root@localhost root]# ./j2sdk-1_4_2_05-linux-i586.rpm.bin จะได้ไฟล์ j2sdk-1_4_2_02-linux-i586.rpm [root@localhost root]# rpm -Uvh j2sdk-1_4_2_05-linux-i586.rpm.rpm #เพื่อติดตั้ง Preparing... ########################################### [100%] 1:j2sdk ########################################### [100%] [root@localhost root]# เมื่อติดตั้งเสร็จไฟล์จะไปเก็บอยู่ที่ /usr/java/j2sdk1.4.2_05 แก้ไขไฟล์ /ete/profile [root@localhost root]# vi /etc/profile บรรทัดล่างสุด export JAVA_HOME=/usr/java/j2sdk1.4.2_05 export PATH=${PATH}:/usr/java/j2sdk1.4.2_05/bin Save ไฟล์ แล้วใช้คำาสั่ง [root@localhost root]# source /etc/profile #เพื่อให้ใช้งานได้โดยไม่ต้อง reboot เครื่อง ทดสอบ [root@localhost root]# echo $JAVA_HOME /usr/java/j2sdk1.4.2_05
43
[root@localhost root]# java Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) ... ถ้าได้ผลแบบบนี้แสดงว่าติดตั้ง JAVA เรียบร้อยแล้ว
บทที่ 15 ขัน้ ตอนการติดตั้ง PostgreSQL 8.x บนลีนุกซ์ตระกูล Red Hat ด้วยการ Compile Source Code ตรวจสอบดูว่า Package postgresql ที่มากับ Linux Distribution ได้ถูกติดตั้งไปแล้วหรือไม่ โดยใช้คำาสั่ง # rpm -ql postgresql ผล package postgresql is not installed # rpm -ql postgresql-server ผล package postgresql-server is not installed ถ้า Package postgresql ได้ถูกติดตั้งไว้ก่อนแล้ว ให้ใช้คำาสั่งด้านล่างนี้เพื่อลบ package ออก # rpm -e postgresql-server # rpm -e postgresql สิ่งจำาเป็น 1. RedHat 9.0 หรือ Linux ตระกูล Red Hat ที่ติดตั้ง Package ชุด Development Tools หากใครที่ยังไม่ติดตั้ง ก็สามารถติดตั้งด้วย คำาสั่งเหล่านี้ บนกราฟิกโหมด Red Hat 9 ใช้คำาสั่ง # redhat-config-packages Fedora Core 4 / Red Hat Enterprise ใช้คำาสั่ง # system-config-packages
44
จะได้ดังรูป ถ้า Development Tools ยังไม่ได้เลือก ก็ให้เลือกแล้วกดปุ่ม Update โปรแกรมจะถามหาแผ่นติดตั้งลีนุกซ์เอง 2. Source code ของ PostgreSQL ดาวน์โหลดจาก http://www.postgres.org ชื่อไฟล์ postgresql-8.0.7.tar.gz ขั้นตอนการ compile และติดตัง้ 1. นำาไฟล์ที่ดาวน์โหลดมา สมมติ ว่ามาเก็บไว้ที่ /root ขยายไฟล์ออกมาโดยใช้คำาสั่ง 2. [root@localhost root]# tar xvfz postgresql-8.0.7.tar.gz จะได้ directory postgresql-8.0.7 ใช้คำาสั่ง 3. [root@localhost root]# cd postgresql-8.0.7 [root@localhost postgresql-8.0.7]# 4. [root@localhost postgresql-8.0.7]# ./configure --prefix=/usr/local/pgsql เป็นการ Config เพื่อ บอก directory ที่จะติดตั้ง ให้ไปติดตั้งโปรแกรมที่ /usr/local/pgsql 5. [root@localhost postgresql-8.0.7]# gmake คำาสั่ง gmake เพื่อ compile 6. [root@localhost postgresql-8.0.7]# gmake install คำาสั่ง gmake install เพื่อติดตั้งไปไว้ที่เรากำาหนดใน prefix คือ /usr/local/pgsql 7. [root@localhost postgresql-8.0.7]# useradd postgres เพิ่มผู้ใช้งานที่ ชื่อ postgres 8. [root@localhost postgresql-8.0.7]# cd /usr/local/pgsql เข้าไปทำางานที่ /usr/local/pgsql 9. [root@localhost pgsql]# mkdir data
45
สร้าง directory data เพื่อเป็นที่เก็บข้อมูล และไฟล์ Config 10. [root@localhost pgsql]# chown postgres:postgres data เปลี่ยน เจ้าของและกลุ่ม ของ directory data เป็น postgres 11. [root@localhost pgsql]# su - postgres เปลี่ยนการทำางานจาก user root เป็น user postgres 12. [postgres@localhost postgres]$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data สร้าง database ตั้งต้น ถึงตอนนี้ PostgreSQL พร้อมที่ Start แล้ว หากต้องการ Start Server ก็ทำาได้ โดยใช้คำาสั่ง [postgres@sothorn postgres]$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data & แต่มีวิธีการ Start Service ที่ดีกว่านี้ อ่านต่อครับ
วิธีการเพิ่ม PostgreSQL ให้เป็น Service ของ Red Hat และทำางาน ตอนบูท ทำางานด้วย user root นะครับ 1. [root@localhost init.d]# cd /root/postgresql-8.0.7/contrib/start-scripts 2. [root@localhost start-scripts]# ls freebsd linux PostgreSQL.darwin StartupParameters.plist.darwin จะมีไฟล์ ชื่อ linux เป็น startup ไฟล์ ของ PostgreSQL 3. [root@localhost start-scripts]# cp linux /etc/init.d/postgresql copy ไฟล์ linux ไปไว้ที่ /etc/init.d พร้อมเปลี่ยนชื่อเป็น postgresql 4. [root@localhost start-scripts]# chmod 755 /etc/init.d/postgresql เปลี่ยนให้เป็น mode ที่ execute ได้ 5. [root@localhost start-scripts]# service postgresql start Starting PostgreSQL: ok [root@localhost start-scripts]# chkconfig --add postgresql เพิ่ม PostgreSQL เข้าไปในระบบการ Start ตอนบูท [root@localhost start-scripts]# chkconfig postgresql on ให้ PostgreSQL Start Service ตอนที่บูทเครื่อง
46
ตอนนี้ก็สามารถ start stop restart service ของ PostgreSQL ก็สามารถใช้คำาสั่ง # service postgresql start # service postgresql stop # service postgresql restart เรียบร้อยแล้วครับ พร้อมแล้วที่จะใช้งาน PostgreSQL 8.0.7 บนเครื่อง localhost แต่ยังไม่พร้อมที่จะให้เครื่องลูกข่ายติดต่อเข้ามา
การอนุญาตให้เครื่องลูกข่ายเข้ามาใช้งานผ่านทางโปรโตคอล TCP/IP 1. แก้ไฟล์ /usr/local/pgsql/data/pg_hba.conf pg_hba.conf เป็นไฟล์ที่อนุญาตให้เครื่องลูกข่ายเข้ามาใช้งานได้ # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 192.168.1.0/24 password 192.168.1.0/24 หมายความว่า อนุญาตให้เครื่องลูกข่ายที่มี IP 192.168.1.1-192.168.1.254 เข้ามาใช้งานได้ ทั้งนีข้ ึ้นอยู่กับ วง IP ที่ทา่ นใช้งานอยู่ แก้ไฟล์แล้วบันทึกไฟล์ 2. แก้ไฟล์ /usr/local/pgsql/data/postgresql.conf เป็นไฟล์คอนฟิกของ PostgreSQL ซึ่งรายละเอียดเยอะมาก แต่ในทีน่ ี้เราจะแก้คอนฟิกให้ PostgreSQL สามารถให้บริการผ่านทางโปรโตคอล TCP/IP ได้
47
# - Connection Settings เดิม #listen_addresses = 'localhost' # what IP interface(s) to listen on; # defaults to localhost, '*' = any เปลี่ยนเป็น listen_addresses = '*' # what IP interface(s) to listen on; # defaults to localhost, '*' = any เสร็จแล้วใช้คำาสั่ง service postgresql retstart เพื่อให้ PostgreSQL อ่านค่าคอนฟิกใหม่
3. เปลี่ยน password ให้กับ user postgres เพื่อเข้าใช้งานฐานข้อมูล [root@localhost root] su – postgres [postgres@localhost postgres]$ /usr/local/pgsql/bin/psql template1 Welcome to psql 8.0.7, the PostgreSQL interactive terminal. Type: copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit template1=# ALTER USER postgres with password 'password_here'; ALTER USER template1=# \q [postgres@sothorn postgres]$ PATH PostgreSQL
48
การที่เราจะใช้คำาสั่งของ PostgreSQL ทีอยู่ใน /usr/local/pgsql/bin เราต้องป้อน PATH เต็มเช่น /usr/local/pgsql/bin/psql เพราะเรายังไม่ set PATH ให้กับระบบ ถ้าเรา set PATH แล้ว เราจะสามารถใช้คำาสั่งของ PostgreSQL ได้เลย เช่น แทนที่จะพิมพ์ /usr/local/pgsql/bin/psql ก็พิมพ์แค่ psql การ Set PATH ให้ PostgreSQL ทำาได้ได้โดยแก้ไฟล์ /etc/profile แล้วเพิ่มบรรทัดนี้ลงไปที่บรรทัดสุดท้าย export PATH=${PATH}:/usr/local/pgsql/bin บันทึกไฟล์แล้ว ใช้คำาสั่ง source /etc/profile เพื่อให้ PATH สามารถใช้งานได้เลยโดยไม่ต้องรีบูทเครื่อง
บทที่ 16 การควบคุมเซิร์ฟเวอร์ลีนุกซ์จากระยะไกลด้วย SSH และส่งไฟล์ ด้วย SFTP การใช้งานเซิร์ฟเวอร์โดยปกติแล้วเราอาจจะไม่ได้นั่งอยู่หน้าจอของเซิร์ฟเวอร์ตลอดเวลา เราสามารถ รีโมทเข้ามาทำางานได้ เมื่อก่อนเราสามารถรีโมทเข้ามาทำางานด้วยโปรแกรม telnet แต่ telnet มีข้อด้อยในการรักษา ความปลอดภัยในการส่งข้อมูลระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ เพราะไม่มีการเข้ารหัส ข้อมูลระหว่างการส่งข้อมูล ในปัจจุบันได้เปลี่ยนมาใช้ Secure Shell (SSH) Secure Shell (SSH) โปรโตคอลในการสร้างการติดต่อเพื่อเข้าใช้งานระบบอย่างปลอดภัย โดยที่โปรโตคอลดังกล่าวจะทำาการเข้า รหัสข้อมูลทุกอย่างไม่ว่าจะเป็น ชือ่ ผู้ใช้ รหัสผ่าน หรือข้อมูลอื่นๆ ก่อนที่จะทำาการส่งไปยังเครื่องเซิร์ฟเวอร์ โดย ปกตินิยมนำา SSH มาใช้งานแทน telnet เพราะมีความปลอดภัยมากกว่า Secure File Transfer Protocol (SFTP) เป็นโปรโตคอลที่นำามาใช้แทน FTP โดยจะเป็นส่วนหนึ่งของ SSH ซึ่งจะมี sftpserv เป็นโปรแกรมที่รันอยู่ที่ฝั่งเซิร์ฟเวอร์ รอรับการติดต่อจากไคลเอ็นต์ผ่านทางคำาสั่ง sftp บนระบบปฏิบัติการ linux และในระบบปฏิบัติการ Windows ก็มีโปรแกรมที่จะใช้สำาหรับติดต่อและโอนถ่ายข้อมูลกับเซิร์ฟเวอร์ผ่าน SSH ด้วย
49
เช่น winscp และ SSH Secure File Transfer Client เป็นต้น การใช้งาน ssh และ sftp บนลีนุกซ์ตระกูล Red Hat หลังจากติดตั้งเสร็จสามารถใช้งานได้เลยถ้าไม่ได้ติดตั้ง Firewall การใช้งาน ssh บนลีนุกซ์ ssh [1246AaCfgkMNnqsTtVvXxY] [b bind_address] [c cipher_spec] port] [e escape_char] [F configfile] [i identity_file] [L [bind_address:]port:host:hostport] [l login_name] [m mac_spec [O ctl_cmd] [o option] [p port] [R[bind_address:]port:host:hostport] [S ctl_path] [user@]hostname[command]
[D
ตัวอย่างการใช้งาน ssh root@sothorn:~# ssh l root 192.168.1.5
[email protected]'s password: Last login: Sat Jul 22 08:36:58 2006 [root@training1 ~]# exit Connection to 192.168.1.5 closed. root@sothorn:~# ssh l root 192.168.1.5 shutdown h now
[email protected]'s password: root@sothorn:~#
การใช้งาน ssh จากโปรแกรมบนวินโดว์ การทำางานอยู่บนวินโดว์ก็สามารรีโมทเข้ามาทำางานที่ลีนุกซ์ได้ แต่ต้องติดตั้งโปรแกรม SSH Client ก่อน เช่น Putty SSH Secure Shell Client ตัวอย่าง โปรแกรม Putty
50
รูปที่ 16-1 แสดงโปแกรม Putty ตัวอย่างโปแกรม SSH Secure Shell Client
รูปที่ 16-2 แสดงโปรแกรม SSH Secure Shell Client
การใช้งาน sftp sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config] [-o ssh_option] [-P sftp_server_path] [-R num_requests] [-S program] [-s subsystem | sftp_server] host ftp [[user@]host[:file [file]]] sftp [[user@]host[:dir[/]]] sftp -b batchfile [user@]host ตัวอย่างการใช้งาน sftp
51
เอาไฟล์จากเครื่องที่เราทำางานอยู่ไปไว้ที่ server root@sothorn:~# sftp
[email protected] Connecting to 192.168.1.5...
[email protected]'s password: sftp> put postgresql8.0.7.tar.gz Uploading postgresql8.0.7.tar.gz to /root/postgresql8.0.7.tar.gz postgresql8.0.7.tar.gz 100% 13MB 6.7MB/s 00:02 sftp>
เอาไฟล์จาก Server มาไว้ที่เครื่องทำางาน sftp>ls dovecot0.99.112.EL4.1.i386.rpm postgresql8.0.7.tar.gz sftp> get dovecot0.99.112.EL4.1.i386.rpm Fetching /root/dovecot0.99.112.EL4.1.i386.rpm to dovecot 0.99.112.EL4.1.i386.rpm /root/dovecot0.99.112.EL4.1.i386.rpm 100% 601KB 600.7KB/s 00:01 sftp>
การใช้งาน sftp จากวินโดว์ บนวินโดว์เราสามารถส่งไฟล์ขนึ้ ไปบนลีนุกซ์ หรือนำาไฟล์จากลีนุกซ์ลงมาทีว่ ินโดว์ โดยการติดตั้ง sftp client ซึ่งมีอยู่หลายโปรแกรม เช่น WinSCP, SSH Secure File transfer Client
ตัวอย่างโปแกรม WinSCP
52
รูปที่ 16-3 แสดงโปรแกรม winscp โปแกรม SSH Secure File transfer Client
รูปที่ 16-4 แสดงโปแกรม SSH Secure File transfer Client SFTP แบบกราฟิกบนลีนุกซ์
53
บนลีนุกซ์ก็มีโปรแกรมสำาหรับ sftp ได้แก่โปรแกรม gftp
รูปที่ 16-5 แสดงโปรแกรม gftp ที่กล่าวมาทั้งหมดในบทนี้คงช่วยให้ท่านสามารถทำางานกับลีนุกซ์ได้สะดวกยิ่งขึน้ คำาสั่งที่เกี่ยวข้อง ssh sftp
บทที่ 17
crontab
54
crontab เป็นโปแกรมตั้งเวลาทำางานบนลีนุกซ์โดยให้ลีนุกซ์ทำางานทุกๆ เวลาที่กำาหนด เช่น ทุกนาที, ทุกครึ่งชัว่ โมง, ทุกชั่วโมง, ทุกเที่ยงคืนของวันอาทิตย์, ทุกวันที่ 1 มกราคมของทุกปี การทำางานของ crontab โปรแกรมจะมีการเปิด service ของ crontab อยู่แล้ว เราเพียงเรียกใช้งานโปแกรม แล้วระบุช่วงเวลา และคำาสั่งที่ต้องการให้ทำางาน เมื่อเราเรียกโปแกรม crontab มาใช้งานโปแกรมก็จะเรียกโปแกรม Text Editor ขึน้ มาทำางานส่วนใหญ่แล้วบนลีนุกซ์ Red Hat จะเป็นโปแกรม Vi ส่วน Debian และ Ubuntu จะเป็นโปรแกรม mc การใช้งานโปแกรม crontab crontab [u user] file crontab [u user] { e | l | r } e แก้ไข หรือเพิ่ม crontab ของ user l แสดง crontab ของ user r ลบ crontab ของ user
การทำางานของ crontab จะผูกติดอยู่กับแต่ละ user เรา Login เข้ามาทำางานด้วย user ใดถ้าเรียกคำาสั่งโดยไม่ระบุออปชัน -u ก็จะเป็น crontab ของ user ที่ Login เข้ามา รูปแบบของคำาสั่งตั้งเวลาให้คำาสั่งต่างๆ ทำางาน หลังจากทีเรียกโปแกรม crontab แล้วจะเปิดโปแกรม Text Editor เราจะต้องระบุช่วงเวลา และคำาสั่ง โดยมีรูปแบบดังนี้ นาที ชัว่ โมง วันที่ เดือน วันในสัปดาห์ คำาสั่งที่ต้องการให้ทำางาน นาที แทนด้วย 0-59 ชั่วโมง แทนด้วย 0-23 โดยที่ 0=เที่ยงคืน วันที่ แทนด้วย 1-31 เดือน แทนด้วย 1-12 วันในสัปดาห์ แทนด้วย 0-6 โดยที่ 0=วันอาทิตย์ ตัวอย่าง * * * * * คำาสั่ง ทำาทุกๆ นาที */30 * * * * คำาสั่ง ทำาทุกๆ 30 นาที * 20 * * * คำาสั่ง ทำาทุกๆนาทีโดยเริ่มตั้งแต่ 20.00-20.59 น. 5 0 * * * คำาสั่ง ทำาทุกๆวันเวลา 00.05 น. 0 0 * * 0 คำาสั่ง ทำาทุกวันอาทิตย์ตอนเที่ยงคืน */10 8-17 * * * คำาสั่ง ทำาทุก 10 นาที เวลา 08.00-17.00 น.
ตัวอย่างการใช้งานจริง
55
00*** 00**0 0011*
/sbin/shutdow -r now /usr/local/pgsql/util/backup/sunday.sh /usr/lcoal/hospitalOS/reset_sequence.sh
คำาสั่งที่เรียกใช้งานเป็นได้ทั้งคำาสั่งที่มีอยู่บนลีนุกซ์ และ shell script ที่เราเขียนขึ้นมาเอง เช่น จากตัวอย่างข้างต้น shutdown -r now เป็นคำาสั่งบนลีนุกซ์ sunday.sh และ reset_sequence.sh เป็น shell script ที่เขียนขึ้นเอง ตัวอย่างรายงานข้อผิดพลาดกรณีที่เราระบุช่วงเวลาไม่ถูกต้อง [root@training1 ~]# crontab e crontab: installing new crontab "/tmp/crontab.XXXXgIneQA":1: bad minute errors in crontab file, can't install. Do you want to retry the same edit?
ตัวอย่างติดตั้ง crontab เรียบร้อย [root@training1 ~]# crontab e crontab: installing new crontab [root@training1 ~]#
บทที่ 18
56
การเพิ่มพาร์ตชิ ันหรือเพิ่มฮาร์ดดิสก์ กรณีที่มีพื้นที่ฮาร์ดดิสก์เหลือ หรือต้องการเพิ่มฮาร์ดดิสก์บนวินโดว์เราสามารถเอาฮาร์ดดิสก์มาเสียบแล้ว Format ก็สามารถใช้งานได้เลยซึ่งมี Drive เป็น Drive ถัดไป แต่บนลีนุกซ์นั้นไม่เป็นอย่างนั้นมีหลายขั้นตอน หลายคำาสั่ง เรามาเรียนรู้กัน การใช้งาน fdisk fdisk เป็นโปรแกรมที่ใช้สำาหรับจัดการพาร์ติชันของฮาร์ดดิสก์ fdisk [-u] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device fdisk -l [-u] [device ...] fdisk -s partition ... fdisk -v กรณีที่เราติดตั้งลีนุกซ์แล้วยังมีพื้นที่เหลือแล้วต้องการนำาพื้นที่ที่เหลือมาใช้ประโยชน์เราสามารถ ตรวจสอบดูได้ว่าฮาร์ดดิสก์เรามีพื้นที่เหลือหรือไม่ [root@fdisk ~]# fdisk l Disk /dev/hda: 40.0 GB, 40020664320 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 1288 10241437+ 83 Linux /dev/hda3 1289 1353 522112+ 82 Linux swap [root@fdisk ~]#
หลังจากที่ใช้คำาสั่ง fdisk -l จะเห็นว่าฮาร์ดดิสก์ขนาด 40.0 GB มี 4865 cylinder ตอนนี้ใช้ไป 1353 cylinder ถ้าหากเราต้องการจัดการพาร์ติชันของฮาร์ดดิสก์ /dev/hda เราก็สามารถใช้คำาสั่ง fdisk /dev/hda หลังจากนั้นก็จะเข้าสู่การใช้งานโปรแกรม fdisk ถ้าเราใช้คำาสั่ง m ให้โปแกรม fdisk แสดงคำาสั่งทั้งหมดออกมา
57
[root@fdisk ~]# fdisk /dev/hda The number of cylinders for this disk is set to 4865. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help):
ต้องการสร้างพาร์ติชันใหม่ Command (m for help): n Command action e extended p primary partition (14) e Selected partition 4 First cylinder (13544865, default 1354): Using default value 1354 Last cylinder or +size or +sizeM or +sizeK (13544865, default 4865): Using default value 4865
ในการสร้างพาร์ติชันใหม่ให้ใช้คำาสั่ง n เนื่องจาก พาร์ติชันเดิมที่มีอยู่ 3 พาร์ติชันนั้น เป็น Primary พาร์ติชนั ทั้งหมด ถ้าพาร์ติชันที่เพิ่มมาใหม่เป็น Primary อีก ก็ไม่สามารถที่จะเพิ่มพาร์ติชันได้อีก เพราะฉะนัน้ เราต้องเอาพื้นที่ที่เหลือทั้งหมดเป็น Extended โดยการตอบ e เดิมมีอยู่แล้ว 3 พาร์ติชันก็ให้พาร์ติชันต่อมาเป็นพาร์ติชันที่ 4 First cylinder ให้ Enter ผ่าน หรือใส่ 1354 ตามค่า default ก็ได้ เพราะเราต้องการพาร์ติชันต่อจากพาร์ติชันเดิมอยู่แล้ว Last cylinder or +size ก็ให้ Enter ผ่านเช่นกัน เพราะต้องการใช้พนื้ ที่ที่เหลือทั้งหมดเป็น Extended ให้ใช้คำาสั่ง p เพื่อ print รายละเอียดของการพาร์ติชันออกมาดู
58
Command (m for help): p Disk /dev/hda: 40.0 GB, 40020664320 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 1288 10241437+ 83 Linux /dev/hda3 1289 1353 522112+ 82 Linux swap /dev/hda4 1354 4865 28210140 5 Extended Command (m for help):
เราจะเห็นได้ว่าพาร์ติชันที่ 5 เป็น Extended พาร์ติชันเริ่มที่ cylinder 1354 จบที่ 4865 ถือว่าได้ใช้พื้นที่ของฮาร์ดดิสก์หมดแล้ว ในการเพิ่มพาร์ติชันถัดไป ก็จะเป็นการแบ่งย่อย Extended ออกมา Command (m for help): n First cylinder (13544865, default 1354): Using default value 1354 Last cylinder or +size or +sizeM or +sizeK (13544865, default 4865): +10000M Command (m for help): p Disk /dev/hda: 40.0 GB, 40020664320 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 1288 10241437+ 83 Linux /dev/hda3 1289 1353 522112+ 82 Linux swap /dev/hda4 1354 4865 28210140 5 Extended /dev/hda5 1354 1476 987966 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to reread partition table. WARNING: Rereading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
การเพิ่มพาร์ติชันใหม่ให้ใช้คำาสั่ง n แล้ว เมือ่ ถาม First cylinder ให้ Enter ผ่านเพื่อใช้ค่า default Last cylinder or +size or +sizeM or +sizeK ให้ตอบขนาดพาร์ติชันที่ต้องการ เช่น +10000M เพื่อให้พาร์ติชันนี้มีขนาด 10 GB ให้ใช้คำาสั่ง p เพื่อให้แสดงรายละเอียดของพาร์ติชัน หลังจากนั้นให้ใช้คำาสั่ง w (write) สิ่งที่ได้กระทำาไปลงฮาร์ดดิสก์ หลังจากใช้คำาสั่ง w แล้วจะออกจากการใช้งานโปรแกรม fdisk ให้ทดลองใช้คำาสั่ง fdisk -l
59
[root@fdisk ~]# fdisk l Disk /dev/hda: 40.0 GB, 40020664320 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 1288 10241437+ 83 Linux /dev/hda3 1289 1353 522112+ 82 Linux swap /dev/hda4 1354 4865 28210140 5 Extended /dev/hda5 1354 2570 9775521 83 Linux
จะเห็นว่าพาร์ติชันที่สร้างมาใหม่มี ID 83 มี ไฟล์ System เป็น Linux เป็นค่าปกติหากต้องการ File system เป็นอย่างอื่นได้ โดยใช้คำาสั่ง l (แอล) เพื่อดูรหัสของ File system แล้วใช้คำาสั่ง t เพื่อเปลี่ยน File system Command (m for help): l 0 Empty 1c Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid 1 FAT12 1e Hidden W95 FAT1 75 PC/IX be Solaris boot 2 XENIX root 24 NEC DOS 80 Old Minix c1 DRDOS/sec (FAT 3 XENIX usr 39 Plan 9 81 Minix / old Lin c4 DRDOS/sec (FAT 4 FAT16 &1;done|less cannot touch `file42': Disk quota exceeded file43touch: cannot touch `file43': Disk quota exceeded file44touch: cannot touch `file44': Disk quota exceeded file45touch: cannot touch `file45': Disk quota exceeded file46touch: cannot touch `file46': Disk quota exceeded file47touch: cannot touch `file47': Disk quota exceeded file48touch: cannot touch `file48': Disk quota exceeded file49touch: cannot touch `file49': Disk quota exceeded file50touch: cannot touch `file50': Disk quota exceeded
ทดลองสร้างไฟล์ จำานวน 50 ไฟล์
66
[sothorn@banban ~]$ ls file1 file12 file15 file18 file20 file23 file26 file29 file31 file34 file37 file4 file5 file8 file10 file13 file16 file19 file21 file24 file27 file3 file32 file35 file38 file40 file6 file9 file11 file14 file17 file2 file22 file25 file28 file30 file33 file36 file39 file41 file7 [sothorn@banban ~]$ quota Disk quotas for user sothorn (uid 501): Filesystem blocks quota limit grace files quota limit grace /dev/hda3 36 0 0 50* 40 50 [sothorn@banban ~]$
จะเห็นว่าเราสามารถสร้างได้แค่ 41 ไฟล์ รวมกับของเดิมที่มีอยู่แล้ว (ไฟล์ซ่อน 9 ไฟล์) เป็น 50 ไฟล์ ถ้าเรามี user จำานวนมากแล้วต้องมานั่ง set โควต้าให้กับทุกคนคงยุ่งยากพอสมควร เราสามารถการ copy โควต้าจาก User หนึ่งไปยังอีก user หนึ่ง ได้ถ้าการจำากัดจำานวนโควต้าที่เท่ากัน edquota -p a b c d e f ... # ทดลองด้วย copy โควต้า ของ User a ไปยัง user b c d e f Grace Period คือ เวลาที่เราใช้พื้นที่ มาถึง soft limit แต่ไม่ถึง hard limit มาเป็นเวลาครบตามกำาหนดโดยที่ soft limit ก็จะกลายเป็น hard limit จนกว่าเราจะลบไฟล์ออก ค่าของ graceperiod ถ้าเราไม่กำาหนดค่า grace period จะมีคา่ 7 วัน ค่าของ grace period มีคา่ เป็น months, weeks, days, hours, minutes และ seconds คำาสั่งที่ใช้เปลี่ยนแปลงค่า grace period คือ edquota -t ### ค้าง Group Quota ทำาดีหรือไม่
67
บทที่ 20
DNS (Domain Name System) ระบบชื่อโดเมน การกำาหนดชื่อโดเมนให้เครื่องคอมพิวเตอร์แทนการใช้หมายเลข IP (IP Address) ให้จำาง่ายในการอ้างอิงถึงคอมพิวเตอร์ที่เชื่อมต่อกับเครือข่ายอินเทอร์เน็ต เช่น หมายเลข IP 203.155.110.38 แทนด้วยโดเมนชื่อ linuxsiam.com ซึ่งจะมี DNS Server เป็นตัวให้บริการชื่อโดเมนซึ่งจัดเก็บฐานข้อมูลชื่อโดเมน และหมายเลขไอพี โดยที่ DNS Server มีโปรแกรม ที่มีหน้าที่แปลงชื่อโดเมนเป็นหมายเลข IP และแปลงหมายเลข IP เป็นโดเมน เพื่อตอบคำาถามให้กับเครื่องลูกข่ายที่ถามเข้ามา ตัว DNS Server แต่ละตัวไม่ได้มีข้อมูลครบทั้งหมด หากลูกข่ายถามมาแล้วไม่เจอโดเมนนั้นๆ ตัว DNS Server ก็จะถาม DNS Server ในระดับสูงขึน้ ไป โดเมน กลุ่มของคอมพิวเตอร์บนเครือข่ายอินเทอร์เน็ตแบ่งเป็นระดับโดยมีเครื่องหมาย . เป็นตัวคั่น เช่น univercity.ac.th โดยที่ .th เป็นโดเมนสูงสุด ในการจดชื่อโดเมนสามารถทำาได้โดยเข้าไปที่เวบโฮสติ้งต่างๆ ที่รับจดชื่อและเช่าพืน้ ที่ เช่น www.keepdomain.com เมื่อเรากรอกข้อมูลในขั้นตอนกรอก DNS Servr เราต้องทราบก่อนว่าเราจะใช้พื้นที่ที่ไหนทำาเวบที่ที่ให้เราเช่าพื้นที่ทำาเวบเขาก็จะมี DNS Server ให้อยู่แล้ว เช่น ของ KSC ns.ksc.co.th. 203.155.33.1 ns2.ksc.co.th. 202.44.144.33 หรือจะเช่าพื้นที่กับ Hosting ที่รับจดโดเมนเนมเลยก็ได้ หรือจดชื่อแล้วจะจัดการเรื่อง DNS เองก็ลองไปลงทะเบียนที่ www.zonedit.com ที่กล่าวมาเป็นเรื่องของอินเทอร์เน็ตถ้าเป็นอินทราเน็ตล่ะเราแต่ติดตั้ง DNS Server ในองค์กรเราก็สามารถตั้งชื่อโดเมนอะไรก็ ได้ เพราะ DNS Server เป็นของเราเองลีนุกซ์โปแกรมที่ใช้ทำา DNS Server คือโปแกรม BIND ปัจจุบันพัฒนามาถึงเวอร์ชัน 9 ประวัติความเป็นมาของ BIND BIND (Berkeley Internet Name Domain) โปแกรม BIND ได้พัฒนาขึ้นที่ University of California at Berkeley เป็นโปเจคของนักศึกษาปริญญาตรี ภายใต้การสนับสนุนโดย US Defense Advanced Research Projects Administration (DARPA) โปแกรม BIND ตั้งแต่พัฒนาจนถึงเวอร์ชัน 4.8.3 ได้รับการดูแลจาก Computer Systems Research Group (CSRG) ที่ UC Berkeley ทีมพัฒนาได้แก่ Douglas Terry, Mark Painter, David Riggle และ Songnian Zhou หลังจากนั้นก็ได้มีการรับช่วงการพัฒนามาหลายคนหลายองค์กร จนปัจจุบัน BIND เวอร์ชัน 9 ซึ่งออกมาเมื่อเดือนกันยายน ปี 2000 ได้รับการสนับสนุนการพัฒนาจากหน่วยงานเหล่านี้ ● Sun Microsystems, Inc. ● Hewlett Packard ● Compaq Computer Corporation ● IBM ● Process Software Corporation ● Silicon Graphics, Inc.
68
Network Associates, Inc. ● U.S. Defense Information Systems Agency ● USENIX Association ● Stichting NLNet - NLNet Foundation ● Nominum, Inc. สามารถดาวน์โหลดโปแกรม BIND มาใช้งานได้ที่ http://www.isc.org/index.pl?/sw/bind แต่เราไม่จำาเป็นต้องดาวน์โหลดมาคอมไพล์และติดตั้งเองลีนุกซ์ทุกค่ายจะมีโปรแกรม BIND มาให้อยู่แล้ว ●
การติดตั้ง BIND บน Red Hat การติดตั้ง DNS Server บน Red Hat สามารถทำาได้โดยใช้ system-config-packages
รูปที่ xx แสดง หลังจากติดตั้งเสร็จก็ให้ใช้คำาสั่ง chkconfig named on เพื่อให้เซอร์วิส named ทำางานตั้งแต่ตอนบูท ไฟล์และไดเรกทอรีที่เกี่ยวข้อง /etc/named.conf /var/named/chroot/var/named /var/name/name.ca
เป็นไฟล์คอนฟิกหลักที่จะไปเรียกใช้ไฟล์อื่น เป็นไดเรกทอรีที่เก็บไฟล์ที่เรียกใช้จาก /etc/named.conf เป็นที่ที่เราสร้างไฟล์ที่เกี่ยวกับโดเมนไปเก็บไว้ เป็นลิงค์ไฟล์มาจาก/var/named/chroot/var/named/name.ca เป้นไฟล์ที่เก็บ รูทเนมเซิร์ฟเวอร์ ที่ดูแลโดย InterNic
69
ขั้นตอนการคอนฟิก 1. ตั้งชื่อโดเมน 2. แก้ไขไฟล์ /etc/name.conf 3. สร้างไฟล์ที่จะเปลี่ยนชื่อเป็น IP Address ใน /var/named/chroot/var/named 4. สร้างไฟล์เปลี่ยน IP Address เป็นชื่อ /var/named/chroot/var/named 5. start หรือ restart service named 6. แก้ไฟล์ /etc/resolv.conf 7. ใช้ เครื่องมือในการทดสอบ ตั้งชื่อโดเมน ทำาความเข้าใจกันก่อนนะครับว่าเราจะติดตั้ง Server กันภายในหน่วยงานของเรา เพราะฉะนัน้ ชื่อจะซำ้ากับที่มีอยู่บนอินเทอร์เน็ตก็ไม่เป็นไร เช่น mydomain.com, sweetdomain.com จากนี่ไปผมจะขอตั้งชื่อโดเมนนี้วา่ ourintranet.net สิ่งที่ต้องการ IP Address
Role
ชื่อ
192.168.1.1
DNS, Web, Mail
ourdomain.net, www.ourdomain.net
192.168.1.2
FTP
ftp.ourdomain,net
192.168.1.254
Gateway
gateway.ourdomain.net
แก้ไฟล์ /etc/named.conf
70 zone "." IN { type hint; file "named.ca"; }; zone "localdomain" IN { type master; file "localdomain.zone"; allowupdate { none; }; }; zone "localhost" IN { type master; file "localhost.zone"; allowupdate { none; }; }; zone "0.0.127.inaddr.arpa" IN { type master; file "named.local"; allowupdate { none; }; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.ip6.local"; allowupdate { none; }; }; zone "255.inaddr.arpa" IN { type master; file "named.broadcast"; allowupdate { none; }; }; zone "0.inaddr.arpa" IN { type master; file "named.zero"; allowupdate { none; }; }; zone "ourintranet.net." IN { type master; file "ourintranet.net.db"; }; zone "1.168.192.inaddr.arpa." IN { type master; file "192.168.1.db"; };
ทดสอบไฟล์ /etc/named.conf เราสามารถทดสอบได้ว่า ไฟล์ /etc/named.conf ที่เราได้เพิ่มเข้าไปนั้นถูกต้องหรือไม่โดยใช้คำาสั่ง named-checkconf ตามด้วยไฟล์ /etc/named.conf ตัวอย่างการณีที่มีความผิดพลาดเกิดขึ้น ถ้าไม่มีความผิดพลาดก็จะไม่รายงานอะไรออกมา
71
[root@banban named]# namedcheckconf /etc/named.conf /etc/named.conf:30: unknown option 'asdad' /etc/named.conf:31: unexpected token near '}'
ถ้าไม่มีข้อผิดพลาด
[root@banban named]# namedcheckconf /etc/named.conf [root@banban named]#
สร้างไฟล์ที่จะเปลี่ยนชื่อเป็น IP Address (ourintranet.net.db) ในทีน่ ี้คือไฟล์ ourintranet.net.db ซึ่งจะมีหน้าที่ในการเปลี่ยนชื่อเป็น IP Address บนลีนุกซ์ตระกูล Red Hat สร้างไฟล์นี้ที่ /var/named/chroot/var/named $TTL 1H @ IN SOA ourintranet.net. root.ourintranet.net. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ; Negative caching TTL of 1 hour ) NS ns.ourintranet.net. IN MX 10 mail.ourintranet.net. IN A 192.168.1.1 mail IN A 192.168.1.1 www IN A 192.168.1.1 ftp IN A 192.168.1.2 gateway IN A 192.168.1.254
สร้างไฟล์ที่จะเปลี่ยน IP Address เป็นชื่อ (192.168.1.db) ในทีน่ ี้คิอไฟล์ 192.168.1.db มีหน้าที่ในการเปลี่ยน IP Address เป็นชื่อ ที่อยู่ของไฟล์ก็ที่เดียวกันกับไฟล์ ourintranet.net.db $TTL 1H @ IN SOA ourintranet.net. root.ourintranet.net. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ; Negative caching TTL of 1 hour ) IN NS ns.ourintranet.net. 1.1.168.192.inaddr.arp.arpa. IN PTR www.ourintranet.net. 2.1.168.192.inaddr.arp.arpa. IN PTR ftp.ourintranet.net. 254.1.168.192.inaddr.arp.arpa. IN PTR gateway.ourintranet.net.
72
อธิบายความหมายของคำาต่างๆ TTL @ IN Serial Refresh Retry Expire TTL
Time to Live ค่าของเวลาของ โซน หรือ โดเมนที่จะ cache หรือบันึกโดย secondary server
Internet ระยะเวลาที่ใช้ในการรีเฟรชข้อมูล ระยะเวลาที่ใช้ในการตรวจสอบข้อมูลกับ Primary ระยะเวลาการหมดอายุของข้อมูล กรณีที่ไม่สามารถติดต่อเพื่อขอข้อมูล (refresh) กับ Primary ได้ ระยะเวลาการมีชีวิต (Time to Live)
TypeDescription SOA Start of authority NS A CNAME MX PTR
Authorized name server Host address Canonical name Mail server exchange Reverse name pointer#
## restart service service named start | restart ## แก้ไฟล์ /etc/resolv.conf nameserver 192.168.1.1
73
เครื่องมือในการตรวจสอบ เครื่องมือในการตรวจสอบว่าเราสิ่งที่เราได้ทำาไปถูกต้องหรือไม่ [root@ourintranet ~]# dig ourintranet.net ; DiG 9.2.4 ourintranet.net ;; global options: printcmd ;; Got answer: ;; >>HEADERHEADERHEADERHEADER \q Bye [root@ourintranet ~]
หรือ mysql> exit Bye [root@ourintranet ~]
การใช้งาน user และ password ของ mysql แบบแรก ให้ mysql ถามรหัสผ่าน [root@ourintranet ~]# mysql u root p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 4.1.7 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
แบบที่ 2 ใส่รหัสผ่านต่อจากออปชัน -p [root@ourintranet ~]# mysql u root pmypassword Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 to server version: 4.1.7 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
ถ้าใส่รหัสผ่านผิดก็จะมีข้อความเตือน [root@ourintranet ~]# mysql u root p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
78
การสร้างฐานข้อมูล MySQL สร้างฐานข้อมูลใหม่และดูชื่อฐานข้อมูล [root@ourintranet ~]# mysqladmin create newdb u root p Enter password: [root@ourintranet ~]# mysql u root p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 to server version: 4.1.7 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; ++ | Database | ++ | mysql | | newdb | | test | ++ 3 rows in set (0.00 sec) mysql> \q
การนำาเข้าฐานข้อมูล และ backup ฐานข้อมูล นำาเข้าฐานข้อมูลจากไฟล์ด้วย mysql newdb SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword‘);
หรือ [root@ourintranet ~]# mysql u root poldpassword mysql> UPDATE mysql.user SET Password = PASSWORD('newpassword‘) WHERE User = 'root'; mysql> FLUSH PRIVILEGES;
ถึงตอนนี้ MySQL ก็พร้อมใช้แล้วมาดูกนั ต่อว่า จะให้ apache + PHP รูจ้ ัก MySQL ได้อย่างไร
79
การติดตั้ง Web Server + PHP การติดตั้งเวบเซิร์ฟเวอร์จาก Package ลองลีนุกซ์ตระกูล Red Hat ให้ใช้ system-config-packages จะดีกว่าใช้คำาสั่ง rpm เนื่องจากมี package ที่ขึ้นต่อกันมาก [root@ourintranet ~]# systemconfigpackages
กด Details เลือก Package
รูปที่ xx
80
รูปที่ xx เราจะใช้งาน PHP ด้วยเพราะฉะนั้นอะไรที่เกี่ยวข้องก็เลือกไปเถอะครับเกินดีกว่าขาด มันไม่ได้กินพื้นที่มากด้วย เลือกเสร็จกดปุ่ม Close แล้ว Update โปรแกรมจะถามหาแผ่นติดตั้งเอง หลังจากติดตั้งเสร็จให้ใช้คำาสั่ง [root@ourintranet ~]# chkconfig httpd on เพื่อให้ httpd ทำางานทุกครั้งที่เปิดเครื่อง ให้ httpd ทำางาน [root@ourintranet ~]# service httpd start หรือ [root@ourintranet ~]# /etc/init.d/httpd start สิ่งที่ต้องทราบ /var/www/html คือ ไดเรคทอรีที่เราเอาไฟล์ .html หรือ .php ไปเก็บไว้ หรือเรียกว่า Document root /etc/httpd/conf/httpd.conf ไฟล์ config ของ Web Server
81
ทดสอบการทำางานของ Web Server และ PHP ทำางานหรือไม่ให้เปิดโปรแกรม Browser Mozilla หรือ Firefox แล้วเรียก URL http://www.ourintranet.com หรือ http://localhost ของเครื่อง ถ้าเปิดหน้า Default Page ขึ้นมาได้ ก็แสดงว่า Web Server ทำางานแล้ว
ทดลองใช้งาน SERVER AddDefaultCharset UTF-8 #AddDefaultCharset TIS-620
ทดสอบการทำางานของ PHP สร้างไฟล์ phpinfo.php โดยมีเนื้อความข้างในไฟล์
แล้วนำาไฟล์ phpinfo.php ไปไว้ที่ /var/www/html
82
สิ่งที่ควรระวัง ถ้ายังไม่เข้าใจเกี่ยวกับการทำางานของ Firewall มากนักก็ให้ปิดการทำางานของ Firewall ไปก่อน โดยใช้คำาสั่ง [root@ourintranet ~]# systemconfigsecuritylevel
รูปที่ xx ให้ Disable firewall และ SELinux ไปก่อนแล้วค่อยมาศึกษาเรื่อง Filewall กันทีหลังดังรูป xx หรือจะใช้คำาสั่ง [root@ourintranet ~]# chkconfig iptables off [root@ourintranet ~]# service iptables stop
83
ทดสอบการทำางานกับ PHP กับ MySQL สร้างไฟล์ connect.php ไว้ที่ /var/www/html โดยมีเนื้อความดังนี้
ทดสอบการทำางานการติอต่อฐานข้อมูลด้วย Browser ถ้าหากไม่สามารถติดต่อฐานข้อมูลได้ก็ระรายงาน error ขึน้ มาดังรูป XX
รูปที่ xx แสดงการติดต่อฐานข้อมูล MySQL ด้วย PHP ถ้า php สามารถติดต่อฐานข้อมูลได้ก็จะแสดงข้อความ Connected successfully ออกมาดังรูป XX
รูปที่ xx แสดงการติดต่อฐานข้อมูล MySQL ด้วย PHP ถ้าหากว่าเราสามารถติดต่อฐานข้อมูลด้วย username และ password ที่เราตั้งเอาไว้เราก็สามารถติดตั้ง โปรแกรมอื่นๆ ที่เขียนด้วยภาษา PHP และใช้ฐานข้อมูล MySQL ได้แล้ว
84
การติดตั้ง phpMyAdmin phpMyAdmin เป็นโปแกรมที่เขียนด้วยภาษา PHP ให้สำาหรับจัดการฐานข้อมูล MySQL โดยที่เราไม่ต้องใช้คำาสั่ง ทำางานผ่าน Web Browser ดาวน์โหลดมาติดตั้งได้จาก http://www.phpmyqdmin.net
รูปที่ xx แสดงเวบ www.phpmyadmin.net ไฟล์ที่ดาวน์โหลดมา จะมีชื่อ phpMyAdmin-version.tar.gz เช่น phpMyAdmin-2.8.2.4.tar.gz เมื่อได้ไฟล์มาให้เอาไปไว้ที่ /var/www/html แล้วขยายไฟล์ออกมา จะได้ไดเรกทอรี phpMyAdmin-2.8.2.4 [root@ourintranet html]# tar xvfz phpMyAdmin2.8.2.4.tar.gz phpMyAdmin2.8.2.4/ phpMyAdmin2.8.2.4/Documentation.txt phpMyAdmin2.8.2.4/CREDITS phpMyAdmin2.8.2.4/ChangeLog phpMyAdmin2.8.2.4/Documentation.html phpMyAdmin2.8.2.4/INSTALL ... [root@ourintranet html]# ls phpMyAdmin2.8.2.4 phpMyAdmin2.8.2.4.tar.gz
เพื่อความสะดวกในการใช้งานให้เปลี่ยนชื่อ ไดเรกทอรีให้สั้นลง [root@ourintranet html]# mv phpMyAdmin2.8.2.4 phpMyAdmin
85
ทดลองทดสอบการทำางานจาก Browser http://www.ourintranet.net/phpMyAdmin/
รูปที่ xx จากรูปจะเห็นว่ายังไม่สามารถติดต่อฐานข้อมูลได้ ให้เข้าไปทำางานที่ได้เรกทอรี phpMyAdmin/libraries เพื่อแก้ไขไฟล์ config.default.php แก้ไฟล์ด้วย vi หรือ text editor ที่ท่านถนัด [root@ourintranet html]# cd phpMyAdmin/libraries [root@ourintranet libraries]# vi config.default.php
ให้ค่าตัวแปรของ $cfg['PmaAbsoluteUri'] $cfg['PmaAbsoluteUri'] = 'http://www.ourintranet.net/phpMyAdmin/';
ถ้าเราไม่ได้ทำา DNS server บรรทัดนี้เป็น $cfg['PmaAbsoluteUri'] = 'http://192.168.1.1/phpMyAdmin/';
หรือ
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin/';
ให้ค่าตัวแปรของ auth_type user และ password auth_type มี 2 แบบคือ config กับ http ถ้าเลือกแบบ config โปรแกรมจะอ่านค่า username และ password จากไฟล์คอนฟิกนี้ http โปรแกรมจะถาม username และ password ก่อน user user ที่จะติดต่อฐานข้อมูล MySQL password รหัสผ่าน ของผู้ใช้งานที่จะติดต่อฐานข้อมูล เช่น $cfg['Servers'][$i]['auth_type'] = 'config'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'mypassword';
86
ถ้า username และ password ถูกต้องก็จะเข้าใช้งานได้เลย
รูป xxx แสดง ถ้ากรณีที่ไฟล์คอนฟิกเป็นแบบนี้ $cfg['Servers'][$i]['auth_type'] = 'http'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = '';
เมื่อเราเรียกใช้งานโปแกรมก็จะถามผู้ใช้งานและรหัสผ่านก่อน
รูป xxx ถ้าชื่อผู้ใช้และรหัสผ่านถูกต้องก็จะเข้าใช้งานได้ดังรูป xxx การติดตั้ง phpPgAdmin phpPgadmin เป็นโปรแกรมที่เขียนด้วยภาษา PHP เช่นเดียวกันกับ phpMyAdmin แต่ phpPgAdmin เป็นเครื่องมือใช้สำาหรับจัดการฐานข้อมูล PostgreSQL ผ่านทางเวบ สามารถดาวน์โหลดมาใช้งานได้ที่
87
http://phppgadmin.sourceforge.net
ไฟล์ที่ดาวน์โหลดมา phpPgAdmin-4.0.1.tar.gz เอาไปไว้ที่ไดเรคทอรี /var/www/html แล้วขยายไฟล์ออกมา จะได้ ได้เรกทอรี phpPgAdmin-4.0.1 ให้เปลี่ยนชื่อเป็น phpPgAdmin เพื่อความสะดวกในการใช้งาน [root@ourintranet ~]# ls phpPgAdmin4.0.1.tar.gz [root@ourintranet ~]# cp phpPgAdmin4.0.1.tar.gz /var/www/html/ [root@ourintranet ~]# cd /var/www/html/ [root@ourintranet html]# tar xvfx phpPgAdmin4.0.1.tar.gz phpPgAdmin4.0.1/ phpPgAdmin4.0.1/CREDITS phpPgAdmin4.0.1/classes/ ... [root@ourintranet html]# mv phpPgAdmin4.0.1 phpPgAdmin
ทดสอบการใช้งานโดยการเรียกผ่าน Browser http://www.ourintranet.net/phpPgAdmin จะเห็นว่าเราไม่สามารถ login เข้าใช้งานได้ มีข้อความเตือน Login disallowed for security reasons.
88
ต้องมีการแก้ไฟล์ config ก่อน [root@ourintranet html]# mv phpPgAdmin4.0.1 phpPgAdmin [root@ourintranet html]# cd phpPgAdmin/conf [root@ourintranet conf]# ls config.inc.php config.inc.phpdist [root@ourintranet conf]# vi config.inc.php
ให้คา่ ตัวแปร $conf['servers'][0]['host'] เป็ น localhost // Hostname or IP address for server. Use '' for UIX domain socket. // use 'localhost' for TCP/IP connection on this computer $conf['servers'][0]['host'] = 'localhost';
ให้คา่ ตัวแปร $conf['extra_login_security'] เป็ น false // If extra login security is true, then logins via phpPgAdmin with no // password or certain usernames (pgsql, postgres, root, administrator) // will be denied. Only set this false once you have read the FAQ and // understand how to change PostgreSQL's pg_hba.conf to enable // passworded local connections. $conf['extra_login_security'] = false;
ทดลอง
89
การติดตั้ง phpNukeThai phpNuke เป็นโปรแกรม Content Management System ที่ได้รับความนิยมเอามาทำาเวบไซต์มากตัวหนึ่ง สามารถดาวน์โหลดได้ที่ http://www.phpnuke.org/ เนื่องจากได้รับความนิยมมากคนไทยเรา ได้เอามาพัฒนาเพิ่มเติมใส่ระบบภาษาไทยเข้าไปซึ่งดาวน์โหลดได้ที่ http://www.thainuke.org
รูปที่ xxx แสดงเวบไซต์ www.thainuke.org ไฟล์ที่เราดาวน์โหลดมาเป็นเวอร์ชัน 7.8 ชื่อไฟล์ PHP-Nuke-7.8-Thai-Edition.zip ขยายไฟล์ด้วยคำาสั่ง unzip [root@ourintranet ~]# unzip PHPNuke7.8ThaiEdition.zip Archive: PHPNuke7.8ThaiEdition.zip creating: PHPNuke7.8ThaiEdition/docs/ inflating: PHPNuke7.8ThaiEdition/docs/AddonsModules.txt ... [root@ourintranet ~]# cd PHPNuke7.8ThaiEdition [root@ourintranet PHPNuke7.8ThaiEdition]# ls docs html READMETHAI.txt sql upgrades [root@ourintranet PHPNuke7.8ThaiEdition]# cp r html /var/www/html/nuke [root@ourintranet PHPNuke7.8ThaiEdition]# cd sql [root@ourintranet PHPNuke7.8ThaiEdition]# cd sql [root@ourintranet sql]# ls nuke.sql [root@ourintranet sql]# [root@ourintranet sql]# mysqladmin create nuke u root pmypassword [root@ourintranet sql]# mysql nuke Internet Options -->Conections -->LAN Settings ก็ให้ยกเลิกค่า ของ Proxy Server
132
ภาพที่ xx เมื่อลูกข่ายใช้งานอินเตอร์เน็ตก็จะออกผ่าน Proxy Server ถ้าหากเราต้องการตั้งกฏใน squid ## ถ้าจะเพิ่มกฏ มีตัวอย่างดังนี้ เช่น ไม่ให้เครื่องลูกข่าย IP 192.168.1. 50 ใช้งาน ตัวอย่างจากกฎ acl client50 src 192.168.1.50 http_access deny client 50 หรือจะเขียนแบบให้ไปอ่านจาก Text File acl banned_ips src "/etc/squid/banip.txt" http_access deny banmed_ips
133
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # Example rule allowing access from your local networks. Adapt # to list your (internal) IP networks from where browsing should # be allowed acl our_networks src 192.168.1.0/24 acl banned_ips src "/etc/squid/banip.txt" acl within_timeframe time MTWHFAS 09:0016:00 acl web url_regex i ^http://www.sex http_access deny web http_access allow within_timeframe http_access allow our_networks http_access allow localhost # And finally deny all other access to this proxy http_access deny all
134
บทที่ SAMBA Samba เป็นซอฟต์แวร์ที่ช่วยให้สามารถแชร์ไฟล์และเครื่องพิมพ์บนลินุกซ์ให้กับระบบปฏิบัติการวินโดวส์ 95, 98, 2000, NT รวมทั้ง smbclient อืน่ เช่น linux, unix อื่นๆ ได้ จะยกตัวอย่างการติดตั้ง และใช้งานโปรแกรมก่อนนะครับแล้วค่อยอธิบายภายหลัง การติดตั้ง
[root@ourintranet ~]# useradd piti [root@ourintranet ~]# passwd piti Changing password for user piti. New UNIX password: BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@ourintranet ~]# smbpasswd a piti New SMB password: Retype new SMB password: startsmbfilepwent_internal: file /etc/samba/smbpasswd did not exist. File successfully created. Added user piti. [root@ourintranet ~]# service smb start Starting SMB services: [ OK ] Starting NMB services: [ OK ] [root@ourintranet ~]#
135
ทดลองการแชร์ไฟล์กลับมาที่วินโดว์ มาทดลองดูวา่ สิ่งที่เราทำาไปบน server ใช้ได้หรือเปล่า \\192.169.1.1
รูปที่ xx แสดง ก็จะขึ้น Username password
รูปที่ xx แสดง
136
ก็จะเห็น Folder piti ซึ่งเป็นโฮมไดเรกทอรีของ user piti นัน่ เอง
รูปที่ xx แสดง เมื่อเข้ามาดูใน Folder ก็จะเห็นไฟล์ต่างที่อยู่บนลีนุกซ์
รูปที่ xx แสดง
137
กลับมาที่ Server มาทดลองแช์ไดเรคทอรีโดยการแก้ไฟล์คอนฟิกของ Samba ดังนี้ [root@ourintranet ~]# mkdir /share [root@ourintranet ~]# chown piti.piti /share [root@ourintranet ~]# vi /etc/samba/smb.conf [ourshare] comment = Share Folder path = /share valid users = piti public = no writable = yes [root@ourintranet ~]# service smb restart Shutting down SMB services: [ OK ] Shutting down NMB services: [ OK ] Starting SMB services: [ OK ] Starting NMB services: [ OK ] [root@ourintranet ~]#
รูปที่ xx
138
รูปที่ xx กรณีตัวอย่างนำามาใช้งาน มีบริษัทหนึ่ง มี 4 แผนกดังนี้ 1. ฝ่ายประชาสัมพันธ์ (pr) มีพนักงาน 1 คน คือ somsri 2. ฝ่ายเวบไซต์ (web) มีพนักงาน 2 คน คือ somchai, suchart 3. ฝ่ายขาย (sale) มีพนักงาน 1 คน คือ somwang 4. ฝ่าย (support) มีพนีกงาน 1 คน saismorn ต้องการใช้ Samba ทำาไฟล์ Server โดยมีไดเรคทอรีที่แชร์ ตามชื่อแผนกคือ pr, web, sale และ support โดยที่มี ผูจ้ ัดการ (manager) สามารถเข้าไปใช้งานได้ทุกไดเรกทอรี และไฟล์ที่ผู้จัดการสร้างขึ้นในทุกๆ ไดเรกทอรีลูกน้องทุกฝ่ายสามารถนำาไปใช้งานได้ มาดุขั้นตอนการสร้างไดเรคทอรี
139
การจัดการ User [root@ourintranet ~]# groupaad manager [root@ourintranet ~]# groupaad pr [root@ourintranet ~]# groupaad web [root@ourintranet ~]# groupadd sale [root@ourintranet ~]# groupadd support [root@ourintranet ~]# useradd g manager manager [root@ourintranet ~]# useradd g pr somsri [root@ourintranet ~]# useradd g web somchai [root@ourintranet ~]# useradd g web suchart [root@ourintranet ~]# useradd g sale somwang [root@ourintranet ~]# useradd g support saisamorn [root@ourintranet ~]# usermod G pr,web,sale,support manager [root@ourintranet ~]# passwd manager [root@ourintranet ~]# passwd somsri [root@ourintranet ~]# passwd somchai [root@ourintranet ~]# passwd suchart [root@ourintranet ~]# passwd somwang [root@ourintranet ~]# passwd saisamorn [root@ourintranet ~]# smbpasswd a manager [root@ourintranet ~]# smbpasswd a somsri [root@ourintranet ~]# smbpasswd a somchai [root@ourintranet ~]# smbpasswd a suchart [root@ourintranet ~]# smbpasswd a somwang [root@ourintranet ~]# smbpasswd a saisamorn
การจัดการไดเรกทอรี [root@ourintranet ~]# mkdir /depts [root@ourintranet ~]# mkdir p /depts/{pr,web,sale,support} [root@ourintranet ~]# groupadd pr [root@ourintranet ~]# groupadd web [root@ourintranet ~]# groupadd sale [root@ourintranet ~]# groupadd support [root@ourintranet ~]# chgrp pr /depts/pr [root@ourintranet ~]# chgrp web /depts/web [root@ourintranet ~]# chgrp sale /depts/sale [root@ourintranet ~]# chgrp support /depts/support [root@ourintranet ~]# chmod 770 /depts/pr [root@ourintranet ~]# chmod 770 /depts/web [root@ourintranet ~]# chmod 770 /depts/sale [root@ourintranet ~]# chmod 770 /depts/support [root@ourintranet ~]# chmod g+s /depts/*
140
ให้แก้ไฟล์ /etc/samba/smb.conf เพิ่มบรรทัดเหล่านี้เข้าไป [pr] comment = Share for PR path = /depts/pr valid users = manager somsri public = no writable = yes [web] comment = Share for Web path = /depts/web valid users = manager somchai suchat public = no writable = yes [sale] comment = Share for Sale path = /depts/sale valid users = manager somwang public = no writable = yes [support] comment = Share for Support path = /depts/support valid users = manager saisamorn public = no writable = yes
ไม่ให้ user ใช้งานโฮมไดเรกทอรี comment บรรทัดเหล่านี้ #[homes] ; comment = Home Directories ; browseable = no ; writable = yes [root@ourintranet ~]# /etc/init.d/smb restart Shutting down SMB services: [ OK ] Shutting down NMB services: [ OK ] Starting SMB services: [ OK ] Starting NMB services: [ OK ] [root@ourintranet ~]#
141
ทดลองใช้งานโดยใช้ user manager Login เข้ามา
รูปที่ xx
User manager จะสามารถเข้าใช้งานได้ทุก Folder
รูปที่ xx
142
รูปที่ xx ทดลองสร้างไฟล์ใหม่ใน folder pr และ folder อืน่ ๆ ก็สามารถทำาได้
143
คำาอธิบายเกี่ยวคำาไฟล์คอนฟิกของ Samba ไฟล์คอนฟิกของ Samba มี 2 ส่วนหลัก คือ ส่วน Global กับ ส่วนที่แชร์ ส่วน Global เป็นคอนฟิกรวมของระบบทั้งหมด ขึน้ ต้นด้วยบรรทัด [global] เมื่อจบส่วน global ก็จเป็นส่วนแชร์ คือการแชร์ไดเรคทอรี ซึ่งจะมีค่าปกติมาคือ [home] และ [printers] ถ้าเราต้องการแชร์ไดเรกทอรีอื่นเพิ่มเข้าไปได้ ก็เริ่มต้นด้วย [xxx] โดยที่ xxx คือชื่อที่ต้องการให้แสดง คอมเมนท์ บรรทัดที่ขึ้นต้นด้วย ; (semi-colon) และ # (hash) ถือว่าเป็นคอมเมนท์ คือจะไม่มีการอ่านค่าคอนฟิก ในบรรทัดนั้นๆ # ใช้สำาหรับคอมเมนท์ทั่วไปที่เป็นคำาอธิบาย ช่วยจำา ; ใช้สำาหรับคอมเมนท์ บรรทัดที่เป็นการแชร์ เช่น # A private directory, usable only by fred. Note that fred requires write
# access to the directory. ;[fredsdir] ; comment = Fred's Service ; path = /usr/somewhere/private ; valid users = fred ; public = no ; writable = yes ; printable = no
แต่ในความเป็นจริงจะใช้อันไหนก็มีผลเหมือนกัน การอนุญาตให้เครื่องลูกข่ายเข้ามาใช้งาน การอนุญาตให้เครื่องลูกข่ายเข้ามาใช้งานไฟล์และเครื่องพิมพ์บน Samba นัน้ มี 4 แบบ สามารถทำาได้โดยการทำาผ่านออปชัน security security = share การเข้าใช้งานผู้ใช้งานสามารถเข้าใช้งานโดยไม่ต้องรู้ user มีแค่รหัสผ่านก็เข้าใช้งานได้ security = user การเข้าใช้งานผู้ใช้งานต้องใช้ username และ password ซึ่งค่าปกติของ samba จะเป็นค่านี้ security = server ทำางานเหมือน security = user แต่ในการเข้าใช้งานจะไปเชค username และ password จาก Samba server เครื่องอื่น เป็นการรักษาความปลอดภัยเพิ่มขึ้นไปอีก security = domain Samba สามารถเป็นสมาชิกของ Windows Domain ได้ ดังนัน้ เมื่อผู้ใช้ทำาการยืนยันตัวตนกับ primary domain controller (PDC) แล้ว ก็จะสามารถเข้าใช้งานแชร์ที่อยู่บน Samba server ได้ ถ้าหากมีการระบุออปชั่น Public = yes หรือ Guest ok = yes ใน /etc/samba/smbd.conf แล้ว และไม่ว่าจะระบุ security เป็นออปชันใด Samba ก็จะไม่ทำาการตรวจสอบรหัสผ่านที่ส่งมาจากไคลเอ็นต์ (client) แต่อย่างใด
144
รหัสผ่าน การที่ผู้ใช้จะสามารถเข้าใช้งานไดเรกทอรีหรือเครื่องพิมพ์ที่แชร์ไว้ได้นั้น ผูใ้ ช้จะต้องมี user อยู่ลีนุกซ์ก่อน และต้องเป็น user ที่ได้ set password แล้ว ออปชันที่เกี่ยวกับ password คือ encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd ถ้า encrypt passwords = yes เวลา user login เข้ามาจะมีการตรวจสอบรหัสผ่านจาก /etc/samba/smbpasswd ในการเพิ่ม user เข้าไปใน /etc/samba/smbpasswd โดยใช้คำาสั่ง smbpasswd -a user เช่น smbpasswd somchai ถ้าต้องการเปลี่ยน password ให้กับ user ใช้คำาสั่ง smbpasswd user เช่น smbpasswd somchai ถ้าหากต้องการดูวิธีการใช้งานของ smbpasswd smbpasswd –help ส่วน encrypt passwords = no เป็นการเชค password จาก /etc/pasword ซึ่งจะไม่พูดถึงในรายละเอียดและไม่ควรใช้ ออปชันนี้ครับ Networking Options ออปชันที่เกี่ยวกับ Network เป็นการอนุญาตให้ลูกข่าย IP Address ต่างๆ เข้ามาใช้งาน hosts allow = 192.168.1. hosts deny = 192.168.1.226/255.255.255.255 hosts deny = ALL EXCEPT 192.168.1. 192.168.1. (หนึ่งเก้าสองจุดหนึ่งหกแปดจุดหนึ่งจุด) เป็นลักษณะ การเขียนของ Samba ซึ่งมีความหมายเดียวกับ 192.168.1. 0/255.255.255.0 หรือ 192.168.1.0/24 ซึ่งมีความหมายว่าอนุญาตให้ IP 192.168.1.1-192.168.1.254 อนุญาตให้เข้าใช้งานได้ อย่างไรก็ตาม Samba มีกฎในการนำาค่า configuration ของ host allow, hosts deny ไปใช้งานดังนี้ 1. ถ้าไม่มีการระบุ hosts allow หรือ hosts deny ตัว Samba จะถือว่าเป็นการอนุญาตให้ใช้งานได้อย่างอิสระ (เสมือน hosts allow = ALL) 2. ถ้ามีการระบุ hosts allow, hosts deny ใน [global] ค่าดังกล่าวจะมีผลกับทุกๆ แชร์ แม้ว่าจะมีการระบุ hosts allow, deny ในแต่ละแชร์ซึ่งการระบุในแต่ละแชร์ดังกล่าวจะถือว่าไม่มีผลแต่อย่างใด 3. ถ้ามีการระบุ hosts allow แต่ไม่ได้ระบุ hosts deny จะถือว่า ค่าที่นอกเหนือจากที่ระบุใน hosts allow จะมีสถานะเป็น deny โดยอัตโนมัติ 4. ในทำานองเดียวกัน ถ้ามีการระบุ hosts deny แต่ไม่ได้ระบุ hosts allow จะถือว่า ค่าที่นอกเหนือจากที่ระบุใน hosts deny จะมีสถานะเป็น allow โดยอัตโนมัติ 5. ถ้ามีค่า เช่น ip address หรือ subnet ถูกระบุในทั้ง hosts allow และใน hosts deny
145
จะถือว่าค่าดังกล่าวมีสถานะเป็น deny
File Permissions and Attributes •
•
ออปชัน create mask ใช้กำาหนดค่า default permission สูงสุด สำาหรับไฟล์ที่สร้างขึ้นมาใหม่ เช่น create mask = 0640 ออปชัน directory mask ใช้กำาหนดค่า default permission สูงสุด สำาหรับไดเรกทอรีที่สร้างขึ้นมาใหม่ เช่น directory mask = 750
การเข้าถึงไฟล์และไดเรกแชร์ การเข้าถึงไฟล์และไดเรกทอรีที่แชร์ นัน้ นอกจากออปชันบน Samba แล้ว ยังขึน้ กับ permission ของไฟล์และไดเรกทอรีด้วย บางครั้งถึงแม้ว่า option บน Samba บอกว่าอนุญาตให้เขียนได้ แต่ permission ของไฟล์ไม่อนุญาตให้เขียนก็เขียนไม่ได้ ผู้ดูแลระบบควรจำากัดการเข้าถึงแชร์ใดๆ ให้ใช้งานได้เฉพาะผู้ที่สมควรได้รับสิทธิ์เท่านั้น โดยมีออปชันที่เกี่ยวข้องดังนี้ valid users = somchai suchart @web ระบุให้เฉพาะผู้ใช้ที่มีชื่อในรายการนี้เท่านั้น จึงจะสามารถเข้าถึงดิสก์ที่แชร์ไว้ได้ (ใช้ @ สำาหรับทั้ง group) ** หากรายชื่อผู้ใช้ที่กำาหนดไว้ใน valid users ไปปรากฏซำ้ากับรายชื่อใน invalid users ก็จะถือว่าผู้ใช้รายนั้นถูกจัดในกลุ่ม invalid users invalid users = lertsak @guest แสดงรายชื่อผู้ใช้ที่ไม่มีสิทธิ์เข้าใช้งานแชร์ writable = yes writeable = yes write ok = yes read only = no ออปชันทั้งสี่แบบด้านบนนี้ให้ผลลัพธ์เหมือนกัน คืออนุญาตให้ผู้ใช้สามารถสร้างไฟล์หรือไดเร็กทอรีขึ้นมาใหม่ได้ read list = choawalit kitisak แสดงรายชื่อผู้ใช้ที่มีสิทธิ์ใช้งานแชร์แบบอ่านเท่านั้น ไม่สามารถทำาการแก้ไขใดๆ ได้ หากว่าผู้ใช้ใน read list มีชื่อใน list อืน่ เช่น write list, read only, writeable ก็จะถือว่าผู้ใช้นั้นมีสิทธิ์เป็น read only เท่านั้น write list = lersak, phuwadon, siriwan
146
เป็นการให้สิทธิ์ write แก่ผู้ใช้ที่มีชื่อในรายการนี้ แม้ว่าจะมีการระบุว่า read only = yes ก็ตาม public = no guest ok = no ออปชัน public และ guest ok สามารถใช้แทนกันได้ ซึ่งหากกำาหนดค่าเป็น yes ก็จะทำาให้สามารถเข้าใช้งานดิสก์ที่แชร์ไว้โดยไม่ต้องล็อกอิน hosts equiv = เป็นออปชันที่เป็นอันตรายอย่างยิ่ง ผู้ดูแลระบบควรตรวจสอบให้แน่ใจว่าไม่มีการระบุออปชันนี้ในไฟล์ /etc/samba/smb.conf เป็นอันขาด เพราะในออปชัน hosts equiv ดังกล่าวจะกำาหนดรายชื่อผู้ใช้และโฮสต์ที่สามารถเข้าใช้งานดิสก์ที่แชร์ไว้โด ยไม่ต้องใช้รหัสผ่าน (คล้ายกับไฟล์ hosts.equiv ของ Unix)
การใช้งาน smbclient smbclient เป็นโปแกรม client แบบคำาสั่งที่ใช้งานบนลีนุกซ์ รูปแบบการใช้งาน smbclient //ช่ ือเคร่ ืองหรือ IP Addres/ช่ ือท่ีแชร์ U username%password root@sothorn:~# smbclient //192.168.1.1/pr U manager%password Domain=[OURINTRANET] OS=[Unix] Server=[Samba 3.0.101.4E] smb: \> ls . D 0 Sat Oct 28 13:53:30 2006 .. D 0 Thu Oct 26 15:43:34 2006 new_file_in_pr.txt A 0 Sat Oct 28 13:52:55 2006 63002 blocks of size 131072. 39053 blocks available smb: \> ? ? altname archive blocksize cancel case_sensitive cd chmod chown del dir du exit get getfacl hardlink help history lcd link lowercase ls mask md mget mkdir more mput newer open print prompt put pwd q queue quit rd recurse reget rename reput rm rmdir setmode stat symlink tar tarmode translate volume vuid logon listconnect showconnect ! smb: \>
147
Samba Linux Client บนลีนุกซ์แบบการฟิก สำาหรับ Ubuntu ให้ไปที่ เมนู ที่หลักๆ -->เซิร์ฟเวอร์ในเครือข่าย
รูปที่ XX ดับเบิ้ลคลิ๊กเครือข่ายวินโดว์
รูปที่ xx
148
ดับเบิ้ลคลิ๊กที่ mygroup ซึ่งมาจากไฟล์คอนฟิกของ Samba ในส่วน [global] นัน่ เอง workgroup = MYGROUP ซึ่งเป็นชื่อของ workgroup นัน่ เอง
รูปที่ xx ดับเบิ้ลคลิ๊กที่ mygroup ก็จะพบกับชื่อของ เครื่องที่เปิด Server Samba อยู่ในที่นี่คือ ourintranet ถ้าเรามีเครื่องวินโดว์ที่อยู่ใน workgroup เดียวกันก็จะเห็นมีชื่อเครื่องอยู่เช่นเดียวกัน
รูปที่ xx
149
หลังจากที่ดับเบิ้ลคลิ๊กที่ชื่อเครื่อง ourintranet เข้ามาแล้วเราก็จะเห็นไดเรกทอรีที่เราแชร์เอาไว้
รูปที่ xx ดัลเบิ้ลคลิ๊กที่ ไอคอน sale แล้ว login ด้วย user manager
รูปที่ xx ด้วยสิทธิของ mamager ก็สามารถเข้าไปเขียนไฟล์ได้
รูปที่ xx
150