联想打印机驱动 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，享受更加便捷的音乐管理体验。
在本教程中，我们将演示如何在 Apache 服务器下部署 Typecho 博客系统。包括 Apache、PHP、MySQL 的安装与配置，以及 Typecho 的下载、解压、配置与安装。1. 环境准备1.1 安装 ApacheApache 是 Typecho 网站的 Web 服务器。首先，需要安装 Apache：sudo apt update sudo apt install apache2启动 Apache 服务并设置开机自启：sudo systemctl start apache2 sudo systemctl enable apache2检查 Apache 是否正常运行：在浏览器中访问 http://localhost，如果显示 Apache 的默认页面，表示安装成功。1.2 安装 PHP 7.4 或以上版本PHP 是 Typecho 的核心组件。你需要安装 PHP 7.4 或更高版本，并启用必要的扩展。安装 PHP 和相关扩展：sudo apt install php7.4 php7.4-cli php7.4-common php7.4-fpm php7.4-mysql php7.4-gd php7.4-mbstring php7.4-json php7.4-xml php7.4-zip检查 PHP 版本：php -v确保 PHP 版本为 7.4 或更高。确认是否启用必要的扩展：php -m | grep -E "mysqli|gd|mbstring|json|xml|zip"如果某些扩展没有启用，可以单独安装：sudo apt install php7.4-mysqli php7.4-gd php7.4-mbstring php7.4-json php7.4-xml php7.4-zip重启 Apache 服务：sudo systemctl restart apache21.3 安装 MySQL接下来，我们需要安装 MySQL 数据库。安装 MySQL：sudo apt install mysql-server启动 MySQL 服务：sudo systemctl start mysql sudo systemctl enable mysql配置 MySQL 安全设置：sudo mysql_secure_installation登录 MySQL 并创建数据库和用户：sudo mysql -u root -p执行以下 SQL 语句：CREATE DATABASE typecho_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'typecho_user'@'localhost' IDENTIFIED BY 'yourpassword'; GRANT ALL PRIVILEGES ON typecho_db.* TO 'typecho_user'@'localhost'; FLUSH PRIVILEGES; EXIT;2. 下载并解压 Typecho下载 Typecho 的最新版本：wget https://github.com/typecho/typecho/releases/download/v1.2.1/typecho.zip解压 Typecho 到 /var/www/html/typecho 目录：sudo apt install unzip sudo unzip typecho.zip -d /var/www/html/typecho设置文件权限，确保 Apache 用户可以访问：sudo chown -R www-data:www-data /var/www/html/typecho sudo chmod -R 755 /var/www/html/typecho3. 配置 Apache创建一个 Apache 虚拟主机配置文件：sudo nano /etc/apache2/sites-available/typecho.conf在文件中添加以下内容：<VirtualHost *:80> ServerAdmin admin@example.com DocumentRoot /var/www/html/typecho ServerName example.com <Directory /var/www/html/typecho> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/typecho_error.log CustomLog ${APACHE_LOG_DIR}/typecho_access.log combined </VirtualHost>启用配置并重启 Apache：sudo a2ensite typecho.conf sudo a2enmod rewrite sudo systemctl restart apache24. 安装 Typecho在浏览器中访问 http://yourdomain.com 或 http://服务器IP/typecho。根据提示填写数据库配置：数据库类型：MySQL数据库名：typecho_db用户名：typecho_user密码：yourpassword填写站点信息和管理员账号，完成安装。5. 完成安装安装完成后，你可以访问 Typecho 的后台进行后续管理和配置。后台地址是：http://yourdomain.com/admin
使用 Unison 实现 Linux 下目录的实时同步（示例：/data/syna1 → /data/sync2）
在日常运维中，我们经常需要在两个目录之间保持文件同步。无论是备份、数据整合还是服务文件共享，实时同步都是非常实用的需求。本文以 Linux 系统为例，使用 Unison + inotify-tools + systemd 实现 /data/syna1 到 /data/sync2 的实时同步，并总结了在配置过程中的常见问题及解决方法。1. 安装必要软件Unison 是一个强大的跨平台文件同步工具，支持增量同步和双向同步。为了实现实时监控，我们还需要 inotify-tools。apt update apt install unison inotify-tools -yUnison：文件同步工具inotify-tools：Linux 文件系统事件监控工具，支持 Unison 的 repeat = watch 功能2. 创建 Unison 配置文件Unison 使用配置文件（.prf）来指定同步的目录和其他选项。创建目录和配置文件：mkdir -p ~/.unison nano ~/.unison/sync.prf在配置文件中写入以下内容（示例同步 /data/syna1 → /data/sync2）：# 同步源目录 root = /data/syna1 # 同步目标目录 root = /data/sync2 # 自动同步，无需手动确认 auto = true batch = true # 实时监控目录变化 repeat = watch # 忽略权限差异，避免属性冲突 perms = 0root：需要同步的两个目录auto = true 和 batch = true：自动处理冲突，避免交互提示repeat = watch：启用实时监控perms = 0：忽略文件权限差异，避免 Unison 因权限变化跳过同步⚠️ 注意：文件必须在同一个文件系统中，否则 repeat = watch 可能无法正常工作。3. 测试同步首次同步可以手动运行：unison sync输出示例如下：Looking for changes New file --> example.txt Propagating updates [BGN] Copying example.txt from /data/syna1 to /data/sync2 [END] Copying example.txt Synchronization complete新文件已同步属性冲突：可以通过 perms = 0 忽略4. 配置 systemd 实现后台实时同步为了确保实时同步持续运行，即使系统重启也不受影响，可以使用 systemd 来管理 Unison 服务。创建 systemd 服务文件nano /etc/systemd/system/unison-sync.service写入以下内容：[Unit] Description=Unison Real-time Sync from /data/syna1 to /data/sync2 After=network.target [Service] Type=simple User=root ExecStart=/usr/bin/unison sync Restart=always RestartSec=5 StandardOutput=append:/root/.unison/unison.log StandardError=append:/root/.unison/unison.log [Install] WantedBy=multi-user.targetUser=root：以 root 用户运行，可访问任意目录ExecStart=/usr/bin/unison sync：使用我们创建的 sync.prf 配置文件Restart=always：服务意外退出时自动重启StandardOutput 和 StandardError：记录日志，便于排查问题启用并启动服务systemctl daemon-reload systemctl enable unison-sync systemctl start unison-sync查看实时日志：journalctl -u unison-sync -f文件一旦在 /data/syna1 中新增、修改或删除，会自动同步到 /data/sync2。5. 常见问题及解决方法1️⃣ 配置文件未找到如果 systemd 日志报错：Profile /root/.unison//root/.unison/sync.conf.prf does not exist解决方法：确保配置文件名为 .prf。systemd 中的 ExecStart 应仅包含文件名，不带扩展名：mv ~/.unison/sync.conf ~/.unison/sync.prf ExecStart=/usr/bin/unison sync2️⃣ No file monitoring helper program found原因：Linux 系统缺少 inotify 支持。解决方法：apt install inotify-tools -y3️⃣ 属性冲突 [CONFLICT] props changed on both sidesUnison 会检测目录和文件权限变化，如果权限不一致，会跳过同步。解决方法：在 .prf 中加入：perms = 0这样只同步文件内容，不强制同步权限。4️⃣ nohup 不适合持续同步nohup unison sync & 只会运行一次同步，执行完成后进程退出。要实现实时持续同步，必须使用：repeat = watch + inotify-tools或通过 systemd 后台运行6. 总结通过本文教程，你可以实现：实时同步：Unison 监控源目录变化并自动更新目标目录。后台运行：通过 systemd 服务实现开机自启，自动同步，无需手动干预。日志管理：同步过程记录日志，便于排查问题。稳定可靠：解决属性冲突、文件监控缺失等常见错误。这个方案适用于备份目录、服务文件同步、音乐库同步等场景。示例效果在 /data/syna1 新增 test.mp3 文件：touch /data/syna1/test.mp3Unison systemd 服务会自动检测并同步：ls /data/sync2/ # 输出: test.mp3无需手动操作，完全实时同步。
Ubuntu 上使用 OwnCloud 配置 Apache：一站式文件同步与共享
在如今的互联网时代，文件共享与同步是日常工作中不可或缺的一部分。借助开源解决方案，使用 OwnCloud 搭建个人文件服务器是一种非常高效、可靠的方式。本文将详细介绍如何在 Ubuntu 系统上通过 Apache Web 服务器配置 OwnCloud。1. 什么是 OwnCloud？OwnCloud 是一个开源的文件同步和共享平台，允许用户在本地和远程存储之间轻松同步文件。它类似于 Google Drive 或 Dropbox，但用户拥有自己的控制权。OwnCloud 提供文件同步、版本控制、文件共享、在线编辑文档等功能，非常适合搭建私有云。2. 安装前准备在开始之前，确保你的系统已更新到最新版本：sudo apt update sudo apt upgrade -y你需要以下软件包：Apache2PHP（7.4 或更高版本）MySQL/MariaDB（作为数据库）OwnCloud 最新版3. 安装 Apache 和 PHP首先，安装 Apache2 Web 服务器和 PHP（包括所需模块）：sudo apt install apache2 php libapache2-mod-php php-mysql php-xml php-mbstring php-curl php-zip php-gd php-intl php-bz2 php-soap -ylibapache2-mod-php：Apache 和 PHP 集成php-mysql：与 MySQL 交互所需其他 PHP 扩展用于支持文件上传、压缩、文件操作等功能4. 配置 MySQL 数据库为 OwnCloud 创建一个 MySQL 数据库和用户：sudo mysql -u root -p进入 MySQL 后，执行以下命令：CREATE DATABASE owncloud; CREATE USER 'owncloud_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloud_user'@'localhost'; FLUSH PRIVILEGES; EXIT;这里创建了一个名为 owncloud 的数据库，并为它分配了一个用户名和密码（请替换 your_password 为你的密码）。5. 下载并安装 OwnCloud访问以下链接下载最新版本的 OwnCloud：OwnCloud 下载然后，下载并解压文件：cd /tmp wget https://download.owncloud.com/server/stable/owncloud-complete-latest.tar.bz2 tar -xjf owncloud-complete-latest.tar.bz2接下来，移动文件到 Apache 的根目录 /var/www/html/：sudo mv owncloud /var/www/html/赋予合适的权限：sudo chown -R www-data:www-data /var/www/html/owncloudwww-data 是 Apache Web 服务器使用的用户和组，确保 Apache 可以访问和修改 OwnCloud 的文件。6. 配置 Apache接下来，创建 Apache 配置文件以指向 OwnCloud 的目录：sudo nano /etc/apache2/sites-available/owncloud.conf写入以下内容：<VirtualHost *:80> DocumentRoot /var/www/html/owncloud ServerName your_domain_or_ip # 配置文件 Alias /owncloud "/var/www/html/owncloud" <Directory /var/www/html/owncloud> Options +FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>这里将 /owncloud 路径指向 OwnCloud 目录，并允许 .htaccess 文件覆盖 Apache 配置，以便 OwnCloud 能正常工作。启用新的虚拟主机配置并重新启动 Apache：sudo a2ensite owncloud.conf sudo systemctl reload apache27. 配置数据库连接打开浏览器，访问 http://your_domain_or_ip/owncloud，你将看到 OwnCloud 的安装界面。在这里，你需要填写数据库连接信息：数据库用户：owncloud_user数据库密码：your_password数据库名称：owncloud数据库主机：localhost点击“完成安装”，如果配置正确，系统会显示安装成功。8. 配置 SSL（可选）为了增强安全性，强烈建议为 OwnCloud 配置 SSL，确保数据传输的加密。你可以使用 Let's Encrypt 获取免费的 SSL 证书：安装 Certbot：sudo apt install certbot python3-certbot-apache -y获取 SSL 证书：sudo certbot --apache根据提示完成证书申请和 Apache 配置。9. 配置 OwnCloud 存储和同步安装完成后，你可以登录到 OwnCloud，并配置文件存储位置、用户、共享等功能。你还可以使用 OwnCloud Desktop 客户端同步文件到桌面，或通过 OwnCloud 移动 app 进行移动端同步。10. 配置日志和调试如果你遇到问题，可以查看 Apache 和 OwnCloud 的日志：Apache 日志：/var/log/apache2/OwnCloud 日志：/var/www/html/owncloud/data/owncloud.log11. 常见问题及解决方法1️⃣ 数据库连接错误如果在安装过程中提示数据库连接错误，请检查数据库配置和权限。确保 MySQL 用户权限正确，且数据库已经创建。2️⃣ “No input file specified” 错误如果你遇到类似 “No input file specified” 错误，通常是由于 Apache 配置文件的 AllowOverride 选项未启用导致。请确保在 <Directory> 指令中包含 AllowOverride All。3️⃣ 文件权限问题如果 OwnCloud 无法写入文件或数据，检查文件夹权限并确保 Apache 用户（www-data）有足够的权限：sudo chown -R www-data:www-data /var/www/html/owncloud sudo chmod -R 755 /var/www/html/owncloud总结通过本教程，你成功地在 Ubuntu 上安装并配置了 OwnCloud，实现了个人私有云存储与文件同步服务。你可以随时访问、管理和共享文件，无论是在 PC、手机还是平板上。此外，结合 Apache 和 SSL 配置，你的 OwnCloud 系统更加安全可靠。如果你在配置过程中遇到问题，可以参考 OwnCloud 官方文档，或者查看相关日志文件进行排查。希望这篇教程对你有所帮助，更多技术文章欢迎关注我的博客！