linux基础之文件权限与属性

2018-07-25  本文已影响0人  ivan_cq

一、文件属性的查看与设定


[root@server1 ~]# ls -al
总用量 972
dr-xr-x---.  4 root root   4096 12月 11 22:18 .
dr-xr-xr-x. 22 root root   4096 12月 12 13:35 ..
-rw-------.  1 root root   2221 12月 11 22:18 .bash_history
-rw-r--r--.  1 root root     18 5月  20 2009 .bash_logout
-rw-r--r--.  1 root root    176 5月  20 2009 .bash_profile
-rw-r--r--.  1 root root    176 9月  23 2004 .bashrc
-rw-r--r--.  1 root root    100 9月  23 2004 .cshrc
drwxrwxr-x   9 1000 1000   4096 12月  5 20:20 keepalived-2.0.6
-rw-r--r--   1 root root 853859 12月  5 20:16 keepalived-2.0.6.tar.gz
-rw-r--r--   1 root root  90136 12月  5 19:43 ldirectord-3.9.5-3.1.x86_64.rpm
drwx------   2 root root   4096 12月  5 20:29 .ssh
-rw-r--r--.  1 root root    129 12月  4 2004 .tcshrc
-rw-------   1 root root   3454 12月 11 22:06 .viminfo

第一列中第一个符号代表文件的类型,-代表普通文件,d代表目录,l代表软连接,可以比作windows下的快捷方式。s代表套接字,用于网络通信。b代表可供存储的接口设备如硬盘等。c代表串行端口设备,一次性读取设备,比如鼠标,连续输出。p,管道类型文件,解决多个程序同时访问一个文件的问题。
第一列剩下的符号分别代表,文件所有人的权限,文件所属组的权限,其他人的权限。那么,user,group,others是什么呢?由于linux是多用户的操作系统,考虑到用户的隐私以及不同用户对工作环境的喜好不同,所有有文件所有人的权限。而考虑到团队开发,所以又要有group的支持,注意一个用户可以有多个用户组的支持。others则代表其他人了。
用户信息在/etc/passwd 所有组名在/etc/group 所有密码在/etc/shadow

第二列代表多少文件名连接到此inode,说到inode,我们得先了解以下linux下的文件系统,linux一般使用ext2/ext3文件系统,这是索引式文件系统,一个文件的存储由两部分组成,存储块block和inode块,inode记录文件的一些属性,以及数据存储块block的位置,而inode中有一个属性记录,此数据文件名的数量。可以理解为同样的数据不同的文件名,我们每次为文件创建一个硬连接,那么这个属性会减一。需要注意,我们创建一个目录,会同时有3个东西生成,新的目录连接数为2,而上层目录的连接数加一。,还需要注意硬链接不会跨越文件系统,也不会连接到目录。ln不加参数为制作硬链接,ln -s为制作软链接。使用cat也可以制作硬链接软链接。

第三列和第四列代表该文件的所有者和所在组。

第五列代表文件的大小,单位默认为b。

第六列代表文件最近内容被修改的时间mtime,第七列代表文件名,带点的是隐藏文件。

*好,就这样!我不朔了!



二、文件与目录的默认权限、隐藏权限、特殊权限以及acl权限规划


除了rwx权限外,我们还可以设置其他的系统隐藏属性。

自己做了很多次都发现加a隐藏权限不能删除也不能添加数据。。。。我丢


查看umask

umask 或者 umask -S

[root@server1 ~]# umask 
0022
[root@server1 ~]# umask -S
u=rwx,g=rx,o=rx

修改umask
umask 数字 临时修改
vim /etc/profile 永久修改 在60行


suid 冒险位
suid,当原本属于文件所有者的x权限位置变成了s,这就意味着该文件具有suid特殊权限。
但是呢,这个权限仅仅对与二进制可执行的文件有效,且仅仅在执行过程中有效,且执行者必须对该文件有执行的权力。最终执行者在执行该程序的过程中会暂时具有该程序所有者的权力。
eg:一般修改密码一般执行passwd这个命令,我们知道密码存储在/etc/shadow内,而这个文件的权限仅仅为root可读root可强制写入,那么我们使用passwd这个命令的时候就会暂时获得root的权力去修改密码。passwd这个命令在/usr/bin/passwd。

[root@server1 ~]# ll /etc/shadow
---------- 1 root root 688 12月  5 19:46 /etc/shadow
[root@server1 ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 2月  17 2012 /usr/bin/passwd

注意这个文件s权限的位置
注意,suid仅仅只能用于二进制文件上,不能用在shell上,因为shell是调用别的二进制程序的

sgid 强制位
sgid,s这个权限出现在文件所在组权限的x位置上。
这个权限对于目录和文件都有效果。
对于目录而言,用户在该目录下创建的文件的用户组为与这个目录的用户组相同
而对于文件来说,可以类比suid,和它差不多。

sbit 粘制位
sbit,其他人的可执行权限上,s变成了t。
仅仅作用于目录。
当用户在一个具有该权限的目录下创建文件或者目录时候,仅仅只能对于自己的东西进行修改删除等改变操作。

特殊权限的设置
4suid,2sgid,1sbit。
chmod 4755 file
chmod 2755 file
chmod u=rwxs,go=x file
chmod g+s,o+t file
空的特殊权限

[root@server1 ~]# touch test
[root@server1 ~]# chmod 666 test 
[root@server1 ~]# ll test 
-rw-rw-rw- 1 root root 0 12月 12 14:51 test
[root@server1 ~]# chmod 7666 test 
[root@server1 ~]# ll test 
-rwSrwSrwT 1 root root 0 12月 12 14:51 test

acl权限:主机的具体权限规划

access control list,提供特殊的权限设置。

几个简单的例子感受一下

1、针对特定用户

[root@server1 ~]# ll test 
-rw-r--r-- 1 root root 0 12月 12 15:10 test
[root@server1 ~]# setfacl -m u:cq:rx test
[root@server1 ~]# ll test 
-rw-r-xr--+ 1 root root 0 12月 12 15:10 test
[root@server1 ~]# getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:cq:r-x
group::r--
mask::r-x
other::r--

u:用户:权限 ,设置完后ll查看权限最后对多出来一个加号,但是此时这种查看方式是不容易判断的所以我们需要更好的查看方式,getfacl加文件。
user::rw- 代表文件所有者的权限,因为用户栏是空的
user:cq:r-x 代表对于cq这个用户的权限
mask::r-x 此文件默认的有效权限,意思就是对于用户或者用户组所设置的权限必须小于mask的值才会生效

2、针对特定用户组

[root@server1 ~]# setfacl -m g:cq:rx test 
[root@server1 ~]# getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:cq:r-x
group::r--
group:cq:r-x
mask::r-x
other::r--

3、设置mask有效权限
通过下面这个例子我们发现,如果不主动设置mask的值,那么,mask会自动随着用户或者用户组的权限所变化,而主动设置mask值的话,就会有effective显示,不会使得某些用户的权限设置过大。

[root@server1 ~]# setfacl -m g:cq:rx test 
[root@server1 ~]# getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:cq:r-x
group::r--
group:cq:r-x
mask::r-x
other::r--

[root@server1 ~]# setfacl -m u:cq:rwx test 
[root@server1 ~]# getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:cq:rwx
group::r--
group:cq:r-x
mask::rwx
other::r--

[root@server1 ~]# setfacl -m m:r test 
[root@server1 ~]# getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:cq:rwx         #effective:r--
group::r--
group:cq:r-x            #effective:r--
mask::r--
other::r--

4、使得acl权限可以递规
有一个需求,我们使得一个普通用户可以进入到root用户的家目录,可以查看但是不可以写东西。
[root@server1 ~]# setfacl -m u:cq:rx /root
此时cq这个用户可以进入到root目录及其子目录中
但是如果你在根用户的家目录下新建一个文件那么,这个文件不会具有acl权限。
使用下面这个命令就会使得acl权限递规。

[root@server1 ~]# setfacl -m d:u:cq:rx /root
[root@server1 ~]# mkdir  cheng
[root@server1 ~]# getfacl cheng
# file: cheng
# owner: root
# group: root
user::r-x
user:cq:r-x
group::r-x
mask::r-x
other::---
default:user::r-x
default:user:cq:r-x
default:group::r-x
default:mask::r-x
default:other::---

三、文件操作

[root@server1 ~]# ls
keepalived-2.0.6  keepalived-2.0.6.tar.gz  ldirectord-3.9.5-3.1.x86_64.rpm
[root@server1 ~]# ls -a
.   .bash_history  .bash_profile  .cshrc            keepalived-2.0.6.tar.gz          .ssh     .viminfo
..  .bash_logout   .bashrc        keepalived-2.0.6  ldirectord-3.9.5-3.1.x86_64.rpm  .tcshrc
[root@server1 ~]# ls -la
total 980
dr-xr-x---+  4 root root   4096 Dec 12 15:57 .
dr-xr-xr-x. 24 root root   4096 Dec 12 15:57 ..
-rw-------.  1 root root   2221 Dec 11 22:18 .bash_history
-rw-r--r--.  1 root root     18 May 20  2009 .bash_logout
-rw-r--r--.  1 root root    176 May 20  2009 .bash_profile
-rw-r--r--.  1 root root    176 Sep 23  2004 .bashrc
-rw-r--r--.  1 root root    100 Sep 23  2004 .cshrc
drwxrwxr-x   9 1000 1000   4096 Dec  5 20:20 keepalived-2.0.6
-rw-r--r--   1 root root 853859 Dec  5 20:16 keepalived-2.0.6.tar.gz
-rw-r--r--   1 root root  90136 Dec  5 19:43 ldirectord-3.9.5-3.1.x86_64.rpm
drwx------   2 root root   4096 Dec  5 20:29 .ssh
-rw-r--r--.  1 root root    129 Dec  4  2004 .tcshrc
-rw-------   1 root root   4791 Dec 12 14:58 .viminfo
[root@server1 ~]# ls -ld
dr-xr-x---+ 4 root root 4096 Dec 12 15:57 .
[root@server1 ~]# cd /tmp/
[root@server1 tmp]# ls
yum.log
[root@server1 tmp]# mkdir -p a/b/c
[root@server1 tmp]# ls -Rl

[root@server1 tmp]# > test
[root@server1 tmp]# ls
test
[root@server1 tmp]# stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 783362      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-12 16:17:59.842002821 +0800
Modify: 2018-12-12 16:17:59.842002821 +0800
Change: 2018-12-12 16:17:59.842002821 +0800

ctime: 文件最近以此被访问的时间,应用程序或者服务调用时,cat会更新而ls就不会更新。
mtime:文件的内容最近发生改变的信息。
ctime:文件的属性inode的改动或者文件内容的改动。

[root@server1 tmp]# ls
test
[root@server1 tmp]# stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 783362      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-12 16:27:32.499000270 +0800
Modify: 2018-12-12 16:27:32.499000270 +0800
Change: 2018-12-12 16:27:32.499000270 +0800
[root@server1 tmp]# vim test
[root@server1 tmp]# stat test
  File: `test'
  Size: 9           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 783362      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-12 16:30:15.614977799 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:30:20.014999959 +0800

我们发现修改文件内容的同时会同时修改三个时间戳

[root@server1 tmp]# stat test
  File: `test'
  Size: 9           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 783362      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-12 16:30:15.614977799 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:30:20.014999959 +0800
[root@server1 tmp]# cp -a test test2
[root@server1 tmp]# stat test2
  File: `test2'
  Size: 9           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 785929      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-12 16:30:15.614977799 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:33:19.712990206 +0800
[root@server1 tmp]# stat tets
stat: cannot stat `tets': No such file or directory
[root@server1 tmp]# stat test
  File: `test'
  Size: 9           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 783362      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-12 16:33:19.712990206 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:30:20.014999959 +0800

我们发现就算cp -a 复制文件所有属性也无法复制ctime的属性,这个属性会一直发生变化的
使用 rm -f 删除文件



[root@server1 tmp]# touch a
[root@server1 tmp]# ls
a
[root@server1 tmp]# cp -s a b
[root@server1 tmp]# 
[root@server1 tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 12 16:47 a
lrwxrwxrwx 1 root root 1 Dec 12 16:47 b -> a
[root@server1 tmp]# cp -l a c
[root@server1 tmp]# ll
total 0
-rw-r--r-- 2 root root 0 Dec 12 16:47 a
lrwxrwxrwx 1 root root 1 Dec 12 16:47 b -> a
-rw-r--r-- 2 root root 0 Dec 12 16:47 c

注意:在同一个磁盘上文件移动,是重命名操作;而在不同磁盘上文件的移动是复制删除过程


rm删除 r f i
注意:有的时候文件名不规范会导致删除失败!
在新版的linux里已经避免了这种错误了!
rm -aaa-
这种情况会失败的!但是可以使用rm -- -aaa-

[root@server1 tmp]# touch -aaa-
touch: invalid option -- '-'
Try `touch --help' for more information.
[root@server1 tmp]# touch -- -aaa-
[root@server1 tmp]# ls
-aaa-
[root@server1 tmp]# rm  -aaa-
rm: invalid option -- 'a'
Try `rm ./-aaa-' to remove the file `-aaa-'.
Try `rm --help' for more information.
[root@server1 tmp]# rm -- -aaa-
rm: remove regular empty file `-aaa-'? y
[root@server1 tmp]# ls
[root@server1 tmp]# 

[root@server1 gcrypt]# basename /etc/passwd
passwd
[root@server1 gcrypt]# dirname /etc/passwd
/etc
[root@server1 gcrypt]# dirname `pwd`
/etc

cat 一次性输出完!
tac 反向输出完!
cat -b 带行号输出,但是空白行不带行号!

more 翻页查看
空格向下翻页
enter向下一行
/字符向下匹配查询

less
enter 向下一行
space向下一页
上下键向下上一行
h帮助
/字符 向下查询
?字符 向上查询


tail 默认显示后10行
tail -n 20 显示后20行
tail -n +20 显示20行之后的数据包括20行
tail -f 持续检测
cat file1 | tail -n +300 | head -n 200 先从第300行开始,再输出前200行,所以是300-499
cat file1| head -n 500 | tail -n +300 先取前500行,再输出从其中第300行开始的内容


文件寻址
文件路径有相对路径和绝对路径之分。
注意:我们在写脚本的时候绝对要使用绝对路径
切换目录
cd .. 上一层
cd . 当前
cd ~ 当前家目录
cd ~ cq cq用户的家目录
cd - 上一个目录



[root@ivans ~]# which ifconfig 
/sbin/ifconfig

[root@ivans ~]# which -a ifconfig
/sbin/ifconfig
/usr/sbin/ifconfig

文件名的查找
whereis 和 locate 这两个是从系统中的数据库中查找,非常快,但是不准确,因为linux是异步存储的。
推荐使用find虽然慢但是是从硬盘上查找的

find 路径 选项 操作

1、时间:
find /etc -mtime +10表示10天之前不包括10天被修改的文件,10,10天前一天之内更改过的文件;-10,10天之内更改过的文件。
find /etc -newer /etc/passwd 查找新的文件
2、用户用户组
find /etc -user -group -uid -gid -nouser -nogroup (后面这两个选项安装软件时候,有的文件的用户不在/etc/passwd)
3、与文件权限名称有关
find /etc -name httpd
find /etc -size +-5k
find /etc -type s/p/l/b/c
find /etc /bin -perm +6000 只要含有s或者t就列出来-6000就是都得有
4、action
find /etc -perm +6000 -exec ls -l {} \;
5、find命令默认的执行是打印到屏幕上


文件大小统计

**文件大[root@server1 ~]# wc test1 
  31   37 1199 test1
[root@server1 ~]# wc -l test1           行数
31 test1
[root@server1 ~]# wc -w test1   单词数
37 test1
[root@server1 ~]# wc -m test1   字符数
1199 test1
[root@server1 ~]# wc -c test1   字节数
1199 test1
小的统计**

whatis ip addr 查看命令的大用途
ip addr --help 查看命令的基本用法,適用於多數命令。

[] ##标示选项可以加也可以不加

... ##标示选项加入的个数任意

<> ##标示选项是必须要加入的

Userage: ##标示命令用法

Opetions: ##对参数的作用做说明

我们通过man命令来查看命令或者文件的帮助手册
man 命令
man 5 文件

man的级别
1 #命令
2 #系统调用接口
3 #函数库调用接口
4 #特殊设备文件
5 #系统配置文件
6 #游戏规则说明
7 #包说明
8 #系统管理命令
9 #内核调用规则

/usr/share/doc ##系统中所有安装过的软件的帮助文档


系统中的通用配置符号

* ##匹配0到任意字符
? ##匹配单个字符
[[:alpha:]] ##单个字母
[[:lower:]] ##单个小写字母
[[:upper:]] ##单个大写字母
[[:digit:]] ##单个数字
[[:punct:]] ##单个符号
[[:space:]] ##单个空格
[[:alnum:]] ##单个数字或字母
[1-9] #1位,这位是1-9的任意数字
[!3-5] #1位,不是3-5的数字
[^3-5] #1位,不是3-5的数字
[a-z] #1位,a-z的任意字母
{1..3} #3个,1 2 3
{1,4,7} #3个1,4,7这三个数


上一篇 下一篇

猜你喜欢

热点阅读