嗨,我有许多文件已被删除,但由于某种原因,与已删除文件相关的磁盘空间无法使用,直到我明确终止占用磁盘空间的文件的进程
$ lsof /tmp/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted)
Run Code Online (Sandbox Code Playgroud)
上面删除的文件占用的磁盘空间会导致问题,例如在尝试使用 Tab 键自动完成文件路径时出现错误 bash: cannot create temp file for here-document: No space left on device
但是在我运行kill -9 1623
该 PID 的空间后,我不再收到错误消息。
我的问题是:
请让我知道我使用过的任何不正确的术语或与这种情况相关的任何其他相关信息。
我在 *nix 系统上有一个 Perl 脚本,它曾经处理 50,000 多行文本。这需要一些时间。我试图找到一种资源友好的方式,让用户知道程序在处理所有这些文本时没有挂起。
目前,我正在处理文本时实时打印输出。我正在刷新输出缓冲区,然后在一行上打印输出\r
。这似乎是对资源的不必要使用,因为它几乎是我不打印任何内容时的两倍,但正如我所说,当不打印任何内容时,程序看起来像是挂了。
所以我的问题是:在执行长时间运行的任务时,是否有一种标准或简单的方法可以让用户知道程序确实在运行?
我正在使用tail -f
跟踪日志文件的增长。我无法找到一种方法来检测正在写入日志文件的进程(当它崩溃或以其他方式终止时)是否不再访问或写入文件。
这是我正在使用的脚本
tail -f log_file | while read LOGLINE
do
echo -e "${LOGLINE}"
if [[ "${LOGLINE}" == *ERROR* ]] ; then
echo -e "ERROR FOUND : ${LOGLINE}\n"
# handle the error here
fi
done
Run Code Online (Sandbox Code Playgroud)
检测写入日志文件的进程已停止(或 tail -f 不再接收输入)并向屏幕回显消息以提醒我该事件的最简单和最有效的方法是什么?
我在find
使用正则表达式标志时遇到了很多麻烦。我egrep
自己使用在文件中查找日期模式,如下所示:
egrep '[0-9]{4}-[0-9]{2}-[0-9]{2}'
Run Code Online (Sandbox Code Playgroud)
这将返回格式为 CCYY-MM-DD 的日期就好了。我正在尝试将这种相同的模式与find
. 我试过了:
find . -regextype egrep -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"
find . -type f -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"
Run Code Online (Sandbox Code Playgroud)
试图反斜杠大括号......
find . -type f -regextype egrep -regex "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"
Run Code Online (Sandbox Code Playgroud)
所有这些似乎都没有返回任何东西。我没有收到错误消息,没有输出......我什至试图将输出重定向到一个文件,但没有......
很难找到使用find
正则表达式的好资源。如果有人可以提供帮助,我将不胜感激。我不反对任何类型的正则表达式find
支持,尽管我喜欢egrep
因为-o
标志只返回匹配项,而不是整行。但实际上,我只需要find
在目录中查找文件名中与上述模式匹配的所有文件。