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

Thursday, August 6, 2009

ไกลปืนเที่ยง: FreeBSD ---> command(3) (ต่อ)

ขอต่อจากตอนที่แล้วน่ะครับcommandsไม่อยากให้เลขตอนมันมากโดยไม่จำเป็น เลย เพียงแค่ เพิ่ม (ต่อ) ต่อท้าย เพราะอีกแง่มุมหนึ่ง ก็เป็นเรื่องต่อเนื่องจากตอนก่อน

mkdir

อันคำสั่งนี้ ที่ยกมานำเสนอ เป็นที่รู้จักคุ้นเคยกันดีอยู่แล้ว แต่ ที่ใคร่จะชี้ให้เห็นในคราวนี้ ก็เปน command options ต่างๆที่อาจจะแปลก ใหม่ สำหรับบางท่านเท่านั้น

คำสั่งนี้ จะ สร้าง สาระบบแฟ้ม ที่มีชื่อตามระบุไว้ตามลำดับไป ด้วย permission 'rwxrwxrwx' ที่จะถูกปรับแต่งทีหลังด้วยค่าของ umask ในกรณีที่ไม่กำหนด permission ให้กับคำสั่ง อนึ่ง ผู้ใช้ ต้องมี write permission ใน parent directory เพื่อใช้งานคำสั่งนี้

path สำหรับคำสั่ง ในกรณีที่ท่านต้องเรียกใช้งานจาก shell คือ /bin/mkdir

ไวยากรณ์คำสั่งคือ

mkdir [-pv] [-m mode]   directory_name ...

ที่ใคร่ขออนุญาตชี้แนะ ในกรณีนี้ คือ command option -p ซึ่งอนุญาตให้เราสร้าง directory ได้จาก ส่วนประกอบ ที่ แม้จะยังไม่ได้สร้างขึ้นมา ตัวอย่างเช่น ~/public_html/erp/config ซึ่งโดยปกติแล้ว การที่จะสร้าง config มาได้นั้น ต้องมี ~/public_html และ ~/pubcli_html/erp มาก่อน แต่กับ option นี้ สามารถ สร้างได้เลยในคราวเดียว แม้ส่วนที่ยังไม่สร้าง ก็จะสร้างให้ด้วย

command option   -m  mode นั้น ก็ไม่ยากแก่การคาดเดา เป็นการกำหนด permission mode แรกเริ่มให้ แทนที่จะใช้ 0755 ตามที่ระบบกำหนดให้เท่านั้นเอง

ไหนไหนก็ไหนไหน, ภาษาอังกฤษจากเพื่อนๆเธอบอกว่า แวแวอีส เอะ แวแว ก็มาจาก where where is a where where ตรงๆแหละ, ก็บอกแล้ว คำสั่งที่ตรงข้ามก็ได้แก่ rmdir(1) และคู่ ของคำสั่งนี้ก็คือ chdir(1)

ในการใช้งาน FreeBSD นั้น พี่พี่ท่าน สมควรได้ สัมผัส กับคำสั่งนี้ และ คู่ ของเขาอยู่มากกว่า ก็ขอยกมาให้ทราบไว้ก่อน รับรอง แค่การเตรียมการ ก่อนการใช้งาน GRASS ก็ได้ใช้แล้ว

อีก ๒ คำสั่ง ที่สมควรรับทราบไว้ ได้แก่ chmod(1) เอาไว้เปลี่ยน permission mode กับ chown(1) เอาไว้เปลี่ยนเจ้าของ เปลี่ยนกลุ่ม

แหม ซีงิต จริง ทำได้ยังงี้ก็ ...

มะไฟ เล็งเห็นแล้วว่า คำสั่งในชุดแรกที่ยกมานั้น ต้องได้ใช้งานแน่แน่ จึงคัดสรรค์มาเป็นพิเศษ มานำเสนอก่อนอื่น ต่อไป จะเป็นเรื่องที่เกี่ยวข้องกับ FreeBSD จริงๆซะที

Fri Aug 7 11:33:25 ICT 2009

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 ได้คล่องขึ้น

Monday, June 23, 2008

shell

ขอเอ่ยถึงเรื่องของ shell สักเล็กน้อย ไม่งั้นไม่ได้ชื่อว่าเล่น unix แลเมื่อเอ่ยถึง shell แล้วก็หนีไม่พ้น Bourne shell (sh)

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

sh เป็นทั้ง command interpreter ที่ท่านต้องใช้ เมื่อท่านเข้าสู่ single user mode และ programming language ที่สามารถทำให้ท่านเขียน script สั้นๆเพื่อ แบ่งเบา งานซ้ำซากสำหรับท่านได้

ข้อเขียนวันนี้ ขอนำเสนอในแง่หลัง ทั้งนี้เพื่อใช้ประกอบกับเรื่องของ ports(1) ที่ได้เสนอไปก่อนหน้านี้

sh เป็นแฟ้มเอกสารพื้นๆ จึงสะดวกที่ท่านสามารถใช้ vi หรือ plain text editors ยอดนิยมของท่าน มาเตรียมขึ้นโดยง่าย ในการเขียน sh script นั้นมีหลักยึดง่ายๆเลย คือ ให้เขียนไปทีละบรรทัด ทดสอบไปทีละบรรทัด ก็ดูง่ายๆ ตรงไปตรงมาดี โดยเริ่มต้นที่

#!/bin/sh


ขอยกตัวอย่างง่ายๆอันเป็นที่นิยมยกมาคือ Hello, world ซึ่งโดยเนื้อแท้แล้วก็ไม่มีอะไร นอกจากสั่งให้ข้อความดังกล่าว ปรากฏที่หน้าจอ ฟังก์ชั่นนั้นคือ echo ก็ลองเรียก editor ยอดนิยมของท่านมา แล้วเตรียมเอกสารชื่อ myhello โดยมีรายละเอียดในแฟ้มนั้นดังนี้ ตามนี้เลยนะ, สีแดงๆ ไม่ต้องระบายให้หรอก

#!/bin/sh

echo Hello, world

เมื่อเสร็จแล้วให้สั่งต่อไปอีก ตามนี้นะ
# chmod +x myhello
พอเสร็จแล้วก็สั่งต่อไปซี น่านะ
# ./myhello
คงไม่ต้องบอกหรอกว่าผลลัพธ์คืออะไร

ความจริงแล้ว ฟังก์ชั่น echo นั้นไม่มีอะไรมากเลย เราเขียนอะไรตามหลังคำนั้น เขาก็เขียนอันนั้นออกมาที่ standard output แต่ก็ใช่ว่า อักขระ ทุกตัวจะสามารถแสดงออกมาได้ ถึงแม้จะเป็นอย่างนั้น หากเราต้องการ แสดงอักขระนั้นๆ ก็ย่อมทำได้ โดย ปิดคุณสมบัติ ของอักขระนั้นๆเสีย เราใช้ escape character ปิด คุณสมบัติพิเศษต่างๆ
ตัว escape character นั้นได้แก่ \
ค่อยๆเรียนรู้ไปทีละตัวว่า อะไรแสดงได้โดยตรง อะไรต้องการ escape character
ลองพิมพ์ข้อความต่อไปนี้บนหน้าจอของท่านดูซิ

# echo #\!/bin/sh
# echo set -x
# echo

คงคุ้นๆกันอยู่กระหมั่งหนา และโปรดสังเกตุด้วยว่า ! นั้นต้องใช้ escape character เข้ามาช่วย เพื่อให้แสดงผลเป็น ! จริงๆ เพราะความหมายแท้จริงของเขาใน shell นั้นคือ negate
ทีนี้ แทนที่เราจะให้แสดงผลที่หน้าจอ เราก็ให้เก็บไว้ในแฟ้มใดแฟ้มหนึ่ง โดยวิธีที่ง่ายๆ สำหรับแฟ้มเล็กๆ (หรือแม้กระทั่งแฟ้มใหญ่ๆ ก็ยังคงใช้วิธีนี้ได้เช่นกัน)

# echo #\!/bin/sh > pkgs
# echo set -x >> pkgs
# echo >> pkgs

หากท่านอยากทราบว่า ข้อความดังกล่าว จะมีอยู่ในแฟ้ม pkgs หรือไม่ ก็สามารถทำได้ง่ายๆ ด้วยคำสั่ง cat โดยมิถึงกับต้องเรียก editor แต่อย่างไรเลย

# cat  pkgs

อนึ่ง หากท่านต้องการให้แฟ้มนี้ สามารถ ทำงานได้ ท่านต้องกำหนด permission ให้เป็น +x ด้วยคำสั่ง chmod ดังนี้

# chmod   +x  pkgs

เพียงเท่านี้ ท่านก็สามารถสร้าง shell ขึ้นมาใช้งานได้ง่ายๆ
ทิ้งท้ายด้วยคำถามชวนคิด จากเอกสารเรื่อง ports(1) ขอถามว่าคำสั่ง find ... นั้น แท้จริงทำอะไร ใครตอบได้ถูกต้อง มีรางวัลให้ก็แล้วกัน

Thursday, June 19, 2008

ports(1)

ขออนุญาตเพิ่มเติมในเรื่องของ ports สักหน่อยเถอะ เพราะรู้สึกว่า ไม่พอใจกับสิ่งที่เขาทำไว้หนะ ก็แหม คน ที่ไม่ใช่ ฅน ก็ยังงี้แหละ

เรื่องที่ไม่พอใจก็ส่วนที่สร้าง packages ที่เราได้จากการลง port นั้นๆ เท่านี้แหละ ที่ไม่ค่อยจะพอใจน่ะ เพราะเหตุว่า เวลาที่อยากเก็บ packages ทั้งหมดที่ได้จากคำสั่ง

# make install

ซึ่งพอเราสั่ง

# make package-recursive

แล้วมันมักจะทำ หรือ สร้าง packages มาหมดทุกตัว โดยไม่สนใจว่า packages อื่นที่เหลือนั้น สร้างมาก่อนหน้านี้แล้ว แบบว่า มันสร้างซ้ำอีกหนะ

อันนี้แหละ ที่ไม่พอใจ เพราะไม่อยากเสียเวลาไปสร้างซ้ำอีก มันนานนะ ไม่มีอะไรเลย

แล้วจะแก้ยังไง

จากความรู้ที่ว่า เมื่อเราลง ports นั้น มันจะสร้าง work directory ขึ้นมาด้วย และจะยังคงอยู่ ตราบเท่าที่เราไม่ลบทิ้งด้วยคำสั่ง

# make clean

อีทีนี้ ถ้าเราไปไล่สั่ง # make package ไปเสียทุกที่ มันก็จบ

เอาละ พอได้ไอเดียแบบนี้ ก็ลงมือทำเลย ง่ายแล้ว แต่ต้องเป็น root น่ะ ตามนี้น่ะ

# touch pkgs
# chmod +x pkgs
# echo #\!/bin/sh > pkgs
# echo set -x >> pkgs
# echo >> pkgs
# find /usr/ports -name work -type d -print | \
   sed  -e   's,/usr,cd /usr,'  -e   's,/work, \&\& make package,' >> pkgs

จากนั้น เราก็ลำบากเพียงสั่ง

# ./pkgs

สิ่งที่ต้องการ ก็บรรลุผลสมดั่งใจ
แล้วก็ อย่าลืมสั่ง clean ด้วยละ ไม่งั้นตัว work directory มันจะยังคงอยู่ และจะทำให้งวดต่อไป เราเองแหละที่ต้องทำซ้ำไปเสียเอง ส่วนที่ว่าจะสั่งให้เป็น make clean อย่างไร ไปคิดเอาเองน่ะ

ตัว shell script ที่อยู่ในแฟ้ม pkgs นั้นจะเปลี่ยนไป ตัวอย่างในกรณีที่ลง webmin ซึ่งต้องการ p5-Authen-SSLea แต่ว่าได้ลงไปแล้วโดย ports อื่น ผลที่ได้จึงมีเพียงเท่านี้


#!/bin/sh
set -x

cd /usr/ports/security/p5-Authen-PAM && make package
cd /usr/ports/sysutils/webmin && make package


ขอยกความดีใดๆ อันจะเกิดขึ้น แม้เพียงเล็กน้อยจากข้อเขียนนี้ให้กับ ไหมฟ้า ผู้ซึ่งดูแล มะขาม ก่อนเข้ารับการผ่าตัด ระหว่างการผ่าตัด หลังการผ่าตัด จนกระทั่งกลับมาทำงานได้ โดยไม่เห็นแก่เหน็ดเหนื่อยแม้แต่น้อย

ขอได้รับการขอบคุณอย่างมาก จาก มะไฟ ไว้ ณ ที่นี้ด้วย

View My Stats