Linux文件属性、权限、umask、find

来源:互联网 发布:淘宝店铺banner尺寸 编辑:程序博客网 时间:2024/06/10 22:50

任务:2.14-2.27 文件或目录权限chmod,chown,umask,lsattr,chattr,set uid,set gid, stick bit,find

文件的所有者和所属组

每一个Linux的目录和文件都有所有者和所属组权限,owner所有者和group所属组。owner,group和非本组的其他用户others分别有各自的权限。用命令ls -l 可以查看目录和文件的权限。例如:

-rw-r--r--. 1 root root    0 1028 15:36 1.txtdrwxr-xr-x. 2 root root    6 1028 15:35 abc

第一列,d开头表示是目录,- 开头表示是普通文件,l开头表示是链接,b开头表示是块文件如硬盘,c开头是字符设备文件如键盘鼠标,s开头表示套接字文件在mysql中会用到。

后面的九位中每三位是一段,分别表示owner,group和others的权限。r表示可读,w表示可写,x表示可执行。

需要特别注意的是,打开目录需要有执行权限,所以系统默认的文件权限为rw-r--r-- ,目录默认权限为rwxr-xr-x ,目录的r权限必须伴随有x权限才真正有意义。

为了方便描述,规定rwx分别用对应的阿拉伯数字计算权限,r为4,w为2,x为1,所以文件默认权限为644,目录默认权限是755。

chgrp
用来更改所属组。
用来更改目录的所属组时,需要在命令后加上-R 才可以让他的级联子目录和子文件的所属组权限一起更改。

chown
用来更改所有者。同时也可以在参数中修改所属组。
用来更改目录的所有者时,需要在命令后加上-R 才可以让他的级联子目录和子文件的所属组权限一起更改。

用法示例如下:

chown -R user1:group1 dir1 //把目录dir1的所有者更改为user1,所属组更改为group1。

chmod
用来更改权限,文件夹的默认权限为755,文件的默认权限为644。使用示例如下:

chmod 750 dir1 //更改dir的权限为rwxr-x---

umask
umask值是预设所有权限开放时需要减去的权限,如果预设目录的所有权限打开为rwxrwxrwx,文件的所有权限打开为rw-rw-rw-,那么想得到默认权限就是:

rwxrwxrwx - ----w--w-=rwxr-x-r-x //目录rw-rw-rw- - ----w--w-=rw-r--r-- //普通文件

umask就是被减去的那个值,此处为022。

如果改变umask的值为002,如使用命令umask 002 ,文件和目录的默认权限也会相应的进行改变。

chattr, lsattr
chattr用来增减权限,增加权限用+,减去权限用-,常用的权限有i和a:

  • i表示不能写入删除重命名以及设定链接
  • a表示只能追加不能删除

示例如下:

chattr +i dir2 //为目录dir2增加i权限chattr -i dir2 //为目录dir2减去i权限chattr +a dir2 //为目录dir2增加a权限

lsattr和ls用法相似,用于读取文件或者目录的特殊权限。可选参数有a和R,-a表示隐藏文件一起列出,-R表示连目录内的子文件和文件夹的属性一起列出。

set uid,set gid, stick bit
set uid 可以让普通用户在执行二进制文件时临时拥有owner的权限,例如passwd就有这个权限。
使用方法为

chmod u+s /usr/bin/ls  //添加s权限chmod u-s /usr/bin/ls  //去除s权限

set gid 与set uid类似,当作用在二进制文件上时,可以让文件在执行阶段具有所属组的权限。当作用在目录上时,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。

chmod g+s /usr/bin/ls  //添加s权限chmod g-s /usr/bin/ls  //去除s权限

有时候,set uid上的权限为大写S,这是因为其没有x权限,添加上x权限后即会变成小写的s。

stick bit称为防删除位,在权限中用t表示,命令为chmod o+s dir 。一般来说,当文件所在目录拥有写权限时,那么就可以删除文件,但是具有写权限的目录如果加上了t权限,那么就不能删除此目录下的文件。

find
which 命令可以查看环境变量PATH中出现的可执行命令的路劲。如which ls 等。

locate命令需要先提前安装mlocate然后生成文件列表库后搜索使用。

yum install -y mlocate //从yum安装mlocateupdatedb //需要更新文件列表库才能开始搜索locate ls //查找ls

find命令的使用格式为: find [路径] [参数]

-atime +n/-n //表示最近访问时间大于/小于n天的文件-ctime +n/-n //表示最近更改时间(更改内容、权限、链接等)大于/小于n天的文件-mtime +n/-n //表示最近内容修改时间大于/小于n天的文件find /tmp/dir/ -mtime -1 //表示查找1天内修改过内容的文件

以下命令可以查看mtime,ctime和atime:stat

通过添加参数-name和-filetype可以搜索指定类型的文件。
filetype包含了f,b, c, d, l, s等类型。

find /tmp/ -name test //搜索文件名为test的文件find /tmp/ d  //搜索类型为目录的文件