Bash でファイル作成日時を取得する

Abdul Mateen 2023年6月20日
  1. Linux でのファイル作成
  2. Linux でファイル作成日時を取得する
Bash でファイル作成日時を取得する

このチュートリアルでは、Bash でファイルの作成日時を取得する方法を説明します。 古いシステムでのファイル作成について簡単に紹介することから、議論を始めます。

後で、Bash でのファイル作成について学習します。 最後に、Bash でファイル作成日時を取得するさまざまな方法について説明します。

Linux でのファイル作成

Linux でファイルを作成するには、さまざまな方法があります。 ファイルの作成には、シェルまたはデスクトップ ファイル マネージャーを使用できます。

この記事では、シェル コマンドを使用して Bash でファイルを作成することに焦点を当てます。

touch コマンドの使用

Linux では、touch コマンドを使用して新しいファイルを作成できます。 touch コマンドの構文は touch filename です。

ファイルを作成するには、ABC.XYZ という名前を付けます。 書く必要があります:

$ touch ABC.XYZ

このコマンドは、ABC.XYZ という名前の空のファイルを作成します。 現在のディレクトリで ls コマンドを実行して、ファイルを表示できます (作成されている場合)。

cat コマンドの使用

cat コマンドを使用して新しいファイルを作成できます。 ユーザーからの入力を新しいファイルに取り込むことで、リダイレクト操作を組み合わせることができます。

cat コマンドは、ユーザーにテキストを入力するように促します。 ユーザーはリターン キーを入力して次の行に移動できます。

このコマンドを終了するには、Ctrl+D を押します。 ユーザーが入力したテキスト全体が行ごとにファイルに保存されます。 例を参照してください:

$ cat > my_file.txt
Welcome to Bash shell!
The text entered here will be written into a text file.
Ctrl+D

最後のステートメントは書き込まれませんが、ユーザーがコマンドを終了するために押すキーの組み合わせです。 応答として、my_file.txt という名前のテキスト ファイルに次の 2 行が書き込まれます。

リダイレクト演算子の使用

リダイレクト演算子のみを使用して空のファイルを作成できます。 リダイレクト演算子の後にファイル名を入力すると、空白のテキスト ファイルが作成されます。

例えば:

$ > my_file.txt

ls コマンドを再度使用して、ファイルの作成を確認できます。 同じ名前のファイル、この場合は my_file.txt, が既に存在する可能性もあります。

この場合、コマンドはファイルの以前の内容を消去し、my_file.txt という名前の空のファイルが存在します。

以前のコンテンツが存在するか、削除されるかを確認して確認する必要があります。 cat コマンドを使用して、ファイルの内容を読み取ります。

$ cat my_file.txt

ファイル名やディレクトリなどのスペルに問題がなければ、ファイルは空になります。

echo コマンドの使用

echo コマンドは文字列を引数として取り、それを出力として表示します。 例えば:

$ echo "This is the first file"
This is the first file

echo コマンドとリダイレクト演算子の後にいくつかのコンテンツを記述して、渡されたコンテンツで新しいファイルを作成できます。 この場合も、ファイルが既に存在する場合、コマンドは以前の内容を削除します。

例を参照してください:

$ echo "This is the First file" > firstFile.txt

この echo コマンドの結果、新しいファイルが作成されます。このファイルには、引数として echo に渡されたテキストが含まれます。 これらはすべて、Bash でファイルを作成する方法です。

詳細を読むには、このウェブサイトをクリックしてください。

Linux でファイル作成日時を取得する

ファイルが正常に作成されたら、次のステップは、ファイル作成の日付と時刻を見つけることです。 ほとんどの古いシステムは古いファイル システム バージョンを実行しており、ファイルの作成日を保存する必要があります。

POSIX 標準では、各ファイルに保存される 3つの異なるタイムスタンプ値のみが指定されているため、ファイル システムがそれらを超えるものをサポートする必要はありません。つまり、作成時間を利用できません。

これら 3つのタイムスタンプには、次の情報が保存されます。

  1. 最終アクセス日 - atime
  2. 最終更新日 - mtime
  3. 最終変更日 - ctime

これらの値は、struct stat という名前のファイル特性を持つ構造体で返されます。 関連する詳細はウェブサイトに記載されています。

ただし、新しいファイル システム (ext4zfsbtrfsJFS、およびXFS) では、作成タイム スタンプが別のフィールドに保存されます。

  1. ext4crtime
  2. zfscrtime
  3. XFScrtime
  4. btrfsotime
  5. JFS - di_otime

上記のフィールドは、ファイル inode にデータを保存します。 Bash でファイル作成日時を取得するには、3つの方法があります。

1つ目は非常に粗雑 (非技術的) で、古いオペレーティング システムで動作しますが、次の 2つは技術的ですが、高度なオペレーティング システム/新しいバージョンでのみ使用できます。

ファイル名を使用する

すでに説明したように、stat コマンドは、古いオペレーティング システムでは 3つのタイム スタンプを表示しますが、ファイル作成に関連するタイム スタンプはありません。 ただし、ユーザー (ファイルの作成者) は、作成時刻をファイル名と連結できます。これは、ファイル名が変更されていない場合に有効です。

例えば:

touch data1_18_oct_2022_10_11_AM
touch data2_18_oct_2022_11_20_AM
...
ls -l

出力:

-rwxrwxrwx 1 root  root   0 Oct 18 05:16 data1_18_oct_2022_10_11_AM
-rw-r--r-- 1 14079 14079  0 Oct 18 05:16 data2_18_oct_2022_11_20_AM
...
-rwxrwxrwx 1 root  root  69 Oct 18 05:16 main.bash

出力では、ファイルの作成日時がファイル名とともに表示されます (通常、人々は data1data2 などのファイル名を持っています)。

stat コマンドを使用する

stat コマンドは、ファイルの作成日時を簡単に取得できます。 古いバージョンでは、3つのタイム スタンプ値が提供されます。

これらのタイムスタンプ値は、ファイルが最後にアクセスされた時刻、ファイル データが最後に変更された時刻、およびファイルの状態が最後に変更された時刻です。 ただし、オペレーティング システムの新しいバージョンでは、ファイルの誕生/作成時刻も提供されます。

Bashで新規ファイルを作成し、日時を取得して確認してみましょう。

touch f1
stat f1
touch f2
cat f2>f1
touch f1
stat f1

出力:

Access: 2022-10-17 15:24:16.676971765 +0000
Modify: 2022-10-17 15:24:16.676971765 +0000
Change: 2022-10-17 15:24:16.676971765 +0000
 Birth: 2022-10-17 15:24:16.676971765 +0000

Access: 2022-10-17 15:24:16.684972083 +0000
Modify: 2022-10-17 15:24:16.684972083 +0000
Change: 2022-10-17 15:24:16.684972083 +0000
 Birth: 2022-10-17 15:24:16.676971765 +0000

上記のコードでは、最初に touch コマンドを使用してファイル f1 を作成し、次に stat コマンドを使用してその作成日時を確認します。 次に、f2 という別のファイルを作成します。

cat> を使用して、f2 の内容を f1 の最後に追加します。 次に、再び f1 を作成し、その作成日時を確認します。

出力をよく見ると、ファイル f1Access 日付/時刻とファイル f1 の生年月日/時刻が同じであることがわかります。つまり、両方のファイルが同じ日付/時刻に作成されていることを意味します。 .

注: jdoodle.comreplit.com でスクリプトを実行しました。どちらも新しい OS バージョンをサポートしているためです。 これらのオンライン コンパイラでスクリプトを確認することもできます。

debugfs コマンドを使用する

debugfs コマンドは、ext4 ファイル システムでも使用できます。 このコマンドを使用して、ファイルの作成日を確認できます。 debugfs コマンドの主な目的は、ファイル システムをデバッグすることです。 ただし、このコマンドを使用してファイルの作成日を見つけることもできます。

まず、ファイルの inode 番号が必要です。これは ls コマンドで確認できます。 -i フラグは、ls にファイルのノード番号を出力させます。

$ ls -i ./file
5118705 ./file

df は、ファイル システムを開くために使用できるコマンドです。

~ $ df ./file
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             26046564   8380600  16338936  34% /

次に、この情報を debugfs コマンドに渡します。その構文は debugfs -R' stat <inode>'/dev/sdX です。ここで、inode はファイル inode であり、/dev/sdX は、ファイルのファイル システムです。

$ sudo debugfs -R 'stat <5118705>' /dev/sda2
debugfs 1.46.4 (18-Aug-2021)
Inode: 5118705   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 2975709199    Version: 0x00000000:00000001
User:  1000   Group:  1000   Project:     0   Size: 8
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x61bc31c8:19fee850 -- Fri Oct 14 06:44:24 2022
atime: 0x61bc3224:7f8fe250 -- Fri Oct 14 06:45:56 2022
mtime: 0x61bc31c8:19fee850 -- Fri Oct 14 06:44:24 2022
crtime: 0x61bc2b65:71f8e150 -- Fri Oct 14 06:17:09 2022
Size of extra inode fields: 32
Inode checksum: 0x5ddd5b4b
EXTENTS:
(0):5279293

上に表示されている crtime フィールドには、ファイルの作成時刻があります。 ファイル作成時間 Fri Oct 14 06:17:09 2022 は、ファイルが作成された正確な日付です。

ただし、フィールド ctime は似ているように見えますが、異なることに注意してください。 crtime フィールドに含まれる時間は、ファイルの権限の変更など、ファイルの最後のステータス変更です。

この記事では、ファイルの作成日時を取得する 3つの方法について説明しました。 ユーザーが使用しているオペレーティング システムが古いか新しいかによって異なります。

古いバージョンの場合、最初の非技術的な方法を採用できます。 それ以外の場合は、管理がオペレーティング システム内で行われる 2 番目と 3 番目の方法を利用できます。

ユーザーは、関連するコマンドを実行して、作成日時を取得できます。

関連記事 - Bash Date