004 Linux基本指令
🦄 个人主页: 小米里的大麦-CSDN博客
🎏 所属专栏: Linux_小米里的大麦的博客-CSDN博客
🎁 GitHub主页: 小米里的大麦的 GitHub
⚙️ 操作环境: Visual Studio 2022
文章目录
- 写在最前
- 一、Linux 指令的本质与执行逻辑
- 二、核心设计哲学:Linux 下一切皆文件
- 三、用户与操作系统的交互机制
- 四、系统管理与高效操作技巧
- 五、总结与核心理念
- 重要的几个热键
- Linux 指令
- `touch` —— 创建文件/修改文件时间戳
- `man` —— 访问 Linux 手册页(重要)
- `cp` —— 复制文件或目录(重要)
- `mv` —— 移动或重命名文件和目录(重要)
- `cat` —— 查看目标文件的内容(不适合看大文本,适合看小文本)
- `echo` —— 输出文本或变量的值
- `more` —— 分页显示文件内容(功能类似 `cat` 适用于查看较长的文件)
- `less` —— 分页显示文件内容(比 `more` 更强大)(重要)
- `head` —— 显示文件的开头内容
- `tail` —— 显示文件的尾部内容
- 结合使用 `head` 和 `tail` —— 提取文件的指定行
- 方法 1: 使用临时文件
- 方法 2:使用管道
- 时间相关的指令
- `date` —— 显示和设置日期与时间
- `cal` —— 显示日历
- `*` 指令(通配符)
- `whereis` 指令 —— 查找命令的相关文件
- `find` —— 在文件系统中查找文件(非常重要)
- `grep` 指令 —— 搜索文件中的字符串
- `zip` / `unzip` 指令 —— 压缩和解压缩文件
- `tar` 指令 —— 打包和解包文件
- `bc` 指令 —— 命令行计算器
- `uname -r` 指令 —— 查看内核版本
- `shutdown` 指令(关机命令)
- 以下命令作为扩展:
- 共勉
写在最前
一、Linux 指令的本质与执行逻辑
-
指令与可执行程序的关系
- 指令即程序:用户输入的指令(如
ls
、cp
)本质是 可执行程序或脚本,以文件形式存储在系统路径中(如/bin
、/usr/bin
)。 - 位置依赖:指令执行前需在系统预设路径(由
$PATH
环境变量定义)中查找对应文件。若未找到,提示command not found
。
- 指令即程序:用户输入的指令(如
-
指令执行流程
- 查找与验证:系统按
$PATH
路径顺序搜索可执行文件,并检查文件权限(需具备可执行权限)。 - 执行过程:找到文件后,操作系统加载程序至内存运行,用户通过命令行解释器间接与内核交互。
- 查找与验证:系统按
二、核心设计哲学:Linux 下一切皆文件
-
抽象统一性
- 硬件设备抽象为文件:
- 显示器:通过
fwrite
写入数据(如echo "Hello" > /dev/tty
)。 - 键盘:通过
fread
读取输入(如cat /dev/input/eventX
)。
- 显示器:通过
- 统一操作接口:无论是硬件设备(如显示器、键盘)还是普通的文件,都可以通过文件操作进行读
read()
、写write()
等系统调用,简化编程与设备管理,更证实了 Linux 下一切皆文件。
- 硬件设备抽象为文件:
-
文件系统层级
- 普通文件:文本、二进制等常规数据。
- 特殊文件:设备文件(如
/dev/sda
)、管道文件、套接字文件等。
三、用户与操作系统的交互机制
-
命令行解释器(Shell)的核心作用
- 功能分层:
- 命令解析:将用户输入的字符串解析为可执行操作。
- 系统保护:拦截非法操作(如权限不足的命令、危险系统调用)。
- 必要性:直接操作内核复杂度高,Shell 提供安全且易用的交互层。
- 功能分层:
-
命令行提示符详解
- 示例:
[damai@VM-16-11-centos ~]$
- 用户名:
damai
(当前登录用户)。 - 主机名:
VM-16-11-centos
(标识运行环境)。 - 当前目录:
~
(用户家目录的简写,如/home/damai
)。 - 提示符:
$
表示普通用户,#
表示管理员(root)。
- 用户名:
- 示例:
四、系统管理与高效操作技巧
-
历史命令管理
- 记录与搜索:
- 默认保存最近 1000 条命令(通过
HISTSIZE
变量可调整)。 - 快捷键
CTRL + r
(支持模糊搜索)快速定位历史命令。
- 默认保存最近 1000 条命令(通过
- 持久化存储:历史记录保存在
~/.bash_history
,便于审计与回溯。
- 记录与搜索:
-
环境变量与路径管理
- PATH 变量:定义可执行文件的搜索路径,可通过
export PATH=$PATH:/custom/path
扩展。 - 查看路径:使用
which ls
或whereis ls
定位指令的存储位置。
- PATH 变量:定义可执行文件的搜索路径,可通过
-
系统运行模式
- 常开性设计:Linux 服务器通常长期运行(不关机),依赖以下特性:
- 高稳定性内核与进程管理。
- 日志系统(如
journalctl
)与监控工具(如top
)保障运维。
- 常开性设计:Linux 服务器通常长期运行(不关机),依赖以下特性:
五、总结与核心理念
- 指令本质:用户输入字符串 → Shell 解析 → 执行对应可执行文件。
- 文件抽象哲学:硬件、数据、操作均通过文件接口统一管理(Linux 中的一切皆文件)。
- 用户隔离设计:Shell 作为安全屏障,防止直接内核操作引发系统风险。
- 操作习惯:
- 善用历史命令提升效率。
- 理解环境变量配置优化工作流。
重要的几个热键
热键 | 功能描述 |
---|---|
Tab | 自动补全 命令或文件名 |
Ctrl + C | 终止 当前正在运行的命令(中断) |
Ctrl + D | 退出 当前 shell(相当于 exit 命令) |
Ctrl + L | 清屏,类似于 clear 命令,但不会清除历史记录 |
Ctrl + Shift + C | 复制 选中的文本 |
Ctrl + Shift + V | 粘贴 剪贴板中的内容 |
Ctrl + A | 移动光标到当前行的开头 |
Ctrl + E | 移动光标到当前行的结尾 |
Ctrl + U | 删除光标到行首的内容 |
Ctrl + K | 删除光标到行尾的内容 |
Ctrl + W | 删除光标前的单词 |
Ctrl + Z | 将当前进程挂起并放入后台 |
Ctrl + Shift + T | 新建一个终端标签页 |
Ctrl + Shift + W | 关闭当前的终端标签页 |
Linux 指令
touch
—— 创建文件/修改文件时间戳
1. 语法:touch [选项] 文件名...
2. 常用选项
选项 | 作用 |
---|---|
-a | 仅修改文件的 访问时间(Access Time) |
-c | 不创建 新文件(如果文件不存在,则不会创建) |
-d "时间字符串" | 以指定时间字符串设置时间戳(支持相对时间) |
-f | 兼容性选项,通常无实际作用(可忽略) |
-m | 仅修改文件的 修改时间(Modify Time) |
-r 参考文件 | 使用参考文件的时间戳 |
-t [[CC]YY]MMDDhhmm[.ss] | 以指定格式手动设置时间戳 |
3. 使用示例
① 创建一个新文件:touch newfile.txt
,如果 newfile.txt
不存在,则创建一个空文件;如果已存在,则更新时间戳。
② 仅修改文件的访问时间:touch -a file.txt
,只更新 file.txt
的访问时间,修改时间不变。
③ 不创建新文件,仅更新时间:touch -c file.txt
,如果 file.txt
不存在,则不创建新文件。
④ 使用时间字符串:touch -d "2025-01-01 00:00:00" file.txt
,将 file.txt
的时间戳修改为 2025 年 01 月 01 日 00:00:00。
⑤ 仅修改文件的修改时间:touch -m file.txt
,只更新 file.txt
的修改时间,访问时间不变。
⑥ 使用参考文件的时间戳:touch -r reference.txt target.txt
,让 target.txt
的时间戳与 reference.txt
相同。
⑦ 指定时间戳:touch -t 202501011230.45 file.txt
,设置 file.txt
的时间为 2025 年 01 月 01 日 12:30:45。
⑧ 查看文件的时间戳: stat file.txt
。
man
—— 访问 Linux 手册页(重要)
man
是用来查看 Linux 命令、程序、配置文件等的手册页的工具。通过它,你可以快速了解命令的用法、选项、示例等详细信息。在命令行中输入 man man
的作用是显示 man
命令自身的手册页。
1. 语法:man [选项] 命令
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-k | 根据关键词搜索命令或手册内容 | man -k copy :搜索所有与“copy”相关的命令,如 cp 。 |
-f | 显示命令的简短描述 | man -f ls :显示 ls 命令的简短描述(类似 whatis )。 |
-a | 打开所有相关的手册页 | man -a ls :打开所有与 ls 相关的手册页。 |
-s | 指定章节号查看手册 | man -s 5 passwd :查看 passwd 的第 5 章手册页(文件格式)。 |
-c | 清除缓存并打开手册页 | man -c ls :清除缓存并打开 ls 的手册页。 |
3. 查阅命令的不同部分:手册页通常会分为几个部分,不同章节对应不同类型的命令。常见的部分包括:
- 1:用户命令(User Commands)
- 2:系统调用(System Calls)
- 3:库函数(Library Functions)
- 4:设备(Devices)
- 5:文件格式(File Formats)
- 6:游戏(Games)
- 7:杂项(Miscellaneous)
- 8:系统管理命令(System Administration Commands)
4. 分页浏览:手册页通常是通过分页器(如 less
)显示的,浏览时不能使用鼠标滚轮,推荐直接使用方向键,以下是一些常用的分页操作:
操作 | 说明 |
---|---|
空格键 | 向下滚动一页。 |
B | 向上滚动一页。 |
Enter | 向下滚动一行。 |
/关键词 | 搜索关键词。在 man 命令的输出中,按 / 键进入搜索模式,查找手册页中的特定内容。例如:按下 / 键后输入 -l ,搜索 ls 手册页中的 -l 。 |
N | 查找下一个匹配的关键词。 |
Q | 退出手册页。 |
cp
—— 复制文件或目录(重要)
cp
是 Linux 系统中用来复制文件或目录的命令。它可以复制单个文件、多个文件以及整个目录,并且支持多种选项来定制复制行为。说明: 如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
1. 语法:cp [选项] 源文件 目标文件
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-r 或 -R 或 --recursive | 递归复制目录及其内容(适用于目录) | cp -r /source/dir /dest/dir :复制整个目录及其内容到目标目录。-r 和 -R 都是递归选项,用来复制目录及其内容。它们的功能是完全相同的,因此你可以根据自己的喜好选择使用大写或小写。 |
-f 或 --force | 强制复制,覆盖目标文件时不询问 | cp -f file1 file2 :如果目标文件已存在,则直接覆盖,不询问。 |
-i 或 --interactive | 覆盖文件之前 提示 用户确认 | cp -i file1 file2 :如果 file2 已存在,系统会提示是否覆盖。 |
-v 或 --verbose | 显示详细的输出,列出每个复制的文件 | cp -v file1 file2 :复制时显示文件复制过程。 |
-p 或 --preserve | 保持文件的属性(如修改时间、权限等) | cp -p file1 file2 :复制时保留文件的时间戳和权限。 |
3. 示例:
- 复制文件:
cp file1.txt file2.txt
,这个命令将file1.txt
复制到file2.txt
,如果file2.txt
已存在,它会被覆盖。 - 复制目录:
cp -r /home/user/dir /home/user/backup/
,这个命令将目录/home/user/dir
及其所有内容递归地复制到/home/user/backup/
目录下。 - 递归复制并显示详细输出:
cp -rv /home/user/dir /home/user/backup/
,这个命令会递归地复制目录,并显示每个文件和目录的复制过程。 - 复制文件,覆盖前询问确认:
cp -i file1.txt file2.txt
,如果file2.txt
已存在,-i
选项会提示你是否覆盖该文件。
4. 其他说明: cp
命令支持多种组合选项,可以根据需要灵活使用,结合不同选项可以实现很多高级操作。它是一个非常常见且实用的命令,几乎在所有 Linux 系统中都可以找到它。
mv
—— 移动或重命名文件和目录(重要)
mv
是 Linux 中用来移动文件或目录的命令,也可以用来重命名文件或目录。它非常常用,通常用于将文件从一个位置移动到另一个位置,或者给文件和目录重新命名。
1. 语法:mv [选项] 源文件/目录 目标文件/目录
- 移动文件:将源文件移动到目标位置。
- 重命名文件:将源文件重命名为目标文件。
- 移动目录:将源目录及其内容移动到目标位置。
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-i 或 --interactive | 在覆盖文件之前询问用户确认 | mv -i file1.txt file2.txt :如果 file2.txt 已存在,系统会询问是否覆盖。 |
-f 或 --force | 强制执行,不询问用户直接覆盖文件 | mv -f file1.txt file2.txt :如果目标文件已存在,则直接覆盖。 |
-u 或 --update | 仅在源文件比目标文件新时才进行移动或重命名 | mv -u file1.txt file2.txt :如果 file1.txt 比 file2.txt 新,则移动。 |
-v 或 --verbose | 显示详细的输出,列出每个移动或重命名的文件操作 | mv -v file1.txt /home/user/backup/ :移动文件并显示操作过程。 |
-n 或 --no-clobber | 不覆盖已存在的目标文件,若目标文件已存在则不进行操作 | mv -n file1.txt file2.txt :如果 file2.txt 已存在,不会覆盖。 |
-b 或 --backup | 在覆盖文件之前,先备份目标文件(备份文件名后缀为 ~ ) | mv -b file1.txt file2.txt :覆盖时会保留 file2.txt~ 作为备份文件。 |
3. 重要说明:
mv
可以用来重命名文件和目录,因此可以简单地通过给目标文件/目录提供新名称来完成重命名操作(重命名:当第二个参数是文件时,mv
会将源文件重命名为目标文件名。移动文件或目录:当第二个参数是已存在的目录时,mv
会将源文件或目录移动到该目录中)。- 如果目标位置已经存在一个同名文件或目录,默认情况下,
mv
会覆盖它。 mv
操作的结果是原文件或目录会从原位置移除,而不会再保留一份副本。-i
选项非常有用,它在移动或重命名时会提示你确认是否覆盖已有文件,防止误操作。-f
是强制选项,它会直接覆盖文件或目录,避免询问确认。
mv
是一个非常强大且灵活的命令,适用于文件和目录的移动、重命名等常见操作,尤其在文件管理、备份和文件系统操作中常用。
cat
—— 查看目标文件的内容(不适合看大文本,适合看小文本)
1. 语法:cat [选项] [文件]...
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-n 或 --number | 给每一行加上行号 | cat -n file.txt :为 file.txt 的每行添加行号后输出。 |
-b 或 --number-nonblank | 只给非空行加上行号 | cat -b file.txt :只为 file.txt 的非空行添加行号后输出。 |
-s 或 --squeeze-blank | 压缩连续的空行成一行 | cat -s file.txt :如果 file.txt 中有连续的空行,则将其压缩成一行。 |
-E 或 --show-ends | 在每行结尾显示 $ 字符 | cat -E file.txt :在 file.txt 每一行末尾加上 $ 后输出。 |
3. 重要说明:
cat
最常见的用途是显示文件内容,例如cat file.txt
会将file.txt
的内容输出到终端。- 它也可以用于一次性查看多个文件的内容,例如
cat file1.txt file2.txt
会依次显示这两个文件的内容。 - 输入重定向:
cat
还能用于创建文件,如cat > newfile.txt
然后输入内容,按Ctrl+D
结束输入并保存;cat < temp.txt
默认行为:cat
从键盘(标准输入)读取内容并显示,使用<
,cat
从指定的文件读取内容,而不是从键盘。 - 当使用
cat
连接文件时,比如cat file1.txt file2.txt > combined.txt
,它会将两个文件的内容合并到一个新的文件中。 cat
可以通过组合选项来执行更多功能,比如显示行号、显示制表符、查看不可打印字符等,这对于调试文件、查看格式化问题等非常有用。cat
通常用来快速查看文件的内容,适合小文件。如果文件内容较长,使用cat
可能会导致终端滚动过快,难以阅读,此时可以考虑使用less
或more
命令。
echo
—— 输出文本或变量的值
echo
用于在终端中输出文本或变量的值。它常用于脚本中打印调试信息、向用户显示提示信息,或将输出写入文件。
1. 语法:echo [选项] [文本]
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-n | 不在输出的末尾添加换行符 | echo -n "Hello" :输出 Hello ,但不换行。 |
-e | 启用转义字符解析(如 \n 、\t 等) | echo -e "Line1\nLine2" :输出两行 Line1 和 Line2 ,用换行符分隔。 |
-E | 禁用转义字符解析(这是默认行为) | echo -E "Line1\nLine2" :输出 Line1\nLine2 ,不会换行。 |
--help | 显示 echo 命令的帮助信息 | echo --help :显示 echo 命令的帮助文档。 |
--version | 显示 echo 命令的版本信息 | echo --version :显示 echo 命令的版本信息。 |
3. 常见用法:
- 输出文本:
echo "Hello, World!"
:输出Hello, World!
。 - 显示变量的值:
name="Alice"; echo $name
:输出变量name
的值,结果为Alice
。 - 输出带换行符的文本:
echo "Hello\nWorld"
:输出Hello
和World
,并换行。若使用-e
选项才能正确解析换行符。 - 不换行输出:
echo -n "Hello"
:输出Hello
,但不自动换行。 - 启用转义字符解析:
echo -e "Hello\tWorld"
:输出Hello
和World
,并在它们之间加入一个制表符(tab)。 - 重定向输出到文件:
- 示例:
echo "Hello" > file.txt
:将Hello
写入file.txt
文件中。如果文件已存在,则会覆盖它。 - 示例:
echo "Hello" >> file.txt
:将Hello
追加到file.txt
文件末尾。
- 示例:
4. 重要说明:
echo
默认会在输出内容的末尾添加换行符。如果不需要换行符,可以使用-n
选项。- 启用转义字符解析时,
echo
会识别诸如\n
(换行符)、\t
(制表符)、\r
(回车符)等特殊字符,需要使用-e
选项才能生效。 - 如果你需要在脚本或命令行中快速查看某个变量的值,
echo
是一个非常方便的工具。
more
—— 分页显示文件内容(功能类似 cat
适用于查看较长的文件)
more
是 Linux 中用来分页显示文本文件内容的命令,通常用于查看较长的文件,逐页显示文件内容,直到文件结束。当文件内容过长时,more
会将内容分成一页一页地显示,你可以通过键盘命令逐页查看文件内容。
1. 语法:more [选项] 文件
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-n | 设置每页显示的行数 | more -5 file.txt :每页显示 5 行,文件内容逐页显示。 |
+NUM | 从文件的第 NUM 行开始显示 | more +10 file.txt :从第 10 行开始显示文件内容。 |
-c | 清屏显示(每次显示内容前先清屏) | more -c file.txt :显示文件内容时,每一页都会先清屏。 |
-s | 压缩连续的空白行,显示为一行 | more -s file.txt :显示文件时连续的空行会被压缩成一行。 |
-d | 在文件结束时显示 --More--(next) 提示符(可以使用 q 退出) | more -d file.txt :结束时显示提示符,用户可以按 q 退出。 |
-p | 在显示内容时,保持当前页面的显示,不使用滚动条 | more -p file.txt :显示文件时,每页会直接覆盖,不滚动。 |
3. 分页浏览操作: more
通过分页器显示文件内容,推荐使用方向键,也可以使用以下键进行浏览:
操作 | 说明 |
---|---|
空格键 | 向下翻一页 |
Enter | 向下滚动一行 |
B | 向上翻一页 |
/关键词 | 搜索关键词,在文件内容中查找。 |
N | 查找下一个匹配的关键词 |
Q | 退出 more ,停止文件浏览 |
H | 显示 more 命令的帮助信息 |
D | 向下滚动半页 |
U | 向上滚动半页 |
4. 管道用法与分页显示
more
命令不仅限于直接显示文件内容,它还可以与其他命令结合使用,通过管道(pipe)将命令的输出分页显示。管道符号 |
是用来将前一个命令的输出作为输入传递给后一个命令的。这意味着,第一个命令的标准输出(stdout
)被“传递”到第二个命令的标准输入(stdin
)。例如:
ls -l / | more
:ls
命令列出/
目录下的文件和子目录,-l
选项让ls
显示文件的详细信息,包括权限、拥有者、大小等。more
命令接收从ls -l /
命令输出的数据,并分页显示它。因为/
目录下通常包含很多文件,使用more
可以让你逐页查看输出。ps aux | more
:分页显示所有当前运行的进程。
管道(Pipe)概念:
管道符号 |
用来将前一个命令的输出传递给下一个命令作为输入。也就是说,more
可以接收其他命令的输出并逐页显示,而不是单独显示文件内容。通过管道可以方便地查看大量命令输出的内容。
为什么使用管道?
ls -l /
的输出可能很长,直接在终端中显示出来可能会很难查看。通过管道将输出传递给 more
命令,可以让你一页一页地查看内容,避免内容溢出屏幕。
less
—— 分页显示文件内容(比 more
更强大)(重要)
less
与 more
相似,都是用来分页显示文件内容,但 less
提供了更多的控制和操作选项。与 more
相比:less
提供了更高的灵活性,可以向前和向后翻阅文件内容,同时支持更丰富的搜索功能。与 more
不同:less
会在查看文件时不会一次性加载整个文件,而是按需加载数据,这样更加高效。
1. 语法: less [选项] 文件
less
工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大。less
的用法比起more
更加的有弹性。在more
的时候,我们并没有办法向前面翻, 只能往后面看- 但若使用了
less
时,就可以使用 【pageup
】【pagedown
】 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容! - 除此之外,在
less
里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-i | 搜索时忽略大小写 | less -i file.txt :在搜索时忽略大小写。 |
-N | 显示每行的行号 | less -N file.txt :显示每行内容时,在行首显示行号。 |
/字符串 | 向下搜索指定的字符串 | /error :在文件中向下搜索并定位到包含 “error” 的行。 |
?字符串 | 向上搜索指定的字符串 | ?warning :在文件中向上搜索并定位到包含 “warning” 的行。 |
n | 重复上次的向下搜索 | n :再次向下查找上次搜索的字符串。 |
N | 反向重复上次的搜索 | N :反向查找上次搜索的字符串。 |
q | 退出 less ,停止文件浏览 | q :退出 less ,停止文件的浏览。 |
3. 分页浏览操作: 与 more
类似,less
也支持分页显示文件内容,且可以使用更多的翻页和搜索操作。以下是常用的分页浏览操作:
操作 | 说明 |
---|---|
空格键 | 向下翻一页 |
Enter | 向下滚动一行 |
B | 向上翻一页 |
PageUp | 向上翻一页 |
PageDown | 向下翻一页 |
Q | 退出 less ,停止文件浏览 |
H | 显示 less 命令的帮助信息 |
G | 跳转到文件末尾 |
g | 跳转到文件开头 |
D | 向下滚动半页 |
U | 向上滚动半页 |
4. 管道用法与分页显示
与 more
一样,less
也支持管道操作,可以将其他命令的输出通过管道传递给 less
进行分页显示。例如:
ls -l / | less
:通过管道将ls -l /
的输出传递给less
,实现分页显示/
目录下的详细文件信息。
管道符号 |
用来将前一个命令的输出传递给下一个命令作为输入。通过管道,可以方便地查看其他命令的输出,而不必一次性加载全部内容。
head
—— 显示文件的开头内容
head
命令用于显示文件的开头部分内容,默认情况下,head
会显示文件的前 10 行。你可以通过 -n
选项来指定显示更多或更少的行。
1. 语法: head [选项]... [文件]...
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-n <行数> | 指定要显示的行数 | head -n 20 file.txt :显示 file.txt 的前 20 行。 |
-c <字节数> | 显示文件的前 <字节数> 个字节 | head -c 50 file.txt :显示 file.txt 的前 50 个字节。 |
-q | 不显示文件名(用于多个文件时) | head -n 10 file1.txt file2.txt :默认会显示文件名,-q 选项可以去除文件名。 |
3. 示例:
head -n 10 file.txt
:显示文件file.txt
的前 10 行(默认行为)。head -n 50 file.txt
:显示file.txt
的前 50 行。head -c 100 file.txt
:显示file.txt
的前 100 字节。
tail
—— 显示文件的尾部内容
tail
命令用于显示文件的尾部内容,通常用来查看日志文件的最新内容。默认情况下,tail
会显示文件的最后 10 行。你可以通过 -n
选项来指定显示的行数,使用 -f
选项可以实时查看文件内容的变化(常用于查看实时日志)。
1. 语法: tail [选项] [文件]
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-n <行数> | 显示文件的最后 <行数> 行内容 | tail -n 20 file.txt :显示 file.txt 的最后 20 行。 |
-f | 实时跟踪文件内容的变化,常用于查看日志文件 | tail -f file.log :实时显示 file.log 文件的最新内容。 |
-c <字节数> | 显示文件的最后 <字节数> 个字节 | tail -c 100 file.txt :显示 file.txt 的最后 100 个字节。 |
3. 示例:
tail -n 10 file.txt
:显示file.txt
的最后 10 行(默认行为)。tail -n 50 file.txt
:显示file.txt
的最后 50 行。tail -f /var/log/syslog
:实时显示syslog
文件的新内容,适用于查看实时日志。tail -n 20 file.txt | head -n 10
:先显示file.txt
的最后 20 行,再从中显示前 10 行。
结合使用 head
和 tail
—— 提取文件的指定行
在某些情况下,我们需要从文件中提取指定行。head
和 tail
结合使用可以很方便地实现这一功能。
举例: 假设有一个文件 test
,它有 100 行内容,如果我们想要提取第 50 行,可以使用以下方法:
方法 1: 使用临时文件
head -n 50 test > tmp # 将前 50 行存入临时文件 tmp
tail -n 1 tmp # 获取临时文件 tmp 的最后一行,即第 50 行
方法 2:使用管道
head -n 50 test | tail -n 1 # 先用 head 提取前 50 行,再用 tail 提取最后一行(即第 50 行)
这种方法可以灵活提取文件中间的指定行,通过 head
和 tail
的组合,方便地提取任何位置的内容。
时间相关的指令
在 Linux 中,时间相关的操作可以通过 date
命令进行。date
命令用于显示和设置系统的日期和时间,同时它也支持转换时间戳,格式化输出等功能。
date
—— 显示和设置日期与时间
date
命令用于显示当前的日期和时间,或者设置系统的时间。
1. 显示当前时间: date
可以按照指定的格式显示当前的日期和时间。语法如下:
date [OPTION]... [+FORMAT]
+FORMAT
可以自定义显示的时间格式,格式由一系列标记组成,常见的标记有:
标记 | 含义 | 示例 |
---|---|---|
%H | 小时(00…23) | date +%H → 14 |
%M | 分钟(00…59) | date +%M → 30 |
%S | 秒(00…61) | date +%S → 15 |
%X | 相当于 %H:%M:%S | date +%X → 14:30:15 |
%d | 日(01…31) | date +%d → 23 |
%m | 月份(01…12) | date +%m → 02 |
%Y | 完整年份(0000…9999) | date +%Y → 2025 |
%F | 相当于 %Y-%m-%d | date +%F → 2025-02-23 (这样的格式更 常用) |
示例:
date +%Y-%m-%d
: 显示当前日期,格式为年-月-日
,如2025-02-23
。date +%H:%M:%S
:显示当前时间,格式为小时:分钟:秒
,如14:30:15
。date +%F
:显示当前日期,格式为年-月-日
,如2025-02-23
。
2. 设置时间:
date
命令也可以用来设置系统的日期和时间。此功能通常需要 root 权限才能执行。
语法:date -s "YYYY-MM-DD HH:MM:SS"
设置日期和时间: 可以用 -s
选项设置日期和时间。例如:
date -s "2025-02-23 01:01:01"
:将系统时间设置为2025-02-23 01:01:01
。date -s "01:01:01"
:设置具体的时间(日期保持当前系统时间)。date -s "2025-02-23"
:仅设置日期为2025-02-23
,时间默认为00:00:00
。date -s "01:01:01 2025-02-23"
:设置日期和时间为2025-02-23 01:01:01
。
3. 时间戳相关操作:
date
命令可以方便地在日期和时间与 Unix 时间戳之间进行转换。
-
日期转换为时间戳:
date +%s
:这将输出当前时间的 Unix 时间戳,表示从1970年1月1日 00:00:00 UTC(协调世界时)
到当前时间所经过的秒数。示例:date +%s # 输出类似: 1738486946
-
时间戳转换为日期: 使用
-d
选项和@<时间戳>
,可以将 Unix 时间戳转换为可读的日期和时间。date -d @1738486946
:这将输出 Unix 时间戳1738486946
对应的日期和时间。示例:date -d @1738486946 # 输出类似: Sun Feb 2 17:02:26 CST 2025date -d @0 Thu Jan 1 08:00:00 CST 1970 # 这里日期其实应该是1970年1月1日 00:00:00,但是由于CST(中国标准时间)是 UTC +8 时区,所以它比 UTC 时间快 8 小时。
cal
—— 显示日历
cal
命令是 Linux 中用来显示公历(阳历)日历的命令,广泛用于查看某个月或某一年的日历。cal
显示的日历基于公历(格列历),通常用于日常的时间安排或日期查询。
1. 语法:cal [参数] [月份] [年份]
- 月份:指定某个月的日历,1 到 12 的整数,表示月份。
- 年份:指定某一年的日历,1 到 9999 的整数,表示年份。
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-3 | 显示系统前一个月、当前月和下一个月的月历 | cal -3 :显示当前月及前后一个月的日历。 |
-j | 显示当前日期在当年中的第几天(默认显示当前月在一年中的天数) | cal -j :显示当前月份和当前日期在一年中的第几天。 |
-y | 显示当前年份的完整日历 | cal -y :显示当前年份的完整日历。 |
-m | 显示指定月份的日历(不指定年份默认当前年份) | cal 6 :显示当前年份的 6 月份日历。 |
-A | 显示当前月份及其后 A 个月的日历 | cal -A 3 :显示当前月份及之后 3 个月的日历。 |
-B | 显示当前月份及其前 B 个月的日历 | cal -B 2 :显示当前月份及之前 2 个月的日历。 |
3. 示例:
-
查看当前月份的日历:
cal
:默认显示当前月的日历。 -
查看指定月份和年份的日历:
cal 12 2025
:显示 2025 年 12 月的日历。 -
查看当前年份的完整日历:
cal -y
: 显示完整的当前年份的日历。 -
查看当前月、前一个月和下一个月的日历:
cal -3
:显示当前月、前一个月和下一个月的日历。 -
查看当前日期是今年的第几天:
cal -j
:显示当前日期是当前年份的第几天。 -
如果你只输入一个数字
cal 12
,它会默认显示当前年份的指定月份12
的日历。 -
cal -A
和cal -B
可以让你一次性查看前后的月份。
*
指令(通配符)
在 Linux 中,*
并不是一个命令,而是一个常用的通配符(wildcard),表示匹配任意数量的字符(包括零个字符)。它在文件名扩展(glob)操作中被广泛使用,特别是在命令行中与其他命令一起使用,它可以用于匹配文件或目录的名称,常用于文件查找、复制、删除等操作。
常见用途:
-
匹配所有文件:
*
可以用来匹配当前目录下所有的文件和子目录(包括隐藏文件和目录除外)。ls *
-
匹配特定类型的文件:使用
*
来匹配特定类型的文件,例如所有.txt
文件,该命令会列出当前目录下所有扩展名为.txt
的文件:ls *.txt
-
匹配多个字符:
*
可以替代文件名中的任意字符(包括多个字符),比如查找包含特定前缀或后缀的文件,该命令会列出所有以file
开头的文件:ls file*
-
与其他命令结合使用:
*
可以与其他命令结合使用来实现批量操作,该命令会删除当前目录下所有扩展名为.log
的文件:rm *.log
注意事项:
*
只匹配非隐藏文件。如果你需要包括隐藏文件,可以使用.*
或.* *
来匹配。*
不匹配目录结构中的分隔符/
,即它不会匹配子目录的名字。- 如果文件名中包含特殊字符(如空格、星号、问号等),你可能需要用引号或转义字符来处理这些字符。
whereis
指令 —— 查找命令的相关文件
whereis
是 Linux 中用来查找命令的二进制文件、源代码文件和手册页位置的命令。它不会像 which
命令那样仅搜索 PATH
环境变量指定的目录,而是搜索一些常见的系统路径。通常用于快速定位某个命令或程序的安装位置,尤其是二进制文件和相关文档。
语法:whereis [选项] [命令或文件]
常用选项:
选项 | 描述 |
---|---|
-b | 查找命令的二进制文件(binary files)。 |
-m | 查找命令的手册页(man pages)。 |
-s | 查找命令的源代码文件(source files)。 |
-u | 显示未找到命令的路径。 |
基本用法:
-
查找命令的二进制文件、源代码和手册页:
whereis ls
该命令会查找
ls
命令的相关文件,输出类似:ls: /bin/ls /usr/share/man/man1/ls.1.gz
这表示
ls
的二进制文件位于/bin/ls
,手册页位于/usr/share/man/man1/ls.1.gz
。 -
仅查找命令的二进制文件:
whereis -b ls
该命令只查找
ls
的二进制文件,输出:ls: /bin/ls
-
仅查找命令的手册页:
whereis -m ls
该命令只查找
ls
的手册页,输出:ls: /usr/share/man/man1/ls.1.gz
-
仅查找命令的源代码文件:
whereis -s ls
该命令查找
ls
的源代码文件,如果系统中有相关源代码,则会输出相关路径。 -
查找命令或程序是否安装: 如果你 不知道某个命令是否安装,可以用
whereis
检查该命令的位置:whereis xyz
如果返回为空,说明该命令或文件在系统中未找到。
注意事项:
whereis
搜索的目录是固定的,主要包括系统的标准目录,比如/bin
、/usr/bin
、/sbin
、/usr/sbin
等,因此它可能不会显示在其他非标准路径上的文件。- 与
which
命令不同,whereis
搜索的范围更广,包含了手册页和源代码等信息。
find
—— 在文件系统中查找文件(非常重要)
find
是一个功能强大的 Linux 命令,用于在文件系统中查找文件或目录,并对它们执行指定的操作。由于 Linux 的文件系统通常包含大量文件,find
命令提供了高效的查找功能,并支持多种条件和操作,非常适用于搜索文件、管理文件、批量处理文件等任务。
1. 语法:find [路径] [选项] [条件] [操作]
- 路径:指定查找的目录路径,如果不指定路径,默认为当前目录。
- 选项:用于修改
find
命令的行为。 - 条件:定义查找的条件,例如按文件名、修改时间、文件大小等查找。
- 操作:在查找到符合条件的文件后,执行相应的操作,如显示文件、删除文件、修改文件权限等。
2. 常用选项和条件:
选项/条件 | 解释说明 | 示例与说明 |
---|---|---|
-name | 按文件名查找文件,支持通配符 * 、? 等匹配方式。 | find /home -name "*.txt" :在 /home 目录下查找所有 .txt 文件。 |
-type | 按文件类型查找文件,常用类型有 f (普通文件)、d (目录)、l (符号链接)等。 | find / -type f :查找系统中所有普通文件。 |
-size | 按文件大小查找文件,支持指定文件大小单位(b 、c 、k 、M 等)。 | find /var -size +10M :查找 /var 目录下大于 10MB 的文件。 |
-mtime | 按修改时间查找文件,单位为天数,+ 表示大于指定天数,- 表示小于指定天数。 | find /tmp -mtime -7 :查找最近 7 天内修改过的文件。 |
-atime | 按访问时间查找文件,单位为天数,+ 和 - 与 -mtime 类似。 | find /home/user -atime +30 :查找 30 天前访问过的文件。 |
-exec | 对查找到的文件执行指定的命令,常用于批量处理文件。 | find /home -name "*.log" -exec rm -f {} \; :查找并删除所有 .log 文件。 |
-print | 显示查找到的文件,默认情况下会显示。 | find /home -name "*.txt" -print :查找 .txt 文件并显示它们。 |
-maxdepth | 限制查找的目录层级,防止遍历过深的目录结构。 | find / -maxdepth 2 :查找 / 目录下最多 2 层的文件。 |
-mindepth | 限制查找的最小目录层级。 | find / -mindepth 2 :查找 / 目录下从第二层开始的文件。 |
3. 示例:
-
按文件名查找文件:
find /home/user -name "*.txt" # 查找 `/home/user` 目录下所有扩展名为 `.txt` 的文件
-
查找特定类型的文件:
find / -type d -name "Documents" # 查找系统中所有名为 `Documents` 的目录
-
查找最近 7 天内修改过的文件:
find /tmp -mtime -7 # 查找 `/tmp` 目录下最近 7 天内修改过的文件
find /var/log -name "*.log" -mtime +7 -exec rm {} \; # 查找并删除7天前的日志文件
-
查找并删除文件:
find /home/user -name "*.bak" -exec rm -f {} \; #查找 `/home/user` 目录下所有扩展名为 `.bak` 的文件,并删除它们
-
查找并显示所有文件的大小:
find /var -type f -exec du -h {} \; # 查找 `/var` 目录下所有的普通文件,并显示它们的大小
-
查找并显示文件的权限:
find / -name "*.sh" -exec ls -l {} \; # 查找所有 `.sh` 文件,并显示它们的详细权限和属性
4. 小技巧:
-
使用
-prune
跳过某些目录: 如果你想跳过某些目录,可以使用-prune
选项。find /home -path "/home/user/ignore" -prune -o -name "*.txt" -print # 这个命令会跳过 `/home/user/ignore` 目录,只查找其他 `.txt` 文件
-
结合
-exec
使用{} \;
或+
:-exec
后面可以跟{}
来代表当前查找到的文件。\;
:每找到一个文件,执行一次命令。+
:将多个文件作为一次命令的参数传递,效率更高。
find /home -name "*.txt" -exec cat {} \; find /home -name "*.txt" -exec cat {} +
grep
指令 —— 搜索文件中的字符串
grep
是一个强大的文本搜索工具,通过指定的字符串(或模式)来查找文件中的匹配内容,并打印出匹配到的行。它的名字来源于 “global regular expression print”,意味着支持使用正则表达式,根据正则表达式搜索内容并打印匹配的行。
1. 语法:grep [选项] 搜寻字符串 文件
- 选项:用于修改
grep
的行为。 - 搜寻字符串:指定需要查找的模式或字符串。
- 文件:指定要搜索的文件,支持多个文件。
2. 常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-i | 忽略大小写,匹配时不区分大小写 | grep -i "pattern" file.txt :搜索文件中的 “pattern”,忽略大小写。 |
-n | 显示匹配行的行号 | grep -n "pattern" file.txt :输出匹配行和相应的行号。 |
-v | 反向选择,显示不包含匹配字符串的行 | grep -v "pattern" file.txt :输出不包含 “pattern” 的行。 |
-r 或 -R | 递归查找目录下的文件,-r 和 -R 功能相同,保留两者仅为兼容性考虑。 | grep -r "pattern" dir/ :在 dir/ 目录及其子目录下查找 “pattern”。 |
-l | 只输出包含匹配字符串的文件名,而不是具体内容 | grep -l "pattern" *.txt :列出包含 “pattern” 的所有 .txt 文件。 |
-w | 只匹配整个单词(完全匹配) | grep -w "word" file.txt :只匹配整个 “word”,而不是 “wording”。 |
-c | 显示匹配行的数量 | grep -c "pattern" file.txt :显示文件中 “pattern” 出现的次数。 |
-H | 显示匹配内容的文件名(默认启用,仅针对多个文件) | grep -H "pattern" *.txt :显示文件名和匹配内容。 |
-A NUM | 显示匹配行之后的 NUM 行 | grep -A 3 "pattern" file.txt :显示匹配行及其后的 3 行内容。 |
-B NUM | 显示匹配行之前的 NUM 行 | grep -B 2 "pattern" file.txt :显示匹配行及其前的 2 行内容。 |
-C NUM | 显示匹配行前后的 NUM 行 | grep -C 3 "pattern" file.txt :显示匹配行及其前后的 3 行内容。 |
3. 使用示例:
-
忽略大小写查找:在
file.txt
文件中查找 “hello”(忽略大小写),无论是 “Hello”、“HELLO” 还是 “hElLo” 都会匹配:grep -i "hello" file.txt
-
显示行号:查找
file.txt
中的 “pattern”,并输出匹配行的行号:grep -n "pattern" file.txt
-
反向选择(显示不匹配的行):显示
file.txt
中不包含 “pattern” 的所有行:grep -v "pattern" file.txt
-
递归查找目录中的文件:在指定的目录及其子目录下递归查找包含 “pattern” 的文件:
grep -r "pattern" /path/to/directory/
-
只显示匹配行的文件名:列出当前目录下所有包含 “pattern” 的
.txt
文件,不显示具体的匹配内容:grep -l "pattern" *.txt
-
显示匹配行及其上下文:在
file.txt
中查找 “pattern”,并显示匹配行及其后面 2 行的内容:grep -A 2 "pattern" file.txt
zip
/ unzip
指令 —— 压缩和解压缩文件
Linux 中压缩文件的格式非常多,需要时查找对应的资料即可。虽然有多种压缩格式,但 .zip
格式却是最常用的之一,它广泛用于存储和传输多个文件和目录。zip
和 unzip
是 Linux 系统中用于压缩和解压缩 .zip
格式文件的常用工具,.zip
常用主要原因如下:
- 广泛兼容:
.zip
格式几乎可以在所有操作系统(Windows、Linux、macOS)中轻松打开和创建,因此跨平台兼容性非常强。 - 简便易用:使用
zip
和unzip
命令在 Linux 中非常简单,且支持压缩多个文件和目录。 - 易于理解:
.zip
格式的操作相对直观,且不需要额外的工具或插件,特别适合日常使用。
多种压缩格式 | 说明 | 常用工具 | 备注 |
---|---|---|---|
.zip | 最常用的压缩格式,广泛兼容于不同操作系统 | zip , unzip | 适合日常使用,跨平台支持好 |
.tar | 归档格式,不进行压缩,常与其他压缩工具结合 | tar | 常与 gzip 或 bzip2 一起使用 |
.gz | gzip 压缩格式,通常与 .tar 配合使用 | gzip , gunzip | 适合单个文件压缩 |
.bz2 | bzip2 压缩格式,比 gzip 压缩率更高 | bzip2 , bunzip2 | 常与 tar 一起使用 |
.xz | xz 压缩格式,压缩率非常高 | xz , unxz | 适用于大文件压缩,压缩率高 |
.7z | 7zip 压缩格式,压缩比非常高 | 7zip | 常用于 Windows 和 Linux 之间交换文件 |
.rar | RAR 压缩格式,通常需要额外工具来解压 | rar , unrar | 常用于 Windows 环境 |
.tar.Z | 旧的 compress 工具格式,逐渐被替代 | compress , uncompress | 已被 gzip 和 bzip2 替代 |
对于其他压缩格式的使用:
.tar.gz
/.tar.bz2
/.tar.xz
:这些格式在 Linux 环境下非常流行,尤其在打包和备份数据时。如果你不熟悉这些格式,查阅相关文档即可。.7z
:虽然这个格式在 Linux 上也支持,但它主要用于高压缩率需求的场景,或者作为 Windows 环境中的常用格式。.rar
:对于.rar
文件,Linux 默认没有支持解压的工具,但可以通过安装unrar
工具来支持。
在 Linux 上,某些解压工具默认可能没有安装,你可以百度一下安装命令进行安装,注意:根据不同的 Linux 发行版,使用的包管理器不同!
1. zip
指令 —— 压缩文件,用于将文件或目录压缩成 .zip
格式。
语法:zip [选项] 压缩文件.zip 文件或目录
- 选项:用于指定压缩时的行为。
- 压缩文件.zip:指定压缩后的文件名。
- 文件或目录:指定要压缩的文件或目录,可以是多个文件或目录。
常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-r | 支持递归 处理目录,包含子目录及其中的文件 | zip -r archive.zip folder/ :压缩 folder 目录及其所有文件和子目录。 |
-e | 在压缩时加密,要求输入密码 | zip -e archive.zip file.txt :压缩文件并加密,需要输入密码。 |
-q | 静默模式,不输出任何压缩过程信息 | zip -q archive.zip file1.txt file2.txt :压缩文件,不显示进度信息。 |
-x | 排除某些文件或目录 | zip -r archive.zip folder/ -x "*.bak" :压缩 folder 目录,但排除 .bak 文件。 |
-9 | 使用最佳压缩级别(最慢但最小文件) | zip -9 archive.zip folder/ :使用最强压缩来压缩 folder 目录。 |
-j | 不保存文件的路径信息,只保存文件本身 | zip -j archive.zip file1.txt file2.txt :只压缩文件,不保存目录结构。 |
示例:
-
压缩文件:
zip archive.zip file1.txt file2.txt # 将 `file1.txt` 和 `file2.txt` 压缩成 `archive.zip` 文件
-
递归压缩目录:
zip -r archive.zip folder/ # 将 `folder/` 目录及其中的所有文件和子目录压缩为 `archive.zip` 文件
-
排除文件:
zip -r archive.zip folder/ -x "*.bak" # 压缩 `folder/` 目录,但排除所有 `.bak` 文件
-
使用加密:
zip -e archive.zip file1.txt # 压缩 `file1.txt` 并加密,要求输入密码
2. unzip
指令 —— 解压缩文件,用于解压 .zip
格式的压缩文件。
语法:unzip [选项] 压缩文件.zip
- 选项:用于指定解压缩时的行为。
- 压缩文件.zip:指定 要解压的
.zip
文件。
常用选项:
选项 | 解释说明 | 示例与说明 |
---|---|---|
-d | 指定解压的目标目录 | unzip archive.zip -d /path/to/destination/ :将文件解压到指定目录。 |
-l | 列出 .zip 文件中的文件内容,而不解压 | unzip -l archive.zip :列出压缩包中的文件,不进行解压。 |
-o | 解压时覆盖现有文件,不询问 | unzip -o archive.zip :解压时如果文件已存在,则自动覆盖。 |
-q | 静默模式,不输出解压过程信息 | unzip -q archive.zip :解压时不显示进度或文件信息。 |
-j | 解压时不保存文件的路径结构,只解压文件本身 | unzip -j archive.zip :解压时不保留目录结构。 |
-n | 如果文件已经存在,不解压该文件 | unzip -n archive.zip :解压时如果文件已存在,不会覆盖它。 |
示例:
-
解压
.zip
文件:unzip archive.zip # 将 `archive.zip` 文件解压到当前目录
-
指定解压到目标目录:
unzip archive.zip -d /path/to/destination/ # 将 `archive.zip` 解压到 `/path/to/destination/` 目录
-
列出
.zip
文件中的内容:unzip -l archive.zip # 列出 `archive.zip` 文件中包含的所有文件,而不进行解压
-
解压时自动覆盖现有文件:
unzip -o archive.zip # 解压时,如果目标目录已有同名文件,会自动覆盖现有文件
tar
指令 —— 打包和解包文件
tar
是 Linux 中一个非常重要的命令,通常用来打包(归档)和解包(提取)文件。它不仅可以压缩文件,还可以将多个文件或目录合并成一个文件,便于传输和存储。tar
通常与其他压缩工具(如 gzip
、bzip2
)结合使用,以减少文件大小。
语法:tar [选项] [文件名] [目录或文件]
常用选项:
选项 | 描述 |
---|---|
-c | 创建一个新的压缩包(create)。 |
-x | 解压文件(extract)。 |
-t | 列出压缩包中的文件内容(list)。 |
-z | 使用 gzip 压缩或解压缩文件。 |
-j | 使用 bzip2 压缩或解压缩文件。 |
-v | 显示详细信息(verbose),即在压缩或解压过程中显示文件。 |
-f | 指定压缩包的文件名(file)。 |
-C | 解压时指定目录,将文件解压到指定的目录。 |
-p | 保持文件的原始权限。 |
--exclude | 排除指定的文件或目录。 |
-N | 只备份比指定日期更新的文件。 |
基本用法:
-
将目录打包成
.tar
文件:tar -cvf etc.tar ./etc # 打包当前目录下的 `etc` 目录
-
将目录打包并压缩成
.tar.gz
文件:tar -zcvf /tmp/etc.tar.gz /etc # 将 `/etc` 目录打包并使用 `gzip` 压缩,生成 `.tar.gz` 文件
-
将目录打包并压缩成
.tar.bz2
文件:tar -jcvf /tmp/etc.tar.bz2 /etc # 将 `/etc` 目录打包并使用 `bzip2` 压缩,生成 `.tar.bz2` 文件
-
查看
.tar.gz
文件中的内容:tar -ztvf /tmp/etc.tar.gz # 列出压缩包 `etc.tar.gz` 中的文件内容。`z` 选项是因为使用了 `gzip` 压缩
-
解压
.tar.gz
文件到指定目录:tar -zxvf /tmp/etc.tar.gz -C /usr/local/src # 解压 `etc.tar.gz` 文件并将内容解压到 `/usr/local/src` 目录下
-
只提取
.tar.gz
文件中的某一特定文件:tar -zxvf /tmp/etc.tar.gz etc/passwd # 解压 `etc.tar.gz` 文件中的 `etc/passwd` 文件到当前目录。注意,在 `tar` 文件内的路径可能去除了前导的 `/`,这也是为何没有 `/etc/passwd` 这样的绝对路径
-
备份文件时保留文件权限:
tar -zxvpf /tmp/etc.tar.gz /etc # 使用 `-p` 选项来确保在备份过程中保留文件的权限
-
备份特定日期之后的文件:
tar -N "2025/12/31" -zcvf home.tar.gz /home # 备份 `/home` 目录下自 2025 年 12 月 31 日以来的文件。
-
排除某个目录或文件进行备份:
tar --exclude=/home/user/temp -zcvf mybackup.tar.gz /home #备份 `/home` 目录,但排除了 `/home/user/temp` 目录
-
在没有生成文件的情况下直接解压到目标目录:
tar -cvf - /etc | tar -xvf - -C /tmp # 使用管道(`|`)来传递输出,这样就可以直接将 `/etc` 目录的内容解压到 `/tmp` 目录,而无需在中间创建一个 `.tar` 文件
注意事项:
tar
默认会保留文件的权限、时间戳等属性,特别是在备份系统文件时非常重要。- 使用
-C
选项时,解压内容会被放置在指定的目录中,而不是当前工作目录。 tar
解包时,如果文件已存在,会覆盖原有文件,使用时需要小心。.tar
文件本身并不压缩,通常是用来打包多个文件和目录。如果需要压缩,应该使用gzip
(.tar.gz
)或bzip2
(.tar.bz2
)等工具。
bc
指令 —— 命令行计算器
bc
是 Linux 系统中一个非常强大的命令行计算器,能够执行任意精度的数学运算。它不仅支持整数运算,还支持浮点数、算术运算、逻辑运算、条件判断、循环等,功能非常强大。你可以使用 bc
来进行简单的计算,也可以用它执行复杂的数学表达式,甚至用于脚本编程或需要高精度运算的场景。(计算器的功能 bc
基本上都支持,更多高级功能请自行百度)
语法:bc [选项] [文件]
-
如果没有指定文件,
bc
会进入交互模式,等待用户输入表达式进行计算。 -
如果指定了文件,
bc
会读取该文件并执行其中的命令。 -
可以执行数学计算,包括整数、浮点数、十六进制、八进制和二进制运算。
-
支持标准的算术运算、数学函数、变量、控制语句(如条件判断和循环)。
-
具有任意精度运算的能力,可以设置计算精度。
常用选项:
选项 | 描述 |
---|---|
-l | 启动数学库,包含常用的数学函数(如 sqrt 、sin 、cos 等)。 |
-q | 禁止显示提示符。 |
基本用法:
-
进入
bc
交互模式: 直接运行bc
,进入交互式计算模式。此时你可以直接输入数学表达式,计算结果会立即返回。在进入bc
后,你可以进行算术运算。例如:3 + 2 # 输出:5 7 / 3 # 输出:2
-
设置精度: 默认情况下,
bc
只执行整数运算。如果需要更高的精度,可以设置小数点后的位数。使用scale
来指定小数位数,精度可以设置为非常高的值:scale=10 10 / 3 # 输出:3.3333333333
-
执行数学表达式: 你可以在
bc
中输入复杂的数学表达式:(5 + 3) * 2 # 输出:16
-
使用数学函数: 如果启动了
-l
选项,可以使用内置的数学函数,如sqrt
(平方根)、sin
(正弦)、cos
(余弦)等:bc -l sqrt(16) # 输出:4
-
从文件读取命令: 你可以将一系列的计算命令保存到文件中,使用
bc
执行。 -
条件语句和循环:
bc
还支持条件语句和循环控制结构。 -
支持进制转换:
bc
支持不同进制之间的转换,例如从二进制到十进制、十六进制到十进制等。二进制转十进制:ibase=2 1010 # 输出:10
uname -r
指令 —— 查看内核版本
uname
命令用于显示系统的相关信息,包括操作系统、内核、硬件平台等。而 uname -r
特别用来显示当前操作系统的 内核版本。
语法:uname -r
示例:
$ uname -r
3.10.0-1160.119.1.el7.x86_64 # 有兴趣的可以查一下相关内核说明
常见选项:
选项 | 描述 |
---|---|
-r | 显示内核版本。 |
-a | 显示所有信息(内核名称、主机名、内核版本、硬件平台等)。 |
-s | 显示内核名称。 |
-n | 显示网络主机名称(主机名)。 |
-v | 显示内核版本号及版本信息。 |
-m | 显示机器硬件名称(比如 x86_64 )。 |
查看所有系统信息示例:
$ uname -a
Linux VM-16-11-centos 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
其中,uname -a
会输出系统的更多信息,包括:
- 内核名称:
Linux
表示操作系统的内核类型。 - 主机名:
hostname
为该系统的主机名。 - 内核版本:
5.10.0-8-amd64
表示使用的是 Linux 5.10 版本的内核,且支持 AMD64 架构(64 位)。 - 内核编译信息:
#1 SMP Debian 5.10.17-1 (2021-03-07)
表示该内核是 Debian 5.10.17-1 版本的编译,构建日期为2021-03-07
,且支持对称多处理(SMP)。 - 硬件架构:
x86_64
表示该系统是 64 位架构。 - 操作系统:
GNU/Linux
表示该系统是 GNU 操作系统与 Linux 内核组合构成的操作系统。
shutdown
指令(关机命令)
语法:shutdown [选项] [时间] [原因]
常见选项:
选项 | 说明 |
---|---|
-h | 关闭系统(关机)。停掉系统所有服务后关闭计算机。 |
-r | 重启系统。停掉系统服务后重新启动计算机。 |
-t sec | 指定延迟时间(以秒为单位),过 sec 秒后执行关机或重启。 |
-c | 取消已经计划的关机操作(如果有的话)。 |
-P | 执行关机后停止电源(适用于支持的硬件)。 |
例子:
- 立即关机:
shutdown -h now
- 重启系统:
shutdown -r now
- 计划 10 分钟后关机:
shutdown -h +10
- 立即关机并指定原因:
shutdown -h now "System maintenance"
- 取消已经计划的关机:
shutdown -c
- 过 30 秒后关机:
shutdown -h -t 30
以下命令作为扩展:
◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
◆ 文件处理命令: file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;
◆ 系统安全相关命令: passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
◆ 其它命令: tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
共勉