Linux

cp -p コマンドで維持されるタイムスタンプとは?

投稿日:

1. ファイルとディレクトリが持つ「時刻情報」

Linux でのファイルとディレクトリは、通常以下の4つの時刻情報を持っています。

Access 最終アクセス時刻
Modify 最終修正時刻(最後にデータを修正した時刻)
Change 最終状態変更時刻(最後にメタデータを修正した時刻)
Birth 作成時刻

2. cp -p コマンドで維持されるタイムスタンプとは?

cp コマンドはファイルやディレクトリをコピーするコマンドですが、-p オプションを付けると、「アクセス許可情報」「所有者と所有グループ」「タイムスタンプ」が保持されてコピーされます。

この「タイムスタンプ」とは、1 に書いた「Access」「Modify」「Change」「Birth」のうちのどれを指すのでしょうか?

本記事で言いたいのはこれだけなのですが、結論を言ってしまうと「Access」と「Modify」です。この2つは元のファイルの値が保持されます。

3. 実験

foo.txt というファイルで実験してみます。

まず、statコマンドを実行し、このファイルが持っている各時刻情報を表示します。

$ stat foo.txt
  File: foo.txt
  Size: 12070           Blocks: 24         IO Block: 4096   通常ファイル
Device: fd02h/64770d    Inode: 527408      Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/    taro)   Gid: ( 1000/    taro)
Access: 2020-06-24 13:01:27.393000000 +0900
Modify: 2020-06-24 13:00:25.543000000 +0900
Change: 2021-02-18 00:06:55.331000000 +0900
 Birth: 2020-06-24 13:00:25.542000000 +0900

次にこのファイルをコピーします。

$ cp -p foo.txt foo1.txt

今度は、コピーして作成されたファイルに対して statコマンドを実行し、各時刻情報を表示します。

$ stat foo1.txt
  File: foo1.txt
  Size: 12070           Blocks: 24         IO Block: 4096   通常ファイル
Device: fd02h/64770d    Inode: 532513      Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/    taro)   Gid: ( 1000/    taro)
Access: 2020-06-24 13:01:27.393000000 +0900
Modify: 2020-06-24 13:00:25.543000000 +0900
Change: 2022-06-20 19:19:07.931000000 +0900
 Birth: 2022-06-20 19:19:07.930000000 +0900

Change」と「Birth」は更新されてしまいました!

4. 補足

GNU Coreutils: 11.1 cp: ファイルやディレクトリをコピーする にはちゃんと書いてあります。

‘timestamps’

最終アクセス日時 (last access time) と最終更新日時 (last modification time) を、可能ならば、維持する。古いシステムでは、対象となるファイルがシンボリックリンクの場合、 そうした属性を維持することができない。 それに対して、最近のシステムでは、たいていのものが utimensat 関数を用意しているので、シンボリックリンクの場合でも、日時関係の属性維持が可能である。

GNU Coreutils: 11.1 cp: ファイルやディレクトリをコピーする

5. 参考

📂-Linux

執筆者:labo


comment

メールアドレスが公開されることはありません。

関連記事

Linux

ラベル行のある複数ファイルを1ファイルにマージするコマンド

ラベル行のある複数ファイルをマージするコマンドを紹介します。

Linux

指定した条件にマッチするファイルを検索する find コマンド

find コマンドについて説明します。 ※ 本ページで扱うのは、find (GNU findutils) 4.7.0-git です。 目次1. find コマンドの使い方式 (EXPRESSION)式 …

Let's Encrypt

Let’s Encrypt で ‘-0001’ がついた証明書データを削除する方法

目次1. 問題点2. 対応方法念のため、存在している証明書を全て表示します。いらない証明書データを削除する3. 間違えて生成した ‘-0001’ の方を Webサイトで使用して …

WSL

WSL の Ubuntu 16.04 LTS を 18.04 LTS にアップグレードする

WSL の Ubuntu 16.04 LTS を 18.04 LTS にアップグレードしたときの手順を記録します。 目次1. 公式な情報2. 現状確認3. アップグレード作業(1) パッケージを最新の …

SELinux

Webサーバーがサイトの構成ファイルを上書きできない問題に対応する(SELinuxが原因の場合)

目次1. はじめに2. 前提3. CentOS 7 の SELinux4. 対応手順5. おわりに参考 1. はじめに Webサイトによっては、そのWebサイトを構成しているファイルを自分で更新する場 …