Ubuntu的ls命令卡住

昨天让某人自行探索设置PATH环境变量,今天告诉我账号异常,具体表现是bitwise登录后sftp栏无法显示文件。做一些不懂原理的操作,接着出现自己无法解决的奇怪问题,这是linux新手常见的问题。我打心底里认为应该是环境变量导致,问题应该手到擒来。

于是用其账号密码登录系统,习惯性的敲了 ll
命令,没想到竟然卡住了!按 ctrl+c
kill掉命令,接着尝试 ls
,发现同样卡住。这个现象让我很吃惊,不仅仅是因为之前没碰到过,更因为其home目录下文件很少,不应该出现卡住的问题。

好消息是问题原因找到了: ls
命令有问题,所以sftp不能列出文件。但 ls
为什么会卡住呢?

type ls
查看 ls
的具体定义,输出: ls is aliased to
ls -hF –color=tty’ 。接着看
ls 的具体路径:
which ls ,结果为
/bin/ls`。两者都没毛病,怎么突然之间就不干活了?

尝试执行原生 ls
/bin/ls
,正常显示结果;加上 -l
选项: /bin/ls -l
,同样卡死了。根据别名 ls
ll
的具体形式,得出结论为: -F
选项导致命令卡死。 -F
用来显示文件的真实身份,所以 ls
卡死的原因应该是某个文件或文件夹损坏了。

因其一直用gnome桌面环境,之前也出现gnome下显示问题,通过重装软件包并重启解决。这次的现象应该也是某个进程出了问题,用root用户将其进程kill掉估计就可以了: ps aux | grep username | grep -v | awk '{print $2}' | xargs -n1 kill -9

再次用其账号密码登录,问题解决。

本次解决问题简单粗暴,想要找到出问题的文件建议用 strace
命令。 strace
跟踪系统调用,能很快定位到具体出问题的文件。