虚拟机里执行ls命令却不显示任何文件,多数情况下不是文件消失了,而是你查看的路径不对、权限不足,或者文件系统没有正确挂载。下面按步骤一步步排查,大部分问题五分钟内就能定位。
虚拟机ls命令不显示文件怎么办?先定位当前路径和目录状态
用pwd确认你当前站在哪个目录
很多用户以为自己在根目录 下,其实登录后默认停在自己的家目录 /root 或 /home/用户名,如果家目录本来就是空的,执行 ls 当然什么也看不到,先运行 pwd 看看当前路径,然后运行 ls -la 看看完整内容。
用ls -la代替ls,区分“隐藏”和“不存在”
ls 默认不显示以点开头的隐藏文件,虚拟机里很多配置文件都是隐藏的,.bashrc、.ssh 目录,执行 ls -la 后,如果只显示 和 两个条目,说明当前目录确实为空。ls 没有输出但 ls -la 有内容,只是因为你没加 -a 参数,跟系统故障无关。
检查目录是否可读:看权限位
ls 命令本身不报错,但就是列不出内容,可能是当前用户对该目录没有读取权限,执行 ls -ld /目标目录 查看目录的权限字符串,正常应该是 drwxr-xr-x 这类形式,如果第一段是 d--------- 或 drw-------,表示其他用户连读的资格都没有,此时可以对比执行 sudo ls -la /目标目录,如果能列出文件,就说明是权限问题。
权限问题排查:虚拟机ls命令权限不足怎么解决
先确认当前用户身份和所属组
执行 whoami 和 id,如果当前是普通用户 zhangsan,而目标目录的属主是 root 且权限为 700,那大概率无法读取,行业共识认为,Linux目录默认权限通常是
755,文件是 644,但虚拟机的共享目录或手工创建的目录可能没有遵循默认值,这就容易导致“文件明明在,却看不到”。
用sudo提权验证“是不是权限的锅”
执行 sudo ls -la /目标路径,如果能正常看到所有文件,说明普通用户权限不足,接下来执行:
stat -c '%A %U %G' /目标路径
查看属主和属组,解决办法按需选择:
- 临时查看:直接
sudo -i切换到root,ls - 永久放权:
chmod -R o+rx /目标路径(注意安全性,适合单人测试环境) - 加入属组:
usermod -aG 所属组 用户名,然后注销重新登录
别忽略ACL和SELinux的限制
传统权限正常,不代表SELinux不拦截,执行 getenforce 查看SELinux状态,如果是 Enforcing,可以临时执行 sudo setenforce 0 再测试一次,测试完记得 sudo setenforce 1 恢复,这种情况在云虚拟机中偶尔出现,本地虚拟机相对少见。
路径问题排查:虚拟机里ls命令看不到共享文件夹或挂载目录
这是VMware或VirtualBox用户的高频场景:明明在宿主机上设置了共享文件夹,虚拟机里 ls /mnt/hgfs 却显示为空。
先看挂载状态,再决定是否手动挂载
执行 mount 或 df -h 查看实际挂载情况,VMware默认共享目录挂载在 /mnt/hgfs 下,如果该目录存在但为空,很可能是挂载失败,尝试手动挂载:
- VMware Workstation:
sudo vmhgfs-fuse -o uid=$(id -u),gid=$(id -g) .host:/ /mnt/hgfs - VirtualBox:
sudo mount -t vboxsf 共享文件夹名 /media/共享挂载点
检查fstab写的是否正确
执行 cat /etc/fstab,看看有没有共享文件夹的自动挂载项,常见错误有三种:
- 挂载点目录实际不存在
- 挂载点目录被其他分区占用
- 启动顺序导致共享服务尚未就绪
建议把挂载点统一放在 /mnt 或 /media 下,且保证目录为空,挂载成功后,ls 才能看到内容。
文件系统类型不匹配也可能导致不出内容
如果挂载的是一个NTFS分区的数据盘,虚拟机的Linux发行版可能没装 ntfs-3g,导致 ls 显示空白,先执行 file -s /dev/sdb1 查看设备文件系统类型,然后安装对应的支持包,这类情况占比较低,但排查思路要留这一步。
特殊场景:虚拟机刚搭建完,ls命令不显示文件怎么弄
家目录真的为空,别慌
刚装完系统用root登录,执行 ls /home/新用户 发现什么都没有,这很可能是因为该用户还没登录过,家目录中的 .bash_profile、.bashrc 等文件尚未从 /etc/skel 模板复制过来,执行 ls -la /etc/skel 确认模板是否存在,如果模板有文件但家目录为空,可以用 useradd -m 用户名 重新生成家目录结构。
云虚拟机挂载数据盘后看不到内容
在云服务商购买虚拟机后,额外购买的数据盘通常需要自己分区、格式化、挂载,如果你直接执行 ls /dev/vdb1,看到的是设备节点,不是文件内容,正确做法是先 mkfs.ext4 /dev/vdb1(注意备份数据),mkdir -p /data,mount /dev/vdb1 /data,挂载后再 ls /data,才能看到磁盘上的文件。
不要在宿主机上直接“看到”虚拟机内部文件
如果你是在宿主机上执行 ls 想看虚拟机里的文件,当然看不到,虚拟机文件系统封装在镜像文件里,.vmdk 或 .qcow2
,如果想读取,需要挂载镜像,但在虚拟机运行中强行操作可能损坏镜像,日常管理更推荐通过SSH进入虚拟机后操作。
排查流程总结:按这个顺序执行,快速定位
pwd知道自己站在哪里ls -la看清所有条目,含隐藏文件whoami和id确认当前权限sudo ls -la /目标路径对比是否有权限差异df -h和mount确认目标路径是不是独立挂载点getenforce排除SELinux干扰
每一步都有明确的命令和可观测的结果,根据日常运维的经验,相当一部分案例是路径搞错了,权限问题占比也不低,其余少数情况是挂载或文件系统问题,但按这个顺序排查,几乎不会漏掉真正的病因。
Q&A:虚拟机ls命令不显示文件相关常见问题
为什么ls /dev/vdb1提示No such file or directory?
/dev/vdb1 是设备文件路径,不是挂载点,必须先将它挂载到一个普通目录:mkdir -p /data,mount /dev/vdb1 /data,之后执行 ls /data 才能看到文件内容。
虚拟机共享文件夹挂载后ls还是空的,怎么解决?
先确认共享名称是否拼写正确,VMware可用 vmware-hgfsclient 列出所有可用共享名,再检查挂载点目录是否存在且为空,最后用 sudo ls -la 重试一次,因为共享文件夹可能挂载到了root权限下,普通用户默认无访问权。
sudo ls能显示文件,普通用户ls不显示,如何永久解决?
需要修改该目录的权限或把用户加入对应组。sudo chmod -R o+rx /data,或者用 sudo usermod -aG vboxsf 用户名(VirtualBox场景)后注销重新登录,如果目录本身属于某个组,把用户加进那个组是最合理的方案。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/752425.html




