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

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

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

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

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

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

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

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