Friday, December 24, 2010

Linux Command Line

โครงสร้างระบบไฟล์ใน Linux (ตอนที่ 1)

ณฐพล พรพุทธพงศ์


สวัสดีครับ กลับมาพบกันอีกครั้งนะครับ หลังจากที่เราได้ทำความรู้จักกับระบบปฏิบัติการลินุกซ์ และระบบ command line กันอย่างคร่าวๆ แล้ว ในฉบับนี้เรามาทำความรู้จักกับโครงสร้างของระบบไฟล์ในลินุกซ์ กันต่อนะครับ


โครงสร้างของระบบไฟล์ในลินุกซ์เป็นระบบแบบลำดับชั้น โดยเริ่มต้นที่ระดับชั้นสูงสุดคือ root ซึ่งมีสัญลักษณ์เป็นเครื่องหมาย / (slash) ซึ่ง root จะมีลักษณะเหมือนโฟลเดอร์หรือห้องเก็บข้อมูลที่มีขนาดใหญ่มาก ทุกสิ่งทุกอย่างของระบบลินุกซ์จะอยู่ภายไต้ root ทั้งหมดไม่เพียงแต่ไฟล์เท่านั้น ยังรวมส่วนติดต่อกับอุปกรณ์ของเครื่องเราอีกด้วย แต่ว่าโดยปกตินั้นผู้ใช้ทั่วไปไม่สามารถเข้าไปแก้ไข ไฟล์ หรือ โฟลเดอร์ ภายไต้ root ได้ นอกจากผู้ดูแลระบบ (administrators) หรือที่เรียกย่อๆ ว่าแอดมิน เท่านั้น


หลายคนคงสงสัยแล้วแอดมินคือใครและมาจากที่ไหนกันละ โดยเริ่มแรกระบบ Unix ซึ่งเป็นต้นแบบของลินุกซ์นั้นสร้างขึ้นบนเครื่องที่ใหญ่มาก เพื่อรับรองระบบผู้ใช้หลายคน (multi-users) ซึ่งแต่ละคนจะมีชื่อเข้าใช้และสิทธิในการใช้งานไม่เหมือนกัน และสามารถเข้าใช้งานจากที่ใดก็ได้ ที่สามารถเชื่อมต่อกับเครือข่ายได้ ผู้ใช้ทั่วไปจะใช้งานระบบได้แต่จะถูกห้ามไม่ให้สามารถแก้ไขค่าต่างๆ ของเครื่องและของระบบได้เพื่อความปลอดภัย จึงต้องผู้ที่มีความรู้ เชี่ยวชาญเข้ามาดูแลระบบนั่นเอง โดยทั่วไปผู้ดูแลระบบจะได้ชื่อเข้าใช้งานเป็น root ด้วย ซึ่งรายละเอียดเกี่ยวกับระบบผู้ใช้งาน จะกล่าวโดยละเอียดในตอนหน้านะครับ ในปัจจุบันลิกนุกซ์ถูกพัฒนาขึ้นจนสามารถนำมาติดตั้งบนเครื่องส่วนตัวได้ ซึ่งผู้ดูแลระบบบนเครื่องเราก็คือผู้ติดตั้งระบบบนเครื่องเรานั่นเอง


คงต้องมาเริ่มเนื้อหาในบทนี้กันแล้วนะครับ อย่างที่สัญญากันไว้ในบทที่แล้ว เราจะมาลองใช้ command line มาท่องระบบไฟล์บนเครื่องของเรากันนะครับ เริ่มเปิด Terminal กันเลยครับ หวังว่าทุกคนคงยังไม่ลืมนะครับ เมื่อเราเปิดขึ้นมาแล้วจะพบเครื่องหมายพร้อม $ (dollar sign) แล้วมีข้อความอยู่ข้างหน้าเครื่องหมาย พร้อมทั้ง cursor ซึ่งกระพริบอยู่ข้างหลังรอคอยคำสั่งจากผู้ใช้อยู่ ซึ่งมีอธิบายอย่างคร่าวๆ ไว้ในฉบับที่แล้ว แต่วันนี้เราจะมาเจาะลึกในรายละเอียดกัน ซึ่งข้อความที่อยู่ข้างหน้านั้นจะต่างกันออกไปขึ้นอยู่กับการตั้งค่าของระบบ จะมีหรือไม่มีก็ได้ หากผู้ใช้เลือกติดตั้งระบบปฏิบัติการที่เป็นที่นิยมมักจะตั้งค่าไว้คล้ายๆ กัน โดยทั่วไปจะแสดงถึงข้อมูลของผู้ใช้ ในที่นี้คือ natapol ซึ่งเป็นชื่อผู้ใช้ของผู้เขียนเอง ถัดจากนั้นเป็นเครื่องหมาย @ (at sign) ซึ่งมีความหมายคล้ายกับคำว่า "อยู่ที่" ถัดจากนั้นจะเป็นชื่อเครื่อง ซึ่งในที่นี้คือ oo-banana ซึ่งเป็นชื่อเครื่องที่ถูกตั้งไว้ขณะติดตั้งระบบ ถัดจากนั้นจะเป็นการบอกตำแหน่งของเราในระบบไฟล์ขณะที่ ในที่นี้คือ เครื่องหมาย ~ () ซึ่งเป็นเครื่องหมายแทน home ของผู้ใช้นั่นเอง home จะเปรียบเสมือนบ้านของผู้ใช้เมื่อผู้ใช้เข้าระบบ (ในที่นี้หมายถึงเปิด Terminal) ผู้ใช้ทุกคนจะไปเริ่มต้นที่นี่เช่นเดียวกันทุกคน ใน home นั้นผู้ใช้มีสิทธิ์เต็มที่ที่จะทำอะไรก็ได้ ติดตั้งอะไรก็ได้ แต่ไม่สามารถเข้าไปดู home ของคนอื่นได้ครับ บ้านของใคร ใครก็หวงครับ ผู้ใช้ทุกคนจะมีโฟลเดอร์ส่วนตัวนี่โดยมีชื่อเดียวกับชื่อผู้ใช้ในที่นี้จะเป็นชื่อผู้ใช้ของผู้เขียน และส่วนใหญ่จะอยู่ภายไต้โฟลเดอร์ที่ชื่อ home อีกที แต่ตอนที่เปิด Terminal ขึ้นมานั้นระบบแสดงเป็นสัญลักษณ์ ~ ระบุว่าเราอยู่ที่ home เท่านั้น แต่จริงๆ แล้วเราอยู่ที่ไหนกันแน่ละครับ เนื่องจากผู้ดูแลระบบสมารถกำหนดตำแหน่งของ home ได้เองดังนั้นในลินุกซ์บางระบบจะมีตำแหน่งของ home ที่แตกต่างกันได้ ในกรณีนี้มีคำสั่งที่ช่วยเราได้ (ในที่สุดก็เริ่มตำสั่งแรกเสียที) คือ คำสั่ง pwd ซึ่งย่อมาจาก (Print Working Directory) เมื่อพิมพ์คำสั่งแล้วเคาะ ระบบจะแสดงตำแหน่งที่อยู่ปัจจุบันของเรามาให้เห็นดังในตัวอย่าง คือ


[natapol@oo-banana ~]$ pwd

/home/natapol


เมื่อใช้คำสั่งนี้ ระบบจะรายงานตำแหน่งปัจจุบันขอเราออกมาในรูปแบบเต็ม คือเริ่มต้นจาก root ของบางคนอาจจะแตกต่างกันไม่ต้องตกใจนะครับ ถัดจากนี้เราลองมาสำรวจ home ดูดีกว่าว่ามีอะไรอยู่บ้างโดยใช้คำสั่ง ls (List)


[natapol@oo-banana ~]$ ls

text1.txt


คำสั่งนี้จะสั่งให้ระบบรายงานชื่อไฟล์ออกมา ในตัวอย่างจะมีเพียงไฟล์เดียวคือ text1.txt แต่บางคนอาจจะไม่มีอะไรรายงานออกมา ยังไม่ต้องตกใจ นั่นแสดงว่าบ้านของผู้อ่านยังสะอาด และ ว่างอยู่นั่นเอง แต่จริงๆ แล้วมันไม่ได้ว่างอย่างที่คิดหรอกครับ ลองมาพิมพ์คำสั่งนี้ดูนะครับ


[natapol@oo-banana ~]$ ls -la

total 692

drwxr-xr-x 52 natapol natapol 4096 Dec 20 16:18 .

drwxr-xr-x 3 root root 4096 Aug 24 10:51 ..

-rw------- 1 natapol natapol 10053 Dec 17 11:00 .bash_history

-rw-r--r-- 1 natapol natapol 220 Aug 24 10:51 .bash_logout

-rw-r--r-- 1 natapol natapol 3184 Aug 24 10:51 .bashrc

drwx------ 2 natapol natapol 4096 Oct 27 21:35 text1.txt


หลังคำสั่ง ls เราเรียกส่วนนี้ว่า option หรือ parameter ก็ได้ครับ option ในลินุกซ์มักจะขึ้นต้นด้วย (-) เสมอ บางทีก็เป็น (–-) ถ้าเป็น option แบบยาวในที่นี้เราใส่สอง option ต่อกัน คือ –l และ –a


-l จะสั่งให้ระบบรายงานชื่อและข้อมูลของไฟล์ที่มีอยู่ในโฟลเดอร์ปัจจุบัน แบบยาว

-a จะสั่งให้ระบบรายงานชื่อและข้อมูลของไฟล์ทั้งหมดออกมาโดยไม่มีข้อยกเว้น


จากผลที่ได้ หนึ่งบรรทัดคือข้อมูลของไฟล์หนึ่งไฟล์ คั่นแต่ละข้อมูลด้วยเคาะว่าง โดยเริ่มต้นจาก ส่วนแรก จะระบุถึงชนิดของไฟล์ และสิทธิ์ในการเข้าถึงไฟล์นั้นๆ ในรายละเอียดเราจะพูดถึงในคราวต่อๆ ไปนะครับ เราจะทำอะไรกับไฟล์นั้นได้ภายไต้สิทธิ์เท่านั้น ยกเว้น root ครับที่สามารถทำได้ทุกอย่าง ถัดมาเป็นจำนวนของ hard link ที่เกิดขึ้นซึ่งเป็นรายละเอียดทางเทคนิคค่อนข้างมากและไม่ค่อยเกี่ยวข้องกับผู้ใช้ทั่วไปเท่าไรนักคงต้องขอไม่พูดถึงนะครับ ถัดไปจะเป็นผู้ใช้ กลุ่มผู้ใช้ ขนาดของไฟล์ วันที่ที่แก้ไขครั้งสุดท้าย เวลา และชื่อไฟล์ ตามลำดับ


ผู้อ่านคงจะสังเกตุเห็นว่ามีไฟล์แปลกๆ ถูกรายงานเพิ่มมาอีกดังในตัวอย่าง ซึ่ง ไฟล์ที่เป็น . และ .. ซึ่งเป็นไฟล์สมมติของระบบ ซึ่ง . จะหมายถึงโฟลเดอร์ปัจจุบัน ส่วน .. หมายถึงโฟล์เดอร์ที่อยู่สูงขึ้นไป ซึ่งก็คือ home นั่นเอง ผู้อ่านสามารถใช้สัญลักษณ์ทั้งสองนี้ในการอ้างถึงโฟลเดอร์ในคำสั่งอื่นได้ ส่วนไฟล์ที่เพิ่มมาอีกสามไฟล์นั้นจะขึ้นต้นด้วยจุดซึ่งระบบจะถือว่าเป็นไฟล์ที่ถูกซ่อนไว้ซึ่งส่วนใหญ่เป็นไฟล์ของระบบไม่ต้องการให้แสดงออกมาด้วยคำสั่งปกติ นอกจากนี้ ls ยังมี option อื่นๆ อีกมากมายผู้อ่านสามารถเรียกให้แสดงขึ้นมาได้ด้วยการเติม --help หลังคำสั่ง ซึ่งเกือบทุกคำสั่งจะใช้ option เดียวกันนี้ในการแสดงข้อความช่วยเหลือของคำสั่ง

[natapol@oo-banana ~]$ ls --help

Usage: ls [OPTION]... [FILE]...

List information about the FILEs (the current directory by default).

Sort entries alphabetically if none of -cftuvSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.

-a, --all do not ignore entries starting with .

-A, --almost-all do not list implied . and ..

--author with -l, print the author of each file

-b, --escape print C-style escapes for nongraphic characters

--block-size=SIZE use SIZE-byte blocks. See SIZE format below

.

.

.


ในตัวอย่างจะแสดง option ต่างๆ ของคำสั่ง ls ซึ่งผมได้ตัดมาเฉพาะส่วนแรกๆ เท่านั้น ผู้อ่านลองใช้ option อื่นของคำสั่งนี้ดูนะครับ ยังมี option อื่นที่น่าสนใจอีกมาก ถ้าหากต้องการคู่มือใช้งานซึ่งจะให้รายละเอียดที่มากกว่าข้อความช่วยเหลือละก็ ลินุกซ์ก็มีคำสั่งแสดงคู่มือขึ้นมาโดยใช้คำสั่ง man (manual) ตามด้วยคำสั่งที่เราต้องการในที่นี้คือ ls ครับดังในตัวอย่าง


[natapol@oo-banana ~]$ man ls


หลังจากกด แล้วระบบจะแสดงคู่มือหลายหน้าขึ้นมาผู้อ่านสามารเลื่อนไปมาได้ด้วยปุ่มขึ้น และลง หรือถ้าต้องการเลื่อนทีละหน้าก็ใช้ page up และ down หรือ space bar ได้ครับ


ในฉบับนี้เราก็ได้เริ่มสำรวจบ้านเราเป็นที่เรียบร้อยพร้อมกับคำสั่งสามคำสั่ง ถ้าหากผู้อ่านลองใช้คำสั่งแล้วมีคำถามก็สามารถส่งผ่านทางกองบรรณาธิการได้นะครับ ในฉบับหน้าเราจะขยับขยายไปสำรวจส่วนอื่นๆ กันบ้างนะครับ

No comments:

Post a Comment