วันพฤหัสบดีที่ 15 ธันวาคม พ.ศ. 2559

Python คืออะไร


      Python คือชื่อภาษาที่ใช้ในการเขียนโปรแกรมภาษาหนึ่ง ซึ่งถูกพัฒนาขึ้นมาโดยไม่ยึดติดกับแพลตฟอร์ม กล่าวคือสามารถรันภาษา Python ได้ทั้งบนระบบ Unix, Linux , Windows NT, Windows 2000, Windows XP หรือแม้แต่ระบบ FreeBSD อีกอย่างหนึ่งภาษาตัว นี้เป็น OpenSource เหมือนอย่าง PHP ทำให้ทุกคนสามารถที่จะนำ Python มาพัฒนาโปรแกรมของเราได้ฟรีๆโดยไม่ต้องเสียค่าใช้จ่าย และความเป็น Open Source ทำให้มีคนเข้ามาช่วยกันพัฒนาให้ Python มีความสามารถสูงขึ้น และใช้งานได้ครบคุมกับทุกลักษณะงาน

จุดเด่นของภาษาไพทอน

ความเป็นภาษาสคริปต์

เนื่องจากไพทอนเป็นภาษาสคริปต์ ทำให้ใช้เวลาในการเขียนและคอมไพล์ไม่มาก ทำให้เหมาะกับงานด้านการดูแลระบบ (System administration) เป็นอย่างยิ่ง ได้มีการสนับสนุนภาษาไพทอนโดยเป็นส่วนหนึ่งของระบบปฏิบัติการยูนิกซ์, ลินุกซ์ และสามารถติดตั้งให้ทำงานเป็นภาษาสคริปต์ของวินโดวส์ ผ่านระบบ en:Windows Script Host ได้อีกด้วย

ไวยากรณ์ที่อ่านง่าย

ไวยากรณ์ของไพทอนได้กำจัดการใช้สัญลักษณ์ที่ใช้ในการแบ่งบล็อกของโปรแกรม และใช้การย่อหน้าแทน ทำให้สามารถอ่านโปรแกรมที่เขียนได้ง่าย นอกจากนั้นยังมีการสนับสนุนการเขียน docstring ซึ่งเป็นข้อความสั้นๆ ที่ใช้อธิบายการทำงานของฟังก์ชัน, คลาส, และโมดูลอีกด้วย

ความเป็นภาษากาว

ไพทอนเป็นภาษากาว (Glue Language) ได้อย่างดีเนื่องจากสามารถเรียกใช้ภาษาโปรแกรมอื่นๆ ได้หลายภาษา ทำให้เหมาะที่จะใช้เขียนเพื่อประสานงานโปรแกรมที่เขียนในภาษาต่างกันได้

ไพทอนในแพลตฟอร์มต่าง ๆ

ผู้เขียนโปรแกรมภาษาไพทอนสามารถเลือกใช้แพลตฟอร์มได้ดังนี้

ซีไพทอน

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

ไจทอน

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

ไพทอนดอตเน็ต

Python.NET เป็นการพัฒนาภาษาไพทอนให้สามารถทำงานบนดอตเน็ตเฟรมเวิร์กของไมโครซอฟท์ได้ โดยโปรแกรมที่ถูกเขียนจะถูกแปลงเป็น CLR ปัจจุบันมีโครงการที่นำภาษาไพทอนมาใช้บน .NET Framework ของไมโครซอฟท์แล้วคือโครงการ IronPython

ไลบรารีในไพทอน

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

แพ็คเกจเพิ่มเติมที่น่าสนใจ

การนำไปใช้งาน

ด้วยความยืดหยุ่นของภาษาไพทอน และความเป็น ภาษาสคริปต์ทำให้มีการใช้งานไพทอนอย่างกว้างขวาง

ตัวแก้ไขสำหรับไพทอน

ผู้ใช้สามารถใช้ตัวแก้ไขข้อความทั่วไปในการแก้ไขโปรแกรมภาษาไพทอน นอกจากนั้นยังมี Integrated Development Environmentอื่นๆ ให้เลือกใช้อีก อาทิ
  • PyScripter: เป็นชุดเครื่องมือสำหรับพัฒนาภาษาไพธอน บนระบบปฏิบัติการวินโดวน์ ที่ให้ผู้ใช้สามารถนำไปใช้ฟรี (open source)
  • Python IDLE: มีอยู่ในชุดอินเตอร์พรีเตอร์อยู่แล้ว สามารถเลือกติดตั้งได้
  • PythonWin: เป็นตัวแก้ไขในชุดของ PyWin32
  • ActivePython: จาก ActiveState (ล่าสุด รุ่น 2.5.1 )
  • SPE (Stani's Python Editor) : เป็นตัวแก้ไขที่มาพร้อมกับตัวออกแบบยูสเซอร์อินเทอร์เฟส wxGlade และเครื่องมือสำหรับ Regular Expression มีระบบ Syntax Highlight และการจัดย่อหน้าตามวากยสัมพันธ์ของไพทอนให้อัตโนมัติพัฒนาขึ้นจากภาษาไพทอน ดาวน์โหลดใช้งานได้ฟรีที่ http://spe.pycs.net
  • WingIDE: ตัวแก้ไขที่มีระบบ Syntax Highlight และการจัดย่อหน้าตามไวยกรณ์ของไพทอนให้อัตโนมัติ แต่ไม่ใช่ฟรีแวร์
  • Komodo: ตัวแก้ไขที่มีระบบ Syntax Highlight, การจัดย่อหน้าตามไวยกรณ์ของไพทอนให้อัตโนมัติและเติมคำอัตโนมัติ เป็นตัวแก้ไขจาก ActiveState อีกตัวหนึ่ง ไม่ใช่ฟรีแวร์
  • Pydev: เป็น Python IDE สำหรับ Eclipse สามารถใช้พัฒนา Python, Jython และ Ironpython
  • PyCharm: เป็น Python IDE ที่สร้างขึ้นโดยบริษัท JetBrains แบ่งออกเป็น 2 เวอร์ชัน ได้แก่ Community Edition (ใช้งานฟรี) และ Professional Edition (เสียเงินสามารถทดลองใช้ได้ 30 วัน) โดย Professional Edition จะเพิ่มความสามารถในการตรวจ syntax ของเฟรมเวิร์กที่ได้รับความนิยมที่ใช้งานร่วมกับภาษาไพทอน เช่น Django, Flask, Google App Engine เป็นต้น

องค์กรสำคัญที่ใช้ไพทอน

ซอฟต์แวร์ที่เขียนด้วยไพทอน

  • บิตทอร์เรนต์ (BitTorrent)
  • Chandler โปรแกรมจัดการข้อมูลส่วนบุคคล
  • บางส่วนของ GNOME
  • บางส่วนของ Blender
  • Mailman โปรแกรมจัดการจดหมายกลุ่ม (เมลลิ่งลิสต์)
  • MoinMoin โปรแกรมวิกิ
  • Portage ส่วนจัดการแพกเกจของ Gentoo Linux
  • Zope แอปพลิเคชันเซิร์ฟเวอร์
  • เทอร์โบเกียร์ กรอบงานขนาดใหญ่สำหรับพัฒนาโปรแกรมประยุกต์บนเว็บ
  • Django กรอบงานขนาดใหญ่สำหรับพัฒนาโปรแกรมประยุกต์บนเว็บ

อ้างอิง

  1. "Python 3.5.0 Release". Python Software Foundation. สืบค้นเมื่อ 13 Sep 2015.
  2. "Python 2.7.10 Release". Python Software Foundation. Text "https://www.python.org/downloads/release/python-2710/ " ignored (help);
  3. "Programming Language Trends - O'Reilly Radar". Radar.oreilly.com. 2 August 2006. สืบค้นเมื่อ 17 July 2013.
  4. "The RedMonk Programming Language Rankings: January 2013 – tecosystems". Redmonk.com. 28 February 2013. สืบค้นเมื่อ 17 July 2013.
  5. ประวัติไพทอน

แหล่งข้อมูลอื่น

คู่มือ

    โค้ดของ Python ถูกสร้างขึ้นมาจากภาษาซี การประมวลผลจะทำในแบบอินเทอร์พรีเตอร์ คือจะประมวลผลไปทีละบรรทัดและปฏิบัติตามคำสั่งที่ได้รับ Python เวอร์ชันแรกคือ  เวอร์ชัน 0.9.0 ออกมาเมื่อปี 2533 และเวอร์ชันปัจจุบันคือ 2.5.2
    คุณลักษณะเด่นของภาษา Python
    1.สนับสนุนแนวแบบคิดออปเจกต์โอเรียนเทด หรือ OOP (Object Oriented Programming)
    2.เป็น Open Source
    3.โค้ดที่เขียนด้วย Python สามารถนำไปรันบนระบบปฏิบัติการได้หลากหลาย
    4.สนับสนุนเทคโนโลยี COM ของ Ms-windows
    5.Python รวมมาตรฐานการอินเตอร์เฟส Tkinter ซึ่งสนับสนุนบนระบบ X windows, Ms-windows และ Macintosh การใช้คำสั่ง Tkinter API ช่วยให้โปรแกรมเมอร์ไม่ต้องแก้ไขโค้ดเมื่อนำไปรันบนระบบปฏิบัติการอื่นๆ
    6.เป็น Dynamic typing คือ สามารถเปลี่ยนชนิดข้อมูลได้ง่ายและสะดวก
    7. มี Buil-in Object Types คือ โครงสร้างของข้อมูลที่สามารถใช้ได้ใน Python ประกอบด้วย ลิสต์, ดิกชันนารี, สตริง ที่ง่ายต่อการใช้งานและมีประสิทธิภาพสูง
    8.มีเครื่องมือต่างๆ มากมาย เช่น การประมวลผลเท็กซ์ไฟล์ การเรียงข้อมูล การเชื่อต่อสตริง การตรวจสอบเงื่อนไขของข้อความ การแทนคำ เป็นต้น
    9.มีมอดูลสำหรับจัดการ Regular Expresion
    10.มีมอดูลที่สร้างขึ้นจากนักพัฒนาสนับสนุนมากมาย ได้แก่ COM, Image, CORBA, ORBs, XML เป็นต้น
    11.จัดการหน่วยความจำอย่างอัตโนมัติ สามารถจักการพื้นที่หน่วยความจำที่ไม่ต่อเนื่องให้ทำงานได้อย่างมีประสิทธิภาพ
    12.อนุญาตให้ฝังชุดคำสั่งของ Python เอาไว้ภายในโค๊ดภาษา C/C++ ได้
    13.อนุญาตให้โปรแกรมเมอร์สร้าง Dynamic Link Libray (DLL) เพื่อใช้ร่วมกับ Python
    14.มีมอดูลสนับสนุนเกี่ยวกับเน็ตเวิร์ก โปรเซส เธรด regular, expression, xml, GUI และอื่นๆ
    15ประกอบด้วยมอดูลสำหรับสร้าง Internet Script และติดต่อกับอินเทอร์เน็ตผ่าน Sockets, และทำหน้าที่เป็น CGI Script ตรอดจนใข้งานคำสั่ง FTP , Glopher, XML และอื่นๆอีกมาก
    16.สามารถประมาลผมทางด้านวิยาศาสตร์ และวิศวกรรมศาสตร์ได้อย่างมีประสิทธิภาพ
    17.มีฟังก์ชันสนับสนุนฐานข้อมูล เช่น MySQL, Sybase, Oracle , Informix, ODBC และอื่นๆ
    18.มีไลบรารีสนับสนุนด้านการสร้างภาพกราฟฟิก เช่น ทำภาพเบลอ หรือภาพชัด หรือเขียนข้อความบนภาพ ตลอดจนบันถึกไฟล์ในรูปแบบต่างๆ ได้อย่างสะดวกและมีประสิทธิภาพ
    19.มีไลบรารีสนับสนุนด้านปัญยาประดิษฐ์
    20.มีไลบรารีสำหรับสร้างเอกสาร PDF โดยไม่ต้องติดตั้ง Acrobat Writer
    21.มีไลบรารีสำหรับสร้าง Shockwaves Flash (SWF) โดยไม่ต้องติดตั้ง Macromedia Flash

วันพฤหัสบดีที่ 8 ธันวาคม พ.ศ. 2559

การต่ออุปกรณ์ด้วยสาย LAN,สายตรง,สายครอส



ทราบกันหรือไม่ว่าระหว่างเครื่องคอมพิวเตอร์ กับเครื่องคอมพิวเตอร์นั้นรับ-ส่งข้อมูลกันได้อย่างไร
ใช่แล้ว ใช้สายเชื่อมต่อ บทความนี้จะมาเล่าถึงการใช้สายในการเชื่อมต่อระหว่างคอมพิวเตอร์ สอง
เครื่องเข้าในระบบเน็ตเวิร์ค การเตรียมสายในการเชื่อมต่อสายที่ใช้งานว่ามีอะไรบ้างไปดูรายละเอียด
กันเลย
การเชื่อมต่ออุปกรณ์ Computer และอุปกรณ์เครือข่าย (Hub, Switch และ Router) ด้วย
สาย LAN นั้น (ในยุกต์ที่อุปกรณ์ยังไม่มีระบบ Auto Cross/Auto Cross คืออะไร มีอธิบายครับ)
เราจำเป็นที่จะต้องรู้ว่าเราควรจะใช้สายตรงหรือสายครอสในการเชื่อมต่ออุปกรณ์อะไรกับอุปกรณ์อะไร
(มีในข้อสอบ CCNA ครับ) ซึ่งมีวิธีจำแบบง่ายๆ ที่หลายๆ คนใช้อยู่ (แต่มีจุดที่ต้องระวัง) คือ
อุปกรณ์เหมือนกัน ต่อกันใช้สาย LAN แบบครอส (Crossover Cable)
อุปกรณ์ต่างกัน ต่อกันใช้สาย LAN แบบตรง (Straight-Through Cable)
ซึ่งเป็นวิธีจำที่ใช้ได้ในระดับหนึ่ง ซึ่งหลายคนจะเหมารวมว่า "งั้นแสดงว่า Computer ต่อ Router ก็ ต้องเป็นสายตรงซิเพราะเป็นอุปกรณ์คนละชนิดกัน" แต่คำตอบที่ถูกต้องคือ Computer ต่อ Router ต้องเป็นสายครอสครับ ซึ่งจากรูปข้างล่าง เป็นรูปที่แสดงถึงการใช้สายครอสกับสายตรง เพื่อเชื่อมต่อ อุปกรณ์เครือข่ายอย่างถูกต้องครับ (ใช้อ้างอิงในการสอบ CCNA ได้นะครับ)

         

แล้วอะไรเป็นตัวที่บอกว่า Router และ Computer เป็นอุปกรณ์ชนิดเดียวกันล่ะ ก่อนอื่นเรามารู้จัก MDI และ MDI-X กันซักหน่อย

MDI หรือ Medium Dependent Interface : เป็นชนิดของ Ethernet port ซึ่งจะถูกใช้อยู่ บน Network Interface Card (NIC) หรือที่เราเรียกว่า Card LAN นั่นเอง ซึ่ง Card LAN นี้ก็ถูกเสียบอยู่ Computer อีกทีนั่นแหละ นอกจากนี้แล้ว Ethernet port บน Router เองก็เป็นชนิด MDI ด้วยเช่นกัน

MDIX หรือ MDI-X หรือ Medium Dependent Interface Crossover :
เป็นชนิดของ Ethernet port ที่อยู่บน Hub และ Switch นั่งเอง (อักษร X จะเป็นตัวแทนของ
คำว่า "Crossover" นั่นเอง)

ดังนั้นคำว่า

- อุปกรณ์เหมือนกัน ต่อกันใช้สาย LAN แบบครอส (Crossover Cable)
- อุปกรณ์ต่างกัน ต่อกันใช้สาย LAN แบบตรง (Straight-Through Cable)
จึงควรจะถูกใช้ในลักษณะนี้ครับ

- MDI ต่อกับ MDI เป็นชนิดเดียวกันใช้สายครอส (Crossover cable)
- MDI-X ต่อกับ MDI-X เป็นชนิดเดียวกันใช้สายครอส (Crossover cable)
- MDI ต่อกับ MDI-X เป็นคนละชนิดกันใช้สายตรง (Straight-Through Cable)

และจาก
- Port แบบ MDI ประกอบด้วยอุปกรณ์คือ Router และ Computer
- Port แบบ MDI-X ประกอบด้วยอุปกรณ์คือ Hub กับ Switch

ดังนั้นเมื่อสรุปการเชื่อมต่ออุปกรณ์แล้วจะได้ผลตรงกับรูปข้างบนครับ ซึ่งเป็นรูปในเอกสารการเรียนการ สอนของ CCNA ครับ

Auto Cross หรือ Auto MDI/MDI-X คืออะไร?

สำหรับอุปกรณ์ในเครือข่ายที่รองรับการทำ Auto Cross หรือ Auto MDI/MDI-X นั้นเมื่อนำสาย LAN มาต่อกันระหว่างอุปกรณ์แบบผิดหลักการที่กล่าวไปแล้ว (เช่น นำสาย LAN แบบตรงมาต่อกัน ระหว่าง Switch กับ Switch หรือระหว่าง Computer กับ Computer) หากอุปกรณ์เหล่านั้น รองรับการทำ Auto Cross หรือ Auto MDI/MDI-X แล้ว การเชื่อมต่อจะยังคงสามารถใช้งานได้ เนื่องอุปกรณ์ทั้งสองฝั่งจะทำการเรียนรู้กันและกัน และปรับตัวเองให้รองรับการเชื่อมต่อนั้นได้มาต่อ กันด้วยเรื่องของการเข้าหัว LAN ครับ (จริงๆ แล้วมีหลายคนเขาแชร์เรื่องนี้ไว้มากเหมือนกันตอนแรก ว่าจะตัด ออกแต่คิดๆ แล้วขอใส่เอาไว้ซักหน่อยไว้เป็นทางเลือกด้านข้อมูลครับ)

ก่อนอื่นเรามารู้จักสาย LAN กันซักหน่อยนะครับ สาย LAN ที่คนส่วนใหญ่รู้จักและใช้งานอยู่นั้นมีชื่อ เรียกอย่างเป็นทางการว่า สาย UTP หรือสาย CAT5 นั่นเอง ซึ่งผมขออธิบายคำว่า UTP และ STP
เชิงเปรียบเทียบก่อนดังนี้ครับ

สาย UTP (Unshielded Twisted Pair Cable) เป็นสายแบบตีเกลียวเป็นคู่ๆ ทั้งหมดสี่คู่โดย ไม่มีเกราะป้องกันสัญญาณรบกวนจากภายนอก  (Foil Shield) โดยดูได้ตามรูปข้างล่างครับ


สาย STP (Shielded Twisted Pair Cable) เป็นสายแบบตีเกลียวเป็นคู่ๆ ทั้งหมดสี่คู่ ซึ่งมี เกราะป้องกันสัญญาณรบกวนจากภายนอก  (Foil Shield)  โดยดูได้ตามรูปข้างล่างครับ



หมายเหตุ การที่สาย LAN ต้องมีการตีเกลียวเพื่อที่จะป้องกันสัญญาณรบกวนกันเองภายในสาย
LAN โดยการตีเกลียวจะเป็นการทำให้คลื่นแม่เหล็กที่เกิดจากกระแสสัญญาณในสายทองแดงแต่ ละเส้นหักล้างกันเอง และแน่นอนว่าสายแบบ STP ซึ่งมีเกราะป้องกันสัญญาณรบกวนจากภายนอก ย่อมดีกว่าสายแบบ UTP แต่ทว่าราคาของสายแบบ STP ก็แพงกว่าแบบ UTP ด้วยเช่นกันครับ

แล้วคำว่า CAT5 คืออะไรล่ะ? คำว่า CAT5 จริงๆ แล้วมาจากคำเต็มๆ ว่า Category 5 หรือสาย ประเภทที่ 5 ครับ (ผมขอข้ามสาย CAT1 ถึง CAT4 ไปนะครับ) โดยจะขออธิบายสาย CAT5, CAT5e และ CAT6 พร้อมรูปตัวอย่างดังนี้ครับ

สาย CAT5 (Category 5 cable) เป็นสายที่ถูกผลิดขึ้นมาตามมาตรฐานของ Fast Ethernet (100 Mbit/sec) โดยเฉพาะ เหมาะที่จะใช้งานกับ Ethernet Network ที่มี speed 100 Mbit/ sec (Interface แบบ Fast Ethernet) เป็นหลักแต่หากจะนำมาใช้กับ Ethernet Network
ที่มี speed 1,000 Mbit/sec หรือ 1 Gbit/sec (Interface แบบ Gigabit Ethernet) นั้นก็พอใช้ได้ครับ แต่ประสิทธิภาพอาจจะไม่ดีเท่าไหร่ครับ (ซึ่งสายแบบ CAT5 ก็คือสายแบบ UTP นั่นเองครับ) โดยมีรูปดังข้างล่างครับ

                      

สาย CAT5e (Category 5 enhanced cable) เป็นสายที่มีการพัฒนาขึ้นมา (enhance) จากสาย CAT5 เดิมครับ ซึ่งมีประสิทธิภาพมากกว่า (เพื่อให้สามารถรองรับ Ethernet Network แบบ Gigabit Ethernet ได้) ซึ่งใช้งานได้ดีกับ Ethernet Network ทั้งแบบ 100 Mbit/sec (Fast Ethernet) และแบบ 1,000 Mbit/sec (Gigabit Ethernet) ซึ่งแน่นอนว่าสายแบบ CAT5e ย่อมจะแพงกว่า CAT5 โดยมีรูปดังข้างล่างครับ

               

สาย CAT6 (Category 6 cable) เป็นสายที่ถูกผลิตขึ้นมาตามมาตรฐานของ Gigabit Ethernet โดยเฉพาะครับ ซึ่งแน่นอนครับ เหมาะกับ Ethernet Network แบบ Gigabit Ethernet แต่อย่างไรก็ตามสาย CAT6 นี้ก็ยังสามารถนำไปใช้งานกับ Ethernet Network
แบบ 100 Mbit/sec ได้ครับ โดยมีรูปดังข้างล่างครับ

      

หมายเหตุ รูปของสาย CAT5, CAT5e และ CAT6 ที่แสดงนี้เป็นภาพตัวอย่างเท่านั้น ดังนั้นเวลาไป ซื้อสาย สามารถสังเกตที่ข้างๆ สายได้ครับ โดยจะมีเขียนเอาไว้ว่าเป็นสาย Category อะไรครับ

ทีนี้มาถึงการเข้าหัว LAN กันครับ โดยขั้นแรกเราต้องรู้วิธีการนับขา (pin) ของหัว LAN กันก่อนครับ
ดังรูปข้างล่าง

                                 

การเข้าหัว LAN มีมาตรฐานการเข้าอยู่สองแบบดังนี้ครับ

- แบบ TIA/EIA 568A ดังรูปข้างล่าง

                       

- แบบ TIA/EIA 568B ดังรูปข้างล่าง


                      

การเข้าหัว LAN สำหรับทำสายตรง (Straight-Through Cable)
การเข้าหัว LAN สำหรับทำสายตรงนั้นมีสองแบบดังนี้ครับ
แบบที่ 1 การเข้าหัวทั้งสองฝั่งเป็นแบบ TIA/EIA 568A ดังรูปข้างล่าง

 
         

แบบที่ 2 การเข้าหัวทั้งสองฝั่งเป็นแบบ TIA/EIA 568B ดังรูปข้างล่าง

 
         

การเข้าหัว LAN สำหรับการทำสายครอส (Crossover Cable)
การเข้า LAN สำหรับการทำสายครอสนี้สามารถทำได้ง่ายๆ คือ ฝั่งหนึ่งเข้าหัวตามมาตรฐาน TIA/EIA 568A และอีกฝั่งหนึ่งเข้าหัวตามมาตรฐาน TIA/EIA 568B ดังรูปข้างล่างครับ

              
หรือเจาะลึกลงไปอีกหน่อยคือ
- Pin 1 เข้า Pin 3 ของอีกฝั่ง
- Pin 2 เข้า Pin 6 ของอีกฝั่ง
- Pin 3 เข้า Pin 1 ของอีกฝั่ง
- Pin 6 เข้า Pin 2 ของอีกฝั่ง
ดังรูปข้างล่างครับ

    
                      

หากไม่เข้าหัว LAN ตามมาตรฐานจะได้ไหม?

จากประสบการณ์ที่เคยทำงานมาในช่วงแรกๆ ของการเข้าวงการ ผมเคยเข้าหัว LAN แบบตามใจฉัน
คือ ถ้าเป็นสายตรง ก็เข้าหัวให้ทั้งสองฝั่งเหมือนๆ กันก็พอ และถ้าเป็นสายครอส ก็เข้าหัวแบบ 1 เข้า
3 และ 2 เข้า 6 อะไรประมาณนี้

ผลคือ ใช้งานได้ครับ แต่....
หลังจากที่ผมเสียบสาย LAN ดังกล่าวเข้า Interface LAN แบบ 100 M ทั้งสองฝั่ง ผลคือ
ผมใช้ ได้แค่ 10 M ครับ โดย Card LAN ทำการปรับตัวเองให้กลายเป็น 10 M อย่างอัตโนมัติ (ผลมันแสดงออกบน Windows เลยครับว่าให้ใช้ได้แค่ 10 M)

ทำไมจึงเป็นเช่นนั้น?
เราลองมาสังเกตที่สาย LAN กันสักหน่อยครับ จะเห็นได้ว่าสาย LAN จะมีสายทองแดงข้างในทั้งหมด 8 เส้น แบ่งเป็น 4 คู่ โดยแต่ละคู่จะมีการพันกันเป็นเกลียว (มันจึงชื่อว่า Twisted Pair ครับ) และที่ สายแต่ละคู่จำเป็นต้องพันกันเป็น เกลียวนั้นก็เพื่อป้องกันไม่ให้สนามแม่เหล็กที่เกิดจากกระแสสัญญาณ มากวนกันเองครับ (พันกันเป็นเกลี่ยวเพื่อให้สนามแม่เหล็กหักล้างกันเอง ไม่มากวนกันเอง) ดังนั้นหาก เราไม่เข้าหัว LAN ตามมาตรฐานแล้ว การหักล้างกันของสนามแม่เหล็กอาจจะไม่สมบูรณ์ กลายเป็น สัญญาณที่มารบกวนกันเอง ทำให้เกิด loss ภายในสาย และท้ายสุด Card LAN จำเป็นต้องปรับ speed ลงจาก 100 M ให้เป็น 10 M อย่างอัตโนมัติ เพื่อให้เรายังคงสมารถใช้งานได้ครับ

วันอังคารที่ 15 พฤศจิกายน พ.ศ. 2559

8 ระดับของโปรแกรมเมอร์

คุณเคยได้รับคำถามสัมภาษณ์อันคลาสสิคไหม, “คุณจะเห็นตัวคุณอยู่ที่ไหนในอีก 5 ปี?” เมื่อถูกถาม ผมจะนึกย้อนกลับไปที่ วิดีโอ Twisted Sister ตอนหนึ่งในปี 1984 เสมอ


ผมอยากจะให้คุณบอกกับผม -ไม่, ดีกว่านั้น, บอกกับทุกคนในชั้นเรียน

คุณอยากจะทำอะไรกับชีวิตของคุณ?

คุณอยากจะร็อค, แน่นอน! หรืออย่างน้อยก็คือเป็น ร็อคสตาร์โปรแกรมเมอร์ (เป็นบทความที่ดีบทความหนึ่งครับ – ผู้แปล) มันไม่ใช่คำถามที่โดยทั่วไปจะได้รับคำตอบที่จริงจังเท่าไหร่ – เช่นเดียวกับคำถามเก่าๆในการสัมภาษณ์, “อะไรคือจุดอ่อนที่ใหญ่ที่สุดของคุณ?” มันคือคุณที่บางครั้งร็อคมากไป, ใช่ไหม? ผู้บริสุทธิ์ที่พบเจออาจได้รับความเจ็บปวดได้

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

คำถาม “คุณจะเห็นตัวคุณอยู่ที่ไหนในอีก 5 ปี” เป็นประเภทรวดเร็ว และผู้คนส่วนมากจะตอบกลับไปที่ผู้สัมภาษณ์อย่างรวดเร็วในแบบที่เตรียมตัวมา ก่อนแล้ว แต่มันแสดงให้เห็นความกังวลที่ลึกซึ้งยิ่งกว่า: อะไรคือเส้นทางอาชีพที่มีศักยภาพสำหรับผู้พัฒนาซอฟต์แวร์? แน่นอน, เราทำสิ่งพวกนี้ เพราะเรารักมัน, และเราก็ โชคดีมากในความคิดนั้น แต่คุณจะยังคงนั่งลงเขียนโปรแกรมในตอนที่คุณอายุ 50? ในตอนที่คุณอายุ 60? อะไรคือผลลัพธ์ของอาชีพที่ดีที่สุดที่เป็นไปได้สำหรับโปรแกรมเมอร์ที่มีความ ต้องการจะเป็น..อืม, โปรแกรมเมอร์?

จะเกิดอะไรขึ้นถ้าผมบอกคุณ, โดยไม่จริงจังเท่าไหร่, ว่ามันมี 8 ระดับของโปรแกรมเมอร์?

โปรแกรมเมอร์ระดับตำนาน (Dead Programmer)
นี่เป็นระดับที่สูงสุด โค้ดของคุณยังคงอยู่ข้ามผ่านความตายของคุณ คุณเป็นส่วนหนึ่งของประวัติศาสตร์ที่ได้รับการบันทึกของวงการคอมพิวเตอร์ โปรแกรมเมอร์คนอื่นๆ ศึกษางานและงานเขียนของคุณ คุณอาจชนะรางวัล Turing, หรือได้เขียนงานที่มีอิทธิพล หรือสร้างหนึ่งหรือสองสิ่งที่เป็นรากฐานของเทคโนโลยีที่ส่งผลต่อการเขียน โปรแกรมที่เรารู้จักกัน คุณไม่ได้มีแค่บทความ wikipedia ของตัวคุณเองเท่านั้น – มันมีเว็บไซต์ที่อุทิศแก่การศึกษาชีวิตและงานของคุณด้วย
โปรแกรมเมอร์น้อยคนที่ได้ไปถึงระดับนี้ในช่วงชีวิตของเขา
ตัวอย่าง: Dijkstra, Knuth, Kay

โปรแกรมเมอร์ที่ประสบความสำเร็จ (Successful Programmer)
โปรแกรมเมอร์ที่เป็นทั้งคนที่เป็นที่รู้จักกันดี และได้สร้างธุรกิจทั้งหมด หรืออาจขนาดทั้งอุตสาหกรรม – ด้วยโค้ดของพวกเขาเอง โปรแกรมเมอร์เหล่านี้ได้ให้ อิสระที่แท้จริง แก่ตัวพวกเขาเอง: อิสระที่พวกเขาจะตัดสินใจเลือกงานที่พวกเขาอยากทำเอง และการแบ่งปันอิสระนั้นแก่เพื่อนร่วมอาชีพ
นี่เป็นระดับที่โปรแกรมส่วนใหญ่ทุกคนควรอยากที่จะเป็น การที่จะได้ระดับนี้ขึ้นอยู่กับทักษะทางธุรกิจมากกว่าการเขียนโปรแกรม
ตัวอย่าง: Gates, Carmack, DHH

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

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

โปรแกรมเมอร์ระดับกลาง (Average Programmer)
ที่ระดับนี้คุณเป็นโปรแกรมเมอร์ที่ดีพอที่จะตระหนักได้ว่าคุณไม่ใช่โปรแกรมเมอร์ที่ยิ่งใหญ่ และคุณอาจเป็นไม่ได้
พรสวรรค์มักจะมีส่วนน้อยต่อความสำเร็จ คุณสามารถประสบความสำเร็จได้ถ้าคุณมีทักษะด้านธุรกิจและผู้คน ถ้าคุณเป็นโปรแกรมเมอร์ระดับกลาง ที่สามารถใช้ชีวิตอยู่ตรงนั้นได้แสดงว่าคุณได้รับพรสวรรค์, แค่ไม่จำเป็นว่าจะต้องเป็นที่การเขียนโปรแกรม
อย่าดูถูกคุณค่าของการรู้ตัวเอง มันเป็นสิ่งที่มีค่ามากกว่าที่คุณตระหนัก มันไม่มีอะไรผิดกับการที่ไม่มีพรสวรรค์ จงกล้าหาญ มองให้ออกว่าอะไรที่คุณทำได้ดี และไล่ตามมัน อย่างหนักหน่วง

โปรแกรมเมอร์สมัครเล่น (Amateur Programmer)

โปรแกรมเมอร์สมัครเล่นที่รักที่จะเขียนโปรแกรม, และมันแสดงให้เห็นว่าเป็นแบบนั้น: พวกเขาอาจจะเป็นนักศึกษาอนาคตไกล หรือเด็กฝึกงาน, หรืออาจจะมีส่วนร่วมในการโครงการ open source, หรือสร้างสรรค์โปรแกรมหรือเว็บไซต์ที่น่าสนใจในเวลาว่าง “เพียงเพื่อความสนุก” โค้ดและความคิดของพวกเขาแสดงถึงสัญญาณแห่งความสำเร็จและความกระตือรือร้น
การเป็นโปรแกรมเมอร์สมัครเล่นเป็นสิ่งที่ดี จากระดับตรงนี้ คนๆหนึ่งสามารถไปสู่การเป็นโปรแกรมเมอร์ที่ทำงานได้อย่างรวดเร็ว

โปรแกรมเมอร์ที่ไม่เป็นที่รู้จัก (Unknown Programmer)
โปรแกรมเมอร์ทั่วๆไป เก่ง แต่ไม่ถึงกับโดดเด่น อาจจะทำงานให้กับบริษัทขนาดใหญ่, บริษัทนิรนาม MegaCorp มันเป็นแค่งาน ไม่ใช่ทั้งชีวิตของพวกเขา ไม่มีอะไรผิดเกี่ยวกับสิ่งนั้น, เช่นกัน

โปรแกรมเมอร์ที่แย่ (Bad Programmer)
ผู้คนที่บางครั้งหล่นไปอยู่ในตำแหน่งโปรแกรมโดยที่ไม่มีทักษะหรือความสามารถแม้แต่นิด ทุกๆสิ่งที่พวกเขาแตะ กลายเป็นความเจ็บปวดและทรมาณ สำหรับเพื่อนโปรแกรมเมอร์รอบข้าง – ที่เป็นไปได้ว่าจะเป็นโปรแกรมเมอร์ที่แย่คนอื่นๆ, ที่ขาดทักษะพื้นฐานที่จะบอกได้ว่าพวกเขากำลังทำงานกับโปรแกรมเมอร์ที่แย่
ซึ่ง, บางที, อาจจะเป็นเครื่องหมายสำหรับโปรแกรมเมอร์ที่แย่ทุกคน คนเหล่านี้ไม่มีธุระกับการเขียนโค้ดในทุกๆ รูปแบบ – แต่พวกเขาก็ทำ, อย่างไรก็ตาม

ระดับพวกนี้ไม่ได้จริงจังโดยสิ้นเชิง ไม่ใช่ว่าโปรแกรมเมอร์ทุกคนจะต้องมองหาสิ่งเดียวกันในอาชีพ แต่มันชีให้เห็นสิ่งที่โปรแกรมเมอร์สามารถเป็นได้ใน 10 ปี, 20 ปี, หรือ 30 ปี – บางทีอาจจะทั้งชีวิต โปรแกรมเมอร์ที่มีชื่อเสียง คนไหนที่คุณนับถือที่สุด? สิ่งใดที่พวกเขาทำแล้วได้รับความนับถือจากคุณ?

ในประโยคสั้นๆ, คุณอยากจะทำอะไรกับชีวิตของคุณ?



ที่มา http://xenon.kmi.tl/?p=24
ที่มา http://www.nonvisual.com/2014/08/50.html

ต้นฉบับ: http://www.codinghorror.com/blog/2009/04/the-eight-levels-of-programmers.html

โดย Jeff Atwood @ Coding Horror

คู่มือคอมมานด์ไลน์บนลีนุกซ์ ฉบับมือใหม่ ตอนที่ 2 (จบ)

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

สามารคลิกดูตอนที่ 1 คู่มือคอมมานด์ไลน์บน Linux ฉบับมือใหม่ ได้ที่นี่เลยครับ 

ดังนั้น ภาคสองที่กล่าวต่อไปนี้ เราจะเจาะลึกลงไปเกี่ยวกับเรื่องข้อมูลพื้นฐานของไฟล์ หรือ Metadata, สิทธิ์การเข้าถึงหรือ Permission, Timestamps, รวมถึงการใช้ทูลหรือโปรแกรมต่างๆ ที่มีการใช้งานบ่อย เช่น tee และ Vim เป็นต้น
  1. วิธีเรียกดูข้อมูลพื้นฐานของไฟล์หรือ Metadata เช่น ขนาด, Permission เป็นต้น
ใช้คำสั่ง ls เหมือนเดิม แต่ให้ใส่ออพชั่น l (มาจาก long) เพิ่มเพื่อให้แสดง Metadata ของแต่ละไฟล์ในการแสดงผลด้วย ตัวอย่างดังรูปด้านล่าง
แต่ละบรรทัดจะระบุข้อมูล Metadata ที่เกี่ยวข้องกับไฟล์หรือไดเรกทอรีย่อยนั้นๆ ที่อยู่ในไดเรกทอรีปัจจุบัน ซึ่งข้อมูลแต่ละบรรทัดนี้สามารถแบ่งได้ออกเป็น 8 ส่วน คือ
d  rwx  r-x  r-x    3   himanshu himanshu 4096 Jul 3 14:26 Desktop
d                      คือชนิดไฟล์/ไดเรกทอรี
rwx                   เป็นสิทธิ์การเข้าถึงสำหรับเจ้าของไฟล์
r-x                    เป็นสิทธิ์การเข้าถึงสำหรับกลุ่มผู้ใช้เดียวกัน
r-x                    กลุ่มสุดท้าย เป็นสิทธิ์การเข้าถึงสำหรับผู้ใช้อื่นทุกคน
3                      จำนวน Hard Link (อย่าเพิ่งสนใจตอนนี้)
himanshu         คำแรก แทนชื่อเจ้าของไฟล์
himanshu         คำถัดมา แทนชื่อกลุ่มผู้ใช้ที่ไฟล์นี้อยู่
4096                ขนาดของไฟล์
Jul 3 14:26       คือวันเวลาที่มีการเปลี่ยนแปลงไฟล์หรือไดเรกทอรีนั้นล่าสุด
Desktop           คือชื่อไฟล์หรือไดเรกทอรีนั้นๆ
โดยตัวอักษรตัวแรกที่แสดงประเภทของไฟล์ มีความหมายต่างๆ เช่น d คือไดเรกทอรี,  คือไฟล์ปกติ, s คือไฟล์ซ็อกเก็ต, l คือไฟล์ลิงค์หรือชอร์ทคัทไปไฟล์อื่น เป็นต้น
ตัวอักษรอีก 9 ตัวถัดมาแสดงถึงสิทธิ์การเข้าถึง หรือ Permission ของผู้ใช้กลุ่มต่างๆ โดยตัวอักษร r คือ read (อ่านข้อมูลได้), w คือ write (เขียนข้อมูลได้), และ x คือ execute (สั่งรันการทำงานได้) ซึ่งแบ่งกลุ่ม Permission แต่ละกลุ่มเป็นตัวอักษรกลุ่มละตัว เรียงกันเป็น rwx ถ้าสิทธิ์ไหนไม่ให้สิทธิ์นั้น ก็จะเขียนเป็นเครื่องหมาย – แทน เช่น จากตัวอย่างข้างต้น
ตัวอักษรสามตัวกลุ่มแรก rwx ซึ่งเป็น Permission สำหรับเจ้าของไฟล์/ไดเรกทอรี ระบุว่ามีสิทธิ์ทั้งการอ่าน เขียน และรันการทำงาน
ตัวอักษรกลุ่มถัดมา r-x ซึ่งเป็น Permission ของผู้ใช้ในกลุ่มเดียวกัน ระบุให้มีสิทธิ์เฉพาะการอ่านข้อมูล และรันการทำงาน แต่ไม่มีสิทธิ์แก้ไขเนื้อหา
เช่นเดียวกับตัวอักษรกลุ่มสุดท้าย r-x ซึ่งเป็น Permission ของผู้ใช้รายอื่นๆ ที่ได้สิทธิ์เหมือนกับผู้ใช้ในกลุ่มข้างต้น
เทคนิคพิเศษ: ใส่ออพชั่น –h เพิ่มคู่กับ –l (สามารถเขียนติดกันเป็น –lh) เพื่อแสดงขนาดไฟล์ในหน่วยที่อ่านง่ายขึ้น (เช่น ถ้าขนาดไฟล์ใหญ่เป็นหลัก KB หรือ MB ก็จะย่อตัวเลขโดยใส่ K หรือ M กำกับให้อ่านง่าย เป็นต้น)
  1. เราจะเปลี่ยน Permission ของไฟล์ได้อย่างไร?
เราใช้คำสั่ง chmod ในการเปลี่ยนแปลง Permission ของไฟล์ที่ต้องการ โดยสามารถใส่อากิวเมนต์ที่แทนลักษณะ Permission ได้สองแบบ ทั้งแบบที่ใช้ตัวอักษรเพื่อกำหนดให้ผู้ใช้ทีละกลุ่ม กับแบบที่กำหนดด้วยตัวเลขที่แทน Permission สำหรับผู้ใช้ทั้งสามกลุ่มเสร็จทีเดียว สำหรับแบบแรกนั้น เราจะใช้ตัวอักษรและเครื่องหมายกำกับดังนี้
a มาจาก all แทนกลุ่มผู้ใช้ทุกคน (ทั้งกลุ่มเจ้าของ, กลุ่มผู้ใช้เดียวกัน, และผู้ใช้รายอื่นๆ)
u มาจาก owner แทนเจ้าของไฟล์หรือไดเรกทอรี
g มาจาก group แทนกลุ่มผู้ใช้
o มาจาก others แทนผู้ใช้รายอื่นๆ
+ แทนการเพิ่มสิทธิ์
 แทนการลบสิทธิ์
= แทนการกำหนดสิทธิ์ (พร้อมกันทั้ง r w x)
ตัวอย่างเช่น คำสั่ง chmod u=rwx somefile จะเป็นการกำหนด Permission ให้ทำได้ทั้งการอ่าน, เขียน, และรันไฟล์ สำหรับเจ้าของไฟล์ บนไฟล์ที่ชื่อ somefile นี้
คำสั่ง chmod o+w somefile จะเป็นการเพิ่มสิทธิ์การแก้ไขข้อมูลให้แก่ผู้ใช้รายอื่นๆ
chmod g-r somefile เป็นการดึงสิทธิ์การอ่านข้อมูลออกจากกลุ่มผู้ใช้ที่ไฟล์นี้อยู่ภายใน
chmod a+x somefile เป็นการให้สิทธิ์การรันการทำงานให้แก่ผู้ใช้ทุกคน (ทุกกลุ่ม) เป็นต้น
โดยที่ถ้าเราไม่ระบุกลุ่มผู้ใช้ เช่น การสั่ง chmod +x somefile หรือ chmod –r somefile จะเหมือนกับการกำกับกลุ่มผู้ใช้เป็น a คือ มีผลกับกลุ่มผู้ใช้ทุกกลุ่ม
ส่วนการกำหนด Permission แบบที่สอง คือการกำหนดด้วยตัวเลข โดยใช้ตัวเลขแทนสิทธิ์ประเภทต่างๆ ได้แก่
สิทธิ์ r แทนด้วยเลข 4
สิทธิ์ w แทนด้วยเลข 2
สิทธิ์ x แทนด้วยเลข 1
ซึ่งตัวเลขที่กำหนดเป็นอากิวเมนต์ จะเป็นสามหลัก ที่แต่ละหลักหมายถึงสิทธิ์สำหรับกลุ่มผู้ใช้แต่ละกลุ่ม คือ เจ้าของ, กลุ่มผู้ใช้, และผู้ใช้รายอื่นตามลำดับ ตัวเลขแต่ละหลักนี้มาจากการบวกรวมกันระหว่าง 4+2+1 ตามสิทธิ์ที่จะกำหนดให้กับผู้ใช้กลุ่มนั้นๆ
ตัวอย่างเช่น การสั่งคำสั่ง chmod 761 somefile จะเป็นการกำหนดสิทธิ์ rwx, rw, และ r ให้แก่เจ้าของ, กลุ่มผู้ใช้, และผู้ใช้รายอื่นตามลำดับ ทั้งนี้เนื่องจาก
7 = 4+2+1 = rwx
6 = 4+2+0 = rx-
1 = 0+0+1 = –x

  1. เราจะเปลี่ยนข้อมูล Timestamp ของไฟล์ได้อย่างไร?
ให้ใช้คำสั่ง touch เพื่อแก้ไข Timestamp ของไฟล์ ซึ่งข้อมูล Timestamp หรือเวลากำกับในที่นี้มีอยู่สามประเภทได้แก่ เวลาที่มีการเข้าถึงล่าสุด (Access time), เวลาที่มีการแก้ไขเนื้อหาไฟล์ล่าสุด (Modification time), และเวลาที่มีการเปลี่ยนข้อมูลกำกับไฟล์ล่าสุด (Change time) ซึ่งเวลาประเภทที่สามนี้หมายถึงเวลาที่มีการเปลี่ยนข้อมูลจำเพาะเกี่ยวกับไฟล์หรือ Inode รวมถึงข้อมูล Metadata ล่าสุด นอกจากนี้เราสามารถใช้คำสั่ง stat เพื่อเรียกดู Timestamp ทั้งสามประเภทของไฟล์ที่ต้องการได้ดังรูปด้านล่าง
ในการเปลี่ยนเวลา Access time ให้เป็นเวลา ณ ปัจจุบัน ให้ใช้คำสั่ง touch พร้อมออพชั่น –a เช่น touch -a somefile เช่นเดียวกับการเปลี่ยน Modification time ให้เป็นเวลาปัจจุบัน ให้ใช้ออพชั่น –m แทน
ส่วนการเปลี่ยน Timestamp โดยระบุเวลาที่นอกเหนือจากเวลาในปัจจุบันนั้น ให้ใช้ออพชั่นต่างๆ ได้แก่
 -t เพื่อระบุอากิวเมนต์เป็นตัวเลขติดกันที่ใช้แทน ปี(4 หลัก)-เดือน(2 หลัก)-วัน(2 หลัก)-เวลาในหน่วยชั่วโมง(2 หลัก)-เวลาหน่วยนาที(2 หลัก)-(คั่นด้วย .)-เวลาในหน่วยวินาที(2 หลัก) เช่น touch –t 201407020900.01 –a somefile จะเป็นการเปลี่ยนเวลา Access time ของไฟล์ชื่อ  Somefile เป็น 2014/07/02 09:00:01
 d ใช้กำหนดเวลาในลักษณะที่เข้าใจได้ง่าย ดังเช่น
touch -d “2013-01-10 10:00:07” -a somefile
touch -d “next sunday” -m somefile
touch -d “3 hours ago” -a somefile
  1. เราจะดูประเภทของไฟล์ได้อย่างไร?
เราจะใช้คำสั่ง file ในการเรียกดูประเภทของไฟล์ ดังแสดงในตัวอย่างตามรูปด้านล่างนั้น คำสั่งนี้ต้องการอากิวเมนต์เป็นชื่อไฟล์ที่ต้องการเรียกดูประเภท นอกจากนี้ยังสามารถใช้ไวลด์การ์ด * ในชื่อไฟล์ได้ เช่นการเรียนดูประเภทของไฟล์ของทุกไฟล์บนไดเรกทอรีปัจจุบันจะใช้คำสั่ง file *
  1. หลังดาวน์ไฟล์ที่รันตัวเองได้ (Executable) แล้ว ทำไมถึงสั่งรันไฟล์ดังกล่าวไม่ได้?
บนลีนุกซ์ (และระบบตระกูล *nix อื่นๆ) การที่ไฟล์นั้นๆ จะสั่งรันตัวเองได้หรือไม่ ขึ้นอยู่กับ Permission เท่านั้น ไม่ได้ขึ้นกับสกุลไฟล์หรือเนื้อหาภายในไฟล์แต่อย่างใด นั่นคือเมื่อดาวน์โหลดไฟล์ลงมาที่เครื่อง ระบบไม่ทราบ Permission ของไฟล์ตั้งแต่แรก จึงตั้งค่า Permission เป็นแบบดีฟอลต์ให้ (สามารถตั้งค่า Permission ดีฟอลต์ของไฟล์ที่ถูกสร้างใหม่บนระบบได้ด้วยคำสั่ง umask)
ซึ่งถ้าผู้ใช้ต้องการจะสั่งรันไฟล์ที่เพิ่งดาวน์โหลดลงมาที่เครื่อง ก็จำเป็นต้องให้ Permission ให้สามารถสั่งรันได้ด้วยคำสั่ง chmod ตามที่เขียนไว้ในข้อ 14 ข้างต้น การที่ต้องมากำหนด Permission ด้วยตัวเองกับไฟล์ใหม่ทุกครั้งมีข้อดีตรงที่สามารถป้องกันไวรัส, เวิร์ม, และมัลแวร์อื่นๆ ไม่ให้ติดเชื้อบนระบบโดยที่คุณไม่รู้ตัวได้
  1. จะแสดงจำนวนบรรทัด, คำ, และขนาดข้อมูลในหน่วยไบต์ของแต่ละไฟล์ได้อย่างไร?
เราใช้คำสั่ง wc ในการแสดงจำนวนบรรทัด, คำ, และไบต์ข้อมูลที่นับได้จากไฟล์เป้าหมาย ตัวอย่างเช่น
จากการแสดงผลข้างต้นนั้น
เลข 5 แทนจำนวนบรรทัด
เลข 12 แทนจำนวนคำ
เลข 52 แทนจำนวนไบต์ข้อมูล
นอกจากนี้คุณยังสามารถใช้ออพชั่นต่างๆ เช่น -l, -w, และ -c เพื่อให้ระบุแค่จำนวนบรรทัด, จำนวนคำ, หรือไบต์ข้อมูล ตามลำดับในการแสดงผลได้
  1. วิธีเรียกดูปริมาณการใช้พื้นที่ดิสก์ของไฟล์และไดเรกทอรีต่างๆ
คุณสามารถใช้คำสั่ง du เพื่อแสดงปริมาณการใช้พื้นที่บนดิสก์ของไฟล์และไดเรกทอรีที่ต้องการได้ ดังตัวอย่างต่อไปนี้
หมายเหตุ – ออพชั่น -h นี้ ใช้แสดงปริมาณพื้นที่บนดิสก์ในหน่วยที่มนุษย์เข้าใจง่าย (Human format) เช่น หน่วย K, M
สำหรับคนที่สงสัยว่าพื้นที่ดิสก์ที่ใช้ต่างจากขนาดไฟล์อย่างไรนั้น นั่นคือข้อมูลที่ได้จากคำสั่ง du เป็นขนาดของพื้นที่บนดิสก์ที่ไฟล์นั้นๆ ต้องการจริงๆ ซึ่งต่างจากขนาดไฟล์ดั้งเดิมที่ได้จากสั่ง ls -l ซึ่งเหตุผลที่แตกต่างกันนี้อาจเป็นได้ทั้งเพราะ Slack Space (การกินที่คร่อมหน่วยพื้นที่ย่อยที่สุดบนระบบ) หรือ Sparse File (การกระจายข้อมูลของตัวเองบนดิสก์ ให้สามารถเข้าถึงหรือทำงานได้สะดวกขึ้น)
แต่ถ้าต้องการดูขนาดพื้นที่ที่ใช้ของไดเรกทอรีเป้าหมาย รวมทั้งไดเรกทอรีย่อยภายในนั้นทั้งหมดด้วย ให้ใช้ออพชั่น -s (มาจาก Sum) แต่ถ้าพิมพ์ออพชั่นเป็นตัวพิมพ์ใหญ่ –S จะเป็นการแยกแสดงแต่ละขนาดแจงมาให้ ส่วนการเรียกดูพื้นที่ดิสก์ที่ว่างเหลืออยู่บนระบบ ที่อยู่บนไดเรกทอรีหรือไฟล์เป้าหมายนั้น ให้ใช้คำสั่ง df แทน
เช่นเดียวกับกรณีข้างต้น ออพชั่น –h ใช้แสดงหน่วยขนาดพื้นที่ในหน่วยที่มนุษย์เข้าใจง่าย คำสั่ง df นี้ ถ้าสั่งโดยไม่ใส่ชื่อไฟล์หรือไดเรกทอรีใดๆ เป็นอากิวเมนต์แล้ว จะแสดงผลเป็นพื้นที่ดิสก์ที่มีใช้ทั้งหมดบนระบบแทน
  1. จะเปรียบเทียบความแตกต่างระหว่างสองไฟล์ได้อย่างไร?
เราใช้คำสั่ง diff ในการเทียบกันระหว่างไฟล์สองไฟล์ โดยคำสั่งนี้จะตรวจสอบเนื้อหาของทั้งสองไฟล์ แล้วแสดงผลให้คุณรู้ว่า จำเป็นต้องแก้ไขเนื้อหาในไฟล์อย่างไรเพื่อให้ทั้งสองไฟล์นี้มีเนื้อหาตรงกันทั้งหมด คำสั่งนี้ต้องการชื่อไฟล์ทั้งสองไฟล์เป็นอากิวเมนต์ ลองดูตัวอย่างตามรูปด้านล่างก่อนครับ
คำสั่ง cat (มาจาก concatenate หรือการจัดเรียงข้อมูลให้เป็นระเบียบเพื่อแสดงผล) ตามด้วยชื่อไฟล์นี้ เป็นคำสั่งสำหรับแสดงเนื้อหาภายในไฟล์เป้าหมาย ดังนั้นรูปด้านบนจึงแสดงเนื้อหาของไฟล์ somefile และ anotherfile ตามลำดับ ซึ่งจะเห็นความแตกต่างตรงบรรทัดสุดท้าย ดังนั้นเมื่อเราใช้คำสั่ง diff กับสองไฟล์ดังกล่าว จะได้การแสดงผลดังรูปด้านล่าง
5c5 แปลว่า บรรทัดที่ 5 ของไฟล์ somefile (ไฟล์ที่ป้อนเป็นอากิวเมนต์แรก) มีการเปลี่ยนแปลง (changed) เป็นตามบรรทัดที่ 5 ของไฟล์ anotherfile (ไฟล์ที่ป้อนเป็นอากิวเมนต์ที่สอง) โดยเนื้อหาในบรรทัดที่กล่าวถึงในไฟล์แรกจะขึ้นต้นด้วยเครื่องหมาย < ขณะที่บรรทัดของไฟล์ที่สองที่อ้างถึงจะขึ้นต้นด้วยเครื่องหมาย >
หมายเหตุ – นอกจากตัวอักษร c ที่ระบุถึงข้อความที่มีการเปลี่ยนแปลงแล้ว ยังมีตัวอักษรอื่นอีกได้แก่
a มาจาก added หมายถึงการที่มีบรรทัดเนื้อหาเพิ่มขึ้นในไฟล์ที่สอง
d มาจาก deleted หมายถึงบรรทัดที่ถูกลบไปในไฟล์ที่สอง
คุณสามารถศึกษาคำสั่ง diff เพิ่มเติมนี้ได้จาก http://www.linuxdevcenter.com/pub/a/linux/lpt/28_01.html
  1. เราจะเรียกดูเนื้อหาเฉพาะช่วงบรรทัดแรกๆ และบรรทัดท้ายๆ ของไฟล์ได้อย่างไร?
ใช้คำสั่ง head และ tail เพื่อเรียกดูข้อความไม่กี่บรรทัดช่วงเริ่มต้น และช่วงท้ายไฟล์ที่ต้องการตามลำดับ ซึ่งมีประโยชน์เวลาที่คุณต้องการส่องดูเนื้อหาคร่าวๆ ตัวอย่างเช่น คำสั่ง head –n2 somefile จะแสดงเนื้อหา 2 บรรทัดแรกของไฟล์ที่ชื่อ somefile ขณะที่คำสั่ง tail –n3 somefile จะแสดงเนื้อหา 3 บรรทัดสุดท้ายของไฟล์
ไม่เพียงแค่จำนวนบรรทัดเท่านั้น คุณยังสามารถเรียกดูเป็นจำนวนไบต์ที่ต้องการได้ด้วย โดยใช้ออพชั่น –c แทน –n แต่ปกติแล้ว ถ้าไม่ได้ใส่ออพชั่นกำหนดจำนวนบรรทัดหรือไบต์อย่างเจาะจง คำสั่งทั้งสองข้างต้นจะแสดงเอาต์พุตอยู่ที่ 10 บรรทัดโดยดีฟอลต์
  1. จะจัดเก็บเนื้อหาเอาต์พุตของคำสั่งลงไฟล์ พร้อมกับให้แสดงเนื้อหาดังกล่าวพร้อมกันได้อย่างไร?
ปกติเราใช้คำสั่ง tee (มาจากท่อรูปตัว T ที่เหมือนส่งเอาต์พุตที่ได้รับแยกออกไปสองทาง ทั้งจัดเก็บและแสดงต่อ) เพื่อเขียนข้อมูลที่เป็นเอาต์พุตจากคำสั่งอื่น (รับมาผ่านไปป์ไลน์หรือเครื่องหมาย | ) รวมทั้งจัดแสดงเนื้อหาเอาต์พุตให้เห็น (หรือส่งต่อเอาต์พุตนี้ไปยังคำสั่งอื่นถัดไปผ่านไปป์ไลน์ก็ได้เช่นกัน) ตัวอย่างเช่น คำสั่ง ls | tee ls-dump เมื่อสั่งแล้ว นอกจากจะมีการแสดงเนื้อหาเอาต์พุตของคำสั่ง ls ให้เห็นผ่านหน้าคอนโซลตามปกติแล้ว ยังมีการเขียนเอาต์พุตดังกล่าวลงไฟล์ที่ชื่อว่า ls-dump อีกด้วย
คำสั่ง tee นี้ นอกจากนิยมใช้ในการจัดเก็บและวิเคราะห์ log ต่างๆ ไปพร้อมกันแล้ว ยังสามารถเร่งความเร็วในการทำงานของคุณด้วยการลดขั้นตอนได้ด้วย เช่น การใช้คำสั่ง echo “Linux command line” | tee file1 > file2 จะเป็นการเขียนเนื้อหาข้อความในเครื่องหมายคำพูด บันทึกลงเป็นไฟล์ชื่อ file1 และ file2 ได้พร้อมกัน เป็นต้น
  1. การบีบอัดหรือขยายไฟล์ที่ถูกบีบอัดนี้ทำอย่างไรบ้าง?
การทำงานบนลีนุกซ์จำเป็นต้องเกี่ยวข้องกับไฟล์ที่บีบอัดไว้หรือ Archive ไม่ว่าจะเป็นสกุล .tar, .tar.gz, bz2เป็นต้น ซึ่งการสร้างไฟล์บีบอัด หรือการขยายไฟล์กลับสำหรับไฟล์ตระกูลข้างต้นนี้ เราจะใช้คำสั่งเดียวกันคือ คำสั่ง tar
ตัวอย่างเช่น คำสั่ง tar –cvf practice.tar practice/ จะเป็นการสั่งบีบอัดโฟลเดอร์ practice ลงในไฟล์สกุล .tar ที่ชื่อ practice.tar โดยออพชั่นต่างๆ มีความหมายดังนี้
c มาจาก create เพื่อให้คำสั่ง tar รู้ว่าครั้งนี้เป็นการสร้างไฟล์บีบอัดใหม่
-v มาจาก view สำหรับให้แสดงรายการไฟล์ต่างๆ ที่ถูกบีบอัดลงมา
f มาจาก filename เป็นการระบุชื่อไฟล์บีบอัดที่ต้องการ
สำหรับการขยายไฟล์ที่ถูกบีบอัดในสกุล .tar อย่างในตัวอย่างข้างต้นนั้น จะใช้คำสั่ง tar –xvf practice.tarโดยออพชั่น –x (มาจาก extract) เป็นการระบุให้คำสั่ง tar ขยายไฟล์ออกมากจากไฟล์ที่ถูกบีบอัด ซึ่งคำสั่งข้างต้นนี้จะเป็นการขยายไฟล์แตกออกมาอยู่ที่ไดเรกทอรีปัจจุบัน ซึ่งคุณสามารถใช้ออพชั่น –C เพิ่มสำหรับระบุไดเรกทอรีเป้าหมายในการแตกไฟล์อื่นๆ ได้
ส่วนการสร้างไฟล์บีบอัดในสกุล .tar.gz และ .tar.bz2 นั้น ให้ใส่ออพชั่น –z หรือ –j เพิ่มในคำสั่งตามลำดับ ส่วนกรณีขยายแตกไฟล์สกุลเหล่านี้ก็สามารถใช้คำสั่ง tar แบบเดียวกับตัวอย่างในย่อหน้าที่แล้วได้ คุณสามารถใช้ออพชั่น –t (พร้อมกับ v และ f คือระบุเป็น -tvf) ในกรณีที่แค่อยากดูรายการไฟล์ในไฟล์บีบอัดที่ต้องการเท่านั้น
เทคนิค – ถ้าต้องการทำงานกับไฟล์บีบอัดตระกูล .zip ให้ใช้คำสั่ง zip แทน
  1. ถ้าต้องการแก้ไขเนื้อหาไฟล์โดยใช้โปรแกรม Vim ใช้งานอย่างไรได้บ้าง?
ทูลแก้ไขเนื้อหาไฟล์ชื่อ Vim นี้เป็นตัวแก้ไขไฟล์ข้อความบนคอมมานด์ไลน์ที่มีประสิทธิภาพมากที่สุด แต่ก็ใช้ปุ่มลัดหลายอย่างที่ควรเรียนรู้ไว้ แต่ในการใช้งานเบื้องต้นนั้นค่อนข้างเรียบง่ายและสะดวกสบายมากครับ
ในการเปิดไฟล์เข้ามาในตัวแก้ไขนี้ ให้ใช้คำสั่ง vim ที่ใช้ชื่อไฟล์เป็นอากิวเมนต์ เช่น พิมพ์คำสั่งว่า vim textfile ซึ่งถ้าไฟล์ชื่อ textfile ไม่มีอยู่ในไดเรกทอรีที่กำหนด (หรือไดเรกทอรีปัจจุบันกรณีไม่ได้ใส่พาธเต็ม) โปรแกรมก็จะสร้างไฟล์ใหม่ในชื่อดังกล่าวแทนการเปิดไฟล์เดิม
มีการทำงานใน Vim อยู่สองโหมดคือ โหมด Command และโหมด Insert โดยตัวอก้ไขไฟล์จะเปิดไฟล์ในโหลด Command โดยดีฟอลต์ ซึ่งคุณสามารถเลื่อนเคอเซอร์โดยใช้ปุ่มลูกศรบนคีย์บอร์ดได้ แต่ไม่สามารถแก้ไขเนื้อหาได้จนกว่าจะกดปุ่ม i (มาจาก insert) เพื่อเปิดโหมด Insert ดังในรูป
เมื่อแก้ไขเนื้อหาไฟล์เสร็จเรียบร้อยแล้ว คุณต้องกดปุ่ม ESC เพื่อออกจากโหมด Insert มาอยู่ในโหมด Command เหมือนเดิม ก่อนที่จะกดบันทึกไฟล์ได้

การจะบันทึกไฟล์ ให้พิมพ์ :w แล้วกด Enter

สำหรับการออกจากโปรแกรม ให้พิมพ์ว่า :q แล้วกด Enter หรือจะพิมพ์เป็น :wq เพื่อบันทึกไฟล์แล้วออกจากโปรแกรมพร้อมกัน
หมายเหตุ – การคัดลอกหรือลบเนื้อหาทั้งบรรทัดนั้น ให้เปลี่ยนออกมาอยู่ในโหมด Command แล้วเลื่อนเคอเซอร์มาอยู่บนบรรทัดที่ต้องการ จากนั้นพิมพ์ว่า yy หรือ dd ตามลำดับ สำหรับการปล่อยเนื้อหาหรือ Paste นั้น ให้กดปุ่ม p ในโหมดคอมมานด์เช่นกัน
บทสรุป
แต่ละคำสั่งที่กล่าวถึงในบทความนี้ มีการใช้งานที่ลงลึกและซับซ้อนในแต่ละคำสั่งอีกมากมาย แต่เนื้อหาที่กล่าวถึงจะทำให้คุณใช้งานเบื้องต้นได้อย่างครอบคลุมพอสมควร คุณสามารถใช้คำสั่ง man ในการเรียนรู้เพิ่มเติมในคำสั่งต่างๆ ครับผม

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...