linux training in Thailand
| Home | Articles | Download | Free Linux Tips | Resources | Training | Web Link | Linux Training English|
| Courses | Schedule | Price & Promotion | Map | Customer Ref. | Instructors | Certification | FAQ | Registration Form |
สถาบันฯ ขอแจ้งปิดทำการระหว่างวันที่ 27 -31 กรกฏาคม 2558 และเปิดทำการปกติวันที่ 3 สิงหาคม 2558
We are on vacations 5 days in July 27-31, 2015 Please contract Line ID : nok_fly or e-mail : info@itdestination.com
ITDestination จะปิดปรับปรุงเว็บไซต์ ตั้งแต่วันที่ 7 - 9 มิถุนายน 2556
อาจจะทำให้ใช้งานไม่ได้ในบริการ Webboard Freetips และ E-Learning จึงขออภัยในความไม่สะดวกมา ณ ที่นี้
สถาบันฯ ขอแจ้งปิดทำการวันที่ 22-28 กุมภาพันธ์ 2560 และจะเปิดทำการปกติในวันที่ 1 มีนาคม 2560
กรณีติดต่อส่งข้อความมาที่ Facebook: LinuxITDestination หรือ e-mail: info@itdestination.com ซึ่งจะติดต่อกลับประมาณ 17.00 น.
ผู้ลงทะเบียนอบรมสามารถทำข้อสอบ online ในช่วงที่มาอบรมเพื่อทบทวนความรู้ ทำได้ไม่จำกัดจำนวนครั้ง มีข้อเฉลยที่ถูกต้องแนะนำ
สอบถามรายละเอียดโทร 089 890-5494 >>> อ่านรายละเอียด... คลิ๊ก

คู่แท้..ในโลกโอเพ่นซอร์ส

โดย ธีรภัทร มนตรีศาสตร์,RHCE

"เฮ้อ..ลีนุกซ์นี่มันทำไมยากอย่างนี้นะ" เสียงบ่นจากผู้เรียนหลักสูตรลีนุกซ์ดังแว่วๆ มาจากมุมหนึ่งของห้อง อบรม ทำให้ผมต้องงัดเทคนิคต่างๆ ออกมาใช้ในฐานะวิทยากรอบรมไม่ว่าจะเป็น การหยิบยกตัวอย่างมาอธิบายขยายความ วาดภาพประกอบบนกระดาน ปฏิบัติให้ดูเป็นตัวอย่าง ฯ. พอช่วยให้อาการ "ต้อ..แต้" ของผู้เรียนทุเลาลงไปได้ เหตุการณ์ทำนองนี้เป็นเรื่องปรกติที่เกิดขึ้นกับผู้เริ่มต้นศึกษาระบบปฏิบัติการลีนุกซ์และซอฟต์แวร์โอเพ่นซอร์ส ที่ต้องเจอกับสิ่งที่ยังไม่คุ้นเคย ทั้งยังมีเนื้อหารายละเอียดเยอะอีกต่างหาก ถึงแม้วัสดุการอบรมจะดี อาจารย์ที่สอนจะเก่งแค่ไหน มีระยะเวลาอบรมมากเท่าไรก็ตาม คงจะยังไม่เพียงพอให้การฝึกอบรมสัมฤทธิ์ผลได้ หากตัวผู้เรียนเองขาดทักษะที่สำคัญ นั่นก็คือ เทคนิคในการเรียนรู้ ซึ่งแต่ละคนมีวิธีการเรียนรู้ (Learning Styles) ที่แตกต่างกันและมีลักษณะเฉพาะเป็นของตนเอง เป็นที่เข้าใจกันโดยทั่วไปว่า การที่เราจะศึกษาเรื่องใดเรื่องหนึ่งให้เข้าใจอย่างลึกซึ้งโดยเฉพาะเรื่องที่มีความซับซ้อน มีเนื้อหาหลากหลาย และมีลักษณะค่อนข้างเป็นนามธรรมด้วยแล้ว จำเป็นอย่างยิ่งที่จะต้องใช้การสังเกต รวบรวมข้อมูล แล้วนำมาวิเคราะห์เพื่อเชื่อมโยงความสัมพันธ์ให้เกิดเป็นรูปสัญลักษณ์ (symbolic) ที่ชัดเจน การเรียนรู้นั้นจึงจะเกิดผลสำเร็จและง่ายต่อการนำไปใช้ประโยชน์ ซึ่งการวิเคราะห์เพื่อการเรียนรู้มีหลายวิธี ขึ้นอยู่กับลักษณะของเรื่องราวที่เรียนรู้ ความเหมาะสม และประสบการณ์ของผู้เรียนเอง เทคนิคการเรียนรู้ที่ผมจะพยายามถ่ายทอดไปสู่ผู้เรียนเพื่อให้สามารถนำไปใช้ศึกษาซอฟต์แวร์ต่างๆ ได้ด้วยตนเองต่อไปนั้น มีหลายเทคนิค เช่น การจับคู่ การจัดกลุ่ม การเชื่อมโยง การจัดลำดับ เป็นต้น โดยเฉพาะเทคนิคการจับคู่ น่าจะเป็นเทคนิคที่ง่ายที่สุด เรามักจะพูดกันบ่อยๆ ในกลุ่มนักคอมพิวเตอร์ด้วยกันว่า มักจะจำแนกสิ่งต่างๆ เป็น 2 ลักษณะเหมือนกับสัญญาณดิจิตอลที่มี ตัวเลขศูนย์ กับหนึ่งเท่านั้น การทำงานหรือทำความเข้าใจก็จะง่ายขึ้น จดจำได้ง่ายกว่าเรื่องอะไรที่มีหลายๆ อย่างเยอะแยะเผลอนิดเดียวก็ลืมหมด ในโลกของเราทุกๆ อย่างล้วนมีสิ่งที่คู่กันทั้งนั้น เพียงแต่จะเป็นคู่แท้ คู่รัก หรือคู่กัดเท่านั้นเอง ในโลกของซอฟต์แวร์ก็เช่นกัน ดังนั้นการจับคู่สิ่งต่างๆ ในการศึกษาลีนุกซ์จึงเป็นเทคนิคหนึ่งที่ช่วยทำเรื่องยากให้กลายเป็นเรื่องที่ง่ายขึ้น เรามาลองดูตัวอย่างกันนะครับ จับคู่ซอฟต์แวร์กับตัวบุคคลสำคัญ การที่เราจะทำความรู้จักกับอะไรซักอย่างหนึ่งนั้น เราควรจะย้อนไปศึกษาประวัติศาสตร์ ที่มาที่ไปของสิ่งนั้นๆ การศึกษาซอฟต์แวร์โอเพ่นซอร์สก็เช่นกัน ซึ่งต้นกำเนิดของซอฟต์แวร์นั้นแน่นอนว่าจะต้องมีผู้ริเริ่มคิดค้นเป็นบุคคลสำคัญซึ่งทำให้เราเข้าใจที่มาของซอฟต์แวร์นั้นๆ ได้ดียิ่งขึ้น ตัวอย่างเช่น เคอร์เนลลีนุกซ์ ก็ต้องคู่กับนาย Linus Torvalds ถ้ากล่าวถึง GNU หรือ Free Software Foundation หรือซอฟต์แวร์ไลเซ่นแบบ GPL ก็ต้องคู่กับนาย Richard M. Stallman และถ้ากล่าวถึงลีนุกซ์ดิสทริบิวชั่นยอดนิยมอย่าง Ubuntu ก็จะคู่กับนาย Mark Shuttleworth เป็นต้น ถ้าจะให้ดีก็น่าจะจดบันทึกข้อมูลแบบนี้เอาไว้ในตารางก็จะช่วยให้จำได้ง่ายยิ่งขึ้น จับคู่คำสั่งลีนุกซ์ คำสั่งจำนวนมากนับร้อยคำสั่งถือว่าเป็นไม้เบื่อไม้เมากับผู้ที่กำลังศึกษาลีนุกซ์ก็ว่าได้ แน่นอนว่าเบื้องต้นคำสั่งเหล่านี้ก็เป็นคำศัพท์ภาษาอังกฤษที่บางคำสั่งก็เป็นคำที่มีความหมายตรงๆ อยู่แล้ว ได้แก่ kill reboot date แต่บางคำสั่งก็เป็นตัวอักษรย่อ ได้แก่ ls mv cp บางคำสั่งนำเอาบางส่วนของคำมาใช้เท่านั้น ได้แก่ cat apropos การจดจำคำสั่งให้ขึ้นใจนั้นจำเป็นอย่างยิ่งสำหรับลีนุกซ์แอดมินเพราะการใช้งานแบบบรรทัดคำสั่ง (CLI) จะไม่มีตัวเลือกให้คลิ๊กๆๆ อย่างที่เป็นในการใช้งานแบบกราฟฟิก (GUI) เทคนิคการจับคู่คำสั่งสามารถนำมาช่วยให้ผู้ศึกษาระบบลีนุกซ์รู้จักคำสั่งลีนุกซ์ได้มากขึ้น โดยพยายามจับคู่คำสั่งที่มีลักษณะดังนี้
  • ชื่อคำสั่งมีความเกี่ยวข้องกันในความหมาย เช่น คำสั่ง more กับคำสั่ง less จะเห็นว่าเป็นคำที่มีความหมายตรงกันข้ามกันเลย ( more = มาก , less = น้อย) และทั้งสองคำสั่งนี้ก็ทำงานคล้ายๆ กันแต่แตกต่างกันในรายละเอียดเท่านั้น นอกจากนี้ยังมีคำสั่ง head กับ tail อีกด้วย ท่านผู้อ่านลองสำรวจดูซิครับว่ามีคำสั่งคู่กันอีกหรือเปล่า?
  • ชื่อคำสั่งมีความสัมพันธ์กันในลักษณะที่ง่ายต่อการจดจำ เช่น คำสั่ง cat กับคำสั่ง tac จะเห็นว่ามีลักษณะของตัวอักษรที่เขียนกลับทิศทางกัน ซึ่งผลการทำงานของทั้งสองคำสั่งก็แสดงผลลัพธ์กลับกันเหมือนชื่อคำสั่ง เรียกว่ารู้จักคำสั่งนึงก็ได้อีกคำสั่งที่คู่กันพร้อมกันทีเดียว
  • มีการทำงานทดแทนกันได้ การจับคู่หรือจัดกลุ่มคำสั่งในลักษณะนี้คงต้องอาศัยประสบการณ์การใช้งานลีนุกซ์ซักระยะหนึ่ง จึงจะสังเกตเห็นและจำได้ เช่น คำสั่ง man -k กับ apropos ทำงานแทนกันได้เหมือนฝาแฝดเลยทีเดียว โดยจะค้นหาเอกสาร man page ด้วยคำสำคัญที่ผู้ใช้งานต้องการ เป็นต้น
  • นอกจากคำสั่งที่เป็นคู่กันหรือที่มีลักษณะสัมพันธ์กันแล้ว เนื่องด้วยลีนุกซ์มีการนำสัญลักษณ์ต่างๆ มาใช้อยู่พอสมควร คุณอาจจะลองจับคู่สัญลักษณ์ต่างๆ ในลีนุกซ์เป็นคู่ๆ กันได้อีกเพื่อความสะดวกต่อการจดจำ เช่น สัญลักษณ์ | ที่ทำหน้าที่ process pipe หรือ สัญลักษณ์ < ซึ่งเป็น Input redirection ก็น่าจะนำมาจับคู่ใช้งานกันได้เช่นกัน ทั้งนี้คงหลีกเลี่ยงการทำความเข้าใจในรายละเอียดของแต่ละสัญลักษณ์ไปไม่ได้ แต่การจับคู่กันไว้สำหรับงานประเภทเดียวกันก็น่าจะช่วยให้มีความแม่นยำมากขึ้นได้นะครับ จับคู่กระบวนการหรือหลักการ การศึกษาเพื่อใช้งานลีนุกซ์และแอปพลิเคชั่นต่างๆ นั้น มีหลักการ กระบวนการและเงื่อนไขต่างๆ อยู่กระจัดกระจายพอสมควรสำหรับผู้ที่เริ่มต้นใหม่ๆ อาจจะเกิดอาการจุกเสียดขึ้นได้เพราะบริโภคความรู้มากเกินไป หากไม่จัดระเบียบความรู้ให้ดีก็คงไม่สามารถนำความรู้ไปใช้ได้อย่างแน่นอน เทคนิคการจับคู่ก็ยังคงนำมาใช้แก้ไขปัญหานี้ได้เช่นเดียวกัน ลองสำรวจดูซิครับว่าหลักการใดบ้างที่มีกฎเกณฑ์แน่นอนพอที่จะสามารถจัดเป็นคู่ๆ มีลำดับล้อกันไปได้ ถ้านำมาจัดความสัมพันธ์กันได้แล้ว รับรองว่าอาการจุกเสียดดังกล่าวจะหายเป็นปลิดทิ้ง ผมจะยกตัวอย่างการจับคู่หลักการให้เป็นแนวทางซักหนึ่งตัวอย่าง ว่าด้วยเรื่องไฟร์วอลล์ประจำตระกูลเคอร์เนลลีนุกซ์คือ Netfilter/IPTABLES เรามักจะสับสนระหว่างการแปลงหมายเลขแอดเดรสต้นทาง SNAT (Source Network Address Translation) กับการแปลงแอดเดรสปลายทาง DNAT (Destination Network Address Translation) ว่าจะต้องเขียนกฎ (Rules) ที่เชน (chain) ใดกันแน่ระหว่าง PREROUTING กับ POSTROUTING ถ้าเราศึกษาดูให้ดีจะเห็นว่ามันจะจับคู่กันพอดีครับ รับรองไม่มีมั่วแน่นอน จำง่ายๆ เลยครับ SNAT ต้องคู่กับ POSTROUTING และ DNAT ต้องคู่กับ PREROUTING ในเมื่อหลักการมันตายตัวอยู่แล้วก็จับคู่กันไว้ได้เลย ผมมักจะให้หลักการจำง่ายๆ แก่ลูกศิษย์ของผมว่าถ้ายังไม่แน่ใจอีกก็ให้ยึดตัวอักษร S เป็นจุดสังเกต ถ้าจะทำ SNAT จะต้องทำที่เชน POSTROUTING เพราะมันมีตัว S เหมือนกัน ส่วนเชน PREROUTING มันไม่มีตัว S จึงเอาไว้ทำ DNAT โดยปริยาย ดังที่ได้กล่าวไปแล้วว่า หลักการต่างๆ ในลีนุกซ์มีอยู่เยอะก็จริง แต่ถ้าเรารู้จักสังเกต รู้จักจัดหมวดหมู่ ด้วยการจับคู่ จัดลำดับ จัดกลุ่มให้มัน เรื่องยากๆ ก็จะกลายเป็นเรื่องง่ายไปเอง จับคู่ระบบย่อยภายในลีนุกซ์ ภายในระบบปฏิบัติการลีนุกซ์จะเป็นซอฟต์แวร์ที่ประกอบไปด้วยระบบย่อย ( Subsystems ) ต่างๆ อยู่เป็นจำนวนมาก เจ้าระบบย่อยๆ เหล่านี้ได้แบ่งแยกออกเป็นสายการพัฒนาหรือแบ่งออกได้หลายประเภท ตามแนวคิดพื้นๆ ของเราเพื่อความง่ายต่อการจดจำก็ควรแบ่งออกเป็น 2 สายใหญ่ๆ ให้ได้ ซึ่งโดยธรรมชาติของโลกซอฟต์แวร์แล้วจะเห็นจากอดีตเป็นบรรทัดฐานว่า ในยุคเริ่มต้นซอฟต์แวร์ประเภทเดียวกันมักจะแตกลูกแตกหลานออกเป็นหลายวงศ์ตระกูล แต่พอพัฒนาไปเรื่อยๆ ก็จะเหลือตระกูลใหญ่ๆ แค่สองหรือสามตระกูลเท่านั้นเอง นอกนั้นจะเกิดจะดับจะมีขึ้นเพื่อใช้งานเฉพาะทางในกลุ่มเล็กๆ ไปเท่านั้น ระบบย่อยๆ ในลีนุกซ์ก็มีธรรมชาติเช่นนี้เหมือนกัน เนื่องจากลีนุกซ์ในปัจจุบันได้เผยแพร่ออกเป็นหลายดิสทริบิวชั่น ผู้ที่ศึกษาและใช้งานลีนุกซ์จึงจำเป็นต้องรู้ทันระบบย่อยๆ ภายในแต่ละดิสทริบิวชั่นเพื่อความคล่องตัวในการปฏิบัติงาน ซึ่งไม่รู้ว่าจะต้องไปเจอดิสทริบิวชั่นไหนกันบ้าง ระบบย่อยภายในที่กล่าวถึงนี้สามารถแบ่งออกได้หลายส่วน แต่ในที่นี้จะขอยกตัวอย่างที่เห็นได้อย่างชัดเจนเท่านั้น
  • ระบบควบคุม System Services ระบบย่อยนี้มีหน้าที่ควบคุมการทำงานของซอฟต์แวร์งานบริการต่างๆ ของระบบปฏิบัติการลีนุกซ์ ซึ่งในปัจจุบันมีระบบที่แตกต่างกันอยู่ 2 ระบบ คือ ระบบ System V Style กับระบบ BSD Style โดยแบบแรกใช้ในลีนุกซ์ตระกูล RedHat / Fedora / SuSE / Mandriva เป็นต้น ส่วนแบบหลังใช้ในตระกูล Slackware / Debian และทายาทของ Debian ทั้งหมด การใช้งานบริหารจัดการ System Services ทั้งสองชนิดนี้มีข้อดีข้อเสียและความแตกต่างกันอยู่พอสมควรซึ่งท่านจะต้องศึกษากันต่อไป แต่อย่างไรก็ตามถึงตรงนี้อย่างน้อยก็ "รู้ทัน" แล้วว่ามีเจ้า "คู่กัด" นี้รอเราอยู่ในลีนุกซ์แต่ละดิสทริบิวชั่น
  • ระบบบริหารจัดการแพคเกจซอฟต์แวร์ (Package Management) ระบบย่อยนี้ทำหน้าที่ในการติดตั้ง ลบ ตรวจสอบซอฟต์แวร์ต่างๆ ในลีนุกซ์ของเรา ขอแจ้งให้ทราบว่าปัจจุบันมีอยู่หลายแบบ ที่นิยมใช้งานกันอย่างกว้างขวางจริงๆ ก็คือแบบ RPM (RedHat Package Management) กับแบบ .deb หรือ Debian Package Management นอกเหนือจากนี้ก็จะใช้เฉพาะดิสทริบิวชั่นเท่านั้น ดังนั้นเราจึงควรจับคู่ระบบจัดการแพคเกจที่ว่านี้เป็นคู่ๆ ไป ตัวอย่างได้แก่ RPM ใช้กับลีนุกซ์สาย RedHat ทั้งหมด .deb ใช้กับลีนุกซ์สาย Debian ทั้งหมด .tgz ใช้กับสาย Slackware และ ebuild ใช้กับสาย Gentoo เมื่อจับคู่ระบบจัดการแพคเกจได้แล้วก็มีชัยไปกว่าครึ่งเพราะจะไม่สับสนเวลาจะติดตั้ง ลบหรืออัพเกรดโปรแกรมต่างๆ
  • ระบบการแสดงผล สำหรับผู้ที่เริ่มต้นใหม่กับลีนุกซ์เรื่องระบบการแสดงผลนี้เป็นปัญหาหนักหนาอย่างแท้จริงเลยก็ว่าได้ เพราะส่วนใหญ่มักจะคุ้นเคยกับการแสดงผลแบบกราฟฟิกของไมโครซอฟต์วินโดวส์ พอมาเจอระบบการแสดงผลแบบ "แยกส่วน" ของลีนุกซ์เข้าเลยเกิดอาการเสียศูนย์ไปเลย บางท่านร้อง "ยี้" ไม่อยากจะคบหากับเจ้าลีนุกซ์อีกต่อไปก็มี เรื่องของการแสดงผลนี้จึงเป็น "คู่แท้ 2 โลก" แบบสุดๆ โลกหนึ่งเป็น "โลกแห่งความเป็นจริง" คือ สภาพแวดล้อมที่แสดงผลแบบ Text Console มีแต่หน้าจอดำๆ รอให้พิมพ์คำสั่งเข้าไปเท่านั้น ส่วนอีกโลกหนึ่งเป็น "โลกมายา" ครับ คือ แสดงผลแบบกราฟฟิก ใช้เมาส์ Point and Click แบบวินโดวส์ เรื่องระบบการแสดงผลนี้ไม่ว่าอย่างไรก็ตามคุณก็ต้องใช้งานได้ทั้งสองแบบ ไม่ต่างอะไรกับการคมนาคมจะลอยฟ้า ลงน้ำหรือมุดดิน สุดท้ายคุณก็ต้องเดินด้วย 2 ขานั่นเอง
  • แอปพลิเคชั่นบนเครือข่าย (Server Application) เป็นระบบย่อยที่ขาดไม่ได้เลยในระบบปฏิบัติการลีนุกซ์ เพราะมันคือโปรแกรมเซิร์ฟเวอร์ต่างๆ นั่นเอง ถ้าจะแยกย่อยออกเป็น 2 ลักษณะใหญ่ๆ จะแบ่งเป็น Stand aloan servers (หรือ direct หรือ iterative) กับ On-demand servers (หรือ indirect หรือ concurrent) แอปพลิเคชั่นทั้งสองประเภทนี้มีปรากฏในลีนุกซ์ได้ทั้งคู่ แต่การบริหารจัดการจะแตกต่างกัน ผู้ที่เริ่มศึกษาลีนุกซ์เพื่อใช้งานเป็นเซิร์ฟเวอร์จึงควรทำความเข้าใจในประเด็นนี้เป็นอันดับแรกเพื่อที่จะไม่สับสนเมื่อถึงเวลาต้องใช้งานโปรแกรมเซิร์ฟเวอร์ต่างๆ ซึ่งจะเป็นประเภทใดประเภทหนึ่งนี้ก็ได้ โดยเฉพาะเมื่อต้องบริหารจัดการเกี่ยวกับคุณสมบัติด้านการรักษาความปลอดภัยระดับเครือข่าย
  • เทคนิคจับคู่..ยาใช้เฉพาะที่ ผมได้นำเสนอแนวทางการศึกษาลีนุกซ์และซอฟต์แวร์โอเพ่นซอร์ส โดยใช้แนวคิดการจับคู่สิ่งต่างๆ เพื่อให้เกิดการเปรียบเทียบ การสังเกตความเหมือนและความแตกต่าง รวมไปถึงการจัดหมวดหมู่เข้าไว้ด้วยกันเพื่อประโยชน์ในการจดจำเนื้อหาสาระที่มีอยู่มากมายให้กระชับและชัดเจนยิ่งขึ้น อีกทั้งแนะให้พยายามแยกส่วนประกอบต่างๆ หลักการต่างๆ ออกเป็นสองส่วนหรือสองทางเลือกเพื่อให้ง่ายต่อการตัดสินหรือแยกประเภท โดยจุดหมายอยู่ที่เพื่อการเรียนรู้ซอฟต์แวร์ต่างๆ อย่างเป็นระบบ แต่ขอแนะนำสักนิดหนึ่งว่า การจำแนกอะไรๆ ออกเป็น 2 ทางนั้นเหมาะกับงานด้านเทคนิคคัลเท่านั้นนะครับ ไม่ควรนำไปตัดสินอะไรๆ ในชีวิตจริง เช่น ไม่ถูกก็ต้องผิดไปเลย หรือ ถ้าไม่ใช้ลีนุกซ์ก็อยู่ร่วมโลกกันไม่ได้ อันนี้ก็สุดโต่งเกินไป เพราะในความเป็นจริงแล้วเราต้อง "เนียน" ในหลายๆ สถานการณ์และควรยึดหลักทางสายกลางจึงจะอยู่รอดและมีความสุขนะครับ