我在 /tmp 目录和集群命令上的坚持位中遇到了奇怪的行为。尝试了两种情况:
情况1:使用Ubuntu用户创建文件,root无权访问创建的文件。
ubuntu@:~$ touch -a /tmp/ubuntu_user_created.lck
ubuntu@:~$ flock -n /tmp/ubuntu_user_created.lck -c "echo 123"
123
ubuntu@:~$ sudo flock -n /tmp/ubuntu_user_created.lck -c "echo 123"
flock: cannot open lock file /tmp/ubuntu_user_created.lck: Permission denied
情况2:使用root用户创建文件,root和Ubuntu用户都可以访问创建的文件。
ubuntu@:~$ sudo touch -a /tmp/root_user_created.lck
ubuntu@:~$ flock -n /tmp/root_user_created.lck -c "echo 123"
123
ubuntu@:~$ sudo flock -n /tmp/root_user_created.lck -c "echo 123"
123
两个文件的权限:
ls -la /tmp/
total 52
drwxrwxrwt 12 root root 4096 Oct 6 08:08 .
drwxr-xr-x 19 root root 4096 Oct 6 03:42 ..
-rw-r--r-- 1 root root 0 Oct 6 07:56 root_user_created.lck
-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 6 07:54 ubuntu_user_created.lck
我不明白为什么Ubuntu用户可以flock -n /tmp/root_user_created.lck
成功运行该命令,既然文件root_user_created.lck
是root拥有的,那么flock命令是否只想以读取模式打开这个文件?
如果flock命令只需要读访问权限,那么为什么flock -n /tmp/ubuntu_user_created.lck
以root权限运行该命令会返回权限被拒绝呢?