Lyuu 的博客

Code Create Life

一篇用来验证主题排版与代码高亮的测试文。

行内代码与引用

使用 hexo generate 可以生成静态站点,输出目录为 public/。

引用块:好的工具应该让你专注于内容,而不是折腾配置。

代码高亮

1
2
3
4
5
function greet(name) {
// Hexo 默认使用 highlight.js 渲染代码块
console.log(`Hello, ${name}!`);
}
greet('Lyuu');
1
2
3
4
5
6
7
def fib(n: int) -> int:
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a

print([fib(i) for i in range(10)])

列表与表格

命令 作用
hexo new 新建文章
hexo generate 生成静态文件
hexo server 本地预览
hexo deploy 部署到远端
  1. 第一步
  2. 第二步
  3. 第三步

排版正常,说明主题工作良好。

这是用 Hexo 搭建的全新博客的第一篇文章。

写博客的意义,不在于有多少人读,而在于把脑子里的想法逼出来、写清楚。

这个博客会写什么

  • 编程与技术笔记(Java / 前端 / 工具链)
  • AI 相关的实践与思考
  • 生活里值得记录的小事

如何写一篇新文章

1
2
3
4
5
# 在 hexo 目录下
hexo new "文章标题"
# 然后编辑 source/_posts/文章标题.md
hexo generate # 生成静态文件到 public/
hexo server # 本地预览 http://localhost:4000

保持简单,持续输出。这就是开始。

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483886&idx=1&sn=79082868cbd100f9267a2e45bfc372bc&chksm=c0bf78ccf7c8f1da7700bc9b2c360c97c72ecb2465401af7c3a5ab9bb2f5abfc5370a54db921&cur_album_id=4586547322464501762&scene=189#wechat_redirect

新硬盘从识别到永久挂载,一篇搞定所有步骤

一、核心流程概述

新硬盘投入使用需要经过 5个步骤:

1 识别磁盘 → 分区 → 格式化 → 临时挂载 → 永久挂载(配置fstab)

⚠️ 关键提醒:普通mount临时挂载重启失效!生产环境必须通过/etc/fstab配置实现开机自动挂载,且优先使用UUID挂载(设备唯一标识,不受硬盘顺序变更影响)。

二、第一步:识别磁盘

加装物理硬盘后,系统无法即时识别,需重启服务器方可识别新磁盘。

1 2 3 4 lsblk -f              # 查看块设备、分区、文件系统、挂载状态(最常用) fdisk -l              # 查看系统所有磁盘详细分区表 df -h                 # 查看已挂载磁盘的容量、使用情况 blkid                 # 查看所有块设备UUID(永久唯一标识)

设备命名规则

命名 含义
/dev/sda 第1块物理硬盘
/dev/sdb 第2块物理硬盘
/dev/sdc 第3块物理硬盘
/dev/sdc1 第3块硬盘的第1个分区
/dev/sdc2 第3块硬盘的第2个分区

三、第二步:分区(fdisk)

以新磁盘 /dev/sdc 为例:

1 2 # 进入分区编辑界面 fdisk /dev/sdc

fdisk 交互命令

命令 作用
n 新建 磁盘分区
p 查看 当前磁盘分区表
d 删除 已有分区
w 保存并退出 (⚠️ 不执行则所有分区操作失效!)
q 直接退出 ,不保存任何修改

✅ 快速分区流程

1 2 fdisk /dev/sdc # 输入 n → 回车(默认主分区)→ 回车(默认起始扇区)→ 回车(默认结束扇区)→ 输入 w(保存退出)

完成后生成 /dev/sdc1 分区。

四、第三步:格式化

新建分区无文件系统,必须格式化后才可挂载使用。

1 2 3 4 5 # 标准写法1(通用) mkfs -t ext4 /dev/sdc1   # 标准写法2(简写,效果一致) mkfs.ext4 /dev/sdc1

常用文件系统格式

格式 特点 适用场景
ext4 稳定通用,兼容所有Linux 通用推荐
xfs 高性能,支持大文件 CentOS 7+ 默认

⚠️ 注意:必须写完整分区名 /dev/sdc1,不能写成 /dev/sdc 或 /dev/sd1!

五、第四步:临时挂载(mount)

临时挂载仅当前系统生效,服务器重启后全部失效,适用于测试或临时使用场景。

1 2 3 4 5 6 7 8 # 1. 创建挂载目录 mkdir -p /xinmulu   # 2. 执行挂载 mount /dev/sdc1 /xinmulu   # 3. 查看挂载结果 df -h

卸载(取消挂载)

1 2 3 4 5 # 方式1:通过设备名卸载 umount /dev/sdc1   # 方式2:通过挂载点卸载 umount /xinmulu

六、第五步:永久挂载(/etc/fstab)

6.1 为什么用UUID?

挂载方式 稳定性 风险
/dev/sdc1 ❌ 不稳定 硬盘顺序变更(如拔插)会导致挂载到错误设备
UUID=xxx ✅ 稳定 唯一标识 ,硬盘顺序变化不影响

🎯 生产环境强制使用UUID挂载!

6.2 获取UUID

1 2 blkid /dev/sdc1 # 输出示例:/dev/sdc1: UUID="a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"

6.3 编辑配置文件

1 vim /etc/fstab

6.4 添加挂载配置

1 UUID=xxxx-xxxx-xxxx-xxxx  /xinmulu  ext4  defaults  0  0

6.5 fstab 六字段详解

字段顺序 含义 示例值
第1列 设备标识(推荐UUID) UUID=xxx-xxx  或 /dev/sdc1
第2列 挂载点目录 /xinmulu
第3列 文件系统类型 ext4  / xfs
第4列 挂载权限参数 defaults (默认读写)
第5列 dump备份标记 0 (不备份)
第6列 fsck开机自检顺序 0 (不检测)

6.6 校验配置(不重启生效)

1 2 3 4 5 # 加载fstab所有配置,无报错则配置无误 mount -a   # 确认挂载生效 df -h

七、完整标准实操流程

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # 1. 重启后查看新磁盘设备 lsblk -f # 2. 磁盘分区 fdisk /dev/sdc # 操作步骤:n → 回车 → 回车 → w # 3. 格式化分区 mkfs -t ext4 /dev/sdc1 # 4. 创建挂载目录 mkdir /xinmulu # 5. 临时挂载(测试) mount /dev/sdc1 /xinmulu # 6. 获取UUID blkid /dev/sdc1 # 7. 配置永久挂载 vim /etc/fstab # 添加:UUID=xxx-xxx /xinmulu ext4 defaults 0 0 # 8. 校验配置 mount -a # 9. 确认生效 df -h

八、高频易错点汇总

❌ 错误操作 ✅ 正确操作 后果
格式化写成 /dev/sd1 必须写完整分区名 /dev/sdc1 找不到设备,操作失败
分区后未执行 w 保存 必须执行 w 写入并退出 所有分区操作无效
未格式化直接挂载 先 mkfs 格式化再挂载 挂载报错,无法使用
仅临时挂载,不配置fstab 配置 /etc/fstab 永久挂载 重启后挂载失效
使用 /dev/sdc1 设备名挂载 使用 UUID=xxx 挂载 硬盘顺序变更导致挂载异常

九、命令速查卡片

操作 命令
查看磁盘/分区/挂载状态 lsblk -f
查看所有磁盘分区 fdisk -l
查看已挂载磁盘容量 df -h
查看设备UUID blkid  或 blkid /dev/sdc1
进入分区编辑 fdisk /dev/sdc
格式化分区(通用) mkfs -t ext4 /dev/sdc1
格式化分区(简写) mkfs.ext4 /dev/sdc1
临时挂载 mount /dev/sdc1 /xinmulu
卸载磁盘 umount /dev/sdc1  或 umount /xinmulu
编辑永久挂载配置 vim /etc/fstab
加载/校验fstab配置 mount -a

生产场景:无法重启服务器,如何识别新硬盘?

场景说明:线上服务器业务运行中,禁止重启,新增物理硬盘后系统未识别,无需重启可手动扫描识别磁盘。

重新扫描 SCSI/SATA 总线

1. 找到 SCSI Host 控制器

1 2 ls /sys/class/scsi_host/ # 输出示例:host0  host1  host2

2. 逐个扫描所有 Host

1 2 3 4 5 6 7 8 9 # 方式1:逐个扫描 echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan echo "- - -" > /sys/class/scsi_host/host2/scan   # 方式2:一键扫描所有(推荐) for host in /sys/class/scsi_host/host*/scan; do     echo "- - -" > $host done

参数说明:- - - 三个横线分别代表:

  • 第1个 -:扫描所有 Channel

  • 第2个 -:扫描所有 Target

  • 第3个 -:扫描所有 LUN


验证新硬盘是否识别

1 2 3 4 5 6 7 8 9 10 # 方法1:查看内核日志 dmesg | tail -20 dmesg | grep -i "sd[a-z]"   # 方法2:查看块设备 lsblk -f fdisk -l   # 方法3:查看新增设备 ls /dev/sd* | sort

📌 > 如果觉得有用,欢迎点赞、在看、转发三连!

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483859&idx=1&sn=e4e5a41854c00d88c2e716dca88cde6e&chksm=c0bf78f1f7c8f1e74ac151b1fb5326ab9368e78c9bbc917c2379c11eac1cbd485f02e482351b&cur_album_id=4586547322464501762&scene=189#wechat_redirect

系统自动化运维的核心技能,备份、监控、清理全靠它

一、为什么需要定时任务?

在服务器运维中,很多工作需要在特定时间自动执行:

Linux提供了两大利器:crond(周期性任务)和atd(一次性任务)。

二、crond — 周期性定时任务

2.1 基本介绍

crond 是Linux的后台守护进程,负责周期性执行用户设定的任务。安装系统后默认已启动。

1
# 查看crond服务状态

2.2 crontab 命令

选项 功能 示例
-e 编辑 当前用户的定时任务 crontab -e
-l 列出 当前用户的所有任务 crontab -l
-r 删除 当前用户的所有任务 crontab -r
-u 管理指定用户的任务(root专用) crontab -u tom -e

2.3 时间格式(5个占位符)

1
* * * * *

💡 如果忘记了格式,可以查看 /etc/crontab 文件,里面有详细的注释说明。

2.4 特殊符号

符号 含义 示例
* 任意值 (每分钟/每小时/每天…) * * * * *  = 每分钟
, 列举多个值 0 8,12,16 * * *  = 每天8点、12点、16点
- 范围 0 5 * * 1-5  = 周一到周五的5点
*/n 每隔n单位 */5 * * * *  = 每5分钟

2.5 时间配置示例

1
# 每分钟执行一次

2.6 ⚠️ crontab 注意事项

1. 命令必须使用绝对路径

1
# ❌ 错误(环境变量不同,可能找不到命令)

为什么?crond 执行时不加载用户的环境变量(如 .bashrc),所以 ll 这类别名/简写无法识别,必须用完整路径。

2. 脚本需要赋予执行权限

1
chmod +x /home/backup.sh

3. 建议使用脚本(而非直接写命令)

1
# ❌ 不推荐:直接在crontab写复杂命令

2.7 实战案例

案例1:每分钟追加日期到文件

1
# 编辑任务

案例2:编写Shell脚本定时执行

1
# 1. 创建脚本

案例3:每天凌晨2点备份MySQL数据库

1
crontab -e

案例4:每10分钟检查Nginx状态

1
*/10 * * * * /usr/bin/curl -s http://localhost/health | /usr/bin/grep ”OK” || /usr/bin/systemctl restart nginx

三、atd — 一次性定时任务

3.1 基本介绍

at 用于执行一次性任务,执行完毕后自动删除。需要 atd 服务后台运行。

1
# 查看atd服务是否运行

3.2 at 命令格式

1
at [选项] [时间]

时间格式示例:

3.3 相关命令

命令 功能
atq 查看待执行的任务列表
atrm 任务编号 删除指定任务
at -c 任务编号 查看任务具体内容

3.4 使用步骤

1
# 1. 输入 at 命令 + 时间

3.5 实战示例

1
# 5分钟后输出时间到文件

四、crond vs atd 对比

对比项 crond atd
执行频率 周期性 (多次执行) 一次性 (仅执行一次)
适用场景 定期备份、监控、清理 临时性任务、延迟操作
配置方式 crontab -e  编辑 at 时间  交互输入
任务保存 永久有效(直到删除) 执行后自动移除
查看任务 crontab -l atq
删除任务 crontab -r (删除全部)或编辑删除 atrm 编号

五、常见报错与解决

报错 原因 解决
command not found 命令未用绝对路径 使用 which 命令 查看路径后修改
crontab: command not found 未安装cron yum install -y cronie  / apt install -y cron
Can't open /var/run/atd.pid atd服务未启动 systemctl start atd
你输入的文本没有结束 忘记Ctrl+D退出 按 Ctrl+D 完成输入
%  被识别为特殊字符 crontab中%有特殊含义 使用 \% 转义

六、命令速查卡片

crond 速查

操作 命令
编辑任务 crontab -e
查看任务 crontab -l
删除所有任务 crontab -r
重启crond服务 systemctl restart crond
时间格式记忆 cat /etc/crontab  查看注释
每5分钟执行 */5 * * * *

atd 速查

操作 命令
创建任务 at 时间  → 输入命令 → Ctrl+D 两次
查看任务 atq
查看任务内容 at -c 编号
删除任务 atrm 编号
5分钟后执行 at now + 5 minutes
明天下午6点 at 6pm tomorrow


📌 > 如果觉得有用,欢迎点赞、在看、转发三连!

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483841&idx=1&sn=712b54b09098495bc2547853226e3ae4&chksm=c0bf78e3f7c8f1f5ab37c4c49eb5dfc32bc3eb2179b11d267f0d7aa1fd2d7e26c2d3d262851a&cur_album_id=4586547322464501762&scene=189#wechat_redirect

一篇搞定Linux权限管理,从此看懂ll和chmod不迷糊

一、权限字符串完整拆解

1.1 10位权限格式

1
-rw-r--r--. 1 root root 1213 Feb 2 09:39 abc.txt

格式:[1位文件类型][9位权限]

位置 含义 示例
第1位 文件类型 - (普通文件)d(目录)l(软链接)c(字符设备)b(块设备)
第2-4位 属主权限(u) rw-
第5-7位 属组权限(g) r--
第8-10位 其他用户权限(o) r--
示例解读:-rw-r--r--
  • - → 普通文件

  • rw- → 属主可读可写不可执行

  • r-- → 同组用户只读

  • r-- → 其他用户只读

1.2 文件类型标识大全

符号 类型 说明
- 普通文件 文本、二进制、数据文件
d 目录 文件夹
l 软链接 符号链接(快捷方式)
c 字符设备 键盘、鼠标、串口
b 块设备 硬盘、U盘
s 套接字 进程间通信
p 管道 FIFO文件

1.3 rwx对文件和目录的区别(核心难点!)

权限 对普通文件的作用 对目录的作用
r(读) 查看文件内容(cat、less) 列出目录内容 (ls)
w(写) 修改/覆盖文件内容 创建、删除、重命名 目录内文件(需配合x)
x(执行) 运行脚本/程序 进入目录 (cd)

⚠️ 重点理解:对目录有w权限,不需要对目录内的文件有w权限,就能删除该文件!因为删除文件是修改目录内容,不是修改文件本身。

目录权限组合实战理解:

目录权限 能否ls 能否cd进入 能否删除/创建文件
r-- (只读) ✅ 能(但看不到属性细节) ❌ 不能 ❌ 不能
-w- (只写,无x) ❌ 不能 ❌ 不能 ❌ 不能(没有x连进入都不行)
--x (只执行) ❌ 不能 ✅ 能 ❌ 不能
rw- (读写,无x) ✅ 能 ❌ 不能 ❌ 不能
rwx (全开) ✅ 能 ✅ 能 ✅ 能
-wx (写+执行,无读) ❌ 不能 ✅ 能 ✅ 能(知道文件名才能操作)

💡 实战启发:目录的x权限是进入目录的“门票”,没有了它,r和w都无法发挥作用。这就是为什么文件夹至少需要r-x才能正常浏览访问。

二、chmod — 修改权限

2.1 字符方式(u/g/o + - =)

1
# 语法:chmod [u/g/o/a] [+/-/=] [rwx] 文件

2.2 数字方式(r=4, w=2, x=1)

权限值计算表:

权限组合 数值 含义
--- 0 无权限
--x 1 仅执行
-w- 2 仅写
-wx 3 写+执行
r-- 4 仅读
r-x 5 读+执行
rw- 6 读+写
rwx 7 全部权限
1
# 语法:chmod 三位数字 文件

2.3 递归修改 -R

1
# 只改当前目录本身

三、文件所有者/组修改

1
# 仅修改文件所有者

四、查看命令(ll / ls -l)

1
ll

五、用户 & 用户组管理

5.1 组操作

1
# 创建新组

5.2 用户操作

1
# 创建用户并指定主组

六、特殊权限(进阶)

除了基础的rwx,Linux还有三个特殊权限:

6.1 SUID(Set User ID)— 4xxx

作用:用户执行该文件时,临时获得文件所有者权限,而非执行者自己的权限。

1
# 典型示例:/usr/bin/passwd

6.2 SGID(Set Group ID)— 2xxx

作用:

  • 对文件:用户执行时获得文件所属组权限

  • 对目录:在该目录下新建的文件继承目录的所属组(而非创建者的组)

    1
    # 设置SGID

6.3 Sticky Bit(粘滞位)— 1xxx

作用:在公共目录中,只有文件所有者、目录所有者或root才能删除文件(其他人即使有写权限也不能删)。

1
# 典型示例:/tmp 目录

特殊权限速查表

特殊权限 数字位 字符表现 典型用途
SUID 4xxx s 替代属主的x passwd命令
SGID 2xxx s 替代属组的x 共享目录
Sticky Bit 1xxx t 替代other的x /tmp目录

💡 设置技巧:将特殊权限数字放在普通权限前,如 chmod 4755 file(SUID + rwxr-xr-x)

七、权限最佳实践(避坑指南)

最佳实践 说明
目录权限 ≥ 755 目录有执行(x)才能cd进入,建议至少755
配置文件权限 644 只有属主可写,防止误修改
脚本权限 755 需要执行权限
敏感文件 600 如私钥、密码文件,仅属主可读写
共享目录 1777 加粘滞位,防止他人删除
Web目录 755/644 目录755,文件644,避免安全风险
避免使用777 任何人可写是安全灾难!

八、命令速查卡片

操作 命令
查看文件详情 ll  或 ls -l
查看所有文件(含隐藏) ls -al
数字改权限 chmod 755 file
字符改权限 chmod u+x file
递归改权限 chmod -R 755 /dir
修改属主 chown user1 file
修改属组 chgrp group1 file
同时修改属主+属组 chown user1:group1 file
递归修改 chown -R user1:group1 /dir
创建组 groupadd grp
创建用户并指定组 useradd -g grp user1
修改用户组 usermod -g grp user1
删除用户(含家目录) userdel -r user1
查看所有用户 tail /etc/passwd
查看所有组 tail /etc/group

📌如果觉得有用,欢迎点赞、在看、转发三连!

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483835&idx=1&sn=9b4eced4740cbd8f113b585794ca7718&chksm=c0bf7899f7c8f18fb053686545e9c3303f9355aad8719fbced128691d479a56512924de9a28d&cur_album_id=4586547322464501762&scene=189#wechat_redirect

Linux压缩解压命令完全指南:gzip、zip、tar一篇搞定

从单文件压缩到目录打包,一文掌握Linux所有压缩场景

一、gzip / gunzip(.gz格式)

gzip 是Linux自带的压缩工具,特点:只压缩单个文件,不打包目录,压缩后原文件消失。

基本操作

1
# 压缩文件(原文件消失,生成 test.txt.gz)

保留原文件压缩/解压

1
# 压缩并保留原文件(-c 输出到标准输出,重定向保存)

批量操作

1
# 压缩目录下所有.log文件(每个文件单独压缩成.gz)

⚠️ 注意:gzip 不能直接压缩文件夹,要打包目录需要配合 tar 使用。

二、zip / unzip(跨平台通用格式)

zip 是Windows/Linux通用的压缩格式,支持目录打包,跨平台兼容性好。

压缩(zip)

1
# 压缩文件

解压(unzip)

1
# 解压到当前目录

实操演示

1
# 1. 打包压缩网站目录

三、tar — Linux最强大的打包工具

tar 是Linux下最核心的归档工具,常与 gzip 配合生成 .tar.gz 文件。核心功能是打包(把多个文件/目录合成一个文件),压缩功能依赖 -z(gzip)等参数调用外部压缩程序。

参数说明(⚠️ -f 必须放最后!)

参数 含义 说明
-c create 创建压缩包
-x extract 解压包
-v verbose 显示过程日志
-f file 指定压缩包文件名(必须紧跟包名)
-z gzip 使用gzip压缩/解压(生成 .tar.gz)
-C 指定目录 解压到指定目录
-t list 查看压缩包内容(不解压)

🎯 记忆口诀:tar -zcvf = 打包压缩,tar -zxvf = 解压。参数顺序随意,但 -f 必须在最后,因为它后面紧跟文件名。

打包压缩(.tar.gz)

1
# 打包并压缩目录/文件(最常用)

解压(.tar.gz)

1
# 解压到当前目录

仅打包不压缩(.tar)

1
# 打包(去掉 -z)

其他常用操作

1
# 查看压缩包内容(不解压)

💡 本质理解:tar 负责打包(归档),-z 负责压缩(调用gzip),两者通过管道配合完成完整流程。tar 本身不压缩,它把多个文件拼成一个 .tar;-z 再把这个 .tar 压缩成 .tar.gz。同理,-j 调用 bzip2 生成 .tar.bz2,-J 调用 xz 生成 .tar.xz。

四、三种格式对比

格式 工具 支持目录 跨平台 压缩率 常见用途
.gz gzip /gunzip ❌ 不支持 一般 中等 单文件压缩 ,配合tar
.zip zip /unzip ✅ 支持(-r) ✅ Windows通用 中等 跨平台文件传输
.tar.gz tar -zcvf /tar -zxvf ✅ 支持 Linux主流 较高 Linux服务器首选

选择建议

场景 推荐格式 命令
Linux服务器备份 .tar.gz tar -zcvf backup.tar.gz /path/
分享给Windows用户 .zip zip -r share.zip /path/
仅压缩单个日志文件 .gz gzip app.log
发送源码包 .tar.gz tar -zcvf source.tar.gz src/

五、高频实操示例

1
# 1. 备份整个项目目录(最常用)

六、命令速查卡片

gzip 系列

操作 命令
压缩(原文件消失) gzip file.txt
解压(压缩包消失) gunzip file.txt.gz
压缩并保留原文件 gzip -c file.txt > file.txt.gz
解压并保留压缩包 gunzip -c file.txt.gz > file.txt
查看压缩文件内容 zcat file.txt.gz
批量压缩 gzip *.log

zip 系列

操作 命令
压缩文件 zip file.zip a.txt b.txt
压缩目录(必加-r) zip -r pack.zip dir/
解压到当前目录 unzip pack.zip
解压到指定目录 unzip pack.zip -d /tmp/
查看压缩包内容 unzip -l pack.zip

tar 系列

操作 命令
打包压缩(.tar.gz) tar -zcvf backup.tar.gz /path/
解压(.tar.gz) tar -zxvf backup.tar.gz
解压到指定目录 tar -zxvf backup.tar.gz -C /tmp/
仅打包不压缩(.tar) tar -cvf archive.tar /path/
查看压缩包内容 tar -ztvf backup.tar.gz
解压单个文件 tar -zxvf backup.tar.gz file.txt

提示:你可以用help来获取帮助,eg. tar –help

七、常见报错与解决

报错 原因 解决
tar: You must specify one of the '-Acdtrux' options 参数顺序错误 确保 -f 在最后
gzip: stdin: unexpected end of file 压缩包损坏 尝试 gunzip -c 恢复部分数据
zip error: Nothing to do! 压缩目录未加 -r 加上 -r 参数
Cannot open: No such file or directory 文件路径错误 检查文件是否存在

📌 如果觉得有用,欢迎****点赞、在看、转发三连!

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483834&idx=1&sn=ab5a79eed67f3b86f03493358b57452a&chksm=c0bf7898f7c8f18e85bf603f7337db4493223613196360b974bd0eee3f22a91b301149f58786&cur_album_id=4586547322464501762&scene=189#wechat_redirect

Linux查找指令三剑客:find、locate、grep(补充:管道符实战)

文件找不到?内容搜不到?一篇搞定Linux所有查找场景

一、find — 最强文件查找工具

find 是Linux下最强大、最灵活的文件查找命令,可以在指定目录中按各种条件搜索文件。

基本语法

1
find [搜索范围] [选项] [匹配条件]

常用选项

选项 功能 示例
-name 按文件名查找(区分大小写) find /home -name "hello.txt"
-iname 按文件名查找(忽略大小写)(iname没有空格) find /home -iname "Hello.TXT"
-user 按所有者查找 find /opt -user tom
-size 按文件大小查找 find / -size +100M
-type 按文件类型查找(f=文件,d=目录) find / -type d -name "logs"
-mtime 按修改时间查找 find / -mtime -7 (7天内修改)
-exec 对查找到的文件执行操作 find /tmp -name "*.log" -exec rm {} \;

搜索范围写法

写法 含义
/ 从根目录开始搜索(整个系统)
. 从当前目录开始搜索
~ 从当前用户家目录开始搜索
/home 从指定目录开始搜索

实战案例

1
# 1. 按文件名查找(区分大小写)

二、locate — 极速文件查找

locate 通过预建数据库快速定位文件,速度比 find 快得多,但依赖数据库的时效性。

基本语法

1
locate 文件名

实战案例

1
# 查找nginx.conf

locate vs find 对比

对比项 locate find
搜索速度 ⚡ 极快(查数据库) 🐢 较慢(遍历磁盘)
实时性 ❌ 依赖数据库更新 ✅ 实时搜索
灵活性 仅按文件名 ✅ 支持多种条件(大小、时间、类型等)

💡 建议:快速查找已知文件用 locate,复杂条件搜索用 find。

三、grep — 文件内容搜索(含管道符实战)

grep 用于搜索文件内容,而非文件名。它从文本中筛选包含指定模式的行,是日志分析和文本处理的绝对主力。

基本语法

1
grep [选项] ”搜索内容” 文件

常用选项

选项 功能 示例
-n 显示匹配行的行号 grep -n "root" /etc/passwd
-i 忽略大小写 grep -i "error" app.log
-r 递归搜索 目录下所有文件 grep -r "passwd" /etc/
-v 反向匹配 (显示不含关键词的行) grep -v "debug" app.log
-c 只统计匹配行数(不显示内容) grep -c "error" app.log
-l 只显示包含匹配内容的文件名 grep -l "root" /etc/*
-w 按完整单词匹配 grep -w "to" file.txt (不匹配”tom”)
-E 支持扩展正则表达式 `grep -E “error
fail” app.log`

基础搜索案例

1
# 1. 在文件中搜索关键词

🔥 管道符(|)配合 grep — 最常用组合拳

管道符 | 的作用:将前一个命令的输出结果,传递给后一个命令作为输入。

1
# 管道符基本模型

核心场景:搜索结果筛选、日志过滤、进程过滤

场景1:查看并筛选文件内容

1
# 先cat查看文件,再grep筛选包含”int”的行,显示行号

场景2:进程管理中过滤(高频场景)

1
# 查看所有进程,只显示包含nginx的

💡 技巧解析:grep [s]shd 用正则 [s] 匹配字母 s,搜索字符串实际是 sshd。但 grep [s]shd 自身的命令行中是 [s]shd,不包含 sshd,所以不会被自己匹配到。比 grep -v grep 更简洁。

场景3:历史命令中搜索

1
# 查看所有历史命令,筛选包含”ssh”的

场景4:日志实时监控(组合tail -f)

1
# 实时跟踪日志,只显示包含”ERROR”的行

场景5:多管道组合筛选

1
# 查看日志 → 筛选ERROR → 再筛选不包含”ignore”的 → 取前10行

场景6:结合cut提取特定列

1
# 查看passwd → 筛选root → 提取第1列(用户名)

grep 实战场景速查

场景 命令
文件内容搜索 grep "关键词" 文件名
文件内容搜索+行号 grep -n "关键词" 文件名
目录递归搜索 grep -r "关键词" 目录/
查看并筛选文件 `cat 文件
grep -n “关键词”` 查看进程
`ps aux grep 进程名`
查看进程(不含grep自身) `ps aux
grep [进]程名` 历史命令搜索
`history grep 关键词`
实时日志过滤 `tail -f 日志
grep 关键词` 统计匹配行数
grep -c "关键词" 文件 排除匹配行
grep -v "关键词" 文件 多关键词匹配
`grep -E “关键词1 关键词2” 文件`

四、三者核心区别(一张图看懂)

1
┌──────────────────────────────────────────────┐ 

五、实战综合演练

1
# 场景1:查找大于100M的日志文件

六、命令速查卡片

命令 用途 最常用法
find / -name "文件名" 按文件名找文件 find /home -name "*.txt"
find / -size +100M 按文件大小找文件 find / -size +200M
find . -type d 只找目录 find . -type d -name "logs"
find . -mtime -7 找7天内修改的文件 find . -mtime -3
find . -exec 命令 {} \; 找到后执行操作 find . -name "*.log" -exec rm {} \;
locate 文件名 快速定位文件 locate nginx.conf
updatedb 更新locate数据库 sudo updatedb
grep "关键词" 文件 在文件中搜索内容 grep "error" app.log
grep -r "关键词" 目录/ 递归搜索目录内容 grep -r "passwd" /etc/
grep -n "关键词" 文件 搜索并显示行号 grep -n "root" passwd
grep -i "关键词" 文件 忽略大小写搜索 grep -i "error" log
grep -c "关键词" 文件 统计匹配行数 grep -c "error" log
`命令 grep xxx` 管道配合搜索
`ps aux grep nginx` `cat 文件
grep -n “关键词”` 查看并筛选内容 `cat 55.sh
grep -n “int”` `tail -f 日志 grep 关键词`
实时日志过滤 `tail -f app.log grep ERROR`

📌 如果觉得有用,欢迎点赞、在看、转发三连!

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483833&idx=1&sn=ebc68280718903575068640c0dd4208e&chksm=c0bf789bf7c8f18d69e513a80cc1e1c02e6934719a376269eac1dde6f397677afa2b1711e11d&cur_album_id=4586547322464501762&scene=189#wechat_redirect

掌握这些命令,Linux日常操作就掌握了80%

一、目录操作命令

1.1 pwd — 显示当前目录

1
# 基本语法

1.2 ls — 列出目录内容

1
# 基本语法

示例输出解读:

1
[root@server ~]
字段 含义
-rw-r--r-- 文件类型和权限
1 硬链接数
root 所有者
root 所属组
1213 文件大小(字节)
Feb 2 09:39 最后修改时间

💡 隐藏文件:Linux下以 . 开头的文件/目录是隐藏的,需要用 ls -a 才能看到。

1.3 cd — 切换目录

1
# 基本语法

路径类型:

路径类型 示例 说明
绝对路径 cd /etc/nginx 从根目录开始完整路径
相对路径 cd ../tom 相对于当前目录的路径
家目录 cd ~ 当前用户的家目录

二、目录创建与删除

2.1 mkdir — 创建目录

1
# 基本语法

2.2 rmdir — 删除空目录

1
# 基本语法

💡 删除非空目录:需要用 rm -rf(见下文rm命令)

三、文件操作命令

3.1 touch — 创建空文件/更新时间戳

1
# 基本语法

3.2 cp — 复制文件或目录

1
# 基本语法

3.3 mv — 移动/重命名

1
# 基本语法

3.4 rm — 删除文件或目录

1
# 基本语法

⚠️ 危险警告:rm -rf 是非常强大的命令,使用前务必确认路径正确,尤其是 rm -rf /* 会删除整个系统!

四、查看文件内容

4.1 cat — 一次性显示全部内容

1
# 基本语法

⚠️ cat 适合查看小文件,大文件会刷屏。

4.2 more — 分页查看(可交互)

1
# 基本语法

💡 管道配合:cat -n /etc/profile | more 带行号分页查看

4.3 less — 更强大的分页查看

1
# 基本语法

💡 less vs more:less 不会一次性加载整个文件,查看大文件效率更高,功能也更丰富。

4.4 head — 查看文件头部

1
# 基本语法

4.5 tail — 查看文件尾部

1
# 基本语法

🎯 实战场景:tail -f 是运维排查问题的必备命令,可以实时查看日志输出。

五、输出与重定向

5.1 echo — 输出到控制台

1
# 基本语法

5.2 > 和 >> — 重定向

1
# >:覆盖写入(会覆盖原有内容)
符号 功能 示例
> 覆盖 写入 ls -l /home > list.txt
>> 追加 写入 date >> list.txt
2> 错误重定向 ls 不存在 2> error.log

六、链接命令

ln -s — 创建软链接(快捷方式)

1
# 基本语法

💡 软链接 vs 硬链接:

  • 软链接:相当于快捷方式,可以跨文件系统,删除原文件则失效

  • 硬链接:相当于文件的别名,不能跨文件系统,删除原文件仍有效

七、历史命令

history — 查看与执行历史命令

1
# 基本语法

应用场景:

1
# 场景1:想重新执行一个很长的命令

八、命令速查卡片

命令 功能 示例
pwd 显示当前目录 pwd
ls -al 列出所有文件的详细信息 ls -al /home
cd ~ 回到家目录 cd ~
mkdir -p 递归创建目录 mkdir -p a/b/c
rmdir 删除空目录 rmdir empty_dir
touch 创建空文件 touch file.txt
cp -r 递归复制目录 cp -r dir1 dir2
mv 移动/重命名 mv old.txt new.txt
rm -rf 强制递归删除 rm -rf /tmp/cache
cat -n 带行号显示内容 cat -n file
more 分页查看 more file
less 更强大分页 less file
echo 输出内容 echo "hello"
head -n 5 显示前5行 head -n 5 file
tail -f 实时追踪 tail -f log
> 覆盖重定向 echo a > file
>> 追加重定向 echo b >> file
ln -s 创建软链接 ln -s /root link
history 查看历史 history
!5 执行第5条历史 !5

九、实战小练习

1
# 1. 创建目录结构

📌 如果觉得有用,欢迎****点赞、在看、转发三连!

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483828&idx=1&sn=86f8395ced0a7fd493ae3d55b1331cb0&chksm=c0bf7896f7c8f1809480193f6485949bf2ebb287befd79f8d81575701024e23c405ec3f00b21&cur_album_id=4586547322464501762&scene=189#wechat_redirect

手把手教你进入救援模式重置密码,附带SELinux关键一步

场景说明

作为运维人员或Linux学习者,忘记root密码是迟早会遇到的问题。别慌,Linux提供了完善的密码重置机制——核心思路是进入单用户/救援模式,跳过密码验证,然后重新设置密码。

⚠️ 物理机/虚拟机操作:以下操作需要物理接触服务器或通过虚拟机控制台(VNC/iDRAC/IPMI)执行,不能通过SSH远程操作(因为要重启系统,SSH连接会断开)。云服务器请使用云厂商提供的控制台VNC功能连接。

第一篇:RHEL系(CentOS / Rocky Linux / AlmaLinux / RHEL)

方法一:rd.break救援模式(CentOS 7+/RHEL 7+ 主流方法)

第一步:开机进入GRUB编辑

  1. 重启系统

    (或开机)

  2. 出现GRUB引导菜单时,快速按 e 进入内核参数编辑界面

  3. 菜单通常一闪而过,建议开机时不停按 e 或 不停按 ↓ 方向键暂停菜单

💡 GRUB是什么? GRUB(Grand Unified Bootloader)是Linux系统启动时的引导程序,负责加载内核并启动系统。在GRUB界面按 e 可以临时编辑启动参数(重启后恢复,不会永久修改)。

1
                                                            

第二步:编辑内核参数

  1. 找到以 linux 或 linuxefi 开头的内核行

  2. 移动光标到行末尾

  3. 在最后添加参数:

1
 rd.break

修改前:

1
linux /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro rhgb quiet

修改后:

1
linux /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro rhgb quiet rd.break
  1. 按下 Ctrl+X 或 F10 启动进入救援模式

第三步:命令行重置密码

进入后会出现 switch_root:/# 提示符,依次执行以下命令:

1
# 1. 将 /sysroot 挂载为可读写(默认是只读)

系统会自动重启,开机时会执行SELinux重标记(开机时间会变长,耐心等待!)

方法二:init=/bin/bash 单用户模式(备用方案)

如果 rd.break 方式不生效(某些老硬件/特殊环境),可以尝试这个方法:

操作步骤

  1. GRUB界面按 e 进入编辑

  2. 找到 linux 开头的内核行,在行尾添加:

1
rw init=/bin/bash
  1. 按 Ctrl+X 启动

    

1
# 直接进入 root shell(无需密码!)  

第二篇:Debian系(Ubuntu / Debian)

🎯 Ubuntu方法论:Ubuntu默认没有SELinux,不需要 /.autorelabel 步骤,也不用 rd.break。两种方法任选其一即可。

方法一:GRUB恢复模式(最简单,推荐桌面/服务器)

第一步:调出GRUB菜单

重启机器,开机瞬间:

  • BIOS传统启动

    :长按 Shift

  • UEFI新电脑/云主机VNC

    :反复按 Esc

出现GNU GRUB菜单后松手。

1
┌──────────────────────────────────────────────────────┐     

第二步:进入恢复模式

  1. 选择 Advanced options for Ubuntu 回车

  2. 选中带 (recovery mode) 的内核,回车

  3. 在恢复菜单选择:**root - Drop to root shell prompt**

1
┌──────────────────────────────────────────────────────┐

第三步:挂载可读写、重置密码

进入root命令行后依次输入:

1
# 根分区默认只读,先改成读写

💡 Ubuntu特殊说明:Ubuntu默认禁用root登录,日常使用 sudo 提权。因此重置普通用户密码即可(通常是安装时创建的用户)。如果你确实需要启用root登录,执行 passwd root 并设置密码后,还需修改SSH配置允许root登录。

第四步:重启生效

1
# 切回只读再重启

系统正常启动,用新密码登录。

方法二:GRUB直接单用户shell(云服务器VNC常用)

操作步骤

  1. GRUB菜单选中Ubuntu默认内核,按 e 编辑启动参数

  2. 找到 linux 开头的那一行

  3. 把行里的 ro 改成 **rw**,行尾添加 init=/bin/bash

修改前:

1
linux /boot/vmlinuz-xxx root=UUID=xxx ro quiet splash

修改后:

1
linux /boot/vmlinuz-xxx root=UUID=xxx rw quiet splash init=/bin/bash
  1. 按 Ctrl+X 直接进入root shell

  2. 重置密码:

1
passwd ubuntu
  1. 重启系统:
1
exec /sbin/init

三、RHEL系 vs Ubuntu 重置密码核心区别

对比项 RHEL系(CentOS/Rocky/RHEL) Ubuntu/Debian
救援模式关键字 rd.break recovery mode / init=/bin/bash
SELinux处理 ✅ 必须 touch /.autorelabel ❌ 默认无SELinux,不需要
根分区挂载 /sysroot /
重置对象 passwd root passwd 普通用户 (或root)
默认root登录 启用 禁用(用sudo)

四、常见报错与解决方案

报错1:Authentication token manipulation error

1
passwd: Authentication token manipulation error

原因:文件系统是只读状态,无法写入新密码

解决方案:

RHEL系:

1
mount -o remount,rw /sysroot

Ubuntu:

1
mount -o rw,remount /

报错2:改完密码重启后登录失败(RHEL系)

原因:SELinux拦截了登录请求(密码正确但无法登录)

解决方案:

  • 重新走一遍整个流程

  • 在 chroot /sysroot 环境下一定要执行:

1
touch /.autorelabel
  • 重启时等待SELinux重标记完成

报错3:GRUB菜单一闪而过,看不到

解决方案:

  • RHEL系:开机时不停按 e 或 不停按 ↓

  • Ubuntu BIOS模式:开机时不停按 Shift

  • Ubuntu UEFI模式:开机时不停按 Esc

  • 云服务器:使用云厂商的控制台VNC连接,在控制台界面中操作

💡 虚拟机用户提示:VMware中开机后立即用鼠标点击黑屏区域,然后快速按对应按键,确保键盘输入被虚拟机捕获。

五、为什么RHEL系要有 /.autorelabel 这一步?

SELinux(Security-Enhanced Linux)会给每个文件打上安全上下文标签(类似于文件的“身份证”)。当你通过救援模式修改了 /etc/shadow(密码文件)时,这个文件的SELinux标签可能与当前策略不一致。

  • 有 /.autorelabel

     → 下次开机时系统会自动扫描并修正所有文件的SELinux标签 → 登录正常

  • 没有 /.autorelabel

     → SELinux策略和文件标签不一致,拒绝登录 → 进不去系统

🎯 记住:RHEL系无论用哪种方法,**修改密码后一定要执行 touch /.autorelabel**!Ubuntu用户直接跳过这步。

六、云服务器特别提醒

云平台 推荐方式 说明
阿里云 控制台 → 重置实例密码 官方功能,最省事
腾讯云 控制台 → 重置密码 不需要进GRUB
AWS EC2 分离根卷 → 挂载到临时实例修改 官方推荐方法

💡 强烈建议:云服务器优先使用云厂商提供的**「重置密码」**功能,远比手动进GRUB更安全、更方便!

七、完整操作速查卡片

RHEL系(CentOS/Rocky/RHEL)— rd.break 方式(推荐)

1
# GRUB界面按 e,在 linux 行尾加 rd.break 

RHEL系— init=/bin/bash 方式(备用)

1
# GRUB界面按 e,在 linux 行尾加 rw init=/bin/bash

Ubuntu — recovery mode 方式(推荐)

1
# GRUB界面选择 Advanced options → recovery mode → root

Ubuntu — init=/bin/bash 方式(备用)

1
# GRUB界面按 e,linux 行把 ro 改成 rw,行尾加 init=/bin/bash

八、快速对比总结表

操作步骤 RHEL系(CentOS/Rocky) Ubuntu/Debian
GRUB按键 按 e Shift (BIOS)/ Esc(UEFI)
内核参数 行尾加 rd.break recovery mode 或 init=/bin/bash
挂载命令 mount -o remount,rw /sysroot mount -o rw,remount /
切换环境 chroot /sysroot 不需要(直接在 / 下操作)
SELinux重标记 ✅ touch /.autorelabel ❌ 不需要
重置密码 passwd root passwd 用户名
重启 exit (自动重启) exec /sbin/init

📌

原文转载自微信公众号「walker-行者」Linux 系列。
原始链接:https://mp.weixin.qq.com/s?__biz=MzkwMDgyMTA2OQ==&mid=2247483819&idx=1&sn=39a10e5d9763aef8cd58381b48f9e6ca&chksm=c0bf7889f7c8f19f430d183b254d1ff67cc69b01c3f5b9e9ce9924a56bbe48c799953fa1efde&cur_album_id=4586547322464501762&scene=189#wechat_redirect

一篇掌握Linux用户管理的所有核心命令

一、用户管理命令速览

1.1 添加用户:useradd

1
# 基本语法

用户添加后的默认行为:

  • 自动创建同名家目录:/home/用户名

  • 自动创建同名用户组

  • 从 /etc/skel 复制初始配置文件

💡 Ubuntu/Debian 特别提醒:这些发行版默认不使用 useradd 的 -p 参数设置密码(因为不安全),而是推荐用 passwd 单独设置密码。useradd 在 Ubuntu 上默认也不会自动创建用户主目录,需要加 -m 参数(Debian 系通常建议使用 adduser 这个交互式工具更友好)。

1.2 设置/修改密码:passwd

1
# 基本语法

⚠️ 注意区分:passwd(设置密码) vs pwd(Print Working Directory,显示当前目录)

1.3 删除用户:userdel

bash

1
# 基本语法

是否保留家目录?

场景 推荐操作
普通员工离职 userdel 用户名 (保留家目录,归档数据)
测试账号清理 userdel -r 用户名 (彻底删除,不留痕迹)

💡 一般建议保留家目录,以防有重要数据需要备份。

1.4 查询用户信息:id

1
# 基本语法

输出说明:

  • uid:用户ID(User ID)

  • gid:主组ID(Group ID)

  • groups:所有所属组

二、身份查询与切换

2.1 查看当前登录用户

命令 功能
whoami 显示当前有效用户名(简单快捷)
who am i 显示登录时的用户信息(更详细,含终端、时间、IP)
who 显示所有当前登录用户的列表
三者区别:
1
[wal@localhost home]$ who am i

🎯 记住:who am i 查”我是谁登录进来的”,whoami 查”当前我以谁的身份在执行命令”。

2.2 切换用户:su

1
# 基本语法

2.3 ⚠️ su root vs su - root 核心区别

对比项 su root su - root
用户身份 ✅ 切换为root ✅ 切换为root
环境变量 ❌ 保留原用户 ✅ 重置为root环境
PATH路径 ❌ 原用户PATH ✅ root完整PATH
当前目录 ❌ 留在原目录 ✅ 切换到 /root
命令找不到? 有风险 ⚠️ ✅ 正常

🎯 日常运维必须用 su -,避免环境变量错乱导致命令找不到!su - 等价于 su - root。su(不加参数)默认切换到 root,但和 su root 一样是不完整切换,同样不推荐。

2.4 退出当前用户

1
exit

三、用户组管理

3.1 基本概念

Linux中,每个用户必须属于至少一个组,组用于统一管理权限。

3.2 组管理命令

1
# 添加组

3.3 添加用户时直接指定组

1
# 创建用户并指定所属组

四、用户/组相关配置文件

Linux的用户信息存储在三个核心文件中:

4.1 /etc/passwd —— 用户信息

1
# 查看内容
字段 含义
用户名 登录名
x 密码占位符(实际密码在 /etc/shadow)
UID 用户ID(0=root,1000+为普通用户)
GID 主组ID
注释 用户描述信息
家目录 用户登录后的起始目录
登录Shell 用户使用的Shell程序

4.2 /etc/shadow —— 加密密码

1
# 查看内容(需要root权限)

⚠️ 此文件只有root可读,存储用户密码的加密哈希值,千万不要随意修改!

4.3 /etc/group —— 组信息

1
# 查看内容
字段 含义
组名 组的名称
x 组密码占位符
GID 组ID
组内用户列表 属于该组的用户(逗号分隔)

五、完整实战演练

1
# 1. 添加新用户wol

六、命令速查卡片

操作 命令 示例
添加用户 useradd 用户名 useradd wol
指定家目录添加 useradd -d 目录 用户名 useradd -d /opt/wol wol
设置密码 passwd 用户名 passwd wol
删除用户 userdel 用户名 userdel wol
删除用户+家目录 userdel -r 用户名 userdel -r wol
查询用户信息 id 用户名 id wol
查看当前用户 whoami whoami
查看登录用户 who am i who am i
切换用户(完整) su - 用户名 su - wol
添加组 groupadd 组名 groupadd devops
删除组 groupdel 组名 groupdel devops
修改用户组 usermod -g 组名 用户名 usermod -g devops wol

三个关键文件

文件 作用
/etc/passwd 用户基本信息
/etc/shadow 用户加密密码
/etc/group 组信息
0%