📌 这一页是日常用得最多的一页:文件怎么操作、东西在哪找、怎么压缩,以及怎么定时干活。
八、文件操作
8.1 忘了命令怎么办
man 命令或配置文件 # 获取帮助信息
help 命令 # 获取 shell 内置命令的帮助信息
💡 实在看不懂 man,直接百度也可以 —— 这没什么丢人的。
8.2 目录操作
mkdir -p 多级目录 # -p 建多级目录;不加 -p 就是单个文件夹
rmdir 目录 # 只能删除空目录;多层时只删空的那层
rm -rf 目录 # 强制递归删除(很危险,一般不用)
⚠️rm -rf删下去没有回收站。养成习惯:先ls确认,再删。
8.3 复制与移动
touch 文件名
cp 选项 source(来源) dest(去处) # 选项不写就是复制文件
cp -r 目录 目标 # -r 递归,复制整个目录
mv 文件1(来) 文件2(去) # 同目录 = 重命名;不同目录 = 移动
几个细节:
- 第二次执行
cp会覆盖,系统会提示;不想要提示就写\cp - 如果 source 和 dest 都是文件,就会覆盖(名字不变,内容变)
cp和mv的共同点:当 dest 以/结尾,才会正常执行(移动到目录里)
8.4 查看文件内容
cat -n 文件 | more # -n 显示行号;方便浏览,一般加上 | more
# 回车向下一行,空格翻页
more 文件 # q 退出,Ctrl+F 下一屏,Ctrl+B 上一屏
# = 输出当前行号,:f 输出文件名和行号
less 文件 # 分屏查看,和 more 类似,空格 / page 键翻页
# /字串 搜索,回车后 n 向下找,N 向上找
# ?字串 反向搜索,n/N 方向和 / 相反;q 退出
echo 选项 输出内容 # 输出环境变量 / 引号内的内容
head 文件 # 默认查看前 10 行
head -n 5 文件 # 查看指定行数
tail -n 数值 文件 # 输出倒数数值行,无参数默认 10
tail -f 文件 # ⭐ 实时跟踪文件(看日志神器)
8.5 输出重定向
> 覆盖
>> 追加
只要是有内容输出的命令都能这么用(echo、ls、cat 都行),文件不存在会自动创建。
ls -l /etc/ > /tmp/to.txt # 把 /etc 的列表写进文件(覆盖)
date >> /tmp/to.txt # 把当前时间追加进去
8.6 其他常用
cal # 显示当月日历;cal 2026 就显示一整年 12 个月
ln -s 原文件/目录 软连接名 # 软链接:一个文件被多处共享,不用 cp,省资源
history 数值 # 查看历史命令,加数值显示最近 N 条
date # 看时间
date -s 字符串时间 # 设置系统时间
💡 软链接的删除和删除普通文件一样。history后输入编号会执行指令(推荐复制执行,别手滑)。
九、查找与解压缩
9.1 查找
find 范围 选项
# # 最好加上范围,缩短查询时间
# -name 文件名 按名字查
# -user 用户 按所属用户查
# -size +n/-n 按大小查(+ 大于,- 小于,记得带单位 K/M/G)
# 可以组合通配符 * 使用
which 指令 # 查看某个指令所在的目录
locate 文件 # 快速定位路径,第一次运行要执行 updatedb
# updatedb 会让系统文件目录形成自己的小数据库
grep -n "过滤内容" 被查找目标(文件)
# -n 显示行号
# 经常和 |(管道,前一个结果作为后一个的输入)结合
几个实用技巧:
find / -name "*.conf" # 找所有 .conf 文件
find /home -size +10M # 找大于 10M 的文件
ps -ef | grep sshd # 管道 + grep,最常用的组合
💡-h可以按人性化方式显示,比如ls -lh就会按 M 单位显示文件大小。
9.2 解压缩
gzip
gzip 文件 # 压缩为 .gz 格式
gunzip 文件.gz # 解压
zip / unzip
zip 选项 文件.zip 文件/文件夹
unzip 选项 文件.zip
# -r 递归压缩(压缩文件夹)
# -d 指定解压后的存放位置(目录)
zip -r a.zip /home/ # 把 home 及其子文件都压缩
unzip -d /opt/tmp a.zip # 解压到指定位置
tar(最常用)
tar 选项 包名 来源 # 来源可以写多个,空格分开,可以掺杂目录
# c 产生 .tar 文件
# v 显示信息
# f 指定压缩后文件名(放最后)
# z 打包同时压缩为 .tar.gz
# x 解压 .tar 文件
| 组合 | 作用 |
|---|---|
tar -zcvf 包名.tar.gz 文件 | 压缩为 .tar.gz |
tar -zxvf 包名.tar.gz | 解压 .tar.gz |
tar -cvf 包名.tar 文件 | 打包为 .tar |
tar -xvf 包名.tar | 解包 .tar |
tar -zxvf myhome.tar.gz -C /opt/temp2 | -C(大写)指定解压目标目录 |
🔑 记忆方法:c是 create(压缩),x是 extract(解压)。
剩下的z(gzip)、v(显示)、f(文件名)在两种情况下都一样。
十、定时任务调度
Linux 有两套定时机制,用途不同:
| 工具 | 特点 | 适用 |
|---|---|---|
| crond | 周期性重复执行 | 每天备份、每小时巡检 |
| atd | 一次性执行 | "两小时后帮我跑一下" |
10.1 crond —— 周期性任务
crond 作为后台进程常驻,每分钟检查一次任务表并调用。
┌─────────────────────────────┐
│ 脚本 / shell │
│ 比如:完成 mysql 备份 │
定时调用 │ 比如:把当前日期和日历 │
每分钟执行一次 ─→ crond │ 追加到 /home/mycal │
└─────────────────────────────┘
│
↓ 定时调用,每分钟执行一次
┌─────────────────────────────┐
│ 简单任务,比如就一条指令 │
│ ls -l /etc/ > /tmp/to.txt │
└─────────────────────────────┘
↑
/home/my.sh
[对 root 有执行权限]

⚠️ 使用脚本必须先添加执行权限 —— 脚本默认没有执行权限。
命令:
crontab -e # 编辑 crontab 定时任务
crontab -l # 查询当前任务
crontab -r # 删除当前用户所有的 crontab 任务
service crond restart # 重启任务调度
例子: 每隔一分钟执行一次
crontab -e
*/1 * * * * ls -l /etc/ > /tmp/to.txt

💡 五个字段分别是:分 时 日 月 周
注意两点:
- 删除目标文件之后,过了时间它还是会执行
- 但关机期间的任务不会补执行

10.2 atd —— 一次性任务
atd 也是后台进程,每 60 秒检查一次作业队列,有作业就比对运行时间,匹配就执行。
┌──────────────────────┐
│ job 队列 │
╭─────────╮ │ ┌────────────────┐ │
│ atd │ │ │ job1 │ │
│ 对每个作业│─60秒→│ │ 1. 指令 │ │
│ 执行一次 │ │ │ 2. shell 脚本 │ │
╰─────────╯ │ ├────────────────┤ │
│ │ job2 │ │
│ ├────────────────┤ │
│ │ ... │ │
│ └────────────────┘ │
└──────────────────────┘

⚠️ 必须保证atd进程在运行:ps -ef | grep "atd"
at 选项 时间 # 设置一次性定时任务,Ctrl + D 两次结束输入
例子: 两天后的下午 5 点执行
at 5pm + 2days
/bin/ls /home # 也可以是执行有 x 权限的脚本
# job 1 at Mon Jan 26 17:00:00 2026 ← 输出的 1 就是任务编号
atrm 编号 # 删除任务

at 的常用选项:
| 选项 | 作用 |
|---|---|
-m | 任务完成后给用户发送邮件,即使无标准输出 |
-l | atq 的别名(列出任务) |
-d | atrm 的别名(删除任务) |
-v | 显示任务的预计执行时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q <队列> | 使用指定队列 |
-f <文件> | 从指定文件读入,而不是从标准输入读入 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
这一页的要点
tail -f是看日志的必备技能>覆盖、>>追加,任何有输出的命令都能重定向cp/mv的目标以/结尾才当作目录tar记两个字母就够了:c压缩、x解压- crond 管周期任务,atd 管一次性任务
- crontab 五个字段:分 时 日 月 周;脚本必须先加执行权限