文本文档和目录之间的区别

文本文档和目录之间的区别

为什么 Linux 中没有文本文档的扩展名?

例如,当您看到某些内容时,/etc/issue您怎么知道这issue是一个文件(文本文档)还是一个目录?

有时这会让我感到困惑,因为我只是打开一个文件管理器并尝试导航,我不知道我应该寻找一个文件夹还是一个文件,也许是因为我对 Linux 环境不熟悉?有什么建议吗?

答案1

根据您查看文件的方式,可以通过图标、约定、小指示器轻松区分。

许多评论在某种程度上是正确的,但没有哪个足以解释这一点。

  • 在 Windows 上,您可以创建没有扩展名的文本文件。没有强制要求使用扩展名。
  • “为什么 Linux 中没有文本文档的扩展名?” 有。在我的系统上,有很多扩展名,.txt、.csv、.sh、.scala、.java、.sql、.dat、.svg、.xml、.html 等等。其中许多扩展名不仅表示它是可读的文本,还表示更多。它们都不是保证。
  • 您甚至可以将目录命名为“foo.txt”,猜猜看 - 在 Windows 上也是可以的。
  • “execute.txt.exe” 当然是一个陷阱,但问题在于,因为 Windows 引入了隐藏后缀(仅隐藏最后一个)的功能,并通过扩展名决定如何执行文件。类 Unix 系统具有权限,其中之一就是执行文件,然后系统将尝试执行它。但这也不能保证一定可以做到。

在 shell 中,你可以获得如下长输出格式:

-rw-rw-r--  1 stefan stefan    2184 Feb  5 04:27 ShortestPalindrome.java
-rw-rw-r--  1 stefan stefan     283 Dez 20 03:58 speedtests.lst
drwxr-xr-x  4 stefan stefan    4096 Nov 28  2012 src
-rw-rw-r--  1 stefan stefan    2609 Jan 16 23:01 Stringkuerzen-2018-01-16_23:01:27.java

ls -la第一个字符 'd' 告诉您,这是一个目录。

只需使用ls即可获得一个简短的列表。然后,默认设置的颜色会指示哪个文件是什么,尤其是目录。如果您不摆弄它,它应该可以正常工作。

Linux 有 'file' 命令,可以对某个文件的类型做出合理的猜测,大多数情况下这是正确的。但它也可能被欺骗。不像 Windows 扩展系统那么容易,但它确实可以。

但是,将您的 PNG 文件命名为 winter.png、将您的文本命名为 winter.txt 并将 shell 脚本命名为 winter.sh 仍然是一个好主意,因为它对用户很友好。

像 Thunar 这样的文件浏览器会通过图标视图中的图标、列表视图中的较小图标以及紧凑视图中的最小图标来指示文件的类型。通常,排序顺序是将目录放在第一位。

Midnight Commander 有自己的方法,用明亮的颜色指示目录。我猜大多数文件管理器都用这种方法。

但与其他文件不同,目录不能被模拟(除了符号链接,这是另一个话题)。目录类型深深固定在系统中——你不能

cd abc.txt 

如果 abc.txt 不是目录。是的,它可以是目录,但大多数情况下它不应该是目录。

经过一番努力,有人可以生成一个程序,它可以捕获错误,进入文件而不是目录,如果文件是一个档案,这可能会很有用,但在 shell 上我还没有看到这样的事情。

目录无法隐藏其本质。但对于 Windows 来说也是如此,不是吗?

结论:大多数时候,扩展很有用,但它们并不能保证什么。如果你有来自可靠来源的文件,你可以依赖它们,如果没有,命令file是一个很好的帮助,但也不能保证什么。

这是示例输出

file * 
funreturn.scala:                              ASCII text
hexcodes:                                     ASCII text, with very long lines
inkscapepfad.scala:                           FORTRAN program, UTF-8 Unicode text
iterfind.sh:                                  Bourne-Again shell script, ASCII text executable
leaderbord.aoc:                               ISO-8859 text
lib:                                          directory

猜测 inkscapepfad.scala 是 Fortran 代码,这是错误的,依赖扩展才是更好的选择,而且,这并不是故意愚弄file,只是偶然而已。

相关内容