【问题标题】:What is "the regular file" on CentOS and Ubuntu?CentOS 和 Ubuntu 上的“常规文件”是什么?
【发布时间】:2018-03-20 09:08:02
【问题描述】:

我的环境是:

  • CentOS 6.9
  • Ubuntu 16.04 LTS

GNU coreutils 8.4 具有使用-f 选项检查文件的测试命令。

man test 显示

  -f FILE
         FILE exists and is a regular file

“常规文件”的定义对我来说是模棱两可的。

在终端上,我做到了

$ touch afile
$ ln -fs afile LN-FILE

然后,我执行了以下脚本 (check_file_exist_180320_exec)

#!/usr/bin/env bash
if [ -e LN-file ]
then
    echo "file exists [-e]"
fi

if [ -f LN-file ]
then
    echo "file exists [-f]"
fi

对于 CentOS 和 Ubuntu,对于符号链接文件 (LN-FILE) 都显示 -e 和 -f。

但是,ls -l 返回 LN-FILE 文件的 l:symbolik link(不是 -:regular file)标识符。 (见https://linuxconfig.org/identifying-file-types-in-linux

另一方面,我发现以下内容, Difference between if -e and if -f

常规文件不是目录/符号链接/套接字/设备等。

于 2012 年 4 月 18 日 7:10 回答

jman

我应该检查“常规文件”(对于 CentOS 和 Ubuntu)的参考是什么?

【问题讨论】:

    标签: linux file-type


    【解决方案1】:

    请注意man test 中的文档

    除了 -h 和 -L,所有与 FILE 相关的测试都取消引用符号 链接。

    基本上当您执行 -f LN-file 并且 LN-file 是符号链接时,-f 测试将跟随该符号链接,并为您提供符号链接指向的结果。

    如果您想检查文件是符号链接还是常规文件,您需要执行例如

    if [ -h LN-file ]
    then
        echo "file is a symlink [-h]"
    elif [ -f LN-file ]
    then
        echo "file is a regular file [-f]"
    fi
    

    【讨论】:

    • 我明白了。 “-f”选项检查链接文件,而不是符号链接,我们应该小心使用它作为你的脚本(在-h检查之后)。
    • 几乎每次文件交互都会导致符号链接被取消引用。通常会执行[ -f ] 测试,因为其他程序将与该文件进行交互-其他程序将看到符号链接指向的内容,而不是符号链接。所以在大多数情况下[ -f ] 会做你想做的事,如果文件是符号链接,你需要注意特殊情况。
    • 说实话,我没有想出应该区分常规文件(非符号链接)和符号链接的情况。所以,正如你所说,在大多数情况下,[ -f ] 可以做我想做的事。
    【解决方案2】:

    常规文件是既不是二进制文件也不是符号链接的文件。 它用于与纯文本文件相关联。

    【讨论】:

    • stat video.mkv 表明这是普通文件。
    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 2011-10-20
    • 2017-01-13
    • 2011-10-06
    • 2011-02-09
    • 2016-06-23
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多