Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

Tuesday, November 11, 2014

How to create group with specific group id

Today is small tip for create group
Assume I need to create group "mai-ru" and I don't want group id auto but I want group id "9999"
The command is should be
sudo groupadd -g 9999 mai-ru
* be careful group id Values between 0 and 999 are typically reserved for system accounts.
So you should use group id more than 999 and make sure that the value is not already exist.

Read More

Bookmark and Share

Friday, July 18, 2014

check or remove multiple backup files filter by number

Assume on the backup directory has files like this
backup-2011-01-01-data.tar.gz
backup-2011-02-01-data.tar.gz
backup-2011-03-01-data.tar.gz
. . .
backup-2012-01-01-data.tar.gz
backup-2012-02-01-data.tar.gz
backup-2012-03-01-data.tar.gz
. . .
backup-2013-01-01-data.tar.gz
backup-2013-02-01-data.tar.gz
backup-2013-03-01-data.tar.gz
. . .

If I want to check or remove all files from year 2011 to 2012 by command line, how to do that. Do one by one? just 24 times. but if more?

You can check on file by command line by :

$du -ch backup-2012-01-01-data.tar.gz
3.4M backup-2012-01-01-data.tar.gz
3.4M total

For more files and filter by number can use this command

$du -ch backup-{2011,2012}*
3.4M backup-2011-01-01-data.tar.gz
3.4M backup-2011-02-01-data.tar.gz
3.4M backup-2011-03-01-data.tar.gz
. . .
3.4M backup-2012-12-01-data.tar.gz
81.6M total

And you can remove files

rm backup-{2011,2012}*

Read More

Bookmark and Share

Thursday, June 14, 2012

How to check public ip by command line


ปกติเวลาต้องการดูไอพีจริง (public ip) จากเครื่อง desktop เราก็สามารถเปิดเว็บบราวเซอร์ที่ถนัด ( IE , Firefox , Chrome , Opera , Safari etc. ) ขึ้นมาแล้วเข้าไปที่เว็บที่บอกไอพีจริงได้ เช่น http://myipaddress.com/show-my-ip-address/ ก็จะพบข้อความ

Your computer's IP address is:* xxx.xxx.xxx.xxx

โดยที่ xxx.xxx.xxx.xxx เป็นไอพีจริงครับ
อ้าวแล้วถ้าเราใช้ command line อยู่จะทำยังไงละ จริง ๆ ก็ใช้หลักการเดียวกับการใช้งานบน desktop ครับเพียงแต่ข้อความที่แสดงเป็น code มองจนตาลายครับ และยิ่งกว่านั้นสำหรับเว็บ myipaddress นั้นในบางครั้งจะมีให้ใส่ Captcha ดังนั้นจึงเป็นการลำบากที่จะใช้เว็บนี้
พอดีไปเจอเว็บ itswapshop มีวิธีสั้น ๆ ในการใช้ command line โดยใช้เว็บ ifconfig.me เมื่อเข้าผ่านเว็บบราวเซอร์ก็จะพบข้อความไอพีสั้น ๆ เลย และสำหรับ command line โดยใช้คำสั่งดังนี้
curl ifconfig.me
curl สำหรับ ubuntu or debian สามารถลงด้วยคำสั่ง
sudo apt-get install curl
หากไม่ต้องการลงโปรแกรมเพิ่ม และลินุกซ์มีโปรแกรม wget อยู่แล้วสามารถใช้คำสั่ง
wget -qO- ifconfig.me/ip

ที่มา : itswapshop

Read More

Bookmark and Share

Tuesday, October 25, 2011

how to move multiple file with CLI

การย้ายไฟล์จากที่หนึ่งไปยังอีกที่หนึ่ง ปกติแล้วถ้าหากใช้ Windows ก็จะเลือกไฟล์หลาย ๆ ไฟล์จากนั้นก็ Drag & Drop file ไปไว้อีกทีนึงได้เลย แต่ถ้าเป็น CLI (Command Line Interface) ละจะทำอย่างไร?
หากต้องการ move file ทั้ง directory '/home/user/a' and rename directory to directory '/home/user/b' เลยอาจใช้คำสั่งนี้
mv /home/user/a /home/user/b
หาก /home/user/b exist can use this command
mv /home/user/a/* /home/user/b
ในขณะที่ file ที่ต้องการจะ move มีบางไฟล์จาก /home/user/a โดยที่ต้องการ move file ที่ไม่ได้ถูกเปลี่ยนแปลงมาแล้วเกินกว่า 30 วัน
find /home/user/a -type f -mtime +30 -exec mv '{}' /home/user/b \;

Read More

Bookmark and Share

Wednesday, October 19, 2011

automatic shutdown server by cron

หลาย ๆ ครั้งที่เครื่อง Server ไม่สามารถ shutdown ได้ในเวลาที่เราทำงาน ครั้นจะให้กลับมา shutdown ตอนดึก ๆ ก็คงจะไม่ดี ตัวช่วยในเรื่องเวลาที่ ubuntu, debian, linux, bsd, freebsd, unix ต่างก็มีนั่นก็คือ cron
การใช้งาน
เข้า Terminal แล้วใช้คำสั่ง สำหรับการตั้งเวลา cron ด้วย root
sudo crontab -e
หากว่าไม่ต้องการใช้ root ตั้งเวลา cron ต้องการเพียงแค่ user ที่ login อยู่ให้ใช้คำสั่ง
crontab -e
หากเรียกใช้งาน crontab ครั้งแรกอาจมีคำถามว่าต้องการเลือก shell editor แบบไหน ผมขอแนะนำให้เลือก nano สำหรับมือใหม่ครับ
เมื่อเรียกใช้คำสั่งแล้วจะพบกับหน้าจอสำหรับ กำหนดให้ cron ทำงาน โดย cron จะมีฟอแมตคือ
MIN HOUR DOM MON DOW CMD
โดยที่
MIN คือนาที มีค่าตั้งแต่ 0 - 59
HOUR คือชั่วโมง มีค่าตั้งแต่ 0 - 23
DOM ย่อมาจาก Day of month คือวันที่นั่นเองครับ มีค่าตั้งแต่ 1 - 31 ตามจำนวนวันในเดือนนั้น ๆ
MON คือเดือน มีค่าตั้งแต่ 1 - 12
DOW ย่อมาจาก Day of week คือ วันในสัปดาห์ มีค่าตั้งแต่ 0 - 6 โดยที่เริ่มตั้งแต่ 0 คือวันอาทิตย์, 1 คือวันจันทร์ ... ไล่ไปเรื่อย ๆ จน 6 คือวันเสาร์
CMD คือคำสั่งที่ต้องการจะสั่งให้ server ทำงานอัตโนมัติตามเวลาที่กำหนด ซึ่งตามบทความนี้คำสั่งที่จะใช้คือ shutdown -h now สำหรับปิดเครื่อง และ reboot สำหรับ restart เครื่อง server
เมื่อรู้ความหมายของ format cron แล้วดังนั้น หากต้องการปิดเครื่อง server ทุกวันเวลา ตีสาม คำสั่งคือ
00 03 * * * /sbin/shutdown -h now
ตัวอย่างสำหรับหากต้องการ restart server ในวันที่ 20 ตุลาคม เวลา ตีสาม ห้านาที มีคำสั่งคือ
05 03 20 10 * /sbin/reboot
เมื่อทำการแก้ไขเสร็จแล้วให้ save ด้วยคีย์ Ctrl+o กด enter และออกจาก editor ด้วยคีย์ Ctrl+x (สำหรับ editor nano) เพียงเท่านี้เครื่อง server ก็สามารถทำงานได้ตามที่เราต้องการโดยไม่ต้องนั่งหน้าเครื่องแล้วครับ

Read More

Bookmark and Share

Tuesday, October 18, 2011

how to install openvpn + heartbeat on ubuntu server

การเชื่อมต่อข้อมูลสำหรับองค์กร ในบางครั้งจะมีข้อมูลที่ไม่อยากเอาขึ้น internet อาจเป็นข้อมูลที่มีความลับจึงไม่อยากเสี่ยงที่จะเอาขึ้น internet ดังนั้นจึงทำเป็น intranet (สำหรับในเครือข่าย lan เดียวกัน) ขึ้น แต่เมื่อมี สาขา เพิ่มขึ้นความต้องการใช้ข้อมูลของสาขาแรกในสาขาใหม่ที่อยู่ห่างออกไปก็มี แนวทางในการแก้ปัญหาแนวทางหนึ่งก็คือ openvpn เป็นการเชื่อมโยงสาขาใหม่ให้เสมือนทำงานอยู่ที่เดียวกับสาขาแรก โดยในบทความนี้จะแสดงขั้นตอนการ install openvpn step by step พร้อมกับ install heartbeat เพื่อคอยตรวจสอบ openvpn server โดยมี openvpn server จำนวน 2 เครื่อง ดังรูปด้านบน
กำหนดให้ openvpn server 2 เครื่องคือ 192.168.2.21 ( primary ) and 192.168.2.22 ( slave )
กำหนด virtual ip 192.168.2.20 openvpn
กำหนด real ip 123.4.5.6 ( เป็น firewall ที่ทำการ forward port ไปที่ openvpn server )

[Server]
  1. Install openvpn
    sudo apt-get install openvpn
  2. Copy files from /usr/share/doc/openvpn/examples/easy-rsa to /etc/openvpn
    sudo mkdir /etc/openvpn/easy-rsa
    sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
  3. Edit file vars
    sudo vi /etc/openvpn/easy-rsa/vars
    Change these lines
    export KEY_COUNTRY="TH" #Change to your Country
    export KEY_PROVINCE="CM" #Change to your Province
    export KEY_CITY=""
    export KEY_ORG=""
    export KEY_EMAIL=""
  4. Setup CA and create server certificate
    cd /etc/openvpn/easy-rsa/
    sudo chown -R root:admin .
    sudo chmod g+w .
    source ./vars
    ./clean-all
    ./build-dh
    ./pkitool --initca
    ./pkitool --server server
    cd keys
    openvpn --genkey --secret ta.key
    sudo cp server.crt server.key ca.crt dh1024.pem ta.key ../../
  5. Create certificate file for client
    cd /etc/openvpn/easy-rsa
    source ./vars
    ./pkitool
    note : change to user machine.
  6. Configuring openvpn
    sudo vi /etc/openvpn/server.conf
    Change config :
    local 192.168.2.20   #virtual ip for heartbeat
    port 1194 
    # TCP or UDP server? 
    proto tcp 
    dev tun 
    ca /etc/openvpn/ca.crt 
    cert /etc/openvpn/server.crt 
    key /etc/openvpn/server.key  # This file should be kept secret 
    
    dh /etc/openvpn/dh1024.pem 
    server 192.168.201.0 255.255.255.0   #virtual ip for tunnel
    ifconfig-pool-persist ipp.txt 
    push "dhcp-option DOMAIN simdif.local" 
    push "dhcp-option DNS 192.168.2.1"           #DNS
    push "route 192.168.2.0 255.255.255.0" 
    push "route 192.168.201.0 255.255.255.0" 
    client-to-client 
    tls-auth ta.key 0 # This file is secret 
    comp-lzo 
    user nobody 
    group nogroup 
    persist-key 
    persist-tun 
    status openvpn-status.log 
    verb 4
    
  7. Restart service openvpn
    sudo /etc/init.d/openvpn restart
  8. ทำขั้นตอน 1-7 อีกครั้งกับเครื่อง openvpn server อีกเครื่อง
  9. Install heartbeat
    sudo apt-get install heartbeat
  10. Copy original config to /etc/ha.d/
    cd /usr/share/doc/heartbeat
    sudo cp ha.cf haresources authkeys /etc/ha.d/
  11. Edit ha.cf
    sudo vi /etc/ha.d/ha.cf
    Check and edit configuration
    debugfile /var/log/ha-debug 
    logfacility     local0 
    keepalive 4 
    deadtime 60 
    warntime 10 
    initdead 120 
    udpport 694 
    bcast   eth0            # Linux 
    auto_failback on 
    node openvpnserver01 
    node openvpnserver02
    ping_group group1 192.168.2.21 192.168.2.22
    
  12. Edit haresources
    sudo vi /etc/ha.d/haresources
    Change to :
    openvpnserver01 192.168.2.20 openvpn
  13. Edit authkeys
    sudo vi /etc/ha.d/authkeys
    Change to :
    auth 2
    2 sha1 test-ha
  14. Copy configuration file to 192.168.2.22
    cd /etc/ha.d
    scp ha.cf haresources authkeys username@192.168.2.22:
  15. Go to 192.168.2.22 and copy file to /etc/ha.d
    cd ~
    sudo cp ha.cf haresources authkeys /etc/ha.d
  16. Start heartbeat on the primary 192.168.2.21 and slave 192.168.2.22
    sudo /etc/init.d/heartbeat start
  17. Create firewall NAT both vpn server
    sudo echo 1 > /proc/sys/net/ipv4/ip_forward
    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  18. Edit file /etc/rc.local
    sudo vi /etc/rc.local
    Add 2 lines to configuration file
    sudo echo 1 > /proc/sys/net/ipv4/ip_forward
    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    exit 0
    

[Client]
  1. Install openvpn
    sudo apt-get install openvpn
  2. Copy certificate file from server ca.crt .crt .key ta.key to /etc/openvpn
  3. Edit configuration
    sudo vi /etc/openvpn/client.conf
    Change to :
    client 
    dev tun 
    proto tcp 
    remote 123.4.5.6 1194 
    resolv-retry infinite 
    nobind 
    user nobody 
    group nogroup 
    persist-key 
    persist-tun 
    ca ca.crt 
    cert .crt 
    key .key 
    tls-auth ta.key 1 
    comp-lzo 
    verb 3
    log-append /var/log/openvpn.log
    
  4. Restart service openvpn
    sudo /etc/init.d/openvpn restart
  5. Check connection
    ifconfig
    tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
              inet addr:192.168.201.6  P-t-P:192.168.201.5  Mask:255.255.255.255 
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1 
              RX packets:152 errors:0 dropped:0 overruns:0 frame:0 
              TX packets:182 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:100 
              RX bytes:51111 (51.1 KB)  TX bytes:21776 (21.7 KB)
    

Read More

Bookmark and Share

Saturday, October 15, 2011

ssh ไม่ต้องใส่รหัสผ่าน

ssh เป็นช่องทางในการ remote ไปจัดการเครื่อง server ที่นิยมใช้กันมากที่สุดเนื่องจากมีความปลอดภัยในการใช้งาน โดยคำสั่งในการใช้งาน ssh โดยปกติแล้วจะใช้
ssh -p [port] [user]@[ip]
โดยที่ [port] เป็นเลข port ในการเชื่อมต่อ ซึ่งหากไม่ใส่จะเป็นค่า default คือ port 22
[user] เป็นชื่อ user ที่อยู่ฝั่ง server
[ip] เป็น ไอพีของฝั่ง server ที่ต้องการเชื่อมต่อ
แต่เมื่อมีการใช้งาน ssh บ่อยมาก ๆ ก็จะเริ่มไม่อยากพิมพ์รหัสผ่านในการเชื่อมต่อ ทุกครั้ง ซึ่งเครื่องที่ใช้ปกติก็ใช้เพียงคนเดียว จึงอยากทำให้ ssh แล้วไม่ต้องใส่รหัสผ่าน โดยแนวทางในการทำ ssh แบบไม่ต้องใส่รหัสผ่านนี้ ได้ใช้แนวทางจาก เว็บ thaicert แต่อาจมีบางคำสั่งที่ไม่เหมือนกันครับ ขั้นตอนการทำมีดังนี้

  • สร้าง private key และ public key ด้วยคำสั่ง
  • ssh-keygen -t rsa
  • จากนั้นจะข้อความดังนี้
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/[user]/.ssh/id_rsa):
    
    ให้กด enter เลยเพื่อเก็บ key ไว้ที่แฟ้ม /home/[user]/.ssh/ โดยที่ [user] คือชื่อ user ของเครื่องที่ใช้ปกติ
  • ข้อความต่อไปจะถามว่าต้องการเข้ารหัสผ่านของ key ด้วยหรือไม่
    Enter passphrase (empty for no passphrase):
    
    หากว่าเป็นเครื่องที่ใช้งานเพียงคนเดียว และแน่ใจว่ามีความปลอดภัยมากพอก็สามารถกด enter ได้เลยเพื่อไม่ต้องกำหนดรหัสผ่าน
  • เมื่อสร้าง key เสร็จแล้ว กำหนด permission เพื่อความปลอดภัยมากขึ้น
    chmod 600 id_rsa
    chmod 644 id_rsa.pub
  • ขั้นตอนสุดท้ายเป็นการนำ public key ไปเก็บไว้ที่เครื่อง server
    ssh-copy-id [user_serv]@[ip_serv]
    [user_serv] คือ ชื่อ user ฝั่ง server
    [ip_serv] คือ ไอพี ฝั่ง server
เพียงเท่านี้ทุกครั้งที่ใช้คำสั่ง ssh ไปยังเครื่อง server ก็จะไม่ต้องใส่รหัสผ่านอีกแล้ว

Read More

Bookmark and Share

Thursday, October 13, 2011

unix tip shell script if statement double bracket [[ ]]

พอดีได้เขียน shell script แล้วเห็นบางสิ่งที่แปลกตาไปนั่นคือ double bracket คือมีวงเล็บก้ามปูแบบคู่ แบบนี้ [[ ]] ซึ่งปกติแล้วจะเขียนแบบนี้ [ ] ยกตัวอย่างประโยค if statement ที่ใช้ปกติ
if [ $value -lt 1 ]; then echo "increase value"; fi
จากตัวอย่างเป็น if statement ที่ตรวจสอบเงื่อนไขว่า หากค่า $value น้อยกว่า 1 ให้แสดงผล increase value แล้วที่นี้ทำไมต้องมี double bracket ล่ะ เมื่อเกิดข้อสงสัยจึงไปค้นหาข้อมูล และเจอ เว็บนี้ บอกว่า double bracket นี้เป็นเวอร์ชั่นใหม่ ซึ่งนอกจากจะมีคุณสมบัติหลัก ๆ เหมือนเดิมทุกประการแล้วยังเพิ่มความสามารถเจ๋ง ๆ เข้ามาอีกด้วย ซึ่งความสามารถเจ๋ง ๆ ที่เพิ่มเข้ามานี้มีประมาณนี้
- สามารถใช้ * ในการตรวจสอบ string ได้ เช่นต้องการตรวจสอบว่าภายในข้อความของ string $value มีคำว่า foo อยู่รึป่าว สามารถใช้ if statement ดังนี้
if [[ $value == *foo* ]]; then
echo "This string have foo"
fi
- นอกจากนั้นยังใช้สำหรับตัวอักษรตัวเล็ก และตัวใหญ่ได้ เช่นต้องการตรวจสอบ ทั้งคำว่า Foo and foo จะได้ if statement ดังนี้
if [[ $value == [fF]foo ]]; then
echo "This string have foo or Foo"
fi
สำหรับตัวอย่างอื่น ๆ สามารถดูเพิ่มเติมจาก เว็บนี้ ครับ

Read More

Bookmark and Share

Monday, October 10, 2011

[ทิป] ค้นหาคำจากเอกสารด้วย กรึ๊บ (grep)

การค้นหาคำจากเอกสารสำหรับหน้า GUI นั้น จะคุ้นเคยกับ Ctrl+F ซึ่งสามารถใช้กับ MS word, Texteditor, Firefox etc. แล้วก็ใส่คำที่ต้องการค้นหาไป ก็จะสามารถค้นหาคำที่ต้องการได้ ซึ่งในวันนี้ไม่ได้เล่าถึงวิธีใช้งาน Ctrl+F ที่คุ้นเคยกัน แต่จะแนะนำให้รู้จักกับ กรึ๊บ (grep) คำสั่ง command line บน linux

การใช้ grep ค้นหาคำที่ text file นั้นสามารถใช้คำสั่ง นี้ได้

cat php.ini | grep session

จากคำสั่งข้างต้น อธิบายทีละส่วนได้ ดังนี้

cat php.ini

เป็นคำสั่งในการอ่านไฟล์ php.ini แล้วแสดงผลทีละบรรทัดออกมายังหน้าจอแสดงผล ในขณะที่

grep session

นั้นจะเอาข้อมูลที่ได้จาก "cat php.ini" มาทำการค้นหาบรรทัดที่มีคำว่า session เท่านั้นจึงจะแสดงผล

ซึ่งคำสั่งนี้สามารถนำมาใช้กับการค้นหา package ที่ต้องการค้นหาได้ด้วย เช่น

dpkg -l | grep apache

โดยที่คำสั่ง dpkg -l เป็นคำสั่งในการ แสดงผล package ทั้งหมดที่ install ในเครื่อง ( ubuntu , debian ) ซึ่ง grep apache ก็เป็นการบอกให้แสดงผลเฉพาะบรรทัดที่มี apache เช่นกัน

Tip ในวันนี้ที่จะนำเสนอคือ การค้นหาคำจาก directory ซึ่งมีหลาย ๆ ไฟล์พร้อมกัน เช่นต้องการค้นหาคำว่า session ใน directory ที่มีชื่อว่า folder1 ใช่คำสั่งดังนี้

grep "session" -r folder1

ผลที่ได้จะแสดงที่อยู่ของไฟล์ใน folder1 แล้วจะแสดงผลเฉพาะบรรทัดที่มี session เท่านั้น

Read More

Bookmark and Share

Thursday, October 6, 2011

kernel.org กลับมาแล้ว

บางคนอาจสงสัยว่า kernel.org คืออะไรเหรอ? เป็นเว็บเหรอ หรือยังไง คำตอบคือใช่ครับเป็นเว็บครับ เป็นเว็บสำหรับพัฒนา และให้ ดาวน์โหลด ไฟล์ kernel ที่เป็นแกนกลางของ ลินุกซ์ครับ น่าจะประมาณนี้ได้ครับ

อ้าว แล้วเกิดอะไรขึ้นล่ะ kernel.org หายไปไหนเหรอ? เมื่อประมาณเดือนที่แล้วเกิดปัญหาด้านความปลอดภัยขึ้นกับเว็บเค้าน่ะ หรือเรียกภาษาชาวบ้านว่าโดนแฮค นั่นเอง เหมือนจะเข้ากับปัญหาปัจจุบันวันนี้จัง ที่เมื่อไม่กี่วันที่ผ่านมาทวิตเตอร์นายกก็โดนแฮค ดังนั้นคงไม่ต้องอธิบายคำว่าแฮคคืออะไรแล้วล่ะ :)

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

ยินดีต้อนรับการกลับมาของ kernel.org อีกคนครับ

Read More

Bookmark and Share