这几天学校里面课设要用到，安装完之后启动路由器一直报错，到处搜集解决方案，一个能用的没有。于是问了一下老师，提供了一个方案，使用之后直接解决了问题，所以发出来给有同样需要的朋友参考，就别看那些复制粘贴的文章了，浪费时间。还是得说一句这软件环境配置真费事，有时候我重装软件之后，同样的报错同样的方法尝试但是无法解决问题，如果以下几种都没法解决那我建议换台电脑试试🤪下面是文档内容，很详细，一般你都用到这个软件了不可能一点计算机基础没有：在华为eNSP安装后，随便拖拽个AP或者AC出来运行，如图所示：若启动后出现错误“40”、“41”，则表示设备不能正常运行，如图所示：40报错具体解决方法参考如下：第一步，先检查VirtualBox安装目录。· 检查VirtualBox安装目录是否存在中文字符· 如存在，修改VirtualBox安装目录为英文字符第二步，关闭“基于虚拟化的安全性”，一共有四种方法，可以顺序依次尝试。方法一：命令行关闭1）按Win键输入“cmd”后，右键点击“命令提示符”选择“以管理员身份运行”。​​2）输入“bcdedit”，如图所示：​​弹出信息的最后，找到“hypervisorlaunchtype“设置如果为”off“，则代表正常不用管如果为“on”或者“auto”，则需要修改成为“off”3）输入“bcdedit /set hypervisorlaunchtype off ”，回车后重启系统。（hypervisorlaunchtype可复制，点击鼠标右键黏贴）最后，重新打开eNSP，启动AC、AP验证是否可正常运行！若还是运行设备报错“40”，则进入“计算机”，输入msinfo32，查看系统信息​​找到“基于虚拟化的安全性”，若状态为“开启”或“使用中”，则表示并未真正关闭，尝试方法二，方法三，只有该项关闭才能彻底解决“40”错误问题。​​方法二：组策略关闭（家庭版系统无效）1）Win+R运行——输入gpedit.msc并回车 打开组策略。2）找到“计算机配置——管理模板——系统——Device Guard”右侧的“打开基于虚拟化的安全”策略，将其修改为“已禁用”。3）查看选项状态。方法三：注册表关闭注意：该方法会导致重启电脑后PIN失效，即开机密码自动重置，重新设置时需要提供Microsoft账号（一般是QQ邮箱）与密码，建议先确定你的邮箱与密码后在尝试该方法。1） Win+R运行——输入regedit——回车 打开注册表。2）找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard”目录右侧的"EnableVirtualizationBasedSecurity"，（如果存在，我win11没找到可能是已经关闭的缘故），选中文件，右键点击“修改”，将其DWORD值修改为0。2） 重启电脑，重新打开eNSP，启动AC、AP验证是否可正常运行！方法四：PowerShell脚本关闭（需要win10系统版本1607以上）下载脚本文件并解压缩。链接：https://www.microsoft.com/en-us/download/details.aspx?id=53337​以管理员模式打开命令行——输入set-ExecutionPolicy RemoteSigned并回车——输入Y并回车。​​复制刚刚解压缩的脚本路径。​​在管理员模式的命令行中输入cd C:\Users\Administrator\Desktop\dgreadiness_v3.6（命令行右键粘贴）并回车——输入dir并回车查看当前目录内容是否为脚本目录。​​输入.\DG_Readiness_Tool_v3.6.ps1 -Disable（注意前面有个点）并回车——等待运行完成后重启电脑——按F3两次，关闭Credential Guard和Device Guard。重启完成后查看选项状态为未启用。 **41报错具体解决方法参考如下：打开Oracle VM VirtualBox，检查右侧是否有设备如果有设备全选=>单击删除=>删除所有文件。完成上述步骤后打开我们的ensp软件且一定要保持界面没有任何一个设备后单击菜单=>工具=>注册设备。3）关闭ensp重新启动 拖动一个AC或者AP出来启动检查是否正常。若还是报40错误，则看上方的“40”错误解决步骤。开启设备后一直显示#####解决方案最直接方法为关闭防火墙的“公用网络”，具体步骤如下：1）按下WIN键盘，输入“防火墙”，搜索选择“windows defender 防火墙”。2）关闭公用网络，点击“确定”。若不想关闭“共用网络”防火墙，则可以将eNSP加入防火墙信任名单：将eNSP加入允许列表，允许专用网络、公用网络访问。若上述2个方法均不行，则尝试Win设置 → 网络和 Internet → 代理 → 自动检测设置（关）、使用设置脚本（关）另外Virtualbox虚拟网卡的IP地址如果表示192.168.56.1，也会导致###问题。解决方法：打开网络与共享中心->更改适配器设置->VIrtualbox Host-only network->IPV4属性->设置为192.168.56.1 , 255.255.255.0。如下图所示：————————————————版权声明：本文为CSDN博主「蒜鸭」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。原文链接：https://blog.csdn.net/m0_69239579/article/details/144949613
2026-01-01T10:11:47.png基本查看VRP系统版本信息dis version查看当前有效配置display current-configuration dis this 查看当前视图配置命名设备sysname HW1保存当前配置save启用/禁用端口在指定接口下 shutdown 关闭端口 undo shutdown 打开端口配置console口交换机密码-----交换机登录默认无密码，为了安全添加认证秘密[SW1]user-interface console 0 进入用户配置console口 [SW1-ui-console0]authentication-mode password 启用密码认证 [SW1-ui-console0]set authentication password cipher 123456 配置密码为123456 [SW1-ui-console0]取消终端提示信息undo terminal monitor更改终端闲时会话时间user-interface console 0 idel-timeout 1440 将闲时超时设为1440分钟重启设备在用户视图下执行reboot 提示是否保存 提示是否重启恢复出厂设置在用户视图下执行reset saved-configuration 提示是否恢复，选择Y交换/交换机交换机能够根据以太网中的目标MAC地址智能的转发数据，因此交换机工作在数据链路层交换机可以分割冲突与，实现全双工通信交换机转发数据，主要依靠的核心工作表：MAC地址表MAC表：交换机发送广播给每个接口，每个接口返回MAC地址，交换机进行记录配置交换机远程登录-----------远程管理需要通过ip地址访问网络设备交换机的接口，默认无法配置ip地址需要使用虚拟接口vlan1[SW1]interface Vlanif 1 [SW1-Vlanif1]ip address 192.168.1.251 24配置交换机远程登录密码------远程管理需要配置VTY接口VTY是虚拟终端，是一种网络设备远程连接的方式vty 0 4表示可以同时打开5个会话[SW1]user-interface vty 0 4 表示可以同时打开5个会话 [SW1-ui-vty0-4]authentication-mode password 启用密码验证 [SW1-ui-vty0-4]set authentication password cipher 123456 设置登录密码 [SW1-ui-vty0-4]user privilege level 3 设置权限级别，默认0配置好后，用另外一台配置了同网段ip的路由器进行telnet 192.168.1.251 测试VLAN👉 商用交换机不是“透明二层转发器”👉而是 “基于 VLAN 实例的交换架构”**Trunk 端口只决定： “这个 VLAN 能不能走这条口”****VLAN 实例决定： “这个 VLAN 在不在这台交换机的世界里”**广播域接收同一广播消息的节点的集合，比如一个节点发送MAC地址的广播报文，其余能收到这条广播报文的节点的集合，就是一个广播域，通常一个ip网段就是一个广播域一个广播域中的网络节点越多，广播报文也必然会越多当广播报文越多，当前广播域的带宽占用就越多，网络不可用风险增大当广播报文越多，当前广播域中的设备资源占用高，转发数据速度慢所以当一个广播域中的节点过多，网络的稳定性和安全性会越低-vlan虚拟局域网，将一个物理的局域网LAN，在逻辑上划分多个虚拟局域网VLAN的通信技术交换机分割了冲突域，但是不能分割广播域随着交换机端口数量的增多，网络中广播增多，降低了网络的效率为了分割广播域，引入了VLANvlan的划分种类基于端口划分的静态VLAN和基于MAC地址划分的动态VLANPVIDport default vlan id，也成缺省VLAN表示接口所属的vlan每个接口都有一个PVID交换机中所有接口的PVID默认都是VLAN1，但是可以手动修改创建VLAN创建单个vlanvlan 10创建多个vlanvlan batch 10 15 20 创建多个不连续的vlan vlan batch 10 to 20 创建多个连续的vlan删除vlanundo vlan 10 undo vlan batch 10 15 20 undo vlan batch 10 to 20Access端口通常用于连接终端设备（主机、服务器），同时只能属于一个VLAN，发送的数据，没有vlan标签，交换机接收数据时用端口PVID的数据作为标签将端口加入VLAN创建vlan设置接口模式为Access将接口接入vlanvlan 2 创建vlan int g0/0/1 port link-type access 设置接口模式为Access port default vlan 2 将接口加入vlan批量将端口加入vlan首先将端口加入端口组，然后将端口组加入vlanport-group 1 group-member G0/0/1 to G0/0/10 port link-type access port default vlan 2Trunk端口如何实现交换机之间的相同VLAN通信两个交换机下面各接了很多不同vlan的终端，交换机之间只有一条链路，那么来自多个vlan的数据如何标识？交换机为每个去往其他交换机的数据帧打上vlan标识，Trunk链路用于连接交换机设备发送时：根据帧在交换机内部的目标VLAN ID做决定。如果目标VLAN ID等于端口的PVID，则剥离Tag发送；如果不等于，则带Tag发送。默认vlan1端口PVID是1，则去掉vlan tag标签发送，如果是vlan10，则直接发送接收时：有Tag的帧，根据允许列表决定放行/丢弃，Tag不动；无Tag的帧，打上PVID的Tag，再根据允许列表决定放行/丢弃。如果接收到Vlan10，查询允许列表，若允许vlan10不动，若无Tag标签，则打上默认vlan1 tag将端口加入Trunkint g0/0/1 port link-type trunk 设置接口模式为trunk port trunk allow-pass vlan 10 20 配置允许通过的vlan清除端口VLAN配置清除access端口int g0/0/1 undo port default vlan清除trunk端口/转换为access端口int g0/0/1 undo port trunk allow-pass vlan all 先将trunk端口的vlan取消掉 port trunk pvid vlan 1 / port trunk allow-pass vlan 1 上一步取消掉了所有vlan，这里添加默认vlan1 port link-type access port default vlan 10Mux VLANMUX VLAN提供了一种通过VLAN进行网络资源控制的机制，通过MUX VLAN提供二层流量隔离的机制，可以实现企业内部员工之间相互通信，而企业外来访客之间的互访是隔离的。通过MUX VLAN技术区分大量的用户时，可以节省大量的VLAN id，同时也降低了后期网络的管理难度VLAN角色类型主VLAN​ 其中包含的是不同类型的辅助vlan，属于主vlan的端口，可以与任何辅助vlan的端口互通辅助VLAN：隔离VLAN + 组VLAN​ 隔离vlan：同一个隔离vlan的端口之间，不能互通​ 组vlan：同一个组vlan的端口之间可以互通，不同的组vlan之间的端口，不可以互动同一个主vlan下面，最多只能包含一个隔离vlan主VLAN：可以访问所有从VLAN 隔离VLAN：只能访问主VLAN，不能访问其他任何VLAN 组VLAN：组内互通 + 能访问主VLAN，但不能访问其他组STP历史：PC之间的互通链路仅仅存在一个，任何一个设备或链路出现问题，PC之间都会无法通信，可以增加冗余/备份设备/链路，但是三个及以上交换机相连，数据环路导致的广播风暴：每个链路都是互通的，交换机收到无法识别的数据帧后进行广播，形成广播风暴。广播帧在交换机之间一直循环下去，从而消耗系统资源，降低传输质量，广播帧的不断增多，还会导致设备宕机重启。STP 生成树协议逻辑上断开环路，防止广播风暴的产生，即阻塞某些端口，破除环路，当主线路故障，阻塞端口被激活；主线路恢复，备份线路再次被阻塞。工作原理步骤一：确定交换机角色，根交换机、非根交换机步骤二：确定端口角色，根端口、指定端口、非指定端口步骤三：确定端口状态，禁用：接口没有启动STP，或者接口处于关闭状态​ 侦听：正在比较STP报文，确定交换机端口角色​ 学习：正在学习MAC地址表​ 转发：可以正常接收和发送用户数据包​ 阻塞：阻塞端口，不能转发用户数据包 根交换机：通过比较每个交换机的BID（网桥ID+基本MAC地址），来选举根交换机：BID越小，越容易成为根交换机，BID取值范围：0-65535（可手动设置），缺省值32768，每次+-4096，如果BID相同则比较交换机的基本MAC，MAC最小的为根交换机根端口：在每一个非根交换机上，有且只有一个（一个交换机只有一个根端口）​ 首先比较端口到根交换机的开销，越小越好链路带宽成本值4Mb/s25210Mb/s10016Mb/s62100Mb/s191Gb/s410Gb/s2​ 其次比较对端交换机的BID，越小越好（BID相同比较基本MAC）​ 最后比较端口PID，越小越好；由两部分组成，首先比较的是优先级（0-240）步长16，默认128，另一个是端口号，如果优先级相同，则比较端口号，端口号越小优先越高指定端口：每一个链路上选出一个指定端口，并且只能是一个（每条链路有一个指定端口）根交换机的所有端口都是指定端口根端口的对端一定是指定端口BPDU转发端口到根交换机的路径成本最小本端的网桥ID（BID）最小非指定端口：剩余端口成为备用端口，将他们阻塞端口状态：ALTE 备份路径 ROOT根端口 DESI指定端口dis bridge mac-address 查看交换机网桥mac地址 display stp 查看交换机stp配置 display stp brief 查看端口状态 stp mode stp设置stp为stp stp disable //关闭stp协议 stp enable //开启stp协议 默认开启 配置交换机为根交换机 stp priority 0 提高优先级 0-61440 值必须是4096的倍数MSTP解决链路备份和广播风暴的同时，还要走最优路径防止环路产生广播风暴每个交换机创建相同的VLAN交换机之间的链路配置为Trunk，允许所有的VLAN通过交换机启用STP协议，配置模式为MSTP交换机指定MSTP的区 域名、实例和vlan的对应关系交换机上激活MSTP的配置为不同的生成树配置优先级（主、备）display stp region-configuration 查看所有实例的VLAN映射配置 display stp brief 查看实例对应的接口 stp mode mstp //修改模式为MSTP（默认MSTP） stp region-configuration //进去stp的配置区域 region-name hcie //设置区域名为hcie（名字可自定义，但环路所有交换机名字需一致） instance 10 vlan 10 //创建实例10并绑定vlan 10 instance 20 vlan 20 //创建实例20并绑定vlan 20 active region-configuration //激活配置区域 quit //返回 stp instance 1(实例) priority 0(4096倍数) display stp instance 20 brief 查询单个实例stp接口信息Eth-Trunk链路聚合技术，可以把多个独立的物理接口绑定在一起，作为一个大带宽的逻辑端口使用Eth-Trunk可以增加设备之间的互联带宽，提高设备之间的可靠性，对流量负载均衡，提高链路利用率Eth-Trunk配置流程创建Eth-Trunk -- 选择链路聚合模式 -- 加入成员接口Eth-Trunk聚合模式静态配置模式当两台设备中至少有一台不支持LACP协议时，可使用手工负载分担模式的Eth-Trunk，增加设备间的带宽及可靠性，在手工负载分担模式下，加入Eth-Trunk的链路都进行数据转发[Huawei]interface Eth-Trunk 1 创建并进入Eth-Trunk [Huawei-Eth-Trunk1]mode manual load-balance 配置Eth-Trunk为手动模式 [Huawei-Eth-Trunk1]trunkport g0/0/3 加入成员端口 [Huawei-Eth-Trunk1]trunkport g0/0/4 加入成员端口 [Huawei-Eth-Trunk1]port link-type trunk 配置Eth-Trunk链路类型为trunk [Huawei-Eth-Trunk1]port trunk allow-pass vlan all 配置trunk链路允许所有vlan [Huawei]dis eth-trunk 查看配置 动态配置模式LACP模式也成为了M:N模式，其中M条链路处于活动状态转发数据，N条链路处于非活动状态作为备份链路。下图设置的活跃链路数为2，即2条链路处于转发状态，1条链路处于备份状态，不转发数据。只有当活跃的链路出现故障时，备份链路才进行转发。interface eth-trunk 1 mode lacp-static # 设置为静态LACP模式 trunkport gi0/0/1 # 添加三个成员端口 trunkport gi0/0/2 trunkport gi0/0/3 quit lacp priority 100 # 设置系统LACP优先级为100（更优） 这条只用主交换机配置 display eth-trunk # 查看聚合组状态三条链路（假设都是千兆）都处于平等候选状态。由于没有设置max active-linknumber，默认是8，意味着三条链路都能同时成为活动链路（全活模式）。系统优先级设为100（优于默认32768），在两端协商时，本端交换机将作为"决策者"，决定哪些端口成为活动端口。interface eth-trunk 1 max active-linknumber 2 # 关键！设置最大活跃链路数为2 lacp preempt enable # 启用抢占功能 两个交换机都需要配置配置后的逻辑架构：max active-linknumber 2：三条链路中最多只能有2条同时处于活动状态。第三条链路将自动成为备份链路（非活动状态）。哪些链路是活动链路？ 由LACP优先级决定：端口优先级高的优先成为活动链路（默认端口优先级相同，则比较端口号，号小的优先）。在本例中，假设端口优先级相同，则gi0/0/1和gi0/0/2会成为活动链路，gi0/0/3成为备份。lacp preempt enable：作用：当活动链路故障恢复后，如果它的优先级高于当前某条活动链路，它会自动抢占回活动位置。典型场景：初始：gi0/0/1和gi0/0/2活动，gi0/0/3备份。gi0/0/1故障 → gi0/0/3自动接替成为活动链路（与gi0/0/2一起）。gi0/0/1恢复 → 由于启用抢占，gi0/0/1会替换掉gi0/0/3，恢复与gi0/0/2的原始活动组合。注意要点抢占延迟：配置中未设置lacp preempt delay，意味着使用默认延迟0秒，链路恢复后会立即抢占。在生产环境中，建议设置一个延迟（如5-10秒），避免链路抖动导致频繁切换。bashlacp preempt delay 10 # 延迟10秒后抢占优先级配置：为了更精确地控制哪些链路优先活动，通常会配置端口优先级：interface gi0/0/1 lacp priority 100 # 数值越小优先级越高对端配置：此配置仅为本端，对端交换机也必须配置相应的LACP聚合组，且建议配置相同的max active-linknumber值，否则可能协商失败。路由/路由器负责在不同网络之间转发数据的设备路由器决定到达目标的路径路由器也为直连网络的主机充当“网关”角色路由器是实现网络互联的最核心设备路由器工作原理每台路由器维护一份路由表，记录着要访问XX网络应该从哪一个接口发送以及可达到的下一个路由器（或主机）的地址工作流程：检查数据包的目标ip地址，在路由表中查找到目标的路线，按照最佳路线转发数据包配置接口地址int g0/0/1 ip address 192.168.1.254 24查看路由表display ip routing-table配置路由器远程登录-----------int g0/0/0 ip add 192.168.1.254 24配置路由器远程登录密码------user-interface vty 0 4 表示可以同时打开5个会话 authentication-mode password 启用密码验证 set authentication password cipher 123456 设置登录密码 user privilege level 3 设置权限级别，默认0
📘 英语语法笔记（完整保留版）一、代词系统1. 主格、宾格、所有格中文意思主格 (作主语)宾格 (作宾语)所有格 (表示“的”)我Imemy你/你们youyouyour他hehimhis她sheherher它ititits我们weusour他们/她们/它们theythemtheir指示代词：这个（单数）：this这些（复数）：these那个（单数）：that那些（复数）：those那里：there一个简单的比喻： 想象“我送给她一本书”主格 (我)：动作的发起者宾格 (她)：动作的承受者所有格 (我的)：东西的归属者详细解释1. 主格 - 动作的“发起者” (主语)在句子中做主语，是动作的执行者通常位于句首，动词之前例句：I love you. She is a teacher.2. 宾格 - 动作的“承受者” (宾语)在句子中做宾语，是动作的承受对象通常位于动词之后，或介词之后例句：I love you.（动词后）This book is for us.（介词后）3. 所有格 - 事物的“主人” (表示“的”)表示所属关系，意思是“谁的”永远放在名词前面，修饰那个名词例句：This is my book. Her mother is kind.终极判断方法：主格：谁在做动作？ → She loves him.宾格：动作作用于谁？ → She loves him.所有格：谁的东西？ → She loves his dog.注意： it 可替代物体、时间、天气等二、动词系统英语动词用法核心规则一、Be动词规则主语类型动词形式I (我)amYou (你/你们)areHe/She/It (他/她/它) / 单数名词isWe/They (我们/他们) / 复数名词are总结：看主语选 am, is, are二、实义动词规则（一般现在时）主语类型动词形式示例非三单 (I, You, We, They, 复数名词)动词原形They work here.三单 (He, She, It, 单数名词)动词 + s/esHe works here.“三单”加s的规则：大多数动词：直接加 -s (like → likes)以s, x, sh, ch, o结尾：加 -es (teach → teaches, go → goes)以辅音字母+y结尾：变y为i，再加 -es (study → studies)三、时态系统1. 一般现在时用法： 经常的状态、习惯的动作、客观真理结构：状态：主语 + is/am/are + 表语动作：主语 + 动词（注意三单变化）这里冬天经常是雪天 It's often snowy in winter here.这里冬天经常下雪 It often snow in winter here.2. 现在进行时用法： 表示现在正在进行的动作结构： 主语 + is/am/are + 动词-ing动词-ing构成规则（拼写注意事项）：规则动词原形动词-ing形式说明一般情况look, play, dolooking, playing, doing直接加 -ing以不发音的-e结尾make, write, dancemaking, writing, dancing去 -e，再加 -ing以重读闭音节结尾，且末尾只有一个辅音字母run, sit, swim, putrunning, sitting, swimming, putting双写末尾辅音字母，再加 -ing以 -ie 结尾lie, die, tielying, dying, tying变 -ie 为 -y，再加 -ing以 -c 结尾picnic, panicpicnicking, panicking先在-c后加-k，再加 -ing特别注意： 双写规则关键是“重读闭音节”（辅音+元音+辅音且重读）3. 一般将来时（be going to结构）用法： 表示计划、打算要做的事结构： 主语 + is/am/are + going to + 动词原形注意事项：主 + is/am/are + going to + 动词原型主 + is/am/are + going to + 地点名词主 + is/am/are + going to be + 非动词（形容词、名词等）我打算两点到那：I am going to be there at two.他打算成为一名医生：He is going to be a doctor.口语中 going to 常简化为 gonna /ˈɡənə/疑问句和否定句：疑问：be提前 → Is she going to swim?否定：be + not → She is not going to swim.四、疑问句系统1. 一般疑问句功能： 用于询问“是”或“否”的问题构成： 将 be 动词 (is, am, are) 提前至句首陈述句一般疑问句This is your name.Is this your name?I am great.Am I great?You are my friend.Are you my friend?翻译练习：你是 Sam 吗？ → Are you Sam?这是你的朋友吗？ → Is this your friend?2. 特殊疑问句4.1 What... (什么)结构1： 特殊疑问词 + be 动词 + 名词/代词/其他你的工作是什么？ → What is your job?你的车牌号是什么？ → What is your car number?结构2： 特殊疑问词 + 名词 + be 动词 + 主语What color is your umbrella?（你的雨伞是什么颜色？）What make is your car?（你的车是什么牌子？）What time is it?（几点了？）What nationality are you?（你是什么国籍？）注意： 只有nationality可以两种结构互换，其他三个(color/make/time)只能用第二种结构4.2 How... (怎么样，如何)基本结构： 特殊疑问词 + be 动词 + 名词/代词/其他How are you?（你好吗？）How is your uncle?（你的叔叔怎么样？）How to + 动词？ (如何做...?)How to open it?（如何打开它？）How to use it?（如何使用它？）问候与回应：问： How are you (today)? / How are you doing today?答： Fine. Thank you, and you? / Great. / Not bad. / Very bad.4.3 Whose... (谁的)两种结构都可以用：结构1： 特殊疑问词 + 名词 + be 动词 + ...Whose shirt is that?（那是谁的衬衫？）结构2： 特殊疑问词 + be 动词 + 名词Whose is that shirt?（那个衬衫是谁的？）4.4 Who... (谁)只能使用： 特殊疑问词 + be动词 + 名词Who is this man?（这人是谁？）Who are these men?（这些人是谁？）4.5 Which... (哪一个，哪一些)Which + 单数名词：表示哪个Which + 复数名词：表示哪些两种结构都可以用：Which is your car?（哪一辆是你的车？）Which car is yours?（哪一辆车是你的？）4.6 Where... (哪里)结构： 特殊疑问词 + be 动词 + 名词Where are you?（你在哪？）Where is your mother?（你妈妈在哪？）4.7 Why... (为什么)Why do you want to come to China?（你为什么想来中国？）五、否定句系统功能： 表达否定构成： be 动词 + not陈述句否定句缩写形式This is my name.This is not my name. This is my car.This is not my car.This isn't my car.I am a teacher.I am not a teacher.I 'm not a teacher.They are my books.They are not my books.They aren't my books.缩写形式：is not = isn'tam not = 'm not（注意：无"amn't"的形式）are not = aren't否定词详细规则一、Don't 和 Doesn't (用于否定实义动词)主语否定词例句I / You / We / They / 复数名词don't (do not)I don't like coffee. They don't live here.He / She / It / 单数名词 (三单)doesn't (does not)He doesn't speak Chinese. She doesn't have a car.核心记忆口诀： 有“动”用 do/does，三单用 does，非三用 do。二、Not (用于否定系动词、情态动词等)否定的对象结构例句系动词 (am/is/are)am/is/are + notI am not tired. She is not a student.情态动词 (can, will, must...)情态动词 + notI cannot swim. He will not come.助动词 (have, has, had)助动词 + notI have not finished. She has not seen it.不定式、动名词等not + to do / doingTry not to be late. I regret not going.三、快速决策树：看句子核心动词：如果是 实义动词 (like, live, work...) → 用 don't / doesn't如果是 be动词/情态动词 → 用 not六、名词系统1. 可数名词复数变化规则规则变化：一般的名词 + sa girl → girls, a coat → coats以s、sh、x、ch结尾的词 + es /iz/a bus → buses, a box → boxes以f、fe结尾变f、fe为ves /vz/a wife → wives, a shelf → shelves土豆、西红柿、黑人、英雄 + es /z/a potato → potatoes, a tomato → tomatoes规则：以o结尾有生命加es，其他+s辅音字母 + y结尾的名词，变y为i + es /iz/a baby → babies, a lady → ladies注意： 腿部以下的物品都是复数，做主语用are（如：shoes, pants, socks等）不规则名词：man → men, woman → womenfoot → feet, tooth → teethchild → children /ˈtʃɪldrən/sheep → sheep（单复数一样）, fish → fish（单复数一样）2. 不可数名词特点：前面不可以加one two three前面不可以加a an后面不可以加s，永远是单数分类：液体状东西：water, tea, coffee, milk, beer物质名词：soap, gold抽象名词：love, friendship, anger无法计算：work, homework, rice, rain量词搭配：a loaf of bread（一条面包）/loʊf/a bar of soap（一块肥皂）a bottle of cola（一瓶可乐）a pound of sugar（一磅糖）/paʊnd/half a pound of...（半磅）/hæf/a quarter of ...（四分之一）/ˈkwɔːrtər/a piece of bread（一片面包）/piːs/a cup of coffee（一杯咖啡）a spoon of sugar（一勺糖）3. 冠词 (Articles)概念： 用于名词前，相当于名词的"帽子"冠词含义说明a/an一个、一间、一台...不定冠词，表示不确定、泛指the这、那、这些、那些定冠词，表示确定、特指a 和 an 的区别：an + 以元音发音开头的单词：an egg, an orange, an houra + 以辅音发音开头的单词：a car, a house, a university用法规则：初次出现，不了解，不确定，用不定冠词再次出现，了解了，确定了，用定冠词the特殊情况（通常不加冠词）： 国家、国籍、人名、城市名I am from China. I like Beijing.七、介词系统常用介词及用法on（在...上面）The book on the desk（桌子上的那本书）→ 介词短语修饰名词The book is on the desk.（这本书在桌子上）→ 加动词构成句子in（在...里面）The money in the bag（包里的钱）→ 短语The money is in the bag.（钱在包里）→ 句子拓展：in love（恋爱）：He is in love.in + 语言（用...）：Please speak in English.in + 颜色（穿着...颜色的衣服）：The girl in the redin cash（使用现金）：pay in cashin the rain（冒雨）：They walk in the rainwith（和...在一起）人与人、人与物、物与物He is with his new girlfriend.（他和他的新女朋友在一起）The house with a swimming pool（带着游泳池的房子）across（穿过...）He is going across the grass.（他正穿过那片草地）→ 注意： across是介词，需加动词over（跨越、上方）between（在...之间）只能表示两者之间：between A and BThe lady is between her daughter and her friend.just between you and me（天知地知，你知我知）along（沿着）We are driving along the main road.into（进入）I come into the bedroom.（我进入到了房间）of（属于）一般表示没有生命的东西，倒着说the photo of my school（我学校的照片）the name of the song（这首歌的名字）beside（在...的旁边）There is a bed table beside the bed.off（离开）turn off（关掉）, take off（脱掉）, drive off（开走）, jump off（跳离）for核心功能：建立“指向性”的关联为了...某人而...：It's for you.对于某人来说...：Math is so difficult for me.表原因：What are you sorry for?无需翻译，介词+时间/地点 in + 月、季、年in + 地点（相对较大）It's clod in winter 冬天非常冷It's very marm in MarchIt's often rainy in summer 夏天经常是雨天I am going to travel in the South Pole in 2026 我打算2026年去南极旅行It is cold in Beijing in winter.重要区分in front of vs. in the front of:in front of: 在外部的前面（两个物体分开）in the front of: 在内部的前面（在同一物体内部）八、常用句型结构1. 简单句的5种基本句型主 + 谓 (Subject + Verb)主 + 谓 + 宾 (Subject + Verb + Object)主 + 谓 + 宾 + 宾 (Subject + Verb + Indirect Object + Direct Object)主 + 谓 + 宾 + 宾补 (Subject + Verb + Object + Object Complement)主 + 系 + 表 (Subject + Linking Verb + Predicative)2. There be 句型构成： There be（is，are）+ 地点用法： 表示存在（某处有某物）分类：There is... + 单数名词There are... + 复数名词就近原则： There is a table and four chairs.（a table是单数，所以用is）翻译： There is one in my heart.（我心里有一个人）三组对话的核心语法对比表名词类型疑问句典型结构肯定回答中的量词/代词核心区别与规则可数名词单数Is there a/an...?one用 one 指代问句中提到的单个物品。不可数名词Is there any...?some问句用 any，肯定回答换为 some。可数名词复数Are there any...?some问句用 any，肯定回答换为 some；be动词用are。3. 双宾语结构结构： 动词 + 间接宾语 + 直接宾语常见动词： give, show, teach, send, buy两种表达方式：give sth. to sb. = give sb. sth.I give some money to him = I give him some moneyI show my new car to him = I show him my new car4. 祈使句功能： 表示命令、请求、建议结构：表示命令：动词原型+...（Shut the door.）表示请求：please+动词原型+...（Please give it to me.）表示建议：Let's+动词原型+...（Let's go, OK?）Be careful结构： be + 非动词（形容词、介词、名词等）Be happy!（要开心哦）Be here!（就待在这哦）Be a good boy!（要做个好孩子啊）5. What about...? 句型用法：反问：I am a teacher. What about you?提议：I want rice. What about you?表示关切：What about your homework?6. What are you going to do with...?你打算怎么处理...？What are you going to do with the old books?（你打算怎么处理这些旧书？）九、形容词与副词形容词用法修饰名词：a beautiful girl作表语：She is beautiful.副词用法功能： 修饰 adj. / v. / adv.修饰adj：I am very tired修饰v.：I love you very much, I swim well修饰adv：He runs very quickly副词的位置： 通常情况，形前动后I am very tired（very修饰形容词tired，放在形容词前面）I swim well（well修饰动词swim，放在动词后面）特殊词：hard形容词：hard work（艰苦的工作）副词：work hard（努力地工作）...and... 结构（又...又...）Tired and thirsty（又累又渴）Beautiful and kind（美丽又善良）Tall, rich and handsome（高富帅）频率副词sometimes 有时，频率副词十、量词与数量表达Some / Any 用法词用法示例some1. 肯定句中表示"一些"2. 疑问句中表请求/建议3. 加单数名词表"某一"I have some books.Would you like some tea?Some day you'll understand.any1. 疑问句/否定句中表示"一些"2. 加单数名词表"任意"Do you have any money?You can buy it at any store.Some + 复数名词/不可数名词：some books（一些书）some water（一些水）some students（一些学生）数字表达在‘hundred’之后，只要后面跟着的不是‘零零’（即十位和个位不都是0），就必须用‘and’连接。基数词：1-10: one, two, three, four, five, six, seven, eight, nine, ten11-19: eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen20-90: twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety100: one hundred, 1000: one thousand，10000：ten thousand连字符使用： twenty-one（21）, thirty-six（36）, fifty-seven（57）89’691 eighty-two thousand six hundred and ninety-one百位以上：236: two hundred and thirty-six1,423: one thousand four hundred and twenty-three十一、情态动词概念： 表示情感、态度包括： can, must, may...用法： + 动词，且原形特点： 没有人称和数的变化例句：She can read it.He can do it.They can swim.疑问句： 情态动词提前Can he read it?Can he do it?否定形式：can → can't = cannotmust → mustn't(禁止) = must not / don't need to(不必)may → may not具体情态动词：can可以吗？Can you...? Can she...?Can you help me?（你能帮我吗？）Can he do it?（他可以做这事吗？）Can I help you?（我能帮助你吗？）→ No thanks / Yes pleaseCan't wait!（快点说吧）I can't help（没法子！）Can you give me a hand?（你可以搭把手帮个忙吗？）mustWhat must I do?（我该干什么？）What must I say / read / clean...?（我该说/读/打扫什么？）Where must I go / live / stay...?（我该去/住/暂住哪里？）Who must I meet / love / invite?（我该见/爱/邀请谁呢？）十二、动词相关结构1. 双动词结构我喜欢踢足球：I like playing football我喜欢开车：I like driving我想买一辆新车：I want to buy a new car我想开车：I want to drive2. Come and... 结构（过来...）Come and see it.（过来看它）Come and meet my Mom.（过来见我的妈妈）Come and have a drink.（过来喝一杯）3. Look at / See 区别Look at（看）：含义： 有意识地、主动地将视线投向某物，强调"看"的动作用法： 及物动词短语，后接宾语 look at something注意： 看人时，at后面接宾格：Look at me/him/her.See（看见）：含义： 视觉信息自然地、被动地进入眼睛，强调"看"的结果和能力用法： 及物动词，后直接接宾语 see something/someone核心区别：Look at 强调看的动作（可能还没看见）See 强调看的结果（已经看见了）Can you see it?（你能看得见吗？）Can you look at it?（你能看一下吗？）4. Give 给后面接人称代词宾格形式：give me / her / him / them / usGive me the book.（把那本书给我）Give him the pen.（把钢笔给他）5. 实义动词疑问/否定（Do用法）实义动词疑问句： Do + 主语 + 动词原形Do you like coffee?Do you want any sugar?Do you eat breakfast?否定句： do not + 动词原形I don't like coffee.I don't like milk in my coffee.（我不喜欢咖啡里加牛奶）对比：Are they + 形容词/名词/介词... → 一般疑问句：be+... / 否定句：They are not +...实义动词疑问句 → Do + 动词原形 / 否定句：do not + 动词原形6. wait for...（等待...）wait for me（等等我）十三、代词 One / OnesOne（单数）the blue coat = the blue onethe short girl = the short oneI like the cheap one.（我喜欢便宜的那个）当两个人知道谈论的是什么的时候，one就可以代表所指示的东西（单数）Ones（复数）I like the red coats = I like the red ones.（我喜欢红色的那些外套）十四、Here 系列结构Here + 主语 + be/一般动词It is here. = Here it is.（它在这儿）我在这：I am here = Here I am.他在这：He is here = Here he is.咱开始吧：Here we go...它们在这：They are here = Here they are.（也可以表示"给你"）Here they are / Here it is / Here you are 区别短语核心释义关键区别与典型场景Here they are.它们在这儿。给你（多个物品）。针对复数物品。• 场景1 (寻找)：A: "我的眼镜呢?" B: (拿着眼镜) "Here they are."• 场景2 (递交)：(端上两盘菜) "Here they are."Here it is.它在这儿。给你（单个物品）。针对单数物品。• 场景1 (寻找)：A: "我的车钥匙呢?" B: (找到钥匙) "Here it is."• 场景2 (递交)：(递过一个文件) "Here it is."Here you are.给你。拿好。通用递交用语，不区分单复数。• 场景 (通用递交)：(递给你一杯水/一些钱/一个包裹) "Here you are."注意：此短语焦点在“接收的人”，而非“物品”。十五、亲属关系表达in-law（婚后亲属关系）mother in-law（岳母/婆婆）father in-law（岳父/公公）sister in-law（嫂子/弟媳/小姑子等）brother in-law（姐夫/妹夫/小叔子等）ex-（前任）ex-girlfriend（前女友）ex-boyfriend（前男友）ex-wife（前妻）ex-husband（前夫）step（后的，继的）step mother（继母）step father（继父）step sister（同父异母/同母异父的姐妹）step brother（同父异母/同母异父的兄弟）十六、常用短语与表达名词 + Please 句型用法： 用于点餐、购物、请求等场景，非常口语化My coat and my umbrella, please.（请把我的外套和雨伞给我。）A roast duck, please.（请来一只烤鸭。）Your ID card, please. / Tickets, please.（请出示您的身份证。/ 请出示票。）实用短语列表短语含义come out of...从...出来come upstairs上楼来go downstairs下楼去the same color/name/city相同的颜色/名字/城市lovely smart beautiful nice漂亮、好看、时髦a lucky dog幸运儿my girl我的女孩（女朋友）That's fine就这样吧/就到这吧/行啦grey hair花白的头发black tea红茶black coffee纯咖啡black man黑人what's the matter?什么事情？Are you tired?你累了吗？What's up?干嘛呢？/怎么回事啊？What's wrong?什么不对？/怎么了？What's wrong with you?你怎么回事？（吵架）all right = ok I'm full我饱了a full stop句号a full time job一份全职工作a part time job一份兼职工作make the bed整理床铺I beg your pardon?请您再说一遍？a family meeting家庭会议we are a family我们是一家人Are you the family of...?你们是...的家属吗？walk out of...从...走出来run out of...从...跑出来go into走进...go out of走出...some of them他们中的一些some of us我们中的一些walk into走进去...run into跑进去...There we are = We are there就这么着吧/就到这儿吧Not very不是非常...Hurry up快点Be quick快点It's over there就在那儿It's right here就在这儿There it is = It is there他在这里/就在这里There he is = He is there他在这里Wait a minute稍等一会（一分钟）Wait a second稍等一会（几秒钟）Can I ask you a question?我能问你一个问题吗？Can you come here a minute please?你能过来一下好吗？She is next door她在隔壁next door（在隔壁/与...相邻）She is next door to us.（她与我们相邻）next-door（形容词，隔壁的）The next-door girl is very beautiful.（隔壁的女孩很漂亮）To tell you the truth,...说句老实话吧，...Well...嗯... 呃...Yeah是的To be honest,...老实讲...run after追赶（It's running after a cat. 它正在追赶一只猫）How is the weather in Beijing?北京的天气怎么样？The weather is pleasant天气很宜人a pleasant dream美梦天气表达句型结构： It is + adj + 时间It is sunny today.（今天阳光明媚。）What's in/on/under/over/behind it?What's in it?（里面是什么？）What's on it?（上面是什么？）What's under it?（下面是什么？）What's behind it?（后面是什么？）十七、补充语法点1. 描述句型他正穿过那片草地：He is going across the grass（注意：across是介词，需加动词）2. 动词分类总结连系动词：She is beautiful情态动词：You must do it实义动词：I wash my hands助动词：She is running（is是助动词，is running是一个整体）十八、特殊语句What's sth./ sb. like?What's her boyfriend like? 她的男朋友怎么样？What's your boss like?你的老板怎么样？What's the climate like? 气候怎么样？What's the climate like in +...（国家、城市、季节、月份）What's the climate like in Japan?日本的气候怎么样？What's the climate like in fall?秋天气候怎么样？How's sth./sb. ?How's the climate? 气候怎么样？How's the weather? 天气怎么样？How's her boyfriend?她男朋友怎么样？三月经常是风天It's often windy in Marthrain \ snowrain 下雨 snow下雪 两个都是动词 +y变成形容词三月会下雨 It's rainy in March 这里的rainy是作为形容词，可以跟在be动词之后​ It rains in March 这里的rain下雨是动词，三单加s句子结构It's rainy in March.主系表结构 It（形式主语） + is（系动词） + rainy（形容词表语）It rains in March.主谓结构 It（形式主语） + rains（动词谓语）
联想打印机驱动 https://www.lenovoimage.com/index.php/services/index惠普打印机驱动 https://support.hp.com/cn-zh/drivers/printers
IPV6地址ping不通后自动重新获取地址的监控脚本
在国内部署 IPv6 时，经常遇到 IPv6 地址自动获取失败或连接不稳定的情况。为了解决这个问题，我整合了一份 国内优化版 IPv6 监控脚本，支持日志轮转，并可以通过 systemd 实现开机自动执行和异常重启。下面我详细介绍脚本及配置方法。1️⃣ IPv6 监控脚本脚本核心功能：定时检测 IPv6 连通性自动刷新 IPv6 地址（支持 SLAAC，兼容 NetworkManager 或系统网络服务）日志记录并支持轮转，防止日志无限增长可长时间后台运行完整脚本如下：#!/bin/bash # IPv6检测脚本 - 国内优化版 LOG_FILE="/var/log/ipv6_monitor.log" MAX_LOG_SIZE=1048576 # 1MB TEST_HOSTS=( "2400:3200::1" "2400:3200:baba::1" "ipv6.sjtu.edu.cn" "ipv6.ustc.edu.cn" "ipv6.baidu.com" ) MAX_FAILS=3 FAIL_COUNT=0 CHECK_INTERVAL=300 RETRY_INTERVAL=30 log_message() { # 日志轮转 if [ -f "$LOG_FILE" ] && [ $(stat -c%s "$LOG_FILE") -gt $MAX_LOG_SIZE ]; then mv "$LOG_FILE" "${LOG_FILE}.1" echo "$(date '+%Y-%m-%d %H:%M:%S') - 日志文件轮转" > "$LOG_FILE" fi echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE" logger -t ipv6-monitor "$1" } check_ipv6() { local success_count=0 local total_tests=${#TEST_HOSTS[@]} local required_success=$((total_tests / 2 + 1)) if ! ip -6 route show default | grep -q default; then log_message "警告: 没有IPv6默认路由" return 1 fi for host in "${TEST_HOSTS[@]}"; do if ping6 -c 2 -W 3 "$host" > /dev/null 2>&1; then ((success_count++)) log_message "检测通过: $host" else log_message "检测失败: $host" fi sleep 1 done if host ipv6.sjtu.edu.cn > /dev/null 2>&1; then ((success_count++)) fi if [ $success_count -ge $required_success ]; then log_message "IPv6连接正常 (通过 $success_count/$total_tests 个测试点)" return 0 else log_message "IPv6连接异常 (仅通过 $success_count/$total_tests 个测试点)" return 1 fi } renew_ipv6() { log_message "开始重新获取IPv6地址..." local interface=$(ip -6 route show default | awk '{print $5}' | head -n1) [ -z "$interface" ] && interface=$(ip link show | grep -E '^[0-9]+:' | grep -v lo: | awk -F': ' '{print $2}' | head -n1) log_message "使用网络接口: $interface" ip -6 addr flush dev "$interface" sleep 2 local method_used="" if command -v nmcli > /dev/null 2>&1; then log_message "使用方法1: NetworkManager" nmcli device disconnect "$interface" 2>/dev/null sleep 2 nmcli device connect "$interface" 2>/dev/null method_used="networkmanager" sleep 10 else log_message "使用方法2: 重启网络服务" if command -v systemctl > /dev/null 2>&1; then systemctl restart systemd-networkd 2>/dev/null || \ systemctl restart NetworkManager 2>/dev/null || \ systemctl restart networking 2>/dev/null else service networking restart 2>/dev/null || \ service network-manager restart 2>/dev/null fi method_used="restart-service" sleep 15 fi sleep 5 if check_ipv6; then log_message "IPv6地址更新成功 (方法: $method_used)" else log_message "警告: IPv6地址更新可能未成功" fi } show_ipv6_info() { log_message "=== 当前IPv6信息 ===" ip -6 addr show | grep inet6 | grep -v fe80 | head -5 >> "$LOG_FILE" ip -6 route show default 2>/dev/null >> "$LOG_FILE" log_message "====================" } log_message "IPv6监控脚本启动" show_ipv6_info while true; do if check_ipv6; then FAIL_COUNT=0 sleep $CHECK_INTERVAL else ((FAIL_COUNT++)) log_message "IPv6检测失败次数: $FAIL_COUNT/$MAX_FAILS" if [ "$FAIL_COUNT" -ge "$MAX_FAILS" ]; then renew_ipv6 FAIL_COUNT=0 show_ipv6_info sleep 60 else sleep $RETRY_INTERVAL fi fi done2️⃣ 脚本改动说明日志轮转：当日志文件大于 1MB 时，自动重命名为 ipv6_monitor.log.1 并新建日志文件。SLAAC 支持：自动刷新 IPv6 地址，不再使用 dhclient，兼容 NetworkManager 或系统服务。测试点优化：IPv6 测试点改为确认可 ping 通的五个地址。3️⃣ 自动执行脚本（开机自启）推荐使用 systemd，可以保证脚本异常退出后自动重启，并可在开机启动。3.1 保存脚本sudo nano /usr/local/bin/ipv6_monitor_cn.sh sudo chmod +x /usr/local/bin/ipv6_monitor_cn.sh3.2 创建 systemd 服务文件sudo nano /etc/systemd/system/ipv6-monitor.service内容如下：[Unit] Description=IPv6 Connection Monitor (China Optimized) After=network.target Wants=network.target [Service] Type=simple ExecStart=/usr/local/bin/ipv6_monitor_cn.sh Restart=always RestartSec=10 User=root [Install] WantedBy=multi-user.target3.3 启用并启动服务sudo systemctl daemon-reload sudo systemctl enable ipv6-monitor sudo systemctl start ipv6-monitor查看服务状态：sudo systemctl status ipv6-monitor实时查看日志：tail -f /var/log/ipv6_monitor.log✅ 这样，每次开机 systemd 会自动运行你的 IPv6 监控脚本，并保证异常退出时自动重启，长期稳定运行。这就是完整的 国内优化版 IPv6 监控方案，长期运行无需人工干预，同时保证日志不会无限增长。
Linux基本命令pwd显示当前所在的位置cd切换目录 相对路径：以根开始的路径 cd games 绝对路径：以当前位置，为参照的路径 cd /usr/games cd ~root cd ~wanglong 直接进入家目录 .. 表示上一层目录（父目录） ls 显示目录显示当前目录下的内容 -l 长格式显示详细属性 -h 提供易读的容量单位（K、M等） -lh -d 显示目录本身（而不是内容）的属性 -ld -A 显示所有内容，包含隐藏数据 -R 递归显示目录内容cat 查看少量文本查看文本文件内容，适合查看内容较少的文件 cat --help //查看命令帮助信息 cat -n /etc/shells //显示行号 cat /root/anaconda-ks.cfg cat /etc/passwd cat /etc/fstabless 滚动查看文本查看文本文件内容，适合查看内容较多文件 按上下键可以进行滚动 按q键退出hostname 主机名hostname abc.haha.xixi hostname //显示设置的hostnamecpu与内存lscpu 查看cpu信息 cat /proc/meminfo 查看内容信息ifconfig 查看ip查看ip信息 lo:本机回环地址（此接口专门用于测试），永远为127.0.0.1，代表本机mkdir 创建目录创建目录 mkdir /路径/目录名 -p 连同父目录一并创建 touch 创建文件创建文本文件 touch /opt/1.txt 创建文件 ls /opt 查看目录head/tail 查看收尾格式：head/tail -n 文件名 查看前n行/倒数n行 head -3 /etc/passwd tail -3 /etc/passwdgrep 指定字符的行输出包含指定字符串的行 grep root /etc/passwd grep bash /etc/passwd 常用命令 grep 选项 '字符串' 文本文件 -v 取反匹配（不包含） -i 忽略大小写 grep -v root /etc/passwd 高级使用 ^word 以字符word开头 word$ 以字符word结尾 grep ^root /etc/passwd 查看以root开头的文件 grep bash$ /etc/passwd 查看以bash结尾的文件 ^$ 表示空行，这两个是一个整体，表示空行 grep ^$ /etc/default/useradd #筛选出空行 grep -v ^$ /etc/default/useradd 不要（筛选出的）空行 linux中大多数配置文件内容，有以#开头的注释行 grep -v ^# /etc/login.defs | grep -v ^$ > /opt/log.txt #将/etc/login.defs去除以#开头的注释行和去除空行，然后输出到/opt/log.txtvim 编辑器文本编辑器 vim当文件不存在时，会自动创建文件，不能创建目录 vim打开一个文件时，默认处于命令模式；从命令模式按i键可以进入编辑状态，按Esc键返回命令模式；从命令模式输入冒号:可以进入末行模式，在末行模式下主要执行wq存盘与退出等基本操作。 vim末行模式 读取文件内容 [root@localhost /]# echo 123456 > /opt/aa.txt [root@localhost /]# echo hahaxixi > /opt/cc.txt [root@localhost /]# vim /opt/cc.txt 末行模式下 :r /opt/aa.txt #将aa.txt文件追加到文本后面 末行模式下 :r /etc/passwd #将passwd文件追加到文本后面 末行模式下 :r /etc/shells #将shells文件追加到文本后面 字符串替换 :1,10s/root/new/g 替换第1-10行所有的“root” :%s/root/new/g 替换文件内所有的“root” 开关参数的控制 :set nu或nonu 显示/不显示行号 :set ai或noai 启用/关闭自动缩进 永久开关功能设置 vim /root/.vimrc set nu #将这个命令写入到.vimrc中命令模式常用操作： 1G 或 gg ，跳转到文件的首行 G ，跳转到文件的末尾行 yy、#yy ，复制光标处的一行、#行 p、P ，粘贴到光标处之后、之前 x 或 Delete键 ，删除光标处的单个字符 dd、#dd ，删除光标处的一行、#行 d^、d$ ，从光标处之前删除至行首/行尾 /word 向后查找字符串“word”，再按n/N跳至后/前一个结果 u ，撤销最近的一次操作 U ，撤销对当前行的所有修改 Ctrl + r 取消前一次撤销操作 ZZ 保存修改并退出末行模式常用操作： :s/old/new ，替换当前行第一个“old” :s/old/new/g ，替换当前行所有的“old” :n,m s/old/new/g ，替换第n-m行所有的“old” :% s/old/new/g ，替换文件内所有的“old” :w /root/newfile ，另存为其它文件 :r /etc/filesystems ，读入其他文件内容 :set nu|nonu ，显示/不显示行号 :set ai|noai ，启用/关闭自动缩进vimdiff 比对修改多文件echo hahaxixi > /opt/aa.txt echo hahaabc > /opt/bb.txt vimdiff /opt/aa.txt /opt/bb.txt 命令模式下按下两次 Ctrl+w，可以左右切换要修改的文本 末行模式输入wqa保存全部文件并退出which 命令对应程序找到命令对应的程序 which hostname /usr/bin/hostname which ifconfig /usr/sbin/ifconfig which firefox /usr/bin/firefox快捷键ctrl+c 结束正在运行的命令 alt+. 或者 Esc+. 粘贴上一个命令参数 ctrl+l 清屏mount 挂载光盘mount /光盘位置 /挂载位置 umount /挂载位置 一个光盘可以挂载在多个地方，多个光盘不能挂载在一个地方通配符* 任意多个任意字符 ls /root/a* a开头的文件 ls /boot/vm* vm开头的文件 ls /etc/*tab tab结尾的文件 ls /etc/*.conf .conf结尾的文件 ls /etc/re*.conf re开头.conf结尾的文件 ls -d /etc/*as* 包含as的文件夹及文件，-d 仅显示当前目录下，不进入二级目录 ？ 单个字符，必须要有一个 ls /etc/??tab 搜索tab前面有两个字符的文件 ls /dev/tty? 搜索tty后面有一个字符的文件 ls /dev/tty?? 搜索tty后面有两个字符的文件 [a-z] 多个字符或连续范围中的一个，若无则忽略 ls /dev/tty[3-9] /dev/tty1 /dev/tty3 /dev/tty5 /dev/tty7 /dev/tty9 /dev/tty2 /dev/tty4 /dev/tty6 /dev/tty8 {a,min,xy} 多组不同的字符，全匹配 ls /dev/tty{1,17,20} ls /etc/{fs,m}tabalias 别名alias 别名名称='实际执行的命令行' #设置别名 unalias 别名名称 #取消已设置的别名rm 删除rm 选项 文件或目录 -r 递归删除（含目录） -f 强制删除(不询问直接删除)mv 移动mv 源数据 目的地 mv /opt/1.txt /opt/nsd/ 会将1.txt移动到nsd文件夹 mv /opt/1.txt /opt/nsd 会将1.txt移动，名字变成nsd mv /opt/1.txt /opt/2.txt 重命名，文件夹也可以cp 拷贝cp 源数据 目的地 -r 递归，复制目录时必须有此选项 进行强制覆盖 \cp -r /boot /opt #本次操作临时取消别名 cp -r /root /opt/home （复制可以重新命名）如果home不存在，相当于将root文件夹命名为home，如果home存在，会将root文件夹复制到home文件夹里面 复制可以支持两个以上的参数，永远把最后一个参数作为目标，其他所有的参数都作为源数据 cp -r /home /boot /etc/passwd /etc/shells /nsd05 复制与一个点进行连用，将数据复制到当前路径下 cd /opt cp /etc/passwd . lstar 压缩创建tar包 tar 选项 /路径/压缩包名字 /源数据...... -c 动作为创建 -f 指定压缩包的名字（必须在所有选项最后） -z、-j、-J 调用 gz、bz2、xz格式工具进行处理 此种方法打包解压带原始路径 将/etc/passwd /home 两个文件夹打包为haha.tar.gz tar -zcf /root/haha.tar.gz /etc/passwd /home 将passwd和home打包，名字为haha.tar.gz 释放tar包 tar 选项 /路径/压缩包名字 选项 /释放的位置 -t 查看归档 -x 释放归档 -f 指定归档文件名称，必须在左右选项的最后 -C 指定路径 tar -xf /root/cbd.tar.gz -C /nsd12 打包后不带原始目录，注意[/路径/ 源数据] 中间有空格 tar高级打包（上面格式打包后解压有目录，可用如下方法-C，打包不会带目录） tar 选项 /路径/压缩包名字 -C /路径/ 源数据 -C /路径/ 源数据... 同一个目录下有多个文件还可以使用如下方法（打包不带目录，纯净打包-_-） tar 选项 /路径/压缩包名字 -C /路径/ 源数据 源数据 源数据 源数据 源数据 echo用于在终端输出文本或变量的值 echo 123456重定向 > >>将前面命令的输出，作为内容，写入到后面的文件 > 覆盖重定向 >> 追加重定向 head -2 /etc/passwd > /opt/p.txt hostname >> /opt/p.txt 高级应用 > /opt/p.txt #清空文件内容管道 |将前面命令的输出，传递给后面命令，作为后面命令的参数 head -4 /etc/passwd | tail -1 #查看passwd第四行 cat -n /etc/passwd | head -8 | tail -2 > /opt/p.txt #以带编号的形式将passwd文件的第7-8行，写入/opt/p.txtwc -l查看有多少行 cat /etc/passwd | wc -lfindfind 目录 条件 条件... -type类型（f文本文件、d目录、l快捷方式） find /boot -type d #查找boot目录下的目录（文件夹） find /etc -type l #查找etc目录下的快捷方式 find /boot -type f #查找boot目录下的文件 -name文档名称（-iname忽略大小写） find /etc/ -name "passwd" #查找etc下的名字为passwd文件（一般能明确知道的都不会查，主要用通配符模糊查找） find /etc/ -name "*tab" #查找etc下名字以tab结尾的文件 find /etc/ -name "*.conf" #查找etc下名字以.conf结尾的文件 find /root/ -name ".*" #查找root下的隐藏数据 find /mnt/ -name "cbd*" -o -type f #两个满足其中一个 -size 文件大小格式（k、M、G） +代表大于 -代表小于 find /boot/ -size +10M find /boot/ -size +1M find /boot/ -size +10M -size -50M #查找大于10M小于50M的文件 -user 按照数据的所有者 find /home/ -user wanglong #查找home下wanglong的文件 -mtime 修改时间（所有的时间都是过去时间） -mtime +90 #90天之前的数据 -mtime -90 #90天之内的数据 find /var -mtime +90 #三个月之前的数据： find /root -mtime -10 #最近10天之内的数据 find高级使用 处理find找到的数据，每查找到一个就传递一个 find 目录 条件 -exec 处理命令 {} \; -exec额外操作的开始 {}永远表示前面find查找的结果 \;额外操作的结束 find /boot/ -size +10M -exec cp {} /mnt \; #查找boot下大于10M的文件，将其拷贝到/mnt目录下 find /boot/ -size +10M -exec ls -lh {} \; #查找boot下大于10M的文件，然后显示大小详细信息 find /etc/ -name "*tab" -type f -exec cp {} /root/mytab/ \; #查找etc下名字以tab结尾且是文件的文件，将其拷贝到/root/mytab下which查询命令对应的程序文件 which vim #查询命令vim对应的程序文件历史命令管理/调用曾经执行过的命令 history 查看历史命令列表 history -c 清空历史命令 history -w 记录历史命令为空的状态 !n 执行历史命令中的第n条命令 !str 执行最近一次以str开头的历史命令date 时间查看/调整系统日期时间 date 查看时间 date -s "2008-9-6 11:17:16" 修改系统时间 date +%Y 显示年 date +%m 显示月 date +%d 显示日 date +%H 显示时 date +%M 显示分 date +%S 显示秒 date +%F 显示年-月-日 date +%T 显示时:分:秒du 磁盘占用空间du 统计目录占用硬盘的空间 -s 只统计每个参数所占用的总空间大小 -h 提供易读容量单位（K、M等） du -sh /root 查看root目录占用空间 du -sh /etc 查看etc目录占用空间软/硬连接（快捷方式）软连接 优点：可以针对目录和文件制作快捷方式，支持跨分区 缺点：当软连接的源文件（目标）被删除或移动后，这个软连接会变成一个“断裂的”或“悬空的”链接,断裂的链接会以明显的红色高亮显示（取决于终端配色） ln -s /路径/源数据 /路径/快捷方式的名称 ln -s /etc/hosts /hs 绝对路径--直接写绝对路径就可以 相对路径-如果要在bbb文件夹创建软连接（连接到aaa/a.txt），相对路径要以bbb为初始位置 ln -s ../aaa/a.txt bbb/ 硬连接 优点：源数据消失，快捷方式仍然有效，类似对文件复制 缺点：只能针对文件制作快捷方式，不支持跨分区 ln /路径/源数据 /路径/快捷方式的名称zip归档工具（跨平台）跨平台（Windows与Linux） 归档+压缩 zip -r 备份文件.zip 被归档的文档... -r 被归档的数据有目录，必须加上此选项 zip -r /opt/abc.zip /etc/passwd /home 释放归档+解压操作 unzip 备份文件.zip -d 目标文件夹 unzip /opt/abc.zip -d /nsd 查看压缩包内容 unzip -l 备份文件 unzip -l /opt/abc.zipuname -r查看内核版本计划任务按照设置的时间间隔，为用户反复执行某一项固定的系统任务 软件包 cronie、crontabs 系统服务 crond 使用 crontab 命令 –编辑：crontab -e [-u 用户名] –查看：crontab -l [-u 用户名] –清除：crontab -r [-u 用户名] 计划任务书写格式 分 时 日 月 周 任务命令行（绝对路径） * * * * * #每分钟执行一次 30 8 * * * #每天早晨的8点30分，执行一次 30 23 * * * #每天晚上23:30 执行一次 30 23 * * 5 #每周的周五23:30 执行一次 30 23 * * 1-5 #每周的周一至周五23:30 执行一次 30 23 * * 1,3,6 #每周的周一周三周六23:30 执行一次 特别写法： 5 * * * * #每个小时的第五分钟执行一次 */5 * * * * #每隔5分钟运行一次 38 */2 * * * #每隔2小时运行一次 *：匹配范围内任意时间 ,：分隔多个不连续的时间点 -：指定连续时间范围 /n：指定时间频率，每n ... 案例： 每分钟记录当前的系统时间，写入/opt/time.txt [root@nb ~]# date [root@nb ~]# date >> /opt/time.txt [root@nb ~]# cat /opt/time.txt [root@nb ~]# which date #查询命令程序路径 [root@nb ~]# crontab -e #编写计划任务 * * * * * /usr/bin/date >> /opt/time.txt [root@nb ~]# crontab -l #查看计划任务内容 [root@nb ~]# cat /opt/time.txt [root@nb ~]# ls /var/spool/cron #任务文件存放的路径 [root@nb ~]# cat /var/spool/cron/root #记录root用户计划任务sudo提权/etc/sudoers # 主配置文件 visudo # 编辑（推荐，有语法检查）配置语法用户 主机=(身份) 命令 wanglong ALL=(ALL) ALL # 所有权限 %wheel ALL=(ALL) ALL # 组权限 user1 ALL=(ALL) NOPASSWD: /usr/bin/systemctl # 免密常用命令sudo command # 提权执行 sudo -l # 查看自己的权限 sudo -U user -l # 查看他人权限实际示例# 允许管理服务 user1 ALL=(ALL) /usr/bin/systemctl * # 允许安装软件 user2 ALL=(ALL) /usr/bin/yum install *用visudo编辑（防语法错误） 遵循最小权限原则 优先使用组管理（%groupname）主机名hostnamectl set-hostname server cat /etc/hostname #设置永久主机名配置文件 server hostname server 开启一个新的终端查看提示符的变化RPM 软件包查询软件信息（参数是软件名） rpm软件包---适用于redhat、centos系列 deb软件包---适用于debian系列 firefox-91.9.0-1.el8_5.x86_64.rpm 软件名 -版本信息.操作系统.硬件架构.rpm 查询是否安装此软件（参数是软件名） rpm -qa #查看当前系统中所有已安装的软件包 rpm -q firefox #查看软件是否安装 rpm -qi firefox #查询软件信息 rpm -ql firefox #查询软件安装了哪些内容 rpm -qf /usr/bin/vim #查询vim是哪个rpm包的 rpm -qf /usr/sbin/poweroff #查询关机命令是哪个包的 查询某个目录/文件 是哪个rpm包的（即使目录删除也可以查询） which vim 首先查询这个命令的目录 /usr/bin/vim 查询“软件包”的安装清单： rpm -qpl /mnt/AppStream/Packages/v/vsftpd-3.0.3-35.el8.x86_64.rpm 查询软件包信息 rpm -qpi /mnt/AppStream/Packages/v/vsftpd-3.0.3-35.el8.x86_64.rpmrpm命令方式：不能自动解决依赖关系yum命令方式：能自动解决依赖关系yum仓库构建作用：自动解决依赖关系安装软件 服务端：1、众多的软件 2、仓库数据文件（repodata） 本地yum仓库：服务器需要有光盘内容即可 客户端：指定服务位置 yum命令执行流程： yum命令 -- 读取/etc/yum.repos.d/*.repo配置文件内容，从而找到仓库具体位置 客户端文件配置内容： [源名称] 自定义名称，具有唯一性 name 本软件源的描述字符串 baseurl 指定yum服务端的url地址 enabled 是否启用此频道 gpgcheck 是否验证待安装的rpm包 gpgkey 用于rpm软件包验证的密钥文件 仓库配置文件 /etc/yum.repos.d/*.repo 完整示例 [xixi] 仓库的标识 name=xixi 可以省略 baseurl=file:///mnt/AppStream file://表示本地服务器 enabled=1 可以省略，默认开启 gpgcheck=1 1检测，0不检测 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial [xixi] #实际应用 name=xixi baseurl=file:///mydvd/AppStream enabled=1 gpgcheck=0 本地Yum仓库排除错误 1.没有挂载光驱设备 2./etc/yum.repos.d目录下的仓库配置文件内容写错 3./etc/yum.repos.d目录下,错误的配置文件影响yum repoinfo #列出仓库信息 rpm -q httpd #查询httpd是否安装成功 yum list ftp #查询仓库是否有ftp软件（包含fpt就匹配） yum provides /etc/passwd #仓库中哪个包产生该文件 yum provides "hostname" #查询仓库中哪个软件产生该程序 删/usr/bin/hostname，通过yum恢复 rm -rf /usr/bin/hostname yum provides /usr/bin/hostname #查询仓库哪个包产生该文件 yum -y reinstall hostname #覆盖安装 ****** yum clean all #清空yum的缓存 yum repoinfo #列出仓库信息 yum search httpd #查询与httpd相关的包 yum info firefox #查询firefox包描述信息用户用户账号简介作用：1、可以登陆操作系统 2、不同用户具备不同权限 唯一标识：UID（从0开始，默认最大60000） zhangsan（UID 1200） 管理员root的UID永远为0 普通用户的UID默认从1000开始组账号简介作用：方便管理用户 唯一标识：GID（从0开始，默认最大60000） 原则：Linux一个用户必须至少属于一个组 组账户分类： 基本组：一般情况与用户同名，一个用户必须有基本组，基本组只能有一个 附加组（从属组）：一个用户可以有多个附加组，也可以没有附加组用户配置文件/etc/passwd 存放用户基本信息配置文件 head -1 /etc/passwd root : x : 0 : 0 : root :/root:/bin/bash 用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释权用户的创建useradd 选项 用户名 -u 指定用户UID -d 指定宿主目录（家目录），默认为/home/用户名 -g指定基本组 -G 指定所属的附加组 groupadd stugrp useradd -G stugrp nsd06 id nsd06 useradd -G stugrp,tmooc nsd11 将nsd11加入stugrp、tmooc组附加组 -s 指定用户的登录解释器，默认为/bin/bash，/sbin/nologin禁止用户登录操作系统 id 用户名 #查询用户uid/gid信息例：创建用户hakeem，指定家目录为/rhome/hakeem，该用户无法登录系统 //易错题，演示（因为/rhome目录不存在，则无法在/rhome目录下创建用户的家目录） [root@localhost ~]# useradd -d /rhome/hakeem -s /sbin/nologin hakeem useradd：无法创建目录 /rhome/hakeem //上面的用户家目录创建虽然失败了，用户还是依然被创建了，下面删除用户，重新创建 [root@localhost ~]# userdel hakeem //创建/rhome目录 [root@localhost ~]# mkdir /rhome //创建用户-d指定用户家目录，-s指定用户解释器为/sbin/nologin（无法登录系统） [root@localhost ~]# useradd -d /rhome/hakeem -s /sbin/nologin hakeem //验证效果 [root@localhost ~]# id hakeem [root@localhost ~]# grep hakeem /etc/passwd用户的修改usermod 选项 用户名 -l 更改用户账号的登录名称 usermod -l 新用户名 原用户名 -u 用户uid usermod -u 用户uid 用户名 -d 家目录路径 usermod -d /新目录 用户名 #此命令默认不会自动创建新的家目录 usermod -md /新目录 用户名 #将用户原有的家目录进行移动，并设置相应的权限 -s 登录解释器 -G 修改用户的附加组 #重置附加组（了解） useradd nsd17 id nsd17 usermod -G stugrp nsd17 修改、重置nsd17的附加组 id nsd17 groupadd tmooc #创建组 usermod -G tmooc nsd17 修改、重置nsd17的附加组 id nsd17 usermod -G root,stugrp nsd17 修改重置nsd17的附加组 id nsd17 设置用户密码passwd 用户名 #设置用户密码 su - 用户名 #临时切换用户身份 passwd命令支持非交互式设置密码 echo 123456 | passwd --stdin 用户名 grep nsd01 /etc/shadow #保存密码等有效期信息（了解） nsd01:$6$Qhv/gE3Wigl65sKB$jNOwZa9gY1gkPzXJ59kwYzn2/B2d3GuG3AU9H6lYhKZ8O2PPurlK.PfEl3KHwubhIWiKKHH5AXCeUFMe6Jw3R.:20296:0:99999:7::: 字段1 用户账号的名称 字段2 加密后的密码字符串 字段3 上次修改密码的时间（1970-1-1到达上一次修改密码的时间，所经历的天数） 字段4 密码的最短有效天数，默认0 字段5 密码的最长有效天数，默认99999 字段6 密码过期前的警告天数，默认7 字段7 密码过期后多少天禁用此用户账号 字段8 账号失效时间，默认值为空 字段9 保留字段（未使用）用户初始配置文件~/.bashrc 每次进入新的Bash环境时执行（开启新的终端） vim /root/.bashrc #root用户新开终端会首先执行，其他用户需在/home/用户/.bashrc修改 alias hn='hostname' /etc/bashrc 全局配置文件，影响全体用户（开启新的终端） vim /etc/bashrc删除用户userdel -r 用户名 userdel -r nsd01 #连同家目录一并删除 userdel nsd02 #不删除家目录，只删除用户信息手动建立用户家目录/etc/skel 是新建用户时，会以此目录作为模板建立用户家目录 useradd natasha rm -rf /home/natasha/ cp -r /etc/skel /home/natasha chown -R natasha:natasha /home/natasha/ #设置为用户权限 组账户管理/etc/group 保存组账号的基本信息 stugrp:x:1503:nsd06,nsd11,nsd17 组名:组密码占位符:组的GID:组成员列表 gpasswd 选项... 组名 -a 添加组成员，每次只能添加一个 gpasswd -a 用户名 组名 -d 删除组成员，每次只能删除一个 gpasswd -d 用户名 组名 -M 定义（重置）组成员用户列表，可设置多个用户 gpasswd -M '' 组名 #删除组成员中所有成员 -A 定义组管理员列表（组管理员可以属于此组也可以不属于此组） 用户nsd01要将用户nsd02加入tarena组，但是nsd01没有权限，可以在root下执行 gpasswd -A nsd01 tarena #这是nsd01为管理员 gpasswd -A 'nsd01,nb' tarena #设置nsd01和nb为管理员 删除组 groupdel 组名/etc/gshadow 组的管理信息配置文件 grep tarena /etc/gshadow tarena:!:nb:kaka 组名:密码加密字符串:组的管理员列表:组成员列表总结/etc/passwd:用户基本信息配置文件 /etc/shadow:用户密码信息配置文件，密码的详细配置 /etc/group:组基本信息配置文件 /etc/gshadow:组管理信息配置文件权限基本权限与归属读取 允许查看内容 -read r 写入 允许修改内容 -write w 可执行 允许运行和切换 -excute x 对于文本文件 r读取权限：cat、less、grep、head、tail w写入权限：vim、>、>> x可执行权限：shell与Python 对于目录： r读取权限：ls命令查看目录内容 w写入权限：能够创建、删除、修改目录的内容 x执行权限：能够cd切换到此目录下（进入此目录） 归属关系 所有者（属主）：拥有此文件/目录的用户 -user 所属组（属组）：拥有此文件/目录的组 -group 其他用户：除所有者、所属组以外的用户 -other查看数据权限d rwx r-x rwx . 文件权限格式 d对应目录，-对应文本文件，l对应快捷方式 rwx是user权限 r-x是group权限 rwx是other权限 . 是否这是acl策略，设置了为+号 r w x 分别对应4 2 1修改权限chmod [ugoa][+-=][rwx] 文件 -R 递归设置权限，文件夹内所有文件需要用此参数 ugoa对应user group other all（所有人） chmod u-w /nsd10 chmod g=r /nsd10 chmod a=rwx /nsd10 chmod u=---,g=rx,o=rwx /nsd10修改归属关系chown命令 -R 递归修改归属关系 chown 属主 文件... 修改文件的属主 chown 属主:属组 文件... 同时修改文件属主和属组 chown :属组 文件... 修改文件属组 chown -R zhangsan /opt/aa 递归修改aa文件夹下所有文件的属主linux判断用户具备的权限规则1、首先查看该用户或者组是否有acl权限 2、查看用户，对于该数据所处的身份，所有者>所属组>其他人，原则是匹配及停止 如果某文件权限为---rwx---，所属主为zhangsan，所属组为xingming 即使zhangsan在xingming组里面，匹配的时候由于先匹配到所有者，所以就会停止，zhangsan即使属于xingming组也没有对文件的操作权限ACL策略文档归属的局限性 任何人只属于三种角色：属主、属组、其他人 针对特殊的人实现更精细的控制 acl策略能够对个别用户、个别组设置独立的权限setfacl命令 setfacl 选项 u:用户名:权限 文件... setfacl 选项 g:组名:权限 文件... -m 修改acl策略 -x 清除指定acl策略 setfacl -x u:用户名 文件 -b 清除所有已设置的acl策略 setfacl -b 文件 -R 递归设置acl策略 setfacl -Rm u:用户名:权限 文件 setfacl -m u:lisi:--- /home/public 设置黑名单 getfacl /目录 查看目录acl策略附加权限（特殊权限）粘滞位 Sticky Bit权限 占用其他人（Other）的x位 显示为t或T，取决于其他人是否有x权限 适用于目录，用来限制用户滥用写入权 在设置了t权限的目录下，即使用户有写入权限，也不能删除或改名其他用户文档 chmod o+t 目录 Set Gid权限(SGID) 占用所属组（Group）的x位 显示为s或S，取决于属组是否具有x权限 对目录有效 在一个具有SGID权限的目录下，新建的文档会自动继承父目录的属组身份 chmod g+s 目录 Set Uid权限（SUID）了解 占用属主（User）的x位 显示未s或S，取决于属主是否有x权限 仅对可执行的程序有意义 当其他用户执行带SUID标记的程序时，具有此程序属主的身份和相应权限新建文件文件默认均不给x执行权限 其他取决于umask（权限掩码）的设置 新建目录默认权限是755 新建文件默认权限是655 umask 查看umask umask -S 显示新建目录的默认权限 umask 077 #对应实际权限为770 创建目录时，指定目录的权限 mkdir -m 700 /opt/abc03 -m 无视umask值创建数据指定数据的权限磁盘lsblk列出当前系统识别的硬盘 （lsblk 列出当前所以的块设备）blkidblkid /dev/vb2 查看文件系统类型，全称是 Block ID。查询和显示块设备（如硬盘、分区）的属性信息df -hdf -h /mypart1 全称是 Disk Filesystem。显示 文件系统 的磁盘空间使用情况。流程识别硬盘 -- 分区规划 -- 格式化 -- 挂载使用分区格式化流程分区规划分区方案：MBR与GPTMBR分区模式分区类型：主分区、扩展分区（内有逻辑分区）全不主分区最多只能有4个主分区扩展分区可以没有，至多有一个1~4个主分区，或者3个主分区+1个扩展分区（n个逻辑分区）最大支持容量为2.2TB的磁盘扩展分区不能格式化，空间并不能直接存储数据可以用于存储数据的分区：主分区与逻辑分区fdisk 划分分区常用交互指令：专门用来划分MBR分区模式m 列出列表帮助p 查看现有的分区表n 新建分区d 删除分区q 放弃更改并退出w 保存更改并退出格式化磁盘给空间创建文件系统的过程文件系统：数据在空间存放的规则Windows常见文件系统：NTFS FAT(兼容性强)Linux常见文件系统：ext4(6系列) xfs(7系列以上) FAT分区后的分区直接存在于 /dev/ 目录下，而不是以物理路径的形式组织mkfs. (tab)(tab) 连续按两次tab键，可以查看支持的格式 mkfs.ext4 /dev/vdb1 格式化文件系统ext4格式 mkfs.xfs /dev/vb2 格式化文件系统xfs mkfs.xfs -f /dev/vb2 强制格式化/dev/vb2开机自动挂载vim /etc/fstab /dev/sdb1 /mypart1 ext4 defaults 0 0 UUID=332000a3-0102-4fb8-9cf7-5352b9a82093 /d1 ext4 defaults 0 0 更推荐这种方式 列序示例值含义解释1/dev/sdb1文件系统（设备）：指定要挂载的块设备。这里指的是第一块 SATA/SCSI 硬盘 (sdb) 上的第一个分区 (p1)。注意：更推荐使用 UUID 来代替设备名，因为设备名（如 sdb1）可能会变动。2/mypart1挂载点：指定设备要挂载到的目录。这个目录必须事先存在，否则挂载会失败。3ext4文件系统类型：指定设备上使用的文件系统类型。常见的有 ext4, xfs, btrfs, vfat, ntfs, swap 等。4defaults挂载选项：这是一个复合选项，包含了最常用的设置（相当于 rw,suid,dev,exec,auto,nouser,async）。这是最常用的选项。50dump 备份：决定文件系统是否需要用 dump 工具进行备份。0 表示忽略，不备份。1 表示需要备份。通常设为 0。60fsck 检查顺序：决定系统启动时 fsck 检查文件系统的顺序。0 表示不检查。根文件系统 / 应该设为 1，其他文件系统通常设为 2 或 0。GPT分区模式全局唯一标识分区表突破固定大小64字节的分区表限制可支持4个以上的主分区，最大支持18EB的容量1EB = 1024PB = 1024 *1024 TBparted划分分区-help 查看指令帮助-mktable gpt 建立指定模式分区表-mkpart 分区的名称 文件系统类型 start end 指定大小或百分比%作为起始、结束位置-print 查看分区表-rm 序号 删除指定的分区-quit 退出交互换环境parted进行分区 [root@localhost ~]# parted /dev/vdd (parted) mktable gpt #指定分区模式 (parted) mkpart #划分新的分区 分区名称？ []? haha #随意写，不写也可以 文件系统类型？ [ext2]? ext4 #随意写，不会进行格式化 起始点？ 0 结束点？ 5G 忽略/Ignore/放弃/Cancel? Ignore #选择忽略，输入i(tab)补全 (parted) print #查看分区表信息 (parted) unit GB #使用GB作为单位 (parted) print (parted) mkpart #划分新的分区 分区名称？ []? haha 文件系统类型？ [ext2]? ext4 起始点？ 5G #为上一个分区的结束 结束点？ 100% #全部空间 (parted) print (parted) quit #退出 [root@localhost ~]# lsblk swap 交换空间利用硬盘的空间，充当内存的空间当物理内存占满了，可以将内存的中数据，暂时放入交换空间中，缓解真实物理内存的压力利用硬盘分区制作交换空间 对分区后的/dev/sdb2 进行格式化交换文件系统 mkswap /dev/sdb2 格式化命令 blkid /dev/sdb2 查看格式化后的文件系统格式 为swap swapon 查看交换空间组成的成员信息 swapon /dev/sdb2 启用交换分区 free -h 查看交换空间的大小 swapoff /dev/sdb2 停用交换分区 开机自动启用交换分区 vim /etc/fstab UUID=94f2b445-e6d7-4f2f-a9dd-1a4c20bcecf0 swap swap defaults 0 0逻辑卷整合分散的空间，空间支持扩大制作过程：将众多的物理卷（PV）组建成卷组（VG），再从卷组中划分出逻辑卷（LV）制作逻辑卷虚拟机新建80G，3个10G主分区，2个20G逻辑分区建立卷组格式： vgcreate 卷组名 设备路径...... vgcreate systemvg /dev/sda[1-2] pvs 查看系统所有物理卷信息 vgs 查看系统卷组信息扩展卷组vgextend systemvg /dev/sda{3,5,6} [root@192 ~]# pvs PV VG Fmt Attr PSize PFree /dev/nvme0n1p2 rl lvm2 a-- <19.00g 0 /dev/sda1 systemvg lvm2 a-- <10.00g 0 /dev/sda2 systemvg lvm2 a-- <10.00g 1.99g /dev/sda3 systemvg lvm2 a-- <10.00g <10.00g 新增 /dev/sda5 systemvg lvm2 a-- <20.00g <20.00g 新增 /dev/sda6 systemvg lvm2 a-- <20.00g <20.00g 新增 [root@192 ~]# vgs VG #PV #LV #SN Attr VSize VFree rl 1 2 0 wz--n- <19.00g 0 systemvg 5 1 0 wz--n- 69.98g 51.98g 新增后硬盘从20G变成70G 建立逻辑卷lvcreate -L 16G -n vo systemvg 创建逻辑 指定大小为16G 指定逻辑卷名称为vo 从那个卷组创建逻辑卷 vgs 查看卷组信息 lvs 查看逻辑卷信息使用逻辑卷ls -l /dev/systemvg/vo 查看逻辑卷 mkfs.xfs /dev/systemvg/vo 格式化xfs文件系统 blkid /dev/systemvg/vo 查看文件系统类型 临时挂载使用 mount /dev/systemvg/vo /mydvd 永久挂载 vim /etc/fstab逻辑卷扩展df -h | grep vo /dev/mapper/systemvg-vo 16G 147M 16G 1% /mydvd lvextend -L 18G /dev/systemvg/vo 将逻辑卷vo从16G扩展到18G vgs 查看systemvg 卷组还剩1.99G可用 [root@192 ~]# vgs VG #PV #LV #SN Attr VSize VFree rl 1 2 0 wz--n- <19.00g 0 systemvg 2 1 0 wz--n- 19.99g 1.99g xfs_growfs /dev/systemvg/vo 刷新xfs文件系统 resize2fs /dev/systemvg/vo 刷新ext4文件系统删除逻辑卷的删除正在挂载使用的逻辑卷不能删除 lvremove /dev/systemvg/vo卷组删除删除卷组的前提：基于此卷组创建的所有逻辑卷，要全部删除 vgremove systemvg #删除卷组物理卷删除pvremove /dev/vdb{1,2,3,5,6}逻辑卷补充逻辑卷支持缩减 xfs文件系统：不支持缩减 ext4文件系统：支持缩进啊 卷组划分空间的单位PE 默认1个PE的大小为4M vgchange -s 1M systemvg #卷组已存在修改PE大小，用于创建具体空间 创建卷组时指定PE大小 vgcreate -s 1M systemvg /dev/vdb[1-2] vgdisplay systemvg 查看卷组详情信息 创建一个250M的逻辑卷，名字为lvredhat lvcreate -L 250M -n lvredhat systemvg [root@192 ~]# lvs LV VG Attr LSize root rl -wi-ao---- <17.00g swap rl -wi-ao---- 2.00g lvredhat systemvg -wi-a----- 250.00m 新创建的lvredhat vo systemvg -wi-ao---- 25.00g进程管理程序：静态没有执行的代码 磁盘空间进程：动态执行的代码 CPU与内存资源父进程与子进程进程编号：PID查看进程信息pstree 查看进行 -p 列出对应进程的PID编号 -a 显示完整的命令好 pstree -p wanglong 显示王龙用户开启的进程 systemd(PID永远为1)：所有进程的父进程ps 格式 ps [选项]... 常用命令选项 aux a显示当前终端所有进程 u以用户格式输出 x当前用户在所有终端下的任务 -elf -e显示系统内所有进程 -l以长格式输出信息 -f包括最完整的进程信息top 动态查看工具 top -d 刷新秒数 -u 用户名 按大写P进行cpu排序 按大写M进行内存排序pgrep 格式 pgrep 选项... 查询条件 常用命令选项 -l 输出进程名，而不仅仅是PID -u 检索指定用户的进程 -x 精确匹配完整的进程名 pgrep -l ab #显示进程名包含ab的进程 pgrep -l sys #显示进程名包含sys的进程 pgrep -u lisi #显示lisi用户开启的进程进程前后台调度•&符号：正在运行的状态放入后台 •Ctrl + z 组合键：挂起当前进程（暂停并转入后台） •jobs 命令：查看后台任务列表 •fg 命令：将后台任务恢复到前台运行 •bg 命令：激活后台被挂起的任务 [root@localhost ~]# sleep 2000 ^Z #按Ctrl+z 暂停放入后台 [1]+ 已停止 sleep 2000 [root@localhost ~]# jobs #查看后台进程信息 [1]+ 已停止 sleep 2000 [root@localhost ~]# bg 1 #让后台编号为1 的进程继续运行 [1]+ sleep 2000 & [root@localhost ~]# jobs [1]+ 运行中 sleep 2000 & [root@localhost ~]# fg 1 #让后台编号为1 的进程恢复到前台 sleep 2000 ^C #按Ctrl+c 结束 [root@localhost ~]# sleep 3000 & #正在运行放入后台 [1] 35470 [root@localhost ~]# jobs [1]+ 运行中 sleep 3000 & [root@localhost ~]# 关闭进程Ctrk+c 终端当前命令程序 kill -9 PID 通过PID终止 kill -9 %后台任务编号 通过作业编号终止后台任务 killall -9 进程名... 按进程名终止，批量终止所有匹配进程名的进程 pkill -9 查找条件 包含就算 pkill -9 "java" 按名字终止 pkill -9 "node.*app" 正则匹配终止 pkill -9 -u wangloong 按用户名终止网络修改网卡命名规则修改网卡命令规则为(eth0、eth1、eth2……) ifconfig | head -2 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:8a:72:4f txqueuelen 1000 (Ethernet) vim /etc/default/grub #内核引导文件 ……..此处省略一万字 GRUB_CMDLINE_LINUX="……quiet net.ifnames=0 biosdevname=0" ……此处省略一万字 grub2-mkconfig -o /boot/grub2/grub.cfg #重新生成网卡命名的规则 reboot #重启系统 ifconfig | head -2 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.81.132 netmask 255.255.255.0 broadcast 192.168.81.255 三种方式配置地址1.nmclinmcli命令的使用：必须要使用nmcli命令的网卡命名（一般和网卡命名ifconfig相同）nmcli方式：原则必须利用nmcli自己的命名，才能进行网络IP地址的设置Linux系统内核将网卡命名成eth0，nmcli必须再为eth0网卡再起一个名字规则：网卡的本名是什么，nmcli起的外号就是什么nmcli connection show 查看网络命名的链接如果要将使用nmcli创建自己的命名，将网卡ens160 命名成eth0可以使用如下方法nmcli connection show 查看默认命名 NAME UUID TYPE DEVICE ens160 75082e17-905f-4087-8b68-120a98186d35 ethernet ens160 nmcli connection delete ens160 删除ens160链接 nmcli connection add type ethernet ifname ens160 con-name eth0 创建 类型以太网 网卡名字 nmcli起的外号 NAME UUID TYPE DEVICE eth0 75082e17-905f-4087-8b68-120a98186d35 ethernet ens160 外号 实际网卡 修改ip地址、子网掩码、网关地址 nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.31.128/24 ipv4.gateway 192.168.88.0 autoconnect yes 修改 外号 手工配置 ipv4地址 ipv4网关 每次开机自动启用以上所有参数 nmcli connection up eth0 激活2.nmtui3.配置文件修改 vim /etc/sysconfig/network-scripts/ifcfg-ens160 IPADDR=192.168.88.240 PREFIX=24 GATEWAY=192.168.88.222 ifdown eth0 #停用设备（名字为网卡实际名字） 成功断开设备 'eth0'。 ifup eth0 #启用设备（名字为网卡实际名字） 连接已成功激活（D-Bus 活动路径：/org/freedesktop/NetworkManager/ActiveConnection/9） ifconfig | head -2ssh远程登陆rpm -qa | grep openssh ssh root@192.168.31.2数据传递scp=ssh+cp scp [-r] 用户名@服务器:路径 本地路径 下载服务器路径到本地路径 scp [-r] 本地路径 用户名@服务器:路径 上传路径到服务器路径 ssh公钥生成公钥与私钥进行验证 ssh-keygen 生成公钥和私钥 一路回车 ls .ssh/ id_rsa id_rsa.pub 私钥 公钥 虚拟机A将公钥传递给虚拟机B，这样A远程登陆B就不用输入密码了 ssh-copy-id root@192.168.31.2 ls /root/.ssh/ 虚拟机B查看 authorized_keys 虚拟机A传过来的密钥DNS负责域名解析的服务器，将域名解析为ip地址 /etc/resolv.conf 指定DNS服务器地址配置文件常用网络命令ip addredd show 查看ip（这是最原始的方法，在net-tools包没有【没有ifconfig】安装的情况下） ip a s 简写 ip address add 192.168.10.1/24 dev ens160 临时添加ip（存储在内存，重启失效） ip a a 192.168.20.1/24 dev ens160 简写 ip address del 192.168.10.1/24 dev ens160 删除临时ip ping -c 4 192.168.88.2 -c指定ping的次数日志管理•常见的日志文件/var/log/messages 记录内核消息、各种服务的公共消息/var/log/dmesg 记录系统启动过程的各种消息/var/log/cron 记录与cron计划任务相关的消息/var/log/maillog 记录邮件收发相关的消息/var/log/secure 记录与访问限制相关的安全消息通用分析工具 –tail、tailf、less、grep等文本浏览/检索命令 –awk、sed等格式化过滤工具 tailf：实时跟踪文件内容 echo 123456 > /opt/1.txt tail -f /opt/1.txt users、who、w 命令 –查看已登录的用户信息，详细度不同 last、lastb 命令 –查看最近登录成功/失败的用户信息 [root@server /]# users [root@server /]# who pts：图形命令行终端 [root@server /]# last #登录成功的用户 [root@server /]# lastb #登录失败的用户SELinuxSecurity-Enhanced Linux美国NSA国家安全局主导开发，一套增强Linux系统安全的强制访问控制体系集成到Linux内核（2.6及以上）中运行基于SELinux体系针对用户、进程、目录和文件提供了预设的保护策略，以及管理工具SELinux的运行模式enforcing（强制） permissive（宽松）disabled（彻底禁用）任何模式变成disabled模式都要经历重启系统getenforce 查看SELinux模式 setenforce 0 临时切换为permissive模式 setenforce 1 临时切换为enforcing模式 永久修改（需要重启） vim /etc/selinux/config SELINUX=enforcing|permissive|disabled破解root密码前提：必须是服务器的管理者，涉及重启服务器 1、重启系统进入救援模式 开启虚拟机，在加载界面按e键 2、在linux开头的行，将ro修改为rw 然后空格输入 rd.break 按ctel+x启动，会看到switch_root:/# 3、切换到硬盘操作系统环境 chroot /sysroot 切换环境，切换到硬盘操作系统的环境 4、重新设置root密码 echo 123456 | passwd --stdin root 5、如果SELinux是强制模式，才需要SELinux失忆，其他模式不需要让SELinux进行失忆 cat /etc/selinux/config #查看SELinux开机的运行模式 touch /.autorelable 让SELinux失忆 或将SELinux改成宽松模式也可以 6、强制重启系统完成修复 reboot -f 强制重启系统
ln -s /etc/nginx/sites-available/chat.soarfree.top /etc/nginx/sites-enabled/
server { listen 80; # 如果配置了SSL，也会监听443端口 # listen 443 ssl; # ssl_certificate /path/to/your/cert.pem; # ssl_certificate_key /path/to/your/key.pem; server_name nas.soarfree.top; # 您的域名 # 核心配置：代理所有请求到飞牛NAS location / { # 后端NAS服务器的IP和端口 proxy_pass http://192.168.1.4:81; # 以下这些头部信息至关重要，它们确保后端服务能接收到正确的客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 一些超时和缓冲区的优化设置 proxy_buffering off; proxy_request_buffering off; proxy_http_version 1.1; proxy_read_timeout 36000s; proxy_connect_timeout 600s; proxy_send_timeout 600s; } # 可选：如果您需要代理WebSocket连接，可以添加一个特定的location # location /ws/ { # proxy_pass http://192.168.1.4:81; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "Upgrade"; # proxy_set_header Host $host; # } }检查配置并重载 Nginx：# 测试配置文件语法是否正确 sudo nginx -t # 如果测试通过，重载Nginx使配置生效 sudo systemctl reload nginx
飞牛系统下 IPv6 默认路由自动修复方案
在给飞牛系统配置 IPv6 时，很多朋友会遇到这样的问题：能够获取到 IPv6 地址，但是没有默认网关（default via fe80::xxxx）。手动执行命令：sudo ip -6 route add default via fe80::1 dev enp1s0后可以正常上网。但是当 IPv6 地址租期到期或网卡重连时，路由会消失，需要再次手动添加，非常麻烦。本文将介绍一种简单有效的解决方案：通过 NetworkManager 的 dispatcher 脚本，让系统在网卡地址更新时自动补上默认路由。问题分析IPv6 默认网关通常通过 RA（Router Advertisement） 下发，但部分光猫设备（尤其是运营商定制版）可能只下发前缀，不提供默认路由，导致系统没有默认 IPv6 路由。解决思路是：手动指定光猫的链路本地地址（通常为 fe80::1）作为默认网关。写一个钩子脚本，确保每次网卡重新获取 IPv6 地址时自动补上路由。解决步骤1. 新建 dispatcher 脚本编辑 /etc/NetworkManager/dispatcher.d/90-ipv6-route：#!/bin/bash IFACE=$1 STATUS=$2 if [ "$IFACE" = "enp1s0" ] && [ "$STATUS" = "up" ]; then /sbin/ip -6 route replace default via fe80::1 dev enp1s0 fi2. 赋予执行权限sudo chmod +x /etc/NetworkManager/dispatcher.d/90-ipv6-route3. 重启 NetworkManagersudo systemctl restart NetworkManager验证效果断开并重新启用 enp1s0 网卡，或者等待 IPv6 地址续租。然后执行：ip -6 route show应该能看到：default via fe80::1 dev enp1s0 proto static metric 100测试：ping6 -c 4 ipv6.baidu.com能够正常响应，即表示脚本生效。总结通过 NetworkManager dispatcher 脚本，我们解决了飞牛系统下 IPv6 默认路由缺失的问题。其优点是：简单稳定，不依赖额外的服务或定时任务。能在每次地址变动时自动修复路由，避免手动操作。这样，即使 IPv6 地址是动态的，也能保证系统始终具备可用的默认 IPv6 路由。
Ubuntu 安装 Navidrome .deb + Apache 反代到 /music 的部署流程
在本教程中，我们将指导你如何在 Ubuntu 上安装 Navidrome，通过 Apache 将其反向代理到 /music 路径下。完成后，你就可以通过浏览器访问 Navidrome 的 Web 界面，或者使用支持的移动应用（如 DSub、Symfonium、Substreamer 等）进行连接。一、下载并安装 Navidrome首先，下载 Navidrome 的 .deb 安装包并安装：cd /tmp wget https://github.com/navidrome/navidrome/releases/download/v0.58.0/navidrome_0.58.0_linux_amd64.deb sudo dpkg -i navidrome_0.58.0_linux_amd64.deb如果提示缺少依赖，执行以下命令来修复：sudo apt -f install二、检查 Navidrome 服务安装完成后，Navidrome 会作为 systemd 服务运行。你可以通过以下命令查看服务状态：sudo systemctl status navidrome如果服务没有运行，启用并启动它：sudo systemctl enable --now navidrome默认情况下，Navidrome 会监听在 http://127.0.0.1:4533。三、配置 NavidromeNavidrome 的配置文件位于：sudo nano /etc/navidrome/navidrome.toml在配置文件中，修改 MusicFolder 为你的音乐存放路径。例如：MusicFolder = "/srv/music" DataFolder = "/var/lib/navidrome" Address = "127.0.0.1" Port = 4533将 MusicFolder 路径改成你实际存放音乐的路径（比如 /home/老王/music）。修改完成后，保存并关闭文件。然后重启 Navidrome 服务：sudo systemctl restart navidrome四、配置 Apache 反向代理到 /music为了通过 Apache 访问 Navidrome，我们需要启用 Apache 的代理模块并配置反向代理。启用代理模块：sudo a2enmod proxy sudo a2enmod proxy_http sudo systemctl restart apache2接下来，创建一个新的 Apache 配置文件（如 music.conf）：sudo nano /etc/apache2/sites-available/music.conf在配置文件中添加以下内容：<VirtualHost *:80> ServerName example.com # 反向代理 /music 到 Navidrome ProxyPass /music http://127.0.0.1:4533/ ProxyPassReverse /music http://127.0.0.1:4533/ </VirtualHost>将 example.com 替换为你的域名或服务器 IP。启用站点并重载 Apache 配置：sudo a2ensite music.conf sudo systemctl reload apache2五、访问现在，你可以通过浏览器访问：http://example.com/music你将看到 Navidrome 的登录界面，首次登录时，系统会提示你创建管理员账号。六、可选：启用 HTTPS如果你有域名，强烈建议通过 Let's Encrypt 免费证书启用 HTTPS。安装 Certbot 和 Apache 插件：sudo apt install certbot python3-certbot-apache -y然后使用以下命令申请并安装证书：sudo certbot --apache总结至此，Navidrome 已经成功部署在 Apache 上，并通过 /music 子路径进行访问。如果你配置了 HTTPS，你的连接将会更加安全。此外，你还可以使用支持的移动应用（如 DSub、Symfonium、Substreamer 等）来连接 Navidrome，享受更加便捷的音乐管理体验。