第一周
1 制作一个教程,说明vmware软件如何下载安装。安装rocky 系统, ubuntu 系统,并挑选一个中意的远程工具,演示如何通过远程IP登入系统。
*进入vimware官网下载
https://blogs.vmware.com/workstation/2022/11/announcing-vmware-workstation-17-pro-and-player.html
因为之前就已经安装好了

在这里新建虚拟机
去rockey Linux社区下载镜像iso文件
https://www.rockylinux.cn/download

这里下载minimal x64架构
下载Ubuntu映像文件
https://ubuntu.com/download/desktop
之后去xshell官网下载远程链接的工具
https://www.xshell.com/zh/xshell/
下载xhsell完成后启动虚拟机

在这里新建会话

在这里填写对应虚拟机的ip地址 选择ssh协议进行链接

填写root 输入密码后进行登录

2.总结什么是shell ,以及常见的shell
什么是shell

Shell是Linux系统的用户界面提供了用户与内核进行交互的一种接口,可以接收用户输入的命令并把它送入内核执行。
Shell也被称为Linux的命令解释器,Shell本身是一个程序,将用户输入的命令行进行拆解为命令名与参数。接着根据命令名找到对应的要执行的程序,将刚刚解析的参数传给该程序并执行。
Shell是一种高级的程序设计语言,有变量,函数,条件判断,循环等
因此市面上会有各种版本的shell
GNU:Linux标准的shell

显示所有shell

3. 结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法
获得帮助
whatis & whereis
whatis 使用数据库来显示命令的简短描述,以及对应的man手册的章节
刚装完系统此命令不可用,数据需要初始化
如果需要立即使用,可手动初始化mandb
whereis 可以列出命令或系统文件的路径以及对应的man手册的文档路径

查看命令的帮助
### 内部命令的帮助
内部命令都在bash中,可以在man手册中查看全部的bash信息

使用type查明history命令为内部命令

相反ls外部命令都不行
外部命令及软件帮助
`command --help`

man命令
即manual的简写,是Linux系统中的帮助手册和文档
man是一个外部命令,读取的文件一般位于/usr/share/man/
几乎每个页面都有man的页面
man页面的分组
不同类型的帮助成为不同的章节 统称为Linux手册
标准man手册一般有以下几个章节:
1.可执行程序或shell命令
2.系统调用(内核提供的函数)
3.库调用
4.特殊文件
5.文件格式和规范
6.游戏
7.杂项
8.系统管理命令
9内核API
man命令的常见用法
man passwd 默认打开第一章的帮助1

左上角显示第一章
man -f passwd 显示passwd所有章节



指的是man 第一章的描述信息q
man -w ls 显示ls的man文件路径
info命令
不带参数默认进入首页,整个结构类似一个网站,有导航链接跳转。
info ls

4. 总结linux文件系统目录结构和目录的功能

| 目录 | |
|---|---|
| /bin | 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。 |
| /etc | 存放系统管理和配置文件 |
| /home | 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 |
| /usr | 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。/usr/x11r6 存放x window的目录/usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc Linux文档 /usr/include linux下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库 |
| /opt | 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。 |
| /proc | 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 |
| /root | 超级用户(系统管理员)的主目录(特权阶级o) |
| /sbin | 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。 |
| /dev | 用于存放设备文件。 |
| /mnt | 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。 |
| /boot | 存放用于系统引导时使用的各种文件 |
| /lib | 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。 |
| /tmp | 用于存放各种临时文件,是公用的临时文件存储点。 |
| /var | 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。 |
| /lost+found | 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里 |
/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 超级管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公共的临时文件存储点
/root 系统管理员的主目录
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统
/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录,其中包含:
/usr/x11R6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库根文件系统
5.总结文件操作常见的命令和文件夹常见操作和命令
ls
列出文件和目录内容
ls -a 全部的文件连同隐藏包括 . ..
ls -A 不包括. ..
ls -d 仅列出目录本身

ls -l 长数据串,包含文件的属性与权限
ls -h 将文件大小以人类易读的形式列出
ls -S 以文件大小排序

ls -t 按照时间排序,而不是文件名
ls --color=auto:让系统依据设置判断是否有颜色,Rockey中系统已经自动设置该别名

stat
查看文件状态
文件分为两个部分:元数据和内容
元数据:文件或目录的属性(所属组 修改时间等)

元数据中有三个时间戳:
atime:访问时间,读取文件时会更新,但只会更新间隔24个小时以后或者更新了mtime则随之更新。
mtime:写入内容修改等
ctime:元数据发生变化
stat -f 显示相关的文件系统
file
**确定文件内容**
linux不同于Windows,Linux的后缀名不具有参考性,用file进行查询
file -b 不显示查询的文件名


file -f
从文件中获得想要处理的文件名(创建dir.txt 并在里面写入文件或目录的路径)

Linux与Windows文本格式的区别:
在Windows中创建一个文本文件并上传至Linux rz命令
yum install -y lrzsz 安装rz sz命令
在Windows中创建txt文件,使用rz命令上传后
cat -A win.txt Linux.txt

Linux多了一个回车符
安装转换工具将win的文本格式转换为Linux
yum install dos2unix

文件通配符
用于匹配多个文件,方便批量管理文件
常见的通配符



{}一般用于创建 []用于匹配(满足括号中任意一个都匹配)
一些基本的操作


创建空文件和刷新时间
touch
touch -a改变atime,ctime
touch -m改变ctime ,mtime

这里不加参数 stat查看三个时间都被改变了
touch -h:若touch的文件为软链接若不加参数默认是操作其指向的文件,此选项是表示链接文件本身

touch -r 将某个文件的访问时间和修改时间作为当前文件的访问时间和修改时间
复制文件和目录
cp命令
cp [option] source destination
cp [option] source directory
cp [option] -t direction source (交换前后顺序)
cp -i 若目标文件已存在 询问是否覆盖(Rockey中默认cp为cp -i)

cp -r 递归复制,一般用于目录(目录-目录)

cp -a 保留所有属性(一般cp文件后 文件的所属用户和用户组会发生改变 所以-a不会改变前后的属性)

当复制/dev/zero下的字符文件时如果不使用cp -a保留所有属性会出错

cp -s 非复制文件,创建软链接


cp -p 同时复制文件的访问时间,修改时间,权限

当目录不存在时(此时dirb并不存在)

此时dirb为一级目录 再次往里面复制dira并不会覆盖dirb

再次复制,会提示覆盖提示

并不存在可以将目录cp到文件
cp -b复制时产生备份
cp --backup=numbered复制一次备份一次 上面的命令复制多次时会复制之前的备份
移动和重命名文件
mv
在同一分区移动数据,速度会很快,数据位置没有发生变化
在不同分区移动数据,速度相对较慢,数据位置发生了变化
可参考Windows系统
mv -b如果目标存在,先备份


mv 也可进行多个文件移动

与cp不同 若目标目录不存在并不会主动创建,而是改名,dird事先并不存在。


mv -n:当a目录的文件移动至b目录时 若两个目录有相同的文件则不覆盖该文件

rename
rename 'conf' 'conf.bak' f* 将f开头的文件的conf 改为 conf.bak


删除
rm 命令
rm -f 不确认直接删除
rm -r 递归删除
rm -rf / 直接删根的话 系统会有提示 不会直接删根

rm -rf * 此命令会直接删除! 无提示谨慎使用!!!!
可定义别名
alias rm='mv -t /tmp 类似于Windows中的回收站机制
6.总结文件元数据相关的知识点,包含硬链接和软连接的区别等知识
inode表结构
在Linux中,一切皆文件,每个文件由 元数据(文件属性)和具体内容组成,这两个部分是在磁盘分区上分开存放的。
权限与属性放在inode中,至于实际数据则放置到data block中,另外还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的使用情况。
inode:记录文件的属性,一个文件占据一个inode,同时记录此文件的数据所在的block号码
block:实际记录文件的内容,若文件太大,一般会放在多个block中

如图所示inode 4号记录了2,7,13,15,四个号码。
在最开始Linux是使用Ext2这种的文件系统,文件系统一开始就将inode与block都规划好了,除非重新格式化。
但如果文件系统高达数百个GB那么所有的inode与block通通放在一起是不妥的决定,因此Ext2文件系统在格式化的时候是区分为多个区块群组,每个区块群组都有自己的独立的 indoe/block/superblock。
data block
在Ext2文件系统中所支持的block大小如图

一些block的限制:
-
每个block内最放置一个文件的数据
-
若文件小于block,则该block的剩余容量就不能在用的了。
-
若文件大于block,则一个文件会占用多个block数量
inode table
inode在前面简单的概述为文件属性和权限,基本上,inode记录的文件至少有以下几种:
- 索引节点编号
- 文件类型
- 权限
- 链接书
- 文件大小
- 时间戳
- 指向具体block的指针
- 其他数据
可使用stat查看一个文件或目录,里面的数据存放在inode表中

但这里面并不包含文件名,文件名并不存放在inode表中,关系如下图所示

rm,mv,cp与indoe
当使用rm删除一个文件时,释放相应inode号,当删除成功后计算机并不会清空对应的block文件,而是做上标记代表这个区域可以被重用,当写入新的文件时会覆盖这一片区域。
如果使用mv命令,若在同一个文件系统(改名),为新文件名创建目录项,删除旧的文件名,并不会影响inode表没有数据被移动。第二种情况,不在同一个文件系统,则与cp命令的含义相同
若使用cp命令(复制),分配一个空闲的inode号,在inode表中生成新条目,创建一个目录项与新的indoe关联,拷贝成功.
*查看文件系统的类型

type即为文件系统类型
*查看文件系统 indode数量 df -ih
inode编号耗尽或block耗尽
一个分区的indode节点数是有限的,创建一个文件会消耗一个inode号,若只创建文件去占用indoe号
而不写数据,即使block还有空间,inode耗尽也会显示no space left on device.
同理在如果在每个inode号所指向的block区块都占满空间,那么即使inode还存在数量,同样也会报错no space left on device。
注意当释放空间时,如果该需要被释放的文件或目录在别的终端被占用,即使rm后也不会立马释放空间,必须找到占用这个文件或目录的进程把他删除。
可以使用 cat /dev/null > /需要删除的文件 避免以上的情况发生。
硬链接
**ln filename linkname**
硬链接的作用是允许一个文件拥有多个有效性的路径名
新建一个文件,指向某个文件的indoe,这样两个文件互为硬链接

硬链接特性
-
创建硬链接会在对应的目录中增加额外的记录以引用文件
-
必须在同一文件系统上的一个物理文件
-
创建时链接数递增
-
删除文件时:要保证至少存在一个链接(如上图至少保留一个箭头指向inode)若全被删除,文件会被删除。
-
不能对目录创建硬链接


ln text.txt text_hard
如上图所示inode相同,引用数从1变为2
目录的引用


当创建一个目录时有两个引用

hard目录inode号为67319267此为一次引用, cd到目录里.也代表当前目录引用了一次,若在该目录下又创建了一个目录


.的引用变成了3又多了一个引用是因为cd到hard11时 cd ..也代表这个目录此为第三次引用
软链接
`ln -sv filename linkname`
也称符号链接,类似与Windows中的快捷方式
软链接是建立一个**独立**的文件,这个文件的指向的目标的文件名。
软链接特性
也称符号链接,类似Windows中的快捷方式。

* 一个符号链接的内容时它引用文件的名称
* 可以对目录创建软链接
* 可以跨分区的文件实现
* 指向是另一个文件的路径,其大小**指向的路径字符串的长度**,不增加或减少目标文件的inode引用数。
* **软链接如果使用相对路径,是相对于源文件的路径,而非相当于当前目录**
* 删除软链接的本身,不会删除源目录的内容
* 删除源目录文件,不会删除链接文件,因为链接文件是独立的文件,但会报错因为源目录文件被删除。
ll /bin/sh


ln -sv issue link1
-v为显示创建链接过程 5为该链接文件的大小即指向的路径字符串长度,但并没有增加inode数。

/tmp/link1 指向 issue 但是在/tmp/link1文件夹中并不能找到issue这个文件,因为这是相对于这个路径。
删除软链接
**特殊情况**


此时我指定一个软链接link2指向dira
rm -rf link2/

执行以上命令后发现dira被递归删除了,因为加了/ 这是一个致命的错误正常删除软链接,软链接名字一定不要打错了
7.总结通配符,管道,重定向,并且结合示例,添加注释信息
用于匹配多个文件,方便批量管理文件
常见的通配符



{}一般用于创建 []用于匹配(满足括号中任意一个都匹配)
一些基本的操作


IO重定向和管道
标准输入与输出
Linux系统中有三个最基本的IO设备
1.标准输入设备(stdin):对应终端键盘
2.标准输出设备(stdout):对应的终端的显示器
3.标准错误输出设备(stderr):对应的终端的显示器
在Linux系统一切皆文件, 所以这三个文件也是设备文件存在与系统之中

这三个设备都有相对应的数字,0->stdin,以此类推
标准输出和错误重定向
复制两个窗口
tty查看当前终端

- echo命令将内容输出的当前屏幕
echo 123456 1> /dev/pts/1
echooo 123456 2> /dev/pts/1
数字1是将标准输出给右边的终端
数字2是传输错误的信息 第二条指令故意将echo指令打错打印错误信息

当同时将错误和正确的输出给一个文件已知rs.txt存在,但rs1.txt并不存在同时进行ls有正确的输出也有错误的输出,分别将正确的和错误的信息写入text.txt文件(以1 2进行区分)


第二张图是正确的一个输出,图一的输出是有问题的,第二行少了一些字母因为>是一个覆盖的选项每次都会从第一个开始写入,写入后换行。
要想在一个文件后继续写要使用 >> 为追加
ls rs.txt rs1.txt &> text1.txt
正确写法

清除大文件
cat /dev/null >& test

标准输入重定向
是指用文件来代替键盘的输入,从文件读取数据,代替当前终端的输入设备输入的数据.
此处需要搞清楚两个概念就是标准输入和参数
如果区分:如果一个命令不跟任何参数直接回车看是否会等待标准输入,如果是,则该命令可以使用标准输入重定向.
例如 cat命令
**Command < File**

bc 为计算器将a.txt的文件的内容作为输入给计算器

将输入输出进行结合
标准输入多行重定向
`<<终止词` 从键盘把多行重导向输入

EOF可以等价替换任何一个或多个符号(END OF FILE)
8. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息
用户
Linux中可以存在多个用户,每个用户相互隔离
在Linux系统中,每个用户是通过User id进行**唯一**标识

root uid=0
系统用户:1-999 对守护进程获取资源进行权限分配,系统用户没有家目录不需要登录,假设当前系统中没有任何用户登录,但系统中还是有程序在运行就是系统用户在运行。
登录用户:uid: 1000+
用户组

gid唯一标识一个组
管理员:root 0
用户与组的关系
一个用户至少有一个组,也可以有多个组
-
用户的主组:又称私有组,一个用户必须属于且只有一个主组,创建用户时默认会创建与其同名的组作为主组
-
用户的附加组:又称辅助组一个用户可以有多个辅助组

useradd 创建用户
安全上下文
在Linux系统中,运行中的程序(即进程),都是以进程发起者的身份运行,进程所能访问的资源权限取决于进程的运行者的身份。
程序是什么:本质上一个可执行的二进制文件或是一个可执行的脚本文件
在服务器上很多文件,**可以被执行的二进制文件才能被称为程序**
对于一个程序,也不是所有用户都可以运行,取决当前用户对该程序有没有可执行权限
**访问不了文件不是文件的问题,而是用户权限的问题**
用户和组的主要配置文件
### 用户和组的主要配置文件
-
/etc/passwd:用户及其属性信息
-
/etc/shadow:用户密码即其相关属性
-
/etc/group:组及其属性
-
/etc/gshadow:组密码及其相关属性
password文件格式

一共7列:
前四列: 登录用户名 密码 UID(0为超级管理员) GID
第五列:描述信息一般为用户名或者是别的描述信息 可为空(系统会默认是用户名)
第六列:用户的家目录
第七列:用户的默认shell 系统用户不需要shell一般设置为/sbin/nologin
chsh -s /bin/csh 用户名 这个命令可以修改用户的shell
注:
`chsh -s /sbin/nologin` 若执行词条命令没有指定用户默认是全部改成系统用户,这样会造成事故导致没有用户可以登录上系统
shadow文件格式
此文件中存储大的是用户密码信息,任何用户都无权限

一共九列:
1-2列:登录用户名 加密后的密文(使用sha512加密 可为空!表示该用户被锁定不能登录)
3列:表示上次 修改密码的时间,例:bin系统用户的为19820 表示自1970.1.1到改密码的时间为19820天,0表示下次登录就要改密码,为空表示该功能可以无视
4列:最小时间间隔,当前密码最少可以使用多少天,0表示随时可以变更
5列:最大时间间隔,当前密码最多能用多少天,99999表示一直都能用
6列:警告时间,密码过期前几天开始提醒用户,默认为7
7列:不活动时间,密码过期几天后账号会被锁定,在此期间,用户仍让可以登录,为空表示无视该规则
8列:失效时间:自1970 1.1 算起多少天后账号失效,为空表示永不过期
9列.保留字段 无意义
**伪用户:*密码都是!! 代表无密码是不能登录的,没有密码是登录不了远程链接的软件
禁用账号,可以直接在密码字段前加上!

jerry 为新建的用户
group文件的格式

第1列:组名
第2列:组密码,当加入组时需要密码验证
第3列:组id
第4列:用户列表 列出属于该组的成员,这一列是用户附加组
gshadow文件格式
第1列:组名
第2列:组密码,加密后的密文
第3列:组管理员
第4列:用户列表同group的第4列

文件操作
如果需要编辑以上的文件一般与编辑普通的文件是不同的,所以系统提供了专用的工具来修改这几个文件
vipw&vigr
vipw 默认编辑/etc/passwd文件
vigr默认编辑/etc/group
-g 编辑group文件
-p 编辑passwd文件
-s 编辑shadow文件

**pwck&grpck**
对用户相关配置文件进行检查啊 默认检查/etc/passwd

在/etc/passwd中加上一行

检查后发现错误
getent
查看具体文件内容

用户组的管理命令
用户创建
`useradd `
-u 指定uid
-g 指定用户组
-c 指定新账户的字段 请参考[passwd](#passwd)中第5列
-s 指定shell,可指定的shell可以查看/etc/shells
-r 不会创建登录用户相关信息,即创建系统用户
-m 创建家目录
-M 不创建家目录
-d 指定家目录,这个目录可以事先不存在 **只是指定家目录不代表创建**
-p 设置密码
在企业的集群会有不同的终端,如果在不同ip上 创建相同的用户名,那么有可能相同的用户名会有相同的uid
创建目录时先创建组,可以确保id时已知的
groupadd -g 336 -r mysql
-r表示创建系统组

创建用户:
`useradd -u 336 -g mysql -s /sbin/nologin -d /data/mysql -M -r mysql`
指定uid为336 指定用户组为mysql 家目录为/sbin/nologin -d指定家目录 -M不创建家目录(-d为指定家目录不代表创建) -r创建系统用户

显示更改默认设置
`useradd -D`
这个文件会显示创建一个用户时默认是基于哪些规则

这里的group是默认组名,但一般创建用户会以该用户的名字创建组名
SHELL是默认shell
SKEL:家目录模板

当创建用户时会默认把这个目录的内容一起创建
批量创建用户:newusers file
创建一个文件

里面写好对应的配置 newusers user.txt

批量修改密码
`chpasswd < file`

openssl pasaswd -6 123456 为123456进行加密

用户属性修改
**usermod**
-d 修改家目录
-g 修改组
-G 新增附加组,会覆盖原先的覆盖组,想要保留原始的需要加-a
-l 新的登录名称
-L 锁定账户(就是在/etc/shadow 密码栏加上! )
-u 修改uid
-U 解锁账户
-c 修改注释
将jerry覆盖spike
前提是被替换的用户必须不存在


解锁用户
`userdel -U jerry`

第二列为!!表示是空密码,若用户为空密码解锁用户会报错,解锁用户只限于有密码的的用户来说

用户删除
**userdel**
-f :强制删除即使用户还在登录状态
-r:递归删除用户的家目录和邮件目录
当删除一个用户时,其名下的家目录文件无法显示属主属组只能显示UID

当执行userdel u1
u1的家目录的属主属组都变成了1024
这时候如果新建用户,使用这个用户的uid

u1的属主属组变成了u123
当登录u123用户时登录时的家目录还是u123

但是u123用户可以进入u1的目录

删除u123
userdel -rf u123

这时候发现u1的属组又变成了uid 表明u123已经被删除
9. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释
Linux中的权限体系介绍
在Linux中,分为3类用户属主,属组,其他用户
每个角色对文件的权限,也分三种 读 写 执行
属主(所有者): u
属组:g
其他用户:o
读写执行:r (4) w(2) x(1)
设置文件的所有者
`chown`
`chown OWNER:GROUP` 同时修改所有者和属组
`chown :GROUP` 只修改属组

也可以使用UID,GID来修改属主属组,UID不支持省略

可以使用未存在UID和GID进行修改 但无法使用未存在的用户名和组名进行修改
权限的先后级

这个文件中属主和属组的权限分别为可读和可读可写,现在使用fan用户登录进来进行编辑该文件


会显示只能进行读 因为当系统分配权限时是从左往右进行分配,只要匹配到相应的权限就停止,后面的就不会再分配了。
chown -R 递归修改目录所有的属主属组
文件权限
角色定义:u g o a 对应为 属主 属组 其他用户 所有人
赋值写法:+ - = 增加某些权限 删除 保留权限(覆盖写法)
权限表示方法: r w x 数字表示法对应为 4 2 1
用户的最终权限,是从左到右顺序匹配,一旦匹配权限立即生效,不再向右查看权限 上面提到过
r和w权限对root无效,对没有读写权限的文件,root也可以读写
只要属主 属组或other三者之一有x权限,root就可以执行
- Linux中目录与文件的权限区别

一定要目录一个x权限 只有一个r权限无法查看目录
先给dira权限置空 切换到别的用户
目录结构如图

什么做不了最开始

加上r权限

可以查看文件名目录名 无法查看元数据
stat 也无法查看

加上w权限
`chmod u+w dira/`

虽然有w权限但还是无法创建文件,删除文件
加上x权限

所以x为目录权限中的最小权限
执行 cp /etc/issue /data/dir/所需的最小的权限
/bin/cp需要x权限
/etc 需要x权限
/etc/issue 需要r权限 只需要能读取
/data 需要x权限
/data/dir 需要x w权限
修改文件权限
`chmod`
-c 只显示更新成功的信息
-R 递归操作

一些基本的修改操作
递归的授权
`chmod o+rwx -R dir1/` 会给dir1下所有目录和文件都授权
`chmod o+X -R dir1/` 大写的X,只会给子目录加x权限不给文件加(给文件加x权限是很危险的)

新建文件和目录的默认权限
在LinuX中新建目录与文件都会有一个默认的权限
`umask `查看

新建文件的默认权限
666-umask:按位进行相减第一位忽略从第二个数字开始对应
666-022 新建的文件默认权限为644
umask的值可以改变 若想减后是奇数 则该位自动加1 因为加1是为了避免赋予执行权限(文件有执行权限是危险的)
修改umask

666减去021 第三位为奇数则加1变为 645--> 646
以上修改umask并不会永久保存永久保存需要去~/.bashrc去修改
新建目录的权限
目录并不受奇数偶数的影响正常的相加就可以
Linux文件目录特殊权限
在Linux中,除了rwx三种权限之外还有三个特殊的权限分别为SUID SGID Sticky这三个特殊权限独立于rwx权限体系
特殊权限:
SUID(4):作用于二进制文件上,用户将继承此程序所有者的权限
SGID(2):作用于二进制文件上,用户将继承此程序所有组的权限
STICKY(1):作用于 目录上,此目录中的文件只能由所有者自己来删除
SUID(只作用在属主上)
字符表示为s 若该文件并没有可执行文件则s变为S


加上执行权限后变成小写s

任何一个可执行程序文件按能不能启动为进程,取决于发起者对程序文件是否由执行权限
已知/etc/shadow 下普通用户没有查看执行的权限

但普通用户可以在自己的终端通过passwd命令修改密码 从而变相修改/etc/shadow
这是因为

passwd这个文件的命令有s权限 当有用户执行这个命令时用户将继承所有者的权限

当我在fan用户下执行passwd时 左边在root下查看进程发现多了一个进程passwd但是这个passwd的执行者为root即 当我在普通用户执行passwd修改密码是背后是以root的身份进行修改 因为普通用户没有任何权限去修改/etc/shadow
SUID设置在目录上无意义,只对二进制可执行文件有效
SGID
启动为进程之后,其进程的属组为原程序的属组
chmod g+s
其中若用户组的属组没有执行权限也是为S参照SUID
当一个用户无论是root还是普通用户创建文件后其文件的属组属主都为用户本身

在根目录下 三个用户在同一个文件夹创建属于自己的文件
chmod g+s test 在根目录下执行此命令记住是g组属性上的执行权限


再次创建文件发现所有普通用户的属组都发生了改变都继承了test文件夹的属组即root
Sticky
还是以上面为例 test目录权限为rwx证明所有用户都能在这个目录中创建删除文件,root创建的文件普通用户也可以删除.

这时设置STICKY权限(仅对目录有效,设置在文件上无意义)后,只有文件的所有者或root可以删除文件
chmod o+t test 占据other下的执行权限位


这个时候普通用户将删除不了root用户的文件只能删除自己的。
设定文件的特殊属性
`chattr (+-=)attribute file`
attribute:
a:对文件可追加,不可被删除,不可重命名。对目录,可新建,修改文件,但不可删除文件 一般用于日志文件上,可以看任何用户干的事情并且该文件内容不可被删除
i: 对文件不可被删除不可修改不可重命名。对目录:可修改查看目录中的文件,不可新建文件,不可删除文件
s:彻底删除文件,前面提到Linux删除文件并不是清楚文件的内容而是标记该文件可以被覆盖,加上此选项表示完全清楚
u:防止误删除,当删除文件时标记该文件可以被覆盖 若加上此选项表示即使删除了也无法被覆盖,目的防止误删除可以恢复
lsattr
ls命令是无法查看文件的特殊权限


访问控制列表ACL
### ACL权限功能
在rwx权限体系中,仅仅只能将用户分为属主属组其他三类角色,如果要对单独用户设置额外的权限,则无法完成
ACL就可以单独对指定的用户设定各不相同的权限即自定义提供颗粒度更细的权限控制
ACL生效顺序
所有者,自定义用户,所属组,自定义组,其它人
ACL相关命令
`setfacl` 设置权限
`getfacl` 查看设置的ACL权限
setfacl
-m 修改acl权限
-x 删除文件acl权限
-b 删除文件所有acl权限
--set-file=file 从文件中读取新规则
当前文件无acl设置


给f1.txt u g o加上r权限
setfacl -m u:fan:- f1.txt 执行此命令表示创建一个自定义用户fan ,-表示无权限 验证acl的生效程序,在没有加上acl权限时 fan用户位other中是可以访问该文件的
现在将fan单独分一组分配无任何权限,这时访问这个文件fan将不属于other并且无法访问该文件因为acl的生效顺序 acl 大于 other


可以注意到权限最后多了一个 + 号
给自定义fan添加acl权限

setfacl -m u:fan:r f1.txt 添加r权限后可以进行查看

给组添加权限一次类推 将u改为g
从文件复制ACL
如果使用cp复制acl权限文件并不会把权限复制过去
cp f1.txt /home/fan/

getfacl f1.txt | setfacl --set-file=- f2.txt 实现acl权限的复制

移除ACL权限
setfacl -x u:fan f1.txt

移除所有acl权限

+ 号也没了
ACL权限的替换

mask权限

mask只影响除所有者和other的之外的人和组的最大权限
用户或组的设置必须存在于mask权限设定范围内才会生效
对于脚本程序来说,必须要有读权限,才能执行
root用户不用root无视w和r权限

浙公网安备 33010602011771号