CentOS 和 Ubuntu 上的“常规文件”是什么?

sev*_*ine 2 linux file-type

我的环境是:

  • CentOS 6.9
  • Ubuntu 16.04 LTS

GNU coreutils 8.4 有 test 命令来检查文件 using-f选项。

man test 显示

  -f FILE
         FILE exists and is a regular file
Run Code Online (Sandbox Code Playgroud)

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

在终端上,我做了

$ touch afile
$ ln -fs afile LN-FILE
Run Code Online (Sandbox Code Playgroud)

然后,我执行了以下脚本(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
Run Code Online (Sandbox Code Playgroud)

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

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

另一方面,我发现以下, if -e 和 if -f 之间的区别

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

2012 年 4 月 18 日 7:10 回答

杰曼

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

nos*_*nos 5

请注意下面的文档 man test

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

基本上,当您执行-f LN-fileLN-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
Run Code Online (Sandbox Code Playgroud)