文件与目录的默认权限与隐藏权限
umask命令:
umask :显示文件默认权限;
umask -S :以字符形式显示文件的默认权限;
umask 0000 :修改新建文件的权限为777
经测试,在普通用户下umask值为0002,在root用户下umask值为0022;
将umask值该为0000之后为什么新建的文件属性还为666呢???(在普通用户和root用户下都是这样的!)
文件的隐藏属性:
chattr 命令(常用的参数为-a -i):
chattr +i ss :为文件增加隐藏属性i ;
chattr -i ss :为文件去掉隐藏属性i ;
a :当配置a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root
才能配置这个属性。
c :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d :当dump 程序被运行的时候,配置d 属性将可使该文件(或目录)不会被dump 备份
i :这个i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法
写入或新增数据!』对於系统安全性有相当大的助益!只有root 能配置此属性
s :当文件配置了s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
空间,所以如果误删了,完全无法救回来了喔!(这个比较强大)
u :与s 相反的,当使用u 来配置文件时,如果该文件被删除了,则数据内容其实还
存在磁碟中,可以使用来救援该文件喔!
注意:属性配置常见的是a 与i 的配置值,而且很多配置值必须要身为root 才能配置
lsattr :是擦看文件隐藏属性的命令
lsattr ss :查看文件ss的隐藏属性
文件的特殊权限(SUID,SGID,SBIT):
Set UID(SUID:拥有者的特殊权限)
当s 这个标志出现在文件拥有者的x 权限上时,例如刚刚提到的/usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为Set UID,简称为SUID 的特殊权限。 那么SUID的权限对於一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能:
SUID 权限仅对二进位程序(binary program)有效;
运行者对於该程序需要具有x 的可运行权限;
本权限仅在运行该程序的过程中有效(run-time);
运行者将具有该程序拥有者(owner) 的权限。
当init命令有拥有者特殊权限的时候,普通用户即可使用init命令来关机,重启!
修改init命令拥有特殊权限,chmod u+s /sbin/init
然后切换到zhangsp用户下,即可使用init命令。
SGID的用法:
当一个目录拥有SGID权限时,user1和user2在该文件夹下新建的文件所述群组为user1和user2公共的群组user;
否则,只能通过chgrp user 222或者111来修改文件所属的群组(在没有SGID下也可以)
关于查找命令:which 、file、 find 、whereis 、locate;
再来谈一谈怎么搜寻文件吧!在Linux 底下也有相当优异的搜寻命令呦!通常find 不很常用的!因为速度慢之外, 也很操硬盘!通常我们都是先使用whereis 或者是locate 来检查,如果真的找不到了,才以find 来搜寻呦!为什么呢?因为whereis 与locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘, 比较省时间啦!
which :(专门来查询命令所在位置的,不是很常用到)
which [-a] command
选项或参数:
-a :将所有由PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
范例一:分别用root与一般帐号搜寻ifconfig 这个命令的完整档名
which ifconfig
/sbin/ifconfig <==用root 可以找到正确的运行档名!
su - zhangsp <==切换身份成为vbird 去!
which ifconfig
/usr/bin/which: no ifconfig in
(/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin
:/home/vbird/bin) <==见鬼了!竟然一般身份帐号找不到!
# 因为which 是根据使用者所配置的PATH 变量内的目录去搜寻可运行档的!所以,
# 不同的PATH 配置内容所找到的命令当然不一样啦!因为/sbin 不在zhangsp 的
# PATH 中,找不到也是理所当然的啊!了乎?
exit <==记得将身份切换回原本的root
范例二:用which 去找出which 的档名为何?
[root@www ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot
'
/usr/bin/which
# 竟然会有两个which ,其中一个是alias 这玩意儿呢!那是啥?
# 那就是所谓的『命令别名』,意思是输入which 会等於后面接的那串命令啦!
# 更多的数据我们会在bash 章节中再来谈的!
范例三:请找出cd 这个命令的完整档名
[root@www ~]# which cd
/usr/bin/which: no cd in
(/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin
:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
# 瞎密?怎么可能没有cd ,我明明就能够用root 运行cd 的啊!
这个命令是根据『PATH』这个环境变量所规范的路径,去搜寻『运行档』的档名~
whereis(一般用来搜命令):
选项和参数:
-b : 只找binary格式的文件
-m : 只找在说明档manual路径下的文件
-s :只找sourse来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
locate (搜索文件比较快,在数据库中搜索文件,不直接从磁盘中搜索,不过必须写完整的名字):
locate -i : 参数i来表示,忽略大小写;
locate -r : 参数r后面可接正规表示法的显示方式
find (最强大的搜索命令,可以使用通配符,在磁盘搜索,速度比较慢)
选项与参数:
与时间有关的选项:共有-atime, -ctime 与-mtime ,以-mtime 说明
-mtime n :n 为数字,意义为在n 天之前的『一天之内』被更动过内容的文件;
-mtime +n :列出在n 天之前(不含n 天本身)被更动过内容的文件档名;
-mtime -n :列出在n 天之内(含n 天本身)被更动过内容的文件档名。
-newer file :file 为一个存在的文件,列出比file 还要新的文件档名
[root@www ~]# find / -mtime 0
# 那个0 是重点!0 代表目前的时间,所以,从现在开始到24 小时前,
# 有变动过内容的文件都会被列出来!那如果是三天前的24 小时内?
# find / -mtime 3 有变动过的文件都被列出的意思!
范例二:寻找/etc 底下的文件,如果文件日期比/etc/passwd 新就列出
[root@www ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个文件之间的新旧关系是很有用的!
find的-size属性:
find /etc -size +1500k -o -size 0 : 搜索etc目录下文件大小大于1500k的文件或者大小为0的文件;
相对於-a(并且),那个-o 就是或(or) 的意思罗!
find /etc -size +50k -a -size -60k -exec ls -l {} \; :搜索etc目录下文档大小在50k到60k之间的文件;(注:-a表示并且,-exec 表示连接下一个命令的开始,ls -l为下一个命令,{}表示find之后搜索到的内容,\表示结束连接命令;)
find /etc -size +50k -a ! -user root -type f -exec ls -l {} \; :搜索etc下大于50k且不属于root用户的文档(注:这里的;号不能少,而且ls -l不能写成ll)
find /home -user zhangsp :列出为home目录下为用户zhangsp的文件
find /var -name iou* :搜索var目录下以iou开头的文件。
find /var -type s : 搜索var目录下文件类型为socket的档名
find /var -type p :搜索var目录下文件类型为FIFO的档名
find /sbin -perm +7000 :搜索etc目录下权限为---s--s--t 的文件(只要含有s或t的就列出)
find /home/zhangsp -size +300k /M/G/c: 搜索/home/zhangsp目录下大于300k(大小或者M,或者为G或者为c)的文件