文件与目录的默认权限与隐藏权限

umask命令:

umask :显示文件默认权限;

umask -S :以字符形式显示文件的默认权限;

umask 0000 :修改新建文件的权限为777

经测试,在普通用户下umask值为0002,在root用户下umask值为0022

umask值该为0000之后为什么新建的文件属性还为666呢???(在普通用户和root用户下都是这样的!)

 

 

文件的隐藏属性:

chattr 命令(常用的参数为-a -i)

chattr +i ss :为文件增加隐藏属性

chattr -i ss :为文件去掉隐藏属性

:当配置之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root

才能配置这个属性。

:这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,

但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)

:当dump 程序被运行的时候,配置属性将可使该文件(或目录)不会被dump 备份

:这个可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法

写入或新增数据!』对於系统安全性有相当大的助益!只有root 能配置此属性

:当文件配置了属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘

空间,所以如果误删了,完全无法救回来了喔!(这个比较强大)

:与相反的,当使用来配置文件时,如果该文件被删除了,则数据内容其实还

存在磁碟中,可以使用来救援该文件喔!

注意:属性配置常见的是的配置值,而且很多配置值必须要身为root 才能配置

lsattr :是擦看文件隐藏属性的命令

lsattr ss :查看文件ss的隐藏属性

 

文件的特殊权限(SUID,SGID,SBIT)

Set UID(SUID:拥有者的特殊权限)

这个标志出现在文件拥有者的权限上时,例如刚刚提到的/usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为Set UID,简称为SUID 的特殊权限。 那么SUID的权限对於一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能:

SUID 权限仅对二进位程序(binary program)有效;

运行者对於该程序需要具有的可运行权限;

本权限仅在运行该程序的过程中有效(run-time)

运行者将具有该程序拥有者(owner) 的权限。

init命令有拥有者特殊权限的时候,普通用户即可使用init命令来关机,重启!

修改init命令拥有特殊权限,chmod u+s /sbin/init

然后切换到zhangsp用户下,即可使用init命令。

 

SGID的用法:

当一个目录拥有SGID权限时,user1user2在该文件夹下新建的文件所述群组为user1user2公共的群组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 为数字,意义为在天之前的『一天之内』被更动过内容的文件;

-mtime +n :列出在天之前(不含天本身)被更动过内容的文件档名;

-mtime -n :列出在天之内(天本身)被更动过内容的文件档名。

-newer file file 为一个存在的文件,列出比file 还要新的文件档名

[root@www ~]# find / -mtime 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目录下文档大小在50k60k之间的文件;(注:-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 的文件(只要含有st的就列出)

 

find /home/zhangsp -size +300k /M/G/c搜索/home/zhangsp目录下大于300k(大小或者M,或者为G或者为c)的文件