เรื่องของ atime mtime และ ctime ของไฟล์บน Unix

January 25th, 2012

บางครั้งเราเอาไฟล์ไปตั้งไว้บน Server นานๆ จนลืมไป แล้วต้องการรู้ว่าเราตั้งไว้นานแล้วหรือยัง และถูกเปลี่ยนไปเมื่อไหร เก่า หรือใหม่อย่างไร
อีกประการ ยังถูกใช้โดยโปรแกรม Backup เพื่อเลือกไฟล์สำหรับการทำ Backup แบบ Incremental คือ เลือกเฉพาะไฟล์ที่เพิ่มขึ้นใหม่ หรือไฟล์ที่ถูกเปลี่ยนแปลงเท่านั้น
เวลาของไฟล์บน Unix มีอยู่ 3 แบบ คือ atime, ctime, mtime ในที่นี้จะอธิบายการเปลี่ยนแปลงของค่าเวลาต่างๆ ดังนี้

ใช้คำสั่ง date เพื่อดูเวลาที่ทดสอบ

[root@SkyIT /time]$ date
Wed Jan 25 16:42:41 ICT 2012

สร้างไฟล์เปล่าๆ ด้วยคำสั่ง touch

[root@SkyIT /time]$ touch test1.txt

ใช้คำสั่ง ls -l เพื่อดูข้อมูลไฟล์เบื้องต้น

[root@SkyIT /time]$ ls -l test1.txt
-rw-r--r-- 1 root root 0 Jan 25 17:02 test1.txt

ใช้คำสั่ง stat เพื่อดูข้อมูลไฟล์โดยละเอียด

[root@SkyIT /time]$ stat test1.txt
  File: `test1.txt'
  Size: 0               Blocks: 0          IO Block: 8192   regular empty file
Device: 1540000h/22282240d      Inode: 204499      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-01-25 17:02:21.684449000 +0700
Modify: 2012-01-25 17:02:21.684449000 +0700
Change: 2012-01-25 17:02:21.684455000 +0700

หมายเหตุ เวลาที่แสดงจากคำสั่ง ls -l เป็นเวลา Modify (mtime)

เวลา Access (atime)

เมื่อไฟล์ถูก access หรือดูเนื้อหาภายในไฟล์ เวลา Access (atime) จะถูกปรับปรุงโดยอัตโนมัติ

เช่น ใช้คำสั่ง cat เพื่อเรียกดูไฟล์ เวลา Access (atime) ก็จะถูกเปลี่ยนไป ตามเวลาที่ access

[root@SkyIT /time]$ date
Wed Jan 25 17:04:43 ICT 2012
[root@SkyIT /time]$ cat test1.txt
[root@SkyIT /time]$ ls -l test1.txt
-rw-r--r-- 1 root root 0 Jan 25 17:02 test1.txt
[root@SkyIT /time]$ stat test1.txt
  File: `test1.txt'
  Size: 0               Blocks: 0          IO Block: 8192   regular empty file
Device: 1540000h/22282240d      Inode: 204499      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-01-25 17:04:59.253304000 +0700
Modify: 2012-01-25 17:02:21.684449000 +0700
Change: 2012-01-25 17:02:21.684455000 +0700

สังเกตว่า เวลาของไฟล์ จากการรันคำสั่ง ls -l ไม่เปลี่ยนแปลง เพราะ mtime ไม่เปลี่ยน

เวลา Change (ctime)

เมื่อมีการเปลี่ยนแปลงข้อมูลเกี่ยวกับ Inode ของไฟล์ เช่นการเปลี่ยน Owner, Group, Permission เวลา ctime จะถูกปรับปรุง

ตัวอย่างการเปลี่ยน permission ทำให้เวลา ctime เปลี่ยนแปลง

[root@SkyIT /time]$ date
Wed Jan 25 17:05:55 ICT 2012
[root@SkyIT /time]$ chmod 600 test1.txt
[root@SkyIT /time]$ ls -l test1.txt
-rw------- 1 root root 0 Jan 25 17:02 test1.txt
[root@SkyIT /time]$ stat test1.txt
  File: `test1.txt'
  Size: 0               Blocks: 0          IO Block: 8192   regular empty file
Device: 1540000h/22282240d      Inode: 204499      Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-01-25 17:04:59.253304000 +0700
Modify: 2012-01-25 17:02:21.684449000 +0700
Change: 2012-01-25 17:06:06.641615000 +0700

สังเกตว่า เวลา Access (atime), Modify (mtime) หรือเวลาจากคำสั่ง ls -l ไม่เปลี่ยนแปลงไป เพราะคำสั่ง chmod เปลี่ยนแค่ข้อมูลใน Inode

เวลา Modify (mtime)

เมื่อเนื้อหาในไฟล์ถูกแก้ไข เวลา Modify (mtime) จะถูกปรับปรุง ตัวอย่างเช่น

[root@SkyIT /time]$ date
Wed Jan 25 17:08:37 ICT 2012

ใช้คำสั่ง echo และ shell redirection “>” เพิ่มเนื้อหาเข้าไปในไฟล์

[root@SkyIT /time]$ echo "add more content to file" >> test1.txt
[root@SkyIT /time]$ ls -l test1.txt
-rw------- 1 root root 25 Jan 25 17:09 test1.txt
[root@SkyIT /time]$ stat test1.txt
  File: `test1.txt'
  Size: 25              Blocks: 2          IO Block: 8192   regular file
Device: 1540000h/22282240d      Inode: 204499      Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-01-25 17:04:59.253304000 +0700
Modify: 2012-01-25 17:09:24.682162000 +0700
Change: 2012-01-25 17:09:24.682162000 +0700

เมื่อเนื้อหาในไฟล์ถูกเปลี่ยน เวลา Change (ctime) ก็จะถูกปรับไปด้วย

Create virtual host on Apache

September 21st, 2011

การสร้าง Virtual Host บน Apache

สภาพแวดล้อมที่ทดสอบ
– AppServ 2.5.10 for Windows
– Window XP SP3

โดยปกติเราจะทำเว็บจะเข้าไปสร้างที่ โฟลเดอร์ C:\AppServ\www แต่แนะนำให้ทำที่ D:\AppServ\www จะป้องกันข้อมูลหายอันเกิดจากลง Windows ใหม่โดยลืม Backup Web App ที่เราได้ทำไป

เวลาเราต้องการทดสอบ Web App ที่เราได้ develop ไปแล้ว ก็เปิดเบราเซอร์ http://localhost/MyWebApp ซึ่งมันเป็นโฟลเดอร์ย่อย ที่เราไปสร้างไว้
D:\AppServ\www\MyWebApp

ถ้าเราต้องการให้ url ของเราในเครื่องของเรา จาก http://localhost/MyWebApp ให้เป็น http://www.MyWebApp.com จะทำได้มั้ย มีวิธีมั้ย?
คำตอบ มีครับโดยการใช้วิธี virtual host และยังสามารถสร้าง App ของเราไว้ใน ไดรว์ไหนก็ได้

ขั้นตอนการทำ virtual host มีทั้งหมด 3 ขั้นตอน
1. แก้ที่ไฟล์ hosts จะอยู่ใน C:\Windows\System32\drivers\etc\
เป็นการบอกเส้นทางให้เบราเซอร์รู้ว่ามันจะไปทางไหน ในไฟล์ host จะเก็บ ชื่อ URL และ IP ไว้ เมื่อเบราเซอร์เห็นว่า URL นี่มัน IP 127.0.0.1 มันอยู่ในเครื่องเราเอง ก็ไม่จำเป็นต้องออกไปสู้โลกภายนอก แต่ถ้า url ที่เราพิมพ์มาไม่เจอในไฟล์ host ก็จะส่งคำร้องออกไปสู่วงแลน ถ้ายังไม่มีอีกก็จะส่งออกไปสู้ผู้ให้บริการอินเตอร์เน็ตที่กำลังเชื่อมต่ออยู่ต่อไป

แก้ไขไฟล์ hosts กำหนดเส้นทาง
1.1 เปิดไฟล์ hosts ขึ้นมาด้วยโปรแกรม Notepad
1.2 เพิ่มชื่อเว็บไซต์ที่เราต้องการ หรือสมมติเข้าไป และให้ชี้กลับมาที่เครื่องเราเอง จะใช้ .com ก็ได้ครับ หรือจะใช้ดอท อะไรก็ได้ครับ

127.0.0.1	www.MyWebApp.loc

1.3 Save ไฟล์ Host

2. แก้ที่ไฟล์ httpd.conf จะอยู่ใน D:\AppServ\Apache2.2\conf\
เป็นการเปิดปลักอิน mod_vhost_alias ที่ถูกปิดไว้ และกำหนดสิทธิ์ในการเข้าใช้งาน virtual host
2.1 เปิดไฟล์ httpd.conf ขึ้นมาด้วยโปรแกรม Notepad
2.2 ที่บรรทัด 203 ให้เอาเครื่องหมาย # ออก

#LoadModule vhost_alias_module modules/mod_vhost_alias.so

แก้ไขเป็น

LoadModule vhost_alias_module modules/mod_vhost_alias.so

2.3 ที่บรรทัด 561 ให้เอาเครื่องหมาย # ออก

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

แก้ไขเป็น

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

2.4 เพิ่มสิทธิ์ในการเข้าใช้งานโฟลเดอร์ MyWebApp บนไดร์ D: ต่อท้ายไฟล์ httpd.conf ได้เลย

<Directory "E:/Workspace/MyWebApp">
    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Allow from all
</Directory>

2.5 Save ไฟล์ httpd.conf

3. แก้ที่ไฟล์ httpd-vhosts.conf จะอยู่ใน D:\AppServ\Apache2.2\conf\extra
เป็นการกำหนดที่เก็บ App ของเราในที่นี้ชื่อ MyWebApp เพื่อ กำหนดให้ url www.MyWebApp.loc ชี้ไปที่ Web App ของเรา
3.1 เปิดไฟล์ httpd-vhosts.conf ขึ้นมาด้วยโปรแกรม Notepad
3.2 เพิ่มข้อมูลข้างล่างต่อท้ายไฟล์ได้เลย

<VirtualHost *:80>
    ServerAdmin webmaster@MyWebApp.loc
    DocumentRoot "E:/Workspace/MyWebApp"
    ServerName MyWebApp.loc
    ServerAlias www.MyWebApp.loc
    ErrorLog "logs/MyWebApp.loc-error.log"
    CustomLog "logs/MyWebApp.loc-access.log" common
</VirtualHost>

– DocumentRoot : คือที่เก็บไฟล์
– ServerName : ชื่อโดเมน ต้องเป็นชื่อเดียวกับที่อยู่ในไฟล์ hosts
– ServerAlias : ชื่อเสมือนโดเมน มันจะได้เข้าได้ทั้งมี www และ ไม่มี

3.3 Save ไฟล์ httpd-vhosts.conf

หลังจากทำมาจนครบ 3 ขั้นตอนแล้วให้ Restart Apache ก่อน โดยเข้าไปที่
C:\Documents and Settings\\Start Menu\Programs\AppServ\Control Server by Service\
ดับเบิลคลิก Apache Restart

ปล.
ก่อนจะทดลองทำ Virtual Host แนะนำให้ Back up ไว้ก่อนก็ดีครับ ทั้ง 3 ไฟล์ที่กล่าวมาข้างต้น

Mean Date Time for Job Scheduling on Oracle

September 15th, 2011

นี่เป็นแค่ตัวอย่างการตั้งเวลาให้ JOB ทำงาน และนำไปตอยอดในการตั้งเวลานอกเหนือจากตัวอย่างครับ

Date / Time Math Time Description
SYSDATE – 7/24; Past 7 hours – ผ่านมา 7 ชั่วโมง
SYSDATE – 7; Past 7 days – ผ่านมา 7 วัน
SYSDATE – 7/1440; Past 7 minutes – ผ่านมา 7 นาที
SYSDATE + 7/24
13/24
7 hours – 7 ชั่วโมง
13 hours – 13 ชั่วโมง
1/24/60/60
7/24/60/60
20/1440/60
20/(24*60*60)
One second – 1 วินาที
Seven seconds – 1 วินาที
20 second – 20 วินาที
20 second – 20 วินาที
1/24/60
1/1440
5/24/60
One minute – 1 นาที
One minute – 1 นาที
Five minutes – 5 นาที
1/24
5/24
One hour – 1 ชั่วโมง
Five hours – 5 ชั่วโมง
TRUNC(SYSDATE+1/24,’HH’) Every one hour starting with the next hour – ทุกๆ ชั่วโมง ในชั่วโมงถัดไป
TRUNC(SYSDATE+1) + 2/24 + 30/1440 Every day at 2:30 AM – ทุกวันตอนเวลา 2:30 น.

ตัวอย่าง คิวรีเอาไว้เทส

SELECT  SYSDATE AS now_date,
   TRUNC(SYSDATE+1) + 2/24 + 30/1440 AS every_day_at2_30AM,
   SYSDATE+20/(24*60*60)  AS every_20s,
   SYSDATE + 20/1440/60 AS every_20s_2,
   SYSDATE+1/1440 AS t_minute,
FROM dual;