有些命令只是挂起

有些命令只是挂起

我有一个 Linux 盒子,可以使用 ssh 登录。我的 shell 是/bin/bash,我最终看到了 bash shell 提示符。

我可以执行 bash 内置命令,例如echo.我可以从(前缀路径)执行一些命令,/bin例如ls /bin

其他命令(如)whoami似乎挂起。我按下 CTRL-C 并返回到 bash 提示符。

其他命令完全挂起,CTRL-C 不会退出命令,我也不会返回到 bash 提示符。ls /usr/bin是挂起 shell 的命令的示例。

这是路径...因为我知道有人会问这个...

$ echo $PATH  
/u01/jdk/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/u01/app/oracle/tools/home/oracle/bin

什么会导致这样的情况呢?我可以做什么来解决这个问题?

答案1

derobert 已经dmesg在评论中提到了。尝试使用绝对路径运行它,如下所示:

/bin/dmesg | /bin/more

查看是否有任何看起来像磁盘错误的内容:可能是您列出的目录之一PATH位于出现故障的磁盘上。如果磁盘发生故障导致其卡住,则永远重试失败的读取操作,这可能会导致 shell 在搜索要执行的命令时挂起。

您也可以尝试最小化PATH: 最初刚刚设置

PATH=/bin:/sbin

如果您现在可以在不挂起且不使用绝对路径的情况下运行命令,请也添加/usr/bin回来/usr/sbin

PATH=/bin:/usr/bin:/usr/sbin:/sbin

现在您应该可以使用所有标准命令,而无需使用绝对路径。如果挂起现象不再出现,您现在可以开始检查剩余的目录。

作为快速检查,您可以使用该ls命令,但在后台运行它,这样如果命令挂起,就不会导致当前会话变得不可用。例如:

ls /u01/jdk/bin &

如果您看到ls命令输出,只需按一次 Enter 键即可再次看到提示。 (您可能还会看到来自 shell 的消息,指示后台命令刚刚完成。)

如果 的输出ls不会出现或明显不完整,请dmesg再次检查该命令的输出:您可能会发现内核现在正在将磁盘 I/O 错误喷洒到输出的末尾。这些错误消息可用于识别发生故障的磁盘设备,但通过准确了解命令在哪个路径ls失败,您可能已经对此有了相当好的了解。

相关内容