touch 指令可以建立空白的新檔案, 改變現有檔案及目錄的戳記, 以下是 touch 指令的用法。
linux-touch-command
在介紹 touch 指令的用法前, 首先講一下 Linux 的檔案的 3 種時間戳記:
atime (access time) -> 檔案最後被開啟、讀取或存取的時間。
mtime (modify time) -> 檔案最後被修改的時間。
ctime (change time) -> 檔案的屬性最後被修改的時間, 包括權限及 owner.
要檢視檔案詳細資訊, 可以用 stat 指令, 它會顯示包括時間戳記的檔案詳細資訊:
1 2 3 4 5 6 7 8 |
$ stat test.sh File: ‘test.sh’ Size: 165 Blocks: 8 IO Block: 4096 regular file Device: 800h/2048d Inode: 141109 Links: 1 Access: (0775/-rwxrwxr-x) Uid: ( 1000/ samtang) Gid: ( 1000/ samtang) Access: 2018-05-06 20:05:44.561724250 +0800 Modify: 2018-05-06 20:03:47.553022372 +0800 Change: 2018-05-06 20:05:10.029757763 +0800 |
現在開始介紹 touch 指令, touch 指令後面只有檔案名稱, 而沒有任何參數, 當檔案不存在時, 會自動建立空白的新檔, 這也是在 Linux 常用建立空間新檔案的方法, 例如:
如果想建立多個空白新檔案, 只要加上多個檔案名即可:
如果不想 touch 指令建立新檔案, 只要加上 -c (–no-create) 參數:
用 touch 修改檔案時間戳記, 預設沒有加入參數的情況下, 會將 atime 及 mtime 同時修改成現在的時間。如果需要指定要修改的時間戳記, 便要參數設定。
使用 -a 參數設定檔案的 atime (access time) 成現在的時間:
使用 -m 參數設定檔案的 mtime (modify time) 成現在的時間:
上面的例子是是檔案的 atime 及 mtime, 修改成現在的時間, 如果要修改成指定的時間, 便要加上 -d (–date=) 參數, 例如修改檔案的 atime:
Copy
上面指令會將檔案 file1 的 atime 改成 2018 年 6 月 6 日 20:30 分, 而時間的部份需要用引號包著。
但如果放在 Shell Script 內執行, 上面的日期格式反而很麻煩, 改用 -t 參數, 並以下面格式設定:
use [[CC]YY]MMDDhhmm[.ss]
跟上面的例子一樣, 改用數字代表時間:
除了自訂時間外, 也可以將其他檔案的時間戳記複製, 例如要將 file1 的時間戳記複製到 file2, 用以下指令:
除了檔案外, touch 也可以對目錄及 symlink 生效, 如果目標檔案是 symlink, 預設的情況 touch 會修改 symlink 指向的檔案的時間戳記, 如果要修改 symlink 的時間戳記, 需要加上 -h 參數: