我正在尝试运行一个从虚拟机下载文件的脚本,但我无法指定传入的虚拟机。但是,我想确保下载成功,无论传入的虚拟机的状态如何,并且我知道它是unix/linux系统。
我的问题是 - 是否有一个特定的文件我可以用来下载,并且保证在所有 UNIX/Linux 系统上都存在?
谢谢!
答案1
几乎是唯一的一件事保证存在的是根目录本身。有一个很多的标准是几乎普遍坚持,但对于一个无聊的系统工程师来说,完全有可能推出一个 Linux 版本,其中/etc
居住在/andsoforth
,/bin
居住在/cupboard
,/usr
居住在/luser
,等等。在这样的系统中,一切皆有可能。
答案2
答案3
POSIXly,唯一承诺的事情(“应存在于符合标准的系统上”)是/
、/dev
、/tmp
、/dev/null
和,/dev/tty
但/dev/console
并非全部都是可写的(甚至是可读的)。
根据您用来复制文件的内容,所有这些要么实际上没有帮助,要么您可以尝试复制/dev/null
.scp
尝试复制它时似乎会出错,但是如果您使用仅读取数据并忽略特殊文件的东西,例如cp /dev/null .
,您最终会得到一个成功复制的零长度常规文件。
但是,如果您尝试使用复制设备节点的内容来复制它,那么您可能无法在没有权限的情况下在本地系统上创建它,而且我认为不能保证设备编号在系统之间是相同的,所以如果可以复制它,结果可能是一个设备节点,在本地系统上意味着完全不同的东西。
标准实用程序应该位于 中PATH
,因此如果您可以在远程解析它,您应该能够在某些列出的目录中找到 例如sh
或ls
(尽管它们可能是符号链接)。在符合标准的系统上,您还应该能够找到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 的任何地方。