第一章文件权限
-
针对用户来分,文件权限可分为三类
(1)文件属主,创建该文件的用户
(2)同组用户,拥有该文件的用户组中的任何用户
(3)其他用户,既不属于拥有该文件的用户组的某一用户
-
输入ls –l时有出现哪些信息?
-
total 16指该目录中所有文件所占的空间
-
drwxrwxr-x中,分成四部分分析
d表示work是一个目录
rwx指文件属主权限是可读写执行
rwx指同组用户权限也是可读写执行
r-x指其他用户权限是可读执行
-
work目录权限位后面的2指该文件硬链接的数目
-
第一个isaac.ouyang指文件的属主
-
第二个isaac.ouyang指文件属主所在的缺省(默认)组(一个用户可以有很多个组)
-
4096文件长度,单位字节(Byte)
-
May 20 14:05文件的更新时间
-
Work文件名
-
文件类型有哪些?
-
d 目录(如2中的work文件)
-
l 符号链接
-
s 套接字文件
-
b 块设备文件
-
c 字符设备文件
-
p命名管道文件
-
– 普通文件(不属于上述类型的文件都叫普通文件)
-
当文件权限为rw-rw----时,代表什么含义?(未验证)
请注意,这不是属主和同组用户可读写不可执行,其他用户不可读写执行的意思,它是文件属主同组用户其他用户都可读写的意思,因为所有用户都可以写,所以慎用这种权限。
-
chmod的两种模式使用方法
-
符号模式
chmod [who]operator[permission] filename
who的含义:
u 文件属主(user)
g 同组用户(group)
o 其他用户(other)
a 所有用户(all)
operator含义:
+ 增加权限
-
取消权限
= 设定权限
Permission含义:
r 读权限
w 写权限
x 执行权限
s 文件属主和组set-ID
t 粘性位*
l 给文件加锁,使其他用户无法访问
用法举例:
chmod a–x myfile 所有用户取消执行权限
chmod go+w myfile 组内用户和其他用户增加写权限
-
绝对模式
用法举例:
chmod 777 myfile 全部可读可写可执行
chmod 664 myfile 属主同组用户可读写,其他用户可读
chmod 664 * 一次设置目录下所有文件权限
chmod –R 664 /usr/temp 改变/usr/temp目录下全部文件权限(小心使用)
-
suid和guid权限
-
什么是suid和guid权限
当一个脚本文件设置了suid权限后,其他用户执行这个脚本时也会具有其属主的相应权限。同理guid是其他用户会具有该文件所属用户组中用户的权限。要实现suid和guid权限该用户必须要先设置执行权限(这很好理解,没执行权限还怎么执行脚本文件呢)
在/bin目录下查看设置了suid的命令
$ ls –l | grep ‘^…s’
在/bin目录下查看设置了guid的命令
$ ls –l | grep ‘^…s..s’
-
什么情况下使用suid和guid权限
当多个用户管理一个数据库系统时,普通用户需要对数据库进行一些操作,但他们
没有操作权限,这时管理员可以写一个具有suid和guid权限脚本,只要普通用户执行该脚本就能获得属主用户权限,实现相应的操作,脚本运行结束后恢复普通用户的权限
-
如何设置suid和guid权限
使用chmod绝对模式的话,在数字前加上4或6
chmod 4755 filename rws r-x r-x
chmod 6711 filename rws –s –s
使用符号模式的话
chmod u+s filename
-
chown和chgrp介绍
-
chown命令可以改变文件属主,一旦改变后就没法重新收回他的所有权,除非你是管理员或者新的属主。
-
一般用法
chown –R –h owner file
-R意味着对子目录下的文件都进行同样操作,-h意味着改变链接文件的属主时不影响链接所指向的目标文件
-
chown例子
-
chgrp例子
-
如何找出当前用户所属用户组?
9、使用umask设置新创建的目录和文件的缺省权限
-
umask值的对应关系如下表
-
查看umask值
$ umask
$ 0002
-
设置umask值
$ umask nnn
10、使用软链接(相当于快捷方式)
-
命令格式
Ln [-s] source_path target_path
-s的作用是:
-s, --symbolic make symbolic links instead of hard links
-
创建的软链接权限是777,但依然以源文件的权限为准,如下图所示,qqq_link依然不能写
第二章使用find和xargs
-
find的一般形式
find pathname –options [-print –exec -ok]
-
通过文件名查找,使用-name选项
find ~ -name “*.txt” -print //在自己的根目录中查找所有后缀为txt的文件
find . -name “[A-Z*]” -print //在当前目录查找首字母为大写的文件
find /etc -name “host*” -print //在/etc目录下查找开头为host的文件
find / -name “*” -print //在根目录查找所有文件,no zuo no die
find . -name “[A-Z][A-Z][0-9][0-9].txt” //ac84.txt会被找到
-
通过文件权限查找,使用-perm选项
find . -perm 777 //在当前目录下查找权限为777的文件
-
忽略某个目录查找文件,使用-prune
忽略asf这个目录,在当前目录下查找所有文件
-
通过属主查找文件,用user(还有nouser)
find ~ -user dave –print //在根目录下查找属主为dave的文件
find ~ -nouser -print //在根目录下查找属主账号已经被删除的文件
-
通过所属用户组查找文件,group和nogroup
用法同理5
-
通过更改时间查找文件,用-mtime
如果系统突然没有可用空间了,可以用这种方法查找到底是哪一个文件在短时间内增长迅速
find ~ -mtime -5 -print //在根目录下查找更改时间在5天内的文件
find ~ -mtime +3 -print //在根目录下查找更改时间在3天前的文件
-
通过对比文件之间更改时间查找文件
find . –newer 444 -print //在当前目录下查找更改时间比444早的文件
find . ! –newer 444 -print //比444晚的文件,只需加一个逻辑非符号
-
通过文件类型查找文件
find . -type d -print //在当前目录查找类型为d的文件
-
按文件大小查找(加c单位为字节,不加单位为块,1块等于512字节)
find . –size +100c -print //在当前目录下查找大于100字节的文件
find . –size 100c -print //在当前目录下查找恰好是100字节的文件
find . –size -100 -print //在当前目录下查找小于是100块的文件
-
如果想先匹配操作目录的文件,再在其子目录下查找,可以用-depth
find . -name “abc.txt” -depth -print //先在当前目录下查找,再在其子目录找
在实际使用时出现以下警告:
-
在当前文件系统中查找文件(不进入其他文件系统),使用-mount
find . –name “*.txt” -mount –print //在当前目录下查找本文件系统结尾为.txt的文件
-
使用-cpio向磁带设备备份文件或恢复文件(未接触过)
备份/etc /home /apps目录中的文件
-
使用exec或ok来对查找到的文件执行shell命令
exec的用法为后面跟着要执行的命令,然后是一对{},一个空格和一个\,最后是一个分号。
find . –type d –exec ls –l {} \; //用ls-l列出匹配到的文件
find . –name “*.txt” –mtime +5 –ok rm {} \; //删除名字后是.txt,修改时间五天以上的文件
-
xargs于exec的区别
当使用find和exec时,find会将所有匹配到的文件像参数一样传递给exec执行,有些系统会对传递给exec的命令长度有限制,会出现错误信息,有些系统中使用exec会为处理每一个匹配到的文件发起一个相应的进程,当文件太多时会导致进程过多,系统性能下降,xargs命令则始终只有一个进程,能很好解决上述问题。