linux的文件权限
/*我先讲个框框
1,一个四口之家,姐弟各一间房,父母一间房(他们使用一个账号),客厅共享(每一个房间都有一个文件柜,或者摆着的文件)。想对于文件柜或者文件来说姐弟,父母每个人都是一个用户(user),这一家人都可以使用客厅,因为他们整个家庭属于一个用户组(group),现在有一个张絮鑫,我认识,可是我的家人都不认识,她目前只与我有关系,那么张絮鑫现在就相对于我们是其他人(others)。还有一个特殊的角色,就是root账号,它不受系统权限限制。
2,每个房间里都有一个文件柜,里面存放着个人的文件,别人不能随便看私人的文件,这就是【文件拥有者的概念】,可读r(read),可写w(write),可执行x(execute)
接下来打几个比方,
1)对于目录来说:可读就像文件柜里的灯,没有可读就看不到文件柜里的文件名(有什么文件)。
2)可写,那么你就可以操作文件柜里的文件的顺序,移动,删除和重命名,还有新的目录的创建。
3)可执行,对于文件柜(目录)来说就是可以打开,相当于钥匙。可以使用cd切到这个目录,没有这个权限顶多看看有什么文件而已。根本到不了这个目录里面。
-*可读,对于文件,就是可以知道文件里的数据,相对就好理解了
-*可写,对于文件来说,就是可以修改文件的内容。
-*可执行,对于文件来说,就是可以执行文件里的数据内容。关键是得能读出来啊
一般来说,rw成对出现。因为并不是所有的文件都是可执行文件
一句话总结,就是对一般文件来说,rwx是针对内容来设计权限的;对于目录来说,rwx是针对文件名列表来设计权限的。
* 举例:
就是本来我没有权限(比如对我的权限是---)的一个文件或者目录放在了我的家目录下面,我能删了它吗?当然可以,就好比别人把文件放在我的文件柜里,你说我没有权限看,我还没有权限扔了吗?当然可以。正当的解释是,我对我所在的家目录具有rwx权限,所以我可以修改文件列表的顺序包括删除,还有新建移动等(对文件列表的变更都是可以的),所以对于在我的家目录下的文件即使我没有任何权限—- 那我还是能够删除。
* 举例:
我要复制一个文件,至少我对人文件要有读权限
* 举例:
很多时候对于目录来说r 没有,意味着什么?
-* 意味着我即使进入目录也看不到目录里的文件列表,使用tab无法补全,但是如果我知道文件名,我还是能够打开
* 举例:
对于一个开放的目录,我们最好给予o什么权限?
-* 至少有rx两个权限好吗,没有x根本进不去,没有r就不知道文件列表,但是w权限要慎重,因为有了之后别人就能够随便修改文件里的文件列表了,删了就不好了。
* 工作目录:工作目录就是当下我切到的目录,能不能切到目录里面是很重要的,因为如果不能进入该目录,那么该目录下面的任何命令都不能执行。
/*文件的权限设置:
* 补充:
a- 文件名之前有[.],则表示这个文件为隐藏文件
b- 在Windows下文件是否可以执行和后缀有关,比如.exe .c等,但是Linux下文件是否可以执行和x权限有关,而文件名包括后缀(后缀的作用几乎仅限于标识文件类型)
1,第一栏代表文件的类型和需要的权限。
1)第一个字符
【d】目录
【-】文件
【|】链接
【b】设备文件里可供存储的周边设备,可按存储块随机读写的设备。
【c】设备文件里的串行端口设备,鼠标,键盘等
* 补充:
a- 上面图表中后续栏目所代表的意义
1. 链接,后续讲到文件系统的时候你就知道了,它的数目等同于硬链接的数目,也即是inode的数目
2. 拥有者:顾名思义,指的是拥有文件的用户 user
3. 群组:拥有文件的群组,用户会加入各种各样的群组,这样,群组自然也就拥有了群组的成员的文件
2)剩下的字符
三个一组,分别代表rwx,-就是不允许,三组依次代表的是谁拥有的权限(对该文件或者其他类型)??
答:【用户】【用户组】【其他人】
2,权限的更改:
1),修改文件使用权限:
* 补充:
a- 修改文件权限,有三种方式
1. 数字,下面有写;我想说明的是,数字方式也好还是借由三种身份直接指定也好,都是由我们来直接指定全部权限,不管之前的是什么样,最终全部都会变成我们指定的那样。
2. u-user g-group o-others a- all,借由这三种身份直接制定权限;举例:u=rwx,g=r-x,o=r—,或者u=rwx,go=r—,就是类似于这样写
3. 不同于以上两种的是使用+ - 来在以前的基础上增加或者减少权限(rwx),举例:a+w,也就是所有身份都增加w的权限,以前就有的保持不变。
使用命令:chmod
格式:
(1),数字类型修改
r-4,w-2,x-1
【-rwxrwx---】就是770,过程就是
owner = rwx = 4+2+1
group = rwx = 4+2+1
others = --- = 0
chmod 【-R】 xyz 文件名/目录
(2),符号类型修改
-*u,g,o分别是user,group,others的首字母,使用他们为自己的权限赋值
ug = rwx o = ---(存疑)
chmod 【-R】 ug = rwx,o = --- 文件名/目录 //注意里面是逗号隔开的
-*如果,我的目的很单纯,就是想给每个使用者增加/移除执行的权限,那么可以这么写
chmod 【-R】 a+x 文件名/目录 //a代表all的意思 chmod a-x 文件名/目录
-*
2),修改文件所属用户组:
使用命令:chgrp
格式:chgrp 【-R】 用户组 dirname/filename
-R代表递归的修改目录下的子目录及文件的所属用户组。用户组,就是想改到那个用户组的那个的名字,dirname/filename就是修改文件的名字
3),修改文件所属用户:
使用命令:chown
格式:chown 【-R】 用户:用户组 文件或目录(想修改的那个)
chown 【-R】 用户.用户组 文件或目录(想修改的那个)//可以使用句点作为分隔符,但是用户名或用户组名里有句点就会造成误判,所以尽量使用:
chown 【-R】 用户 文件或目录(想修改的那个)//只修改用户
chown 【-R】 .用户组 文件或目录(想修改的那个)//这个就是使用了句点,只修改用户组
R需要大写才行。
* 补充:我觉得最好用的机会chown,因为拥有文件的有两个地方啊,一个是拥有者,一个是用户组,很棒的chown就能够实现单独或者同时修改拥有者/用户组
1. 只修改拥有者:chown [R] name filename/dirname
2. 只修改用户组:chown [R] :group filename/dirname
3. 同时修改拥有者&用户组:chown [R] name:group filename/dirname
注意:冒号就是界定拥有者&用户组的标志,别少了,还有[.]也可以,但是容易和文件中的点混淆,所以我建议使用冒号