Showing posts with label file(1). Show all posts
Showing posts with label file(1). Show all posts

Thursday, February 26, 2009

ไกลปืนเที่ยง : FreeBSD --> file permissions

วันนี้ ขอเสนอ เรื่องพื้นมากมาก หลายท่าน น่าจะผ่านไปได้ แต่กับมือใหม่ทาง unix หรือ FreeBSD น่าจะมีประโยชน์อยู่

เรื่องที่ว่านี้ ก็คือ binary digits หรือ เลขฐาน ๒ หรือ bits ที่มีแต่ 0 กับ 1 เท่านั้นเอง ง่ายเน้าะ

เรามาดูว่า ๑ บิท จะมีค่าอะไรได้บ้าง ก็แค่ 0 กับ 1 ก็ให้นึกว่า ปิดไฟแสงสว่าง กับ เปิดไฟแสงสว่าง ก็แล้วกัน เปรียบเทียบให้เห็นเป็นตัวอย่างง่ายๆ

แล้ว ๒ บิท ก็จะมีค่า ตั้งแต่ 0 ถึง 3 ดังนี้น่ะ

00 = 0
01 = 1
10 = 2
11 = 3

ขอให้สังเกตุค่าต่างๆของเลขฝั่งขะซ้ายมือไว้ด้วย มันสวย เป็นระเบียบดี

ทีนี้ ๓ บิท หละครับ จะมีค่าจากไหน ไปถึงไหนมั่ง ลองๆนึกดูซิ

000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7

อีกครั้งหนึ่ง ที่ใคร่ขอแนะให้สังเกตุ และ จำ pattern ของกลุ่มเลขฐาน ๒ นี้ไว้ด้วย มัน สวย และ เป็นระเบียบดี และ เป็น ประโยชน์ ด้วย

อ้อ ยังคงใช้ได้น่ะ ที่ว่า ถ้าเป็น 0 คือ ปิด ถ้าเป็น 1 คือ เปิด

เอาล่ะ เรามา เล่น อะไรกันสนุกสักนี้ดหนึ่งน่ะ ในกลุ่ม ๓ บิท นั้น เราแทนตำแหน่ง จากซ้ายไปขวา ด้วย rwx ตามลำดับไป ดังนี้

rwx


แล้วให้ลองกำหนดว่า ถ้าอันไหน เปิด ให้เป็น 1 อันไหน ปิด ให้เป็น 0 ลองดูน่ะครับว่า ถ้าเป็น 755 ละครับ ลองเขียนออกมาเป็น pattern ซิ จะเป็นอะไร, อ้อ ต้องสามกลุ่มน่ะ พักดื่มกาแฟรามัญ เกาะเกร็ด
แล้วทีนี้ ลองอีกเที่ยว โดยถ้าว่า อันไหน เปิด ให้ใช้ตัวอักษร ตัวนั้นไปเลย ไม่ต้องใช้เลขแล้ว ส่วนอันที่ ปิด ให้ใช้ ขีดขวาง - แทนเอา
ลองกับ 755 ดูว่า pattern เป็นยังไง
ลองดูซิว่า ถ้าเป็น rw-r--r-- จะ ได้เลขอะไร

เราพักกันตรงนี้ สักครู่น่ะ


หลวงปู่ขาว วัดพระบาทภูพานคำ
ม้ะ...เรามาไปกันต่อไป
ก็ไม่แน่ใจเหมือนกันว่า ที่ปล่อยให้ท่านได้พักนั้น ท่านจะพักจริง หรือว่่ามัวแต่ครุ่นคิด จนไม่ได้พักกันแน่ หากเป็นกรณีหลัง มะไฟ คงสร้างบาปกรรมขึ้น หวังว่าคงไม่ใช่น่ะ แลที่ว่า ๓ กลุ่ม นั้น ก็คงจะเข้าใจน่ะครับว่า หมายถึง กลุ่มของเลข ๓ บิทส์ ๓ กลุ่ม ซึ่งผลก็คือ เลข ๙ บิทส์ นั่นเอง
rwxrwxrwx
อย่างกับว่า ที่ว่า 755 นั้น เมื่อถอดออกมาก็ได้
rwxr-xr-x
และ ที่ทิ้งไว้ช่วงแรก rw-r--r-- นั้น เมื่อถอดออกมาเป็นเลข ๓ กลุ่ม กลุมล่ะ ๓ บิทส์ ก็คือ
644
โดยที่ 6 ตัวแรกซ้ายมือสุดนั้น ก็คือ ๓ บิทส์แรกที่มีค่าเป็น 110 ซึ่งสอดคล้องกับ สวิตช์ไฟ ๓ ตัวคือ rwx นั่นเอง แต่ ตัว x นั้นอยู่ในสถานะ ปิด จึงใช้ขีดขวาง - แทน ผลจึงได้เป็น rw- และ เลข 4 ตรงกลาง ก็มีกลุ่ม ๓ บิทส์ มีค่าเป็น 100 ซึ่งเมื่อเทียบกับ สวิตช์ไฟ ๓ ตัวแล้ว ก็ได้ผลเป็น r-- นั้นเอง

ก็คงไม่มีปัญหากับ 4 ตัวสุดท้ายตรงตำแหน่งขวาสุด และคงกระจ่างว่า ทำไม rw-r--r-- จึงมีค่าเป็น 644

ทำไมต้อง ๓ กลุ่ม และความหมายของ r, w, x คืออะไร ได้เคยบอกไว้แล้วใน FreeBSD: file ในที่นี้ ใคร่ขอเน้นให้เชื่อมโยงเลขฐานสอง กับความหมายต่างๆ ที่ใช้งานในชีวิตประจำวัน เป็นเบื้องต้น

ในตอนต้น ที่บอกให้จำ ความสวยงาม ความเป็นระเบียบ นั้นก็มีเหตุอยู่น่ะ คือกลุ่มบิทส์ ตั้งแต่ ๒ บิทส์ ๓ บิทส์ ที่ยกตัวอย่างมาน่ะ น่าจะจับ กระสวน ของบิทส์ได้ ให้ลองเอาเองว่า ถ้าเป็นกลุ่ม ๔ บิทส์บ้าง pattern ของบิทส์ จะเป็นอย่างไร

อีกอย่างหนึ่ง ที่อยากให้คิดต่อคือ ในกลุ่ม ๒ บิทส์ ค่าที่ได้ มีตั้งแต่ ๐ ถึง ๓ รวมเป็น ๔ ค่า ในกลุ่ม ๓ บิทส์ ค่าที่ได้มีตั้งแต่ ๐ ถึง ๗ รวม ๘ ค่า แล้ว ในกลุ่ม ๔ บิทส์หละ สมควรเดาออกได้น่ะครับ ในกลุ่ม ๓ บิทส์นั้น ทำให้เราได้สัมผัสกับเลขฐานแปด, octal, ไปโดยไม่รู้ตัว

ดังนี้แล้ว ถ้าเราจะมอง file permission เป็นเลข octal ก็จะทำให้ทำงานได้ง่ายขึ้น สะดวกขึ้น และ รวดเร็วขึ้นด้วย

การเปลี่ยน permission เราเรียกว่า เป็นการเปลี่ยน mode และ คำสั่งที่เกี่ยวข้องคือ chmod(1) และการกำหนดให้ใครเป็น owner นั้นกระทำโดยคำสั่ง chown(1)

หวังว่า ข้อเขียนเกี่ยวกับเรื่องของ แฟ้ม จะพอมีสาระ มาบ้าง และก็หวังว่า คงช่วยให้ท่านได้ทำงาน หรือ ใช้งาน FreeBSD ได้คล่องขึ้น

Wednesday, January 28, 2009

FreeBSD: file

งวดนี้ ใคร่ขอเสนอเรื่องราวของ แฟ้ม หรือ file แต่พอให้ได้ไอเดีย ว่าแฟ้มคืออะไร มีอะไรอยู่ในแฟ้ม ความหมายของคำว่า เจ้าเข้าเจ้าของ หรือ การได้รับอนุญาตให้ใช้งานแฟ้ม พวกนี้เป็นเบื้องต้นก่อน

อะไรคือแฟ้ม
แฟ้ม คือลำดับของ byte หรือ คำ ในภาคภาษาไทย ส่วนที่ว่า คำ ในแฟ้มจะมีความหมายอะไร อย่างไร นั้น ตัวโปรแกรม ที่อ่าน หรือ ใช้ แฟ้มนั้นเองต่างหากจะเป็นผู้ที่รู้ หรือ เข้าใจดีที่สุด

พาย จอมใจ


การที่จะรู้จัก ต้องทดลองเอง เหมือนอย่างกับว่า เขาถามว่า เกลือมันมีรสเค็ม เค็มยังไง ก็ต้องตอบว่า ให้ไปกินเกลือดูเองซี ถึงจะรู้จักรสเค็ม ฉันไดก็ฉันนั้น ท่านต้องทดลอง เล่น กับแฟ้มดูสักระยะ ซึ่งในการนี้ ท่านสมควรหาเครื่องมาไว้เพื่อใช้งานด้วย จะดีกว่าไปขอมี account กับระบบ แต่ถ้าหาเครื่องยากนัก การมี account สัก ๑ ที่ก็ไม่เลวนักหรอก

เอาเป็นว่า ท่านสามารถใช้ FreeBSD ได้ตามใจก็แล้วกัน เน้าะ

สิ่งแรก ที่อยากให้ท่านทดลองก็คือ คำสั่ง file ลองดูน่ะครับ
# file  /bin /bin/ed /bin/pwd
ตามนี้เลยน่ะ แต่ถ้าตัวหนังสือมันไม่เอียง ก็ไม่ต้องตกใจไปหรอก ไม่ต้องเอียงตามหรอกน่า อ้อ ถ้าท่านไม่รู้ว่า file คืออะไรก็ง่ายๆน่ะ เหมือนเดิม file(1)
ที่อยากให้ดูช่วงนี้ คือ ความแตกต่างของผลลัพธ์ที่ได้ ผลลัพธ์จากคำสั่งที่ท่านใช้นั่นแหละครับ บรรทัดแรก บอกว่า directory สองบรรทัดสุดท้าย เป็นแต่ข้อความยาวๆ เข้าใจยาก แต่เรารู้ว่าเป็น โปรแกรม และ แน่นอน เป็นแฟ้ม แฟ้มหนึ่ง ซึ่งจากนี้ เราสรุปว่า
  • โปรแกรม ก็คือแฟ้ม
  • directory ก็คือ แฟ้ม
เอาล่ะครับ ลองดูอีกเที่ยวละกัน
# date  >> ~/junk
จากนั้น อีกหนหนึ่งน่ะ
# file  /bin /bin/ed /bin/pwd ~/junk
ยังต้องให้อธิบายอะไรอีกมั้ยครับ สังเกตุเองน่ะ ว่า ความแตกต่าง ของผลลัพธ์ เป็นอย่างไร
มาดูกันต่ออีกนิดหนึ่งน่ะ ทำตามไปก่อนน่ะ
# echo #\!/bin/sh > junk1
# echo set -x >> junk1
# file  /bin  /bin/ed  /bin/pwd  ~/junk  junk1
สังเกตุเห็นอะไรจากผลลัพธ์เพิ่มเติมไหมครับ
มาต่อกันน่ะ
ไหมพรม ฟ้าลำพูน

จากตัวอย่างที่ผ่านมา ท่านสมควรทราบได้แล้วว่า แฟ้ม พอจะแยกชนิดได้อยู่บ้าง เรามาดูกันต่อไปซิว่า devices หรืออุปกรณ์ประกอบต่างๆนั้น เป็น แฟ้ม ชนิดใด ลองดูน่ะ
# file /dev/ad0s1
หวังว่ายังคงจำ /dev/ad0s1 กันได้อยู่น่ะครับ

ทีนี่ เรามาดูต่อว่า ในเรื่องของแฟ้ม(files) นี่ นอกจาก ชนิด ที่สามารถดูได้จากคำสั่ง file(1) แล้ว ยังมีเรื่องของ สิทธิ หรือ permission ที่สมควรจะรู้ไว้เป็นเบื้องต้นด้วย ซึ่งในเรื่องของ permission นี้ ใคร่ขอให้มองว่า แฟ้มของเรานั้น บางแฟ้ม เราไม่อยากให้ใครอ่านเลย แต่ บางเรื่องที่เก็บในแฟ้ม เราอยากแชร์ให้กับเพื่อนร่วมก๊วนได้ทราบด้วย ก็มี
ซึ่งในการนี้เอง ก็ทำให้เกิดมีการแบ่งแยกผู้ใช้ออกเป็น ๓ พวกใหญ่ๆคือ เราเอง หนึ่งล่ะ กับ กลุ่ม อีกหนึ่งล่ะ และ คนอื่น อีกหนึ่งล่ะ ซึ่งทุกแฟ้ม(files) จะมีรายละเอียดของ permission ของผู้ใช้งาน เรียงตามลำดับดังนี้
user group other
ก็แล permission หรือ สิทธิ ที่ว่านั้นก็มี อ่าน เขียน ทำงาน อย่างนี้
read อ่านได้
write เขียนได้
execute สั่งให้ทำงานได้
โดยที่ในแต่ละประเภทของผู้ใช้ เขาจะเรียง permission ไปเป็น อ่านเขียนสั่ง ในลำดับนี้ไปทุกประเภท ดังนี้

-rwxrwxrwx

เจ้าตัวขีด - ที่อยู่ซ้ายสุดนั้น อย่าคิดว่าเป็นรอยเปื้อนจากการพิมพ์น่ะ เป็นขีด - จริงที่เจตนามีไว้ เพราะมันแทน ชนิด ของแฟ้ม(files) ที่ได้กล่าวมาก่อนหน้านี้ยังไงล่ะ ซึ่งก็มีพวก directory, ordinary file, special file ประดานี้ซึ่งก็จะมีสัญญลักษณ์แทนพอสรุปได้บ้าง ดังนี้
ถ้าเป็น ขีด - ก็แทนแฟ้มธรรมดาๆ
ถ้าเป็นตัวดี d ก็แทน directory
ถ้าเป็นตัว c หรือ อย่างอื่น ก็แทน special file

อนึ่งเจ้าตัว rwx นั้น ถ้าตัวไหนไม่ได้รับ สิทธิ มันก็ว่างไปโดยใช้ขีดเปล่าๆแทน เช่นอย่างกับว่าในกลุ่มเพื่อนเรา กับ คนอื่นด้วยนั้น เราอนุญาตให้เพียงอ่านได้เท่านั้น ดังนี้แล้ว permission ก็จะเป็น

-rwxr--r--

คงพอได้แนวความคิดบ้างน่ะครับ อ้อ มีทิปให้นิดหนึ่ง คือเจ้าตัว r w x เนี่ย เท่าที่บอกไปว่า ถ้าไม่ได้รับสิทธินั้นๆ ให้แทนด้วยขีด ไป ที่นี้ เรามาขยายความต่อไปว่า ถ้า ได้รับสิทธิ ให้แทนด้วย 1 ถ้าไม่ได้รับสิทธิ ให้แทนด้วย 0 แล้วให้มองกลุ่ม rwx เป็นเลขฐานแปด จากตัวอย่างข้างต้น permission ก็จะแปลงร่างอีกโฉมเป็น

-744

คุ้นๆกันบ้างไหมครับ ลองดูอีกนี้ดนึงซี อาจจะกระจ่างขึ้นมาได้บ้าง น่ะ

# ll junk1

คงแยกออกน่ะ ระหว่างเลข 1 กับตัว l

ขอยุติเรื่องราวของแฟ้ม(files)เบื้องต้นไว้แต่เพียงเท่านี้ก่อน หากจะมีคุณงามความดีอันใดบ้าง ก็ขอยกให้กับ กุสุมา ศรีโยธา เมียที่เสียชีวิตไปเมื่อวันที่ ๑ กพ ๒๕๓๗ โน้น พร้อมกับเพื่อนร่วมเดินทางอีก ๖ ท่าน แล หากขาดตกบกพร่อง หรือ ขัดเคืองประการใด มะไฟ ขอน้อมรับไว้แต่โดยดี โดยผู้เดียว


View My Stats