Linux是多人多任务的环境,文件权限管理让各个用户具有保密的文件数据。Linux通常将文件可读写的身分分为三个类别:拥有者(owner)、所属群组(group)、其他人(other),三种身分各有读(read)、写(write)、执行(execute)等权限。
用户与用户组
Linux的用户有惟一的用户名和各自的登陆口令,多个用户可以同时操作Linux系统。考虑每位用户的隐私和工作环境需求,文件拥有者的角色就非常重要。用户可以将自己的文件设置成只有自己能够查看与更改,这样即使他人晓得这个文件的存在也没有权限去访问。
用户组是具有相同特征用户的逻辑集合。用户组的用户具有所属用户组的权限。每位用户都可以有多个用户组的支持。其他人是不属于用户组的用户。每位文件的拥有者、用户组与其他人的关系如下。
User1的文件的拥有者为User1,这个文件属于Group1用户组,User2可以共享组内User1的文件。User3对于User1就是陌生人,难以访问User1的文件。root其实是User1的陌生人,但仍可以访问User1的文件。
默认情况下,所有系统上的帐号和通常身分用户,以及root的信息都记录在/etc/passwd文件内,个人密码会记录在/etc/shadow文件内,所有的组名记录在/etc/group中。这三个文件不要随意删掉。
文件属性
了解Linux的文件属性,有个常用的命令ls,执行ls-al后,会列举当前所有的文件的详尽权限与属性(包括以.开头的隐藏文件)。
以框选的文件.bashrc为例,接出来瞧瞧每一栏都有哪些含意。
这种文件属性的最大用途是在数据安全性上。系统服务的文件一般只有root能够进行读写或执行,比如/etc/shadow管理了系统中的帐号数据,只有root能够获取文件内容,所以文件权限为----------。root基本不受系统的权限限制,所以可以进行读写。
更改文件属性与权限chgrp
想要更改一个文件的用户组,可以直接使用chgrp命令来更改(changegroup)。被更改的组名必需要在etc/group文件中才行,否则会报错。
chgrp [-R] dirname/filename ...
选项与参数:
-R :进行递归修改,即连同子目录下的所有文件、目录都更新成这个用户组
倘若要将目录下的.bash_history用户组设置为group1,可以执行命令chgrpgroup1.bash_history。
chown
chown可以更改文件的拥有者(changeowner),用户必须是系统中早已存在的帐号。chown命令还可以更改文件的用户组。
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录
选项与参数:
-R :进行递归修改,即连同子目录下的所有文件都修改
将.bash_history的拥有者更改为用户wcy,执行chownwcy.bash_history。
再将.bash_history的拥有者和用户组改回root,执行chownroot:root.bash_history。
chmod
文件权限的更改使用的是chmod命令。可以使用数字或符号来进行权限的更改。
chmod [-R] xyz 文件或目录
选项与参数:
xyz :数字类型的权限属性,为 rwx 属性数值的相加
-R :进行递归修改,即连同子目录下的所有文件都修改
上面提及过文件的类型和权限数据是-rwxrwxrwx的方式,权限数据中的九个权限每三个一组,可以用数字来表示各个权限:r:4w:2x:1,将每种身分各自的权限数字累加。假定文件的权限为-rwxrwx---:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
所以该文件的权限数字就是770。若是要将.bash_history的权限改为770,可以执行chmod770.bash_history。
权限数据分别是user,group和others三种身分,可以借ulinux赋予用户写权限,g,o来表示,再加上a来表示全部的身分。读写的权限就写成r,w,x。比如要设置.bash_history的文件权限为-rwxr-xr-x,u具有rwx的权限,g/o具有rx的权限,可以执行chmodu=rwx,go=rx.bash_history。注意u=rwx与go=rx之间没有空格,通过,相连。
倘若要将.bash_history更改回-rw-------权限,也可以执行chmodu-x,go-rwx.bash_history。
目录与文件的权限意义权限对于文件的重要性
文件是实际富含数据的地方,包括通常文本文件,数据库文件,二补码可执行文件等。权限对于文件的意义如下:
r(read) :可读取此文件的实际内容,如读取文本文件的文字内容。
w(write) :可以编辑,新增或是修改文件的内容(不包括删除该文件)。
x(execute) :具有可以被系统执行的权限。
Windows下边的文件借由扩充名判定是否具有执行的能力,比如.exe,.bat。但在Linux下,文件是否能被执行,是借由是否具有x权限来决定的,和文件名没有绝对的关系。对于文件的rwx来说,主要都是针对文件的内容而言。
权限对于目录的重要性
目录主要的内容在记录文件名列表,文件名与目录有强关联性。对于目录来说,rwx对目录的意义如下:
r :表示具有读取目录结构列表的权限。当你具有该权限时,就可以用 ls 命令把该目录的内容列表显示出来。
w :表示具有改动该目录结构列表的权限,也就是下面的权限。
建立新的文件或目录
删除已经存在的文件或目录
将已经存在的文件或目录进行更名
移动该目录内的文件、目录位置
x :表示用户能否进入该目录成为工作目录(当前目录)。
关于文件和目录的权限也可以用下边的表格理解。
比如假如要更改目录下某个文件的内容,须要先切换到该目录下执行命令,这时须要具备目录的x权限和文件的rw权限。若果是删掉文件,则须要目录的wx权限,与文件权限无关。
Linux文件种类与扩充名文件种类文件扩充名
Linux文件没有所谓的扩充名,一个Linux文件能不能被执行,与它的属性有关,和文件名没有关系。假如权限为x,就代表文件具有可以被执行的能力。但有可执行的权限和具有可执行的程序代码又是两回事了。一般处理文件还是会以适当的扩充名表示文件的种类。
文件名宽度限制
Linux下对传统的ext2,ext3,ext4文件系统和xfs文件系统而言,单一文件或目录的最大文件名为255字节,一个ASCII英语占一个字节,一个汉字占两个字节。
文件名限制
因为命令行模式的命令操作,设置文件名最好避开*?;&!{}|'"()[]`。文件名开头最好避开.-+,.是隐藏文件的前缀,-option之类的选项常会用到-+。
FHS
FilesystemHierarchyStandard(FHS)标准是Linux文件目录配置的根据,它的主要目标是希望让用户可以了解到已安装软件一般放置于那个目录下,所以它希望独立的软件开发商、操作系统制做者以及想要维护的用户都还能遵守FHS的标准。
FHS依照文件系统使用的频繁与否与是否容许用户随便修改,将目录定义成四种交互作用的形态:
以下是一些代表性的目录:
FHS针对目录树构架仅定义出三层目录下应当放置哪些数据:
根目录/的意义和内容
根目录是系统最重要的目录,所有的目录由根目录衍生,根目录也与启动、还原、系统修补等有关。FHS标准建议:根目录所在分区应当越小越好,不但性能较佳,根目录所在的文件系统也较不容易发生问题。
HFS要求必须存在的目录:
目录应放置文件内容
/bin
放置双人维护模式下能够使用的命令,可以被root和通常帐号使用,如:cat、chown、mkdir
/boot
放置启动会使用的文件,包括Linux内核文件以及启动选项与所需配置文件等
/dev
设备与插口设备都是以文件的方式储存在这个项目,读写目录下的个别文件就等于读写某个设备
/etc
系统主要的配置文件几乎都放到这个目录,通常用户可以查看各文件属性,但只有root就能更改
/lib
放置系统启动时会用到的函数库,以及/bin和/sbin目录下的命令会调用的函数库
/media
放置可删掉的设备,包括软驱、光盘、DVD等设备都暂时挂载于此
/mnt
想要暂时挂载个别额外的设备可以放置到这个目录
/opt
放置第三方辅助软件的目录
/run
放置系统启动后形成的各项信息
/sbin
启动过程须要的命令,包括启动、修复、还原系统的命令linux赋予用户写权限,如fdisk、ifconfig
/srv
网路服务启动后,须要使用的数据目录,如WWW、FTP等
/tmp
通常用户或是正在执行的程序暂时放置文件的地方,不可放置重要数据
/usr
放置UNIX操作系统的软件资源
/var
放置常常性变动的文件,包括缓存、日志文件、程序文件等
FHS建议存在的目录:
目录应放置文件内容
/home
系统默认的用户家目录。新增一个通常用户帐号时,默认的用户家目录还会规范到这儿。家目录有两种代号:~代表当前用户的家目录,~wcy代表用户wcy的家目录
/lib
拿来储存与/lib不同格式的二补码函数库,比如支持64位的/lib64函数库等
/root
系统管理员的家目录
还有几个Linux当中也很重要的目录:
目录应放置文件内容
/lost+found
使用标准的ext2、ext3、ext4文件系统格式时形成的目录,当文件系统发生错误时,将一些丢失的片断置于这个目录。假如使用的是xfs文件系统则不会存在这个目录
/proc
这个目录本身是一个虚拟文件系统sogou pinyin linux,放置的数据都在显存当中,如内核、进程信息等,本身不占硬碟空间
/sys
和/proc类似,也是一个虚拟文件系统,记录内核与系统硬件信息内容,包括已加载的内核模块与内核测量到的硬件设备信息等,同样不占硬碟容量
初期Linux在设计时,若发生问题,恢复模式一般仅挂载根目录,因而有五个重要的目录被要求与根目录放置在一起,分别是/etc、/bin、/dev、/lib、/sbin。如今Linux发行版将许多非必要的文件移出了/usr外,/usr越来越简约,恢复模式也能同时挂载/usr,五大目录的限制早已被打破。
/usr的意义和内容
usr是UNIXSoftwareResource的简写,是操作系统软件资源放置的目录,FHS建议所有的软件开发者将她们的数据合理地放置到这个目录下的子目录。
HFS要求必须存在的目录:
目录应放置文件内容
/usr/bin
通常用户才能使用的命令都置于这儿,FHS要求此目录下不应有子目录
/usr/lib
与/lib功能相同,/lib链接到此目录
/usr/local
系统管理员在本机安装自己下载的软件建议放在此处,以便管理
/usr/sbin
非系统正常运行所须要的系统命令,如网路服务器软件的服务命令。/sbin链接到此目录
/usr/share
放置只读的数据文件,包括共享文件。此目录下常见的目录有usr/share/man、usr/share/doc
FHS建议可以存在的目录:
目录应放置文件内容
/usr/games
与游戏相关的数据放置处
/usr/include
c/c++等程序语言的头文件与包含文件的放置处
/usr/libexec
不被通常用户常用的执行文本或脚本,比如X窗口下的操作命令
/usr/lib
与/lib文件相同,/lib链接到此处
/usr/src
通常源代码建议放置在这儿
/var的意义和内容
系统默认软件会安装在/usr下linux 内核,所以/usr目录在系统刚安装完毕时会占用最多的硬碟容量。/var主要针对常常性变动的文件,包括缓存、日志文件、程序文件等,在系统运行后才能渐渐占用硬碟容量。
HFS要求必须存在的目录:
目录应放置文件内容
/var/cache
应用程序运行过程中形成的一些缓存
/var/lib
程序本身执行时,须要使用的数据文件放置的目录
/var/lock
个别设备或文件资源一次只能被一个应用程序使用,因而要将该资源上锁确保只会被子一软件访问。此目录联通到了/var/run下
/var/log
这是日志文件放置的目录,是非常重要的目录。重要的文件有/var/log/messages,/var/log/wtmp等
/var/mail
放置个人电子邮箱的目录。这个目录也被放置到/var/spool/mail目录下
/var/run
个别程序或服务启动后,会将PID放置在这个目录,与/run相同。目录链接到/run
/var/spool
一般放置一些队列数据,即排队等待其他应用程序使用的数据。数据使用后一般会删掉
因为FHS仅定义出最下层/及次层/usr、/var内的目录内容,因而在其他子目录层级内,可以由开发者自行配置。更多关于FHS的内容可以查看文档fhs-3.0.pdf。
目录树
Linux下,所有的文件和目录都是由根目录开始,像树根一样分成一个一个的分支。这些目录配置方法称作目录树(directorytree),它的特点有:
绝对路径和相对路径
按照文件名的不同,可以将路径定义为绝对路径与相对路径。