Linux基础复习第八天

Linux基础复习第八天

1.什么是RAID,有几种类型,其原理是什么

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种通过将多个物理磁盘组合成一个逻辑存储单元,以提升存储性能数据可靠性或兼顾两者的技术。

其核心目标是通过数据分条镜像校验等技术,实现更高的读写速度、更大的存储容量以及更强的数据容错能力。

  • RAID 的常见类型及原理

    RAID 根据数据分布和冗余策略划分为多个级别(Level),以下是常见的 RAID 类型及其工作原理:

    • RAID 0(条带化,Striping)

      原理:

      • 将数据分割为块(如 64KB),并均匀分布到所有磁盘上(即“条带化”)。
      • 读写操作并行执行,利用多个磁盘的带宽提升性能。

      特点:

      • 无冗余:任一磁盘故障会导致数据丢失。
      • 容量:总容量为所有磁盘容量之和(无冗余损耗)。
      • 性能:读写速度显著提升(理论为单盘的 N 倍,N 为磁盘数量)。

      适用场景:

      • 高性能需求(如视频编辑、科学计算),但对数据安全性要求较低。
    • RAID 1(镜像,Mirroring)

      原理:

      • 数据完全复制到两个或多个磁盘(镜像)。
      • 读取时可从任意磁盘读取(提升读取速度),写入时需同步更新所有镜像盘。

      特点:

      • 冗余:支持单盘故障(数据从镜像盘恢复)。
      • 容量:总容量为单盘容量(50% 冗余损耗)。
      • 性能:读取速度提升(并行读取),写入速度与单盘相同。

      适用场景:

      • 高数据安全性需求(如数据库、关键业务系统)。
    • RAID 5(带分布式奇偶校验的条带化)

      原理:

      • 数据分条存储,同时计算奇偶校验信息(通过 XOR 运算)并分散存储到所有磁盘。
      • 奇偶校验用于数据恢复(支持单盘故障)。

      特点:

      • 冗余:支持单盘故障(通过奇偶校验重建数据)。
      • 容量:总容量为 (N-1)/N(N 为磁盘数量,1 块盘用于校验)。
      • 性能:读取速度快(并行读取),写入速度中等(需计算奇偶校验)。

      适用场景:

      • 平衡性能与成本的场景(如文件服务器、Web 服务器)。
    • RAID 6(双奇偶校验的条带化)

      原理:

      • 在 RAID 5 的基础上增加第二组奇偶校验(P+Q 或 DP 算法),支持双盘故障。

      特点:

      • 冗余:支持双盘故障(更高的容错性)。
      • 容量:总容量为 (N-2)/N(N 为磁盘数量,2 块盘用于校验)。
      • 性能:读取速度快,写入速度较 RAID 5 更低(需计算双校验)。

      适用场景:

      • 大容量存储和高容错需求(如医疗影像存储、长期归档)。
    • RAID 10(镜像+条带化,RAID 1+0)

      原理:

      • 先将磁盘分为若干组 RAID 1(镜像),再将这些组以 RAID 0(条带化)组合。

      特点:

      • 冗余:每组镜像支持单盘故障(整体支持多盘故障)。
      • 容量:总容量为 50%(镜像损耗)。
      • 性能:读写速度接近 RAID 0(高性能),同时具备 RAID 1 的冗余。

      适用场景:

      • 高性能与高可靠性的场景(如数据库主节点、虚拟化平台)。
    • RAID 50(RAID 5+0)

      原理:

      • 先将磁盘分为多个 RAID 5 阵列,再将这些阵列以 RAID 0(条带化)组合。

      特点:

      • 冗余:每个 RAID 5 阵列支持单盘故障。
      • 容量:总容量为 (N×(N-1))/M(M 为 RAID 5 组数)。
      • 性能:读写速度高,适合大规模数据存储。

      适用场景:

      • 超大规模数据中心和云存储。

2.什么是防火墙,Linux下有哪些防火墙

防火墙(Firewall)是一种网络安全系统,用于监控和控制进出网络的数据流量。它通过预定义的安全规则(如允许或拒绝特定IP地址、端口、协议等)来保护内部网络免受外部威胁(如未经授权的访问、恶意攻击、数据泄露等)。

防火墙的核心功能包括:

  1. 访问控制:基于规则允许或拒绝流量(如源地址、目的地址、端口、协议等)。
  2. 网络地址转换(NAT):隐藏内部网络的真实IP地址。
  3. 状态检测:跟踪连接状态(如TCP三次握手),防止伪造流量。
  4. 应用层过滤:深度检测应用层协议(如HTTP、FTP),拦截恶意内容。
  5. 日志记录与监控:记录流量行为,便于分析和审计。
  • Linux 系统中常见的防火墙工具有以下几种:
    1. iptables(静态防火墙)

      简介

      • iptables 是 Linux 内核中基于 Netfilter 的包过滤工具,工作在网络层(OSI 模型第三层)。
      • 通过定义链式规则(Chain)和表(Table)来控制数据包的流入、流出和转发行为。

      特点

      • 静态规则:修改规则后需重新加载,可能中断现有连接。
      • 仅处理互联网流量:无法直接过滤内网到内网的流量。
      • 命令行配置:规则通过命令行设置,需手动编写。
      • 默认允许所有流量:需通过拒绝规则进行限制。

      常用命令示例

      # 查看当前规则
      sudo iptables -L -n -v
      # 禁止某个IP访问
      sudo iptables -A INPUT -s 192.168.1.100 -j DROP
      # 允许特定IP访问80端口
      sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j ACCEPT
      # 保存规则(需配合iptables-save)
      sudo iptables-save > /etc/iptables/rules.v4
      

      适用场景

      • 需要精细控制网络流量的静态规则场景。
      • 传统服务器或对性能要求较高的环境。
    2. firewalld(动态防火墙)

      简介

      • firewalld 是 CentOS/RHEL 7+ 和 Fedora 等系统默认的动态防火墙工具,基于 iptables 但提供了更高级的接口。
      • 引入了 区域(Zone) 的概念,将网络接口或源地址分配到不同区域,每个区域对应不同的安全策略。

      特点

      • 动态规则:支持运行时修改规则,无需重启服务,不影响现有连接。
      • 支持内网流量过滤:可以过滤内网到内网的流量。
      • 图形化和命令行配置:支持 firewall-cmd 命令和 firewall-config 图形工具。
      • 默认拒绝所有流量:需通过允许规则放行。

      常用命令示例

      # 查看防火墙状态
      sudo systemctl status firewalld
      # 启动/停止防火墙
      sudo systemctl start/stop firewalld
      # 设置默认区域
      sudo firewall-cmd --set-default-zone=public
      # 添加端口开放(运行时生效)
      sudo firewall-cmd --add-port=80/tcp
      # 添加永久规则(需重启生效)
      sudo firewall-cmd --permanent --add-port=80/tcp
      # 刷新规则
      sudo firewall-cmd --reload
      

      适用场景

      • 动态管理规则的场景(如云服务器、频繁变更的网络环境)。
      • 需要灵活划分区域(如家庭网络、公共网络)的环境。
    3. nftables(新一代防火墙工具)
      • 简介
        • nftablesiptables 的替代方案,旨在简化规则管理并提高性能。
        • 提供统一的表(Table)和链(Chain)管理,支持更复杂的匹配条件。
      • 特点
        • 兼容性:逐步取代 iptables,但部分旧系统仍需依赖 iptables
        • 性能优化:减少内核与用户空间的交互,提升处理效率。
        • 语法简化:规则语法更简洁,支持批量操作。
      • 适用场景
        • 新部署的 Linux 系统(如 Ubuntu 22.04+、CentOS Stream 9)。
        • 需要高性能和复杂规则管理的场景。
    4. ipset(IP集合管理工具)

      简介

      • ipset 是一个辅助工具,用于管理 IP 地址、端口或 MAC 地址的集合。
      • 可与 iptablesfirewalld 结合使用,动态更新黑名单或白名单。

      特点

      • 高效匹配:通过哈希表快速查找 IP 或端口集合。
      • 动态更新:无需重启防火墙即可更新规则。
      • 支持多种集合类型:如 IP 地址、端口范围、MAC 地址等。

      常用命令示例

      # 创建IP集合
      sudo ipset create blacklist hash:ip
      # 添加IP到集合
      sudo ipset add blacklist 192.168.1.100
      # 在iptables中引用集合
      sudo iptables -A INPUT -m set --match-set blacklist src -j DROP
      

      适用场景

      • 动态维护大规模 IP 黑名单(如 DDoS 攻击防护)。
      • 需要频繁更新规则的场景。

3.如何清空iptables中的所有规则

要清空 iptables 中的所有规则,需要执行多个命令来确保所有链、表和自定义规则都被清除。以下是详细的操作步骤:

  • 清空默认表(filter 表)的规则
    # 清空所有链中的规则(INPUT、OUTPUT、FORWARD)
    sudo iptables -F
    
    # 删除所有用户自定义的链
    sudo iptables -X
    
    # 重置所有链的计数器(包和字节计数)
    sudo iptables -Z
    
  • 清空 NAT 表(nat 表)的规则
    # 清空 nat 表中的所有规则
    sudo iptables -t nat -F
    
    # 删除 nat 表中的用户自定义链
    sudo iptables -t nat -X
    
    # 重置 nat 表的计数器
    sudo iptables -t nat -Z
    
  • 清空 Mangle 表的规则
    # 清空 mangle 表中的所有规则
    sudo iptables -t mangle -F
    
    # 删除 mangle 表中的用户自定义链
    sudo iptables -t mangle -X
    
    # 重置 mangle 表的计数器
    sudo iptables -t mangle -Z
    
  • 验证规则是否已清空
    # 查看当前规则,确认是否为空
    sudo iptables -L -n -v
    sudo iptables -t nat -L -n -v
    sudo iptables -t mangle -L -n -v
    

4.添加一个规则,禁止所有地址访问服务器的80端口,测试是否生效

  • 步骤 1:添加规则禁止所有地址访问 80 端口
    # 添加规则:禁止所有 IP 访问 80 端口(TCP 协议)
    sudo iptables -A INPUT -p tcp --dport 80 -j DROP
    

    命令解释

    • sudo:以管理员权限运行命令。
    • iptables:Linux 防火墙工具。
    • -A INPUT:将规则添加到 INPUT 链(处理进入服务器的流量)的末尾。
    • -p tcp:指定协议为 TCP(HTTP 使用 TCP 协议)。
    • --dport 80:目标端口为 80(HTTP 服务端口)。
    • -j DROP:对匹配的流量执行 DROP 动作(丢弃数据包,不返回任何响应)。
  • 步骤 2:验证规则是否生效
    • 方法 1:查看规则列表
      # 查看当前的 iptables 规则
      sudo iptables -L -n -v
      

      预期输出: 在 INPUT 链中会看到类似以下规则:

      DROP     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
      

      命令解释

      • -L:列出规则。
      • -n:以数字形式显示 IP 地址和端口(避免解析主机名和服务名)。
      • -v:显示详细信息(如数据包和字节计数)。
    • 方法 2:测试访问
      • 本地测试(如果服务器上运行了 Web 服务):

        # 尝试访问本地 80 端口
        curl http://127.0.0.1
        

        预期结果
        如果规则生效,会返回超时或错误(如 Connection refused)。

      • 远程测试(从其他机器访问):

        # 替换 <服务器IP> 为你的服务器 IP
        curl http://<服务器IP>
        

        预期结果
        如果规则生效,会返回超时或错误。

  • 步骤 3:保存规则(防止重启后失效)

    根据你的 Linux 发行版选择以下命令:

    • CentOS/RHEL

      sudo service iptables save
      
    • Ubuntu/Debian

      sudo apt-get install iptables-persistent  # 安装持久化工具(如未安装)
      sudo iptables-save > /etc/iptables/rules.v4
      

      命令解释

      • iptables-save:将当前规则保存到文件。
      • /etc/iptables/rules.v4:Ubuntu/Debian 的规则保存路径。
      • service iptables save:CentOS/RHEL 的保存方式(直接写入配置文件)。
  • 步骤 4:临时恢复规则(可选)

    如果测试后需要临时恢复访问,可以删除规则:

    # 删除刚刚添加的规则(需先通过 `iptables -L --line-numbers` 查看规则编号)
    sudo iptables -D INPUT <规则编号>
    

    命令解释

    • -D INPUT:从 INPUT 链中删除规则。
    • <规则编号>:通过 iptables -L --line-numbers 查看规则在链中的行号。

5.iptables规则是按顺序全部执行还是匹配到就结束

iptables 的规则执行遵循 “匹配即停止”(Match and Stop) 的原则。具体规则如下:

  • 规则匹配顺序
    • 从上到下 依次匹配规则。

    • 如果数据包 匹配到某条规则,则立即执行该规则的动作为止,不再检查后续规则

    • 如果 没有匹配任何规则,则执行该链的 默认策略(默认策略由 -P 设置,如 ACCEPTDROP)。

  • 动作对执行流程的影响

​ 不同的动作(-j 目标)会影响是否继续处理后续规则:

动作行为
ACCEPT允许数据包通过,终止当前链的处理,后续规则不再检查。
DROP直接丢弃数据包,终止当前链的处理,后续规则不再检查。
REJECT拒绝数据包并返回响应(如 TCP RST),终止当前链的处理。
LOG/ULOG记录日志,继续检查后续规则
RETURN结束当前自定义链的处理,返回到调用链继续检查后续规则(仅限用户自定义链)。
REDIRECT/MASQUERADE修改数据包并继续处理后续规则(如 NAT 规则)。
  • 示例说明
    • 场景 1:匹配即停止
      # 规则 1:允许 192.168.1.0/24 网段访问 80 端口
      sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT
      
      # 规则 2:禁止所有其他地址访问 80 端口
      sudo iptables -A INPUT -p tcp --dport 80 -j DROP
      
    • 匹配顺序:

      • 如果数据包来自 192.168.1.0/24,匹配规则 1,执行 ACCEPT直接放行,不再检查规则 2。

      • 如果数据包来自其他地址,匹配规则 2,执行 DROP直接丢弃

    • 场景 2:LOG 后继续匹配

      # 规则 1:记录所有访问 80 端口的流量日志
      sudo iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP Access: "
      
      # 规则 2:禁止所有访问 80 端口
      sudo iptables -A INPUT -p tcp --dport 80 -j DROP
      
    • 匹配顺序:

      • 所有访问 80 端口的数据包都会先记录日志(LOG),继续检查后续规则
      • 最终匹配规则 2,执行 DROP

  • 注意事项
    • 规则顺序至关重要

      • 如果规则 2(DROP)在规则 1(ACCEPT)之前,所有 80 端口流量都会被 DROP,规则 1 的 ACCEPT 永远不会生效。
      • 解决方案:使用 -I 插入规则到指定位置,或调整规则顺序。
    • 默认策略的兜底作用

      • 如果没有规则匹配,则执行链的默认策略(如 INPUT 链默认是 ACCEPTDROP)。
      • 建议:设置严格默认策略(如 DROP),再通过规则放行特定流量。
    • LOG 的调试用途

      • 使用 LOG 动作可以记录匹配到的流量,帮助排查规则是否生效。
      • 日志通常记录在 /var/log/messages 或系统日志服务中。

  • 如何查看规则顺序
    # 查看 INPUT 链的规则(带行号)
    sudo iptables -L INPUT --line-numbers
    

6.如果要拒绝所有地址访问,但是允许指定的地址访问,那么拒绝的规则应该放在第几条

iptables 中,如果需要实现 “拒绝所有地址访问,但允许特定 IP 地址访问” 的规则,拒绝所有 的规则必须放在 允许特定 IP 的规则 之后。否则,允许规则永远不会生效,因为 iptables 是 “匹配即停止” 的机制。

7.如何调整iptables规则的顺序

  • 查看当前规则及顺序

    使用 --line-numbers 参数查看规则的 编号(num),这是调整顺序的前提。

    # 查看 INPUT 链的规则(带行号)
    sudo iptables -L INPUT --line-numbers
    

    示例输出

    num  target     prot opt source               destination
    1    ACCEPT     tcp  --  192.168.1.100        anywhere             tcp dpt:80
    2    DROP       tcp  --  anywhere             anywhere             tcp dpt:80
    

  • 调整规则顺序的常用方法
    • 方法 1:删除并重新插入规则
    1. 删除旧规则
      根据规则的编号删除不需要的规则:

      # 删除 INPUT 链的第 2 条规则(DROP 规则)
      sudo iptables -D INPUT 2
      
    2. 插入新规则到指定位置
      使用 -I 参数将规则插入到链的 指定位置(例如第 1 行):

      # 在 INPUT 链的第 1 位置插入 DROP 规则
      sudo iptables -I INPUT 1 -p tcp --dport 80 -j DROP
      
    3. 验证调整后的顺序

      sudo iptables -L INPUT --line-numbers
      
    • 方法 2:直接调整规则顺序

      如果规则已经存在,可以通过删除和重新插入的方式调整顺序,无需修改规则内容。

      示例
      假设当前规则顺序如下:

      1  ACCEPT  tcp  dpt:80
      2  DROP    tcp  dpt:80
      

      要将 DROP 规则移到 ACCEPT 之后:

      # 删除 DROP 规则(第 2 条)
      sudo iptables -D INPUT 2
      
      # 在 ACCEPT 规则(第 1 条)之后插入 DROP 规则
      sudo iptables -I INPUT 2 -p tcp --dport 80 -j DROP
      
  • 常用操作命令总结
    操作命令
    查看规则及行号sudo iptables -L <链名> --line-numbers
    删除规则sudo iptables -D <链名> <行号>sudo iptables -D <链名> <匹配条件>
    插入规则到顶部sudo iptables -I <链名> 1 <规则内容>
    插入规则到指定位置sudo iptables -I <链名> <行号> <规则内容>
    追加规则到末尾sudo iptables -A <链名> <规则内容>
  • 示例:调整规则顺序的完整流程

    假设当前规则如下:

    1  ACCEPT  tcp  dpt:80
    2  DROP    tcp  dpt:80
    

    目标:将 DROP 规则移到 ACCEPT 之后。

    步骤

    1. 删除 DROP 规则(第 2 条):

      sudo iptables -D INPUT 2
      
    2. ACCEPT 规则(第 1 条)之后插入 DROP 规则:

      sudo iptables -I INPUT 2 -p tcp --dport 80 -j DROP
      
    3. 验证调整后的规则顺序:

      sudo iptables -L INPUT --line-numbers
      
  • 注意事项
    1. 避免锁自己在外面

      • 如果调整的是 SSH 规则(如 dport 22),确保 ACCEPT 规则在 DROP 之前。
      • 建议在本地终端操作,或提前配置好允许 SSH 的规则。
    2. 保存规则
      调整后需保存规则,防止重启后失效:

      • CentOS/RHEL:

        sudo service iptables save
        
      • Ubuntu/Debian:

        sudo apt install iptables-persistent
        sudo netfilter-persistent save
        
    3. 测试规则
      使用 telnetcurlnmap 测试端口是否生效:

      telnet <服务器IP> 80
      curl http://<服务器IP>:80
      

8.如何单独删除某条iptables规则

  • 方法 1:按规则编号删除
    • 查看规则及行号
      使用 --line-numbers 参数查看规则列表和对应的行号:

      sudo iptables -L <链名> --line-numbers
      

      例如,查看 INPUT 链的规则:

      sudo iptables -L INPUT --line-numbers
      

      示例输出

      num  target     prot opt source               destination
      1    ACCEPT     tcp  --  192.168.1.100        anywhere             tcp dpt:80
      2    DROP       tcp  --  anywhere             anywhere             tcp dpt:80
      
    • 删除指定行号的规则
      使用 -D 参数删除指定链中的规则,格式为:

      sudo iptables -D <链名> <规则行号>
      

      例如,删除 INPUT 链的第 2 条规则:

      sudo iptables -D INPUT 2
      
  • 方法 2:按规则内容删除
    • 列出所有规则
      查看规则的具体内容(无需行号):

      sudo iptables -S <链名>
      

      例如,查看 INPUT 链的规则:

      sudo iptables -S INPUT
      

      示例输出

      -A INPUT -p tcp -s 192.168.1.100 --dport 80 -j ACCEPT
      -A INPUT -p tcp --dport 80 -j DROP
      
    • 复制并修改规则
      将需要删除的规则复制出来,并将 -A(添加)替换为 -D(删除)。
      例如,删除 INPUT 链中允许 192.168.1.100 访问 80 端口的规则:

      sudo iptables -D INPUT -p tcp -s 192.168.1.100 --dport 80 -j ACCEPT
      

9.准备2台虚拟机,A和B,在A机器上生成密钥,并配置让A可以使用密钥免密登录到B机器

  • 步骤 1:在 A 机器上生成 SSH 密钥对
    • 生成密钥对
      在 A 机器上执行以下命令,生成 RSA 类型的密钥对(默认保存在 ~/.ssh/ 目录下):

      ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
      
      • -t rsa:指定密钥类型为 RSA。
      • -b 4096:指定密钥长度为 4096 位(更安全)。
      • -C "your_email@example.com":添加注释(可选)。
    • 按提示操作

      • 系统会提示你输入保存密钥的路径(默认为 ~/.ssh/id_rsa),直接按回车即可。
      • 然后会提示输入密码短语(passphrase),如果希望免密码登录,直接按回车留空。
    • 生成结果

      • 私钥文件:~/.ssh/id_rsa(需严格保护)。
      • 公钥文件:~/.ssh/id_rsa.pub(需复制到 B 机器)。
  • 步骤 2:将 A 的公钥复制到 B 机器
    • 使用 ssh-copy-id 工具(推荐)

      • 在 A 机器上执行以下命令:

        ssh-copy-id user@B机器的IP地址
        

        user:B 机器上的用户名(如 root 或普通用户)。

        示例:

        ssh-copy-id ymyw@192.168.163.141
        
      • 验证操作

        • 系统会提示输入 B 机器的用户密码(用于验证身份)。
        • 如果成功,公钥会被自动追加到 B 机器的 ~/.ssh/authorized_keys 文件中。
  • 步骤 3:配置 B 机器的 SSH 服务
    • 检查 SSH 配置文件
      在 B 机器上编辑 /etc/ssh/sshd_config,确保以下配置项已启用:

      PubkeyAuthentication yes
      AuthorizedKeysFile      .ssh/authorized_keys
      PasswordAuthentication yes  # 如果需要保留密码登录,可保留为 yes
      
      • 如果修改了配置文件,重启 SSH 服务:

        sudo systemctl restart sshd
        
    • 检查权限
      在 B 机器上执行以下命令,确保权限正确:

      # 用户家目录权限
      chmod 700 ~/
      # .ssh 目录权限
      chmod 700 ~/.ssh
      # authorized_keys 文件权限
      chmod 600 ~/.ssh/authorized_keys
      
  • 步骤 4:从 A 机器测试免密登录
    • 尝试登录 B 机器
      在 A 机器上执行:

      ssh user@B机器的IP地址
      
      • 如果配置成功,将无需输入密码即可登录。
    • 常见问题排查

      • 权限错误:确保 B 机器的 .ssh 目录和 authorized_keys 文件权限正确。

      • SSH 配置问题:检查 B 机器的 /etc/ssh/sshd_config 是否启用 PubkeyAuthentication

      • 日志查看:在 B 机器上查看日志以排查问题:

        sudo tail -f /var/log/auth.log
        
  • 步骤 5(可选):禁用 B 机器的密码登录(增强安全性)
    1. 修改 B 机器的 SSH 配置在/etc/ssh/sshd_config中设置:

      PasswordAuthentication no
      
    2. 重启 SSH 服务

      sudo systemctl restart sshd
      

10.如何从A机器上复制一个文件或目录到B机器

  • 方法 1:使用 scp 命令

    scp(Secure Copy)是基于 SSH 的安全文件传输工具,适合在已配置 SSH 的 Linux 机器之间传输文件。

    1. 复制单个文件

    sudo scp /path/to/source/file user@B机器的IP地址:/path/to/destination/
    
    • 示例:

      sudo scp /opt/mydir/200MB_file ymyw@192.168.163.141:/opt
      

      将 A 机器上的200MB_file复制到 B 机器的/opt/目录。

    • 注意事项:

      要确保B及其上的文件夹有相应的写入权限:sudo chmod 777 /opt

    2. 复制整个目录

    # 添加 -r 参数(递归复制):
    
    sudo scp -r /path/to/source/directory/ user@B机器的IP地址:/path/to/destination/
    
    • 示例:

      sudo scp -r /opt/mydir/ ymyw@192.168.163.141:/opt/
      

      将 A 机器上的 mydir 目录及其内容复制到 B 机器的 /opt/ 目录。

    3. 启用压缩传输(大文件推荐)

    # 添加 -C 参数以压缩数据(减少传输时间):
    
    scp -r -C /path/to/source user@B机器的IP地址:/path/to/destination/
    

    4. 指定非默认 SSH 端口

    如果 B 机器的 SSH 端口不是默认的 22,使用 -P 参数指定端口:

    scp -P 2222 /path/to/file user@B机器的IP地址:/path/to/destination/
    
  • 方法 2:使用 rsync 命令

    rsync 是更强大的文件同步工具,支持增量传输和断点续传,适合大文件或频繁同步场景。

    1. 基本用法

    rsync -avz /path/to/source/ user@B机器的IP地址:/path/to/destination/
    
    • 参数说明

      • -a:归档模式(保留权限、时间戳等)。
      • -v:详细输出。
      • -z:压缩传输。
    • 示例:

      sudo rsync -avz /opt/mydir ymyw@192.168.163.141:/opt
      

    2. 删除目标目录多余文件(保持完全同步)

    添加 --delete 参数:

    sudo rsync -avz --delete /path/to/source/ user@B机器的IP地址:/path/to/destination/
    

    3. 指定非默认 SSH 端口

    sudo rsync -avz -e "ssh -p 2222" /path/to/source/ user@B机器的IP地址:/path/to/destination/
    

11.如何使用sync同步A机器上的目录到B机器

输入以下命令:

sudo rsync -avz /opt/mydir ymyw@192.168.163.141:/opt

# 输出:
ymyw@192.168.163.141's password: 
sending incremental file list
mydir/
mydir/200MB_file
mydir/lost+found/

sent 6,591 bytes  received 47 bytes  1,021.23 bytes/sec
total size is 209,715,200  speedup is 31,593.13

接着去B机器上查看对应目录是否完整即可。

12.如何设置同步时,保持目录一致,比如A机器原始目录中删除了文件同时也会删除B机器同步目录中的对应文件

  • 使用 rsync--delete 参数

    命令格式

    rsync -av --delete /path/to/source/ user@remote:/path/to/destination/
    
    • --delete:删除目标目录中源目录没有的文件。
  • 注意事项
    • 测试运行(Dry Run)

      在首次使用时,建议先通过 --dry-run 参数模拟操作,确认无误后再执行:

      rsync -avn --delete /opt/mydir/ ymyw@192.168.163.141:/opt/sync_dir/
      
      • -n--dry-run:仅显示操作,不实际执行。
    • 定时同步(可选)

      通过 cron 设置定时任务,定期同步目录:

      # 编辑 crontab
      crontab -e
      
      # 添加以下内容(每小时同步一次)
      0 * * * * rsync -av --delete /opt/mydir/ ymyw@192.168.163.141:/opt/sync_dir/
      

13.如何设置同步时,A机器原始目录中删除文件,但是B机器同步目录中会保留文件

  • 避免使用 --delete 参数

rsync 默认不会删除目标目录中的文件,除非你显式指定 --delete 参数。因此,只需 移除 --delete 参数 即可满足需求。

14.每隔几秒创建一个以当前时间命名的文件,比如20250623110833.txt

  • 方法 1:使用 Python 脚本(推荐)
    • 编写 Python 脚本

      import time
      from datetime import datetime
      
      # 设置间隔时间(单位:秒)
      interval = 5  # 每隔 5 秒创建一个文件
      
      while True:
          # 获取当前时间戳(格式:YYYYMMDDHHMMSS)
          timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
          
          # 创建文件并写入内容(可选)
          filename = f"{timestamp}.txt"
          with open(filename, 'w') as f:
              f.write(f"This file was created at {timestamp}\n")
          
          print(f"Created file: {filename}")
          
          # 等待指定时间
          time.sleep(interval)
      
    • 运行脚本

      在终端中直接运行:

      python3 your_script.py
      
    • 后台运行(可选)

      使用nohup或screen让脚本在后台运行:

      nohup python3 your_script.py > /dev/null 2>&1 &
      
  • 方法 2:使用 Linux 定时任务(crontab)
    • 编写 Shell 脚本

      创建一个 .sh 文件(如 create_files.sh),内容如下:

      #!/bin/bash
      
      # 获取当前时间戳
      timestamp=$(date "+%Y%m%d%H%M%S")
      
      # 创建文件并写入内容
      echo "This file was created at $timestamp" > "$timestamp.txt"
      
      # 输出日志(可选)
      echo "Created file: $timestamp.txt"
      
    • 设置定时任务

      • 赋予脚本可执行权限:

        chmod +x create_files.sh
        
      • 编辑 crontab:

        crontab -e
        
      • 添加定时任务(例如每隔 5 秒执行一次):

        * * * * * /path/to/create_files.sh
        
        • 注意crontab 最小间隔为 1 分钟。若需要更短的间隔(如 5 秒),需结合其他工具(如 watch 或 Python 脚本)。

15.将一个目录打包,生成一个以当前时间命名的压缩包,比如将/etc目录打包为etc_20250623110833.tgz

  • 方法 1:使用 Shell 命令(推荐)
    tar -czvf etc_$(date "+%Y%m%d%H%M%S").tar.gz /etc
    

    解释

    • tar 命令参数:

      • -c:创建新的归档文件。

      • -z:通过 gzip 压缩。

      • -v:显示压缩过程(可选)。

      • -f:指定生成的文件名。

    • date "+%Y%m%d%H%M%S"

      • 生成当前时间戳,格式为 YYYYMMDDHHMMSS(例如 20250716142319)。
    • 文件名拼接:

      • etc_ 是固定前缀,后接时间戳和 .tar.gz 后缀。

    示例输出

    假设当前时间是 2025-07-16 14:26:48,生成的压缩包为:

    etc_20250716142648.tar.gz
    
  • 方法 2:使用 Shell 脚本(可扩展性更强)
    #!/bin/bash
    
    # 设置源目录和目标路径
    SOURCE_DIR="/etc"
    OUTPUT_DIR="/backup"  # 可选:指定输出目录
    
    # 生成时间戳
    TIMESTAMP=$(date "+%Y%m%d%H%M%S")
    
    # 构造压缩包文件名
    OUTPUT_FILE="${OUTPUT_DIR}/etc_${TIMESTAMP}.tar.gz"
    
    # 执行压缩
    tar -czvf "$OUTPUT_FILE" "$SOURCE_DIR"
    

    运行脚本

    • 将脚本保存为 backup_etc.sh

    • 赋予执行权限:

      chmod +x backup_etc.sh
      
    • 运行脚本:

      ./backup_etc.sh
      
  • 注意事项
    • 权限问题:

      /etc是系统目录,普通用户可能没有权限读取所有文件。需要使用sudo提权:

      sudo tar -czvf etc_$(date "+%Y%m%d%H%M%S").tar.gz /etc
      
    • 路径定制:

      • 修改 SOURCE_DIROUTPUT_DIR 可适配其他目录和输出路径。
    • 定时任务(可选):

      • 如果需要定期备份,可通过crontab设置定时任务:

        crontab -e
        # 添加以下内容(每天凌晨 2 点执行)
        0 2 * * * /path/to/backup_etc.sh
        
  • 验证压缩包
    • 查看压缩包内容:

      tar -tzvf etc_20250716142319.tar.gz
      
    • 解压测试:

      tar -xzvf etc_20250716142319.tar.gz
      

16.如何查看进程的当前工作目录

首先用ps-f查看在运行进程的PID

  • 方法一:使用 pwdx 命令

    pwdx 是 Linux 中最简单的工具,用于显示指定进程的当前工作目录。

    # 语法:pwdx <PID>
    # 示例:查看进程 ID 为 1410 的进程的当前工作目录
    pwdx 1410
    

    输出示例

    1410: /home/longlijisi
    
  • 方法二:通过 /proc 文件系统

    Linux 的 /proc 文件系统提供了每个进程的详细信息,包括工作目录。

    # 查看进程 ID 为 1410 的进程的工作目录
    ls -l /proc/1410/cwd
    

    输出示例

    lrwxrwxrwx 1 longlijisi longlijisi 0 Jul 16 14:33 /proc/1410/cwd -> /home/longlijisi
    
  • 方法三:使用 ps 命令

    ps 命令可以结合 pwdargs 字段查看进程的工作目录。

    # 查看进程 ID 为 1234 的进程的工作目录
    ps -p 1234 -o comm,cmd,cwd
    

    输出示例

      CMD                             CMDLINE                              CWD
      python                          /usr/bin/python /home/user/script.py /home/user/project
    
  • 方法四:使用 lsof 命令

    lsof 可以列出进程打开的文件和目录信息。

    # 查看进程 ID 为 1234 的进程的当前工作目录
    lsof -p 1234 | grep cwd
    

    输出示例

    bash    1410 longlijisi  cwd    DIR    8,2     4096 2359298 /home/longlijisi
    
  • 方法五:使用 readlink 命令

    结合 /proc/<PID>/cwd 使用 readlink 获取实际路径。

    # 查看进程 ID 为 1410 的进程的工作目录
    readlink -f /proc/1410/cwd
    

    输出示例

    /home/longlijisi
    

17.如何查看某个端口被哪个进程占用

  • 查看端口使用情况
    • 方法一:使用 ss 命令(推荐)

      # 查看所有监听中的 TCP/UDP 端口及进程信息
      sudo ss -tulnp
      

      输出示例:

      在这里插入图片描述

    • 参数说明:

      • -t:TCP 端口。
      • -u:UDP 端口。
      • -l:仅显示监听状态(LISTEN)的端口。
      • -n:以数字形式显示地址和端口。
      • -p:显示进程信息(需 root 权限)。
    • 方法二:使用 netstat 命令(旧版工具)

      # 查看所有监听中的 TCP/UDP 端口及进程信息
      sudo netstat -tulnp
      

      输出示例:

      在这里插入图片描述

    • 方法三:使用 lsof 命令

      # 查看特定端口的占用情况(例如 68)
      sudo lsof -i :68
      
      # 输出:
      COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      systemd-n 894 systemd-network   17u  IPv4  52570      0t0  UDP longlijisi:bootpc 
      
  • 查看某个端口被哪个进程占用
    • 方法一:结合 ssnetstat 过滤端口

      # 查看 8080 端口的占用情况
      sudo ss -tulnp | grep :8080
      # 或
      sudo netstat -tulnp | grep :8080
      
    • 方法二:使用 lsof 直接定位

      # 查看 8080 端口的占用进程
      sudo lsof -i :8080
      
    • 方法三:使用 fuser 命令

      # 查看 8080 端口的占用进程 ID (PID)
      sudo fuser 8080/tcp
      
    • 方法四:通过 pssystemctl 查看服务

      如果进程是由 systemd 管理的服务:

      # 通过 PID 查看服务名称
      systemctl status <PID>
      # 或直接显示进程名
      ps -p <PID> -o comm=
      

18.如何查看某个文件被哪个进程占用

  • 查看进程的使用情况
    • 方法一:使用 ps 命令

      # 查看所有进程的资源占用
      ps aux
      
      • 关键字段:
        • %CPU:CPU 使用率。
        • %MEM:内存使用率。
        • COMMAND:进程名称。
    • 方法二:使用 tophtop

      # 实时动态查看进程资源占用(按内存排序)
      top
      # 按内存排序:按 `Shift + M`
      # 按 CPU 排序:按 `Shift + P`
      
      • 推荐使用 htop(需安装):

        sudo apt install htop  # Debian/Ubuntu
        sudo yum install htop  # CentOS/RHEL
        htop
        
  • 查看某个文件被哪个进程占用
    • 方法一:使用 lsof 命令

      # 查看特定文件被哪个进程占用(需 root 权限)
      sudo lsof <文件路径>
      
      • 示例:

        sudo lsof /var/log/syslog
        
      • 输出示例:

        COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
        rsyslogd 922 syslog    7w   REG    8,2  1692352 1969673 /var/log/syslog
        
    • 方法二:递归查看目录中的文件占用

      # 查看指定目录中被占用的文件
      sudo lsof +D <目录路径>
      
    • 方法三:使用 fuser 命令

      # 查看占用文件的进程 ID (PID)
      sudo fuser <文件路径>
      

19.lsof有哪些功能

lsofList Open Files)是一个功能强大的命令行工具,主要用于查看系统中当前被打开的文件及其关联的进程信息。在 Linux 系统中,"一切皆文件"的理念使得 lsof 能够帮助用户分析文件、网络连接、设备、管道等资源的使用情况。

以下是 lsof 的主要功能和用法总结:

  • 查看系统中所有打开的文件
    • 功能:列出当前所有进程打开的文件(包括普通文件、目录、设备、网络连接等)。

    • 命令:

      lsof
      
    • 特点:

      • 输出包含进程名称(COMMAND)、进程 ID(PID)、用户(USER)、文件描述符(FD)、文件类型(TYPE)、文件路径(NAME)等信息。
      • 默认需要 root 权限 或使用 sudo
  • 根据文件名查找占用该文件的进程
    • 功能:定位某个文件被哪些进程占用。

    • 命令:

      lsof <文件路径>
      
    • 示例:

      lsof /var/log/syslog
      
      # 输出:
      COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
      rsyslogd 1234 root   12w  REG   8,1     1234  123456 /var/log/syslog
      
  • 根据进程名/进程 ID 查看其打开的文件
    • 功能:查看某个进程(或进程名)打开了哪些文件。

    • 命令:

      # 根据进程名
      lsof -c <进程名>
      # 根据进程 ID
      lsof -p <PID>
      
    • 示例:

      lsof -c nginx       # 查看所有 nginx 进程打开的文件
      lsof -p 1234        # 查看 PID 为 1234 的进程打开的文件
      
  • 查看网络连接及占用端口的进程
    • 功能:列出所有网络连接(TCP/UDP)或特定端口的占用情况。

    • 命令:

      # 查看所有网络连接
      lsof -i
      # 查看特定端口
      lsof -i :<端口号>
      
    • 示例:

      lsof -i :8080       # 查看 8080 端口的占用情况
      lsof -i TCP:80      # 查看 TCP 80 端口的连接
      
  • 查找被删除但仍被占用的文件(僵尸文件)
    • 功能:定位已删除但仍在被进程占用的文件(这些文件会占用磁盘空间)。

    • 命令:

      lsof | grep deleted
      
    • 示例输出:

      COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
      java      1234 user   10r  REG   0,19    123456   78901 /tmp/example.txt (deleted)
      
  • 递归查看目录下被打开的文件
    • 功能:查找某个目录及其子目录中被打开的文件。

    • 命令:

      # 非递归
      lsof +d <目录路径>
      # 递归
      lsof +D <目录路径>
      
    • 示例:

      lsof +D /var/log    # 查看 /var/log 目录下所有被打开的文件
      
  • 按用户过滤打开的文件
    • 功能:查看某个用户打开的所有文件。

    • 命令:

      lsof -u <用户名>
      
    • 示例:

      lsof -u root        # 查看 root 用户打开的文
      
  • 组合筛选条件
    • 功能:通过 -a 参数组合多个筛选条件。

    • 示例:

      lsof -u root -i :80  # 查看 root 用户打开的 80 端口连接
      

  • 输出指定列信息
    • 功能:自定义输出字段,减少冗余信息。

    • 命令:

      lsof -F [字段]       # 例如 -F pnc (输出 PID、进程名、命令)
      
    • 字段说明:

      • p:进程 ID(PID)
      • n:进程名(COMMAND)
      • c:命令名
      • f:文件路径
      • d:文件描述符(FD)
  • 查看设备文件:
    lsof /dev/sda1      # 查看挂载在 /dev/sda1 上的文件
    
  • 查看内存映射文件:
    lsof -m             # 查看内存映射的文件
    
  • 查看 Unix 域套接字:
    lsof -U             # 查看 Unix 域套接字
    

20./proc目录有什么作用

在 Linux 系统中,/proc 目录是一个 虚拟文件系统(procfs),它动态地将系统内核和进程的状态信息以文件的形式呈现给用户。

虽然 /proc 看起来像一个普通目录,但它实际上 不占用磁盘空间,而是运行时由内核动态生成的,用于提供系统和进程的实时信息。

  • 核心作用

    (1)提供系统和进程的实时信息

    • 系统状态:包括 CPU、内存、磁盘、网络等硬件和资源的使用情况。
    • 进程信息:每个运行中的进程在 /proc 下都有一个以其 PID(进程 ID)命名的子目录,包含该进程的详细状态、资源占用、打开的文件、环境变量等。

    (2)内核参数的动态调整

    • 通过/proc/sys目录,用户可以读取或修改内核参数(需谨慎操作,部分参数仅允许 root 用户修改)。

      • 示例:

        # 查看网络参数
        cat /proc/sys/net/ipv4/ip_local_port_range
        # 修改参数(需 root 权限)
        echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
        

    (3)调试和监控工具的底层支持

    • 工具如 pstophtoplsof 等都依赖 /proc 提供的数据。
    • 系统日志工具(如 dmesg)和硬件监控工具(如 lspci)也通过 /proc 获取信息。
  • 主要功能分类
    (1)进程信息(/proc/[PID])

    每个运行中的进程在 /proc 中对应一个以 PID 命名的子目录(如 /proc/1234),包含以下关键文件:

    • /proc/[PID]/status:进程的详细状态(如状态、父进程 ID、内存占用等)。
    • /proc/[PID]/cmdline:进程启动时的命令行参数。
    • /proc/[PID]/environ:进程的环境变量(以空字符分隔)。
    • /proc/[PID]/fd:进程打开的文件描述符(如 /proc/[PID]/fd/0 表示标准输入)。
    • /proc/[PID]/maps:进程的内存映射信息(如共享库、堆栈地址)。
    • /proc/[PID]/exe:指向进程可执行文件的符号链接。
    (2)系统全局信息
    • /proc/cpuinfo:CPU 的详细信息(型号、核心数、频率、缓存等)。
    • /proc/meminfo:内存使用情况(总内存、空闲内存、缓存等)。
    • /proc/version:内核版本和编译信息。
    • /proc/loadavg:系统负载(1 分钟、5 分钟、15 分钟的平均负载)。
    • /proc/interrupts:中断请求(IRQ)的统计信息。
    • /proc/ioports:I/O 端口的分配情况。
    • /proc/uptime:系统运行时间(开机时长)。
    • /proc/partitions:磁盘分区信息。
    • /proc/net/dev:网络接口的流量统计(发送/接收数据包数)。
    (3)设备和硬件信息
    • /proc/driver:驱动程序的状态。
    • /proc/ide:IDE 设备信息。
    • /proc/scsi:SCSI 设备信息。
    • /proc/bus:总线信息(如 PCI、USB)。
    • /proc/pci:PCI 设备列表。
    (4)内核和系统配置
    • /proc/config.gz:内核编译时的配置文件(如果启用 CONFIG_IKCONFIG)。
    • /proc/sys:内核参数(如网络、内存、文件系统等)。
    • /proc/kcore:系统物理内存的映像(核心文件格式,仅用于调试)。
  • 使用场景
    (1)监控系统资源
    • 查看 CPU 使用率:

      cat /proc/stat
      
    • 查看内存使用情况:

      cat /proc/meminfo
      
    (2)调试进程问题
    • 查看某个进程的内存映射:

      cat /proc/1234/maps
      
    • 查看进程打开的文件:

      ls /proc/1234/fd
      
    (3)网络诊断
    • 查看网络接口流量:

      cat /proc/net/dev
      
    • 查看 TCP 连接状态:

      cat /proc/net/tcp
      
    (4)硬件信息查询
    • 查看 CPU 信息:

      cat /proc/cpuinfo
      
    • 查看磁盘分区:

      cat /proc/partitions
      
  • 注意事项
    1. 动态性:
      • /proc 中的文件是动态生成的,实时反映系统状态。例如,当一个进程结束时,其对应的 /proc/[PID] 目录会立即消失。
    2. 权限限制:
      • 某些敏感文件(如 /proc/kcore/proc/sys 下的参数)需要 root 权限才能访问或修改。
    3. 不可修改性:
      • 大多数文件是只读的,直接修改可能导致系统不稳定。例如,/proc/meminfo 是只读的,不能通过写入文件来修改内存参数。
    4. 僵尸进程:
      • 如果一个进程成为僵尸进程(Zombie),其 /proc/[PID] 目录可能会被删除,但进程信息仍保留在系统中,直到父进程调用 wait()

21.apt如何卸载软件包,如何查找软件包,如何安装指定版本的软件包,如何锁定软件包版本(不会自动升级)

  • 卸载软件包
    (1)基本卸载
    • 命令:

      sudo apt remove <软件包名称>
      
    • 作用:卸载指定软件包,但保留配置文件

    • 示例:

      sudo apt remove nginx
      
    (2)彻底卸载(删除配置文件)
    • 命令:

      sudo apt purge <软件包名称>
      
    • 作用:卸载软件包并删除其配置文件

    • 示例:

      sudo apt purge nginx
      
    (3)清理无用依赖
    • 命令:

      sudo apt autoremove
      
    • 作用:删除因依赖关系自动安装但已不再需要的软件包。

  • 查找软件包
    (1)搜索软件包
    • 命令:

      apt search <关键词>
      
    • 作用:根据名称或描述搜索软件包。

    • 示例:

      apt search netstat
      
    (2)查看软件包详细信息
    • 命令:

      apt show <软件包名称>
      
    • 作用:显示软件包的详细信息(版本、依赖、描述等)。

    • 示例:

      apt show nginx
      
    (3)列出已安装的软件包
    • 命令:

      apt list --installed
      
    • 作用:列出当前系统中所有已安装的软件包。

    • 示例:

      apt list --installed | grep firefox
      
  • 安装指定版本的软件包
    步骤 1:查看可用版本
    • 命令:

      apt-cache policy <软件包名称>
      
    • 作用:列出软件包的所有可用版本及来源。

    • 示例:

      apt-cache policy nginx
      

      输出示例:

      nginx:
        Installed: (none)
        Candidate: 1.18.0-0ubuntu1
        Version table:
           1.18.0-0ubuntu1 500
             500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
           1.17.10-0ubuntu1 500
             500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
      
    步骤 2:安装指定版本
    • 命令:

      sudo apt install <软件包名称>=<版本号>
      
    • 注意:版本号必须与 apt-cache policy 中列出的版本完全一致。

    • 示例:

      sudo apt install nginx=1.17.10-0ubuntu1
      
  • 锁定软件包版本(防止自动升级)
    (1)锁定版本
    • 命令:

      sudo apt-mark hold <软件包名称>
      
    • 作用:标记软件包为“锁定”,防止其在系统升级时被自动更新。

    • 示例:

      sudo apt-mark hold nginx
      
    (2)查看锁定状态
    • 命令:

      apt-mark showhold
      
    • 作用:列出当前被锁定的软件包。

    (3)解除锁定
    • 命令:

      sudo apt-mark unhold <软件包名称>
      
    • 作用:取消软件包的锁定状态,允许其正常升级。

    • 示例:

      sudo apt-mark unhold nginx
      

    sudo apt autoremove

    
    - **作用**:删除因依赖关系自动安装但已不再需要的软件包。
    
    
  • 查找软件包
    (1)搜索软件包
    • 命令:

      apt search <关键词>
      
    • 作用:根据名称或描述搜索软件包。

    • 示例:

      apt search netstat
      
    (2)查看软件包详细信息
    • 命令:

      apt show <软件包名称>
      
    • 作用:显示软件包的详细信息(版本、依赖、描述等)。

    • 示例:

      apt show nginx
      
    (3)列出已安装的软件包
    • 命令:

      apt list --installed
      
    • 作用:列出当前系统中所有已安装的软件包。

    • 示例:

      apt list --installed | grep firefox
      
  • 安装指定版本的软件包
    步骤 1:查看可用版本
    • 命令:

      apt-cache policy <软件包名称>
      
    • 作用:列出软件包的所有可用版本及来源。

    • 示例:

      apt-cache policy nginx
      

      输出示例:

      nginx:
        Installed: (none)
        Candidate: 1.18.0-0ubuntu1
        Version table:
           1.18.0-0ubuntu1 500
             500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
           1.17.10-0ubuntu1 500
             500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
      
    步骤 2:安装指定版本
    • 命令:

      sudo apt install <软件包名称>=<版本号>
      
    • 注意:版本号必须与 apt-cache policy 中列出的版本完全一致。

    • 示例:

      sudo apt install nginx=1.17.10-0ubuntu1
      
  • 锁定软件包版本(防止自动升级)
    (1)锁定版本
    • 命令:

      sudo apt-mark hold <软件包名称>
      
    • 作用:标记软件包为“锁定”,防止其在系统升级时被自动更新。

    • 示例:

      sudo apt-mark hold nginx
      
    (2)查看锁定状态
    • 命令:

      apt-mark showhold
      
    • 作用:列出当前被锁定的软件包。

    (3)解除锁定
    • 命令:

      sudo apt-mark unhold <软件包名称>
      
    • 作用:取消软件包的锁定状态,允许其正常升级。

    • 示例:

      sudo apt-mark unhold nginx
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值