完结马哥教育SRE课程--基础篇

文章目录


今天是2024年9月13号,马上就要中秋节了。磕磕绊绊几个月,终于看完了马哥教育SRE课程的就业班和架构班的全部课程。距离2022年11月14日购买课程之日已经足足一年10个月了。之前没有学习计划,或有计划也落空了,东看一节西看一章,没有形成完整的知识体系。好在如今要完结了这套课程。不幸腾讯课堂也将2024年10月1日停止运营,届时会全面停止所有课程服务。然而终于赶在停服之前,我终结了。

这段时间,我力争做到理论与实践相结合,看完视频讲解后一定将其实现出来,通过博客记录学习心得和过程。有的实验甚至是跟着视频一个命令一个命令敲出来的,我深知这是一个不可取的方法,因为这样提不起来速度,也没能自己独立思考和排查问题,有时一个视频能敲一整天。但没有办法,这是我唯一不觉得虚度今日的慰藉。

就像王晓春老师说的那样:完成比完美更重要。Linux中的任何一个命令任何一项服务,不经过生产环境的检测和应用都不可能达到出神入化的精通地步。我需要去工作中实践了。

这段时间,也是自己生理、心理、心态的调整和恢复。偿还年少无知的债,时间不多了,好好经营自己。

这篇博客是按照马哥教育SRE就业课程的视频目录来总结内容。

一、Linux基础入门

1.Linux基本架构

Linux的基本架构
  1.内核(Kernel):
    Linux内核是操作系统的核心,负责管理系统硬件、处理器资源、内存、文件系统以及设备驱动程序。
    它还提供系统调用接口,供应用程序与硬件交互。

  2.Shell:
    Shell是用户与内核交互的命令行接口,通过Shell,用户可以输入命令,控制操作系统的行为。
    常见的Shell有Bash(Bourne Again Shell)、Zsh、Ksh 等。

  3.文件系统:
    Linux的一切都是文件,包括普通文件、目录、设备、管道等。文件系统是组织和管理这些文件的结构。
    常见的Linux文件系统类型有 ext4、XFS、Btrfs 等。
    
  4.用户空间与内核空间:
    内核空间:用于操作系统内核运行的专用空间,普通程序不能直接访问内核空间。
    用户空间:应用程序运行的空间,与内核交互时通过系统调用实现。

2.什么是shell

Shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
在这里插入图片描述
显示当前使用的shell

[root@rocky ~]# echo $SHELL
/bin/bash
[root@rocky ~]# echo ${SHELL}
/bin/bash

在这里插入图片描述

显示当前系统使用的所有shell
在这里插入图片描述

3.命令执行过程

Linux命令的执行过程大致可以分为以下几个步骤:
  1.用户输入命令:
      用户在命令行界面输入命令,并按下回车,Shell(如 Bash)接收该输入。
      
  2.命令解析:
      Shell解析命令,进行变量替换、别名处理、通配符展开等操作,将命令及其参数分开。
      
  3.查找可执行文件:
      Shell根据环境变量 PATH 中的路径,逐个目录查找与输入命令对应的可执行文件。
      如果找到命令文件,则继续执行,否则返回 "command not found" 错误。
      
  4.创建子进程:
      Shell使用fork()系统调用创建一个新的子进程,子进程是Shell进程的副本。
 
  5.执行命令:
      子进程通过 exec() 系列系统调用,将自身替换为要执行的命令程序。
 
  6.等待命令完成:
      Shell进程等待子进程完成执行(如果命令没有放到后台)。
      子进程执行完命令后,会返回一个退出状态码给父进程。
 
  7.返回输出与退出状态:
      Shell获取子进程的退出状态码,并将命令的输出显示在终端上。
      通常:0表示命令成功执行,非0表示发生错误。 口诀:道路千万条,成功就一条。

4.Shell中的两类命令

在Linux Shell中,命令分为内部命令和外部命令,
  1.内部命令 (Built-in Commands)
      定义:内部命令是 Shell 自带的命令,由 Shell 程序本身直接实现。
      执行:这些命令在 Shell 中执行时不需要创建新的子进程,执行速度更快,因为它们在当前的 Shell 进程中运行。
      示例:
          cd:切换目录
          echo:输出文本
          pwd:显示当前工作目录
          exit:退出当前Shell会话
          set:设置或显示Shell变量

  2.外部命令 (External Commands)
      定义:外部命令是系统中的独立可执行文件,它们通常位于系统的PATH路径中的某个目录下。
      执行:当执行外部命令时,Shell通过fork()创建一个子进程,并使用exec()调用相应的程序。
      示例:
          /bin/ls:列出目录内容
          /usr/bin/grep:搜索文本
          /usr/bin/find:查找文件
          /bin/cp:复制文件

总结:
  "内部命令"是Shell内置的,不需要额外的程序文件。
  "外部命令"是系统中的可执行文件,Shell需要调用外部程序来执行。

5.常见命令

#查看系统架构
[root@rocky ~]# arch
x86_64

#查看内核版本
[root@rocky ~]# uname -r
4.18.0-348.el8.0.2.x86_64

#查看操作系统发行版本
[root@rocky ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"

[root@rocky ~]# cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)

6.输出信息echo

echo命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号。

语法:
echo [-neE][字符串]
  选项:
    -E(默认)  不支持\解释功能
    -n       不自动换行
    -e       启用\字符的解释功能
显示变量
  echo "$VAR_NAME"     #用变量值替换,弱引用
  echo '$VAR_NAME'     #变量不会替换,强引用
[root@rocky ~]# echo "$PATH"
/usr/local/mongodb/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@rocky ~]# echo '$PATH'
$PATH
[root@rocky ~]#

7.tab键补全

tab键可以实现命令及路径等补全,提高输入效率,避免出错。

命令补全
  ·内部命令:
  ·外部命令: bash根据PATH环境变量定义的路径。自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
  ·命令的子命令补全,需要安装bash-completion
  
注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表
[root@rocky ~]# nmcli connection 2下tab键
add      delete   edit     help     load     monitor  show     
clone    down     export   import   modify   reload   up       
[root@rocky ~]# 

8.获取帮助

获取帮助的能力决定了技术的能力!

多层次的帮助
  whatis               使用数据库来显示命令的简短描述
  command --helpe      命令帮助
  man                  man提供命令帮助的文件,手册页存放在/usr/share/man 几乎每个命令都有man的“页面”
  /usr/share/doc/
  Red Hat documentation、 Ubuntu documentation
  软件项目网站
  其它网站
  搜索

二、文件管理和IO重定向

1.文件系统目录结构

在这里插入图片描述

文件系统目录结构
  1.文件和目录被组织成一个单根倒置树结构文
  2.件系统从根目录下开始,用"/"表示
  3.根文件系统(rootfs): root filesystem
  4.标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAlL, Mail, mail, mAiL
  5.以 .开头的文件为隐藏文件
  6.路径分隔的/
  7.文件名最长255个字节
  8.包括路径在内文件名称最长4095个字节
  9.蓝色-->目录绿色-->可执行文件红色->压缩文件浅蓝色-->链接文件灰色-->其他文件
  10.除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
  11.每个文件都有两类相关数据:元数据: metadata,即属性,数据: data,即文件内容

2.文件系统目录功能

文件系统目录功能
  /(根目录):             所有文件和目录的起点,系统中的所有文件都是以根目录为基础的。
  /boot(启动文件):        引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录
  /bin(基本命令文件):      所有用户使用的基本命令﹔不能关联至独立分区,OS启动即会用到的程序
  /sbin(系统管理员命令):   管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
  /lib(库文件):           启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
  /lib64:                专用于x86_64系统上的辅助共享库文件存放位置
  /etc(配置文件):         存放系统的配置文件和启动脚本,如网络配置、用户信息、服务启动配置等。
  /home(用户主目录):      普通用户家目录,每个用户都有自己的家目录,用户的个人数据和文件保存在/home/username中。
  /root(根用户的主目录):   管理员的家目录
  /media:                便携式移动设备挂载点
  /mnt:                  临时文件系统挂载点
  /usr(用户应用程序和文件):包含大多数用户级别的应用程序和工具,如 /usr/bin、/usr/lib、/usr/share等。
  /var(可变数据):        存放系统运行时产生的动态数据,如日志文件、缓存、锁文件等。
  /opt(可选软件包):      安装第三方或附加软件的目录,通常用来存放手动安装的程序。
  /proc(进程和系统信息):  一个虚拟文件系统,提供系统运行时信息,如内存、CPU、正在运行的进程等。

3.linux下的文件类型

-  普通文件
d  目录文件directory
l  符号链接文件linke 
b  块设备block
c  字符设备character
p  管道文件pipe
s  套接宁文件socket
文件类型
  1.普通文件 (Regular File)
    符号:-
    描述:最常见的文件类型,存储文本、二进制数据或程序代码。普通文件没有特殊的执行权限或链接行为。
    示例:文本文件 (.txt)、可执行程序文件 (.sh)、图片文件 (.png)2.目录 (Directory)
    符号:d
    描述:目录是文件夹的概念,用来存储其他文件或目录,是文件系统的组织结构。
    示例:/home/、/etc/。
    
  3.符号链接文件 (Symbolic Link)
    符号:l
    描述:指向另一个文件或目录的指针,类似于Windows中的快捷方式。符号链接可以跨文件系统,但如果目标被删除,链接会失效。
    示例:link_to_file -> /path/to/file。
    
  4.字符设备文件 (Character Device):
    符号:c
    描述:表示可以逐字节读写的设备,如键盘、串口。
    示例:字符设备:/dev/tty(终端设备)
   
  5.块设备文件 (Block Device)  
    符号:b
    描述:表示可以成块读写的设备,如硬盘、光驱。
    示例:块设备:/dev/sda(硬盘设备)
 
  6.管道文件 (FIFO)
    符号:p
    描述:FIFO(First In, First Out)是一种特殊文件类型,用于进程间通信。数据只能按顺序写入和读取。
    示例:/tmp/fifo_pipe。
    
  7.套接字文件 (Socket)
    符号:s
    描述:用于网络通信或本地进程间通信。
    示例:/var/run/docker.sock。

4.文件操作命令

ls:列出目录内容   #示例:ls /home
  
cd:切换目录      #示例:cd /etc
  
pwd:显示当前工作目录   #示例:pwd
  
touch:创建空文件或更新文件的时间戳  #示例:touch file.txt
  
cp:复制文件或目录  #示例:cp file.txt /backup/
  
mv:移动或重命名文件或目录  #示例:mv oldname.txt newname.txt
  
rm:删除文件或目录  #示例:rm file.txt
  
mkdir:创建目录   #示例:mkdir new_folder
  
rmdir:删除空目录  #示例:rmdir old_folder
  
cat:查看文件内容  #示例:cat file.txt
  
more/less:分页查看文件内容  #示例:less file.txt
  
head:查看文件的前几行  #示例:head -n 10 file.txt
  
tail:查看文件的后几行  #示例:tail -n 10 file.txt
  
chmod:修改文件权限  #示例:chmod 755 script.sh
  
chown:更改文件所有者  #示例:chown user:group file.txt
  
ln:创建硬链接或符号链接  #示例:ln -s /path/to/file linkname

5.文件状态stat

文件相关信息:metadata, data

每个文件有三个时间戳:
access time访问时间,atime,读取文件内容
modify time修改时间,mtime,改变文件内容(数据)
change time改变时间,ctime,元数据发生改变

在这里插入图片描述

6.确定文件内容

文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用

file [options] <filename> . ..

可使用–help查看file的参数使用
在这里插入图片描述

7.文件通配符模式

文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件通配符采有特定的符号,表示特定的含义,此特符号称为元 meta字符。

常见的通配符如下:
  *        匹配零个或多个字符,但不匹配".”开头的文件,即隐藏文件
  ?        匹配任何单个字符,一个汉字也算一个字符
  ~        当前用户家目录
  ~mage    用户mage家目录
  [0-9]    匹配数字范围
  [a-z]    一个小写字母
  [A-Z]    一个大写字母
  [wang]   匹配列表中的任何的一个字符
  [^wang]  匹配列表中的所有字符以外的字符
  [^a-z]   匹配列表中的所有字符以外的字符
  .和~+    当前工作目录
  ~-       前一个工作目录

8.创建空文件和刷新时间

touch命令可以用来创建空文件或刷新文件的时间

touch [OPTION].. . FILE. . .
选项说明:
 -a 仅改变atime和ctime。
 -m 仅改变 mtime和ctime
 -t [[CC]YY]MMDDhhmm[.ss]指定atime和mtime的时间戳. 
 -c 如果文件不存在,则不予创建

在这里插入图片描述

9.目录操作

显示目录树tree
  常见选项:
    -d: 只显示目录
    -L level: 指定显示的层级数目
    -P pattern: 只显示由指定wild-card pattern配到的路径
    
创建目录mkdir
  常见选项:
    -p: 存在于不报错,且可自动创建所需的各目录
    -v: 显示详细信息
    -m MODE: 创建目录时直接指定权限

删除空目录rmdir
  常见选项:
    -p 递归删除父空目录 
    -v 显示详细信息
     
  注意: rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r命令,递归删除目录树

10.文件元数据和节点表结构

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这些元数据是存放在inode (index node)表中。inode表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。

inode 表结构
inode 是存储文件元数据的表,文件系统中每个文件都有一个对应的 inode 结构。

每一个inode表记录对应的保存了以下信息: 
  1.inode number节点号      #每个文件都有一个唯一的 inode 号,用于在 inode 表中标识该文件。
  2.文件类型                #文件是普通文件、目录、符号链接、设备文件等。
  3.文件权限                #文件的读、写、执行权限,如 rwxr-xr-x。
  4.所有者信息UID/GID        #UID(用户ID):文件所有者的ID。GID(组ID):文件所属用户组的ID。
  5.链接数(指向这个文件名路径名称个数)
  6.该文件的大小和不同的时间戳
  7.指向磁盘上文件的数据块指针
  8.有关文件的其他数据

文件名和 inode 是分开的。文件名保存在目录文件中,文件名与对应的 inode 号关联。目录实际是一个将文件名映射到 inode 号的表。

Linux 文件系统中的元数据存储在 inode 中,包含文件的类型、权限、大小、时间戳、所有者等信息。文件名则存储在目录文件中,并与 inode 号进行关联。这种结构提高了文件管理的灵活性和效率。

11.硬链接和软链接

在 Linux 文件系统中,硬链接和软链接(符号链接)为文件提供了灵活的管理和使用方式。它们的主要作用在于文件引用、存储节省、灵活性和高可用性。

硬链接的作用
  1.文件引用共享
      硬链接允许多个文件名指向相同的文件数据。所有硬链接共享相同的 inode(文件元数据指针),
      它们看似不同的文件,但本质上是对相同数据的引用。
      
 2.节省存储空间
      硬链接不会占用额外的磁盘空间。即使创建多个硬链接,它们依然指向同一份文件数据,磁盘只保存一份实际内容。

 3.数据冗余与高可用性
     当创建了硬链接之后,删除原文件时不会导致文件数据丢失,文件数据只有在所有硬链接被删除时才会真正从磁盘中删除。
     因此,硬链接提供了一种冗余的方式来保护数据。

 4.增强系统一致性
     系统中的某些应用程序依赖于多个路径下相同的文件或配置文件。
     使用硬链接可以确保在这些位置都访问到相同的数据,避免文件版本不一致的问题。
软链接(符号链接)的作用
  1.文件和目录的快捷访问
      软链接类似于 Windows 系统中的快捷方式,它们是指向文件或目录路径的指针。
      软链接可以为常用的文件或目录创建简短的访问路径。

  2.跨文件系统的引用
      软链接可以链接到不同文件系统中的文件或目录。硬链接只能在同一文件系统中工作,而软链接没有此限制,这使得它更灵活。

  3.链接目录
      软链接不仅可以指向文件,还可以指向目录。通过软链接,多个目录可以映射到同一个实际目录路径,使得目录结构更加灵活。

  4.动态替换和更新
      软链接指向的是文件路径,而不是文件本身。因此,可以通过更新软链接的目标路径来指向不同的文件。
      这在需要动态更新文件或程序版本时非常有用。

  5.系统配置管理
      在Linux 系统中,很多系统配置文件(如/etc 目录下的文件)会通过软链接的方式指向实际的配置文件。
  

在这里插入图片描述

总结:
  硬链接是多个文件名指向同一文件(inode),删除原文件名不会影响其他硬链接。
  软链接是指向文件路径的快捷方式,原文件删除后软链接将失效。

12.IO重定向和管道

在 Linux 中,I/O 重定向用于改变命令的输入和输出源,通常重定向到文件或其他命令。

1.标准输入、输出和错误
    标准输入 (stdin):默认从键盘输入,文件描述符为 0。
    标准输出 (stdout):默认输出到终端,文件描述符为 1。
    标准错误 (stderr):默认输出错误信息到终端,文件描述符为 2
2.重定向符号
    输入重定向 (<):
      从文件或其他源获取输入。
      示例:command < input.txt(从 input.txt 文件获取输入)
      
    输出重定向 (>):
      将输出写入文件(覆盖模式)。
      示例:command > output.txt(将输出写入 output.txt,覆盖文件内容)
    
    追加重定向 (>>):
      将输出追加到文件末尾。
      示例:command >> output.txt(将输出追加到 output.txt)

    错误重定向 (2>):
      将错误输出重定向到文件。
      示例:command 2> error.log(将错误信息写入 error.log)
    
    同时重定向标准输出和错误 (>&):
      将标准输出和错误同时重定向。
      示例:command > output.txt 2>&1(将标准输出和错误都写入 output.txt)
管道 (|) 用于将一个命令的输出作为下一个命令的输入,实现命令间的数据传递。
  1.管道符号 (|)
    管道符号用于连接多个命令,将前一个命令的标准输出作为下一个命令的标准输入。
    示例:command1 | command2
     例子:ls -l | grep txt(将 ls -l 的输出通过管道传给 grep,筛选出包含 txt 的文件)
     
  2.管道的作用
    1.实现命令之间的通信,使得复杂操作可以通过组合简单命令来完成。
    2.常用于将命令的输出进行过滤、排序或其他处理。

tee命令
利用tee命令可以重定向到多个目标,经常配合管道符一起使用

命令1 | tee [-a ] 文件名 | 命令2   #以上可以把命令1的STDOUT保存在文件中,做为命令2的输入  -a 追加
[root@centos8 ~]#cat  <<EOF | tee /etc/motd
> we1come to magedu
> happy new year
> EOF
we1come to magedu
happy new year

三、用户和用户组以及权限管理

1.用户和组相关概念

用户和组相关概念
  1.用户 (User)
      Linux 系统是多用户系统,每个用户有自己的账户和权限。
      用户ID (UID):每个用户都有一个唯一的数字 ID,系统通过 UID 来识别用户。
      用户类型:
        超级用户 (root):具有系统管理的最高权限,UID0。
        普通用户:通常用于日常操作,权限受限,UID一般从1000开始。
        系统用户:用于系统进程和服务,UID小于1000。
       
   2.组 (Group)
      组是用户的集合,用于简化权限管理。用户可以属于一个或多个组。
      组ID (GID):每个组都有一个唯一的GID,用来标识组。
      组类型:
        主组:每个用户都有一个主组,创建文件时,该文件默认属于用户的主组。
        附加组:用户可以属于多个附加组,用于给用户赋予额外的访问权限。

2.用户和组的相关文件

2.1/etc/passwd(用户信息文件)

存储所有用户的基本信息,每个用户占一行,包含以下字段:
  用户名、密码占位符、UID、GID、全名、主目录、登录 shell。
root:x:0:0:root:/root:/bin/bash
user1:x:1001:1001:User One,,,:/home/user1:/bin/bash

# 每一列内容如下
root:用户名
x:密码占位符(密码实际保存在 /etc/shadow 中)
0UID
0:GID
root:用户描述(全名等)
/root:用户主目录
/bin/bash:默认shell

2.2/etc/shadow(加密密码信息文件)
存储用户的加密密码和密码相关信息,只有 root 可以访问。

root:$6$randomhash:18055:0:99999:7:::

# 每一列内容如下
root:用户名
$6$randomhash:加密后的密码
其余字段表示密码过期时间等。

2.3/etc/group(组信息文件)
存储系统中的所有组,每行表示一个组,字段包括:组名、密码占位符、GID、组成员。

root:x:0:
sudo:x:27:user1,user2

# 每一列内容如下
root:组名
x:密码占位符
0:GID
sudo 组包含 user1 和 user2 成员。

3.用户和组相关命令

用户管理命令

用户管理命令
  useradd:添加用户
    示例:sudo useradd -m -s /bin/bash user1(创建用户 user1,指定 shell 为 /bin/bash)
    
  usermod:修改用户信息
    示例:sudo usermod -aG sudo user1(将 user1 添加到 sudo 组)
    
  passwd:修改用户密码
    示例:sudo passwd user1(为用户 user1 设置或修改密码)
    
  userdel:删除用户
    示例:sudo userdel user1(删除用户 user1)
 
  id:显示当前用户的 UID 和 GID
    示例:id user1(查看用户 user1 的 UID 和 GID)

组管理命令

组管理命令
  groupadd:添加组
    示例:sudo groupadd developers(创建 developers 组)

  groupmod:修改组信息
    示例:sudo groupmod -n newname developers(将 developers 组重命名为 newname)

  groupdel:删除组
    示例:sudo groupdel developers(删除 developers 组)

  gpasswd:管理组成员
    示例:sudo gpasswd -a user1 developers(将 user1 添加到 developers 组)
    示例:sudo gpasswd -d user1 developers(将 user1 从 developers 组移除)

权限管理命令

权限管理命令
  chown:更改文件的所有者和所属组
    示例:sudo chown user1:developers file.txt(将 file.txt 的所有者改为 user1,组改为 developers)

  chmod:更改文件权限
    示例:chmod 755 script.sh(设置文件的读、写、执行权限)
  
  chgrp:更改文件的所属组
    示例:chgrp developers file.txt(将 file.txt 的组改为 developers)

4.权限表示

rwx权限:每个文件或目录的权限分为三组:用户 (u)、组 (g)、其他人 (o)。每组权限用三位字母表示:
  r:读权限(read)
  w:写权限(write)
  x:执行权限(execute)
  
权限模式:通过八进制数表示权限,如755(用户有 rwx 权限,组和其他人有 rx 权限)。
总结
  用户和组是 Linux 文件权限和访问控制的基础,通过相关命令和配置文件可以灵活管理用户和组的权限。
  
  常用的文件如 /etc/passwd、/etc/shadow 和 /etc/group,存储了用户、密码和组的信息,命令如useradd、groupadd 等用于管理用户和组。

5.文件特殊权限

Linux 文件系统中的特殊权限包括SetUID (SUID)、SetGID (SGID) 和 粘滞位 (Sticky Bit)。这些特殊权限在某些场景下提升了文件和目录的安全性和管理的灵活性。

SUID

SetUID (SUID)
  作用:
      当可执行文件设置了 SUID 权限后,普通用户在执行该文件时,会临时拥有该文件所有者的权限,而不是执行者本身的权限。
  
  符号表示:
      在文件的执行权限位中,所有者的执行权限 (x) 位置会变为 s,如:rwsr-xr-x。
      
  八进制表示:
      4 表示 SUID 权限。
      
  常见用途:
    passwd 命令:更改密码时,普通用户执行 passwd 需要修改 /etc/shadow 文件,而该文件只有 root 有写权限。
    因此,passwd 命令设置了 SUID 位,使得普通用户临时具有 root 权限。

示例:

-rwsr-xr-x 1 root root /usr/bin/passwd

SGID

SetGID (SGID)
  作用:
     对于可执行文件:用户执行该文件时,会临时具有文件所属组的权限,而不是执行者自己的组权限。
     对于目录:目录设置了 SGID 位后,所有在该目录下创建的文件或子目录,其所属组将继承该目录的组,而不是创建者的主组。

符号表示:在组的执行权限位中,执行权限 (x) 位置会变为 s,如:rwxr-sr-x。

  八进制表示:
     2表示SGID 权限。

  常见用途:
     对于共享目录,SGID 可以确保所有用户在该目录下创建的文件,都会自动归属于同一个组,方便团队协作。

示例:

drwxrwsr-x 2 user1 developers /shared_folder

粘滞位 (Sticky Bit)

粘滞位 (Sticky Bit)
    作用:
       通常用于目录中。目录设置粘滞位后,只有目录的所有者和文件的所有者才能删除或修改该目录下的文件,即使其他用户对该目录有写权限。
       
    符号表示:在其他用户的执行权限位中,执行权限 (x) 位置会变为 t,如:rwxrwxrwt。
    
    八进制表示:1 表示粘滞位。
    
    常见用途:
        /tmp 目录:系统中常用的临时目录 /tmp 设置了粘滞位,防止用户删除其他用户在该目录下的文件。

示例

drwxrwxrwt 10 root root /tmp
特殊权限设置的命令
  设置 SUID、SGID、粘滞位:
    SUID:chmod u+s filename
    SGID:chmod g+s filename
    粘滞位:chmod o+t directory
    
  移除特殊权限:
    移除 SUID:chmod u-s filename
    移除 SGID:chmod g-s filename
    移除粘滞位:chmod o-t directory

八进制表示法总结
  SUID、SGID 和粘滞位与普通文件权限结合使用时,可以通过四位八进制数表示。
    4xxx:设置 SUID 位
    2xxx:设置 SGID 位
    1xxx:设置粘滞位
chmod 4755 filename  
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值