วิธีการติดตั้ง CentOS 6.4
เนื่องจากผมได้เขียนเพิ่มบทความเกี่ยวกับ Asterisk อีกหลายบทความซึ่งไม่เกี่ยวข้องกับ Elastix เลย ซึ่งมีการอ้างอิงถึงว่าให้ติดตั้ง CentOS 6.x แต่กลับยังไม่มีวิธีการติดตั้ง CentOS 6.4 ในเว็บ มันเหมือนขาดอะไรไปอย่างหนึ่งครับ วันนี้มีโอกาสแล้วผมก็เลยนำเสนอบทความการติดตั้ง CentOS 6.4 ซะเลย ซึ่งการติดตั้งก็ไม่ยากครับ แปลกไปจากตอนติดตั้ง CentOS 5.x อยู่สักหน่อย
ดาวน์โหลด CentOS 6.4 ISO ในไทยก็มีหลายเว็บครับที่เป็น Mirrors ของ CentOS.org ที่ให้เราดาวน์โหลดไฟล์ ISO ของ CentOS ได้ เช่น
http://mirrors.issp.co.th/centos/
http://mirror.yourconnect.com/centos
และอีกหลายๆเว็บที่ไม่ได้เอ่ยถึง (เพราะจำไม่ได้) ถ้าเป็น DVD จะมี 2 แผ่นครับ ถ้าติดตั้งแบบไม่เอา GUI ใช้แผ่น 1 แผ่นเดียวก็พอครับ จะเลือกแบบ i386 หรือว่า x86_64 ก็แล้วแต่ CPU ในเครื่องนะครับ
ติดตั้ง CentOS 6.4 ตัวอย่างในรูปที่ท่านจะได้เห็นต่อไปนี้ ผมติดตั้ง CentOS 6.4 บน Vmware นะครับ (เพราะผมไม่มีเครื่องจริง) ติดตั้งบน Notebook คู่ชีพของผมเอง เครื่อง Acer Aspire V5-171
** ถ้าท่านจะติดตั้งบนเครื่อง PC เปล่า ก็ไรท์ไฟล์ ISO ใส่แผ่น เซ็ต BIOS ให้บู๊ตจากไดร์ฟ DVD ใส่แผ่น CentOS แล้วเปิดเครื่อง **
ระหว่างการติดตั้ง จะมีการใช้ปุ่ม Tab ปุ่มลูกศร ปุ่ม Enter โดยกดปุ่ม Tab หรือปุ่มลูกศรเพื่อเปลี่ยนตัวเลือก และกด Enter เพื่อเลือก
เมื่อเครื่องทำการบู๊ตแผ่น DVD หน้าจอแรกจะเห็นเป็นแบบนี้ครับ
หน้าจอต่อๆไปก็ประมาณนี้ครับ ลองทำตามไปทีละรูปครับ
ถ้าไม่รู้จะเลือกอะไรก็เอาตามที่ผมทำเป็นตัวอย่างไว้ก็ได้ครับ
ข้อความไม่เหมือนกับเครื่องของท่านสักเท่าไหร่นักเพราะคนละฮาร์ดแวร์กันครับ
ต่อไปตั้ง Password ของ root ครับ เอาให้จำง่ายๆนะครับแต่คนอื่นเดาได้ยาก
ลอง Login ด้วย root และใส่ Password ตามที่ตั้งไว้ ก็จะได้พร้อมท์ของ Root ครับ ดังรูป
แปลกครับ ตั้งแต่เริ่มต้นติดตั้งจนถึงบู๊ตเครื่องเสร็จก็ยังไม่มีที่ให้เซ็ต IP Address ครับ แถมพอร์ต LAN มันก็ไม่ได้เซ็ตให้ถูก Boot ตอนเปิดเครื่องด้วยอีกต่างหาก ดังนั้นเริ่มต้นเครื่องก็เลยยังไม่มี IP Address ครับ เราต้องเซ็ตให้มัน
2. เซ็ต IP Address, Subnet Mask, Default Gateway, DNS Server ผมใช้โปรแกรม vi แก้ไขข้อมูล
2.1 เซ็คว่า CentOS เห็นพอร์ต LAN หรือยัง
2.2 เซ็ต IP Address, Subnet Mask, Default Gateway
2.3 เซ็ต DNS Server
2.5 ลอง Ping อาจจะ Ping ไปที่ไอพีของ ADSL Router หรือไอพีในเน็ต และ Ping ด้วยชื่อดูด้วย ถ้าเจอก็ OK แล้วครับ
3. ปิด SELinux แก้ไขไฟล์ /etc/selinux/config
บทความที่เกี่ยวข้อง เทคนิคการติดตั้ง Asterisk 11.3.0 + DAHDI 2.6.2 บน CentOS 6.4 เทคนิคการติดตั้ง Asterisk 11.4.0 + DAHDI 2.6.2 บน CentOS 6.4
เนื่องจากผมได้เขียนเพิ่มบทความเกี่ยวกับ Asterisk อีกหลายบทความซึ่งไม่เกี่ยวข้องกับ Elastix เลย ซึ่งมีการอ้างอิงถึงว่าให้ติดตั้ง CentOS 6.x แต่กลับยังไม่มีวิธีการติดตั้ง CentOS 6.4 ในเว็บ มันเหมือนขาดอะไรไปอย่างหนึ่งครับ วันนี้มีโอกาสแล้วผมก็เลยนำเสนอบทความการติดตั้ง CentOS 6.4 ซะเลย ซึ่งการติดตั้งก็ไม่ยากครับ แปลกไปจากตอนติดตั้ง CentOS 5.x อยู่สักหน่อย
ดาวน์โหลด CentOS 6.4 ISO ในไทยก็มีหลายเว็บครับที่เป็น Mirrors ของ CentOS.org ที่ให้เราดาวน์โหลดไฟล์ ISO ของ CentOS ได้ เช่น
http://mirrors.issp.co.th/centos/
http://mirror.yourconnect.com/centos
และอีกหลายๆเว็บที่ไม่ได้เอ่ยถึง (เพราะจำไม่ได้) ถ้าเป็น DVD จะมี 2 แผ่นครับ ถ้าติดตั้งแบบไม่เอา GUI ใช้แผ่น 1 แผ่นเดียวก็พอครับ จะเลือกแบบ i386 หรือว่า x86_64 ก็แล้วแต่ CPU ในเครื่องนะครับ
ติดตั้ง CentOS 6.4 ตัวอย่างในรูปที่ท่านจะได้เห็นต่อไปนี้ ผมติดตั้ง CentOS 6.4 บน Vmware นะครับ (เพราะผมไม่มีเครื่องจริง) ติดตั้งบน Notebook คู่ชีพของผมเอง เครื่อง Acer Aspire V5-171
** ถ้าท่านจะติดตั้งบนเครื่อง PC เปล่า ก็ไรท์ไฟล์ ISO ใส่แผ่น เซ็ต BIOS ให้บู๊ตจากไดร์ฟ DVD ใส่แผ่น CentOS แล้วเปิดเครื่อง **
ระหว่างการติดตั้ง จะมีการใช้ปุ่ม Tab ปุ่มลูกศร ปุ่ม Enter โดยกดปุ่ม Tab หรือปุ่มลูกศรเพื่อเปลี่ยนตัวเลือก และกด Enter เพื่อเลือก
เมื่อเครื่องทำการบู๊ตแผ่น DVD หน้าจอแรกจะเห็นเป็นแบบนี้ครับ
ต่อไปตั้ง Password ของ root ครับ เอาให้จำง่ายๆนะครับแต่คนอื่นเดาได้ยาก
ลอง Login ด้วย root และใส่ Password ตามที่ตั้งไว้ ก็จะได้พร้อมท์ของ Root ครับ ดังรูป
แปลกครับ ตั้งแต่เริ่มต้นติดตั้งจนถึงบู๊ตเครื่องเสร็จก็ยังไม่มีที่ให้เซ็ต IP Address ครับ แถมพอร์ต LAN มันก็ไม่ได้เซ็ตให้ถูก Boot ตอนเปิดเครื่องด้วยอีกต่างหาก ดังนั้นเริ่มต้นเครื่องก็เลยยังไม่มี IP Address ครับ เราต้องเซ็ตให้มัน
2. เซ็ต IP Address, Subnet Mask, Default Gateway, DNS Server ผมใช้โปรแกรม vi แก้ไขข้อมูล
2.1 เซ็คว่า CentOS เห็นพอร์ต LAN หรือยัง
- โค้ด: เลือกทั้งหมด
ls /etc/sysconfig/network-scripts
2.2 เซ็ต IP Address, Subnet Mask, Default Gateway
- โค้ด: เลือกทั้งหมด
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- โค้ด: เลือกทั้งหมด
DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=staticIPADDR=192.168.100.12NETMASK=255.255.255.0GATEWAY=192.168.100.1
2.3 เซ็ต DNS Server
- โค้ด: เลือกทั้งหมด
vi /etc/resolv.conf
- โค้ด: เลือกทั้งหมด
nameserver 192.168.100.1
- โค้ด: เลือกทั้งหมด
service network restart
- โค้ด: เลือกทั้งหมด
ifconfig
2.5 ลอง Ping อาจจะ Ping ไปที่ไอพีของ ADSL Router หรือไอพีในเน็ต และ Ping ด้วยชื่อดูด้วย ถ้าเจอก็ OK แล้วครับ
- โค้ด: เลือกทั้งหมด
ping http://www.google.co.th
3. ปิด SELinux แก้ไขไฟล์ /etc/selinux/config
- โค้ด: เลือกทั้งหมด
vi /etc/selinux/config
- โค้ด: เลือกทั้งหมด
SELINUX=disabled
- โค้ด: เลือกทั้งหมด
yum -y update
- โค้ด: เลือกทั้งหมด
reboot
บทความที่เกี่ยวข้อง เทคนิคการติดตั้ง Asterisk 11.3.0 + DAHDI 2.6.2 บน CentOS 6.4 เทคนิคการติดตั้ง Asterisk 11.4.0 + DAHDI 2.6.2 บน CentOS 6.4
ตอนที่ผมเริ่มใช้ jQuery ครั้งแรกผมรู้สึกตื่นเต้นมาก เพราะ
javascript ที่ผมเคยเขียนยาก ๆ เป็นเรื่องง่ายขึ้นมาก
จากเดิมการจัดการกับแต่ละ element นั้นต้องเขียนยืดยาวแต่ jQuery
ช่วยให้ผมลดเวลาในการเขียนไปได้เยอะเลย เมื่อผมใช้ jQuery
บ่อยขึ้นผมก็พบว่ามีบางอย่างที่เราควรจะต้องหยุดใช้แบบนี้ได้แล้ว
เพื่อช่วยเพิ่มความเร็วในการทำงานและการอ่าน code ก็จะง่ายขึ้นไปด้วย
วันนี้ผมจึงอยากจะนำ 5 สิ่งที่เราควรหยุดทำกับ jQuery ครับ
ปัจจุบันนี้เรานิยมที่จะเอาการโหลดต่าง ๆ ไว้ด้านล่างสุด เพราะว่า browser สามารถที่จะแสดงผลในส่วนที่สามารถโหลดมาได้เลยจึงไม่ต้องรอให้โหลดเสร็จก่อน ในขณะที่รอการโหลดต่าง ๆ ก็สามารถแสดงได้เลย ถึงแม้ว่าจะเป็นอย่างนั้นแต่ถ้าเราเอา script ไปวางไว้ที่ส่วนของ head ก็จะทำให้การโหลด dom ช้า ซึ่งหมายความว่าผู้เข้าชมเว็บยังไม่เห็น UI อะไรและจะมีความรู้สึกว่าเว็บไซต์ของเราช้า ดังนั้นเราจึงควรมีการใส่ loading ต่าง ๆ เข้าไปในส่วนของ dom ต่าง ๆ และปิดท้ายด้วยการโหลด script ของเรา
เนื่องจาก script ของเราอยู่ด้านล่างสุดแสดงว่า dom ของเราก็พร้อมจะใช้งานแล้ว ดังนั้นเราจึงไม่จำเป็นต้องใส่ document ready แล้วครับ ซึ่งตัวอย่างเขียนได้ดังนี้ครับ
MAP
ถ้าเรามี array และเราต้องการที่จะกรองเอาแค่บางอย่างออกมา ซึ่งปกติทั่ว ๆ ก็จะเขียนได้ดังนี้
แต่ว่า jQuery นั้นได้เตรียม method ที่เหมาะกับการเขียนแบบนี้เอาไว้ให้เราแล้วครับ และ method ที่ว่านั้นคือ
ก่อนที่จะใช้ method
เราสามารถที่จะแก้ไขค่าต่าง ๆ ได้ก่อนที่จะทำการ return เพื่อไปสร้าง array ใหม่ จะเห็นนะครับว่าเราจะใช้การ return แทนที่จะเป็นการ push เอง
GREP
จาก code ด้านบนคือความต้องการที่จะเรียกใช้ log ที่อยู่ใน sbtb แต่ว่าเมื่อมาอยู่ใน each แล้วจึงเป็น object ของ cast
วิธีการแก้ไขก็คือการเปลี่ยน reference ให้มันครับ ซึ่งเราสามารถที่จะสร้างตัวแปรขึ้นมาเพื่อเก็บค่า this ก่อนที่จะเข้าสู่ each ซึ่งเราสามารถแก้ไขได้ดังนี้
เวลาที่เราโหลด jQuery ส่วนใหญ่เรามักจะโหลดมาทั้งหมดเพราะว่าสะดวก แต่ว่าความเป็นจริงแล้วเราสามารถที่จะเลือกเอาเฉพาะที่จำเป็นมาใช้ก็พอ เพราะว่าเราอาจจะใช้ library ไม่หมด ดังนั้นจึงควรเลือกเอาที่เหมาะสมกับงานของเราก็พอครับ ผมมีวิธีการที่จะช่วยลดขนาด jQuery ของเรา 2 วิธีครับ คือ ไปที่ github หรือ jQuery builder เพื่อที่จะเลือก jQuery ของเราเองได้ครับ
DOCUMENT.QUERYSELECTOR
ถ้าเราใช้ IE ตั้งแต่ version 8 ขึ้นไปเราสามารถที่จะใช้ $ เพื่อช่วยในการเขียนได้ เห็นไหมครับมีกลิ่นอายของ jQuery อยู่นะเนี่ย ซึ่งจะใช้ $ เป็น document.querySelector ครับ และ method นี้จะ return node ตัวแรกที่ตรงกับความต้องการของเราครับ
แน่นอนครับว่าการเขียนแบบนี้จะไม่มี chaining method ให้เราใช้
ก็เพราะว่ามันไม่ใช่ jQuery นี้เนอะ และจากตัวอย่างข้างบนเปก็นการกำหนด
background color ให้กับ node id salmon ครับ
บางทีการเขียน javascript โดยที่ไม่ใช้ jQuery ก็ทำให้เราเขียนได้สั้นขึ้นกว่าเดิมนะครับ ตัวอย่างข้างล่างจะเป็นการกำหนด src ของ img นะครับ ผมจะเปรียบเทียบให้ดูเลยว่าเขียนแบบธรรมดากับ jQuery สั้นยาวขนาดไหน
จะเห็นว่าการเขียนแบบธรรมดานั้นเราสามารถกำหนดค่าใส่ src ได้เลย
เพราะว่าการเขียนแบบธรรมดานั้นจะรู้อยู่แล้วว่าเป็น node ของ img
แต่ว่าถ้าเป็น jQuery นั้นจะมองทุกอย่างเป็น object
ดังนั้นเราจึงต้องมีการเรียกผ่าน method attr นั้นเองครับ
เนื่องจากว่า document.querySelector นั้นจะ return node ตัวแรกมาให้เราเท่านั้น ดังนั้นถ้าเราต้องการเป็น collection เราจะใช้ตัวนี้ไม่ได้ เราสามารถที่จะอ่่านเป็น collection ได้จาก document.querySelectorAll
DOCUMENT.QUERYSELECTORALL
ต่อไปเราจะทำการเขียน $ เพื่อเรียก node ตัวเดียว และ $$ เพื่อเรียก node ทีละหลาย ๆ ตัว และเวลาที่เราจะเอาไปใช้ส่วนมากมักจะต้องการเป็น array ดังนั้นเราสามารถที่จะ convert node ที่ได้จาก collection ไปเป็น array ได้จาก Array.prototype.slice.call(nodeList) มาดูตัวอย่างเลยครับ
ก่อนอื่นผมต้องบอกก่อนเลยนะครับว่าการที่เราจะ convert nodeList เป็น array นั้นไม่ support IE8 และ version ที่ต่ำกว่านั้นนะครับ
มาถึงตรงนี้ผมว่าเราน่าจะพอเข้าใจแล้วว่าเราควรเลือกใช้ jQuery เฉพาะที่จำเป็นเท่านั้นเพื่อช่วยเพิ่มประสิทธิภาพในการทำงาน และในบางกรณีถ้าหลีกเลี่ยงการใช้ jQuery ได้ก็เป็นเรื่องดีถ้างานไม่มีความซ้บซ้อนมาก เพราะว่าไม่ว่าจะเป็น framework ตัวไหนก็จะมักจะมี code จำนวนมาก ซึ่งมีทั้งจำเป็นและไม่จำเป็น ดังนั้นเราจึงควรบริหารจัดการให้ดี ๆ นะครับ ผมหวังว่าบทความนี้จะช่วยให้เพื่อน ๆ ใช้ jQuery ได้ดีขึ้นนะครับ
ที่มา : 5 Things You Should Stop Doing With jQuery
1. การเลิกใช้ Document ready
ในสมัยก่อนเวลาที่เว็บไซต์โหลดหน้าเพื่อมาแสดงนั้นจะต้องโหลดมาจนเสร็จ ก่อน เสร็จแล้วจึงจะแปลงหน้านั้นออกมาเป็นหน้าเว็บไซต์ โดยเฉพาะอย่างยิ่งถ้าเรามีการโหลดไฟล์ต่าง ๆ เข้ามาอีก ซึ่งหมายความว่า server จะต้องทำการโหลดส่วนนั้นเข้ามา ทำให้การแสดงผลช้า และส่วนมากก็จะเป็นไฟล์ javascript หรือ CSS นั้นเองครับปัจจุบันนี้เรานิยมที่จะเอาการโหลดต่าง ๆ ไว้ด้านล่างสุด เพราะว่า browser สามารถที่จะแสดงผลในส่วนที่สามารถโหลดมาได้เลยจึงไม่ต้องรอให้โหลดเสร็จก่อน ในขณะที่รอการโหลดต่าง ๆ ก็สามารถแสดงได้เลย ถึงแม้ว่าจะเป็นอย่างนั้นแต่ถ้าเราเอา script ไปวางไว้ที่ส่วนของ head ก็จะทำให้การโหลด dom ช้า ซึ่งหมายความว่าผู้เข้าชมเว็บยังไม่เห็น UI อะไรและจะมีความรู้สึกว่าเว็บไซต์ของเราช้า ดังนั้นเราจึงควรมีการใส่ loading ต่าง ๆ เข้าไปในส่วนของ dom ต่าง ๆ และปิดท้ายด้วยการโหลด script ของเรา
เนื่องจาก script ของเราอยู่ด้านล่างสุดแสดงว่า dom ของเราก็พร้อมจะใช้งานแล้ว ดังนั้นเราจึงไม่จำเป็นต้องใส่ document ready แล้วครับ ซึ่งตัวอย่างเขียนได้ดังนี้ครับ
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<p id="zack">This element is on the page <strong>BEFORE</strong> all the scripts. No document ready needed.</p> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" charset="utf-8"> // if you include your scripts at the very bottom, you don't need document ready (function($) { $("#zack").css("color", "green"); $("#slator").css("color", "red"); }(jQuery)); </script><p id="slater">This element comes after the scripts and won't be available.</p> |
2. หยุดใช้การวนรอบแบบผิด ๆ
ผมว่ามี method ตัวหนึ่งที่ผมคิดว่าใช้บ่อยมาก ๆ นั้นก็คือeach
เพราะผมเห็นได้บ่อยมากใน code ของผมและของนักพัฒนาท่านอื่น ๆ
ด้วยความที่สั้นและเขียนง่ายใคร ๆ ก็เรียกใช้จริงไหมครับ
ฟังแล้วอาจจะดูดีเพียงแต่ว่า jQuery ไม่ได้มีแค่ each เท่านั้นที่ใช้ในการวนรอบMAP
ถ้าเรามี array และเราต้องการที่จะกรองเอาแค่บางอย่างออกมา ซึ่งปกติทั่ว ๆ ก็จะเขียนได้ดังนี้
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
(function($) { var allStarCast = [ { firstName: "Zack", lastName: "Morris" }, { firstName: "Kelly", lastName: "Kapowski" }, { firstName: "Lisa", lastName: "Turtle" }, { firstName: "Screech", lastName: "Powers" }, { firstName: "A.C.", lastName: "Slater" }, { firstName: "Jessie", lastName: "Spano" }, { firstName: "Richard", lastName: "Belding" } ] // iterate through the cast and find zack and kelly var worldsCutestCouple = []; $.each(allStarCast, function(idx, actor) { if (actor.firstName === "Zack" || actor.firstName === "Kelly") { worldsCutestCouple.push(actor); } }); console.log(worldsCutestCouple);}(jQuery)); |
map ครับ ซึ่งมันจะสร้าง array ตัวใหม่ให้เราและจะ return ตัวนั้นออกมาครับ ส่วนวิธีการเขียนก็เขียนได้ดังนี้ครับ
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
(function($) { var allStarCast = [ { firstName: "Zack", lastName: "Morris" }, { firstName: "Kelly", lastName: "Kapowski" }, { firstName: "Lisa", lastName: "Turtle" }, { firstName: "Screech", lastName: "Powers" }, { firstName: "A.C.", lastName: "Slater" }, { firstName: "Jessie", lastName: "Spano" }, { firstName: "Richard", lastName: "Belding" } ] // iterate through the cast and find zack and kelly var worldsCutestCouple = $.map(allStarCast, function(actor, idx) { if (actor.firstName === "Zack" || actor.firstName === "Kelly") { return actor; } }); console.log(worldsCutestCouple);}(jQuery)); |
map นั้นอยากให้ดูที่ arguments
ให้ดีครับ เพราะว่า arguments
ทั้งสองนั้นอยู่สลับต่ำแหน่งกันครับและเราจะไม่ใช้ this นะครับ เราจะใช้
object
แทนเลยครับ อยากจะเตือนไว้ก่อนครับเพราะว่าถ้าเริ่มต้นแล้วอาจจะงงก็เป็นได้
ครับเราสามารถที่จะแก้ไขค่าต่าง ๆ ได้ก่อนที่จะทำการ return เพื่อไปสร้าง array ใหม่ จะเห็นนะครับว่าเราจะใช้การ return แทนที่จะเป็นการ push เอง
GREP
grep เป็น method ที่จะทำการลดจำนวนของ array
แทนที่จะสร้างใหม่ ซึ่งเราสามารถที่จะคัดเลือกได้ว่าจะเอาค่าจาก array
โดยถ้าเราต้องการเราก็ return true และถ้าไม่ต้องการก็ return false ครับ
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
(function($) { var allStarCast = [ { firstName: "Zack", lastName: "Morris" }, { firstName: "Kelly", lastName: "Kapowski" }, { firstName: "Lisa", lastName: "Turtle" }, { firstName: "Screech", lastName: "Powers" }, { firstName: "A.C.", lastName: "Slater" }, { firstName: "Jessie", lastName: "Spano" }, { firstName: "Richard", lastName: "Belding" } ] // iterate through the cast and find zack and kelly var worldsCutestCouple = $.grep(allStarCast, function(actor) { return (actor.firstName === "Zack" || actor.firstName === "Kelly"); }); console.log(worldsCutestCouple);}(jQuery)); |
3. เลิกใช้ “this”
ใน jQuery นั้นการใช้this นั้นมักจะมีปัญหาค่อนข้างเยอะ เพราะว่าเมื่อเราวาง this ไว้ในแต่ละที่ของ code ก็จะมีความหมายที่แตกต่างกัน เช่น ถ้าอยู่ใน each ก็จะเป็นการอ้าง object นั้น ๆ ดังนั้นแล้วเวลาที่เราจะเขียน this จึงควรมีการระมัดระวัง ดูตัวอย่างการใช้ this ที่มีปัญหาครับ
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
(function($) { var sbtb = { log: function(message) { $("#log").append("").html(message); }, cast: [ { firstName: "Zack", lastName: "Morris", soExcited: false }, { firstName: "Kelly", lastName: "Kapowski", soExcited: true }, { firstName: "Lisa", lastName: "Turtle", soExcited: true }, { firstName: "Screech", lastName: "Powers", soExcited: false }, { firstName: "A.C.", lastName: "Slater", soExcited: false }, { firstName: "Jessie", lastName: "Spano", soExcited: true }, { firstName: "Richard", lastName: "Belding", soExcited: false } ], soExcited: function() { // use "this" to get a reference to the cast on this object $.each(this.cast, function(idx, actor) { // call the log function this.log(actor.firstName + " " + actor.lastName); // BOOM! Splosions. // "this" is now a cheesy actor, not the sbtb object anymore }); } }; sbtb.soExcited();}(jQuery)); |
วิธีการแก้ไขก็คือการเปลี่ยน reference ให้มันครับ ซึ่งเราสามารถที่จะสร้างตัวแปรขึ้นมาเพื่อเก็บค่า this ก่อนที่จะเข้าสู่ each ซึ่งเราสามารถแก้ไขได้ดังนี้
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
(function($) { var sbtb = { log: function(message) { $("#log").append("").append(message); }, cast: [ { firstName: "Zack", lastName: "Morris", isExcited: false }, { firstName: "Kelly", lastName: "Kapowski", isExcited: true }, { firstName: "Lisa", lastName: "Turtle", isExcited: true }, { firstName: "Screech", lastName: "Powers", isExcited: false }, { firstName: "A.C.", lastName: "Slater", isExcited: false }, { firstName: "Jessie", lastName: "Spano", isExcited: true }, { firstName: "Richard", lastName: "Belding", isExcited: false } ], soExcited: function() { // store this in that so we don't get confused later on when // our the context of "this" changes out from underneath us var that = this; // use "that" to get a reference to the cast on this object $.each(that.cast, function(idx, actor) { // call the log function if (actor.isExcited) { that.log(actor.firstName + " " + actor.lastName); // the value of "that" doesn't change - it's still the object } }); } }; sbtb.soExcited();}(jQuery)); |
4. เลิกใช้ jQuery แบบเต็ม ๆ
jQuery นั้นมีการพัฒนาไปเรื่อย ๆ และการพัฒนานั้นก็คือการเพิ่ม function/feature ใหม่ ๆ เข้ามาเรื่อย ๆ นั้นหมายความว่าตัวไฟล์ jQuery จะมีขนาดใหญ่ขึ้น ดังนั้นเวลาที่เราโหลดก็จะใช้เวลาโหลดนานไปด้วยเวลาที่เราโหลด jQuery ส่วนใหญ่เรามักจะโหลดมาทั้งหมดเพราะว่าสะดวก แต่ว่าความเป็นจริงแล้วเราสามารถที่จะเลือกเอาเฉพาะที่จำเป็นมาใช้ก็พอ เพราะว่าเราอาจจะใช้ library ไม่หมด ดังนั้นจึงควรเลือกเอาที่เหมาะสมกับงานของเราก็พอครับ ผมมีวิธีการที่จะช่วยลดขนาด jQuery ของเรา 2 วิธีครับ คือ ไปที่ github หรือ jQuery builder เพื่อที่จะเลือก jQuery ของเราเองได้ครับ
5. ไม่ใช้ jQuery ตอนที่ไม่จำเป็น
เมื่อก่อนนั้นเวลาที่ผมเริ่มทำ project อะไรก็ตามที่มี javascript เข้ามาเกี่ยวข้องผมมักจะนำเอา jQuery เข้ามาร่วมด้วยเสมอ ถึงแม้ว่าจะเป็น project ง่าย ๆ ผมก็ยังใช้ เพราะด้วยความง่ายของ jQuery ที่ช่วยให้ผมจัดการกับ DOM ต่าง ๆ ได้อย่างสะดวกสบาย แต่ว่าที่จริงแล้วการเขียนแบบธรรมดานั้นก็สามารถจัดการ DOM ได้ไม่อยากเท่าไหร่เลยครับDOCUMENT.QUERYSELECTOR
ถ้าเราใช้ IE ตั้งแต่ version 8 ขึ้นไปเราสามารถที่จะใช้ $ เพื่อช่วยในการเขียนได้ เห็นไหมครับมีกลิ่นอายของ jQuery อยู่นะเนี่ย ซึ่งจะใช้ $ เป็น document.querySelector ครับ และ method นี้จะ return node ตัวแรกที่ตรงกับความต้องการของเราครับ
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<div class="container"> <ul> <li id="pink">Pink</li> <li id="salmon">Salmon</li> <li id="blue">Blue</li> <li id="green">Green</li> <li id="red">Red</li> </ul></div><script> // create a global '$' variable window.$ = function(selector) { return document.querySelector(selector); }; (function() { // select item1 by id and change it's background color to salmon var item = $("#salmon").style.backgroundColor="salmon"; console.log(item); }());</script> |
บางทีการเขียน javascript โดยที่ไม่ใช้ jQuery ก็ทำให้เราเขียนได้สั้นขึ้นกว่าเดิมนะครับ ตัวอย่างข้างล่างจะเป็นการกำหนด src ของ img นะครับ ผมจะเปรียบเทียบให้ดูเลยว่าเขียนแบบธรรมดากับ jQuery สั้นยาวขนาดไหน
1
2
3
4
5
|
// the jQuery way$("#picture").attr("src", "http://placekitten.com/200/200");// Vanilla JS with $ mapped to querySelector$("#picture").src = "http://placekitten.com/200/200"; |
เนื่องจากว่า document.querySelector นั้นจะ return node ตัวแรกมาให้เราเท่านั้น ดังนั้นถ้าเราต้องการเป็น collection เราจะใช้ตัวนี้ไม่ได้ เราสามารถที่จะอ่่านเป็น collection ได้จาก document.querySelectorAll
DOCUMENT.QUERYSELECTORALL
ต่อไปเราจะทำการเขียน $ เพื่อเรียก node ตัวเดียว และ $$ เพื่อเรียก node ทีละหลาย ๆ ตัว และเวลาที่เราจะเอาไปใช้ส่วนมากมักจะต้องการเป็น array ดังนั้นเราสามารถที่จะ convert node ที่ได้จาก collection ไปเป็น array ได้จาก Array.prototype.slice.call(nodeList) มาดูตัวอย่างเลยครับ
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
<div class="container"> <ul> <li id="pink">Pink</li> <li id="salmon">Salmon</li> <li id="blue">Blue</li> <li id="green">Green</li> <li id="red">Red</li> </ul></div><script> // custom lightweight selector implementation // nickname: dolla window.$ = function(selector) { return document.querySelector(selector); }; window.$$ = function(selector) { var items = {}, results = [], length = 0, i = 0; // this doesn't work on IE 8- and Blackberry Browser results = Array.prototype.slice.call(document.querySelectorAll(selector)); length = results.length; // add the results to the items object for ( ; i < length; ) { items[i] = results[i]; i++; } // add some additional properties to this items object to // make it look like an array items.length = length; items.splice = [].splice(); // add an 'each' method to the items items.each = function(callback) { var i = 0; for ( ; i < length; ) { callback.call(items[i]); i++; } } return items; }; // end custom selector API (function() { // select the green item and crank up the font size $("#green").style.fontSize = "2em"; // select item1 by id and change it's background color to salmon $$("li").each(function() { this.style.backgroundColor = this.id; }); }());</script> |
มาถึงตรงนี้ผมว่าเราน่าจะพอเข้าใจแล้วว่าเราควรเลือกใช้ jQuery เฉพาะที่จำเป็นเท่านั้นเพื่อช่วยเพิ่มประสิทธิภาพในการทำงาน และในบางกรณีถ้าหลีกเลี่ยงการใช้ jQuery ได้ก็เป็นเรื่องดีถ้างานไม่มีความซ้บซ้อนมาก เพราะว่าไม่ว่าจะเป็น framework ตัวไหนก็จะมักจะมี code จำนวนมาก ซึ่งมีทั้งจำเป็นและไม่จำเป็น ดังนั้นเราจึงควรบริหารจัดการให้ดี ๆ นะครับ ผมหวังว่าบทความนี้จะช่วยให้เพื่อน ๆ ใช้ jQuery ได้ดีขึ้นนะครับ
ที่มา : 5 Things You Should Stop Doing With jQuery
วันนี้
ผมเข้ามาดูเว็บไซต์ของผมตามปกติแต่ว่ามีเหตุการณ์ไม่ปกติเกิดขึ้น
เว็บไซต์ของผมไม่สามารถเปิดได้ เมื่อผมลอง ssh เข้าไปดูที่ server
ก็ปรากฎว่าเครื่องน่าจะมีการ restart ซึ่งทำให้ php service และ mysql
service ไม่ทำงาน วันนี้ผมเลยทำการตั้งค่า service ต่าง ๆ
ที่จำเป็นให้ทำงานเมื่อ server เปิดเครื่อง
Runlevel
ก่อนที่จะไปตั้งค่าอยากให้ทำความเข้าใจกับระบบของ CentOS ก่อนว่า การทำงานของ CentOS นั้นจะมี level ในการทำงานที่แตกต่างกันโดยมีตั้ง 0-6 ซึ่งแต่ละระดับก็จะทำงานกันคนละที่กันครับ ถ้าเราต้องการทราบว่าตอนนี้เรากำลังทำงานอยู่ใน level ไหนให้พิมพ์ว่าrunlevel ดูครับ ส่วนมากจะอยู่ที่ level 3 กันครับ เราสามารถดูรายละเอียดของแต่ละ level ได้ที่ไฟล์ /etc/inittab เมื่อเปิดดูแล้วจะเป็นแบบนี้ครับ# 0 – halt (Do NOT set initdefault to this) # 1 – Single user mode # 2 – Multiuser, without NFS (The same as 3, if you do not have networking) # 3 – Full multiuser mode # 4 – unused # 5 – X11 # 6 – reboot (Do NOT set initdefault to this)
ตรงนี้ไม่ต้องสนใจอะไรมากมายครับ อยากให้ยึดที่ level 3 เป็นหลักนะครับ ให้เข้าใจไว้เลยนะครับว่าถ้าอยากให้ service ทำงานตอน boot เครื่องก็ตั้งค่าเป็น level 3 นี้หล่ะครับ
เมื่อเข้าสู่การทำงานแต่ละ level
เมื่อ CentOS เข้าสู่ช่วงการทำงานในระดับบต่าง ๆ ก็จะมีการทำงานในการเรียก service ไม่ต่างกันมากครับ เช่น ถ้าระบบกำลังเข้าสู่ช่วงทำงานใน level 3 ตัวระบบก็จะไปเรียกไฟล์ที่อยู่ใน directory สำหรับ level 3 ให้ทำงาน นั้นก็คือ/etc/rc3.d เช่นเดียวกันถ้าเป็น level 5 ก็จะเรียกที่ /etc/rc5.d ใน directory เหล่านี้ก็จะมีไฟล์เพื่อใช้สำหรับ excute service ที่ต้องการนั้นเองครับระบบจะเลือกไฟล์ที่เริ่มต้นด้วยตัว S(ตัว s ใหญ่นะครับ) และตัวเลขถัดมาคือลำดับก่อนหลังในการเรียกและสุดท้ายมักจะเป็นชื่อ service ส่วนไฟล์ที่เริ่มต้นด้วยตัว K ก็จะไม่ถูกเรียกในระดับนี้นะครับ
การใช้ chkconfig
การเรียกใช้ chkconfig ก็คือการจัดการกับไฟล์ที่อยู่ใน rc<level>.d ต่าง ๆ นั้นเองครับ ซึ่งการใช้งานนั้นเรียกได้ว่าง่ายมากเลยทีเดียวการดูว่า chkconfig จัดการ service ใดอยู่บ้าง – เราสามารถเรียกดูได้ง่ายดายมากเพียงแค่พิมพ์
chkconfig หรือ chkconfig --listการเพิ่ม service เข้าสู่การการจัดการของ chkconfig – เราสามารถเพิ่ม service ที่เราต้องการได้โดยเราต้องย้าย directory ไปที่
/etc/init.d/ ก่อนนะครับ(บางทีอาจไม่ต้องเปลี่ยน directory ก็ได้) หลังจากนั้นเราก็พิมพ์ว่า chkconfig --add <service name> ตัวอย่างเช่นเราต้องการเพิ่ม php-fpm เราก็พิมพ์ chkconfig --add php-fpmการนำ service ออกจากการจัดการ chkconfig – เราสามารถนำ service ออกจากการจัดการโดยเรียก
chkconfig --del <service name>การตั้งค่า service เพื่อทำงานใน level ต่าง ๆ – หลังจากที่เราได้ add service เข้าสู่การจัดการของ chkconfig แล้ว ต่อไปก็คือการตั้งค่าว่าจะให้ระบบเรียกใช้ service ทำงานเมื่อเข้าสู่ระดับใด ผมต้องการให้ service ทำงานในระดับ 3 ผมก็จะเรียก
chkconfig --level 3 php-fpm on หรือถ้าต้องการให้ทำงานใน level 3 และ level 5 ก็จะเรียก chkconfig --level 35 php-fpm on หรือถ้าจะง่าย ๆ ก็เรียก chkconfig php-fpm on เพราะ default คือการปรับใน level 2,3,4,5การตั้งค่า service เพื่อยกเลิกการทำงานในตอนเริ่มต้น – เราสามารถปรับให้หยุดการเริ่มต้น service ได้โดยการสั่งให้ตั้งค่าเป็น off เช่น
chkconfig php-fpm off หรือ chkconfig --level 35 php-fpm offหวังว่าบทความนี้จะช่วยให้เราสามารถเพิ่มความสามารถการทำงานของ CentOS ของเราได้มากขึ้นนะครับ เพราะการทำให้ service ทำงานตอน boot นั้นเป็นเรื่องที่สำคัญเลยทีเดียวครับ
วิธีนี้สะดวกมากครับ ไม่ต้อง write แผ่น แถมเร็วกว่าด้วย
ใช้บ่อยมาก สิ่งที่ต้องมี
- Flashdrive (แหงล่ะ) ขนาด 1GB ขึ้นไป
- ไฟล์ ISO ของ CentOS version ที่จะใช้ โหลดได้จาก mirror ของ CentOS (THZHost เป็นต้น ฮา) แนะนำว่าโหลดแค่ตัว minimal ก็พอแล้วครับ ไม่ต้องใช้ DVD หรอก software อื่นค่อยไปสั่งลงทีหลังเอา
- โปรแกรม LiveUSB Creator โหลดได้จาก https://fedorahosted.org/liveusb-creator/
- Format Flashdrive ให้เรียบร้อย (อันนี้ไม่ค่อยจำเป็นเท่าไหร่ แต่เผื่อไว้)
- เปิดโปรแกรม LiveUSB Creator ขึ้นมา
- กดปุ่ม Browse เลือกไฟล์ ISO ที่โหลดไว้
- เลือก Target Device เป็น Drive ของ Flashdrive ที่เสียบไว้ แล้วกดปุ่ม Create Live USB
- รอ…
- เสร็จแล้วก็ปิดโปรแกรม LiveUSB Creator
- ก๊อปไฟล์ ISO เมื่อกี้ใส่ Flashdrive ลงไปด้วย
- ถอด Flashdrive ไปใช้บูตและติดตั้งได้เลยครับ
ติดตั้ง MRTG บน CentOS
MRTG คือโปรแกรมทีทำงานอยู่บนโปรโตคอล SNMP ซึ่งเรา ติดตั้ง MRTG Server ไว้เพื่อคอยตรวจข้อมูล ที่ Request และ Respone ผ่าน HTTP ของจากรายการ สถิติของ Network แล้ว MRTG ยังสามารถรายงาน Memory, CPU Load, TCP Connections, Server load average ได้อีกด้วย
วิธีการติดตั้งโปรแกรม MRTG บน CentOS
ในการใช้งาน MRTG เราต้อง snmpd ลงไปด้วยเพื่อไว้ตรวจจับการทำงานของ Network
วิธีการติดตั้ง snmpd กับ mrtg
#yum -y install net-snmp net-snmp-utils mrtg
แก้ไข config ของ snmpd
#nano /etc/snmp/snmpd.conf
เพิ่มข้อความ
syslocation Thailand
syscontact admin
sysservices 79
rocommunity public 127.0.0.1
agentaddress 127.0.0.1
ตั้งค่าให้ snmpd ทำงานทุกครั้งเมื่อเปิดเครื่อง
#chkconfig snmpd on
*** ถ้าเจอข้อความแจ้ง “Error bash: chkconfig: command not found”
ให้แก้โดย
# rpm -qa |grep chkconfig
chkconfig-1.3.11.1-1
# whereis chkconfig
chkconfig: /sbin/chkconfig /usr/share/man/man8/chkconfig.8.gz
แล้วรันคำสั่งเดิมอีกครั้ง
Start snmpd
#/etc/init.d/snmpd restart
MRTG คือโปรแกรมทีทำงานอยู่บนโปรโตคอล SNMP ซึ่งเรา ติดตั้ง MRTG Server ไว้เพื่อคอยตรวจข้อมูล ที่ Request และ Respone ผ่าน HTTP ของจากรายการ สถิติของ Network แล้ว MRTG ยังสามารถรายงาน Memory, CPU Load, TCP Connections, Server load average ได้อีกด้วย
วิธีการติดตั้งโปรแกรม MRTG บน CentOS
ในการใช้งาน MRTG เราต้อง snmpd ลงไปด้วยเพื่อไว้ตรวจจับการทำงานของ Network
วิธีการติดตั้ง snmpd กับ mrtg
#yum -y install net-snmp net-snmp-utils mrtg
แก้ไข config ของ snmpd
#nano /etc/snmp/snmpd.conf
เพิ่มข้อความ
syslocation Thailand
syscontact admin
sysservices 79
rocommunity public 127.0.0.1
agentaddress 127.0.0.1
ตั้งค่าให้ snmpd ทำงานทุกครั้งเมื่อเปิดเครื่อง
#chkconfig snmpd on
*** ถ้าเจอข้อความแจ้ง “Error bash: chkconfig: command not found”
ให้แก้โดย
# rpm -qa |grep chkconfig
chkconfig-1.3.11.1-1
# whereis chkconfig
chkconfig: /sbin/chkconfig /usr/share/man/man8/chkconfig.8.gz
แล้วรันคำสั่งเดิมอีกครั้ง
Start snmpd
#/etc/init.d/snmpd restart
คำสั่ง ls : : : แสดงรายชื่อแฟ้มในห้องปัจจุบัน หรือห้องอื่น ๆ ที่ต้องการ
คำสั่ง chmod : : : เปลี่ยนสถานะของแฟ้มเช่น Read Write eXecute
คำสั่ง man : : : แสดงรายละเอียดของคำสั่ง (Manual)
คำสั่ง mkdir, rmdir, cd : : : คำสั่งเกี่ยวกับ Directory หรือ Folder เพื่อสร้าง หรือลบ
คำสั่ง pico : : : editor ยอดฮิตใน Linux ที่ต้องมากับ Pine เป็น Text mode ที่ใช้ง่ายที่สุด
คำสั่ง emacs : : : editor ยอดฮิตใน Linux ใช้ยากกว่า pico นิดหน่อย
คำสั่ง vi : : : editor ยอดฮิตใน Linux ที่ใช้ยากที่สุด
คำสั่ง id, finger, who, w : : : โปรแกรมตรวจสอบ username ของตนเอง
คำสั่ง cat : : : แสดงข้อมูลในแฟ้มเหมือนคำสั่ง type ในระบบ DOS
คำสั่ง ifconfig : : : ดู IP หรือเพิ่ม IP เข้าไปใน linux server
คำสั่ง netstat : : : แสดงสถานะของเครือข่าย
คำสั่ง service : : : แสดงสถานะโปรแกรมที่เปิดให้บริการ
คำสั่ง xinetd : : : แสดงบริการที่เปิดใต้โปรแกรม xinetd
คำสั่ง whereis : : : ค้นหาแฟ้มที่ต้องการว่าอยู่ที่ห้องใด
คำสั่ง cp, rm, mv : : : จัดการแฟ้มเช่น คัดลอก ลบ และย้าย
คำสั่ง ping : : : ตรวจสอบ ip และการเชื่อมต่อ internet
คำสั่ง env : : : แสดงค่า environment ปัจจุบัน
คำสั่ง lynx : : : Text browser ที่ใช้งานง่าย ใช้ดู source หรือ download ได้
คำสั่ง nslookup : : : แสดงข้อมูลเกี่ยวกับ name server จาก ip หรือ domain name
คำสั่ง tail : : : แสดงส่วนท้ายของแฟ้มที่มีขนาดใหญ่ ต้องข้ามกับ cat ที่ดูตั้งแต่เริ่มแฟ้ม
คำสั่ง telnet : : : ใช้ติดต่อเข้า server ต่าง ๆ ตาม port ที่ต้องการ
คำสั่ง df : : : แสดง partition ของ linux พร้อมขนาดที่ใช้ไป
คำสั่ง du : : : แสดงพื้นที่ใช้งานในแต่ละ Directory
คำสั่ง ps : : : แสดง process ที่กำลังทำงานอยู่ทั้งของเครื่อง และตนเอง
คำสั่ง kill : : : ยกเลิก process ที่ทำงานอยู่
คำสั่ง find : : : ค้นหาแฟ้มที่ต้องการภายในทุก ๆ directory ได้
คำสั่ง gzip : : : คลายการบีบอัด หรือแตกแฟ้มประเภท .gz
คำสั่ง tar : : : คลายการบีบอัด หรือแตกแฟ้มประเภท .tar
คำสั่ง last : : : แสดงรายชื่อผู้ใช้งานระบบปัจจุบันไปถึงอดีต
คำสั่ง grep : : : เลือกข้อความที่ต้องการภายในแต่ละบรรทัด
คำสั่ง date, hwclock : : : ใช้กำหนด หรือแสดงเวลาปัจจุบัน
คำสั่ง top : : : แสดง process ที่ทำงานในปัจจุบัน พร้อม refresh ตลอดเวลา
คำสั่ง ntsysv และ setup : : : กำหนดบริการที่ต้องการเปิด หรือปิด เช่น httpd หรือ vsftp เป็นต้น
คำสั่ง route : : : ใช้กำหนด แสดง ตารางเส้นทาง
คำสั่ง shutdown, reboot : : : ใช้ปิดเครื่อง หรือ ปิดและเปิดเครื่องใหม่อย่างถูกวิธี
คำสั่ง runlevel : : : คู่กับแฟ้ม /etc/inittab
คำสั่ง fsck : : : ซ่อมแซมระบบแฟ้มใน linux
คำสั่ง chown, chgrp : : : เปลี่ยนเจ้าของ หรือเปลี่ยนกลุ่ม
คำสั่ง chkconfig : : : กำหนด หรือแสดง บริการที่สั่งประมวลผลใน level ต่าง ๆ ขณะเปิดเครื่อง
คำสั่ง mount, umount : : : สั่งเชื่อมต่ออุปกรณ์ หรือ partition เช่น Diskette หรือ Handy drive เป็นต้น
คำสั่ง mkbootdisk : : : สร้างแผ่น boot disk เพื่อใช้ boot ระบบ linux ขึ้นมาภายหลัง
คำสั่ง traceroute : : : แสดงเลข ip ของเครื่องที่ถูกเชื่อมต่อ ไปยังปลายทางที่ต้องการ
คำสั่ง rpm : : : ใช้ตรวจสอบ เพิ่ม หรือลบ package ของระบบ linux เกือบทั้งหมด
คำสั่ง su : : : ขอเปลี่ยนตนเองเป็น Super user เพื่อใช้สิทธิสูงสุดในการบริหารระบบ ที่ผู้ใช้ปกติทำไม่ได้
คำสั่ง useradd : : : เพิ่มผู้ใช้รายใหม่เข้าไปในระบบ
คำสั่ง userdel : : : ลบผู้ใช้รายเดิม ออกจากระบบ
คำสั่ง usermod : : : แก้ไขข้อมูลของผู้ใช้ได้
คำสั่ง crontab : : : ตั้งเวลาสั่งงานคอมพิวเตอร์
คำสั่ง lspci : : : ตรวจสอบอุปกรณ์ที่เชื่อมต่อภายในเครื่อง
คำสั่ง nmap : : : ตรวจสอบเครือข่ายแบบกวาดทั้งในเครื่อง และ class C
คำสั่ง chmod : : : เปลี่ยนสถานะของแฟ้มเช่น Read Write eXecute
คำสั่ง man : : : แสดงรายละเอียดของคำสั่ง (Manual)
คำสั่ง mkdir, rmdir, cd : : : คำสั่งเกี่ยวกับ Directory หรือ Folder เพื่อสร้าง หรือลบ
คำสั่ง pico : : : editor ยอดฮิตใน Linux ที่ต้องมากับ Pine เป็น Text mode ที่ใช้ง่ายที่สุด
คำสั่ง emacs : : : editor ยอดฮิตใน Linux ใช้ยากกว่า pico นิดหน่อย
คำสั่ง vi : : : editor ยอดฮิตใน Linux ที่ใช้ยากที่สุด
คำสั่ง id, finger, who, w : : : โปรแกรมตรวจสอบ username ของตนเอง
คำสั่ง cat : : : แสดงข้อมูลในแฟ้มเหมือนคำสั่ง type ในระบบ DOS
คำสั่ง ifconfig : : : ดู IP หรือเพิ่ม IP เข้าไปใน linux server
คำสั่ง netstat : : : แสดงสถานะของเครือข่าย
คำสั่ง service : : : แสดงสถานะโปรแกรมที่เปิดให้บริการ
คำสั่ง xinetd : : : แสดงบริการที่เปิดใต้โปรแกรม xinetd
คำสั่ง whereis : : : ค้นหาแฟ้มที่ต้องการว่าอยู่ที่ห้องใด
คำสั่ง cp, rm, mv : : : จัดการแฟ้มเช่น คัดลอก ลบ และย้าย
คำสั่ง ping : : : ตรวจสอบ ip และการเชื่อมต่อ internet
คำสั่ง env : : : แสดงค่า environment ปัจจุบัน
คำสั่ง lynx : : : Text browser ที่ใช้งานง่าย ใช้ดู source หรือ download ได้
คำสั่ง nslookup : : : แสดงข้อมูลเกี่ยวกับ name server จาก ip หรือ domain name
คำสั่ง tail : : : แสดงส่วนท้ายของแฟ้มที่มีขนาดใหญ่ ต้องข้ามกับ cat ที่ดูตั้งแต่เริ่มแฟ้ม
คำสั่ง telnet : : : ใช้ติดต่อเข้า server ต่าง ๆ ตาม port ที่ต้องการ
คำสั่ง df : : : แสดง partition ของ linux พร้อมขนาดที่ใช้ไป
คำสั่ง du : : : แสดงพื้นที่ใช้งานในแต่ละ Directory
คำสั่ง ps : : : แสดง process ที่กำลังทำงานอยู่ทั้งของเครื่อง และตนเอง
คำสั่ง kill : : : ยกเลิก process ที่ทำงานอยู่
คำสั่ง find : : : ค้นหาแฟ้มที่ต้องการภายในทุก ๆ directory ได้
คำสั่ง gzip : : : คลายการบีบอัด หรือแตกแฟ้มประเภท .gz
คำสั่ง tar : : : คลายการบีบอัด หรือแตกแฟ้มประเภท .tar
คำสั่ง last : : : แสดงรายชื่อผู้ใช้งานระบบปัจจุบันไปถึงอดีต
คำสั่ง grep : : : เลือกข้อความที่ต้องการภายในแต่ละบรรทัด
คำสั่ง date, hwclock : : : ใช้กำหนด หรือแสดงเวลาปัจจุบัน
คำสั่ง top : : : แสดง process ที่ทำงานในปัจจุบัน พร้อม refresh ตลอดเวลา
คำสั่ง ntsysv และ setup : : : กำหนดบริการที่ต้องการเปิด หรือปิด เช่น httpd หรือ vsftp เป็นต้น
คำสั่ง route : : : ใช้กำหนด แสดง ตารางเส้นทาง
คำสั่ง shutdown, reboot : : : ใช้ปิดเครื่อง หรือ ปิดและเปิดเครื่องใหม่อย่างถูกวิธี
คำสั่ง runlevel : : : คู่กับแฟ้ม /etc/inittab
คำสั่ง fsck : : : ซ่อมแซมระบบแฟ้มใน linux
คำสั่ง chown, chgrp : : : เปลี่ยนเจ้าของ หรือเปลี่ยนกลุ่ม
คำสั่ง chkconfig : : : กำหนด หรือแสดง บริการที่สั่งประมวลผลใน level ต่าง ๆ ขณะเปิดเครื่อง
คำสั่ง mount, umount : : : สั่งเชื่อมต่ออุปกรณ์ หรือ partition เช่น Diskette หรือ Handy drive เป็นต้น
คำสั่ง mkbootdisk : : : สร้างแผ่น boot disk เพื่อใช้ boot ระบบ linux ขึ้นมาภายหลัง
คำสั่ง traceroute : : : แสดงเลข ip ของเครื่องที่ถูกเชื่อมต่อ ไปยังปลายทางที่ต้องการ
คำสั่ง rpm : : : ใช้ตรวจสอบ เพิ่ม หรือลบ package ของระบบ linux เกือบทั้งหมด
คำสั่ง su : : : ขอเปลี่ยนตนเองเป็น Super user เพื่อใช้สิทธิสูงสุดในการบริหารระบบ ที่ผู้ใช้ปกติทำไม่ได้
คำสั่ง useradd : : : เพิ่มผู้ใช้รายใหม่เข้าไปในระบบ
คำสั่ง userdel : : : ลบผู้ใช้รายเดิม ออกจากระบบ
คำสั่ง usermod : : : แก้ไขข้อมูลของผู้ใช้ได้
คำสั่ง crontab : : : ตั้งเวลาสั่งงานคอมพิวเตอร์
คำสั่ง lspci : : : ตรวจสอบอุปกรณ์ที่เชื่อมต่อภายในเครื่อง
คำสั่ง nmap : : : ตรวจสอบเครือข่ายแบบกวาดทั้งในเครื่อง และ class C
ขั้นตอนแรกก็ต้องลง VNC ที่เครื่องเซิฟเวอร์ของเราก่อน
[root@vnctest ~]# yum install -y tigervnc-server
ต่อมาให้ set password ของ vnc เพื่อ login เข้าระบบ
[root@vnctest ~]# vncpasswd
ถ้าต้องการใช้ user อื่นทำการเปิด remote ให้ change user ก่อนทำขั้นตอนต่อไป
ทดลอง start vnc
[root@vnctest ~]# vncserver :1
หลังจาก start vnc แล้ว จะมีไฟล์ script ของ vnc ปรากฎอยู่ใน home directory ของ user ที่รัน
ในตัวอย่าง รันจาก user root ไฟล์ก็จะมาอยู่ที่ /.vnc/xstartup
ถ้าเป็น user อื่นที่ไม่ใช่ root ไฟล์จะอยู่ที่ /home/ชื่อ user/.vnc/xstartup
ขั้นตอนต่อมา คือการตั้งค่าให้ vnc รันแบบกราฟฟิคโหมด
Stop ตัว VNC ก่อน
[root@vnctest ~] # vncserver -kill :1
ต่อมาก็ config ไฟล์ xstartup
[root@vnctest ~]# cd /
[root@vnctest ~]# vi .vnc/xstartup
#!/bin/sh
[ -r /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
export LANG
export SYSFONT
vncconfig -iconic &
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
OS=`uname -s`
if [ $OS = 'Linux' ]; then
case “$WINDOWMANAGER” in
*gnome*)
if [ -e /etc/SuSE-release ]; then
PATH=$PATH:/opt/gnome/bin
export PATH
fi
;;
esac
fi
if [ -x /etc/X11/xinit/xinitrc ]; then
exec /etc/X11/xinit/xinitrc
fi
if [ -f /etc/X11/xinit/xinitrc ]; then
exec sh /etc/X11/xinit/xinitrc
fi
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80×24+10+10 -ls -title “$VNCDESKTOP Desktop” &
#twm & ## ทำการ comment บรรทัดสุดท้าย
exec gnome-session & ## เพิ่มบรรทัดนี้ต่อจากบรรทัดสุดท้าย
หลังจากแก้ไขไฟล์ xstartup เรียบร้อยแล้วให้ทำการรัน vnc อีกทีด้วยคำสั่งดังนี้
[root@vnctest ~]# vncserver :1 -geometry 800×600 -depth 24
สำหรับเครื่องที่เปิด firewall อยู่ จำเป็นต้องเปิด port ของ vnc
ซึ่ง port ที่ต้องเปิดคือ port 5801 , 5901 , 6001
เปิด port ด้วย iptables
[root@vnctest ~]#
vi /etc/sysconfig/iptables
เพิ่มคำสั่งดังต่อไปนี้ใน iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5801 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 6001 -j ACCEPT หลังจากแก้ไขเสร็จแล้ว ก็ทำการ restart iptables [root@vnctest ~]#service iptables restartเสร็จสิ้นขั้นตอนสำหรับฝั่งเครื่องเซิฟเวอร์ มาที่เครื่อง windows กันบ้าง ไปโหลดโปรแกรม Real VNC เวอร์ชั่น 4.1.2 แบบฟรี ที่ Download (แนะนำเวอร์ชั่นนี้ ลงแค่ VNC Viewer นะครับ) หรือเวอร์ชั่นล่าสุดที่ http://www.realvnc.com/download/vnc/latest/ ทดลองใช้งาน เปิดโปรแกรมขึ้นมา และใส่ ip หรือชื่อเครื่อง แล้วต่อด้วย :1 ex: 192.168.1.1:1ใส่ password ที่เคยตั้งไว้
เสร็จเรียบร้อยพร้อมใช้
พอดีเรื่องของเรื่อง เกิดจากความมึนของตัวเอง ที่เวลาลง CentOS
บนเครื่อง Server มักจะติดนิสัยลงแบบ Minimal (เอาแต่ Core อย่างเดียว
อย่างอื่นไม่สนใจ T_T) แต่มักจะพลาด ตรงที่ว่า ถ้าจะมา Configuration บางที
ต้องใช้ Command แบบดิบ ๆ ซึ่งเจ้าตัวเองก็เป็นคนขี้หลงขี้ลืมอยู่แล้ว
แถมพอจะเรียก Setup Tool ก็ดันเรียกไม่ได้อีก
เลยต้องมาหาวิธีลงให้มันใช้ได้ครับ
วิธีการลงก็ง่าย ๆ ไม่ยากเท่าไหร่นัก ใช้คำสั่งตามนี้เลยครับ
เมื่อเสร็จแล้ว เราลองเรียก tool โดยใช้คำสั่ง setup ดู
ซึ่งปกติมันจะไม่มีอะไรอย่างอื่นติดมาให้ นอกจากเมนู Authentication
Configuration (เฮือก!!! -*-)
ดังนั้น เราจึงต้องมาลง Package อย่างอื่นเพิ่มเติม ดังนี้ครับ
คราวนี้ก็จะได้เมนู Configuration หลัก ๆ ตามที่เราต้องการแล้ว
วิธีการลงก็ง่าย ๆ ไม่ยากเท่าไหร่นัก ใช้คำสั่งตามนี้เลยครับ
1
|
yum install setuptool |
1
|
yum install system-config-network-tui system-config-firewall-base system-config-firewall-tui ntsysv |
คุณเคยไม๊เวลาที่ต้องลงอะไรที่คนทั่วไปเค้าไม่ค่อยได้ใช้กัน กว่าจะหา Package มาได้ก็ลำบากมาก
วันนี้เรามาใช้ Repository ตัวนึงของ Fedoraproject กันดีกว่า มันมีชื่อว่า Extra Packages for Enterprise Linux (EPEL)
วิธีติดตั้ง repo ก็ง่ายมากๆครับ จริงๆวิธีการมีเขียนบอกไว้อยู่แล้วที่ http://fedoraproject.org/wiki/EPEL
ผมสรุปออกมาสั้นๆง่ายๆ สั่งตามนี้
URL ของไฟล์ RPM ก็ไปหาเอาที่ http://fedoraproject.org/wiki/EPEL อยู่ตรงหัวข้อ How can I use these extra packages?
สำหรับใครที่ใช้ CentOS 5 ใช้คำสั่งชุดนี้ครับ
แค่นี้ก็เรียบร้อยจ้า…
วันนี้เรามาใช้ Repository ตัวนึงของ Fedoraproject กันดีกว่า มันมีชื่อว่า Extra Packages for Enterprise Linux (EPEL)
วิธีติดตั้ง repo ก็ง่ายมากๆครับ จริงๆวิธีการมีเขียนบอกไว้อยู่แล้วที่ http://fedoraproject.org/wiki/EPEL
ผมสรุปออกมาสั้นๆง่ายๆ สั่งตามนี้
cd /root wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -Uvh epel-release-6-8.noarch.rpm |
สำหรับใครที่ใช้ CentOS 5 ใช้คำสั่งชุดนี้ครับ
cd /root wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm rpm -Uvh epel-release-5-4.noarch.rpm |
เรื่องมันเกิดจากว่า เป็นคนที่ไม่ค่อยจะเก่ง command line เท่าไหร่
เพราะว่าจำไม่เคยจะได้เลย พอต้องทำอะไรที่ ก็ต้องดู help บ้างละ search
google บ้างละ ก็เสียเวลาไปไม่ใช่น้อย
ก็เลยหันไปคบกับ webmin ซึ่งเป็น control panel ของ linux ที่มี feature ค่อนข้างจะครบเลยทีเดียว แถมยังฟรีอีกด้วย
เอาล่ะวิธีลงก็ง่ายมากมาย
สำหรับ centos 6 ถ้าลงแบบ minimal จะไม่มี wget มาให้ด้วย ก็ลงเพิ่มซะด้วยคำสั่ง
yum install wget |
แล้วก็ text editor ซักตัวใครถนัดตัวไหนก็ตัวนั้นได้เลยครับ ผมถนัน nano ถ้ามันยังไม่มีลงมาให้ก็ลงซะ
yum install nano |
หลังจากนั้นก็สร้างไป webmin.repo ไว้ที่ /etc/yum.repo.d/
nano -w /etc/yum.repo.d/webmin.repo |
copy คำสั่งต่อไปนี้ใส่ลงไปในไฟล์ webmin.repo
[Webmin] name=Webmin Distribution Neutral #baseurl=http://download.webmin.com/download/yum mirrorlist=http://download.webmin.com/download/yum/mirrorlist enabled=1
จัดการ save ไฟล์ซะ แล้วหลังจากนั้นก็สั่งตามนี้
cd /root wget http://www.webmin.com/jcameron-key.asc rpm --import jcameron-key.asc yum install webmin |
เป็นอันว่าเรียบร้อยจ้า…
เปิด webmin ใช้งานก็ http://หมายเลขไอพีของคุณ:10000
ถ้าเปิดไม่ได้อาจจะติด firewall ให้ลองตรวจสอบดูว่าเปิดให้ port 10000 ทำงานหรือยังนะครับ
วิธีการติดตั้งของแท้ ดูรายละเอียดได้ที่ http://www.webmin.com/rpm.html
Credit : http://winnerboy7.wordpress.com/2013/06/26/
ติดตั้ง CentOS 6.4