Linux基础学习--linux的文件权限与目录配置
linux的文件权限与目录配置
1.用户与用户组
在Linux中,每个文件都有相当多的属性和权限,其中最重要的概念就是文件的拥有者。
1.1 文件拥有者
Linux是一个多人多任务的系统,常常有多人共用一台主机的情况出现,因此在系统中可以设置多个用户及用户组,以此来保护每个人的隐私。
对于一个文件的拥有者,他如果设置只有自己才能看和修改这个文件,其他人就无法查看和修改它。
1.2 用户组
用户组一般在团队协作时被使用。在一个用户组中,我们既可以允许组内成员查看和修改自己的文件,以便于完成团队任务,也可以私有自己的文件,保护自己的隐私,并且可以设置组外的成员对组内的文件没有任何权限。而对于一个用户来说,它可以加入多个用户组。
1.3 其他人
一个用户(User),所属群组(Group),以及不属于用户组的其他人(Others)。
一个用户的文件,同属于这个用户的用户组,组外的其他人对于这个文件都是陌生人。
在其中有个例外,就是root用户,root用户在Linux系统中拥有至高无上的权利,他可以任意查看修改任何文件,拥有相当万能和危险的力量。
Linux用户身份和用户组记录文件
Linux系统中,默认情况下,以下三个文件是Linux系统中账号,密码,用户组信息的集中地:
/etc/passwd
文件中,所有系统上的账号和一般身份用户,以及root用户的相关信息,
/etc/shadow
文件中:记录个人的密码。
/etc/group
文件中:记录Linux中所有的组名。
2.linux文件权限概念
初学Linux时常常遇到的Permission deny问题,就是权限不足的意思。
2.1 Linux文件属性
在Linux中,使用命令ls可以查看当前目录下的所有文件。使用su -
来切换到root用户,再使用ls -al
就会得到以下形式:
-rw-r--r--. 2 root root 1024 May 4 18:00 test.txt
【 权限 】【链接数】【拥有者】【用户组】【文件容量】【 修改日期 】【文件名】
-
在学习时,建议使用root用户,可以用
su -
来切换到root用户,exit来退回到原用户。 -
第一栏:代表这个文件的类型和权限 ‘’ -rw-r–r-- " 一共有十个字符
- 第一个字符 代表文件是目录,文件,还是链接文件
- 为【d】时是目录
- 为【-】时是文件
- 为【|】时是链接文件
- 为【b】时是设备文件内可供存储的周边设备
- 为【c】时是设备文件内的串行端口设备,如键盘鼠标
- 接下来的字符中,三个为一组,均为【rwx】的组合,r表示可读(read),w表示可写(write),x表示可执行(execute),无对应权限时,就用
-
代替。- 第一组表示文件拥有者可具备权限。
- 第二组表示加入此用户组的账号的权限。
- 第三组表示非本人且没有加入本用户组的其他账号的权限。
- 第一个字符 代表文件是目录,文件,还是链接文件
-
第二栏:表示有多少文件名链接到此节点
- 每个文件都会把它的权限和属性记录到文件系统的incode中
-
第三栏:表示这个文件或目录的拥有者账号。
-
第四栏:表示这个文件的所属用户组。
-
第五栏:表示这个文件的大小,默认大小为Bytes。
-
第六栏:表示文件的创建日期或者最近的修改日期。
-
第七栏:表示这个文件的文件名。如果文件名前面有【.】,表示这个文件是隐藏文件。
2.2 修改文件属性与权限
chgrp:修改文件所属用户组
chgrp即是change group
的缩写,它的一般用法为:
chgrp [-R] 新用户组名 目录名/文件名
- -R:即进行递归(recursive)修改,连同子目录下的所有文件,目录都更新为这个用户组。
其中新用户组名必须存在于/etc/group
文件中。
chown:修改文件拥有者
chown即是change owner
的缩写,它的一般用法为:
chown [-R] 新用户名[:用户组] 目录名/文件名
- 即可以只写新用户名修改文件拥有者,也可以写
新用户名:用户组名
来修改文件拥有者和用户组。
用户名必须存在于/etc/passwd
文件中
chmod:修改文件权限
chmod来修改文件的权限,有两种设置方法,分别是数字和符号:
- 数字类型修改文件权限
Linux文件的基本权限有9个,分为三组:拥有者(owner),所属群组(group),其他人(others)。每组各有自己的读(read),写(write),执行(execute)权限。整体权限字符为【-rwxrwxrwx】。
每种权限都可以用数字代替:
r:4
w:2
x:1
那么每种权限组合就可以用数字和表示出来:
rwx = 7
-wx = 3
...
r-- = 4
...
--- = 0
整体权限字符就可以直接用数字表示:
-rwxrw-r-- 表示为 764
就可以用chomd进行设置
chomd [-R] xyz 文件名或目录
- 符号类型修改文件权限
在符号类型修改中:
对象 | 操作符 | 权限类型 | 说明 | |
---|---|---|---|---|
u | 指拥有者(user) | |||
g | + | r | 为用户组添加读权限 | |
chmod | o | - | w | 为其他人移除写权限 |
a | = | x | 设置全部用户仅有执行权限 |
具体命令为
chomd u=rwx,g+rw,o-r 文件名
2.3.目录和文件的权限意义
在linux系统中,文件权限对于数据安全非常重要,而权限对于目录和文件是不同的。
- 权限对文件的重要性
文件就是实际含有数据的地方,包括一般文本文件,数据库文件,二进制可执行文件等。
权限对于文件:- r(read):可以读取此文件的实际内容,如读取文本文件的文字内容等。
- w(write):可以编辑,新增或修改该文件的内容(不包含删除该文件)。
- x(execute):该文件有可以被系统执行的权限。
- 在Linux中,一个文件是否可以被执行,仅由x权限决定,与文件名没有决定关系。
- 权限对目录的重要性
目录主要的内容在记录文件名列表,文件名和目录有强烈的关联。对于目录来说权限的意义有些不同: - r (read contects in dirctory)
表示具有读取目录结构列表的权限,具有该权限时,可以查询该目录下的文件名数据。 - w (modify contects of directory)
表示具有改动该目录结构列表的权限,也就是- 建立新的文件和目录。
- 删除已经存在的文件或目录(无视该文件或目录的权限)。
- 将已存在的文件或目录改名。
- 移动该目录内的文件或目录的位置。
- x (access directory)
表示具有用户进入该目录成为工作目录的权限,
总结一下:
组件 | 内容 | r | w | x |
---|---|---|---|---|
文件 | 详细数据data | 读取文件内容 | 修改文件内容 | 执行文件内容 |
目录 | 文件名 | 读取文件名 | 修改文件名 | 进入该目录的权限 |
2.4.linux文件种类与拓展名
文件种类
- 常规文件(regular file):第一个属性为 - ,就是一般进行读写的文件。根据文件内容还可以继续分类:
- 纯文本文件(ASC||):内容为人类可以直接读到的数据,如数字,字母等。
- 二进制文件(binary):Linux中的可执行文件,系统仅可认识并执行此类文件。
- 数据文件(data) :在程序运行过程中会读取的特定格式的文件。
- 目录(directory):第一个属性为d。
- 链接文件(link):第一个属性为l,类似于快捷方式。
- 设备与设备文件(device):与系统周边及存储等相关的一些文件,通常都集中在/dev目录下,通常又分为两种:
- 区块(block):第一个属性为b。就是一些存储数据,以提供系统随机存取的接口设备,举例来说硬盘和软盘就是。
- 字符(character):第一个属性为c,亦是一些串行端口的接口设备,如键盘,鼠标等。
- 数据输送软件(FIFO):第一个属性为p。主要目的为解决多个程序同时读写一个文件所造成的错误问题。
Linux文件拓展名
一个文件能不能被执行,与它的第一栏的十个属性有关,与文件拓展名根本一点关系都没有。
一个文件能否执行成功,只和两个要素有关:
- 文件是否是Linux可执行的类型
- 文件是否有被执行的权限
但在Linux中,为了借由拓展名来了解该文件是什么东西,通常还是会以适当拓展名来表示文件是什么种类。
以下是常用拓展名: - *.sh:脚本或批处理文件(scripts),因为批处理文件使用shell写成,所以拓展名就编成 .sh。
- Z,.tar,.tar.gz,.zip,*.tgz:经过打包的压缩文件,不同的压缩文件gunzip,tar等,产生了不同的后缀名。
- .html,.php:网页相关文件,分别代表HTML文件语法和PHP语法的网页文件。.html的文件可以使用网页浏览器直接开启。.php文件可以通过客户端的浏览器来服务端浏览,以得到运算后的网页结果。
3.linux目录配置
3.1Linux目录配置的依据——FHS
FHS的主要目的是希望用户可以了解到以安装软件通常放置与哪个目录下,所以制定了一个Linux目录配置的标准。
FHS依据文件系统使用的频繁与否与是否允许用户随意修改,而将目录定义成为四种可交互作用的形态:
可分享 | 不可分享 | |
---|---|---|
不变 | /usr (软件存放处) | /etc (配置文件) |
/opt (第三方软件) | /boot (启动与内核文件) | |
可变动 | /var/mail (用户邮箱) | /var/run (程序相关) |
/var/spool/news (新闻组) | /var/lock (程序相关) |
这四种类型为:
- 可分享:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用到目录。
- 不可分享:自己机器上面运行的设备文件或是与程序相关的socket文件等,仅与自身机器有关,不适合分享给其他主机。
- 不变:有些数据是不会经常变动的,跟随着发行版而不变动。
- 可变动:经常修改的数据,例如日志文件,一般用户可自行接受的新闻组等。
事实上,FHS针对目录树架构仅定义出三层目录下该放什么: - /(root,根目录):与启动系统有关。
- /user:与软件安装/执行有关。
- /var:与系统运行过程有关。
根目录(/)的意义与内容
根目录是整个系统中最重要的一个目录,所有的目录都由根目录衍生,同时根目录也与启动,还原,系统修复有关。
因为根目录十分重要,以此根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区。
在FHS定义下,根目录下应该有下面这些目录:
第一部分:FHS要求必须安装的目录。
- /bin:放置在单人维护模式下还能被使用的命令,可以被root与一般账号所使用,主要有:cat,chmod,chown,date,mv等
- /boot:主要放置启动会使用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用文件名为:vmlinuz。
- /dev:在Linux系统中,任何设备与接口设备都是以文件的形式存在于这个目录中。只要通过读写这个目录下的某个文件,就等于读写某个设备。
- /etc:系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件,各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但是只有root用户有权力修改。FHS建议不要放置可执行文件在这个目录中。还规范了几个重要的目录最好要在/etc/目录下:
- /etc/opt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件。
- /etc/X11/(建议):与X Window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件。
- /etc/sgml/(建议):与SGML格式有关的各项配置文件。
- /etc/xml/(建议):与XML格式有关的各项配置文件。
- /lib:其中放置的是在启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库而已。FHS要求以下目录必须存在
- /lib/modules/:这个目录主要放置可抽换式的内核相关模板(驱动程序)。
- /media:目录下放置的是可删除的设备,包括软盘,光盘,DVD等设备都暂时挂载于此。
- /mnt:放置一些想要暂时挂载的额外的设备。
- /opt:这个是给第三方辅助软件放置的目录。
- /run:放置系统启动后所产生的各项信息。
- /sbin:放置的是在系统启动过程中所需要的,包括启动,修复,还原系统所需要的命令。至于某些服务器软件程序,一般放置在/usr/sbin/中。本机自行安装的软件产生的系统执行文件,放置到/usr/local/sbin中。常见命令包括:放fdisk,fsck,ifconfig,mkfs等。
- /srv:是一些网络服务启动之后,这些服务所需要使用的数据目录。
- /tmp:这是让一般用户或是正在执行的程序暂时放置文件的地方。这个目录是任何人都可以存取的需要定时清理。FHS建议在启动时要将/tmp下的数据全部删除。
第二部分:FHS建议可以存在的目录 - home:系统默认的家目录,默认的用户家目录都会规范到这里。
* ~:代表目前这个用户的家目录。
* dmatsai:代表dmatsai的家目录。 - /lib:用来存放与/lib不同的格式的二进制函数库,例如支持64位的/lib64函数库等。
- /root:系统管理员(root)的家目录。
有些FHS标准外的目录需要注意: - lost+found:这个目录是使用ext2,ext3,ext4文件系统格式才会产生的目录,目的时当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是xfs系统就不会存在此目录。
- proc:这个目录本身是一个虚拟文件系统,它放置的数据都是在内存中,例如系统内核,进程信息,外接设备的状态及网络状态,所有数据都在内存中,所以本身不占任何空间。
- sys:与/proc非常类似,也是虚拟的文件系统,主要记录内核和系统硬件信息相关的内容。同样不占硬盘容量。
- usr:下文中详细讲解。
- var:下文中详细讲解。
/usr的意义与u内容
依据FHS的基本定义,/usr里面放置的数据属于不可分享与不可变动。
/usr并非user的缩写,usr为UNIX Software Resource 的缩写,也就是UNIX操作系统软件资源所存放的目录,并不是用户的数据。所有系统默认的的软件都会放置到/usr下面。一般来说/usr的子目录建议有下面这些:
第一部分:FHS要求必须存在的部分
- /usr/bin/:所有一般用户能够使用的命令都放在这里。FHS要求在此目录下不应该有子目录。
- /usr/lib/:基本上,与/lib功能相同。
- /usr/local/:系统管理员在本机安装自己下载的软件时,建议安装到此目录。
- /usr/sbin/:非系统正常运行所需要的系统命令。
- /usr/share/:主要放置只读的数据文件,也包括共享文件,在这个目录下放置的数据几乎是不分硬件架构均可以读取的数据,几乎都是文本文件。还有些常见的子目录:
- /usr/share/man:在线帮助文件。
- /usr/share/doc:软件的说明文档。
- /usr/share/zoneinfo:与时区有关的时区文件。
第二部分:FHS建议可以存在的目录
- /usr/games/:与游戏比较相关的数据存放处。
- /usr/include/:c/c++等程序语言的头文件与包含文件放置处。
- /usr/libexec/:某些不被一般用户常用的执行文件或脚本。
- /usr/lib:与/lib作用相同。
- /usr/src/:一般建议把源代码放置到这里。内核源代码放置到/usr/src/Linux/目录下。
/var的意义与内容
/var是在系统运行后会逐渐占用硬盘容量的目录。/var目录主要针对于经常性变动的文件,包括缓存(cache),日志文件(log file),以及某些软件运行所产生的文件。常见子目录有:
第一部分:FHS要求必须要存在的目录
- /var/cache/:应用程序本身运行过程中会产生的一些缓存。
- /var/lib/:程序本身执行过程中,需要使用到的数据文件所放置的目录。在此目录下的各自的软件应该要有各自的目录。
- /var/lock/:某些设备或者文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的情况,因此就得要将该设备上锁,以确保该设备只会给单一软件所使用。
- /var/log/:相当重要。这是日志文件放置的目录。
- /var/mail/:放置个人电子邮箱的目录。
- /var/run/:某些程序或者服务启动后,会将它们的PID放置到该目录下。
- /var/spool/:这个目录通常放置一些队列数据,所谓的队列就是需要排队等待其他进程使用的数据,这些数据使用后都会被删除。
3.2 目录树
在Linux下,所有的文件和目录都是有根目录开始,它是所有目录和源文件的源头,再一个个分支出其他节点,称这种目录配置方式为:目录树。
- 目录树的启动点为根目录(/,root)
- 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统。
- 每一个文件在此目录树中的文件名都是独一无二的。
3.3 绝对路径与相对路径
根据文件名写法的不同,也可以将所谓的路径定义为绝对路径与相对路径。
-
绝对路径:由根目录(/)开始写起的文件名或目录名称,如
/home/dmtsai/.bashrc
; -
相对路径:相对于目前路径的文件名写法。
-
.:代表当前的目录,也可以用. /表示;
-
…:代表上一层目录,也可以用…/来表示;