权限管理
1. Owner, Group, Others
root ( 管理员 ) 是万能的天神, 拥有对档案的权限 .
2. /etc/passwd , /etc/shadow , /etc/group ( 存储 个人信息 , 密码 , 组信息 )
3. ls 查看档案 权限内容
档案的权限 :
第一个字符 : d 表示目录
- 表示档案
l 表示连接档
b 借口设备 ( 例如 /dev/sda )
c 串行接口 ( 鼠标 键盘 例如 /dev/mouse0 )
连接数 : 每个档案都会将他的权限与属性记录到文件系统的 inode 中 , 因此每个档名都会连接到一个inode中, 这个属性就是记录有多少个不同档名连接到一个inode.
档名跟目录有关。
( 档案的权限等属性和档案的内容是分开存储的 )
Inode是linux/unix操作系统中的一种数据结构,包含了各文件相关的一些重要信息.在创建文件系统时,就会同时创建大量的inode,一般inode表会占用文件系统磁盘空间的1%.
与Inode相关的还有一个概念就是inumber。这两个概念很相关,但不一样。Inode是指的数据结构,而inumber是索引编号,实际上就是inode的标识编号,也可以做inode编号。Inumber只是文件相关信息中的一项信息而已.
我们对一个文件进行操作,如vi编辑,系统是在inode表中找到inode编号(inumber),才允许我们打开该inode。当文件的inode分派给一个用户时,另一个用户要操作这个文件时,就要等该inode释放了才可以操作。档名 : 如果前边有个 . 表示是隐藏文件 .
4. 绝对路径, 相对路径 ./ ( 当前目录 ) ../ (上一层目录)
相对路径的作用:
程序开发时,将一些内容放到程序文件夹中,例如图片,利用相对路径寻找,因为每个人可能存放程序的文件夹在不同位置.(hwms系统)
目录比较长时,而又在离的比较近的目录时,使用相对目录就更快速绝对路径的作用:
有时写一些shell script时,使用绝对路径更好一些 .cd . 当前目录 cd .. 上层目录 cd ~ 家目录 cd - 上一次的工作目录
5. chgrp , chown , chmod ( 修改档案权限的命令 )
chgrp : 改变组别 , chgrp -R ( 表示递归 ) root( 组名 ) abc ( 文件名 )
chown : 改变档案拥有者 , chown -R(表示递归 ) abc:abc( 拥有者和组名一起修改) abc( 文件名 )
chown -R .abc( 只修改组名 ) abc(文件名 ) --> 注意此处第一个 abc之前有个点 , 作用就是隔开拥有者, 换句话说如果没有这个点, 那么修改的将是拥有者,而不是组
chmode : 改变档案的权限 ,
数字 chmod -R 777 abc.txt ( r : 4 w : 2 x : 1 , 3个7 分别按照顺序对应 拥有者 , 组内 , other 的权限 )
字母 chmod u=rwe,go=rx abc.txt ( 其中u表示拥有者, g表示群组, o表示other , a表示所有, + 表示增加, -表示除去)
chmod a+x abc.txt chmod a-x abc.txt chmod u+x abc.txt chmod -R u+x abc ( 文件夹 )
其中权限代表含义:
档案 : r ( 可以读取档案的实际内容 ) w ( 可以编辑档案, 但是不能删除档案 ) , x ( 该档案具有可以被系统执行的权利 )
目录 : r ( 可以读取该目录下的内容, 例如 ls aaa ) w ( 可以新增档案, 删除档案, 更名, 移动档案 ) , x ( 可以将该目录作为工作目录(就是到该目录下,再进行工作) )
存在的扩展名 (注意) .sh ( 脚本文件 ) .z .tar .tz .tar.gz .zip .tgz ( 压缩文件 ) .html .php ( 网页相关档案 )
档案与目录管理
cd , pwd , mkdir , rmdir
$PATH
当我们执行一个指令的时候, 举例来说 ls, 系统会依照PATH中的设定每个PATH定义的目录下搜索文件名为ls 的可执行文件, 如果在PATH定义的目录中有多个ls的可执行文件,那么, 先搜索到的同名指令先被执行.
echo $PATH 查看PATH变量 ( 注意必须是 $PATH, 因为PATH是个变量 )
pwd [-P]
-P : 显示出现的确实路径,而非使用链接( link )路径 ( 这里的链接只的不是实体链接)
mkdir [-mp] 目录名称
-m : 配置目录的权限,不需要参考 umask , 例如 mkdri -m 711 test2
-p : 递归建立 例如 mkdir -p test1/test2/test3/test4
rmdir [-p] 目录名称
-p : 递归删除空的文件夹 例如 : rmdir -p test1/test2/test3 必须要求这些文件夹都是“空”的
cp , mv , rm
cp 功能很强大, 复制档案时要注意权限, 目标文件和源文件的档案权限不同. 复制时必须搞清楚 是否需要完整保留原来档案信息? 来源档案是否为连接档案 ?
来源档案是否为特殊档案 FIFO,等等 来源档案是否为目录
-a : 相当于pdr ( 就是复制的完全一样 )
-d : 若来源文件尾链接文件的属性( link file), 则复制链接文件属性而非档案本身。
-f : 强制
-i : 覆盖之前先询问
-l : 进行硬式连接( hard link )的连接档建立,而非复制档案本身。
-p : 联通档案的属性一起复制过去,而非使用默认属性
-r : 递归复制
rm 移出档案和目录 -f -i -r ( 强制, 提示, 递归 )
mv [-fiu] 源文件,目的地
-f : 强制
-i : 提示覆盖
-u : 如果源文件比原来文件新,则直接覆盖
basename , dirname (感觉用处很小)
basename /var/tmp/aaa.txt ( 取得最后文档名, 此处结果为 aaa.txt )
dirname /var/tmp/aaa.txt ( 取得目录名 , 此处结果为 /var/tmp )
touch ( 更改档案时间 )
modification time( mtime ) ( 修改档案的时间 )
status time ( ctime ) ( 权限等属性被修改时 )
access time ( atime) ( 读取时间 )
ls -l --time=atime /etc
ls-l --time=ctime /etc
注意没有 ls -l --time=mtime, 因为mtime是默认的不需要指定
默认情况下:ls显示的是该档案的 mtime,也就是这个档案内容的上次更改的时间。
touch [-acdmt] 档案
-a 仅修改 access time
-c 仅修改档案的时间,若该档案不存在则不建立新档案
-d 后面可以接欲修改的日期而不用目前的日期,也可以使用 --date="日期或事件" 全部时间都修改
-m 仅修改mtime
-t 后面可以接欲修订的事件而不用目前的时间,格式为[YYMMDDhhmm]
例如: 建立一个空档案,aa
touch aa
touch -d "2 days ago" aa ( 所有时间修改到2天前 )
touch -t 1211011315 aa ( 修改了 access time , modify time , 但是并没有修改 status time )
touch -c aa ( 将3个时间全部修改 , 但是如果 aa 档案不存在,则不会建立 aa 这个档案 )
touch -a -d "2 days ago" aa // 修改日期, 仅修改 access 日期
touch -a -t 1304101010 aa // 修改时间和日期, 仅修改 access
head 只看头几行 head -2 a.txt
tail 只看尾巴几行 tail -2 a.txt
umask(档案预设权限 )
创建档案或目录时, 预设权限 umask -S , umask ( 此处命令显示出的数值, 后三位对应权限, 注意此处为缺失的权限 )
例如 umask 为022 , 则创建档案和目录时
档案 ( -rw-rw-rw-) - ( -----w--w-) ==> -rw-r--r--
目录 ( drwxrwxrwx) - ( d----w--w-) ==> drwxr-xr-x
档案的隐藏属性 chattr
chattr [+-=] [ASacdistu] 档案或目录名称
a : 当设定 a 后,这个档案将只能增加数据,不能删除也不能修改数据,只有root 才能设定这个属性
i : 这个 i 可以让档案不能被删除,改名,设定链接,也无法写入或新增资料,对于系统安全性帮助相当大,只有 root 才能设定此属性。
chattr +i abc.txt chattr -i abc.txt 解除 , 解除后就可以删除
lsattr [-adR] 档案或者目录
-a 显示隐藏档案
-d 仅列出目录本身的属性,而非目录内的档案
-R 递归
档案的特殊权限(SUID, SGID, SBIT)
SUID : 只对二进制文件有效, 执行者对该文件要有x的可执行权限, 本权限只在执行该程序时有效, 执行者拥有该档案拥有者的权限 ( U 就是 拥护者 owner )
就是执行者在执行时可以转变身份变成档案的拥有者( 拥有者一样的权限, 例如一个用户不对此档案有相应权限,但是由于SUID在执行时也可以执行 )
SGID : 只对二进制有效, 执行者具备X权限, 执行者在执行时,转变成组内用户,拥有组内权限 ( G 就是 group )
SBIT : 只针对目录有效, 当用户对目录具有W,X 权限时, 当用户在此目录下创建目录或者档案时, 只有此用户和 root 具有删除的权限 .
设置特殊权限 : 4 SUID , 2 SGID , 1 SBIT
chmod 4777 abc.txt ( 4 就是设置 SUID , 后边3个7 是设置普通权限 )
chmod u=rwxs, go=x abc.txt , chmod u+s abc.txt 跟之前的chmod一样, 有数字设置和字母设置
chmod u+s ( SUID ) chmod g+s (SGID ) chmod o+t ( SBID ) 另一种设置方法
备注 : 感觉好象是 有些时候用户权限不够,但是还要使用一些权限,就先借用一下, SBIT是用来限制权限的
file 观察文件类型 ( 档案或文件夹 )
file aa
su 切换用户
搜索命令相关的
which 查看命令完整路径 ( which cd , cd 无法查询 , 因为cd 是内建的 命令 )
which -a 将不止一个的命令列出
type 查看命令属性 ( type cd , cd is a shell built in 内建命令 )
搜索档案相关的搜索 whereis, locate, find ( find 搜索很慢, 不常使用, whereis和locate都是数据库查询,快 )
whereis [-bmsu] 档案或目录
-b : 只找 binary 格式的档案
-m : 只找在说明文件 manual 路径下的档案
-s : 只找 source 来源档案
-u : 搜索不再上述三个项目当中的其他特殊档案
whereis ifconfig
多数时候, whereis 是用来查找命令的位置.
locate [-ir] keyword
-i : 忽略大小写
-r : 后面可接正则表达式
locate ifconfig ( 不需要输入档案全名, 部分名称就可以, locate使用之前要先更新数据库, root执行update, 然后直接在/var/lib/mylocate数据库中搜索, 所以速度快 )
由于以上两个指令是根据数据库进行搜索,所以要及时更新数据库库 直接输入 updatedb 就可以更新了
find
find [PATH] [option] [action]
与时间有关的内容 有 -mtime, -atime, -ctime 以 mtime 为例,说明
-mtime n : n 为数字, 意味在n 天之前的 一天之内 被更改内容的档案。
-mtime +n : 列出在 n天之前 ( 不含 n 天本身 ) 被改动的档案
-mtime -n : 列出 n 天之内 ( 含 n 天本身 ) 被改动的档案
-newer file : file 作为一个存在的档案,列出比file 还要更新的档案
<----> 4
<----------------------------- + 4 -4 ---------------------------> 现在
+4 代表大于等于5天前
-4 代表小于等于4天到现在
4 代表 4-5那一天的档案
例如 : find / -mtime 0 代表 24 小时内
档案权限的对应关系
1. 让用户能进入某目录成为【可工作目录】的基本权利为?
可使用的命令: 例如 cd 等变换工作目录的指令
目录所需权限: 用户对这个目录至少需要具有 x 的权限
额外需要: 如果用户想要在这个目录内利用 ls 查阅文件名, 则用户对此目录还需要具有 r 的权限.
2. 用于在某个目录内读取一个档案的基本权限为何?
可使用的指令: cat, more, less
目录所需权限: 用于对这个目录至少需要具有 x 权限.
档案所需权限: 使用者对档案至少需要具有 r的权限
3. 让使用者可以修改一个档案的基本权限为?
可使用指令: nano , vi
目录所需要权限: 用户在该档案的目录至少是 X 权限.
档案所需权限: 使用者对档案至少有 r, w 权限.
4. 让一个使用者可以建立一个档案的基本权限为 ?
目录所需权限: 用户在该目录具有 w, x 的权限, 重点在 w
5. 让用户进入某目录并执行该目录的某个指令之基本权限为何 ?
目录所需权限: 用户在该目录至少要有 x 权限
档案所需权限: 使用者在该档案至少需要有 x 的权限.