如果我在 期间收到此消息,这意味着什么scp
?
scp: /dev/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/3/fd/5/31/rd/c6d16: No such device or address
我正在做的是
scp -r [email protected]:/* .
答案1
在远程端执行递归的进程以超级用户身份运行,并且已递归到/dev/fd
.它的几个打开的文件描述符用于作为递归的一部分正在读取的目录。由于它们在遍历时看起来像子目录,/dev/fd
因此会再次递归它们。
甚至可以确定哪些打开的文件描述符对哪些目录打开:
- 文件描述符 #3 开放给
/
- 文件描述符 #5 开放给
/dev/fd
- 文件描述符 #31 开放给
/dev
它已经通过漫长而迂回的路线到达了尝试打开和复制/dev/rd/c6d16
与物理设备不对应的点。
始终要小心命令,尤其是那些以超级用户权限运行的命令,这些命令最终会尝试天真地打开和复制、 、/dev
、/device
等中的所有文件。自从充斥着磁带设备(有时具有自动倒带/自动重新张紧功能)和终端设备的时代以来,这种做法一直是不明智的,这些设备会阻止公开呼叫,直到检测到运营商为止。 /proc
/sys
/dev
确保如果您真的想要复制/dev
,最有可能的是你不鉴于现代操作系统上其内容是在运行时动态确定的,您可以使用一个命令来复制特殊设备文件、FIFO、套接字和符号链接本身,而不是天真地尝试打开和读取它们,就好像它们是常规文件一样。 (或者,open()
然后fstat()
确定它们是否是特殊设备,这将在设备文件上失败,从而在 . 上产生错误open()
。)