所有 UNIX 系统上都存在的文件是什么?

所有 UNIX 系统上都存在的文件是什么?

我正在尝试运行一个从虚拟机下载文件的脚本,但我无法指定传入的虚拟机。但是,我想确保下载成功,无论传入的虚拟机的状态如何,并且我知道它是unix/linux系统。

我的问题是 - 是否有一个特定的文件我可以用来下载,并且保证在所有 UNIX/Linux 系统上都存在?

谢谢!

答案1

几乎是唯一的一件事保证存在的是根目录本身。有一个很多的标准是几乎普遍坚持,但对于一个无聊的系统工程师来说,完全有可能推出一个 Linux 版本,其中/etc居住在/andsoforth/bin居住在/cupboard/usr居住在/luser,等等。在这样的系统中,一切皆有可能。

答案2

/etc/passwd常用的是安全专业人士作为概念证明/标志捕获练习,并且有充分的理由 - 该文件存在于每个类 UNIX 系统上。

然而,值得注意的是,这并不意味着passwd将成为主要访问数据库,因为其他数据库例如 LDAP 也发挥了作用。

答案3

POSIXly,唯一承诺的事情(“应存在于符合标准的系统上”)是//dev/tmp/dev/null和,/dev/tty/dev/console并非全部都是可写的(甚至是可读的)。

根据您用来复制文件的内容,所有这些要么实际上没有帮助,要么您可以尝试复制/dev/null.scp尝试复制它时似乎会出错,但是如果您使用仅读取数据并忽略特殊文件的东西,例如cp /dev/null .,您最终会得到一个成功复制的零长度常规文件。

但是,如果您尝试使用复制设备节点的内容来复制它,那么您可能无法在没有权限的情况下在本地系统上创建它,而且我认为不能保证设备编号在系统之间是相同的,所以如果可以复制它,结果可能是一个设备节点,在本地系统上意味着完全不同的东西。

标准实用程序应该位于 中PATH,因此如果您可以在远程解析它,您应该能够在某些列出的目录中找到 例如shls(尽管它们可能是符号链接)。在符合标准的系统上,您还应该能够找到cd,但 Linux 往往没有它,因为它作为外部实用程序几乎没有用处。

在实践中,您可能会在许多系统中找到/bin/ls/bin/sh(尽管它们仍然可能是符号链接)。也许不是最深奥的,但你可能知道你是否正在处理这些。

答案4

根据我的经验:

  • /dev/stdout,虽然有时这是一个符号链接,所以/dev/null可能会更好,尽管这两个都不是普通文件
  • /etc/hosts对于任何联网的 UNIX 系统来说可能都/etc/resolv.conf必须存在
  • /bin/sh并且/bin/init很可能存在,但我可以想象一些嵌入式 Linux 系统或 Linux 驱动的设备和 NAS 盒可能会将其中之一放在不同的位置,或者是符号链接(例如 to /bin/busybox)而不是文件;虽然/etc/inittab可能更有可能存在并且是一个普通文件
  • /etc/issue并且/etc/profile似乎存在于任何人都可以登录 shell 的任何地方。

相关内容