重返操场
是时候放了 发现 一些(几乎)实际用途。 我们将创建一个游乐场并尝试我们学到的一些东西。
首先,让我们创建一个包含许多子目录和文件的游乐场:
[我@linuxbox ~]$ mkdir -p 游乐场/目录-{001..100}
[我@linuxbox ~]$ 触摸操场/dir-{001..100}/file-{A..Z}
[我@linuxbox ~]$ mkdir -p 游乐场/目录-{001..100}
[我@linuxbox ~]$ 触摸操场/dir-{001..100}/file-{A..Z}
惊叹于命令行的强大功能! 通过这两行,我们创建了一个包含 100 个子目录的游乐场目录,每个子目录包含 26 个空文件。 用 GUI 试试吧!
我们用来完成这个魔法的方法涉及一个熟悉的命令(MKDIR),一个奇异的 shell 扩展(大括号)和一个新命令, 触摸。 通过结合 MKDIR 与 -p 选项(导致 MKDIR 要创建指定路径的父目录),使用大括号扩展,我们能够创建 100 个子目录。
这个 触摸 命令通常用于设置或更新文件的访问、更改和修改次数。 但是,如果文件名参数是不存在的文件,则会创建一个空文件。
在我们的 Playground 中,我们创建了一个名为的文件的 100 个实例 文件-A. 让我们找到它们:
[我@linuxbox ~]$ find playground -type f -name 'file-A'
[我@linuxbox ~]$ find playground -type f -name 'file-A'
注意,不像 ls, 发现 不会按排序顺序生成结果。 其顺序由存储设备的布局决定。 我们可以通过这种方式确认我们实际上有 100 个文件实例:
[我@linuxbox ~]$ find playground -type f -name 'file-A' | wc -l
100
[我@linuxbox ~]$ find playground -type f -name 'file-A' | wc -l
100
接下来,让我们看看根据文件的修改时间查找文件。 这在按时间顺序创建备份或组织文件时会很有帮助。 为此,我们将首先创建一个参考文件,用于比较修改时间:
[我@linuxbox ~]$ 触摸操场/时间戳
[我@linuxbox ~]$ 触摸操场/时间戳
这将创建一个名为的空文件 时间戳 并将其修改时间设置为当前时间。 我们可以使用另一个方便的命令来验证这一点, 统计,这是一种加强版 ls。 该 统计 命令显示系统理解的所有内容
关于文件及其属性:
[我@linuxbox ~]$ 统计游乐场/时间戳
文件:`游乐场/时间戳'
大小:0 块:0 IO 块:4096 常规空文件 设备:803h/2051d Inode:14265061 链接:1
访问:(0644/-rw-r--r--) Uid:( 1001/我) Gid:( 1001/我) 访问:2016-10-08 15:15:39.000000000 -0400
Modify: 2016-10-08 15:15:39.000000000 -0400
Change: 2016-10-08 15:15:39.000000000 -0400
[我@linuxbox ~]$ 统计游乐场/时间戳
文件:`游乐场/时间戳'
大小:0 块:0 IO 块:4096 常规空文件 设备:803h/2051d Inode:14265061 链接:1
访问:(0644/-rw-r--r--) Uid:( 1001/我) Gid:( 1001/我) 访问:2016-10-08 15:15:39.000000000 -0400
Modify: 2016-10-08 15:15:39.000000000 -0400
Change: 2016-10-08 15:15:39.000000000 -0400
如果我们 触摸 再次检查文件,然后用 统计,我们将看到文件的时间已更新。:
[我@linuxbox ~]$ 触摸操场/时间戳
[我@linuxbox ~]$ 统计游乐场/时间戳
文件:`游乐场/时间戳'
大小:0 块:0 IO 块:4096 常规空文件 设备:803h/2051d Inode:14265061 链接:1
访问:(0644/-rw-r--r--) Uid:( 1001/我) Gid:( 1001/我) 访问:2016-10-08 15:23:33.000000000 -0400
Modify: 2016-10-08 15:23:33.000000000 -0400
Change: 2016-10-08 15:23:33.000000000 -0400
[我@linuxbox ~]$ 触摸操场/时间戳
[我@linuxbox ~]$ 统计游乐场/时间戳
文件:`游乐场/时间戳'
大小:0 块:0 IO 块:4096 常规空文件 设备:803h/2051d Inode:14265061 链接:1
访问:(0644/-rw-r--r--) Uid:( 1001/我) Gid:( 1001/我) 访问:2016-10-08 15:23:33.000000000 -0400
Modify: 2016-10-08 15:23:33.000000000 -0400
Change: 2016-10-08 15:23:33.000000000 -0400
接下来我们用 发现 更新我们的一些 Playground 文件:
[我@linuxbox ~]$ find playground -type f -name 'file-B' -exec touch '{}' ';'
[我@linuxbox ~]$ find playground -type f -name 'file-B' -exec touch '{}' ';'
这会更新 Playground 中名为的所有文件 文件-B. 接下来我们将使用 发现 通过将所有文件与参考文件进行比较来识别更新的文件 时间戳:
[我@linuxbox ~]$ 找到 playground -type f -newer playground/timestamp
[我@linuxbox ~]$ 找到 playground -type f -newer playground/timestamp
结果包含所有 100 个实例 文件-B. 由于我们执行了一个 触摸 在 Playground 中名为的所有文件上 文件-B 我们更新后 时间戳,它们现在比 时间戳 因此可以用 -较新 测试。
最后,让我们回到我们之前执行的错误权限测试并将其应用于
[我@linuxbox ~]$ 找到游乐场 \( -type f -not -perm 0600 \) - 或 \(
-type d -not -perm 0700 \)
[我@linuxbox ~]$ 找到游乐场 \( -type f -not -perm 0600 \) - 或 \(
-type d -not -perm 0700 \)
此命令列出所有 100 个目录和 2600 个文件 操场 (以及 时间戳 和 操场 本身,总共 2702),因为它们都不符合我们对“良好权限”的定义。 凭借我们对运算符和操作的了解,我们可以向此命令添加操作,以将新权限应用于我们的操场中的文件和目录:
[我@linuxbox ~]$ 找到游乐场 \( -type f -not -perm 0600 -exec chmod 0600 '{}' ';' \) -or \( -type d -not -perm 0700 -exec chmod 0700 '{}' ';' \)
[我@linuxbox ~]$ 找到游乐场 \( -type f -not -perm 0600 -exec chmod 0600 '{}' ';' \) -or \( -type d -not -perm 0700 -exec chmod 0700 '{}' ';' \)
在日常基础上,我们可能会发现发出两个命令更容易,一个用于目录,一个用于文件,而不是这个大型复合命令,但很高兴知道我们可以这样做道路。 这里的重点是了解如何将操作符和动作一起使用来执行有用的任务。