shell脚本-05运算符(文件测试运算符)

shell 脚本-运算符(文件测试运算符)

文件测试符

操作符说明
-r检测文件是否可读, 可读返回 true
-w检测文件是否可写, 可写返回 true
-x检测文件是否可执行, 可执行返回 true
-s检测文件是否为空, 为空返回 false
-d检测文件是否为目录, 为目录返回 true
-e检测文件是否存在, 存在返回 true
-b检测文件是否是块设备文件,如果是,则返回 true。
-c检测文件是否是字符设备文件,如果是,则返回 true。
-f检测文件是否是普通文件(既不是目录,也不是设备文件),如果是则返回 true。
-g检测文件是否设置了 SGID 位,如果是,则返回 true。
-u检测文件是否设置了 SUID 位,如果是,则返回 true。
-k检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p检测文件是否是有名管道,如果是,则返回 true。

demo

file="/xxx/xxx/test.sh"

if [ -r $file ]
then
    echo "文件可读"
else
    echo "文件不可读"
fi

if [ -w $file ]
then
    echo "文件可写"
else
    echo "文件不可写"
fi

if [ -x $file ]
then
    echo "文件可执行"
else
    echo "文件不可执行"
fi

if [ -s $file ]
then
    echo "文件不为空"
else
    echo "文件为空"
fi

if [ -d $file ]
then
    echo "文件为目录"
else
    echo "文件不是目录"
fi

if [ -e $file ]
then
    echo "文件存在"
else
    echo "文件不存在"
fi

设备文件

简单来说就是负责处理硬件设备相关工作的文件, 设备文件本身可以获取特定的设备资源, 可以为其他设备提供简单的接口.
字符设备文件块设备文件区别在于, 操作系统和硬件设备如何向他们读写数据.
字符设备是指每次与系统传输 1 个字符的设备;
块设备是指与系统间用块的方式移动数据的设备. 系统向其写入数据是通常把数据存入一块缓冲区,在缓冲区存满是, 再把整块数据传入.

参考 维基百科 以及 Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统

命名管道

命名管道是计算机进程间的一种先进先出通信机制。是类 Unix 系统传统管道的扩展。传统管道属于匿名管道,其生存期不超过创建管道的进程的生存期。但命名管道的生存期可以与操作系统运行期一样长。
与传统的无名的 shell 管道不同,命名管道利用了文件系统。使用 mkfifo()[1]或 mknod()[2]创建命名管道。两个进程可以通过管道的名字打开、读写管道。

参考 维基百科

SGID 和 SUID

了解 SGID 和 SUID 前需要了解一下 unix 权限的表示方式

unix 系统十位文件权限表示方法

UNIX 下可以用 ls -l 命令来看到文件的权限。用 ls 命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位, 从左到右 1~10 位分别代表:

第一位

表示文件类型

可能值说明
-表示普通文件
d表示目录文件
p表示管道文件
l表示连接文件
s表示 socket 文件
c表示字符设备文件
b表示块设备文件

第 2~4 位

表示文件的读写权限, 如果没有相应条件,则为 -

例如: rwx 表示具有读写和执行权限, rw- 表示具有读写权限, 但是没有执行权限

第 5~7 位

与 2~4 位类似,2~4 表示的权限指的是所有者的权限, 而 5~7 表示对应群组对该文件的权限

第 8~10 位

与前两个类似,8~10 表示其他群组对该文件的权限

SGID 和 SUID

SGIDSUID 分别是 set group idset use id

当权限的第 4 位为 s 时, 我们称这个文件设置了 SUID
当权限的第 7 位为 s 时, 我们称这个文件设置了 SGID

SGIDSUID 都是针对执行文件的, 对非执行文件没有意义

SGIDSUID 的作用

可以使用户在执行该文件使临时获得所有者权限, 简单来说就是可以让本来没有权限的用户执行该文件
SUID 的权重要大于 SGID

Sticky Bit

黏着位 又称 黏滞位. 设置 Sticky Bit 的文件或目录, 只有文件所有者或 root 用户才能删除或移动该文件, 用来防止文件被普通用户删除或移动其他用户的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eno_zeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值