ตัวอย่างเช่นผมต้องการย้ายไฟล์ไปที่ ๆ ต้องใช้สิทธิ root เท่านั้น (สิ่งที่ผมพิมพ์เข้าไปที่ Shell คือส่วนที่เป็นตัวหนานะครับ)
karn-mba:~ karn$ mv flasm* /opt/local/bin/ mv: rename flasm to /opt/local/bin/flasm: Permission denied mv: rename flasm.ini to /opt/local/bin/flasm.ini: Permission denied
ปรากฏว่าลืม sudo ทำให้ติด permission ไม่สามารถย้ายไฟล์ได้
ปรกติผมก็จะกดลูกศรขึ้น เพื่อเรียกคำสั่งเดิมแล้วเติม sudo ไปข้างหน้า
karn-mba:~ karn$ sudo mv flasm* /opt/local/bin/
วันนี้ set up Samba บน Server ที่ IDC แล้วรู้สึกตะหงิด ๆ เพราะมี error log ที่เกิดจาก Samba ไม่สามารถ connect กับ CUPS (Print Server) ได้
ก็จะ connect ได้ยังไงหละ ก็มันไม่ได้เปิดนี่ เพราะไม่มี Printer จะต่อด้วย เลยไม่รู้จะเปิดไปทำไม Web Server นะเฮีย
ผมจึงลองมั่วหาวิธีปิด Printing Service ใน Samba อยู่ซักพักจากการอ่าน Online Manual แต่ไม่สำเร็จ เลยขออำนาจพี่กู(เกิ้ล)
ขอปุ๊บ ได้ปั๊บ สั้น ๆ ง่าย ๆ ได้ใจความจาก Link นี้ครับ http://goo.gl/vnPQ2
ให้ใส่ configuration เหล่านี้ไว้ใน [global] section ครับ
load printers = no printing = bsd printcap name = /dev/null
วันนี้นั่งดู access_log ของ web server แล้วอยากจะดูความเปลี่ยนแปลงของขนาดของ log file ตามเวลา
ซึ่งถ้าใช้คำสั่ง ls -l access_log* ตามปรกติ จะได้แบบนี้
-rw-r--r-- 1 root root 19777358 Jul 1 20:56 access_log -rw-r--r-- 1 root root 1045888 Mar 24 04:04 access_log.100.gz -rw-r--r-- 1 root root 944277 Jun 22 04:05 access_log.10.gz -rw-r--r-- 1 root root 965624 Jun 21 04:04 access_log.11.gz -rw-r--r-- 1 root root 328423 Jun 20 04:04 access_log.12.gz -rw-r--r-- 1 root root 718064 Jun 19 04:04 access_log.13.gz
สมมติมี network card 2 ใบคือ eth0 และ eth1
และเราต้องการสร้าง Trunk ที่มี IP 172.16.0.21 Netmask 255.255.255.0 Gateway 172.16.0.1
ให้แก้ไข file /etc/sysconfig/network-scripts/ifcfg-eth0 ให้มีข้อมูลดังนี้
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
และทำเช่นเดียวกันกับ ifcfg-eth1
เปลี่ยนแค่
DEVICE=eth1
จากนั้นให้สร้าง file /etc/sysconfig/network-scripts/ifcfg-bond0 โดยมีข้อมูลดังนี้
DEVICE=bond0
IPADDR=172.16.0.21
NETMASK=255.255.255.0
NETWORK=172.16.0.0
BROADCAST=172.16.0.255
GATEWAY=172.16.0.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
ผมต้องการดูเวลาถึงหลักนาทีที่ไม่ซ้ำกัน จากผลลัพธ์ของ grep -i "no d-channel" /var/log/asterisk/full
ตัวอย่างผลลัพธ์บางส่วน
[May 18 21:22:50] WARNING[5457] chan_dahdi.c: No D-channels available! Using Primary channel 16 as D-channel anyway! [May 18 21:22:54] WARNING[5457] chan_dahdi.c: No D-channels available! Using Primary channel 16 as D-channel anyway! [May 18 21:22:58] WARNING[5457] chan_dahdi.c: No D-channels available! Using Primary channel 16 as D-channel anyway!
หากเราต้องการให้คำสั่งทำงานใน background เราสามารถสั่งด้วยการเติม & ต่อท้ายคำสั่ง เข่น
commanda &
แต่การสั่งแบบนี้ ถ้าเรา logout commanda จะหยุดทำงานทันทีเพราะได้รับ hangup signal
ถ้าเราต้องการให้รันไปเรื่อย ๆ ไม่ต้องหยุดเมื่อ logout เราจะต้องใช้คำสั่ง nohup ช่วย ดังนี้
nohup commanda &
โดยการสั่ง nohup คือการระบุไม่ให้ process รับ signal hangup เฉย ๆ ไม่เกี่ยวกับการทำงาน foreground หรือ background
ดังนั้นถ้าเราต้องการให้ run ใน background และ logout ก็ยังทำงานต่อ
เราจะต้องใส่ทั้ง nohup ด้านหน้า และ & ที่ด้านหลังครับ
วันนี้มีบรรทัดเดียวอยู่หมัดมาให้บันทึกอีกแล้ว
เรื่องมีอยู่แว่ เอ้ย ว่า ผมอยากหาว่าขนาด file กลุ่มหนึ่ง ว่ารวมแล้วมีขนาดเท่าไหร่
ถ้าเราใช้ du เพื่อ list ขนาดของ file กลุ่มนั้นก็จะได้ขนาดของ file แต่ละ file ใน 1 บรรทัด
$ du -s test* 1000 testA 2000 testB 3000 testC
โดยไม่มีค่ารวมทั้งหมดให้ ผมจึงใช้ awk เพื่อรวมค่าเหล่านี้และแสดงผลให้ดูดังนี้
$ du -s test* | awk '{sum=sum+$1; print sum, $1, $2;}'
1000 1000 testA
3000 2000 testB
6000 3000 testC
ตัวเลขซ้ายสุดของบรรทัดสุดท้ายก็คือผลรวมของขนาด file กลุ่มที่เราต้องการนั่นเอง
ในบางคำสั่งเราไม่สามารถใช้ wildcard เพื่อระบุชื่อ file ได้ เช่นคำสั่ง tar ที่ผมกำลังใช้งานอยู่
หากเราอยากจะ tar xf หลาย ๆ file ตามลำดับ เราไม่สามารถทำได้โดยใช้ wildcard ครับ
ตัวอย่างข้างล่างนี้ใช้ไม่ได้นะ
tar xf to_be_extract*.tar
ผมจึงต้องใช้ Shell Script ทำ Loop อย่างง่ายเพื่อวน tar x แต่ละ file ดังนี้ครับ
for f in to_be_extract*.tar; do echo $f; tar xf $f; done
เป็นอันเสร็จ
วันนี้ได้เข้าไปลง GlusterFS ที่ server ที่ฝากคนอื่นลง CentOS ไว้แล้วพบว่าลงไม่ได้เนื่องจากพบ error นี้
err: cannot create %sourcedir /usr/src/redhat/SOURCES
เดาว่าตอนที่ลงไม่ได้เลือก Development ไว้ และผมก็ยังไม่เคยลง package พวกนี้ทีหลัง
เพราะปรกติจะเลือกตั้งแต่แรก เลยต้องหากันหน่อยว่า yum มันทำยังไง แล้วก็พบวิธีนี้
yum groupinstall 'Development Tools'
เท่านั้นแหละลง GlusterFS ได้แล้ว เรียบร้อย ^_^
Credit: http://www.cyberciti.biz/faq/centos-linux-install-gcc-c-c-compiler/
เราสามารถใช้คำสั่ง watch เพื่อทำคำสั่งซ้ำกันไปเรื่อย ๆ ทุก ๆ x วินาทีอยู่แล้ว
แต่ข้อเสียของ watch คือ screen จะถูก clear ทุกครั้ง ทำให้เราไม่สามารถเห็นผลลัพธ์เก่า ๆ ได้
ผมจึงต้องหาวิธีการทำ Loop ด้วย Shell script เพื่อทำคำสั่งซ้ำ ๆ กันไปเรื่อย ๆ แบบง่ายและเร็ว
ซึ่งได้วิธีนี้มาครับ
while [ 1 ]; do command1; command2; command3; sleep x; done
เช่น
เราสามารถตรวจสอบจำนวน tracking connection ของ firewall ทุก ๆ 1 วินาที ใน 1 บรรทัดด้วยวิธีนี้
while [ 1 ]; do cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count; sleep 1; done
ข้อดีของการทำ Loop ด้วยวิธีนี้แทน watch ก็คือ