今天是学习Linux的第一周,因为本人是学python的,但是因为需要一些Linux的基础,所有老师安排先突袭猛补一周的Linux基础知识,进度也很快,以至于上课的时候听的似懂非懂,虽然是一些基础性的知识,但是对于像我这样没有基础的同学来说,知识点零散,需要记得命令太多,所以还是有点很难消化的,借此总结知识机会的同时分享一下Linux属主和属组的概念及常见命令,其实Linux内容多而且杂,但是很多知识都是成块的,需要我们合理的总结归纳。
在Linux中,一切都是以文件的形式存在,然而对于每个文件来说,都有一个特定的所有者,所以,属主就是所属的主人,叫做owner。也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组来进行分类的,一个用户可以属于一个或多个组。组可以分为基本组和附加组:
基本组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是基本组,也就是主组,不可以把用户从基本组中删除。在创建文件时,文件的所属组就是用户的基本组。
附加组:除了基本组之外,用户所在的其他组,都是附加组。用户是可以从附加组中被删除的。
用户不论为与基本组中还是附加组中,就会拥有该组的权限。一个用户可以属于多个附加组。但是一个用户只能有一个基本组。因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
例子:-rw-r-xr-- 1 root root 0 Jan 7 21:29 testfile
使用 ls 命令查看testfile文件,最左侧的-表示文件的类型(此处表示的是普通文件)接下来的rw-r--r--表示的是属主、属组、其他用户的权限,“r”权限表示的是“读”权限,“w”权限表示的是“写”权限,“x”权限表示的是“可执行”权限,而“-”权限表示的是“无权限”。所以相对应表示testfile文件的属主有可读可写,属组可读可执行,其他人可读。testfile的属主是root,属组是root。
文件的属主和属组是可以改变的,也就是说属主权限和属组权限是两回事:
注意:普通用户是没有权限更改的,仅有管理员有权限改
chown:修改文件的属主
语法:chown [选项] 用户或组 文件
选项:
- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
- v 显示chown命令所做的工作。
eg:chown User1 program:表示把program文件的属主改为User1
注:chown也可修改目录文件的属主,但是如果需要一同修改目录下展开所有文件的属主,需要执行选项 "-R"
eg:chown -R User1 /tmp/program/:表示修改program目录及目录下所有文件的属主,对于属组的修改,也是同样
chgrp:修改文件的属组
选项:
- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
- v 显示chgrp命令所做的工作。
eg:chgrp User1 program:表示把program文件的属组改为User1
eg:chgrp -R User1 /tmp/program/:表示把program目录下及目录下所有文件的属组改为User1
同时修改属组和属主:
eg:chown User1:User1 program:表示把program文件的属组和属主都改为User1,使用chown可以同时修改文件的属主和属组,需要注意的是,将属主和属组用 ":" 隔开,也可以用 "." 隔开
另外对于每个文件来说,属主、属组和其他用户分别有属于各自不同的权限,继续引用上面提到的第一个例子:
例子:-rw-r-xr-- 1 root root 0 Jan 7 21:29 testfile
从前面看出此文件属主的权限是:可读可写、属组的权限是可读可执行、其他用户的权限是可读。
每个用户的权限有三种,所以可以归纳为8种,权限对应数字码:
---,000 无权限,对应号码:0
--x,001 可执行,对应号码:1
-w-,010 可写,对应号码:2
-wx,011 可写可执行,对应号码:3
r--,100 可读,对应号码:4
r-x,101 可读可执行,对应号码:5
rw-,110 可读可写,对应号码:6
rwx,111 可读可写可执行:对应号码:7
文件的权限修改:
chmod:用数字直接可以修改权限
语法:[OPTION]...OCTAL-MODE FILE
eg:chmod 777 pwd.txt :表示修改pwd.txt文件的权限为所有人所有权利
注:普通文件一般不能给执行权限,目录是必须有执行权限的,要不然无法进入目录
如果需要同时修改目录及目录下的子文件,需要加 -R,表示递归
eg:chmod -R 777 etc/dir/ :建议尽量不要使用此命令
同时也可以修改一类用户的某位或某些位权限:
修改一类用户的所有权限:
u = g = o = ug = a =
修改一类用户某位或某些位权限:
u + u - g + g - o + o -
注:这里的 u 表示属主,g 表示属组,o 表示其他用户,a 表示所有
修改单个权限:
eg:chmod g=rw- etc/issue :表示修改issue文件属组的权限为rw-
eg:chmod u= etc/issue :表示修改issue文件属主的权限为 - - -
eg:chmod o= etc/issue :表示修改issue文件其他用户的权限为 - - -
eg:chmod g=r-x,u= etc/issue :表示同时修改属主和属组issue文件的权限
eg:chmod ug=r-x etc/issue :表示同时修改属主和属组issue文件的权限为相同的权限
eg:chmod a=r-- etc/issue :表示同时修改所有权限
加减权限:
eg:chmod go-r etc/issue:表示把属组和其他用户的 r 权限去掉
eg:chmod g+x etc/issue:表示给属组权限加上 x
eg:chmod a+r etc/issue :表示同时给所有用户加上 r 权限
eg:chmod --reference etc/issue penglicheng.txt :表示引用etc/issue的权限内容,把penglicheng.txt的权限改为和 etc/issue一样的
Linux文件系统上的特殊权限:
SUID, SGID, Sticky
SUID:任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限,而拥有SUID权限启动为进程后,其进程属主为原程序文件的属主,
权限设定:
chmod u + s File...
chmod u - s File....
SGID:任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限,而拥有SGID权限启动为进程后,其进程属组为原程序文件的属组,(一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组)
chmod g + s File...
chmod g - s File....
Sticky:具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权,在目录设置Sticky位,只有文件的所有者或 root 可以删除该文件,Sticky设置在文件上则没有意义,
chmod o + t DIR...
chmod o - t DIR....
上述三个权限,在增加的时候如果之前有可执行权限则覆盖显示小写 s 或 t,如果之前没有权限则表示大写的 S 或 T