云计算(学完就隐藏)

第一章:来到linux

  1. 开源软件与linux

    1. gnu/linux的历史:自由软件之父,理查德-斯托曼。1984年提出来开源软件。1991年linus创造了一个和windows,mac一样厉害的系统linux内核。伟大无需多言,这也是我愿意记录这些看上去毫无相关的故事的原因。
  2. linux哪些事

    1. 发行版
      1. rhel(红帽子企业,提供企业级linux要钱)
      2. centos(社区的,免费的商业软件,当然伟大无需多言)
      3. ubuntu(乌班图,桌面应用为主,就是有界面)
      4. debian(蝶变,又是一群伟大的人在更新)
    2. 能力
      1. rhce:红帽子认证工程师(rhcsa初级-rhce中级-rhca高级红帽认证架构师)
  3. centos7服务器部署

    1. 搜索centos.org=>下载centos7=》下载安装vm=》安装centos7
    2. 打开csdn,搜索安装centos7,看博客,good。
    3. 服务器分类
      1. 塔式服务器(就像是台式机主机箱子),机架式服务器,层叠式服务器
    4. 设置ens33网卡自启动=》关机按钮-扳手按钮-》左侧找到网络-》开启有线-》再点击旁边的齿轮-》勾选自启动复选框。
    5. 连接外部软件finalshell(安装时最好用管理员方式)
      1. 新建ssh连接
      2. 进行连接(点击确定)
      3. 进行连接(双击保持过的连接)
    6. 快照
      1. 具体可以在csdn上看,,建议关机快照

第二章:文件和用户管理

  1. 文件管理

    1. linux目录结构简洁

      1. windows:以多根方式c:\  d:\   e:\
      2. linux:以单根的方式组织文件/(根目录)
    2. linux目录结构视图

      1. 结构介绍
        1. / (根目录)
          1. 根目录是文件系统的起点。所有其他目录和文件都在这个目录下。
        2. /bin
          1. 存放系统启动和运行所需的基本命令(如 ls, cp, mv, cat)。这些命令在系统启动时必须可用,因此存放在 /bin。
        3. /boot
          1. 包含启动加载程序(如 GRUB)的文件和内核映像。这个目录用于系统引导过程。
        4. /dev
          1. 包含设备文件。这些文件代表系统中的各种硬件设备(如磁盘、终端、打印机)。例如,/dev/sda1 代表第一块硬盘的第一个分区。
        5. /etc
          1. 存放系统配置文件和全局配置脚本。此目录下的文件通常控制系统和应用程序的配置,如 /etc/fstab 和 /etc/passwd。
        6. /home
          1. 用户主目录的默认位置。每个用户在 /home 下有一个子目录,例如 /home/user1。用户的个人文件、配置和数据通常存储在这个目录下。
        7. /lib
          1. 包含系统库文件,这些文件是系统和应用程序运行时所需的共享库。通常与 /bin 和 /sbin 中的程序一起使用。
        8. /media
          1. 用于自动挂载可移动媒体(如 USB 驱动器、CD-ROM 等)。系统插入设备时,这些设备会被挂载到 /media 下的子目录中。
        9. /mnt
          1. 通常用于临时挂载文件系统。系统管理员可以在这个目录下挂载不同的文件系统进行临时访问。
        10. /opt
          1. 用于安装附加应用程序包。这个目录常用于存放第三方软件包和应用程序。
        11. /proc
          1. 虚拟文件系统,提供系统内核和进程信息。/proc 下的文件和目录不实际存在于硬盘上,而是由内核动态生成的。
        12. /root
          1. 系统管理员(root 用户)的主目录。这个目录与普通用户的主目录(/home/username)不同,通常只有 root 用户可以访问。
        13. /sbin
          1. 存放系统管理命令和工具(如 fsck, ifconfig, reboot)。这些命令通常需要系统管理员权限才能运行。
        14. /srv
          1. 包含由系统提供的服务的数据。这个目录用于存放网站、FTP 服务器等服务的数据。
        15. /tmp
          1. 用于存放临时文件。系统和应用程序在运行时可能需要创建临时文件,这些文件通常会在系统重启时删除。
        16. /usr
          1. 包含用户程序和数据。这个目录通常包含系统中安装的大多数应用程序和库文件。例如,/usr/bin 包含大多数用户命令,/usr/lib 包含库文件。
        17. /var
          1. 包含变化的文件,如日志文件、邮件、缓存和其他经常变化的数据。常见目录有 /var/log(日志文件)、/var/mail(邮件)等。
        18. /run
          1. 运行文件,运行后就没有了。
    3. linux文件和目录管理规范

      1. 文件类型
        1. -:普通文件
        2. d:目录
        3. l:符号链接
        4. 其他类型(例如,c 代表字符设备-》打印机-终端-tty等,b 代表块设备)
        5. s:套接字文件
        6. p:管道文件
      2. 命令的规范与格式
        1. linux的所有的命令都可以看成
          1. 命令     【选项】 【待操作对象】
          2. 比如:ls -l  /home表示显示home目录的文件。
      3. 文件管理的命令
        1. 改变目录
          1. 命令:cd 【目录】
            1. 解释:切换到对应目录
            2. 选项:
              1. ..:切换到上一级
              2. /:切换到下一级
        2. 创建文件
          1. 命令:touch 【选项】文件名
            1. 解释:创建新文件或者更新已有文件时间戳
            2. 选项:
              1. -c: 不创建新文件,只更新文件的时间戳。
              2. -a:只更改访问时间
              3. -m:只更改修改时间
              4. -t:使用指定的时间(格式为 [[CC]YY]MMDDhhmm[.ss])来更新文件的时间戳。
              5. -r:使用另一个文件的时间戳来更新文件时间。
                1. touch -r 引用文件 跟新文件
              6. touch 可以一次性创建多个文件
                1. touch file1.txt file2.txt file3.txt
        3. 创建目录
          1. 命令:mkdir 【选项】 目录名 
            1. 解释:创建新的目录。它可以创建单个或多个目录,还可以递归创建嵌套的目录结构。
            2. 选项:
              1. -p: 创建多级目录(即使中间目录不存在)。
              2. -v: 显示每个目录创建的详细信息。
              3. -m(mode):设置新目录的权限,类似 chmod
                1. mkdir -m 755 new_directory
        4. 删除
          1. 命令:rmdir 【选项】 目录名
            1. 解释:删除空目录。如果目录中包含任何文件或子目录,rmdir 将不会删除该目录,并且会报错。rmdir 只适用于删除已经为空的目录。
            2. 选项:
              1. -p(parents):递归删除目录及其父目录(如果它们也是空的)。这意味着,如果指定的目录删除后,父目录也变成空的,那么这些父目录也会被删除。(要写全路径
              2. --ignore-fail-on-non-empty:忽略非空目录的删除失败错误。
          2. 命令:rm 【选项】 文件/目录
            1. 解释:用于删除文件和目录。它是一个功能强大且危险的命令,因为一旦文件或目录被删除,通常无法轻易恢复,因此使用时需要特别小心。
            2. 选项:
              1. -r--recursive:递归删除目录及其内容。这个选项非常危险,删除后无法恢复。
              2. -f--force:强制删除文件或目录,忽略不存在的文件,并且不提示确认。
              3. -i:在删除每个文件或目录前提示确认。
              4. -v--verbose:显示删除过程中的详细信息。
        5. 移动与重命名
          1. 命令:mv 【选项】 文件/目录
            1. 解释:移动或重命名文件和目录。
            2. 选项:
              1. -i(interactive):在覆盖目标文件前提示确认。如果目标位置已经存在一个文件或目录,使用 -i 会提示用户是否确认覆盖。
              2. -f(force):强制移动文件或目录,不会提示确认,直接覆盖目标位置的文件或目录。
              3. -n(no-clobber):不覆盖任何已经存在的文件。这个选项和 -f 相反,它会阻止覆盖目标位置已有的文件。
              4. -v(verbose):显示详细的操作信息。每次移动或重命名文件时,都会显示相关信息。
        6. 复制
          1. 命令:cp 【选项】 源文件/目录   目标目录
            1. 解释:复制文件和目录。
            2. 选项:
              1. -r--recursive:递归复制目录及其所有内容。
              2. -f--force:强制复制文件,覆盖目标位置的文件而不提示。
              3. -i--interactive:在覆盖目标文件前提示确认。
              4. -u--update:只复制源文件比目标文件新的文件,或者目标文件不存在的文件。
              5. -v--verbose:显示详细的复制过程。
              6. -p:保留文件的属性,如修改时间、权限等。
        7. 查看文中内容
          1. 命令:cat
            1. 解释:命令用于查看、连接和显示文件的内容。它是一个非常常用的命令,适用于快速查看文件内容、将多个文件的内容合并输出到终端,或者将文件的内容重定向到另一个文件中。
            2. 选项:
              1. -n:为输出的每一行添加行号。
              2. -b:为非空行添加行号。
              3. -s:压缩空白行,多个空白行只显示一个。
              4. -E:在每行的末尾显示 $ 符号。
              5. -T:将制表符显示为 ^I
          2. 命令:head
            1. 解释:用于显示文件的开头部分,默认情况下显示前 10 行内容。它对于查看大型文件的前几行内容非常有用。
            2. 选项:
              1. -n:指定显示的行数。
              2. -c:指定显示的字节数。
              3. -q:静默模式,忽略文件名的输出,只显示内容。
              4. -v:总是显示文件名。
          3. 命令:tail
            1. 解释:用于显示文件的结尾部分,默认情况下显示最后 10 行内容。它通常用于查看文件的最新日志条目或其他文件的最后几行内容。
            2. 选项:
              1. -n:指定显示的行数。
              2. -c:指定显示的字节数。
              3. -q:静默模式,忽略文件名的输出,只显示内容。
              4. -v:总是显示文件名。
              5. -f:实时追踪文件内容的变化,通常用于监视日志文件的更新。
          4. 命令:more 【选项】 文件名字
            1. 解释:用于分页显示文件内容,特别适用于查看大文件或长内容时。它允许你逐屏查看文件内容,并提供简单的导航功能。
            2. 选项:
              1. -c:清除屏幕上的内容,并从文件的顶部开始显示。
              2. -p:使用 "p" 键来分页,"q" 键退出。
              3. -s:压缩空行,将多个连续的空行合并为一行显示。
              4. -u:不使用屏幕的光标来显示文本,适用于终端不支持光标的情况。
              5. -d:在到达文件末尾时显示 "Press space to continue, 'q' to quit" 提示,而不是默认的 "More" 提示。
            3. 操作:
              1. Space:向下翻页显示内容。
              2. Enter:向下滚动一行显示内容。
              3. b:向上翻页显示内容。
              4. /pattern:搜索 pattern(匹配模式),按 n 键跳到下一个匹配项,按 N 键跳到上一个匹配项。
              5. q:退出 more,返回到命令行提示符。
              6. f:向下翻页,与 Space 相同。
              7. d:向下滚动半页内容。
          5. 命令:grep 【选项】 '关键字' 文件
            1. 解释:用于在文件中搜索与指定模式匹配的行,并将这些行输出到终端。
            2. 选项:
              1. -i:忽略大小写。
              2. -v:反向匹配,显示不包含指定模式的行。
              3. -r-R:递归搜索目录及其子目录中的文件。(后跟目录)
              4. -l:仅列出包含指定模式的文件名。
              5. -n:显示匹配行的行号。
              6. -c:显示匹配模式的行数。
              7. -H:显示匹配行所在的文件名。
              8. -o:仅显示匹配模式的部分,而不是整行。
              9. -w:只匹配整个单词。
              10. -x:只匹配整行。
              11. --color:高亮显示匹配的模式(默认)
              12. -f:从文件中读取模式。
        8. 查看当前目录位置
          1. 命令:pwd 【选项】
            1. 解释:显示当前工作目录的绝对路径
            2. 选项:
              1. -P(physical):显示物理路径,解析所有符号链接,显示实际的目录路径。
              2. -L(logical):显示当前逻辑路径(默认行为),基于 PWD 环境变量。这是使用 cd 命令后 Shell 记录的路径。
        9. 查看当前目录内容
          1. 命令:ls 【选项】【目录】
            1. 解释:显示指定目录下的文件和目录列表
            2. 选项:
              1. -l:使用长格式显示文件信息,包括权限、所有者、组、大小和最后修改时间等。
              2. -a:显示所有文件,包括隐藏文件(以 . 开头的文件)
              3. -h:与 -l 选项结合使用,以人类可读的格式显示文件大小(如 KB、MB、GB)。
              4. -R:递归地显示目录及其子目录的内容。
              5. -t:按修改时间排序文件,最近修改的文件排在最前面。
              6. -r:反向排序显示文件列表。
              7. -S:按文件大小排序,最大的文件排在最前面。
              8. -1:每行显示一个文件名。
              9. --color:为输出的文件名添加颜色,以区分文件类型(目录、符号链接、可执行文件等)。
              10. -d:仅列出目录本身,而不是列出其内容。通常与 * 通配符结合使用。
              11. -F:在每个文件名后附加一个指示符,表示文件类型(如目录后面加 /,可执行文件后面加 *,符号链接后面加 @ 等)。
              12. --help:显示 ls 命令的帮助信息,解释所有可用选项。
        10. 修改文件内容
          1. 命令:vim或者vi 【选项】文件名
            1. 解释:vi 是 Unix 系统中最基本的文本编辑器,而 vimvi 的增强版,提供了更多的功能和更友好的用户体验。它们支持多种模式,如命令模式、插入模式、和底线命令模式,用于不同的编辑操作。
            2. 选项:
              1. -i {viminfo}:指定 viminfo 文件来保存或读取编辑记录。
                1. vim -i viminfo文件 file.txt
              2. -R:以只读模式打开文件。
              3. -r:恢复上次崩溃时保存的文件内容。
              4. -o:水平分割窗口,打开多个文件。
              5. -O:垂直分割窗口,打开多个文件。
              6. -b:以二进制模式编辑文件。
              7. -c:启动 Vim 时执行指定的命令。
              8. -u {vimrc}:指定使用的 Vim 配置文件。
              9. -N:以非兼容模式运行 Vim(关闭兼容 vi 的行为)。
              10. -x:以加密模式打开文件
              11. -p:在标签页中打开多个文件。
              12. -h:显示帮助信息,列出所有选项。
            3. 其它的
              1. ### Vim/Vi 快速入门清单

                #### 1. **启动 Vim/Vi**
                   ```bash
                   vim filename  # 打开文件
                   vi filename   # 打开文件
                   ```

                #### 2. **模式简介**
                   - **命令模式**:默认模式,执行各种命令。
                   - **插入模式**:输入文本。
                   - **可视模式**:选择文本块。

                #### 3. **基本命令**

                   - **进入插入模式**:
                     - `i`:在光标前插入。
                     - `a`:在光标后插入。
                     - `I`:在行首插入。
                     - `A`:在行尾插入。
                     - `o`:在当前行下新建一行。
                     - `O`:在当前行上新建一行。

                   - **退出插入模式**:
                     - `Esc`:回到命令模式。

                   - **保存/退出**:
                     - `:w`:保存文件。
                     - `:q`:退出 Vim。
                     - `:wq`:保存并退出。
                     - `:q!`:强制退出不保存。

                   - **移动光标**:
                     - `h`:左移。
                     - `j`:下移。
                     - `k`:上移。
                     - `l`:右移。
                     - `gg`:移到文件开头。
                     - `G`:移到文件结尾。
                     - `^`:移到行首。
                     - `$`:移到行尾。

                   - **删除文本**:
                     - `x`:删除光标所在的字符。
                     - `dd`:删除整行。
                     - `dw`:删除一个单词。
                     - `d$`:删除到行尾。

                   - **复制/粘贴**:
                     - `yy`:复制整行。
                     - `y` + 移动命令(如 `y$` 复制到行尾)。
                     - `p`:在光标后粘贴。
                     - `P`:在光标前粘贴。

                   - **撤销/恢复**:
                     - `u`:撤销上一步操作。
                     - `Ctrl + r`:恢复撤销的操作。

                   - **查找/替换**:
                     - `/pattern`:向下查找 `pattern`。
                     - `?pattern`:向上查找 `pattern`。
                     - `n`:下一个匹配。
                     - `N`:上一个匹配。
                     - `:%s/old/new/g`:将文件中的所有 `old` 替换为 `new`。

                   - **文件操作**:
                     - `:e filename`:打开新文件。
                     - `:w filename`:另存为。
                     - `:tabnew filename`:在新标签页中打开文件。

                   - **窗口分割**:
                     - `:split filename`:水平分割窗口打开文件。
                     - `:vsplit filename`:垂直分割窗口打开文件。
                     - `Ctrl + w, w`:切换窗口。

                   - **可视模式**:
                     - `v`:字符可视模式。
                     - `V`:行可视模式。
                     - `Ctrl + v`:块可视模式。

                #### 4. **退出 Vim/Vi**
                   - `:q`:退出。
                   - `:q!`:强制退出(不保存)。
                   - `:wq`:保存并退出。

               vim异常关闭,产生的临时文件:swap,对错误离开文件的备份,临时存放。格式:.文件名.swap

        11. 路径
          1. 绝对路径:从根开始,可以找到所有文件,但是当层数多的时候就太多了。
            1. 比如:/home/ly
          2. 相对路径:
            1. 当前:要么不写要么./
            2. 上一级:../
  2. 用户管理

    1. 与用户管理的相关文件

      1. /etc/passwd存储系统中的用户账号信息,包括用户名、用户ID(UID)、组ID(GID)、用户的主目录、登录 shell 等信息。密码字段通常被设置为“x”,表示密码被加密并存储在 /etc/shadow 文件中。
         
        1. 用户名:x:uid:gid:用户描述:用户家目录:shell脚本
          1. 用户名:登录系统的名字
          2. x:密码占位符,具体内容不在这里
          3. uid:用户的身份证号
            1. 一般来说,uid:0为特权用户,1-499为系统用户,1000-无限大为普通用户。500-999通常认为是系统用户
          4. gid:用户组的身份证
          5. 用户描述:用于对用户的描述,通常偷懒就使用用户名
          6. 用户家目录:用户自己的控制空间
          7. shell:命令执行系统。
      2. /etc/shadow存储用户的加密密码以及密码策略(如密码有效期、最后更改时间等)。只有 root 用户可以读取此文件,提供了更高的安全性。
         
        1. 用户名:加密后的密码.:最后一次修改时间:最小时间(密码修改时间,到了期限才可以改):密码有效期:警告时间(提示修改密码):不活动时间(表示用户未使用账号保留期限,超过就禁用):失效时间(从账号创建开始,规定时间后销毁):保留暂时不用
      3. /etc/group存储系统中的用户组信息,包括组名、组ID(GID)以及该组的成员。
        1. 组名:组密码占位符:组ID:组成员(新建时只有自己默认不显示)
      4. /etc/gshadow存储组的加密密码和管理员信息,仅 root 用户可以读取此文件。
      5. /etc/skel/当创建新用户时,此目录中的文件会被复制到新用户的主目录中,作为默认配置文件。常见的文件包括 .bashrc.profile 等。
      6. /etc/login.defs配置与用户账号相关的全局参数,例如密码有效期、密码长度、UID 和 GID 的最小和最大值等。
      7. /etc/default/useradd定义使用 useradd 命令时的默认设置,例如默认 shell、默认主目录路径等。
      8. /var/spool/mail/存储用户的电子邮件(如果系统配置了本地邮件服务)。每个用户都有一个与其用户名对应的邮件文件。
      9. /home/系统中所有用户的默认主目录位置。每个用户在此目录下有一个以用户名命名的子目录,存放用户的个人文件和配置文件。
    2. 用户与组的概念

      1. 用户可分为:超级用户root(uid=0),系统用户(uid=1-499),普通用户(uid=1000-无穷大)
        1. 系统用户账户提供支持服务进程使用,这些进程通常不需要以超级用户身份运行。系统会为它们分配非特权账户,确保其文件和其他资源不受彼此以及以上系统上普通用户的影响。用户无法使用系统用户账户以交互方式登录。
        2. 超级用户账户负责管理系统,超级用户的名称为root,其账户的UID为0,超级用户具有完全的系统访问权限
        3. 普通用户对系统具有有限的访问权限
        4. 对id命令的简单用法(查看当前,检查是否存在)
      2. 组通俗理解就是一群用户的集合。组可向其中的所有用户授予文件访问权限,组内的用户享有该组的所有权限,这种通俗意义上的组称为组员用户的补充组,补充组一般允许存在多个成员。与用户一样,组也具有组名以便于识别。在内部,系统通过分配唯一标识符(组ID或GID)来区分不同的组。

  3. 用户管理的命令(如果有些命令无法使用就表示要root或同等权限)

    1. 一些不得不看的前行篇

    2. useradd:添加用户

      1. 语法:useradd 【选项】用户名
      2. 常用参数:
        1. -m: 创建用户主目录(/home/用户名),不写默认就有。
        2. -d: 指定用户主目录。
        3. -s: 指定用户的默认 Shell。
        4. -G: 将用户添加到指定的组中(多个组用逗号分隔)。
    3. usermod:修改用户属性

      1. 语法:usermod 【选项】用户名
      2. 常用参数:
        1. -aG: 将用户追加到指定的组中。
          1. usermod -aG groupname username
            1. -aappend):将用户添加到指定的附加组,而不会覆盖其原有的附加组列表。
            2. -G:指定附加组的列表,多个组名用逗号分隔。
            3. 如果不加 -a 选项,只用 usermod -G,则会替换用户当前的附加组,而不是追加。为了保留用户现有的组并添加新组,必须使用 -a 选项。
        2. -s: 修改用户的默认 Shell。
          1. usermod -s /bin/zsh username
        3. -d: 修改用户的主目录。(不会创建但是会显示,用的时候要么错误要么就建立目录)
          1. usermod -d /new/home/dir username
        4. -l 新用户名 旧名:用来将旧用户名修改为新的用户名。
    4. userdel:删除用户

      1. 语法:userdel 【选项】用户名
      2. 常用参数:
        1. -r: 删除用户的主目录及其内容。一定要用,不然不会删除目录(记得之前我们转移目录lly吗?因为没有,所以没有转移,所以下次转移要先建立)
    5. passwd:设置与删除密码

      1. 语法:passwd 【选项】【用户名】
      2. 常用参数:
        1. -d: 删除指定用户的密码(使其不需要输入密码登录)。
          1. passwd -d username
            
          2. 这会将密码设置为空,但这并不意味着禁用该用户,除非系统被配置为强制使用密码登录。
        2. -l: 锁定用户账户。
          1. passwd -l username

        3. -u: 解锁用户账户。
          1. passwd -u username

    6. id:查看与检测用户是否存在

      1. 语法:id 【用户名】
      2. 不写用户名就是当前用户
    7. who:显示当前登录用户

      1. 语法:who
      2. 显示当前系统上登录用户(终端登录和系统登录不一样,系统登录是你开机时登录的账户)
    8. w:显示系统当前登录用户及其活动信息

      1. 语法:w 【选项】【用户名】
      2. 常用参数:
        1. -h: 不显示标题行。
        2. -s: 显示简洁的输出,不包括所有列。
      3. 输出字段说明
        1. USER: 当前登录的用户名。
        2. TTY: 用户登录的终端设备(如 tty1pts/0 等)。
        3. FROM: 用户登录的源(IP 地址或主机名)。
        4. LOGIN@: 用户登录的时间。
        5. IDLE: 用户自上次活动以来的空闲时间。
        6. JCPU: 当前终端的所有进程所消耗的 CPU 时间。
        7. PCPU: 当前用户正在运行的进程所消耗的 CPU 时间。
        8. WHAT: 用户当前正在执行的命令或程序。
    9. su:用户切换

      1. 语法:su 【选项】【用户名】
      2. 常用参数:
        1. - 或 --login: 启动一个登录 shell,模拟用户登录时的环境变量。这是最常用的选项,它会读取目标用户的登录环境设置,例如 .profile.bash_profile 或 .bashrc 文件。
          1. su - 用户名
        2. -c: 执行指定的命令并退出。例如,使用 root 权限执行 ls 命令:
          1. su -c 'ls /root'
        3. -s: 使用指定的 shell。例如,使用 /bin/bash 作为 shell:
          1. su -s /bin/bash 用户名
    10. 修改主机名(注意在root或者sudo时用,切换不了重开一个终端就可以了)

      1. 临时:hostname 新主机名(不写名字就是查看当前临时主机名)
      2. hostnamectl 【选项】【名字】永久
        1. hostnamectl set-hostname 新主机名
        2. hostnamectl查看当前主机名
      3. 当然永久还可以改/etc/hostname文件但是不建议,我也没想学这个
    11. groups:显示用户所属组(先熟悉一下反正简单)

      1. 语法:groups 【用户名】
      2. 不写用户名就是当前用户
  4. 用户组管理命令(建议root)

    1. 用户组相关信息

      1. 主组也叫基本组(Primary Group):每个用户都有一个主组,当用户创建新文件时,该文件默认属于用户的主组。主组的 GID 存储在 /etc/passwd 文件中。
      2. 附加组(Supplementary Group):用户可以属于多个附加组,附加组赋予用户对其他组文件和资源的访问权限。附加组信息存储在 /etc/group 文件中。
      3. 系统组(一般是1-999):为系统服务和进程创建的组,通常不用于普通用户。
      4. 普通用户组(gid大于1000,某些大于500):为管理用户文件和权限的组。
      5. 特权组(和普通用户一样):赋予用户更高的权限,如执行系统管理任务。
      6. GID 的范围从 0 到 65535。在这个范围内,0 通常被保留给系统管理员(root 用户),而 GID 范围内的其他数字则用于普通用户组。
      7. 基本组和用户的的关系是一对多,一个基本组可以是多个用户的基本组,但是一个用户只有一个基本组。
    2. compgen:查看所有组名

      1. 语法:compgen 选项
      2. 选项:
        1. compgen -c:列出所有可执行命令。
        2. compgen -a:列出所有定义的别名。
        3. compgen -b:列出所有 shell 内置命令。
        4. compgen -k:列出所有 shell 保留字(关键字,如 ifelse 等)。
        5. compgen -A function:列出所有已定义的函数。
        6. compgen -u:列出系统中的所有用户。
        7. compgen -g:列出系统中的所有组。
    3. groupadd:添加组

      1. 语法:groupadd 【选项】 组名
      2. 常用参数:
        1. -g: 指定组 ID(GID)(小g是基本组,大G是附加组)。
          • groupadd -g 1001 groupname
    4. groupmod:修改组

      1. 语法:groupdel 【选项】组名
      2. 常用参数:
        1. -g: 修改组 ID(GID)当然可以直接指定组名修改。
          1. groupmod -g 1002 groupname
        2. -n: 修改组名。
          1. groupmod -n newgroupname oldgroupname
    5. groupdel:删除组

      1. 语法:groupdel 组名
    6. gpasswd:设管理组成员

      1. 语法:gpasswd 【选项】组名
      2. 选项:
        1. -a 用户名:将用户添加到组中。
        2. -d 用户名:将用户从组中删除。
        3. -r:删除组密码。
        4. -R:禁用组的密码功能(用户无法使用 newgrp 命令切换到该组)。
        5. -A 用户名:指定组的管理员。
        6. -M 用户名1,用户名2,...:设置组成员(一次性添加多个用户到组中,覆盖现有组成员)。
        7. 什么选项都没有:就是设置密码
          1. 当切换到有密码的组就会要求
          2. newgrp developers
          3. newgrp groupname 命令用于切换到指定的组 (groupname),并获得该组的权限。在你执行这个命令后,当前的 shell 会改变组环境,并继承该组的权限。
          4. 退出组切换: 使用 newgrp 切换组后,该命令会启动一个新的 shell 环境。当你想退出当前组并返回到原来的组时,只需输入 exit
          5. 当你使用 newgrp 切换到另一个组时,它只会影响当前 shell 会话,在你关闭或退出这个 shell 后,权限将恢复到之前的组。
          6. newgrp 命令常用于临时更改组身份,以便在某些组权限下执行操作。
    7. getent:获取信息

      1. 语法:getent 【数据库】【条目】
      2. 数据库:
        1. passwd:用户信息
        2. group:组信息
        3. hosts:主机信息
        4. services:服务信息
        5. protocols:协议信息
        6. networks:网络信息
      3. 条目:
        1. 指定要查询的具体条目。例如,用户名、组名、主机名等。如果不指定条目,getent 将列出数据库中的所有条目。
    8. id:又来了

      1. 语法:id 【用户名】
  5. 提权

    1. 为什么提权

      1. 提权就是提升权限,root就是上帝,不是上帝的我们成为了上帝,就会发生一些不好的事,比如删库跑路,牢底坐穿。
      2. 但是如果我们不是上帝,就不可以好好的管理这个世界
      3. 提权就是让我们永久或者临时拥有god的力量。
    2. su大天使加百利

      1. su(Switch user):用于切换用户,无参数表示切换到root,普通用户到其它要名字密码,root用户到其他就不要密码。
      2. su 有些时候是这样写的,su - username,为什么会有-,中间的-表示根据彻底的切换(连着工作目录与shell一起切换)
    3. sudo:普通用户提升到root权限,不切换用户

      1. 文件:/etc/sudoers中定义了哪些用户可以有权限执行sudo
      2. sudo visudo 修改/etc/sudoers(用有root权限的用户)
      3. 每次都要在sudoers文件中改,有点麻烦,之前我们看到了wheel组好像也是all。是不是可以将用户加入这个组?是的,不仅如此还可以创建组,让其和wheel一样牛逼。
        1. 遇到的问题,但我删除ly1中的ly0时,表示不可以,这是因为ly1是ly0的主组。
      4. nano:一个简单易用的文本编辑器
        1. nano 文件名
        2. 保存文件
          • Ctrl + O(即按住 Ctrl 键,然后按 O 键)。
          • 然后按 Enter 键确认文件名。
        3. 退出 nano
          • Ctrl + X 退出编辑器。如果有未保存的更改,nano 会提示你保存。
        4. 取消操作
          • Ctrl + C 取消当前操作(如取消正在进行的命令或操作)。
    4. 临时提权

      1. 使用 sudo
      2. 使用 su
      3. 使用 sudo -ssudo -i

        1. sudo -ssudo -i 可以启动一个具有 root 权限的 shell 会话。

    5. 永久提权

      1. 编辑 /etc/sudoers 文件

        1. 使用 visudo 编辑 /etc/sudoers 文件是最安全的方法,因为它会检查语法错误。 sudo visudo

      2. 添加用户到 sudoers 文件

        1. sudoers 文件中,添加一行使指定用户拥有所有命令的权限。示例:

          username ALL=(ALL) NOPASSWD:ALL

          username 替换为你要赋予永久提权的用户名。

      3. 保存并退出

        1. 保存对 /etc/sudoers 文件的修改,并退出 visudo 编辑器。通常在 visudo 中,按 Ctrl+X,然后按 Y 保存并退出。

第三章:用户的权限

  1. 基本权限ugo

    1. 基本权限分类
      1. 用户权限(u - user):文件所有者的权限。
      2. 组权限(g - group):文件所属组的权限。
      3. 其他权限(o - others):其他用户的权限。
    2. 权限类型分类:
      1. r(read)4:读取文件内容或列出目录内容。
      2. w(write)2:写入文件或修改文件内容,创建或删除目录中的文件。
      3. x(execute)1:执行文件或进入目录。
      4. tsticky bit 权限标志,通常显示在权限字符串的最后(suid,sgid)。
        1. sticky bit 是一个特殊的权限标志,它用于目录,确保只有文件的所有者(或者超级用户)才能删除或重命名该目录中的文件。
      5. s:特殊权限,当设置在文件、目录上时,它使得该程序在运行时具有程序文件所有者的权限,而不是执行者的权限。这对于需要提高权限以完成某些操作的程序非常重要。如果一个文件root所有,设置了s,运行时就算不是root也可以在这个文件完成root的操作,所以建议没事别搞(suid,sgid)
    3. 查看看文件或者文件夹的权限,ls -l
      1. -rwxr-xr--
      2. 文件所有者(user)有读、写、执行权限(rwx)。
      3. 所属组(group)有读和执行权限(r-x)。
      4. 其他人(others)只有读权限(r--)。
    4. 命令
      1. chmod [选项] 权限 文件名(更改文件权限)
        1. chmod u+rw 文件名
        2. chmod 755 文件名
        3. -R:表示递归修改
          1. chmod -R [权限] [目录]
        4. 如果chmod 4位 那么第一位表示特殊位,4suid,2sgid,1sticky
      2. chown [选项] 用户名:组名 文件名(更改文件所有者)
        1. chown alice 文件名
        2. chown alice:staff 文件名
      3. chgrp [选项] 组名 文件名(更改文件组)
        1. chgrp [选项] 组名 文件名
        2. 选项
          1. -c:显示修改的详细信息。
          2. -f:强制执行,不显示错误信息。
          3. -v:详细显示操作的结果。
          4. -R:递归地更改指定目录及其下所有文件的组。
      4. chage命令用于修改用户密码的到期信息和其他密码相关的设置。它可以控制密码的有效期、宽限期以及账户的到期日期等。
        1. chage [选项] 用户名
        2. 选项
          1. -l:列出指定用户的密码过期信息。
          2. -m:设置密码的最小使用时间(即用户修改密码后,必须等待的最小天数)。
          3. -M:设置密码的最大使用时间(即密码的最大有效期)。
          4. -d:设置上次修改密码的日期(以YYYY-MM-DD格式)。
          5. -E:设置账户到期日期(以YYYY-MM-DD格式)。
          6. -I:设置密码过期后账户被锁定前的宽限期(即在密码过期后,账户锁定之前的天数)。
      5. umask [掩码](设置默认权限)
        1. 查看当前 umask 设置
          1. umask(什么都不加)
          2. umask 0022
            1. 逻辑,就是目录777,文件666,减去掩码,就是默认
  2. 基本权限acl

    1. setfacl 命令用于为文件或目录设置更详细的权限控制(ACL)。
    2. setfacl [选项] 权限 文件名/目录
      1. -m:修改 ACL 条目(modify)。
      2. -x:删除 ACL 条目(remove)。
      3. -b:移除所有 ACL 条目(remove all)。
      4. -k:移除默认 ACL 条目。
      5. -R:递归地设置 ACL(recursive)。
      6. -d:设置默认 ACL(仅对目录有效,新文件会继承这些权限)。
        1. setfacl -d -m u:john:rw /path/to/directory
      7. --set:直接设置完整的 ACL。
    3. getfacl 文件名(查看文件acl)
    4. passwd [选项] [用户名](修改用户密码)
      1. -l:锁定用户账户:
      2. -u:解锁用户账户:
      3. -x :用于设置密码的最大有效天数,即密码过期前可使用的天数。:天数为-1表示永不过期
      4. -e:立即过期用户密码,用户下次登录时必须更改密码。
      5. -d:删除用户的密码,使得用户可以使用空密码登录(不建议这样做)。
    5. watch [选项] <命令>(不带选项默认两秒)
      1. -n 秒数: 指定执行命令的时间间隔(默认是 2 秒)。
        1. watch -n时间(秒) '命令'(用来每n秒执行一次命令)
      2. -d: 高亮显示输出结果的变化。
      3. -t: 不显示标题信息(显示更新频率、命令等),只显示命令的输出内容。
      4. -c: 在输出中尝试保留命令的颜色效果。
  3. 特殊权限

    1. Setuid(Set User ID)
      1. 当可执行文件设置了 Setuid 位时,任何用户在执行该文件时都会以文件所有者的权限运行,而不是以执行用户的权限运行。通常用于需要以 root 权限执行的程序
      2. chmod u+s 文件名
      3. 让可执行文件以文件所有者的权限运行,而不是以执行者的权限运行。
    2. Setgid(Set Group ID)
      1. 当可执行文件设置了 Setgid 位时,任何用户在执行该文件时会以文件所属组的权限运行。如果在目录上设置 Setgid,则该目录中创建的所有文件或子目录将继承该目录的组而不是创建者的默认组。
      2. chmod g+s 文件名或目录名
      3. 让文件以文件所属组的权限运行,或让目录内的文件继承该目录的组。
    3. Sticky bit
      1. Sticky bit 通常用于目录。当在目录上设置了 Sticky bit 后,只有文件的所有者或 root 用户可以删除或重命名该目录中的文件,其他用户即便对目录有写权限,也无法删除其他用户的文件。这通常应用在 /tmp 目录上,以防止用户删除其他用户的临时文件。
      2. chmod +t 目录名
      3. 防止非所有者在带有该权限的目录中删除或重命名其他用户的文件。
    4. 文件属性chattr
      1. chattr [选项] [属性] 文件名
      2. 用于修改文件或目录的属性。
      3. 常用选项

        • +:增加某个属性。
        • -:移除某个属性。
        • =:设置属性为指定值(清除其他属性)。
      4. 常用属性

        • i:不可变,不能修改或删除文件。
        • a:只能追加,文件内容只能追加,不能修改或删除。
      5. 查看文件属性: 使用 lsattr 查看文件的属性。
        • lsattr 文件名
    5. 进程掩码umask
      1. umask 是用于设置新建文件和目录默认权限的命令。它通过掩码的方式,决定用户、组和其他人对新创建文件或目录的默认权限。umask 掩码是从系统默认权限中减去对应的权限位。
      2. 默认权限

        1. 文件默认权限666(没有执行权限,因为大多数文件不需要可执行权限)
        2. 目录默认权限777(读、写、执行权限)
      3. umask 计算方式

        1. 文件权限666 - umask
        2. 目录权限777 - umask
      4. 查看当前 umask
        1. 输出通常是四位数,例如 0022,前导的 0 是为了八进制表示法,后面三位是实际的掩码。

第四章:进程管理

  • 0.开头概念

    • 进程管理是系统管理中的重要部分,包括启动、监控、控制和终止进程。
      • 进程就是已经启动的可执行程序的运行实例
        • 一个文件
        • 被分配有内存空间
        • 有权限限制
        • 程序代码有一个或者多个副本
        • 有生命状态
    • 1. 进程(Process)
      • 定义:进程是正在执行的程序的实例。每个进程都有唯一的进程 ID(PID)。
      • 组成:包括程序代码、数据、进程控制块(PCB)等。
      • 生命周期:进程从创建、执行、等待、终止等状态。
    • 2. 进程 ID(PID)
      • 定义:每个进程在系统中都有一个唯一的标识符称为 PID。
      • 查看:使用 pstophtop 等命令可以查看进程的 PID。
    • 3. 父进程和子进程
      • 父进程:创建其他进程的进程。ppid
      • 子进程:由父进程创建的进程。pid
      • fork():系统调用用于创建新进程,新进程是父进程的子进程。
    • 4. 进程状态
      • 运行(R):进程正在执行。
      • 就绪(S):进程等待 CPU 时间片,准备执行。
      • 等待(D):进程正在等待 I/O 操作完成,无法中断。
      • 停止(T):进程被暂停或终止。
      • 僵尸(Z):进程已终止,但仍在系统中保留状态,等待父进程读取其退出状态。
    • 5. 进程优先级
      • 优先级:决定进程获得 CPU 时间的优先级。
      • nice:启动进程时设置优先级(负值为高优先级,正值为低优先级)。
      • renice:调整运行中进程的优先级。
    • 6. 进程调度
      • 调度器:内核负责决定哪个进程获得 CPU 使用权。
      • 调度算法:包括先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(Round Robin)等。
    • 7. 进程通信
      • 管道(Pipe):允许两个进程之间通过管道传递数据。
      • 消息队列(Message Queue):在进程间传递消息。
      • 共享内存(Shared Memory):允许多个进程访问同一块内存区域。
      • 信号量(Semaphore):用于进程间同步和互斥。
    • 8. 进程控制
      • 信号(Signal):用于通知进程某些事件(如 SIGTERM 终止信号)。
      • kill:发送信号到指定进程。
      • killall:根据进程名称发送信号。
      • pkill:根据进程名称或其他属性发送信号。
    • 9. 进程间关系
      • 进程组(Process Group):多个相关进程组成一个组,用于控制。
      • 会话(Session):一组进程,其中包括一个或多个进程组。
      • 控制终端(Control Terminal):与会话关联的终端,用于交互。
    • 10. 僵尸进程
      • 定义:进程已经终止,但其进程控制块(PCB)仍保留在系统中,直到父进程读取其退出状态。
      • 清理:父进程通过 wait() 系统调用获取子进程的退出状态,清除僵尸进程。
    • 11. 守护进程(Daemon)
      • 定义:在后台运行的进程,通常负责系统服务。
      • 启动:通常在系统启动时启动,并在后台运行。
  • 1. 查看进程

    • ps:显示当前运行的进程。

      • ps [选项]

        • -e-A:显示所有进程。
        • -f:显示详细的进程信息(包括父进程 ID)。
        • -u 用户名:显示指定用户的进程。
        • aux:显示所有进程,包括其他用户的进程,格式化输出。
          • a显示现行终端下的所有程序,u以用户为主显示情况,x不以终端区分
        • --sort  -上图列名(小写)排序。
        • ps axo 【要选择的列,小写】
    • top:实时显示系统中进程的资源使用情况。

      • top [选项]

        • -d 秒数:设置更新间隔时间(秒)。
        • -p 进程ID:只显示指定的进程。(多个逗号分开)
        • -u 用户名:只显示指定用户的进程。
    • htop:增强版的 top,提供更友好的界面。(我的不自带,估计要下载,没有就算了)

      • htop [选项]

        • -u 用户名:只显示指定用户的进程。
        • -p 进程ID:只显示指定的进程。
    • pgrep:根据名称或其他属性查找进程 ID。(不用管这个)

      • pgrep [选项] 模式

        • -u 用户名:查找属于特定用户的进程。
        • -l:列出进程 ID 和进程名。
        • -f:根据完整的命令行查找进程。
        • -o:显示最早创建的进程 ID。
        • -n:显示最新创建的进程 ID。
  • 2. 启动和停止进程(作业控制)

    • nohup:在后台运行进程,并使其在退出终端后继续运行。

      • nohup 命令 [选项] &

        • &:将进程放入后台运行。

        • nohup:表示 "no hang up",即使终端关闭,进程也不会终止。

        • 比如:nohup sleep 100 &(如果没有nohup关闭之前的终端,sleep命令被终止)

    • fg:将后台进程带回到前台运行。无参数将最近的后台进程带回前台

      • fg [%作业号]

      • 通过jobs命令可以找到作业号

    • bg:将进程放入后台运行。无参数将最近的暂停进程恢复到后台运行:

      • bg [%作业号]

    • jobs:显示所有后台作业及其作业号。

    • kill 【%作业号】没想到还可以这样呀

  • 3. 控制进程

    • kill:发送信号到进程,默认信号是 TERM(终止进程)。

      • kill [信号] 进程ID

        • -l:列出所有可用的信号。
        • -s 信号:指定要发送的信号。同等于-信号
          • SIGTERM(15):请求进程正常终止,允许进程清理资源。
          • SIGKILL(9):强制终止进程,无法被阻止或忽略(最后的最后用)。
          • SIGHUP(1):重新加载配置文件或终止与终端断开的进程。
        • 默认发送 SIGTERM(15),用于安全终止进程。
    • killall:根据进程名称发送信号。

      • killall [选项] 进程名

        • -s 信号:指定要发送的信号,默认是 SIGTERM
        • -i:交互式确认终止进程。
        • -v:详细显示被杀死的进程。
    • pkill:根据名称或其他属性发送信号。(了解)

      • pkill [选项] 进程名

        • -u 用户名:杀死属于指定用户的进程。
        • -f:匹配完整命令行。
          • pkill -f "python script.py"
        • -9:发送 SIGKILL 信号,强制终止。
        • 默认选项表示终止所有
    • xkill:通过鼠标点击窗口来强制结束进程(通常需要图形界面支持)。

      • xkill 是一个非常方便的工具,尤其在 GUI 环境中卡住或无法正常关闭的窗口时,通过鼠标点击来强制结束该窗口的进程。它在图形用户界面中处理卡死程序时非常有用。

    • kill -9:强制终止进程(KILL 信号),通常用作最后手段。

  • 4. 进程优先级

    • nice:以指定优先级启动进程。优先级范围从 -20(最高优先级)到 19(最低优先级)。

      • nice -n 优先级 命令

        • -n:指定优先级,范围为 -2019-20 为最高优先级(更高的调度优先级),19 为最低优先级(更低的调度优先级)。默认优先级为 0

        • 不写n就是默认优先级启动

    • renice:改变已运行进程的优先级。

      • renice -n 优先级 -p 进程ID

        • -n:指定新的优先级。
        • -p:指定要调整优先级的进程 ID(PID)。
        • 也可以使用 -u 用户名 为特定用户的所有进程调整优先级,或 -g 进程组ID 为整个进程组调整优先级。
  • 5. 进程信息

    • pstree:以树状图形式显示进程及其子进程。

    • tophtop:也可以用于查看进程的详细信息,如 CPU 和内存使用情况。

  • 6.虚拟文件系统proc

    • 目录内大部分存放的都是数字(代表了进程的信息,就是pid,跟着进程的改变而生成删除)
    • 虚拟文件系统:采集服务器自己的内核,进程运行信息
    • cpuinfo文件:放了cpu的信息
    • meminfo文件:放了内存信息
    • cmdline文件:存放的内核信息,
  • 第五章:管道与重定向

    • 引入

      • 如果使用date命令,就会打印系统时间,我如何在2024年9月20日18:17:33获取时间,并且记录下来?那么就会用到重定向。
        • 重定向就是向文件添加或者覆盖系统数据,当然反过来也一样
      • 文件描述符(File Descriptor, FD) 是用于表示进程与文件或其他输入输出资源(如管道、网络套接字等)之间的连接的整数值。每个文件描述符指向一个打开的文件表项,进程可以通过它来读写文件、设备或其他资源。
        • 常见的文件描述符:

          • 标准输入(stdin):文件描述符为 0,通常代表键盘输入。
          • 标准输出(stdout):文件描述符为 1,通常代表终端的输出。
          • 标准错误输出(stderr):文件描述符为 2,用于输出错误信息。
        • 文件描述符的用途:

          • 在 Linux 系统中,文件描述符用于管理进程打开的文件,通常通过系统调用(如 open()read()write())来处理。
          • 重定向管道 等操作本质上都是在控制文件描述符,将输出/输入定向到不同的文件、终端或设备上。
    • 重定向

      • 正确输出
        • 1>:同等于>
          • > 用于将标准输出重定向到文件,覆盖文件内容。如果你没有明确指定 1>,默认使用的就是 1>,所以 1>> 是等价的。
        • 1>>:同等于>>
          • >> 用于将标准输出追加到文件末尾,而不覆盖已有内容。与 > 类似,如果你不指定文件描述符,默认使用 1>>
      • 错误输出
        • 2>
          • 2> 用于将标准错误重定向到文件,覆盖文件内容。这对于捕获错误信息很有用。
        • 2>>
          • 2>> 用于将标准错误追加到文件末尾,而不是覆盖已有内容。
      • 同时重定向标准输出和标准错误
        • 如果你想同时将标准输出和标准错误都重定向到同一个文件,可以使用以下两种方式:
          • 将标准输出和标准错误一起重定向
            • 命令 > 文件 2>&1
            • 不起作用不用管,用简便写法
          • 简便写法(Bash 支持)
            • 命令 &> 文件
        • 分开写法
          • 命令 1> 文件 2> 文件
      • 输入
        • 标准输入的文件描述符为 0,默认情况下,命令从键盘接收输入。可以通过多种方式将输入提供给程序(终端也是一个程序)。
        • 可以使用 < 将文件的内容作为命令的输入。(代替键盘输入)
        • 语法
          • command < file
          • 命令多为cat,要说的是,cat没有参数表示将标准输入改为标准输出
          • 另外还有<<表示输入多行
          • 讲了这么多,<,<<我知道的用途目前就是写文件
            • cat >> 文件 << EOF(cat将输入变输出,<<输入多行,被改为输出>>到文件)
            • 因为<<是多行输入,所以要一个结束标志,这个标志自定义,但是大多数人都用EOF
    • 管道(|)

      • 当你使用管道符号 | 连接两个命令时,第一个命令的标准输出 (stdout) 会被传递给第二个命令的标准输入 (stdin)。你可以通过管道连接任意数量的命令,使数据流在这些命令之间进行传递和处理。
      • 语法
        • command1 | command2 | command3 ...
      • tee管道
        • 结合了输出重定向管道的功能。它可以将标准输入的数据同时输出到文件和标准输出,这意味着你既可以查看管道中的数据,也可以将这些数据保存到文件中。
        • command1 | tee [options] filename
          • command1:生成数据的命令。
          • filename:保存管道数据的文件名。
          • [options]
            • -a:以追加方式将数据写入文件,而不是覆盖文件。
        • 等一下是不是还有一个疑问|tee与|cat有什么区别?
          • 功能差异
            • cat 只是简单地显示数据。
            • tee 既显示数据又保存到文件,具有更强的实用性,适合记录和调试。
          • 用途差异
            • 使用 |【sudo】 cat 主要用于查看输出。
            • 使用 |【sudo】 tee 主要用于保存输出并同时查看。
        • 回到|tee 让我们用一下
          • 好的现在我们知道,|tee可以和|cat一样显示,还多了一个保存到文件的选项
      • |xargs
        • 用于从标准输入构建和执行命令行。它通常与其他命令结合使用,特别是在处理大量输出时,可以将输出转换为命令行参数,从而高效地执行。
        • command | xargs [options] command
          • 常见选项

            • -n N:每次调用 command 时使用 N 个参数。
            • -d DELIMITER:指定分隔符,默认为空格。
            • -I {}:指定占位符,将输入的每一行替换为 {}
            • -p:在执行命令之前提示用户确认。
  • 第六章:磁盘管理(disk:磁盘)

    • 前导篇

      • 磁盘简介

        • 磁盘的分类
          • 机械硬盘(HDD,Hard Disk Drive)

            • 工作原理:基于磁性存储,通过旋转的磁盘和磁头进行读写操作。
            • 特点:容量大、成本低、寿命长,但速度较慢,主要受到机械部分的限制。
            • 使用场景:主要用于大容量的数据存储、备份、服务器等场景。
          • 固态硬盘(SSD,Solid State Drive)

            • 工作原理:基于闪存技术,没有机械部件,数据通过电子方式读写。
            • 特点:速度快、无噪音、功耗低,但成本较高,存储寿命受限于闪存单元的写入次数。
            • 使用场景:适合需要快速读写的场景,如操作系统、应用程序、游戏等。
          • 混合硬盘(SSHD,Solid State Hybrid Drive)

            • 工作原理:结合了 HDD 和 SSD 的优点,利用 SSD 存储常用数据,加速读取速度,而使用 HDD 存储大部分数据。
            • 特点:具有较大的存储容量,同时能提供较快的访问速度。
            • 使用场景:适合需要兼顾存储容量和速度的用户。
        • 磁盘的基本概念
          • 扇区(Sector):磁盘上的最小存储单元,通常为 512 字节或 4096 字节(4K 扇区)。
          • 磁道(Track):磁盘表面同心圆形的存储路径,多个磁道组成磁盘的一个平面。
          • 柱面(Cylinder):同一位置上不同磁盘层的磁道组合。
          • 文件系统:磁盘上组织和管理文件的结构,常见的文件系统有 ext4、NTFS、FAT32 等。
          • 分区:为了有效管理磁盘,可以将磁盘分成多个逻辑区域,每个区域称为一个分区,分区可以包含不同的文件系统。
        • 磁盘的性能指标
          • 转速(RPM,Revolutions Per Minute):对于机械硬盘来说,转速越高,磁盘的读取速度越快。常见的转速有 5400 RPM、7200 RPM、10000 RPM 等。
          • 存取时间(Access Time):磁头移动到正确位置并读取数据所需的时间。SSD 的存取时间远低于 HDD。
          • 吞吐量(Throughput):单位时间内磁盘能够传输的数据量,通常以 MB/s 或 GB/s 表示。
          • I/O 操作每秒(IOPS):表示每秒可以执行多少次输入/输出操作,特别适用于 SSD 性能衡量。
        • 磁盘在操作系统中的作用
          • 数据存储:磁盘是持久化存储设备,负责保存所有的用户文件、操作系统、应用程序等。
          • 虚拟内存(Swap):在 Linux 系统中,部分磁盘空间可以被配置为交换空间,用来扩展物理内存,避免系统内存耗尽。
          • 启动设备:磁盘常常被用作系统启动设备,操作系统和启动程序通常存储在磁盘上。
        • 磁盘的管理
          • 分区管理:使用 fdiskparted 等工具对磁盘进行分区。
          • 文件系统创建:通过 mkfs 命令格式化分区,创建文件系统。
          • 挂载和卸载:使用 mount 命令挂载磁盘分区到文件系统中,并使用 umount 卸载。
          • 磁盘性能监控:使用 iostatiotop 等工具监控磁盘的性能和 I/O 状况。
        • 命名方式(centos7/red7)
          • IDE(并口)
            • 介绍:IDE 是一种早期的硬盘接口技术,全称为 Integrated Drive Electronics,通常也称为 ATA(Advanced Technology Attachment)。它通过 40 针或 80 针的并行数据线连接硬盘和主板,因此被称为 并口。(太老了)
          • SATA(串口)​​​​​​
            • 设备命名规则:
              • /dev/sdX:在 Linux 中,所有使用 SCSI(Small Computer System Interface)命令集的设备(如 SATA、USB、SCSI 硬盘)都会以 sd 开头,后面的字母 a, b, c 等依次表示系统中检测到的不同硬盘。
                • /dev/sda(表示第一块硬盘)/dev/sdb(第二块硬盘)
              • 分区表示:硬盘上的每个分区在设备名称后面加上一个数字。例如:
                • /dev/sda1/dev/sda(第一个硬盘)的第一个分区。
                • /dev/sdb2/dev/sdb(第二个硬盘)的第二个分区。
        • 分区方式
          • MBR
            • 最大支持容量:MBR 支持的最大磁盘大小为 2TB,因为它使用 32 位地址来管理磁盘分区,导致每个分区的最大可寻址空间为 2TB。
            • 分区数量限制:MBR 支持最多 4 个主分区。如果需要超过 4 个分区,可以通过将一个主分区设置为 扩展分区,然后在扩展分区中创建多个逻辑分区。扩展分区可以不挂载。扩展分区本身并不需要挂载,但其内部的逻辑分区如果不挂载,则无法访问其中的数据。
            • 启动方式:MBR 存储在磁盘的第一个扇区(通常为第 0 扇区),其中包括分区表和引导程序。这个引导程序可以引导操作系统启动。
          • GPT
            • 最大支持容量:GPT 支持非常大的磁盘,理论上可以管理 高达 18 EB(Exabytes,1EB=1024PB) 的磁盘空间。
            • 分区数量:GPT 可以支持 最多 128 个分区(在 Windows 系统中),每个分区都有一个唯一的 GUID(全局唯一标识符),因此不需要主分区和扩展分区的概念。
            • 冗余和容错:GPT 将分区表信息存储在磁盘的开头和结尾,提供了冗余保护。如果磁盘的某部分损坏,可以从另一部分恢复分区表信息。
            • 启动方式:GPT 通过 UEFI 启动,支持较新的系统。传统 BIOS 不支持直接从 GPT 磁盘启动,但某些 BIOS 可以以兼容模式启动。
      • 管理磁盘

        • 添加磁盘(建议关机操作)
          • 这里我是用虚拟机操作的
        • 管理磁盘的三部曲
          • 分区(mbr或者gpt)——》格式/文件系统——》挂载mount
        • 磁盘管理流程
          • 查看磁盘信息
            • 使用 lsblk
              • lsblk 列出系统中所有的块设备(磁盘、分区等),并显示设备的挂载情况。
            • 使用 fdisk -l
              • fdisk -l 可以列出所有磁盘和分区的信息,包括设备名、大小、分区表类型等。(应该要root权限)
          • 创建分区
            1. 查看磁盘信息
              1. fdisk [选项] <设备>(fdisk就用mbr的形式) sudo fdisk -l
                1. -l:列出所有磁盘及其分区信息。
                2. -s:显示分区大小。
                3. -u 显示以扇区为单位的大小信息。

                4. -c 打印分区表时不使用 DOS 兼容模式。

                5. -b 指定扇区大小(512、1024、2048 或 4096)。

                6. -h 显示帮助信息。

                7. 按常理mbr可以有4个主分区,但是如果要创建拓展分区,就要至少保留一个主分区,也就是说当你分区需要拓展分区,那么最大只可以有三个主分区。

                8. 在 MBR(主引导记录)分区表中,由于其结构最多只能支持四个主分区(每个占用 16 个字节),因此引入了扩展分区的概念。扩展分区本身不直接存储数据,而是用于容纳多个逻辑分区,从而允许用户在同一磁盘上创建更多的分区,灵活地管理存储空间。

            2. 进入交互模式(启动磁盘分区命令,以 /dev/sdb 为例):
              1. sudo fdisk /dev/sdb(不给选项)
              2. 这会打开 /dev/sdb 磁盘的分区管理界面。
            3. 常用交互命令
              1. n:新建分区。
              2. d:删除分区(如果只有一块分区就直接删除)。
              3. p:查看分区表。
              4. w:保存并退出。
              5. q:不保存退出。
            4. 刷新分区
              1. partprobe /dev/sd[x]
          • 创建文件系统
            1. mkfs(makefilesystem:创建文件系统):mkfs [选项] <设备名一般是分区>
              1. mkfs.ext4:用于创建 ext4 文件系统(Linux 中最常用的文件系统之一)。
              2. mkfs.xfs:用于创建 xfs 文件系统(适合大文件和高性能需求的场景)。
              3. mkfs.vfat:用于创建 vfat 文件系统(常见于 USB 闪存盘,兼容 Windows 和 Linux)。
            2. 选项:
              1. -t:指定文件系统类型(不常用,因为通常直接使用 mkfs.<文件系统类型> 来代替)。
                1. sudo mkfs -t ext4 /dev/sda1
              2. -v:显示详细信息。

              3. -c:检查坏块,创建文件系统前扫描磁盘以检查物理损坏。

            3. 完成:

          • 挂载磁盘(就是告诉系统放在这个文件夹的东西都在被挂设备)
            1. mount命令
              1. mount [选项] <设备> <挂载点>
                1. -t <类型>:指定文件系统类型(如 ext4xfs 等)。
                2. -o <选项>:挂载时的选项(如 ro 只读、rw 读写、noexec 不允许执行)。
                3. -a:挂载 /etc/fstab 中所有未挂载的文件系统。
                4. -v:显示详细信息。
                5. -r:以只读方式挂载文件系统。
            2. 创建挂载点
              1. 挂载点是你希望将磁盘挂载到的目录(默认只有mount目录)。如果该目录不存在,你需要先创建它。例如,将分区挂载到 /mnt/mydisk
            3. 挂载分区
              1. 使用 mount 命令将分区挂载到刚刚创建的目录上。例如,将 /dev/sdb1 挂载到 /mnt/mydisk
              2. 查看一下
                1. 到了就说一下df命令
                  1. df(Disk Free)命令用于显示文件系统的磁盘空间使用情况,包括已用空间、可用空间和总空间等信息。这个命令非常有用,可以帮助你监控磁盘使用情况。
                  2. df [选项] [文件或目录]
                    1. -h:以人类可读的格式显示(例如,以 KB、MB 或 GB 为单位)。
                    2. -T:显示文件系统类型。
                    3. -a:显示所有文件系统,包括零空间的文件系统。
                    4. -i:显示 inode 使用情况。
                    5. --total:显示所有文件系统的总使用情况。
              3. 自动挂载(暂时不说)
            4. 卸载分区
              1. umount 挂载目录/设备名
                1. -f:强制卸载 如果设备无法正常卸载,可以使用强制选项:
                2. -l:懒卸载 如果想立即返回而不等待卸载完成,可以使用懒卸载选项:
              2. lsof命令
                1. lsof [选项] [文件名或路径]
                  1. -u <用户>:列出指定用户打开的文件。
                  2. -p <进程号>:列出指定进程打开的文件。
                  3. -t:只输出进程ID,适合脚本使用。
                  4. -i:列出网络连接和网络打开的文件。
                  5. +D <目录>:列出指定目录下打开的所有文件。
                  6. -n:不解析网络地址,以提高速度。
                  7. -l:显示用户的 UID 而不是用户名。
                2. 用于列出当前系统中打开文件的命令。它不仅可以显示文件,还可以显示与之关联的进程、用户和其他信息。
                3. 如果qq放在挂载盘上,还在运行,lsof 挂载设备名。就可以知道qq是否真的还在运行。
    • 逻辑卷LVM

      • 前言

        • 关键概念
          • 物理卷(PV)

            • 物理存储设备,如硬盘或分区,被 LVM 识别为物理卷。
          • 卷组(VG)

            • 由一个或多个物理卷组成的逻辑存储池,逻辑卷从卷组中分配空间。
          • 逻辑卷(LV)

            • 从卷组中划分出的虚拟分区,可以像常规分区一样使用,支持动态调整大小。
        • LVM 让你可以轻松扩展或缩小磁盘空间,方便创建备份快照,支持将多个硬盘合并为一个大存储池,从而灵活应对不断变化的存储需求。
      • 创建LVM(pv,vg,lv+creat)

        • 创建物理卷pv
          • pvcreate [物理设备]
            • pvcreate [物理设备] 中的物理设备必须是实际存在的存储设备或分区。例如,它可以是一个物理硬盘(如 /dev/sda)或者一个分区(如 /dev/sda1/dev/sdb1)。在执行 pvcreate 命令之前,该设备应该未被格式化或已被清空,以确保 LVM 能够正确识别和使用该设备。
        • 创建卷组VG
          • vgcreate [卷组名] [物理卷]
            • vgcreate [卷组名] [物理卷] 命令用于创建一个新的卷组(VG),将指定的物理卷(PV)加入到这个卷组中。
            • 在执行 vgcreate 之前,确保所使用的物理卷已经通过 pvcreate 初始化为物理卷。
        • 创建逻辑卷LV
          • lvcreate -n [逻辑卷名] -L [大小] [卷组名]
            • lvcreate -n [逻辑卷名] -L [大小] [卷组名] 命令用于在指定的卷组中创建一个新的逻辑卷(LV)。
            • 确保卷组中有足够的可用空间来创建新的逻辑卷。
        • 要知道的是,当建立了卷组和逻辑卷后,系统会自动创建文件夹
        • 格式化/分配 文件系统
          • sudo mkfs.ext4 【逻辑卷名】
        • 挂载
          • sudo mount 【逻辑卷】【挂载目录】
      • VG管理

        • 查看卷组信息(pv,vg,lv+display查看对应的卷)
          • vgdisplay [卷组名]   # 不加卷组名则显示所有卷组
        • 扩展卷组
          • vgextend [卷组名] [新物理卷]
          • 向现有的卷组中添加新的物理卷,以扩展卷组的容量。
        • 移除物理卷
          • vgreduce [卷组名] [物理卷]
          • 在移除物理卷之前,必须确保该物理卷上没有逻辑卷的数据。如果有数据,可以先使用 pvmove 命令将数据迁移到其他物理卷。
          • 如果直接移除一个正在使用的数据卷,可能会导致数据丢失。
          • 用于从现有的卷组中移除指定的物理卷,以减少卷组的容量。
        • 查看pvs(还有vgs,lvs)
          • 用于显示 LVM 系统中所有物理卷(PV)的摘要信息。它能够快速查看各个物理卷的状态、所属卷组、可用空间等信息。
      • LV扩容(扩容逻辑卷表示拖入一块空间,扩展文件系统表示进行融合,让其可用)

        • 扩展逻辑卷
          • lvextend -L [+大小] [逻辑卷路径]
        • 扩展文件系统
          • 对于 ext4 文件系统:resize2fs
            • resize2fs [逻辑卷路径]
          • 对于 XFS 文件系统:xfs_growfs
            • xfs_growfs [挂载点]
        • 缩减怎么做

          • 先卸载硬盘
            • umount一下
          • 缩减文件系统大小
            • 在缩减逻辑卷之前,首先必须缩减文件系统的大小,使其不超过逻辑卷的新大小。具体的操作取决于你使用的文件系统类型。
            • 具体步骤
              • 在缩减逻辑卷之前,首先检查文件系统的完整性。使用 e2fsck 命令:-f强制
                • sudo e2fsck -f 物理卷
              • 使用 resize2fs 命令来缩小文件系统。指定新大小,可以是绝对大小,也可以是相对于当前大小的增量。
                • sudo resize2fs 物理卷 [新大小]
          • 缩减逻辑卷的大小
            • sudo lvreduce -L [新大小] 逻辑卷
            • 完成后,重新挂载逻辑卷
    • 交换分区管理Swap

      • 简介

        • 什么是Swap?
          • Swap 是 Linux 系统中的虚拟内存,用于在物理内存不足时将不活跃的数据临时存储到磁盘上,以释放内存供活跃进程使用。
        • 作用是什么?
          • 缓解内存不足:当系统内存不足时,Swap 提供了额外的虚拟内存,确保系统能够继续运行。

          • 提高系统稳定性:避免系统在内存用尽时直接崩溃,通过 Swap 空间暂存数据,保持系统的基本运转。

          • 支持休眠功能:在某些系统中,休眠(hibernation)功能会将当前内存内容保存到 Swap 中,系统启动时恢复状态。

        • Swap的大小

          • Swap 的性能:由于 Swap 通常存储在硬盘上,读写速度远低于 RAM,因此频繁使用 Swap 会导致性能下降。
          • Swap 空间的大小Swap 空间的大小取决于系统需求和内存大小,常见的建议是物理内存的 1-2 倍,但也可以根据具体需求进行调整。
      • 创建,查看当前交换分区

        • free命令:
          • free [选项]
            • -h:以人类可读的格式显示内存信息(如 KB、MB、GB)。
            • -m:以 MB 为单位显示内存信息。
            • -g:以 GB 为单位显示内存信息。
            • -t:显示总计信息,包括总内存和总交换空间。
            • -s <秒数>:每隔指定的秒数重复显示内存使用情况。
          • 行和解释
            • total:总内存量。used:已使用的内存量。free:未使用的内存量。shared:共享内存的使用情况(一般与 tmpfs 相关)。buff/cache:内核缓冲区和缓存使用的内存量。available:应用程序可用的内存量(更准确地表示实际可用内存)。

        • 创建swap分区
          • 方法一:fdisk
            1. sudo fdisk /dev/sd【X】

            2. fdisk 命令提示符下执行以下步骤:

              1. 输入 n 创建一个新分区。
              2. 输入 p 选择主分区(或扩展分区,如果需要创建逻辑分区)。
              3. 选择分区号(例如 3,代表 /dev/sda3)。
              4. 设置起始和结束扇区(通常按默认即可,直接按 Enter)。
              5. 输入 t 来更改分区类型。
              6. 输入分区号(如 3)。
              7. 输入 82,表示将分区类型设为 "Linux Swap"。
              8. 输入 w 保存分区表并退出 fdisk
            3. 格式化新分区为 Swap 空间

              1. sudo mkswap /dev/sdb2
            4. 格式化完成后,可以启用新的 Swap 分区(会有自动挂载):

              1. sudo swapon /dev/sdb2(这个就像mount一样,挂载)
            5. 查看swap

              1. 使用 freeswapon --show 命令查看系统中的 Swap 空间是否已启用:
            6. 持久化 Swap 分区到 /etc/fstab

              1. 如果不将 Swap 分区写入 /etc/fstab,每次系统重启后,Swap 分区都不会自动启用。这样会导致系统无法利用 Swap 空间,尤其是在内存不足的情况下,可能会导致系统性能下降或进程崩溃。
              2. 先看看/etc/fstab文件
                1. 文件构成字段说明
                  1. <文件系统>

                    • 定义要挂载的设备或分区,通常为设备路径(例如 /dev/sda1/dev/sda2)或者 UUID(推荐使用 UUID 以避免设备名变化问题)。
                    • 例如:/dev/sda1UUID=xxxxx-xxxx-xxxx
                  2. <挂载点>

                    • 定义该文件系统要挂载到的目录。
                    • 例如:/(根文件系统)、/home/mnt/data
                  3. <文件系统类型>

                    • 定义该分区或设备的文件系统类型。
                    • 常见类型:
                      • ext4:常见的 Linux 文件系统。
                      • swap:表示交换分区。
                      • nfs:网络文件系统。
                      • vfat:FAT 文件系统(如 U 盘)。
                  4. <挂载选项>

                    • 定义挂载时的选项,可以多个选项用逗号分隔。
                    • 常见选项:
                      • defaults:使用默认设置。
                      • noatime:不更新文件访问时间,提升性能。
                      • ro:只读挂载。
                      • rw:读写挂载。
                      • nosuid:禁止 SUID/SGID 权限。
                  5. <dump>

                    • 是否使用 dump 备份该文件系统,通常为 0(不备份)或 1(备份)。
                  6. <fsck>

                    • 定义是否在启动时检查该文件系统:
                      • 0:不检查。
                      • 1:首先检查(通常用于根文件系统 /)。
                      • 2:其次检查(用于非根文件系统)。
                2. 如何添加,怎么写
                  1. UUID=xxxx-xxxx-xxxx-xxxx none swap sw 0 0
                  2. 获取 UUID 运行以下命令获取分区的 UUID:
                    1. sudo blkid /dev/sdb2
                  3. echo '/dev/sda3(uuid也可以) none swap sw 0 0' | sudo tee -a /etc/fstab
                    1. 挂载点一般用none而不是实际挂载点,还有swap也要进行挂载,不然用不了{创建 Swap 分区后,自动标记为 [swap],这表示该分区已经被系统识别为 Swap 空间,通常不需要为其创建挂载点。}
            7. 卸载怎么办?

              1. sudo swapoff /dev/sdb2
              2. sudo swapoff -a(禁用所有swap区)
              3. 没有删,只是没有挂载,就像是优盘取走了,umount也一样
              4. 当然删除/etc/fstab文件中内容也一样。
          • 方法二:dd
            1. 先说一下命令
              1. dd 命令是 Linux 中一个功能强大的工具,用于将数据从一个设备或文件复制到另一个设备或文件。它可以用于备份、恢复、创建磁盘镜像、写入文件到磁盘等操作。dd 还可以设置块大小、跳过的字节数和复制的字节数,灵活度很高。
              2. dd if=[输入文件] of=[输出文件] [参数]
                1. if=:输入文件(input file),表示数据来源。
                2. of=:输出文件(output file),表示数据的去处。可以是磁盘sd【X】,也可以是分区sd【X】x。
                3. [参数]:可选的参数,用于控制如何处理数据。
                  1. bs=:指定块大小(Block Size),例如 bs=1M 表示每次复制 1MB 的数据块。
                  2. count=:指定要复制的块数。
                  3. skip=:在输入文件中跳过指定数量的块。
                  4. seek=:在输出文件中跳过指定数量的块,直接跳过而不写入。
                  5. status=:显示进度信息,如 status=progress 会显示复制的进度。
          • 灵光一现:有sda与sdb两块磁盘,有/mnt/mydisk挂载点,这个时候我将sda,sdb同时挂载到/mnt/disk上,并且放了10个文件夹,那么到底如何进行分配存放?(在sda,sdb还是都有?)
            1. 如果将两块磁盘(sdasdb)同时挂载到同一个挂载点(如 /mnt/disk),后挂载的磁盘会覆盖前一个挂载的内容,除非使用 LVM 或类似工具来动态管理存储。(sda 上的数据不会真正消失,但它在该挂载点下是不可见的。此时,访问 /mnt/disk 时只会看到 sdb 的内容。要查看 sda 的数据,你需要先卸载 sdb
  • 第七章:磁盘管理(进阶)

    • 文件系统详解

      • ​​​​​文件系统 是操作系统用来管理、组织、存储和检索文件的方式。常见的文件系统包括:
        • ext4:Linux 常用文件系统,支持大文件、文件系统日志、延迟分配等功能,稳定且性能优秀。
        • XFS:一种高性能的文件系统,适合大文件和高并发操作,常用于服务器。
        • NTFS:Windows 文件系统,支持文件压缩、加密和访问控制列表(ACL)。
        • FAT32/ExFAT:较老的文件系统,支持较广泛的设备和操作系统,但 FAT32 不支持大于 4GB 的单个文件。
        • Btrfs:新一代 Linux 文件系统,支持快照、压缩和子卷功能。
      • 文件系统的基本功能

        • 文件和目录管理:创建、删除、读取、写入、修改文件和目录。
        • 权限管理:控制用户对文件的读写执行权限。
        • 空间管理:分配存储空间,跟踪使用情况。
        • 文件保护:通过日志、快照等技术保护数据完整性。
    • 文件链接​​​​​

      • ln命令:
        • ln 【选项】 [源文件] [目标链接]
          • -s:创建符号链接(软链接)。
          • -f:强制删除目标文件,允许覆盖已有的目标链接。
          • -v:显示创建链接的详细信息。
      • 硬链接(Hard Link)
        • 概念:硬链接是多个目录项指向同一个文件的数据块。
        • 特点
          • 硬链接的文件共享相同的 inode 和数据块。
          • 删除任意一个硬链接文件,数据不会丢失,直到所有链接都删除。
          • 只能在同一个文件系统中创建硬链接。
          • 会显示链接数(软连接不显示,链接数包括文件自己)
          • 不可以对目录做
      • 软链接(符号链接,Symbolic Link 或 Symlink)
        • 概念:软链接是一个指向另一个文件的路径,类似于快捷方式。
        • 特点
          • 软链接有自己独立的 inode。
          • 软链接可以跨文件系统,并且可以链接到目录。
          • 如果原文件被删除,软链接将指向一个无效路径(即“断链”)
      • 相关名词
        • inode(索引节点
          • 概念:inode 是文件系统中每个文件或目录的元数据存储单元。
          • 作用:记录文件的属性信息,但不存储文件名和文件内容。
          • 存储信息
            • 文件类型(如文件、目录、符号链接等)
            • 文件大小
            • 文件权限(读、写、执行权限)
            • 拥有者(用户和组)
            • 文件的创建、访问、修改时间戳
            • 文件数据块的指针(即指向存储文件内容的磁盘块)
        • block(块)
          • 概念:block 是存储文件数据的最小单位。
          • 作用:文件的实际内容存储在数据块(block)中,文件系统将文件分成若干个块以存储在磁盘上。
          • 大小:block 的大小通常是 1KB、2KB、4KB 或更大,取决于文件系统的配置。
          • 作用方式
            • 每个文件占用一个或多个块,文件较小时一个块中可以存储多个文件。
            • 大文件会占用多个块,并且 inode 中的指针会指向这些块。
        • superblock(超级块)
          • 概念:superblock 是存储文件系统整体信息的特殊块。
          • 作用:保存文件系统的元数据,例如文件系统的大小、块大小、空闲块数和 inode 数、挂载信息等。
          • 存储信息
            • 文件系统的类型(如 ext4、XFS 等)
            • 文件系统的总大小和可用大小
            • inode 和 block 的总数和空闲数量
            • 文件系统的挂载时间、上次检查时间等
          • 关键性:superblock 是文件系统运行的核心数据结构,如果 superblock 损坏,文件系统可能无法正常工作,但通常有备份 superblock 可恢复。
        • 总结
          • inode 保存文件的元数据,不包含文件名和内容。决定了可以存放文件的数量(当文件足够多后就是有空间也无法创建新文件)
          • block 存储文件的实际内容,是数据存储的基本单位。决定了存放空间大小
          • superblock 保存文件系统的元数据和整体布局信息,是文件系统的核心部分
    • RAID(了解)

      • RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种将多个物理硬盘组合成一个逻辑单元的技术,以提高数据存储的性能、可靠性或容量。根据不同的 RAID 级别,可以实现不同的目标,如提高读写速度、提供容错能力或增加存储空间。
      • RAID 0(条带化):

        • 特点:数据被分割并并行写入多个磁盘中,读写速度最快。
        • 优点:提高了读写性能。
        • 缺点:没有冗余,任何一块磁盘损坏都会导致数据丢失。
        • 使用场景:适合不需要数据保护但需要高性能的场景,如视频编辑。
      • RAID 1(镜像):

        • 特点:数据被完全复制到至少两个或多个磁盘上,冗余性高。
        • 优点:任何一块磁盘故障都不会导致数据丢失(有镜像备份)。
        • 缺点:存储利用率较低,效率是 50%,因为每次写操作需要同时写两块盘。
        • 使用场景:适合需要高数据安全性的场景,如财务数据。
      • RAID 5(分布式奇偶校验):

        • 特点:数据和奇偶校验信息分布在所有磁盘上,允许单块磁盘故障而不会丢失数据。
        • 优点:提供容错性,读取速度较快,磁盘利用率较高(N-1)。
        • 缺点:写入性能稍慢,因为要计算和写入校验数据。
        • 使用场景:常用于服务器和企业级存储系统。
      • RAID 6(双重奇偶校验):

        • 特点:类似 RAID 5,但有双重奇偶校验,允许两块磁盘同时故障。
        • 优点:更高的容错能力。
        • 缺点:写入性能比 RAID 5 更慢,磁盘利用率(N-2)。
        • 使用场景:适合关键业务系统,数据安全性要求极高的场景。
      • RAID 10(1+0)

        • 特点:结合 RAID 1 和 RAID 0,数据先进行镜像,再进行条带化,既提供了高性能,又有高冗余。
        • 优点:读取和写入速度都很快,同时具备 RAID 1 的冗余性。
        • 缺点:磁盘利用率是 50%,需要双倍的磁盘数量。
        • 使用场景:高性能与高数据保护要求的环境。
      • 分类
        • 硬raid:硬RAID依赖于专门的RAID控制器硬件(通常是RAID卡),它负责管理 RAID 的所有操作,如数据分配、校验计算等。
        • 软raid步骤(了解)
          1. 准备4块硬盘(虚拟机就不说了)
          2. 创建RAID
            1. sudo mdadm --create /dev/md0 --level=[RAID级别] --raid-devices=[设备数量] [设备列表]
              1. --create(-C):创建一个新的 RAID 阵列。
              2. /dev/md0:创建的 RAID 设备名称。
              3. --level=[RAID级别](-l【n】):RAID 级别,如 RAID 0, 1, 5, 6, 10。
              4. --raid-devices=[设备数量]:参与 RAID 阵列的硬盘数量。
              5. [设备列表]:具体的硬盘设备,如 /dev/sdb /dev/sdc /dev/sdd
          3. 查看raid状况:cat /proc/mdstat
          4. 格式化,挂载
            1. sudo mkfs.ext4 /dev/[raid设备名字]  格式化
            2. sudo mount /dev/[raid设备名字]  /mnt/[挂载点]
          5. 模拟一个坏掉并且卸载
            1. 模拟:sudo mdadm --fail /dev/md0 /dev/sdb
            2. 卸载:sudo mdadm --remove /dev/md0  /dev/sdb
          6. 添加新盘
            1. sudo mdadm --add /dev/md0 /dev/sdf
          7. 设置RAID开机生效
            1. sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
  • 第八章:查找与压缩

    • 文件查找(找不到updatadb更新一下)

      • find:递归查找文件或目录(*匹配任意)

        • find [起始目录] [条件] [操作]
        • 选项
          • -name [文件名]:按文件名查找。-iname忽略大小写
          • -type
            • f:查找文件(f 表示 file)。
            • d:查找目录(d 表示 directory)。
            • l:查看符号链接(看不到硬链接)
            • c:查看字符设备
            • b:查看块设备文件
            • p:查看fifo命名管道
            • s:查看套接字
          • -size [大小]:按大小查找文件/目录(+表示大于,-表示小于,=表示等于)。
          • -exec [命令] {} \;(\一个文件,+多个文件);:对找到的文件执行某个命令。{这是代表找到的的文件}
          • -maxdepth:指定查找最大深度
          • -user:属主
          • -perm 权限掩码
          • 【操作】
            • -【ls,rm删除,ok(表示中转,后面可以跟命令),delete删除】
      • 别名
        • 创建:alias [别名]='[实际命令]'
        • 取消:unalias [别名]
        • alias查看已有别名
        • 永久保存(不建议用)
          • 别名通常只在当前会话中生效,如果要让别名在每次登录后都有效,需要将它们添加到 ~/.bashrc~/.zshrc 文件中。
          • 编辑 ~/.bashrc 文件:
          • 在文件末尾添加别名命令:
            • 比如:
              alias ll='ls -la'
              alias rm='rm -i'
          • 保存并退出。
          • 使更改生效:
            • source ~/.bashrc
      • locate:快速查找文件

        • locate [文件名]
        • 找不到用updatedb更新一下
      • which:查找可执行程序的位置

        • which [命令]
      • (了解)command:一个用于执行命令的内建命令,它可以绕过别名或 shell 函数,直接调用指定的命令。(建议用which,或者type)

        • command [选项] [命令] [参数]
          • -v:查看路径
          • -V:查看详细信息
          • 只有命令,就是绕过别名
      • type:type 命令 不会显示实际路径,如果该命令是别名,会显示别名定义。

        • type [命令]
      • whereis:查找命令文件的位置

        • whereis [命令]
      • grep:在文件中搜索内容

        • grep [选项] [搜索内容] [文件]
          • -r:递归搜索目录中的文件。
          • -i:忽略大小写。
    • 文件的打包和压缩

      • tar:打包文件(重要)

        • tar [选项] [压缩文件名] [文件/目录]
        • 选项
          • -c:创建归档文件。
          • -x:解压归档文件(解压的时候如果有x就建议不要用zjJ了,当然仅支持tar压缩的命令。x表示解压并且解档)。
          • -z:通过 gzip 压缩或解压。
          • -j:通过 bzip2 压缩或解压。
          • -J:通过xzip压缩和解压
          • -v:显示处理过程。
          • -f:指定归档文件名。(建议放最后,因为遇到f就会把后面的文章识别为名字,如果是-cfzv就表示创建一个叫zv的包,离谱)
      • gzip:单独压缩文件

        • gzip [文件]
      • gunzip:解压 .gz 文件

        • gunzip [压缩文件]
      • zip:压缩文件或目录

        • zip [压缩包名] [文件/目录]
      • unzip:解压 .zip 文件

        • unzip [压缩文件]
  • 第九章:软件安装

    • 概述

      • rpm包

        • 定义:RPM(Red Hat Package Manager)包是一种用于在基于 Red Hat 的 Linux 发行版中分发和安装软件的标准格式。
        • 特点
          • 包含软件及其依赖关系的信息。
          • 提供自动安装、升级和卸载功能。
          • 具有文件完整性校验。
          • 是经过编译二进制,可以直接用。
          • 自定义能力差
      • 源码包

        • 定义:源码包包含软件的源代码,用户需要手动编译和安装。
        • 特点
          • 提供更大的灵活性,可以自定义编译选项。
          • 适合那些没有预编译二进制包的软件。
          • 具有高度的自定义能力
    • rpm包管理

      • yum工具

        • YUM 是一个基于 RPM 包管理的高级工具,主要用于在 Red Hat 系列的 Linux 发行版(如 RHEL、CentOS 和 Fedora)中自动安装、更新和管理软件包。YUM 提供了许多便捷的功能,使软件管理更加高效和简单。

        • yum源
          • /etc/yum.repos.d/:YUM 源的配置文件通常位于 /etc/yum.repos.d/ 目录中,文件扩展名为 .repo。每个源可以在一个文件中或多个文件中定义。

          • 清除所有该目录下的文件(这些文件是告诉系统去网络获取安装包,但是未来大多数都是先下好了安装包在本地用,注意要tar一下,备份)

          • 写一个配置文件(文件名自定义)

            • 配置文件内容

              • 文件布局

                • #布局-----------------
                  #[源标识]
                  #name=源名称
                  #baseurl=源URL
                  #enabled=是否启用
                  #gpgcheck=是否启用 GPG 校验
                  #gpgkey=GPG 密钥 URL
                  
                  #含义-----------------
                  
                  #[源标识]
                  #这是源的唯一标识符,通常是一个简短的名称(如 base、updates 等)。它是引用源时使用的名称。
                  name
                  #源的描述性名称,通常用于提供有关该源的信息。这有助于用户理解该源的用途。
                  #baseurl
                  #源的 URL 地址,指向包含 RPM 软件包的服务器或目录。可以是 HTTP、HTTPS 或 FTP 地址。也可以使用本地路径,如 file:///path/to/repo。
                  #enabled
                  #指定源是否启用。值可以是 1(启用)或 0(禁用)。如果源被禁用,YUM 将不会从该源安装或更新软件包。
                  #gpgcheck
                  #指定是否启用 GPG 签名校验。值可以是 1(启用校验)或 0(禁用校验)。启用此选项可以确保软件包未被篡改,提高系统安全性。
                  #gpgkey
                  #指定 GPG 密钥的 URL,用于验证软件包的签名。通常是一个指向公钥的 URL,确保下载的软件包的完整性和真实性。
                • 在写文件之前应该有一个软件源(毕竟是本地),这里教程选择了系统源(就是安装本虚拟机的ios)

                  • ios光盘挂载

                  • 成功后是这样的

                  • 在挂载上

                  • 但是重启发现无用,进行永久挂载,修改/root/.bashrc文件(永久挂还是在/etc/fstab中,但是目前上面方法安全)

                  • 写完的文件(要注意,这里我没有改update所以可能会报错,建议用的时候只保留【mydvd】项)

                • 测试一下,安装httpd

                • 源标志可以自定义,源名字就是对源标志的解释,也可以自定义,file://表示在本地找,至于file:///mnt/cdrom其实是file://本地中找/mnt/cdrom。

            • yum makecache :有些时候刚刚改完yum配置文件,但是无反应,是因为数据库没有刷新,这个命令就是来刷新的。

        • 命令:yum 【选项】【包名】
          • 全新安装软件包:yum -y install package_name
          • 全新安装软件包:yum -y reinstall package_name
          • 升级软件包:yum update package_name(如果不跟包名就是升级系统,不是升级全部包)
          • 卸载软件包:yum remove package_name
          • 列出可用的软件包:yum list available
          • 查找软件包:yum search keyword
          • 查看已安装的软件包:yum list installed 【不跟install跟包名就是看包名安装没有】
          • 清理缓存:yum clean all
          • -y:就是自动答复yes
      • rpm工具(无法处理依赖)

        • RPM 是一个用于管理 Linux 软件包的低级工具,主要用于安装、升级和卸载软件包。RPM 格式的包文件通常以 .rpm 为扩展名,广泛应用于 Red Hat 系列的 Linux 发行版。

        • 命令:rpm 【选项】【包名】
          • 安装软件包:rpm -ivh package.rpm
          • 升级软件包:rpm -Uvh package.rpm
          • 卸载软件包:rpm -e package_name
          • 查询已安装的软件包:rpm -q package_name
          • 选项
            • -i: 安装
            • -U: 升级,如果未安装则进行安装
            • -v: 显示详细输出
            • -h: 显示进度条
            • -e: 卸载指定的软件包
            • -q: 查询
            • -qa: 查询所有已安装的软件包
      • 优点:快速安装和管理,支持依赖关系处理(需结合 DNF 或 YUM)。
    • 源码包管理

      • 基本步骤
        1. 下载源码包。
        2. 解压源码包:tar -xzvf package.tar.gz
        3. 进入解压目录:cd package
        4. 配置编译选项:./configure
        5. 编译:make
        6. 安装:sudo make install
      • 优点:灵活性高,适合特定配置需求。
      • 操作步骤(安装:tengine):
        1. 下载(网站:The Tengine Web Server (taobao.org)
          1. 可以通过window下载拖入vm中(不行就去安装vmtool)
          2. 可以通过wget(我就直接放了https://tengine.taobao.org/download/tengine-2.4.1.tar.gz
            1. wget 【全地址(含http的)】 -P 【存放位置】
        2. 解压源码包:
        3. 下载相关环境(gcc这是一个C语言的编译软件,因为源码包没有编译,要编译,大多数都是c/c++,所以要用gcc)
          1. 当然这个环境是不够的,看完整环境
            1. yum install -y gcc make zlib-devel pcre pcre-devel openssl-devel
        4. 进入源码包配置并编译(这个时候在解压后的包内)【./configure --prefix=安装目录 --user=指定所有者 --group=指定所有组】最好指定,不然不指定用户大概率对所有用户拒绝
        5. 安装(这个时候在解压后的包内)
        6. 测试一下(/home/ly/桌面/res/bl_nginx/sbin/nginx直接回车就是执行nginx
          )如果指定的不是root用户报错就要加sudo提升权限
          1. 如何优雅的关闭(/home/ly/桌面/res/bl_nginx/sbin/nginx -s stop
  • 第十章:任务计划

    • 一次性调度

      • 一次性调度指的是在特定时间或条件下执行一次任务。
      • at:用于安排一次性任务。
        • at [时间] [日期]
          • 时间:可以使用多种格式指定,例如:
            • HH:MM:24小时制时间,如 14:30 表示下午2点30分。
            • now + Nmin:表示从现在起 N 分钟后。
            • HH:MM AM/PM:12小时制时间,如 2:30 PM
            • teatime(16:00)
          • 日期:可以指定具体的日期,格式如:
            • YYYY-MM-DD:如 2024-09-25
            • MM/DD:如 09/25
            • tomorrow:表示明天。
            • next week:表示下周。
          • atq可以查看
      • crontab:尽管主要用于循环调度,crontab 也可以设置特定的任务。
    • 循环调度

      • 循环调度是指在特定的时间间隔内重复执行任务。主要使用的工具是 cron,它是一个基于时间的作业调度器。
      • crontab:用于设置定期任务(文件在/var/spool/cron/中)。
        • crontab [选项] [文件]
          • -e:编辑当前用户的 crontab 文件。
            • 会进入文本编辑器
          • -l:列出当前用户的 crontab 文件内容。
          • -r:删除当前用户的 crontab 文件。
          • -u: 用于以特定用户的身份管理 crontab 文件。通常,这个选项需要管理员权限(例如使用 sudo),并允许管理员查看或修改其他用户的定期任务。
        • crontab 文件格式
          • * * * * * 命令
          • 字段:分时日月周
          • * * * * * 表示五个时间字段(用空格分隔)*表示每:
            • (0-59)
            • 小时(0-23)
            • 日期(1-31)
            • 月份(1-12)
            • 星期(0-7,其中 0 和 7 都表示星期天)
            • 加了/就是每,比如*/5 * * * * 表示每5分钟
            • 逗号,表示and,比如* 2,3 * * *表示每到2,3点就执行
            • 还有一点,当设置了星期的时候表示,只有当这一天刚好是设置的星期几后,才会执行。这是一个and要同时满足。
      • 管理 cron 服务

        • 启动 cron 服务

          • sudo systemctl start cron

        • 查看 cron 服务状态

          • sudo systemctl status cron

      • 注意事项

        • 确保 cron 服务正在运行,才能使调度任务生效。
        • 定期任务的输出默认会发送到用户的邮件中,若不需要可以将输出重定向到 /dev/null
          • * * * * * /path/to/command > /dev/null 2>&1
  • 第十一章:日志管理

    • 日志进程rsysylog

      • 作用rsyslog 是 Linux 中最常见的日志管理进程,负责收集系统内各种服务和进程的日志信息,并将它们保存到磁盘中,通常在 /var/log/ 目录。

      • 常见的日志文件

        • /var/log/auth.log(部分系统,如 Ubuntu):

          • 作用:记录用户认证、登录、sudo 操作等与身份验证相关的事件。
          • 示例:用户登录失败、用户通过 SSH 登录等。
        • /var/log/boot.log

          • 作用:记录系统启动过程中的信息和错误。
          • 示例:启动服务的详细日志,有助于排查开机时的问题。
        • /var/log/dmesg

          • 作用:记录内核环缓存消息,通常是硬件设备的启动日志。
          • 示例:设备驱动程序加载、硬件检测等。
        • /var/log/kern.log

          • 作用:记录内核级别的日志,所有与内核相关的信息都会保存在这里。
          • 示例:硬件错误、设备驱动错误等。
        • /var/log/cron/var/log/cron.log

          • 作用:记录与定时任务(Cron)相关的日志。
          • 示例:每次定时任务执行时的记录和状态。
        • /var/log/maillog/var/log/mail.log

          • 作用:记录邮件服务相关的日志。
          • 示例:邮件发送、接收、失败等操作。
        • /var/log/httpd//var/log/apache2/

          • 作用:记录 Apache HTTP 服务器的日志。
          • 包含
            • access.log:记录所有访问请求。
            • error.log:记录所有服务器错误信息。
        • /var/log/nginx/

          • 作用:记录 Nginx 服务器的日志。
          • 包含
            • access.log:记录所有访问请求。
            • error.log:记录所有服务器错误信息。
        • /var/log/faillog

          • 作用:记录所有失败的登录尝试。
          • 示例:用户输入错误密码导致登录失败的情况。
        • /var/log/btmp

          • 作用:记录失败的登录尝试(类似 faillog,但更详细)。
          • 查看方法:可以使用 lastb 命令来查看。
        • /var/log/wtmp

          • 作用:记录所有用户登录、注销事件。
          • 查看方法:可以使用 last 命令查看用户登录历史。
        • /var/log/yum.log

          • 作用:记录 Yum 软件包管理器的安装和更新信息(针对使用 Yum 的系统,如 CentOS)。
          • 示例:每次安装、更新或删除软件包时的日志。
      • 工作机制rsyslog 根据配置文件 /etc/rsyslog.conf/etc/rsyslog.d/ 下的规则来决定将哪些日志记录到哪个文件。

      • 设置配置文件/etc/rsyslog.conf

        1. 打开配置文件

          1. 使用文本编辑器打开 /etc/rsyslog.conf 文件。
          2. sudo vim /etc/rsyslog.conf
        2. 了解基本语法:(可以通过分号进行多个执行)

          1. 每条规则的格式为:<facility>.<priority> <action>
          2. facility (设备/程序)是日志来源,priority 是优先级,action 是日志处理方式(文件路径或远程服务器)。
          3. *表示任意
          4. 日志优先级和设施

            1. 设施(Facility)表示日志的类别,指示日志是由哪个子系统生成的。常见的设施包括:
              1. auth: 记录系统认证相关事件,如用户登录和认证失败等。
              2. authpriv: 提供比 auth 更严格的日志权限,记录敏感的认证信息,通常需要更高的安全性。
              3. cron: 记录定时任务(cron jobs)的执行情况,便于调试和审核定时任务的行为。
              4. daemon: 记录系统守护进程(如网络服务、数据库等)的运行状态和错误,帮助管理员监控服务健康。
              5. kern: 记录内核相关信息,包括内核错误和系统调用,适用于内核开发和调试。
              6. mail: 记录邮件发送和接收的日志,便于跟踪邮件流转和调试邮件服务。
              7. syslog: 记录系统及应用程序的消息,通常用于集中管理日志。
              8. user: 记录用户级别的消息,适用于用户操作的监控。
              9. ftp:记录一些文件传输消息
            2. 优先级(Priority)表示日志的重要性,主要有以下几种:
              • emerg:紧急(系统不可用)。
              • alert:需要立即处理。
              • crit:严重情况。
              • err:错误。
              • warning:警告。
              • notice:普通但需要注意的事件。
              • info:信息。
              • debug:调试消息。
              • none:表示提取
            3. 处理方式(action):就是存放的位置,但是有一个点要特别说一下,在位置前有一个-表示异步处理。
        3. 配置本地日志存储

          1. 设置规则,将特定日志保存到本地文件。
        4. 远程日志转发(可选)

          1. 设置日志转发到远程服务器(使用 UDP 或 TCP)。
          2. *.*           @192.168.1.100    # UDP
            authpriv.*    @@192.168.1.200:514  # TCP
        5. 设置日志格式(可选)

          1. 定义自定义日志格式模板。
          2. $template myFormat,"%timestamp:::date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n"
            authpriv.*    /var/log/secure;myFormat
        6. 启用模块(可选)

          1. 加载额外模块以支持更多功能(如监听 TCP 端口)。
          2. module(load="imtcp")
            input(type="imtcp" port="514")
        7. 保存并退出

          1. 保存编辑过的文件并退出。
        8. 重启 rsyslog 服务

          1. 重启 rsyslog 使配置生效。
          2. sudo systemctl restart rsyslog
    • 日志轮转logrotate(日志轮转会同时满足指定的条件才能触发

      • 作用logrotate 用于自动管理日志文件的大小。它通过将旧的日志文件重命名、压缩,并生成新的日志文件,来防止日志文件占用过多磁盘空间。

      • 配置文件

        • /etc/logrotate.conf:主配置文件,包含全局设置。(不建议再这上面改)
        • /etc/logrotate.d/:子目录中的配置文件针对不同的服务进行单独设置。用vim创建编辑
      • 日志轮转策略

        • 大小:可以设置日志文件达到一定大小后进行轮转。
          • size [SIZE]
          • Kk:表示千字节(KB)
          • Mm:表示兆字节(MB)
          • Gg:表示千兆字节(GB)
          • size 20M # 文件达到 20MB 时轮转
        • 时间:按天、周、月等进行轮转。
          • daily # 每天轮转 weekly # 每周轮转 monthly # 每月轮转
        • 保留:可以设置保留一定数量的旧日志,超出部分自动删除。
          • rotate 7   # 最多保留最近的 7 个轮转日志
        • 其他选项:
          • compress:压缩轮转后的日志文件以节省磁盘空间。
          • delaycompress:延迟压缩,意味着第一次轮转时不压缩,下一次轮转时才压缩。
          • missingok:如果日志文件缺失,不报错。
          • notifempty:如果日志文件为空,则不进行轮转。
          • create:轮转后创建新文件
          • datext:使用后日期作为轮转文件后缀
          • include /etc/logrotate.d:(这是主配置文件的属性,告诉程序也去子配置文件读一下)
        • 示例配置(子,子无认主)
          • /var/log/messages {
                daily
                rotate 7
                compress
                missingok
                notifempty
            }
            
          • daily:每天轮转一次。
          • rotate 7:保留 7 个旧的日志文件。
          • compress:压缩旧日志文件。
          • missingok:如果日志文件不存在,不会报错。
          • notifempty:如果日志文件为空,则不执行轮转。
      • /var/lib/logrotate/logrotate.status保留轮转日志相关信息(比如什么时候轮转过)
  • 第十二章:网络管理

    • 简介

      • 网络接口名称规则

        • 传统命名规则(ethX,wlanX):传统的命名方式是以 ethX(以太网接口)和 wlanX(无线网络接口)为主,其中 X 是从0开始的数字。这种命名方式较为简单,但在多接口系统中容易引起混乱。

        • 一致性网络设备命名(Predictable Network Interface Names):现代Linux系统采用了一致性命名方案,这样接口名称在重新启动或硬件变化后不会发生变化。常见命名规则:

          • enpXsY:以太网接口,其中 X 是PCI总线号,Y 是设备编号。
          • wlpXsY:无线网络接口,类似于 enpXsY
          • eno1:板载以太网接口。
          • ensX:热插拔的以太网接口。
      • NetworkManager服务

        • NetworkManager 是一个用于简化Linux系统网络管理的服务。它自动处理有线和无线网络连接,并提供图形界面和命令行工具(如 nmcli)来管理网络。

        • 特点

          • 自动检测和管理网络设备及连接。
          • 支持动态配置网络参数(如IP地址、DNS、网关等)。
          • 可以通过 nmcli 命令行工具或 nmtui 图形化工具进行手动配置。
        • 服务管理

          • 启动:sudo systemctl start NetworkManager
          • 停止:sudo systemctl stop NetworkManager
          • 状态:sudo systemctl status NetworkManager
        • 网卡配置文件:
          • 存放在:/etc/sysconfig/network-scripts/文件夹内
          • 看看网卡文件(这是命令方式设置ip)
            • DEVICE=eth0: 指定网卡设备名称(例如 eth0)。
            • BOOTPROTO=dhcp: 启动时使用 DHCP 自动获取 IP 地址。其他选项包括 static(静态配置)和 none(none就是static)
            • ONBOOT=yes: 系统启动时自动启用该网络接口。
            • TYPE=Ethernet: 网络类型为以太网。
            • IPADDR=192.168.1.100: 静态 IP 地址(如果 BOOTPROTO=static)。
            • NETMASK=255.255.255.0: 子网掩码(如果 BOOTPROTO=static)。
            • GATEWAY=192.168.1.1: 默认网关。
            • DNS1=8.8.8.8: DNS 服务器地址。
            • (更改完成就要使用命令更新,因为这些是存放在硬盘的,但是程序不会一直从硬盘读数据,所以要重启更新)sudo systemctl restart network
          • 图形化(了解)
      • 网路配置工具

        • ip 命令:用于配置网络接口、路由和设备信息,是传统 ifconfig 命令的替代品。

          • 查看网络接口信息:ip addr(可以简写为a)
          • 配置IP地址:ip addr add 192.168.1.10/24 dev eth0
          • 查看路由表:ip route
          • 查看本网内邻居:ip neigh(了解) 
        • ss命令:查看端口
          • ss -tnl
        • nmcli 命令:用于管理 NetworkManager 的命令行工具,支持查看、创建和修改网络连接。(了解)

          • 查看所有连接:nmcli con show
          • 配置新的静态IP:nmcli con mod eth0 ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 ipv4.method manual
        • nmtui 命令:图形化的网络管理工具,运行后可在终端中进行图形化的网络配置。(了解)

    • 配置网络参数

      • 主机名

        • 查看当前主机名:hostname(跟名字就是临时设置)
        • 设置临时主机名:sudo hostnamectl set-hostname new-hostname(就是改etc下的hostname文件)
        • 修改 /etc/hostname 文件并重启网络服务以永久生效。
      • 初始化服务器(Ctrl + Alt:呼出鼠标)

        1. 最小化安装
          1. 如果有了图形就可以停用gdm(图形化界面)
            1. sudo systemctl stop gdm # 对于 GNOME sudo systemctl stop lightdm # 对于 LightDM sudo systemctl stop sddm # 对于 SDDM
            2. ctrl+alt+f2可以切换到另外的tty
          2. 设置默认目标: 如果你希望系统每次启动时都进入命令行模式,可以更改默认的启动目标。
            1. sudo systemctl set-default multi-user.target
        2. 设置root密码
        3. 配置ip地址
        4. 配置yum源
          1. 打包备份
          2. 下载新的:sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
          3. 更新缓存:sudo yum makecache
        5. 关防火墙
          1. sudo systemctl stop firewalld#关闭
            sudo systemctl disable firewalld#永久关闭
        6. selinux
          1. sudo vi /etc/selinux/config中SELINUX=disabled保存,然后重启reboot(永久)
          2. 或者setenfoce 0临时
        7. 安装常用程序
          1. yum install -y lrzsz sysstat elinks wget net-tools bash-completion
        8. 关机快照
  • 第十三章:网络管理实战1

    • osi模型(了解)

      • 简介
        • 开放系统互联(OSI)参考模型是一个用于理解网络通信的标准化模型,由国际标准化组织(ISO)制定。它将网络通信过程划分为七个层次,每层都有特定的功能和接口。
      • osi:7层接口
        • 物理层

          • 功能:负责数据的物理传输,定义电气特性、物理连接等。
          • 接口:电缆、光纤、无线信号等。
        • 数据链路层

          • 功能:在局部网络中提供节点间的可靠通信,处理帧的传输、错误检测与纠正。
          • 接口:MAC地址,帧结构。
        • 网络层

          • 功能:负责数据包的路由和转发,处理逻辑地址(如IP地址)。
          • 接口:IP协议,路由器。
        • 传输层

          • 功能:提供端到端的通信,确保数据的完整性与可靠性,管理流量控制和错误检测。
          • 接口:TCP、UDP。
        • 会话层

          • 功能:管理用户会话,提供会话控制、同步和恢复机制。
          • 接口:会话建立和终止机制。
        • 表示层

          • 功能:数据格式转换,确保不同系统间的数据可理解。
          • 接口:数据编码、压缩和加密。
        • 应用层

          • 功能:用户与网络之间的交互,提供各种网络服务。
          • 接口:HTTP、FTP、SMTP等。
    • tcp/ip模型(传输控制协议/网际协议簇)

      • 简介
        • TCP/IP模型是互联网通信的基础,发展自ARPANET(美国国防部高级研究计划局网络),强调协议的实际使用,形成了一套完整的标准。(实际上使用的)
        • 4层结构/功能(了解可不看)
          • 应用层

            • 功能:负责应用程序之间的通信,为用户提供网络服务。
            • 协议:HTTP、FTP、SMTP、DNS等。
          • 传输层

            • 功能:提供端到端的通信,确保数据的完整性和顺序。
            • 协议:TCP(面向连接)和UDP(无连接)。
          • 网络层

            • 功能:负责数据包的路由和转发,确定数据从源到目的地的路径。
            • 协议:IP、ICMP。
          • 网络接口层(也称为链路层):

            • 功能:负责在物理网络上进行数据传输,包括错误检测和纠正。
            • 协议:Ethernet、PPP等。
        • 5层结构/功能(必看)
          • 应用层:(我们不关心)

            • 功能:为用户提供网络服务,处理应用程序之间的数据交换。
            • 协议:HTTP超文本传输协议、FTP文件传输协议、SMTP简单的邮件传输协议、DNS域名服务,SSH远程登录协议等。
          • 传输层

            • 功能:提供主机之间的可靠或不可靠的数据传输服务,控制数据流和错误。
            • 协议:TCP、UDP。
          • 网络层

            • 功能:负责数据包的路由选择和转发,确保数据从源到目的地的传输。
            • 协议:IP、ICMP。
          • 数据链路层

            • 功能:处理在物理网络上进行的数据传输,提供错误检测和纠正。
            • 协议:Ethernet、Wi-Fi等。
          • 物理层

            • 功能:负责在物理介质上传输原始比特流,定义电气和物理特性。
            • 例子:电缆、无线信号、网络接口卡等。
        • tcp/ip:数据单元DU
          • 应用层:消息(Message),apdu-应用协议数据单元(多为图文声像原始数据)
          • 传输层:段(Segment,TCP)或数据报(Datagram,UDP)
          • 互联网/网络层:数据包(Packet)
          • 数据链路层:帧(Frame)
          • 物理层:比特(bit)
        • 封装与解封装
          • 封装:在数据传输过程中,每一层将数据单元加上头部信息(和尾部信息),形成一个新的数据单元。封装是从应用层到物理层的过程。

            • 例如:应用层数据被封装为传输层的段,段又被封装为互联网层的数据包,最后形成网络接口层的帧。
          • 解封装:接收方在接收到数据时,从物理层向上逐层剥离头部信息,恢复出原始数据单元。解封装是从物理层到应用层的过程。

    • tcp/ip与osi的区别

      • 区别
        • 层数:OSI模型有七层,TCP/IP模型通常有四层(有时扩展为五层)。
        • 设计目标:OSI是一个理论模型,TCP/IP则更注重实践,基于已有的协议。
        • 协议和标准:OSI模型定义了服务和接口,TCP/IP模型则定义了一系列具体的协议。
        • 灵活性:TCP/IP模型更具灵活性,层间关系不如OSI模型那样严格。
    • 进制转换

      • 进制:
        • 逢x进一(进制规则):在x进制中,当一个位置的数字达到x时,会向前一位进位。
        • 基数指的是该进制系统中使用的不同数字的数量
          • 二进制的基数为2,表示数字为0和1。
          • 八进制的基数为8,表示数字为0到7。
          • 十进制的基数为10,表示数字为0到9。
          • 十六进制的基数为16,表示数字为0到9和A到F(A=10, B=11, C=12, D=13, E=14, F=15)。
        • 符号是指在该进制系统中表示数字的具体字符
          • 在二进制中,符号是0和1。
          • 在八进制中,符号是0、1、2、3、4、5、6、7。
          • 在十进制中,符号是0、1、2、3、4、5、6、7、8、9。
          • 在十六进制中,符号是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
        • 位权是指在一个数字中,每一位所代表的数值。位权与进制有关,通常从右到左按位数递增。
          • 在十进制中,右边第一位的位权是10^0(1),第二位的位权是10^1(10),第三位的位权是10^2(100),依此类推。
      • 转换
        • 按位权,二进制中转站,8421,421,对于小数的乘x正取整,对整数的除x倒取余
        • 1 Bytes = 8 bit (转接 = 8 位)
        • 1 KB = 1,024 Bytes (千字节 = 1,024 字节)
        • 1 MB = 1,024 KB (兆字节 = 1,024 千字节)
        • 1 GB = 1,024 MB (吉字节 = 1,024 兆字节)
        • 1 TB = 1,024 GB (泰字节 = 1,024 吉字节)
        • 1 Kbit = 1,000 bits (千比特 = 1,000 比特)
        • 1 Mbit = 1,000 Kbit (兆比特 = 1,000 千比特)
        • 1 Gbit = 1,000 Mbit (吉比特 = 1,000 兆比特)
        • 在存储和内存容量中,通常使用二进制表示(1 KB = 1,024 Bytes),而在网络速度等领域,有时会使用十进制表示(1 Kbit = 1,000 bits)。
  • 第十四章:网络管理实战2

    • 物理层

      • 信号

        • 模拟:模拟信号是连续的信号,表示物理量的变化。它可以在一个范围内取任意值。
        • 数字:数字信号是离散的信号,用二进制表示,通常是0和1。
      • 介质

        • 导体
          • 定义:导体是指能够传导电流的材料,常用于传输电信号。
          • 类型
            • 双绞线:用于电话和局域网,抗干扰能力较强。
            • 同轴电缆:用于电视和互联网,具有较高的带宽。
          • 接线
            • 568A接线顺序:绿白绿橙白蓝蓝白橙棕白棕(同一条线两端一样)

            • 568B接线顺序:橙白橙绿白蓝蓝白绿棕白棕(同一条线两端一样)

        • 光纤
          • 定义:光纤使用光信号传输数据,具有更高的带宽和更远的传输距离。
          • 特点
            • 不受电磁干扰,信号衰减小。
            • 适用于长距离通信,如跨国电话和互联网连接。
    • 数据链路层

      • 功能
        • 帧的封装与解封装:将网络层传递的数据封装成帧,并在接收端解封装。
        • 错误检测与校正:通过CRC(循环冗余校验)等技术检测并可能纠正传输中的错误。
        • 流量控制:控制数据的传输速率,避免接收端因处理不过来而丢失数据。
        • 介质访问控制:管理多个设备对共享介质的访问,例如使用CSMA/CD(以太网)或CSMA/CA(无线网络)协议。
      • 地址
        • 数据链路层使用物理地址(MAC地址)来识别网络中的设备。
        • MAC地址是48位的二进制数,通常以6个十六进制数的形式表示(例如:00:1A:2B:3C:4D:5E)。
      • 帧封装
        • 帧头:包含源地址和目的地址等控制信息。
        • 数据负载:承载从网络层传递下来的数据。
        • 帧尾:用于错误检测的冗余信息(例如CRC)。
      • 交换机工作原理
        • 交换机是一种工作在数据链路层的网络设备,能够接收、处理和转发数据帧。
        • 工作原理:
          • 当交换机接收到数据帧时,它会读取帧头中的目的MAC地址。
          • 根据MAC地址查找其MAC地址表(存储已知MAC地址和对应端口的映射关系)。
          • 将帧转发到对应的端口,确保数据准确送达目标设备。
      • 组建局域网
        • 局域网(LAN)是通过交换机和其他设备将计算机和终端设备连接在一起。
        • 组建局域网的步骤:
          1. 选择适当的网络设备(如交换机、路由器)。
          2. 使用网线(例如,符合568A或568B标准的以太网线)连接设备。
          3. 配置IP地址和子网掩码,确保设备在同一网络中可互相通信。
      • vlan(虚拟局域网)
        • VLAN允许在同一物理网络中创建多个逻辑网络。
        • 功能
          • 通过将设备分组到不同的VLAN中,增强网络安全性和管理性。
          • 减少广播域,提高网络性能。
        • 配置:通过交换机的管理界面配置每个端口所属的VLAN。
      • trunk(干道)
        • Trunk用于在交换机之间传输多个VLAN的信息。
        • 功能
          • 通过干道链路,允许多个VLAN的数据在同一物理链路上进行传输。
          • 使用VLAN标记(如802.1Q)在帧中标识不同的VLAN,以确保数据的正确传递。
        • 配置:在交换机端口上配置为干道模式,并设置允许通过的VLAN。
  • 第十五章:网络实战3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值