Category: Unix

แก้ PATH ผิดชีวิตก็เปลี่ยน

ขอบคุณพี่หน่อยมากครับที่ช่วยให้ผมได้แก้ปัญหา Server ในรอบ 2 ปีเลยก็ว่าได้
Linux ก็มี PATH
Windows ก็มี PATH

ส่วนใหญ่ตัวแปร PATH จะใช้เก็บไดเร็กทอรี execute file ของพวกโปรแกรมต่างๆ ไว้เพื่อให้เรียกใช้ง่ายได้ง่ายไม่ต้อง /xxx/yyy/zzz ให้ยุ่งยากเสียเวลา แต่ถ้าคุณเพิ่ม PATH ผิดละก็ทำให้งานงอกได้เหมือนกันนะครับ

ตัวอย่างเช่นกรณีวันนี้
ใครสักคนต้องการที่จะติดตั้ง tomcat ไว้ใช้งานบน server แต่ปรากฏว่าเขาได้แก้ไขไฟล์ config บางตัวผิดพลาดทำให้เรียกคำสั่ง ls, cat หรือคำสั่งควบคุม service ต่างๆ ไม่ได้เลย ที่จริงก็ยังเรียกได้แต่ต้องพิมพ์ PATH เต็มๆ เข้าไป
เมื่อได้รับสายจากพี่ชายที่อยู่แดนไกล แล้วพี่เขาบอกว่า น้องกิว server พี่เรียกทำสั่งๆ ต่างไม่ได้เลย ประเด็นแรกที่ผมโฟกัสไปก็คือเจ้า PATH นี่แหละ ต้องมีอะไรผิดปกติแน่ๆ ปัญหามีอยู่อย่างเดียวคือตอนที่พี่แกโทรมาผมนั่งกิน Sukishi อยู่กับภรรยา เบื้องต้นให้พี่เค้าสองสั่งคำสั่งต่างๆ ด้วย path เต็มๆ ก็ยังสามารถสั่งได้ปัญหามาจาก PATH ผิดชัวๆ

หลังจากเช็คบิลตัวเบาๆ ออกจากร้านก็กลับมาเปิด 3g กากๆ remote ไปดู
สิ่งแรกที่ผมทำคือ
/bin/echo $PATH

[root@PDCSERVER ~]# echo $PATH
/opt/tomcat/bin::/root/bin

ดูเสร็จรู้เลย /bin /sbin ไม่รู้หายไปไหนหมดเช็ค .bash_profile .bash_rc ก็ปกติดี
ลอง last กับ history ดูก็พบว่ามีคน remote มาลง tomcat แล้วก็ได้ฝังไฟล์ script.sh ไว้ที่ /etc/profile.d
ลองตามไปเปิดดู

[root@PDCSERVER ~]# /bin/cat /etc/profile.d/script.sh
#!/bin/bash
CATALINA_HOME=/opt/tomcat
PATH=$CATALINA_HOME/bin:$PATHcd
export PATH CATALINA_HOME
export CLASSPATH=.

ผมเดาเอาว่าคนแก้คงต้องการแก้เป็น
[root@PDCSERVER ~]# cat /etc/profile.d/script.sh
#!/bin/bash
CATALINA_HOME=/opt/tomcat
PATH=$CATALINA_HOME/bin::$PATH
export PATH CATALINA_HOME
export CLASSPATH=.

สิ่งที่ทำให้ผิดพลาดคือ : หายไปตัวนึงแล้วก็เผลอกด cd ตามหลัง $PATH
หลังจากลองแก้ดู แล้ว login เข้าไปยัง Server ใหม่ก็ใช้งาน PATH ได้ตามปกติครับ

[root@PDCSERVER ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

PATH กลับมาแล้ว
จบข่าว

ประเด็นที่ผมอยากโฟกัสอีกเรื่องนึงครับสำหรับทำ Troubleshooting คือการหาสาเหตุที่แท้จริงของปัญหาไม่ใช่แก้ปัญหาที่ปลายน้ำ อย่างเช่นกรณีนี้เรื่อง PATH ผิดที่จริงแก้ไขง่ายมากแค่

export PATH=/bin::/sbin::/usr/bin::/usr/sbin::$PATH

จะต้องการให้ชี้ไปไหนก็ใส่ๆ ไปครับแต่มันยังไม่จบแค่นั้น เราควรหาสาเหตุที่แท้จริงว่าทำไมมันจึงเกิดปัญหานั้น อย่างที่ผมเจอดีตรงที่มี keyword tomcat โผล่อยู่ใน PATH ผมเลยพอเดาไว้ว่าน่าจะมาจากมันนี่แหละ แต่มันแอบอยู่ตรงไหนหละ ผมจึง history ไปดูก็พบกับ config /etc/profile.d/script.sh และนี่แหละครับสาเหตุต้นตอของปัญหานี้ แก้ให้ถูกซะจะได้ไม่ต้องมานั่ง export ทุกครั้งที่ login ที่จริงผมคิดไปถึงเรื่อง server โดน hack ด้วยซ้ำแต่ที่ดู last log กับ history ก็ยังไม่ถือว่าเลวร้าย

ขอบคุณที่สนใจอ่าน

Share/Save

Leave a Comment June 3, 2015

ว่าด้วยการนับ ด้วยคำสั่ง wc

วันนี้มาเขียนอะไรสั่นๆ เผื่อเป็น trick ให้ผู้ใช้งานมือใหม่ได้เอาไปใช้ประโยชน์ครับ
วันนี้ขอเสนอคำสั่ง wc
คำสั่ง wc เป็นคำสั่งสำหรับเอาไว้นับ ผมชอบใช้เอาไว้นับจำนวนไฟล์ในไดเร็กทอรี่และนับพวกบรรทัดไฟล์ config
ตัวอย่างแรก สมมติว่าเราอยากจะรู้ว่าในไดเร็กทอรี่ที่เราสนใจมีไฟล์ .php อยู่กี่ไฟล์ ก็สามารถใช้คำสั่งประมาณนี้ได้ครับ

mrgill@mrgill-laptop:/media/Data/httpdocs$ find ./ *.php | wc -l 3405 mrgill@mrgill-laptop:/media/Data/httpdocs$ ls *.php | wc -l 103

จะเห็นว่าสองคำสั่งด้านบนให้ผลที่แตกต่างกันโดยคำสั่ง find จะทำการหาไฟล์ .php ทั้งหมดรวมทั้งซับไดเร็กทอรี่มาให้แต่ แต่ ls แสดงเพียงไฟล์ .php ของไดเร็กทอรี่ชั้นแรกเท่านั้น

ลองเอา wc มาใช้ในการนับจำนวนบรรทัดของไฟล์กันบ้าง

mrgill@mrgill-laptop:/media/Data/httpdocs$ wc -l font.php 308 font.php mrgill@mrgill-laptop:/media/Data/httpdocs$ cat font.php | wc -l 308

จะใช้ wc เลยหรือจะ cat มาก่อนก็จะได้จำนวนบรรทัดเท่ากัน

อยากรู้อะไรเพิ่มเติมเกี่ยวกับคำสั่ง wc ก็ man wc เอาได้เลยครับ

ลองเอาไปประยุกต์ใช้กันดูครับ จบละ

Leave a Comment August 22, 2012

วิธีดู WWN ของ FC HBA Card บน Solaris 10

บน Solaris 10 มีคำสั่ง fcinfo ที่สามารถใช้ตรวจสอบ FC HBA Card ได้ว่ามีค่า WWN อะไร
โดยการใช้คำสั่ง

root@maindb01 # fcinfo hba-port HBA Port WWN: 21000024ff38c336 OS Device Name: /dev/cfg/c1 Manufacturer: QLogic Corp. Model: 371-4325-02 Firmware Version: 05.04.03 FCode/BIOS Version: BIOS: 2.02; fcode: 2.03; EFI: 2.01; Serial Number: 0402L00-1134992774 Driver Name: qlc Driver Version: 20110321-3.05 Type: N-port State: online Supported Speeds: 2Gb 4Gb 8Gb Current Speed: 8Gb Node WWN: 20000024ff38c336 HBA Port WWN: 21000024ff38c337 OS Device Name: /dev/cfg/c2 Manufacturer: QLogic Corp. Model: 371-4325-02 Firmware Version: 05.04.03 FCode/BIOS Version: BIOS: 2.02; fcode: 2.03; EFI: 2.01; Serial Number: 0402L00-1134992774 Driver Name: qlc Driver Version: 20110321-3.05 Type: N-port State: online Supported Speeds: 2Gb 4Gb 8Gb Current Speed: 8Gb Node WWN: 20000024ff38c337

แค่นี้เราก็ทราบว่า Port 1 WWN : 21000024ff38c336 และ Port 2 WWN : 21000024ff38c337
จบ

Leave a Comment March 22, 2012

การเคลียร์ history log ของ bash shell บน linux

มาเร็วไปเร็วอีกแล้วครับ
ปกติเวลาเราสั่ง history มันก็จะแสดง list คำสั่งที่เราเคยสั่งไปก่อนหน้ามา

root@mrgill-laptop:~# history ... 1785 transcode 1786 transcode -h 1787 apt-get update 1788 apt-get upgrade 1789 cd Desktop/ 1790 dpkg -i virtualbox-4.1_4.1.10-76795~Ubuntu~oneiric_amd64.deb 1791 apt-get update 1792 apt-get upgrade 1793 apt-get update 1794 ssh sysadmin@172.11.99.67 1795 apt-get update 1796 apt-get upgrade 1797 apt-get dist-upgrade 1798 apt-get update 1799 apt-get upgrade 1800 clear 1801 history root@mrgill-laptop:~#

หากต้องการเคลียร์ทั้งหมดใช้

root@mrgill-laptop:~# history -c

หากต้องการเคลียร์เฉพาะ current session ใช้ -r

root@mrgill-laptop:~# history -r

จบ

Leave a Comment March 22, 2012

วิธีแปลง Unix Time (POSIX Time) เป็นเวลาที่คนธรรมดาอ่านรู้เรื่องบน Linux

วันนี้เป็น Tip สั้นๆ ครับมาไวไปไว สำหรับใครที่ไปเจอ Unix time แล้วอ่านไม่รุ้เรื่องว่ามันคืออะไรลองเอาคำสั่งนี้ไปใช้ดูครับ
ใช้คำสั่ง date -d @xxxxxxxxxx

root@agoldap:~# date -d @xxxxxxxxxx

โดยที่ xxxxxxxxxx เป็น unix time ที่เราต้องการจะ convert

ตัวอย่าง

root@agoldap:~# date +%s 1332144867 root@agoldap:~# root@agoldap:~# root@agoldap:~# root@agoldap:~# root@agoldap:~# date -d @1332144666 Mon Mar 19 15:11:06 ICT 2012 root@agoldap:~#

จบ

ข้อมูลเกี่ยวกับ Unix time : http://en.wikipedia.org/wiki/Unix_time

Leave a Comment March 19, 2012

แก้ปัญหา traceroute: raw socket: Protocol not supported บน Solaris Containers

ช่วงนี้จับเครื่อง Sun บ่อยครับเลยเขียนเรื่อง Solaris บ่อย เช่น วันนี้เจอปัญหา

bash-2.03$ /usr/sbin/traceroute x.x.x.x traceroute: raw socket: Protocol not supported

ปัญหานี้เกิดจากเราไม่ได้กำหนด Privileges Non-Global Zones บางตัวเข้าไปครับซึ่งจะเป็นเฉพาะกับ Branded Zones เท่านั้นเช่นถ้าเราติดตั้ง Non-Global Zones ที่เป็น Solaris 9
วิธีแก้ปัญหานี้คือให้เราเพิ่ม Privileges net_rawaccess เข้าไป
ขั้นตอน

zonecfg -z <zonename> set limitpriv=default,sys_admin,net_rawaccess verify commit exit zoneadm -z <zonename> reboot

หลังจาก Reboot เสร็จก็ลองใช้คำสั่ง traceroute ดูครับก็น่าจะใช้ได้แล้ว
แหล่งข้อมูล : http://solarisbackupandstorage.wordpress.com/2011/09/17/solaris-branded-zones/

Leave a Comment November 22, 2011

Daily Tips : การออกจากคำสั่ง zlogin บน Solaris 10

คำสัั่ง zlogin เป็นคำสั่งสำหรับเปิดหน้า console ของ containers ก็เปรียบเสมือนที่เราเอาสาย console ไปเสียบกับช่อง console หน้าเครื่องนั้นแหละครับ แต่ปกติตอนเราเสียบสาย console เราก็สามารถ logout และถอดสาย console ออกได้ แต่คำสั่ง zlogin เมื่อ logout ออกมาแล้วก็จะค้างอยู่ที่หน้า console รอให้เรา login ใหม่จะถอดสายก็ไม่ได้เพราะมันเป็น virtual console ทางออกของคำสั่งนี้มีดังนี้ครับ

ตัวอย่าง

bash-3.00# zlogin -e \@ -C sol10_db_acc [Connected to zone 'sol10_db_acc' console] bash-3.00# id uid=0(root) gid=0(root) bash-3.00# uname -a SunOS ACB_DB 5.10 Generic_142909-17 sun4u sparc SUNW,Netra-T12 bash-3.00# ls #UNTITLED# bin etc kernel oracle thai -e cdrom export lib platform tmp 1 core fsbackup.sh lost+found proc u01 Desktop dev fsbt mnt sbin usr Mail dir home net sqlnet.log var TT_DB dotprofile k1 opt system vsm_backup bash-3.00# @. [Connection to zone 'sol10_db_acc' console closed] bash-3.00# uname -a SunOS vsm 5.10 Generic_142909-17 sun4u sparc SUNW,Netra-T12 bash-3.00#

จากตัวอย่างผมเปิด console ของ container ที่ชื่อ sol10_db_acc ด้วยการใช้คำสั่ง

bash-3.00# zlogin -e \@ -C sol10_db_acc

พารามิเตอร์ -e เป็นตัวบอกว่าเราจะใช้ key อะไรในการออกจาก console ซึ่งในที่นี้ผมใช้ @ ซึ่งวิธีการออกจาก console ก็เพียงแค่พิมพ์ @. ย้ำกันอีกทีครับ @. ต้องมี . ตามหลัง @ ด้วยนะครับ แค่นี้เราก็สามารถออกจาก console ของ containers ได้แล้ว

bash-3.00# @. [Connection to zone 'sol10_db_acc' console closed]

แหล่งข้อมูล : http://www.tech-recipes.com/rx/891/solaris-10-connect-or-login-to-zone-console/

Leave a Comment November 20, 2011

รวม link เกี่ยวกับ NFS บน Solaris 10 ครับ

วันนี้เจอปัญหา

bash-3.00# svcs network/nfs/server STATE STIME FMRI disable 15:02:42 svc:/network/nfs/server:default

ทำยังไงก็ไม่ยอม online สักทีเลยค้นเจอ ปัญหาดังกล่าวเกิดมาจากไฟล์ /etc/dfs/dfstab ไม่มีข้อมูลที่จะ share วิธีแก้ไขก็คือใส่บรรทัด share อะไรไปก็ได้เพื่อให้มันสามารถสั่งให้ service online ได้เช่น

share -F nfs -o nosuid,rw=@10.0.22.0/23,anon=60001 -d "home dirs" /export/home

จากนั้นให้ลองสั่ง restart service nfs ดู

bash-3.00# svcadm restart network/nfs/server bash-3.00# svcs network/nfs/server STATE STIME FMRI online 15:10:42 svc:/network/nfs/server:default

ทีนี้ก็พร้อมสำหรับแชร์ด้วยคำสั่ง share แล้วครับ
แหล่งข้อมูล :
http://troysunix.blogspot.com/2011/02/configuring-nfs-in-solaris.html
http://serversolaris.blogspot.com/2008/01/sharing-directories-with-nfs-in-solaris.html

November 18, 2011

แก้ปัญหาเวลาใน Solaris Container Non-Global ไม่ตรงกับ Global

เครื่อง Global เวลา

bash-3.00# date
Tue Nov 8 18:16:00 GMT+7 2011

เครื่อง Non-Global เวลา

root@email # date
Wed Nov 9 08:16:12 ICT 2011

ผมพยายามลอง date MMddhhmmYY แล้วก็ไม่สามารถเปลี่ยนได้ครับ

root@email # date 1108181711
date: Not owner
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]

Solved :
สำหรับ error : Not owner สามารถแก้ไขโด้โดยเพิ่ม privileg sys_time เข้าไปใน zonecfg (sys_time ทำให้เราใช้คำสั่ง date และ ntpdate สำหรับ adjust เวลาได้)

zonecfg -z myzone1
zonecfg:myzone1> set limitpriv=default,sys_time
zonecfg:myzone1> verify
zonecfg:myzone1> commit
zonecfg:myzone1> exit

จากนั้นแก้ไข /etc/default/init ของเครื่อง Global ให้ตรงกับใน Zone เนื่องจาก /etc/default/init สิทธิ์เป็น 555 read only เราต้องแก้สิทธิ์ให้เป็น 644 เพื่อให้แก้ไขได้ชั่วคราว

chmod 644 /etc/default/init
vi /etc/default/init

ตัวอย่างของผมใน Global set ไว้เป็น GMT+7 แต่ใน Non-global set ไว้เป็น Asia/Bangkok ก็เปลี่ยนจาก GMT เป็น Bangkok

#TZ=”<GMT+7>+7″
TZ=Asia/Bangkok

บันทึกและแก้สิทธิ์เป็น 555 ตามเดิมเพื่อความปลอดภัย

chmod 555 /etc/default/init

reboot สักรอบครับทั้งใน zone และ global

เสร็จครับ

November 10, 2011

แก้ปัญหาใช้คำสั่ง Tar แล้วเจอปัญหา too large to archive บน Solaris

ใครเคยใช้คำสั่ง tar บน solaris บีบไฟล์ที่ขนาดใหญ่ๆ บ้างครับ

# tar cvf data.tar data.img

ซึ่งไฟล์ data.img มีขนาดใหญ่ประมาณ 10gb
มันจะแสดงข้อความว่า

# tar cvf data.tar data.img
a data.img too large to archive

ลองเพิ่ม parameter E เพิ่มเข้าไปดูครับมันสามารถช่วยท่านได้

# tar cvfE data.tar data.img
a data.img

ถ้าจะบีบมันให้เล็กลงอีกใช้ gzip บีบมันอีกรอบครับ

# gzip data.tar

จบ

November 9, 2011

  • Page 1 of 2
  • 1
  • 2
  • >

Recent Entries

Random Posts

Social Network

Tag Cloud

Calendar

August 2017
S M T W T F S
« Jun    
 12345
6789101112
13141516171819
20212223242526
2728293031  

Twitter: imrgill

RSS LinuxToday

RSS HowToForge

RSS UbuntuClub

RSS Blognone

RSS PowerWindowsBlog

Tag

Categories

Archives

Blogroll