linux - 文件显示在 ls 中,但不能 rm 或 mv,似乎由某些未知进程持有

标签 linux

我在运行 CentOS 7 的 SGE 集群上做了很多工作,最近遇到了作业随机终止的问题,但似乎有些进程仍在运行,导致我无法清理并重新开始。当我尝试删除必要的文件时,我收到“没有这样的文件或目录”消息,但该文件显示在 ls 中。论坛搜索告诉我这可能是因为名称中包含非打印字符,但我无法使用 touch 创建具有相同名称的文件,也无法使用 rm -i 删除它。例如:

[ark19@blade04 testing]$ rm file_bad.csv 
rm: cannot remove ‘file_bad.csv’: No such file or directory
[ark19@blade04 testing]$ rm -f file_bad.csv 
[ark19@blade04 testing]$ ls file*
file1.csv  file2.csv  file_bad.csv
[ark19@blade04 testing]$ touch file_bad.csv 
touch: cannot touch ‘file_bad.csv’: No such file or directory
[ark19@blade04 testing]$ rm -i -- file_bad.csv 
rm: cannot remove ‘file_bad.csv’: No such file or directory
[ark19@blade04 testing]$ ls file*
file1.csv  file2.csv  file_bad.csv
因此,我相当确定问题是坏文件被某个进程持有,当我向集群管理员提出这个问题时,他们提出的唯一解决方案就是为他们提供文件名,以便他们可以删除它。这种情况发生得太频繁,无法成为一个可持续的解决方案,所以我想在这里问我是否可以采取其他措施来自己解决该问题,例如以某种方式强制删除文件并关闭所有妨碍的进程?

大多数时候,我不知道可疑进程正在哪个集群节点上运行,也不知道如何以某种方式检查所有节点以查找并终止适当的进程……如果我从登录的节点运行 lsof 命令,它永远不会显示任何内容。

非常感谢任何建议,谢谢!

最佳答案

尝试:

lsof /absolute/path/to/file_bad.csv

如果上述命令产生任何输出,您将找到保持该文件使用的 PID 责任。

您还可以尝试使用以下命令来删除该文件。

find /path/to/file -type f -name 'file_bad.csv' -exec rm -f {} \;

关于linux - 文件显示在 ls 中,但不能 rm 或 mv,似乎由某些未知进程持有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48024894/

相关文章:

PHP 文件包含的脚本不能在 LINUX 机器上完全运行

sql - 使用 Oracle SQL Developer 作为我的客户端时如何为 SQL Server 调用 sp_help [table]

c - syslog.conf 配置仅登录到自定义日志文件,

c++ - QPrinter 分辨率在 Linux 中是错误的

linux - 同一个文件的两个文件描述符

linux - 如何使用 ANT 任务在 Linux 中运行 LDAP 删除条目工具

linux - 如何移动目录中具有特定前缀的所有文件?

python - 在 Python 中从 Linux 上的子目录中查找顶级目录

python - 从主脚本独立运行外部 python 脚本

linux - 将带有文件列表的 shell 脚本转换为 ant build.xml