第七单元 文件查找与文件特殊权限
7.1 指令与文件的搜寻
7.1.1 指令文件名的搜索
which
命令用来展示shell命令的完整路径,它接收一个或多个参数,执行时所有的参数会展示在shell提示并根据传入的参数将可执行命令的完整路径输出到 stdout
中。
# which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
示例:查找cd的完整命令路径
# which cd
7.1.2 文件的搜寻
whereis
命令用于查找文件,该指令会在特定目录中查找符合条件的文件,该指令只能用于查找
# whereis [-bmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
示例:查找cd命令的完整文件路径
# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
7.1.3 文件查找
find是实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找,其查找速度比较慢,但为精确查找。
语法:find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
选项:
查找起始路径:指定具体搜索目标起始路径,默认为当前目录;
查找条件:指定的查找标准,可以根据文件名,大小,类型,从属关系,权限等标准进行,默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做出操作,如删除,重命名等
查找分类:
按照文件名进行查找
-name pattern
-iname pattern:同-name,但是不区分大小写;
示例:
查找/etc目录下名称为rpc的文件
# find /etc -name rpc
按照文件属性进程查找
-user uname:查找属主为指定用户的文件;
-group gname:查找属组为指定组的文件;
-uid n:查找属主为指定UID的文件;
-gid n:查找属组为指定GID的文件;
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
示例:
查找文件属主为test的文件
# find ./* -user test
查找文件属组为test的文件
# find ./* -group test
根据文件类型查找
-type TYPE:
f:普通文件;
d:目录文件;
l:符号链接文件;
b:块设备文件;
c:字符设备文件;
p:管道文件;
s:套接字文件
示例:
查找文件属主是test并且文件类型是file的
# find ./* -user test -type f
根据文件大小查找
-size [+|-]#UNIT; 其中#表示数字,UNIT为单位
常用的单位为:k,M,G
范围举例:
3M:(2,3]
-3M:[0,2]
+3M:(3,oo) ;oo表示无穷大
示例:
查找etc目录下文件大小大于1M的文件
# find /etc -size +1M
根据时间戳查找
与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
备注:
mtime:修改(modify) -l
ctime: 改变(change) -lc
atime: 访问(access) -lu
-
+4代表大于等于5天前的文件名:ex> find /var -mtime +4
-
-4代表小于等于4天内的文件文件名:ex> find /var -mtime -4
-
4则是代表4-5那一天的文件文件名:ex> find /var -mtime 4
示例;
# find ./* -mtime +3
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
# find ./* -mtime +2 -exec ls -l {} \;
7.2 文件特殊权限-SUID&SGID
7.2.1 SUID
SUID:作用于二进制可执行程序上,当执行这个程序时会临时切换身份为文件所有者身份,比较典型的就是用户修改密码。
# chmod u+s FILE
# chmod u-s FILE
如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;
7.2.2 SGID
SGID:作用在二进制可执行程序上,继承此程序的所有组权限;
# chmod g+s FILE
# chmod g-s FILE
7.2.3 sticky
粘带位:作用在目录,该目录下的文件只能被其所有者和root删除,比较有代表性的是/tmp目录。
7.3 文件访问控制列表-setfacl命令
开启用户test访问控制
# setfacl -m u:test:rw- test1.txt
取消用户test访问控制
# setfacl -x u:test:rw- test1.txt
练习:
新建一个用户组nginx,属于root附加组,对/opt/test/目录下文件都有操作权限
7.4 常用小命令
7.4.1 w命令
Linux w命令用于显示目前登入系统的用户信息。
7.4.2 who命令
who命令是显示目前登录系统的用户信息。执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个X显示器。
7.4.3 whoami命令
Linux whoami命令用于显示自身用户名称。
7.4.4 last命令
Linux last 命令用于显示用户最近登录信息,显示/var/log/wtmp文件,显示用户登录历史及系统重启历史。
7.4.5 lastb命令
/var/log/wtmp文件,显示用户错误的登录尝试
7.4.6 lastlog命令