mv 命令在 linux CENT/REDHAT OS 上无法正常工作

mv command not working as intended on linux CENT/REDHAT OS

这是关于我最近遇到的问题。突然 post 执行 mv 命令 Linux 框在各个方面都没有响应,下面是对所发生问题的总体描述。

1) 在目标中使用 /* 执行的移动命令

# mv -f *.txt /*

2) 命令已成功移动所需的内容但未移动到 / 已将其移动到 /var

3) 除了所需的内容,它还将 / 文件夹的内容递归地移动到 /var 位置。

4) 这导致正常 OS 操作所需的所有二进制文件和文件夹的移动

5) 此移动限制通过SSH/console登录。

6) post 从 /var 位置系统恢复文件夹功能正常。

我尝试在测试 Linux Box 上复制这个问题,它被复制如下,

[root@TestVM001 ~]# ls -lrt
total 84
-rw-r--r-- 1 root root  4224 Feb  5 17:28 install.log.syslog
-rw-r--r-- 1 root root 38536 Feb  5 17:35 install.log
-rw------- 1 root root   955 Feb  5 17:35 anaconda-ks.cfg
drwxr-xr-x 2 root root  4096 Feb  5 20:03 Desktop
-rw-r--r-- 1 root root   119 Feb  5 20:28 ifcfg-eth0
-rw-r--r-- 1 root root   119 Feb  6 15:17 ifcfg-eth1
-rw-r--r-- 1 root root    44 Mar  1 05:08 student.txt
drwxr-xr-x 3 root root  4096 Mar 14 17:59 admin

[root@TestVM001 ~]# mv -vf * /*
`admin' -> `/var/admin'
`anaconda-ks.cfg' -> `/var/anaconda-ks.cfg'
`Desktop' -> `/var/Desktop'
`ifcfg-eth0' -> `/var/ifcfg-eth0'
`ifcfg-eth1' -> `/var/ifcfg-eth1'
`install.log' -> `/var/install.log'
`install.log.syslog' -> `/var/install.log.syslog'
`student.txt' -> `/var/student.txt'
`/bin' -> `/var/bin'
mv: cannot move `/boot' to `/var/boot': Device or resource busy
mv: cannot move `/dev' to `/var/dev': Device or resource busy
`/etc' -> `/var/etc'
`/home' -> `/var/home'
mv: cannot move `/lib' to a subdirectory of itself, `/var/lib'
`/lost+found' -> `/var/lost+found'
`/media' -> `/var/media'
`/mnt' -> `/var/mnt'
`/opt' -> `/var/opt'
mv: cannot move `/proc' to `/var/proc': Device or resource busy
`/root' -> `/var/root'
`/sbin' -> `/var/sbin'
`/selinux' -> `/var/selinux'
`/srv' -> `/var/srv'
mv: cannot move `/sys' to `/var/sys': Device or resource busy
`/tmp' -> `/var/tmp'
`/usr' -> `/var/usr'

[root@TestVM001 ~]# ls
-bash: /bin/ls: No such file or directory

[root@TestVM001 ~]# ls -lrt
-bash: /bin/ls: No such file or directory

[root@TestVM001 ~]# cd /
.autofsck     boot/         lib/          sys/
.autorelabel  dev/          proc/         var/

[root@TestVM001 ~]# cd /var/
account/            games/              lost+found/         selinux/
admin/              gdm/                mail/               spool/
anaconda-ks.cfg     home/               media/              srv/
bin/                ifcfg-eth0          mnt/                student.txt
cache/              ifcfg-eth1          nis/                tmp/
crash/              install.log         opt/                tux/
cvs/                install.log.syslog  preserve/           usr/
db/                 lib/                racoon/             www/
Desktop/            local/              root/               yp/
empty/              lock/               run/
etc/                log/                sbin/

关于这个场景的问题是, 1) 为什么 mv 命令导致这样的行为?

2) 此行为是已知错误或风险吗?

3) 是否有任何已知的方法来限制这一点,类似于别名概念的使用?

当您执行 echo mv -f *.txt /* 时,您会看到最后一个 * 已扩展到 /var。所以你实际上要求将 / 中的所有文件移动到 /var。

您问题的答案:
1) 为什么 mv 命令导致这样的行为?
mv 试图完全按照你的要求去做
2) 此行为是否为已知错误或风险?
这不是错误。 Unix/Linux 没有提示 "are you sure" 但相信你。
3) 是否有任何已知的方法来限制这一点,类似于别名概念的使用?
您应该以普通用户而不是 root 身份执行所有正常工作。重要文件的权限是这样的,他们不允许普通用户做一些有害的事情。
当您必须 以 root 身份执行某些操作时,请务必小心! 尝试将 txt 文件移动到根目录是可疑的:根分区很小,应该保留系统文件。 .txt 文件来自 Windows?