GeekHub

Linux Shell获取文件读写状态

下面做个测试:

首先创建一个不断写入被写入的文件,使用dd命令从/dev/random不断读取1个字节并写入testfile_writing,后台运行:

sudo dd if=/dev/random of=testfile_writing bs=1 &

然后创建一个空文件作为对比:

touch testfile_no_writing

查看对文件进行读写操作的方法有两个:

#方法1
lsof testfile_writing
#方法2
fuser -u testfile_writing

可以看到,通过上述两个方式,针对正在被读写的文件会输出进程PID及用户,而未被读写的数据无任何输出(见下图):

此外在上图中,可以看到使用fuser -k选项可一键杀死正在读写文件的进程(慎用)。

这里需要注意一点,lsof和fuser -u需要注意权限,如果是root权限执行的读写操作,lsof和fuser -u也必须有root权限才能获取正确的输出。

此外,在shell脚本中可以搭配echo $?判断结果,若echo $?上一条命令正常返回,则echo $?返回0,反之则返回非零(不一定是1,程序内部定义):

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注