Linux 3(完结)

📅 2026/7/14 20:12:08 👁️ 阅读次数 📝 编程学习
Linux 3(完结)

1. 命令类型与 PATH 环境变量

  • type命令用于查看命令的执行方式

    • type -a:列出命令所有可能的执行方式
    • type -t:仅输出执行方式的简短描述(如builtinaliasfile
  • builtin:表示该命令是 Shell 内建指令

  • PATH 查询

    • echo $PATH显示当前 Shell 环境中的命令搜索路径
    • 路径之间以冒号:分隔,查找顺序从左到右
    • 当输入一个命令时,Shell 会在这些目录中按顺序查找同名可执行文件,找到第一个即执行
  • 永久修改 PATH

    • 编辑~/.bash_profile(仅对当前用户生效)或/etc/profile(全局生效)

    • 在文件末尾追加export PATH=$PATH:新路径

    • 保存后执行source ~/.bash_profile使配置在当前 Shell 叠加生效,或退出重新登录以重建 Shell

2. Linux 特殊符号与别名

  • 分号;:在一行中执行多条命令,命令间用分号分隔

  • 转义符\:使紧随其后的特殊字符(及别名)失效
    示例:\ls可取消ls别名(如--color=auto)的影响
    想创建file 1这个文件直接touch file 1就会创建file 和1两个文件
    因此要touch file\ 1

  • 引号

    • 反引号`command`:先执行反引号内的命令,再将输出作为外层命令的参数
      示例:echo `hostname`echo 是一个内建命令,它的功能就是把后面的参数当作字符串打印到屏幕上

    • 双引号"...":内容原样输出,但$\`仍保留其特殊含义

  • 别名管理

    • alias创建别名,unalias取消别名
      示例:alias ping='ping -c3'ping默认只发 3 个包

    • 永久生效:

      • 写入~/.bashrc(仅对当前用户生效)
      • 写入/etc/bashrc(全局生效)
  • 命令历史

    • history查看使用过的命令
    • !行号可快速执行对应历史命令
    • 为安全起见,可在/etc/profile~/.profile中减小HISTSIZE的值

3. 用户与组管理

3.1 用户管理

  • 工作组分类

  • 基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组

  • 扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利

  • 创建用户既有uid也有gid,创建了一个组

  • 用户文件

    • /etc/passwd:存储用户账号基本信息(用户名、UID、GID、家目录、登录 Shell 等)

    • /etc/shadow:存储加密后的用户密码及密码过期策略

    • !!*:表示该账号密码被锁定或从未设置密码

    • 密码字段示例解读:$6$...为加密密码;后面跟:20631:0:99999:7:::

    • 20631:自 1970-01-01 起,最近一次修改密码的天数

    • 0:密码最小使用天数(0 表示可随时修改)

    • 99999:密码最大使用天数(几乎永不过期)

    • 7:密码过期前 7 天开始警告用户

    • (空):密码过期后宽限天数(空表示无宽限期,过期后立即禁用)

    • (空):账户失效日期(空表示永不过期

    • (空):保留字段,未使用

  • 创建用户useradd [选项] 账户名

    • -g 组名/GID:为账户指定所属的基本组(该组必须已存在)

    • -G 组1,组2,...:指定所属的附加组(多个组逗号分隔)

    • -s /bin/bash:指定登录 Shell

    • -u UID:指定用户 ID

    • 未指定组时,系统默认创建与用户名同名的基本组

  • 修改用户usermod [选项] 账户名

    • -s /sbin/nologin 用户名:修改登录 Shell,设为nologin可禁止该用户交互登录 或者vim /etc/passwd修改

    • -L:锁定用户密码(在/etc/shadow密码字段前加!

    • -U:解锁用户密码(去除密码字段前的!

    • -g 组名:更改用户的基本组

    • -G 组列表:覆盖用户的附加组(已有附加组将被替换)

    • -aG 组名:追加附加组(保留原有附加组,新增一个)

    • -G "":清空所有附加组

  • 密码操作

    • passwd 账户名:交互式修改密码 原来的两个!!变成了加密算法

    • passwd -l 账户名:锁定密码(禁止登录)

    • passwd -u 账户名:解锁密码

    • echo "新密码" | passwd --stdin 用户名:非交互式批量设置密码(注意:密码会明文出现在history中;可追加> /dev/null隐藏输出)

    • 管理员也可直接编辑/etc/shadow,在密码字段前加!!达到锁定效果

  • 删除用户

    • userdel -r 账户名:彻底删除用户,同时清除其家目录和邮件池
    • 若未加-r仅删除用户,残留家目录需手动清理:rm -rf /home/账户名/
  • 用户切换

    • su 用户名:仅切换用户身份,不改变当前 Shell 环境变量(不推荐)

    • su - 用户名:切换用户身份并初始化目标用户的环境变量,相当于重新登录(推荐)

      • 每次su -切换后,记住使用exitlogout逐层退出,避免 Shell 嵌套叠加
    • sudo命令:使普通用户能以 root 权限执行特定命令

      • 配置文件:通过visudo(推荐,有语法检查)或vim /etc/sudoers编辑

      • 免密配置:用户名 ALL=(ALL) NOPASSWD:ALL

      • 最小权限原则:可将ALL替换为具体命令路径,如/usr/sbin/ip/bin/systemctl

      • 使用sudo增加权限但是没有该账户密码就会向root发送安全邮件

3.2 组管理
  • 组的命令跟用户的命令相似,user变为group
    创建用户的同时会自动新建初始组,一般不需要另外新建
  • 组文件
    • /etc/group:组名:密码占位符:GID:成员列表

    • /etc/gshadow:组密码

  • 组操作命令
    • groupaddgroupmodgroupdel:与用户管理类似

    • 修改工作组groupmod

      • -g GID——为用户组指定新的组标识号
      • -n 新用户组——将用户组的名字改为新名字
    • gpasswd -参数 用户名 组名

      • -r : 删除组密码
        -a : 把用户加入组
        -d : 把用户从组中删除。
        -M : 可同时添加多个用户
        -A : 给组指派管理员。
    • usermod -G "" 用户名:清空所有附加组

    • 删除组前需确保该组已不是任何用户的基本组,否则应先用usermod -g更改其基本组

3.3 登录信息查看
  • users:查看当前登录用户
  • last:列出历史登录记录(读/var/log/wtmp),可用echo > /var/log/wtmp清空
  • lastlog:每个账号的最近登录时间(读/var/log/lastlog
  • w:显示当前登录用户及其操作
  • echo > /var/log/wtmp清空这个文件

4. 文件与目录权限管理

  • 权限表示

  • 第一位是文件类型,后面的九位标识三位为一组。mtime修改时间

    • r(读)=4,w(写)=2,x(执行)=1
    • 对于目录:r 可列出内容;w 可在其中创建/删除文件;x 可切入目录或执行脚本
  • 修改权限

    • 符号模式:chmod u/g/o/a +/‑/= 权限 文件
      示例:chmod a+x file1为所有位添加执行权限 等于chmod u+x,g+x,o+x file1

    • 数字模式:chmod 755 file1

    • -R递归修改目录及子文件
      stat可以查看目录以及文件的属性

  • 修改所有者/组

    • chown -参数 所有者:所属组 文件
      示例:chown zyl:root dir1/或者chown zyl.root dir1/
  • 特殊权限

    • SUID(4)、SGID(2)、Sticky bit(1):使用四位数字表示,如4755

      • 其中:后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字
        0——表示不设置特殊权限
        ​ 1——表示只设置sticky
        ​ 2——表示只设置GUID权限
        ​ 3——表示只设置SGID和sticky权限
        ​ 4——表示只设置SUID权限
        ​ 5——表示只设置SUID和sticky权限
        ​ 6——表示只设置SUID和SGID
        ​ 7——表示同时设置SUID、GUID、sticky3种权限
    • SGID

      • 文件: 如果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将会变成该程序文件的所属组。
      • 目录:如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A 目录的所属组
        • 普通的other具有x权限的目录,别的用户在里面新建文件,其他用户只有r的权限
        • 因此可以g+s,group继承
    • Sticky bit 对目录:仅目录所有者和文件所有者可以删除目录内的文件(o+t),只针对目录,生效的前提是有x权限

  • ACL 权限

    • setfacl -m u:用户名:权限 文件:为指定用户设置 ACL
    • setfacl -m g:组名:权限 文件:为组设置 ACL
    • getfacl 文件:查看 ACL
    • setfacl -x u:用户名 文件:删除指定用户的 ACL
    • setfacl -b 文件:删除所有 ACL

      • ACL权限置空:setfacl -m u:用户名:--- 文件名

        例:root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x
  • 权限掩码umask

    • 新建文件默认权限 =0666 - umask
    • 新建目录默认权限 =0777 - umask
  • 文件属性

    • chattr +i 文件:设置不可变属性(root 也无法修改),‑i移除
    • lsattr:查看特殊属性
    • ll -Z:查看 SELinux 安全上下文

5. linux联网

  • NetworkManager(nmcli)

    • 删除连接:nmcli c del ens32

    • 重命名连接:nmcli c modify "旧名称" con-name eth0

    • 激活/关闭网卡:nmcli c up eth0nmcli c down eth0

    • 添加连接:nmcli c add type ethernet ifname eth32 con-name eth32 autoconnect yes(动态ip)

    • 设置静态 IP:

      nmcli c modify ens32 ipv4.method manual ipv4.addresses'192.168.150.133/24'ipv4.gateway'192.168.150.2'ipv4.dns'114.114.114.114'


  • 修改网卡配置文件直接更改

    • 编辑vim /etc/sysconfig/network-scripts/ifcfg-eth0
    • BOOTPROTO=none改成dhcp就是动态ip,最后四项是静态ip项,可以直接更改
  • curl 工具

    • curl -I example.com:仅获取 HTTP 响应头,不下载页面内容
      这对于快速检查网站状态、服务器类型、重定向等信息非常有用
      -I 大写字母 I,表示 只显示响应头(Header),等同于 --head,不会下载网页的 body 内容

6. 源码编译安装(以 Nginx 为例)

  1. 下载源码

    wgethttps://nginx.org/download/nginx-1.20.2.tar.gztarzxf nginx-1.20.2.tar.gz

  2. 安装编译依赖

    yuminstall-ygcc pcre-devel (这对于 Nginx 的重写模块(rewrite module)是必需的。)openssl-devel (SSL 模块需要 openssl 开发库。如果未安装,./configure 将失败))
  3. 配置编译选项

    ./configure--help# 查看支持的所有配置选项./configure --with-http_ssl_module --with-http_stub_status_module
  • ./configure – help 会输出当前源码包所支持的所有编译配置选项。它是你编译安装任何源码软件(如 Nginx、Apache、MySQL)前的“说明书”,告诉你有哪些功能可以开启/关闭,以及安装路径如何指定

  • –with-http_ssl_module:开启 SSL/TLS 支持,让你的 Nginx 能处理 HTTPS 请求
    –with-http_stub_status_module:开启状态监控页面,可以访问 /nginx_status 查看当前连接数、请求数等信息

  1. 编译与安装

    make&&makeinstall
  2. 添加到 PATH
    编辑~/.bash_profile,追加export PATH=/usr/local/nginx/sbin:$PATH,然后source ~/.bash_profile

  3. 启动与测试

    nginxcurllocalhost

    停止 Nginx:/usr/local/nginx/sbin/nginx -s stop

7. YUM 仓库与 RPM 包管理

7.1 RPM 常用命令

  • rpm -qa | wc -l:统计已安装的 RPM 包数量
  • rpm -q 包名:精确查询
  • rpm -qa | grep 包名:模糊查询
  • rpm -ql 包名:列出包安装的所有文件路径
  • rpm -qi 包名:查看包详细信息
  • rpm -qf 文件路径:查看文件属于哪个包

7.2 配置本地 YUM 源

  • 要先禁用本来的,vim CentOS-Base.repo 或者备份
cd/etc/yum.repos.dmvCentOS-Base.repo CentOS-Base.repo.bak# 备份原有源(可选)mount/dev/cdrom /media# 挂载光驱vimlocal.repo
[local] name=local repo baseurl=file:///media enabled=1 gpgcheck=0

如果是rhel9

7.3 搭建网络 YUM 仓库

  1. 准备 RPM 包目录

    mkdir/registrycd/media/Packagescp/media/Packages/*.rpm /registry/# 复制若干 RPM 包作为示例cd/registry/ yum makecache fast# 更新缓存yuminstallcreaterepo-ycreaterepo.# 生成仓库元数据

    createrepo .:作用是扫描当前目录及其子目录下所有的 .rpm 包,并生成一个 YUM 仓库必需的元数据(repodata 文件夹)

  2. 通过 HTTP 共享

    yuminstallhttpd-ymv/registry /var/www/html/ systemctl start httpd

    开启自启动httpd服务失败,因为nginx正在占用80端口,需要关掉nginx或者更改Apache的端口

    • 停止 Nginx
      /usr/local/nginx/sbin/nginx -s stop

    • 然后重新启动 httpd
      systemctl start httpd

    切换到根目录然后将registry移动到Apache 的默认网页根目录 /var/www/html/ 下:mv registry /var/www/html/

    浏览器访问 192.168.150.133/registry/

    3.企业内网管理rpm包资源

    在新的虚拟机将本来的CentOS-Base.repo关掉


    新建本地源vim local.repo

    baseurl=http://192.168.150.133/registry/:这是一个通过 HTTP 提供的远程仓库,托管在 IP 为 192.168.150.133(即服务器本身)的机器上



    再复制更多的rpm包到server端的registry,客户端的repolist也会同步

  • 不小心删了/var/www/html。需要重建
    1.mkdir -p /var/www/html
    2.chown apache:apache /var/www/html
    3.chmod 755 /var/www/html

7.4 YUM 日常操作

  • yum list installed:列出已安装包
  • yum provides */命令:查找命令所属包

  • yum search 关键词:模糊搜索包名
  • yum clean all:清除 YUM 缓存

8. 进程管理

  • 静态查看ps

    • -a :显示所有用户的进程
      -u :显示用户名和启动时间
      -x :显示 没有控制终端的进程
      -e :显示所有进程,包括没有控制终端的进程
      -l :长格式显示
      -w:宽行显示,可以使用多个 w 进行加宽显示
      -f:做一个更完整的输出
    • ps aux:显示所有用户进程的详细信息
    • ps -ef:另一种完整格式
    • ps ax

      /usr/lib/systemd/systemd 是 Linux 系统的“一号进程”(PID 1) 的可执行文件,它是整个用户空间(User Space)的父进程,负责启动和管理系统中的所有其他服务和进程
  • 动态查看top

    • top进入交互界面,top -d 1 -p PID监控指定进程动态信息(top是动态查看,ps是静态)
  • 进程树

    • pstree(若未安装,可通过yum provides */pstree查找并安装)
  • 查找 PID

    • pgrep -l sshdpidof sshd查看指定进程
    • cat /run/sshd.pid(某些服务的 PID 文件)
  • 终止进程

    • kill PIDkillall 进程名

9. 磁盘管理与分区

9.1 虚拟机添加硬盘







9.2 添加新磁盘

lsblk# 查看磁盘信息fdisk/dev/sdb# 对磁盘分区mkfs.ext4 /dev/sdb1# 格式化分区mkdir/sdb1mount/dev/sdb1 /sdb1# 挂载df-h# 查看挂载及空间使用

一,fdisk /dev/sdb磁盘分区

二,硬盘使用之前需要格式化

查看文件系统格式:输入mkfs在键入tab(点击2次)进行命令补全,可显示支持的文件系统格式

  • 格式化命令
    • mkfs.ext4 -参数 硬盘分区名
    • -f:强制格式化,已存在文件系统时需要使用
    • -c:建立文件系统前先检查坏块。
    • -V:输出建立文件系统的详细信息

三,挂载

  • 根下创建目录:mkdir /sdb1
  • 将/dev/sdb1挂载到/sdb1 :mount /dev/sdb1 /sdb1
  • 查看系统各个磁盘分区的空间使用情况:df -h

9.2 自动挂载

mount手动挂载重启之后需要重新挂载,因此要实现自动挂载

cat/etc/fstab# 查看文件系统挂载表,记录了系统启动时自动挂载的分区和设备blkid /dev/sdb1# 获取 UUIDcdumount/sdb1#取消挂载df-h/sdb1/#查看分区挂载信息mountUUID="df6f4e2b-4067-49a0-b7f6-604b8f3e36ef"/sdb1#使用UUID挂载vim/etc/fstab# 在最后一行加:# UUID="xxxx" /sdb1 ext4 defaults 0 0mount-a# 测试自动挂载



  • mount命令:

    • mount [-t 文件系统类型] 设备名 挂载点目录
    • -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
    • -t:指定文件系统类型
    • -o 特殊设备选项:挂载设备时使用逗号分割输入额外参数
  • umount命令:

    • umount 参数 设备名称[挂载点]
    • -f :强制卸载
    1. 对sdb再次进行分区,与前面流程一样

    2. partprobe作用是通知 Linux 内核重新读取磁盘的分区表,而无需重启系统

    3. 备份磁盘分区dd if=/dev/sdb of=mbr bs=512 count=1

    4. 取消挂载并将分区信息破坏,可以用刚刚备份的信息恢复dd if=mbr of=/dev/sdb,然后再重新挂载


      不小心删了分区fdisk -d 但是/etc/fstab中的挂载信息还在,重启会启动不了,会进入紧急模式,此时vim /etc/fstab删掉就行

9.3 Swap 分区

  • 磁盘分区方式
    fdisk/dev/sdb#分一个2g的分区sdb1mkswap/dev/sdb1#swap格式化swapon/dev/sdb1#激活swapfree-m#查看swap分区vim/etc/fstab# /etc/fstab 添加:# UUID="xxxx" swap swap defaults 0 0
    删除:关闭 swapswapoff /dev/sdb1
    然后再fdisk删掉
  • 文件方式
    ddif=/dev/zeroof=/opt/swapdiskbs=1Mcount=2048#新建空文件du-h/opt/swapdisk# 查看这个文件所占用的磁盘大小mkswap/opt/swapdisk#空文件格式化为swapswapon/opt/swapdisk#激活
  • df命令列出文件系统的磁盘空间占用情况 df -参数 目录或文件名
  • du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB

9.4 备份与恢复 MBR

ddif=/dev/sdbof=mbrbs=512count=1# 备份ddif=mbrof=/dev/sdb# 恢复

10. LVM 逻辑卷管理

10.1 创建逻辑卷

pvcreate /dev/sdb# 初始化物理卷pvs#作用是以简洁列表的形式,显示当前系统中所有 LVM 物理卷(PV)的概要信息vgcreate vg0 /dev/sdb# 创建卷组vgs vgdisplay vg0 lvcreate-L10G-nlv1 vg0# 创建逻辑卷lvs#简洁列表显示当前系统中所有逻辑卷(LV)的概要信息mkfs.xfs /dev/vg0/lv1# 格式化mkdir/lvmmount/dev/vg0/lv1 /lvm#lv1挂载到lvm上blkid /dev/vg0/lv1# 获取 UUID# 编辑 /etc/fstab 实现自动挂载mount-a

10.2 扩容

  • 逻辑卷扩容

    lvextend-L+10G /dev/vg0/lv1# 若提示空间不足,可改用 -l +PE数量 或 100%FREE

    • -l(小写 L)后面必须跟 PE(物理扩展块)的数量(比如 2560 或 100%FREE),不能直接写 10G。
    • -L(大写 L)后面才跟 具体大小,比如 10G、500M。
  • 文件系统扩容

逻辑卷扩容后查看分区容量没有改变因此要分区扩容

  • xfs_growfs /dev/vg0/lv1(XFS)

  • resize2fs /dev/vg0/lv1(ext4)

  • 卷组扩容(添加新磁盘)

    pvcreate /dev/sdc vgextend vg0 /dev/sdc vgs# 查看扩容后的卷组大小lvextend-L+20G /dev/vg0/lv1 xfs_growfs /dev/vg0/lv1

    vgs 查看lvm状态vg0:大小约 40GB,空闲约 20GB,说明你之前创建的卷组 vg0 包含了两个物理卷(#PV=2),并且已经创建了一个逻辑卷(#LV=1),占用了约 20GB,还剩约 20GB 空闲

10.3 删除 LVM

  1. 卸载挂载点:umount /lvm

  2. 逻辑卷移除:lvremove /dev/vg0/lv1

  3. 卷组移除:vgremove vg0

  4. 物理卷移除:pvremove /dev/sdb /dev/sdc

  5. 进入vim编辑删除UUID自动挂载:vim /etc/fstab

11. LAMP 环境搭建与 Discuz 安装

Lamp = linux/windows+apache/nginx+mysqld/oracle/pgsql+php/jsp

11.1 安装 MariaDB

yuminstall-ymariadb-server systemctlenable--nowmariadb#设置开机自启动mysql_secure_installation# 按提示设置 root 密码并全部回答 Ymysql-p# 登录测试

11.2 安装 PHP 7.3(基于 SCL)

yum search scl yuminstall-ycentos-release-scl.noarch yum list rh-php73-* yuminstall-yrh-php73 rh-php73-php-mysqlnd rh-php73-php-fpm systemctl restart httpd

下载之后repolist会报错需要去修改





11.3 配置 Nginx 支持 PHP

  1. vim /usr/local/nginx/conf/nginx.conf



2.nginx:启动nginx服务

11.4 安装 Discuz

unzipDiscuz_X3.5_SC_UTF8_*.zip#cd upload/#mv * /usr/local/nginx/html/ 相当于下面的命令systemctl disable--nowhttpd#禁用apachemvupload/* /usr/local/nginx/html/# 移动到 Nginx 根目录chmod-R777/usr/local/nginx/html/config\/usr/local/nginx/html/data\/usr/local/nginx/html/uc_client\/usr/local/nginx/html/uc_server

不更改权限图中会报错

  • yum install -y rh-php73-php-fpm安装 PHP-FPM(FastCGI 进程管理器),它能让 Nginx 或 Apache 通过 FastCGI 协议与 PHP 通信,尤其适合处理高并发动态请求

  • 同时启用(开机自启)并立即启动 PHP-FPM 服务。systemctl enable --now rh-php73-php-fpm
    快速验证 PHP-FPM 是否成功运行并开始监听。

  • 浏览器访问http://服务器IP/install/index.php按照流程安装

  • 填入自己设置的mysql密码和root密码
  • 进入后台管理出现如图界面需要
    cd /usr/local/nginx/html/install/然后rm -fr index.php