文件可存取访问的身份分为3个类别,分别是owner、group、others,这3种类别各有read、write、execute3种权限
一、用户和用户组
用户身份与用户组记录的文件:
1.账户信息:/etc/passwd
2.密码信息:/etc/shadow
3.组名信息:/etc/group
二、文件权限与属性
[root@hs-uf21 etc]# ll
-rw-r--r-- 1 root root 2767 Apr 11 13:20 passwd
drwxr-xr-x 4 root root 4096 Apr 10 21:09 vmware-tools
[文件类型和权限] [连接 ] [所有者][用户组] [文件容量] [ 修改时间 ] [文件名]
第一列“-rw-r--r--” 共10个字符,表示文件的类型和权限,具体如下:
- rw- r-- r--
d rwx r-x r-x
[文件类型][所有者权限][同用户组的权限][非本用户组的权限]
文件类型说明:
[d] :表示目录;
[-] :表示普通文件;
[l] :表示连接文件(linkfile);
[b] :表示设备文件里面的可供存储的接口设备;
[c] :表示设备文件里面的串行端口设备,如键盘、鼠标。
文件权限说明:
[r] :表示可读(read);
[w] :表示可写(write);
[x] :表示可执行(execute);
第二列表示有多少个文件名连接到此节点(i-node)
第三列表示这个文件(或目录)的所有者账号
第四列表示这个文件(或目录)的所属用户组
第五列表示这个文件的容量大小,默认单位为B
第六列表示这个文件的创建日期或者是最近的修改日期
第七列表示这个文件的文件名,如果文件名之前多一个“.”,则表示这个文件为“隐藏文件”。
三、文件权限与属性的修改
参数:
[-R] :进行递归(recursive)的持续更改,也即连同子目录下的所有文件、目录都更新成这个用组之间,常用在更改某一目录内所有的文件情况。
1.chgrp:改变文件所属用户组
语法:chgrp [-R] GROUP dirname/filename
将文件etc.tar所在所属的用户组改到dba:
[root@hs-uf21 ~]# chgrp dba etc.tar
[root@hs-uf21 ~]# ll
-rw-r--r-- 1root dba 48885760 Apr 19 22:39 etc.tar
2.chown:改变文件所有者
语法:chown[-R] USER[:/.GROUP] dirname/filename
参数:
[-R] :进行递归(recursive)的持续更改,也即连同子目录下的所有文件、目录都更新成这个用组之间,常用在更改某一目录内所有的文件情况。
将文件etc.tar的所有者和所属组改为oracle和dba
[root@hs-uf21 ~]# chown oracle:dba etc.tar
[root@hs-uf21 ~]# ll
-rw-r--r-- 1 oracle dba 48885760 Apr 19 22:39 etc.tar
注意:chown可以同时更改文件的所有才和组名,上面的操作这样操作,[root@hs-uf21 ~]# chown oracle.dbaetc.tar,即用户名和组名之前可以用“.”来代替“:”。
3.chmod:改变文件的权限
文件可存取访问的身份分为3种,分别是user、group、others,每种身份的文件权又可以分为三类:r(read)、w(write)、x(execute),同时也可以用数字来代表,分别为:r = 4、w = 2、x = 1。所以改变权限的方法可以分为:数字类型和符号类型
数字类型改变文件权限
语法:chmod [-R] [权限] 文件或者目录
参数:[权限]为rwx的数字表示,具体如下
user = rwx =4+2+1 = 7
group = rwx = 4+2+1 = 7
others = rwx= 4+2+1 = 7
给文件install.log的所有者赋予读写执行的权限
[root@hs-uf21 ~]# chmod 700install.log
[root@hs-uf21 ~]# ll
-rwx------ 1root root 59020 Apr 10 20:32 install.log
给文件install.log的所有者赋予读和写的权限,同级用户和非同组用户赋予读的权限
[root@hs-uf21 ~]# chmod 644install.log
[root@hs-uf21 ~]# ll
-rw-r--r-- 1root root 59020 Apr 10 20:32 install.log
符号类型改变文件权限
语法:chmod [-R] [权限操作] 文件或者目录
参数:[权限操作]具体为设置每种身份的权限操作,不同身份之间的权限设置用逗号隔开。
身份类型:u(user)、g(group)、o(others)、a(all)
操作类型:+(增加权限)、-(删除权限)、=(设置权限)
权限类型:r(read)、w(write)、x(execute)
给文件install.log的所有者赋予读、写、执行的权限,同级用户和非同组用户赋予读和执行的权限
[root@hs-uf21 ~]# chmod u=rwx,go=rxinstall.log
[root@hs-uf21 ~]# ll
-rwxr-xr-x 1root root 59020 Apr 10 20:32 install.log
给文件install.log的所有者、同级用户、非同组用户赋予读和写的权限
[root@hs-uf21 ~]# chmod a=rwinstall.log
[root@hs-uf21 ~]# ll
-rw-rw-rw- 1root root 59020 Apr 10 20:32 install.log
取消文件install.log同级用户、非同组用户的写的权限
[root@hs-uf21 ~]# chmod go-winstall.log
[root@hs-uf21 ~]# ll
-rw-r--r-- 1root root 59020 Apr 10 20:32 install.log
注意:如果要给目录及了目录下的所有文件赋予权限,可以使用-R参数。
四、文件与目录的权限
1.文件权限的意义
r(read):可读取此文件的实际内容。
w(write):可以编辑、新增或者是修改该文件的内容(但不可以删除该文件)。
x(execute):该文件可以被系统执行的权限。
注意:对于文件的“rwx”权限,主要都是针对“文件内容”来说的,与文件名的存在死心塌地否没有关系,因为文件记录的是实际的数据。
2.目录权限的意义
r(read):表示具有读取目录结构列表的权限,即可以查询该目录下的文件名数据。
w(write):表示具有更改目录结构列表的权限,即新建新的文件与目录、删除已经存在的文件与目录(不论该文件的权限为何)、将已经存在的文件或者目录进行重命名、转移该目录内的文件、目录、位置。
x(execute):表示用户能否进入该目录成为当前工作目录。
在oracle的根目录下创建一个目录files,并取消该目录的所有权限:
[root@hs-uf21 oracle]# mkdir files
[root@hs-uf21 oracle]# ll
drwxr-xr-x 2root root 4096 Apr 20 19:41 files
[root@hs-uf21 oracle]# chown -R oracle.oinstall files
[root@hs-uf21 oracle]# ll
drwxr-xr-x 2oracle oinstall 4096 Apr 20 19:41files
[root@hs-uf21 oracle]# chmod a-rwx files
[root@hs-uf21 oracle]# ll
d--------- 2oracle oinstall 4096 Apr 20 19:41files
用oracle用户进入、查看files目录,以及在files目录创建新的文件都会提示权限不足:
[oracle@hs-uf21 ~]$ oracle
[oracle@hs-uf21 ~]$ ll
d--------- 2oracle oinstall 4096 Apr 20 19:41files
[oracle@hs-uf21 ~]$ cd files
-bash: cd: files: Permission denied
[oracle@hs-uf21 ~]$ ll files
ls: files: Permission denied
[oracle@hs-uf21 ~]$ touch ./files/test.txt
touch: cannot touch `./files/test.txt': Permissiondenied
给目录files赋予可执行的权限,此时可以进入该目录,但是不可以创建新文件,也不可以ls查看该目录下的文件列表:
[oracle@hs-uf21 ~]$ chmod 100 files
d--x------ 2oracle oinstall 4096 Apr 20 19:41files
[oracle@hs-uf21 ~]$ cd files
[oracle@hs-uf21 files]$ touch test.txt
touch: cannot touch `test.txt': Permission denied
给目录files赋予可写和可执行的权限,此时可以进行该目录,也可以创建新文件,但不可以使用ls查看该目录下的文件列表:
[oracle@hs-uf21 ~]$ chmod 300 files
d-wx------ 2oracle oinstall 4096 Apr 20 19:41files
[oracle@hs-uf21 ~]$ cd files
[oracle@hs-uf21 files]$ touch test.txt
[oracle@hs-uf21 files]$ ls
ls: .: Permission denied
给目录files赋予可读、可写和可执行的权限,此时对该目录下所有文件进行各种操作:
[oracle@hs-uf21 ~]$ chmod 700 files
[oracle@hs-uf21 ~]$ cd files
[oracle@hs-uf21 files]$ ll
total 0
-rw-r--r-- 1oracle oinstall 0 Apr 20 19:54 test.txt
五、目录配置
FHS(Filesystem Hierarchy Standard)规范每个特定的目录下应该要放置什么样子的数据。
FHS依据文件系统使用的频繁与否与是否允许用户随意改动,将目录定义成四种交互使用的形态,如下:
1.可分享的:可以分享给其它系统挂载使用的目录
2.不可分享的:自己机器上运行的设备文件或者是与程序有关的socket文件等。
3.可变动的:经常改变的数据,例如登录文件等。
4.不可变动的:有些数据是不会经常变动的,跟随着distribution面不变动。
事实上FHS针对目录树架构仅定义出三层目录下应该放置什么数据,如下:
1./(root,根目录):与开机系统相关;
2./usr(UNIX Software Resource):与软件安装、执行相关;
3..var(variable):与系统运作过程相关。
根目录(/)的意义与内容
根目录与开机、还原、系统修复等操作有关,其它所有的目录都是由根目录衍生出来的,同时目录(/)所有的分区越小越好,且应该程序所安装的软件最好不要与根目录放在同一个内,如此不但性能较好,根目录所在文件系统也不容易发生问题。FHS定义的根目录下应该存在的了目录如下:
[/bin ]:放置系统执行文件的目录
[/boot ]:放置系统开机会使用的文件,包括Linux内核文件以及开机菜单与开机所需配置文件等
[/dev ]:在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中的
[/etc ]:系统主要的配置文件几乎都放置在这个目录
[/home ]:系统默认的用户主文件夹
[/lib ]:放置系统在开机是需要用到的函数库,以及在/bin或者/sbin下面的命令会调用的函数库
[/media]:放置可以删除的设备,包括软盘、光盘、DVD等设备都暂时挂载与此。
[/opt ]:放置第三方软件的目录,也可以放置在/usr/local下面
[/root ]:系统管理员(root)的主文件夹
[/sbin ]:放置系统开机过程中需要的命令,包括开机、修复、还原系统等命令。
[/srv ]:可以视为service的缩写,是一些网络服务启动之后,这些服务需要取胜的数据目录。如www、ftp等。
[/tmp ]:一般用户或者是正在执行的程序暂时存放文件的地方,这个目录任何用户都可以访问。
[/prod ]:这个目录是一个虚拟文件系统,它放置的数据都是在内存当中的,例如系统内核、进程、外部设备的状态及网络状态等。
[/sys ]:这个目录也是一个虚拟文件系统,平主要记录内核相关的信息。
操作系统软件资源(/usr)的意义与内容
依据FHS的基本定义,/usr里面存放可分享与不可变动的数据是操作系统相关的软件,而不用户的数据,因为系统默认的软件都放置在/usr下面,这个目录有点类似windows系统下有“C:\Windows”和“C:\Program files”这两个目录。系统刚安装完毕时,这个目录占用的空间最大。/usr的子目录一般如下:
[/usr/src ]:放置源代码
[/usr/bin ]:放置一般用户可以使用的命令,与/bin(开机过程相关的命令)不同。
[/usr/lib ]:包含各应用软件的函数库、目标文件、以及不被一般用户惯用的执行文件或者脚本。
[/usr/local ]:系统管理员在本机安装的第三方软件
[/usr/sbin ]:非系统正常运行所需要的系统命令。
[/usr/share ]:放置共享文件
[/usr/include]:C/C++等程序语言的头文件与包含文件
[/usr/X11R6 ]:放置XWindow系统重要数据。
/var的意义与内容
/var目录主要放置常态性变动的文件,包括缓存、登录文件、以及某些软件运行过程所产生的文件。/var目录常见的子目录如下:
[/var/lock ]:放置文件资源或者设备的锁
[/var/log ]:放置登录文件
[/var/run ]:某些程序或者服务启动后,会将它们的IID放置在这个目录下。
[/var/spool]:放置一些队列数据
[/var/cache]:应用程序本身运行过程产生的一些暂存文件。