迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

在 Bash 中获取文件创建日期/时间

作者:迹忆客 最近更新:2023/05/16 浏览次数:

本篇文章将介绍如何在 Bash 中获取文件创建日期/时间。 我们将通过简要介绍旧系统中的文件创建来开始我们的讨论。

稍后我们将学习在 Bash 中创建文件。 最后,我们将讨论在 Bash 中获取文件创建日期/时间的不同方法。


在 Linux 中创建文件

在 Linux 中创建文件有多种方法。 我们可以使用 shell 或桌面文件管理器来创建文件。

本文将重点介绍如何使用 shell 命令在 Bash 上创建文件。

使用 touch 命令

在 Linux 中,touch 命令可用于创建新文件。 touch 命令的语法是 touch 文件名。

要创建一个文件,将其命名为 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 的文本文件中。

使用重定向运算符

我们可以仅使用重定向运算符创建一个空白文件。 输入重定向运算符后跟文件名将创建一个空白文本文件。

例如:

$ > 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 的文件特征的结构中返回。 相关细节在网站上有描述。

但是,较新的文件系统(ext4、zfs、btrfs、JFS 和 XFS)将创建时间戳存储在单独的字段中:

  1. ext4 – crtime
  2. zfs – crtime
  3. XFS – crtime
  4. btrfs – otime
  5. JFS - di_otime

以上字段将数据存储在文件 inode 中。 在 Bash 中有 3 种不同的方法来获取文件创建日期/时间。

第一个是非常粗糙的(非技术性的)并且可以在旧操作系统上工作,而接下来的两个是技术性的但是在高级操作系统/更新版本中可用。

使用文件名

正如我们已经讨论过的,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

在输出中,文件创建日期和时间与文件名一起可见(通常,人们有 data1、data2 等文件名)

使用 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 并检查其创建日期/时间。

如果我们仔细查看输出,就会知道文件 f1 的访问日期/时间和文件 f1 的出生日期/时间相同,这意味着这两个文件是在相同的日期/时间创建的。

使用 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 种获取文件创建日期和时间的方法。 这取决于用户使用的是旧操作系统还是新操作系统。

在老版本的情况下,我们可以采用第一种,非技术性的方式。 否则,第二种和第三种方法可用,其中管理在操作系统内部。

用户可以通过运行相关命令获取创建日期和时间。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Bash 脚本中执行变量中的命令

发布时间:2023/05/18 浏览次数:106 分类:操作系统

本篇文章是关于将 Bash 命令存储在一个变量中,然后直接从这个变量中执行它。 首先,我们将讨论执行变量中包含的命令的多种方法,然后是几个脚本示例。

Bash 变量相乘

发布时间:2023/05/18 浏览次数:50 分类:操作系统

本篇文章介绍如何在 Bash 中将两个变量相乘。在 Bash 中乘以变量。将两个变量相乘在 Bash 中是一个简单的操作。

Bash md5sum 命令

发布时间:2023/05/18 浏览次数:197 分类:操作系统

本篇文章介绍如何在 Bash 中使用 md5sum 命令。Bash md5sum 命令。md5sum 命令打印给定文件的 32 字符和 128 位校验和。

在 Bash 中排序数组

发布时间:2023/05/18 浏览次数:150 分类:操作系统

对数组进行排序对于任何编程语言来说都是一项非常常见的任务。 在 Bash 脚本中,我们还可以通过两种不同的方式完成此任务。

Bash 中的多维数组

发布时间:2023/05/18 浏览次数:70 分类:操作系统

多维数组对于任何程序都是非常重要的元素。 它主要用于创建数据的表视图和许多其他用途。本文演示如何创建二维数组。 此外,我们将通过必要的示例和解释来讨论该主题。

在 Bash 中打印数组元素

发布时间:2023/05/18 浏览次数:192 分类:操作系统

本文将展示我们如何在 Bash 脚本中打印数组元素。 为此,我们将讨论 5 种不同的方法。在 Bash 中使用 echo 语句打印数组元素

将数组传递给 Bash 中的函数

发布时间:2023/05/18 浏览次数:118 分类:操作系统

这篇文章是关于在 Bash 脚本中使用函数并将数组传递给它们的。 在进入实际主题之前,我们将简要介绍 Bash 脚本。

Bash 关联数组

发布时间:2023/05/18 浏览次数:71 分类:操作系统

本篇文章介绍如何在 Bash 中创建关联数组。Bash 关联数组 数组在 Bash 中可以很好地用于存储数据,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便