1、用户与用户组
举个例子:假设有一家人,家里只有三兄弟,分别是王大毛、王二毛、王三毛,而这个家庭是登记在王大毛名下,所以“王大毛家里有三个人,分别是王大毛、王二毛、王三毛”,而且这三个人都有自己的房间,并且共同拥有一间客厅。假如还有一个人,名叫张小猪,它是张小猪家的人,与王家没有关系。这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远无法进入王家,更不要说进到王三毛的房间。不过,如果张小猪通过关系认识了王三毛,那么张小猪就可以通过王三毛进入王家。
用户的意义:由于王家三人各自拥有自己的房间,所以,虽然王二毛可以进入王三毛的房间,但是不能翻三毛的抽屉,因为抽屉里可能有三毛自己的私密东西,这是私人空间。
用户组:王家三个共同拥有客厅,所以王家三兄弟可以在客厅干一些事情,只要是客厅的东西,三人都可以使用。
(所以,三兄弟分别为三个用户,王大毛家就是所谓的用户组,而这三个用户是在同一个用户组里的。而这三个用户是在同一个用户组里,但我们可以设置权限,好让某些用户个人的信息不被用户组的拥有者查询,以保有个人私人空间,而设置用户组共享,则可以让大家共同分享。)
其他人:张小猪就是所谓的其他人。
root:“万能的天神”,可以到达他任何想去的地方
默认情况下,所有系统上的账号与一般身份用户和root信息都记录在/etc/passwd这个文件内,个人密码记录在/etc/shadow中,Linux所有的用户名都记录在/etc/group中。
Linux文件权限概念
Ⅰ、第1栏代表这个文件的类型与权限,共有10个字符。
第一个字符代表这个文件的类型(目录、文件或链接文件等)
- [d]:目录
- [-]:文件
- [l]:链接文件(link file)
- [b]:设备文件里面的可供存储的周边设备(可按块随机读写的设备)
- [c]:设备文件里的串行端口设备,例如键盘、鼠标(一次性读取设备)
接下来的字符,三个为一组,且均为[rwx]三个参数的组合(read,write,execute),注意这三个权限的位置不会改变,如果没有权限,就会出现[-]
第一组为文件拥有者具备的权限
第二组为加入此用户组账号的权限
第三组为非本人且没有加入用户组的其它账号的权限
Ⅱ、第2栏有多少文件名链接到此节点(inode)
每个文件都会将他的权限和属性记录到文件系统的inode中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到相同的一个inode号码
Ⅲ、第3栏表示这个文件或目录的拥有者账号
Ⅳ、第4栏表示这个文件所属的用户组
Ⅴ、第5栏表示这个文件的容量大小,默认单位:Bytes
Ⅵ、第6栏表示这个文件的创建日期或是最近的修改日期
如果这个文件被修改的时间离现在太久,那么时间部分会仅显示年份而已;如果想要显示完整的时间格式:ls -l --full-time,包括年、月、日、时间
Ⅶ、第7栏为这个文件名
如果文件名前多一个 . ,表示该文件为隐藏文件
Linux文件权限的重要性
- 系统保护的功能
- 团队开发软件或数据共享的功能
如何修改文件权限与属性
- chgrp:修改文件所属的用户组
- chown:修改文件拥有者
- chmod: 修改文件权限,SUID,SGID,SBIT等
语法:
- chgrp [-R] 用户组名称 dirname/filename ...
- chown [-R] 用户名称 dirname/filename
- chown [-R] 用户组名称:用户名称 dirname/filename (chown [-R] 用户组名称.用户名称 dirname/filename)
- -R:进行递归修改,连同子目录下的所有文件、目录都更新。
修改 anaconda-ks.cfg 所属的用户组为yan
2、修改 anaconda-ks.cfg 所属的用户为yan
同时修改 anaconda-ks.cfg 所属用户和用户组为root
文件权限修改使用chmod,权限的设置方法有两种,分别可以使用数字或者符号来进行权限的修改。
使用数字类型修改文件权限
Linux文件的基本权限有9个,分别是拥有者(own)、所属群组(group)、其他人(others)三种身份各自拥有自己的读(read)、写(write)、执行(execute)权限。
文件权限字符为【-rwxrwxrwx】,三个三个一组,可以使用数字来代表各个权限,各权限的数字对照表:
r:4w:2x:1
每种身份各自的三个权限数字是需要累加的,例如当权限为 【-rwxrwx---】数字则是:
owner = rwx = 4+2+1 = 7group = rwx = 4+2+1 = 7others = --- = 0+0+0 = 0
所以,设置权限时,该文件的权限数字就是770,修改权限命令chmod语法:
- chmod: [-R] xyz 文件或目录
- xyz:上面提到的数字类型的权限属性,为rwx属性数值相加
将 anaconda-ks.cfg 文件权限属性都设置启用
2、将 anaconda-ks.cfg 文件权限属性改回原来属性
符号类型修改文件权限
基本上就九个权限分别是user,group,others三种身份,那么我们就可以借由u、g、o来代表三种身份的权限,此外,a代表all即全部的身份。那么读写执行的权限就可以写成r、w、x,也就可以使用下面这种方式:
chmod | u g o a | +(加入) - (移除) =(设置) | r w x | 文件或目录 |
设置anaconda-ks.cfg 文件的 user(u)具有所有权限,group(g)和others(o)具有可读可执行权限
设置anaconda-ks.cfg 文件使user(u)不具有执行权限,group(g)和others(o)不具有读权限
设置anaconda-ks.cfg 文件所有用户都不具有 执行权限
目录与文件的权限意义
- 权限对文件的重要性
- r(read):可读取此文件的实际内容
- w(write):可以编辑、新增或使修改文件的内容(但不含删除该文件)
- x(execute):该文件具有被该系统执行的权限
注:在Windows下面一个文件是否具有可执行的能力是通过扩展名来判断的,eg:.exe、.bat、.com等,但是在Linux下面,文件是否能被执行,是通过【x】这个权限来决定的,跟文件名没有绝对的关系。文件具有【w】权限时,可以编辑、新增或使修改文件的内容的权限,但不具有删除该文件本身的权限,对于文件的rwx来说,主要是针对文件的内容而言,与文件名的存在与否没有关系,因为文件记录的是实际的数据。
- 权限对目录的重要性
文件时存放数据的所在,目录的主要内容在记录文件名列表,文件名与目录有强烈的关联。
- r(read contents in directory):表示具有读取目录结构列表的权限,可以查询该目录下的文件名数据,所以就可以利用ls这个命令将该目录的内容列表显示出来
- w(modify contents of directory):具有改动该目录结构列表的权限
1、建立新的文件与目录
2、删除已经存在的文件与目录(不论该文件的权限是什么)
3、将已存在的文件或目录进行更名
4、移动该目录内的文件、目录位置
- x(access directory): 表示用户能否进入该目录成为工作目录,所谓的工作目录就是你目前所在的目录
注:能否进入某一目录,只与该目录的x权限有关,如果不具有x权限,那么就无法切换到该目录下,也就无法执行该目录下的任何命令,即使具有该目录的r和w权限。
Linux目录配置
Linux目录配置的依据——FHS
(Filesystem Hierarchy Standard)
根据FHS的标准文件指出,他们的主要目的是希望用户可以了解到已安装软件通常放置在哪个目录下,所以他们希望独立的软件开发商,操作系统制作者以及想要维护系统的用户,能够准许FHS标准。
将目录定义为四种交互作用的形态:
可分享(shareable) | 不可分享(unshareable) | |
不变(static) | /usr(软件存放处) | /etc(配置文件) |
/opt(第三方辅助软件) | /boot(启动与内核文件) | |
可变动(variable) | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
上表中的目录就是一些代表性的目录。
- 可分享:可以分享给其它系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上的其他主机挂载用的目录;
- 不可分享:自己机器上运行的设备文件或是与程序有关的socket文件等,由于只与自身机器有关,所以当然不适合分享给其他主机;
- 不变:有些数据是不会经常变动的,跟随着发行版而不变动,例如库函数,文件说明,系统管理员所管理的主机服务配置文件;
- 可变动: 经常修改的数据,例如日志文件,一般用户可自行接收的新闻组等;
事实上,FHS针对目录树架构仅定义出三层目录下面该放置什么数据而已,分别是下面这三个目录的定义:
- /(root,根目录):与启动系统有关;
- usr(unix software resource):与软件安装/执行有关;
- /var(variable):与系统运行过程有关;
注:在Linux中,root的意义很多,以账号的角度来看,指的是系统管理员身份;以目录的角度来看,指的是根目录,就是 / 。
根目录(/)的意义与内容
根目录是系统中中重要的一个目录因为不但所有的目录都是由根目录衍生而来,同时根目录也与启动、还原、系统修复等操作有关。FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好,如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
FHS定义出根目录(/)下面应该有这些子目录的存在才好,即使没有物理目录,FHS也希望至少有链接目录(link)存在才好。
- 第一部分:FHS要求必须要存在的目录
/bin | 放置的是单人维护模式下还能够被使用的命令,在/bin下面的命令可以被root与一般账号所使用,主要有cat、chmod、chown、date、mv、mkdir、cp、bash等常用命令。 |
/boot | 放置启动会使用到的文件 |
/dev | 任何设备与接口设备都是以文件的形式存在于这个目录中 |
/etc | 系统主要的配置文件几乎都放置在这个目录中 |
/lib | 放置在启动时会用到的库函数,以及在/bin或/sbin下面的命令会调用的库函数 |
/media | 里面放置的是可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此 |
/mnt | 暂时挂载某些额外的设备 |
/opt | 给第三方辅助软件放置的目录 |
/run | 早期的FHS规定系统启动后产生的各项信息应该要放置到/var/run目录下,新版的FHS则规范到/run下,由于/run可以使用内存来模拟,因此性能上会好很多 |
/sbin | 放在/sbin下面的为启动过程中所需要的,里面包括了启动、修复、还原系统所需要的命令 |
/srv | 一些网络服务启动后,这些服务所需要使用的数据目录 |
/tmp | 让一般用户或正在执行的程序暂时放置文件的地方 |
/usr | 第二层FHS设置 |
/var | 第二层FHS设置,主要为放置变动性的数据 |
- 第二部分:FHS建议可以存在的目录
/home | 系统默认的家目录,新增一个一般用户账号时,默认的用户家目录都会规范到这里来
|
/lib | 用来存放与/lib不同的格式的二进制库函数 |
/root | 系统管理员(root)的家目录 |
事实上,FHS针对根目录所定义的标准就就仅有上面的东西,下面是几个在Linux中也非常重要的目录:
/lost+found | 这个目录是使用标准的ext2、ext3、ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是xfs文件系统的话,就不会存在这个目录 |
/proc | 这个目录本身是一个虚拟文件系统,他放置的数据都是在内存当中,例如系统内核、进程信息、外界设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间 |
/sys | 和/proc非常类似,是一个虚拟的文件系统,主要也是记录内核与系统硬件信息相关的内容包括目前已加载的内核模块与内核检测到的硬件设备信息等,同样也不占硬盘容量 |
/usr的意义与内容
usr是unix software resource的缩写,也就是UNIX操作系统软件资源放置的目录,而不是用户的数据,FHS建议所有软件开发者,应该将他们的数据合理地分别放置到这个目录下的子目录,而不要自行建立该软件自己独立的目录。因为是所有系统默认的软件都会放置到/usr下面,因此这个目录有点像windows系统“C:\Windows\(当中一部分)+ C:\Program Files\”这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。一般来说,/usr的子目录建议有下面这些:
- 第一部分:FHS要求必须要存在的目录
/usr/bin/ | 所有一般用户能使用的命令都放在这。目前Centos7已经将全部的命令放置于此,而使用链接文本的方式将/bin链接至此,FHS要求在此目录下不应该有子目录 |
/usr/lib/ | 基本上与/lib功能相同,所以/lib就是链接到此目录的 |
/usr/local/ | 系统管理员在本机安装自己下载的软件(非发行版默认提供者),建议安装到此目录,便于管理 |
usr/sbin/ | 非系统正常运行所需要的系统命令。目前/sbin链接到此目录中 |
usr/share/ | 主要放置只读的数据文件当然也包括共享文件,这个目录下放置的数据几乎不分硬件架构均可读取的数据,因为几乎都是文本文件 |
- 第二部分:FHS建议可以存在的目录
/usr/games/ | 放置与游戏比较相关的数据 |
/usr/include/ | 放置头文件与包含文件 |
/usr/libexec/ | 放置某些不被一般用户常用的执行文件或脚本等 |
/usr/lib | 与/lib |
/usr/src/ | 放置源代码,内核源代码则建议放在/usr/src/Linux/目录下 |
/var的意义与内容
如果说/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录,因为/var主要针对经常变动性的文件,常见的子目录有:
- 第一部分:FHS要求必须要存在的目录
/var/cache/ | 应用程序本身运行过程中会产生的一些缓存 |
/var/lib/ | 程序本身执行的过程中,需要使用到的数据文件放置的目录,在此目录下各自的软件应该有各自的目录 |
/var/lock/ | 某些设备或是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就得要将该设备上锁,以确保该设备只会给单一软件使用。目前此目录已经挪到/run/lock/中 |
/var/log/ | 放置日志文件 |
/var/mail/ | 放置个人电子邮箱,不过这个目录也被放置到/var/spool/mail目录中,通常这两个目录是互为链接文件 |
/var/run/ | 某些程序或是服务启动后,会将他们的PID放置在这个目录下,与/run相同,这个目录连接到/run目录 |
/var/spool/ | 通常放置一些队列数据,就是排队等待其他程序使用的数据,这些数据被使用后通常都会被删除 |
目录树
在Linux下面,所有的文件与目录都是由根目录开始,那是所有目录与文件的源头,然后再一个一个的分支下来,有点像是树状,因此称这种目录配置方式为:目录树
主要特点有:
- 目录树的起始点为根目录(/,root)
- 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统,例如,可以利用Network File System(NFS)服务器挂载某特定目录等
- 每个文件在此目录树中的文件名都是独一无二的
绝对路径与相对路径
- 绝对路径:由根目录(/)开始写起的文件名或目录名称
- 相对路径: 相对于目前路径的文件名写法
目前在/home这个目录下,如果想进入/var/log/这个目录:
1、cd /var/log(绝对)2、cd ../var/log(相对)
因为在/home下面,要返回到上一层(../)之后,才能继续往/var来移动
- .:代表当前的目录,也可使用./来表示
- ..:代表上一层目录,也可使用../来表示
例题:如何先进入/var/spool/mail/目录,再进入到/var/spool/cron目录?
- cd /var/spool/mail
- cd ../cron
来源地址:https://blog.csdn.net/m0_54929728/article/details/129567067