Showing posts with label echo(1). Show all posts
Showing posts with label echo(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

Wednesday, August 5, 2009

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

ต้องขออภัยเพื่อนผองน้องพี่ ชาว FreeBSD ที่ห่างหายไปนาน

เรื่องที่นำเสนอวันนี้ เป็นคำสั่งที่จำเป็น สำหรับการใช้งานทั่วไปcommands รวมทั้ง command options ที่สมควรกำหนดไว้ก่อนเลย เพราะ FreeBSD นั้นทำงานในลักษณะของ multi users, multi programming ผลที่นึกไม่ถึงอาจเกิดขึ้น ตัวอย่างพื้นๆ คือการลบแฟ้ม เมื่อกดแป้นพิมพ์ Enter แล้ว ก็เป็นอันเลิกคิดที่จะ กู้แฟ้มนั้นกลับคืนมา ทั้งนี้ เพราะไม่มีทางทราบได้เลยว่า process ไหน ที่มาจับจอง inode ที่ว่างลงไปจากการที่เรา ลบแฟ้ม ทิ้ง การกำหนด -i , interactive option, เพื่อให้ผู้ใช้ สามารถหยุดยั้งคิดได้ จึงสมควรอยู่

อ้อ ขอทึกทักเอาว่า พี่พี่ต่างก็ใช้ csh , C shell, น่ะครับ สำหรับพี่พี่ที่ใช้ shell อื่นก็คงไม่มีปัญหา เพราะคงเข้าใจเรื่อง shell ที่ใช้ได้ดีพอควรแล้ว จะไม่ขอเขียนเรื่องของ shell ในนี้หละ

interactive mode

เพื่อให้เข้าใจว่า interactive mode นั้นเป็นอย่างไร อันดับแรก ก็ขอยกคำสั่ง ลบแฟ้ม มาให้ทราบก่อน ซึ่งเขามีรูปแบบ หรือ ไวยากรณ์คำสั่งแรกเริ่ม ดังนี้ ดูเอา จำเอาเน้าะ

rm filename

ก็อย่างที่เรียนให้ทราบแต่แรกแล้วว่า พอกด Enter ปุ้บ filename ก็หายวั้บไปเลย ซึ่งเราไม่ต้องการเช่นนั้น อย่างน้อย เราขอมีเวลายั้งคิดสักนิดหนึ่งก่อน เพราะ อาจเป็นไปได้ที่ ชื่อแฟ้ม มันใกล้เคียงกัน หรือสะดกชื่อแฟ้มผิดไป เช่น อยากลบแฟ้ม imid แต่ดันไปลบ imod ซึ่งสำคัญกว่า ถ้าใช้ interactive mode ก็จะเห็นข้อความที่จอ
remove imod ?
ขึ้นมา ก็ทำให้ทราบว่า เรากำลังจะลบสิ่งสำคัญออกไปน่ะ ยังดีกว่า พอกด Enter แล้วก็ ลบออกไปเลย ในกรณีนี้ ให้ตอบ n ไป แล้วกลับไปลบ imid ออกแทน

ใน interactive mode รูปแบบคำสั่งจะเป็นอีกอย่าง แบบนี้น่ะ

rm  -i   filename

กลุ่มคำสั่ง ที่ มะไฟ แนะให้ใช้งานใน interactive mode ก็มี rm ลบแฟ้ม, cp สำเนาแฟ้ม, mv โยกย้ายแฟ้ม

rm  -i   filename
cp  -i  src   dst
mv  -i  src   dst

alias

จากแนวคิดในเรื่อง interactive mode ทำให้เราต้อง เพิ่มการกดแป้นพิมพ์ ไปอีก ๓ เคาะ ไปเสียทุกครั้ง นับว่า ไม่สะดวกเลย แต่ csh เขามี facility ที่อำนวยความสะดวกให้ เรียกว่า alias ซึ่งเราสั่งซะทีเดียว ครั้งต่อไปที่เราเรียก ไม่ว่าจะเป็น rm mv หรือ cp ก็เท่ากับเราเรียก
rm -i
mv -i
cp -i

รูปแบบก็ง่ายๆ

alias rm    rm -i
alias cp    cp -i
alias mv    mv -i

~/.cshrc

การใช้บริการ alias ก็นับว่าสะดวกขึ้นมาก แต่ว่า เสียอยู่ว่า เราต้องมานั่งสั่งไปซะทุกครั้ง ที่ login เข้ามาทำงานนี่ซี บางทีที่ลืม ก็ทำเอาแย่ไปน่ะ

วิธีแก้ ก็มี โดยเอาคำสั่ง ที่แน่ใจ ว่า ต้องใช้งาน ทุกครั้งที่ login เข้ามาทำงาน นั้น อย่างของเราครั้งนี้ ก็พวก alias ทั้งหลาย ไว้ในแฟ้ม ~/.cshrc

แล้วเราจะแน่ใจยังไงว่า มันเป็นยังงั้นจริงๆ ?

วิธีตรวจสอบก็ง่ายๆ

alias

เท่านั้นเอง

ทำตามนี้ไปก่อนน่ะ มันเป็น ทริค สำหรับ เพิ่มข้อความ ทีละบรรทัด ต่อท้ายเอกสาร โดยไม่ต้องเรียก editor

% echo  alias  cp     cp  -i  >>  ~/.cshrc
% echo  alias  rm     rm  -i  >>  ~/.cshrc
% echo  alias  mv     mv  -i  >>  ~/.cshrc

แล้วก็ยังไม่ต้อง logout น่ะ แต่ให้สั่ง

% source  ~/.cshrc

แล้วลองสั่ง alias ดูซี อ้ออ้ออ้อ คงไม่เห็นความแตกต่าง ถ้าพี่ท่านทำ alias cp cp -i กับคณะ ไว้ก่อนหน้านี้แล้ว ถ้าเป็นยังงั้น ก็ให้สั่ง unalias ทั้งสามคำสั่งนั้นไปซะ ก่อนที่จะสั่ง source ดั่งว่า

/usr/share/skel/dot.cshrc

ดูเหมือนว่า จะมีประโยชน์ แต่ก็กับเราคนเดียวแหละน่อ จะให้ดี ให้มันเป็นยังงี้ทุกครั้ง ที่ เพิ่มผู้ใช้งานใหม่ เข้ามาในระบบเลยดีกว่า โดยไปแก้ที่แฟ้ม /usr/share/skel/dot.cshrc นี้เลย เพราะหน้าที่ของแฟ้มนี้คือ แปลงร่างเป็นแฟ้ม ~/.cshrc ให้กับผู้ใช้ในระบบนั่นเอง ที่เหลือ คงไม่ต้องแนะอะไรมาก สำหรับ แอ้ด เมืองมิน ที่เฉลียวฉลาด

ตั้งใจ จะเขียนเรื่องคำสั่งสักหลายๆคำสั่ง แต่พอเริ่มลงมือเข้า มันก็ลากไปเอง และ ไม่อยากให้ สายตาพี่พี่ล้า เลยต้องขอ น่ะ ขอยอ

ยอมีตั่ง
Wed Aug 5 17:42:19 ICT 2009

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

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