004 Linux基本指令

写在最前

一、Linux 指令的本质与执行逻辑

  1. 指令与可执行程序的关系

    • 指令即程序:用户输入的指令(如 lscp)本质是 可执行程序或脚本,以文件形式存储在系统路径中(如 /bin/usr/bin)。
    • 位置依赖:指令执行前需在系统预设路径(由 $PATH 环境变量定义)中查找对应文件。若未找到,提示 command not found
  2. 指令执行流程

    • 查找与验证:系统按 $PATH 路径顺序搜索可执行文件,并检查文件权限(需具备可执行权限)。
    • 执行过程:找到文件后,操作系统加载程序至内存运行,用户通过命令行解释器间接与内核交互。

二、核心设计哲学:Linux 下一切皆文件

  1. 抽象统一性

    • 硬件设备抽象为文件
      • 显示器:通过 fwrite 写入数据(如 echo "Hello" > /dev/tty)。
      • 键盘:通过 fread 读取输入(如 cat /dev/input/eventX)。
    • 统一操作接口:无论是硬件设备(如显示器、键盘)还是普通的文件,都可以通过文件操作进行读 read()、写 write() 等系统调用,简化编程与设备管理,更证实了 Linux 下一切皆文件。
  2. 文件系统层级

    • 普通文件:文本、二进制等常规数据。
    • 特殊文件:设备文件(如 /dev/sda)、管道文件、套接字文件等。

三、用户与操作系统的交互机制

  1. 命令行解释器(Shell)的核心作用

    • 功能分层
      • 命令解析:将用户输入的字符串解析为可执行操作。
      • 系统保护:拦截非法操作(如权限不足的命令、危险系统调用)。
    • 必要性:直接操作内核复杂度高,Shell 提供安全且易用的交互层。
  2. 命令行提示符详解

    • 示例:[damai@VM-16-11-centos ~]$
      • 用户名damai(当前登录用户)。
      • 主机名VM-16-11-centos(标识运行环境)。
      • 当前目录~(用户家目录的简写,如 /home/damai)。
      • 提示符$ 表示普通用户,# 表示管理员(root)。

四、系统管理与高效操作技巧

  1. 历史命令管理

    • 记录与搜索
      • 默认保存最近 1000 条命令(通过 HISTSIZE 变量可调整)。
      • 快捷键 CTRL + r(支持模糊搜索)快速定位历史命令。
    • 持久化存储:历史记录保存在 ~/.bash_history,便于审计与回溯。
  2. 环境变量与路径管理

    • PATH 变量:定义可执行文件的搜索路径,可通过 export PATH=$PATH:/custom/path 扩展。
    • 查看路径:使用 which lswhereis ls 定位指令的存储位置。
  3. 系统运行模式

    • 常开性设计:Linux 服务器通常长期运行(不关机),依赖以下特性:
      • 高稳定性内核与进程管理。
      • 日志系统(如 journalctl)与监控工具(如 top)保障运维。

五、总结与核心理念

  1. 指令本质:用户输入字符串 → Shell 解析 → 执行对应可执行文件。
  2. 文件抽象哲学:硬件、数据、操作均通过文件接口统一管理(Linux 中的一切皆文件)。
  3. 用户隔离设计:Shell 作为安全屏障,防止直接内核操作引发系统风险。
  4. 操作习惯
    • 善用历史命令提升效率。
    • 理解环境变量配置优化工作流。

重要的几个热键

热键 功能描述
==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.txtfile2.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 可能会导致终端滚动过快,难以阅读,此时可以考虑使用 lessmore 命令。

echo —— 输出文本或变量的值

echo 用于在终端中输出文本或变量的值。它常用于脚本中打印调试信息、向用户显示提示信息,或将输出写入文件。

1. 语法:echo [选项] [文本]

2. 常用选项:

选项 解释说明 示例与说明
-n 不在输出的末尾添加换行符 echo -n "Hello":输出 Hello,但不换行。
-e 启用转义字符解析(如 \n\t 等) echo -e "Line1\nLine2":输出两行 Line1Line2,用换行符分隔。
-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":输出 HelloWorld,并换行。若使用 -e 选项才能正确解析换行符。
  • 不换行输出echo -n "Hello":输出 Hello,但不自动换行。
  • 启用转义字符解析echo -e "Hello\tWorld":输出 HelloWorld,并在它们之间加入一个制表符(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 / | morels 命令列出 / 目录下的文件和子目录,-l 选项让 ls 显示文件的详细信息,包括权限、拥有者、大小等。more 命令接收从 ls -l / 命令输出的数据,并分页显示它。因为 / 目录下通常包含很多文件,使用 more 可以让你逐页查看输出。
  • ps aux | more:分页显示所有当前运行的进程。

==管道(Pipe)概念:==

管道符号 | 用来将前一个命令的输出传递给下一个命令作为输入。也就是说,more 可以接收其他命令的输出并逐页显示,而不是单独显示文件内容。通过管道可以方便地查看大量命令输出的内容。

==为什么使用管道?==

ls -l / 的输出可能很长,直接在终端中显示出来可能会很难查看。通过管道将输出传递给 more 命令,可以让你一页一页地查看内容,避免内容溢出屏幕。


less —— 分页显示文件内容(比 more 更强大)(重要)

lessmore 相似,都是用来分页显示文件内容,但 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 行。

结合使用 headtail —— 提取文件的指定行

在某些情况下,我们需要从文件中提取指定行。headtail 结合使用可以很方便地实现这一功能。

举例: 假设有一个文件 test,它有 100 行内容,如果我们想要提取第 50 行,可以使用以下方法:

方法 1: 使用临时文件

1
2
head -n 50 test > tmp    # 将前 50 行存入临时文件 tmp
tail -n 1 tmp # 获取临时文件 tmp 的最后一行,即第 50 行

方法 2:使用管道

1
head -n 50 test | tail -n 1    # 先用 head 提取前 50 行,再用 tail 提取最后一行(即第 50 行)

这种方法可以灵活提取文件中间的指定行,通过 headtail 的组合,方便地提取任何位置的内容。


时间相关的指令

在 Linux 中,时间相关的操作可以通过 date 命令进行。date 命令用于显示和设置系统的日期和时间,同时它也支持转换时间戳,格式化输出等功能。

date —— 显示和设置日期与时间

date 命令用于显示当前的日期和时间,或者设置系统的时间。

1. 显示当前时间: date 可以按照指定的格式显示当前的日期和时间。语法如下:

1
date [OPTION]... [+FORMAT]
  • +FORMAT 可以自定义显示的时间格式,格式由一系列标记组成,常见的标记有:
标记 含义 示例
%H 小时(00..23) date +%H14
%M 分钟(00..59) date +%M30
%S 秒(00..61) date +%S15
%X 相当于 %H:%M:%S date +%X14:30:15
%d 日(01..31) date +%d23
%m 月份(01..12) date +%m02
%Y 完整年份(0000..9999) date +%Y2025
%F 相当于 %Y-%m-%d date +%F2025-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(协调世界时) 到当前时间所经过的秒数。示例:

    1
    2
    date +%s
    # 输出类似: 1738486946
  • 时间戳转换为日期: 使用 -d 选项和 @<时间戳>,可以将 Unix 时间戳转换为可读的日期和时间。date -d @1738486946:这将输出 Unix 时间戳 1738486946 对应的日期和时间。示例:

    1
    2
    3
    4
    5
    6
    date -d @1738486946
    # 输出类似: Sun Feb 2 17:02:26 CST 2025

    date -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 -Acal -B 可以让你一次性查看前后的月份。


* 指令(通配符)

在 Linux 中,* 并不是一个命令,而是一个常用的通配符(wildcard),表示匹配任意数量的字符(包括零个字符)。它在文件名扩展(glob)操作中被广泛使用,特别是在命令行中与其他命令一起使用,它可以用于匹配文件或目录的名称,常用于文件查找、复制、删除等操作。

常见用途:

  1. 匹配所有文件* 可以用来匹配当前目录下所有的文件和子目录(包括隐藏文件和目录除外)。

    1
    ls *
  2. 匹配特定类型的文件:使用 * 来匹配特定类型的文件,例如所有 .txt 文件,该命令会列出当前目录下所有扩展名为 .txt 的文件:

    1
    ls *.txt
  3. 匹配多个字符* 可以替代文件名中的任意字符(包括多个字符),比如查找包含特定前缀或后缀的文件,该命令会列出所有以 file 开头的文件:

    1
    ls file*
  4. 与其他命令结合使用* 可以与其他命令结合使用来实现批量操作,该命令会删除当前目录下所有扩展名为 .log 的文件:

    1
    rm *.log

注意事项:

  • * 只匹配非隐藏文件。如果你需要包括隐藏文件,可以使用 .*.* * 来匹配。
  • * 不匹配目录结构中的分隔符 /,即它不会匹配子目录的名字。
  • 如果文件名中包含特殊字符(如空格、星号、问号等),你可能需要用引号或转义字符来处理这些字符。

whereis 指令 —— 查找命令的相关文件

whereis 是 Linux 中用来查找命令的二进制文件、源代码文件和手册页位置的命令。它不会像 which 命令那样仅搜索 PATH 环境变量指定的目录,而是搜索一些常见的系统路径。通常用于快速定位某个命令或程序的安装位置,尤其是二进制文件和相关文档。

语法:whereis [选项] [命令或文件]

常用选项:

选项 描述
-b 查找命令的二进制文件(binary files)。
-m 查找命令的手册页(man pages)。
-s 查找命令的源代码文件(source files)。
-u 显示未找到命令的路径。

基本用法:

  1. 查找命令的二进制文件、源代码和手册页:

    1
    whereis ls

    该命令会查找 ls 命令的相关文件,输出类似:

    1
    ls: /bin/ls /usr/share/man/man1/ls.1.gz

    这表示 ls 的二进制文件位于 /bin/ls,手册页位于 /usr/share/man/man1/ls.1.gz

  2. 仅查找命令的二进制文件:

    1
    whereis -b ls

    该命令只查找 ls 的二进制文件,输出:

    1
    ls: /bin/ls
  3. 仅查找命令的手册页:

    1
    whereis -m ls

    该命令只查找 ls 的手册页,输出:

    1
    ls: /usr/share/man/man1/ls.1.gz
  4. 仅查找命令的源代码文件:

    1
    whereis -s ls

    该命令查找 ls 的源代码文件,如果系统中有相关源代码,则会输出相关路径。

  5. 查找命令或程序是否安装: 如果你 不知道某个命令是否安装,可以用 whereis 检查该命令的位置:

    1
    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 按文件大小查找文件,支持指定文件大小单位(bckM 等)。 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. 示例:

  • 按文件名查找文件:

    1
    find /home/user -name "*.txt"	# 查找 `/home/user` 目录下所有扩展名为 `.txt` 的文件
  • 查找特定类型的文件:

    1
    find / -type d -name "Documents"	# 查找系统中所有名为 `Documents` 的目录
  • 查找最近 7 天内修改过的文件:

    1
    find /tmp -mtime -7		# 查找 `/tmp` 目录下最近 7 天内修改过的文件
    1
    find /var/log -name "*.log" -mtime +7 -exec rm {} \;	# 查找并删除7天前的日志文件
  • 查找并删除文件:

    1
    find /home/user -name "*.bak" -exec rm -f {} \;		#查找 `/home/user` 目录下所有扩展名为 `.bak` 的文件,并删除它们
  • 查找并显示所有文件的大小:

    1
    find /var -type f -exec du -h {} \;		# 查找 `/var` 目录下所有的普通文件,并显示它们的大小
  • 查找并显示文件的权限:

    1
    find / -name "*.sh" -exec ls -l {} \;		# 查找所有 `.sh` 文件,并显示它们的详细权限和属性

4. 小技巧:

  • 使用 -prune 跳过某些目录: 如果你想跳过某些目录,可以使用 -prune 选项。

    1
    2
    find /home -path "/home/user/ignore" -prune -o -name "*.txt" -print
    # 这个命令会跳过 `/home/user/ignore` 目录,只查找其他 `.txt` 文件
  • 结合 -exec 使用 {} \;+ -exec 后面可以跟 {} 来代表当前查找到的文件。

    • \;:每找到一个文件,执行一次命令。
    • +:将多个文件作为一次命令的参数传递,效率更高。
    1
    2
    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. 使用示例

  1. 忽略大小写查找:在 file.txt 文件中查找 “hello”(忽略大小写),无论是 “Hello”、”HELLO” 还是 “hElLo” 都会匹配:

    1
    grep -i "hello" file.txt
  2. 显示行号:查找 file.txt 中的 “pattern”,并输出匹配行的行号:

    1
    grep -n "pattern" file.txt
  3. 反向选择(显示不匹配的行):显示 file.txt 中不包含 “pattern” 的所有行:

    1
    grep -v "pattern" file.txt
  4. 递归查找目录中的文件:在指定的目录及其子目录下递归查找包含 “pattern” 的文件:

    1
    grep -r "pattern" /path/to/directory/
  5. 只显示匹配行的文件名:列出当前目录下所有包含 “pattern” 的 .txt 文件,不显示具体的匹配内容:

    1
    grep -l "pattern" *.txt
  6. 显示匹配行及其上下文:在 file.txt 中查找 “pattern”,并显示匹配行及其后面 2 行的内容:

    1
    grep -A 2 "pattern" file.txt

zip / unzip 指令 —— 压缩和解压缩文件

Linux 中压缩文件的格式非常多,需要时查找对应的资料即可。虽然有多种压缩格式,但 .zip 格式却是最常用的之一,它广泛用于存储和传输多个文件和目录。zipunzip 是 Linux 系统中用于压缩和解压缩 .zip 格式文件的常用工具,.zip 常用主要原因如下:

  • 广泛兼容.zip 格式几乎可以在所有操作系统(Windows、Linux、macOS)中轻松打开和创建,因此跨平台兼容性非常强。
  • 简便易用:使用 zipunzip 命令在 Linux 中非常简单,且支持压缩多个文件和目录。
  • 易于理解.zip 格式的操作相对直观,且不需要额外的工具或插件,特别适合日常使用。
多种压缩格式 说明 常用工具 备注
.zip 最常用的压缩格式,广泛兼容于不同操作系统 zip, unzip 适合日常使用,跨平台支持好
.tar 归档格式,不进行压缩,常与其他压缩工具结合 tar 常与 gzipbzip2 一起使用
.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 已被 gzipbzip2 替代

对于其他压缩格式的使用:

  • .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:只压缩文件,不保存目录结构。

示例

  1. 压缩文件

    1
    zip archive.zip file1.txt file2.txt		# 将 `file1.txt` 和 `file2.txt` 压缩成 `archive.zip` 文件
  2. 递归压缩目录

    1
    zip -r archive.zip folder/		# 将 `folder/` 目录及其中的所有文件和子目录压缩为 `archive.zip` 文件
  3. 排除文件

    1
    zip -r archive.zip folder/ -x "*.bak"		# 压缩 `folder/` 目录,但排除所有 `.bak` 文件
  4. 使用加密

    1
    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:解压时如果文件已存在,不会覆盖它。

示例

  1. 解压 .zip 文件

    1
    unzip archive.zip		# 将 `archive.zip` 文件解压到当前目录
  2. 指定解压到目标目录

    1
    unzip archive.zip -d /path/to/destination/		# 将 `archive.zip` 解压到 `/path/to/destination/` 目录
  3. 列出 .zip 文件中的内容

    1
    unzip -l archive.zip		# 列出 `archive.zip` 文件中包含的所有文件,而不进行解压
  4. 解压时自动覆盖现有文件

    1
    unzip -o archive.zip		# 解压时,如果目标目录已有同名文件,会自动覆盖现有文件

tar 指令 —— 打包和解包文件

tar 是 Linux 中一个非常重要的命令,通常用来打包(归档)和解包(提取)文件。它不仅可以压缩文件,还可以将多个文件或目录合并成一个文件,便于传输和存储。tar 通常与其他压缩工具(如 gzipbzip2)结合使用,以减少文件大小。

语法:tar [选项] [文件名] [目录或文件]

常用选项

选项 描述
-c 创建一个新的压缩包(create)。
-x 解压文件(extract)。
-t 列出压缩包中的文件内容(list)。
-z 使用 gzip 压缩或解压缩文件。
-j 使用 bzip2 压缩或解压缩文件。
-v 显示详细信息(verbose),即在压缩或解压过程中显示文件。
-f 指定压缩包的文件名(file)。
-C 解压时指定目录,将文件解压到指定的目录。
-p 保持文件的原始权限。
--exclude 排除指定的文件或目录。
-N 只备份比指定日期更新的文件。

基本用法:

  1. 将目录打包成 .tar 文件

    1
    tar -cvf etc.tar ./etc    # 打包当前目录下的 `etc` 目录
  2. 将目录打包并压缩成 .tar.gz 文件

    1
    tar -zcvf /tmp/etc.tar.gz /etc		# 将 `/etc` 目录打包并使用 `gzip` 压缩,生成 `.tar.gz` 文件
  3. 将目录打包并压缩成 .tar.bz2 文件

    1
    tar -jcvf /tmp/etc.tar.bz2 /etc		# 将 `/etc` 目录打包并使用 `bzip2` 压缩,生成 `.tar.bz2` 文件
  4. 查看 .tar.gz 文件中的内容

    1
    tar -ztvf /tmp/etc.tar.gz		# 列出压缩包 `etc.tar.gz` 中的文件内容。`z` 选项是因为使用了 `gzip` 压缩
  5. 解压 .tar.gz 文件到指定目录

    1
    tar -zxvf /tmp/etc.tar.gz -C /usr/local/src		# 解压 `etc.tar.gz` 文件并将内容解压到 `/usr/local/src` 目录下
  6. 只提取 .tar.gz 文件中的某一特定文件

    1
    2
    tar -zxvf /tmp/etc.tar.gz etc/passwd
    # 解压 `etc.tar.gz` 文件中的 `etc/passwd` 文件到当前目录。注意,在 `tar` 文件内的路径可能去除了前导的 `/`,这也是为何没有 `/etc/passwd` 这样的绝对路径
  7. 备份文件时保留文件权限

    1
    tar -zxvpf /tmp/etc.tar.gz /etc		# 使用 `-p` 选项来确保在备份过程中保留文件的权限
  8. 备份特定日期之后的文件

    1
    tar -N "2025/12/31" -zcvf home.tar.gz /home		# 备份 `/home` 目录下自 2025 年 12 月 31 日以来的文件。
  9. 排除某个目录或文件进行备份

    1
    tar --exclude=/home/user/temp -zcvf mybackup.tar.gz /home		#备份 `/home` 目录,但排除了 `/home/user/temp` 目录
  10. 在没有生成文件的情况下直接解压到目标目录

    1
    2
    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 启动数学库,包含常用的数学函数(如 sqrtsincos 等)。
-q 禁止显示提示符。

基本用法:

  1. 进入 bc 交互模式: 直接运行 bc,进入交互式计算模式。此时你可以直接输入数学表达式,计算结果会立即返回。在进入 bc 后,你可以进行算术运算。例如:

    1
    2
    3 + 2	# 输出:5
    7 / 3 # 输出:2
  2. 设置精度: 默认情况下,bc 只执行整数运算。如果需要更高的精度,可以设置小数点后的位数。使用 scale 来指定小数位数,精度可以设置为非常高的值:

    1
    2
    scale=10
    10 / 3 # 输出:3.3333333333
  3. 执行数学表达式: 你可以在 bc 中输入复杂的数学表达式:

    1
    (5 + 3) * 2		# 输出:16
  4. 使用数学函数: 如果启动了 -l 选项,可以使用内置的数学函数,如 sqrt(平方根)、sin(正弦)、cos(余弦)等:

    1
    2
    bc -l
    sqrt(16) # 输出:4
  5. 从文件读取命令: 你可以将一系列的计算命令保存到文件中,使用 bc 执行。

  6. 条件语句和循环: bc 还支持条件语句和循环控制结构。

  7. 支持进制转换: bc 支持不同进制之间的转换,例如从二进制到十进制、十六进制到十进制等。二进制转十进制:

    1
    2
    ibase=2
    1010 # 输出:10

uname -r 指令 —— 查看内核版本

uname 命令用于显示系统的相关信息,包括操作系统、内核、硬件平台等。而 uname -r 特别用来显示当前操作系统的 内核版本

语法:uname -r

示例:

1
2
$ uname -r
3.10.0-1160.119.1.el7.x86_64 # 有兴趣的可以查一下相关内核说明

常见选项:

选项 描述
-r 显示内核版本。
-a 显示所有信息(内核名称、主机名、内核版本、硬件平台等)。
-s 显示内核名称。
-n 显示网络主机名称(主机名)。
-v 显示内核版本号及版本信息。
-m 显示机器硬件名称(比如 x86_64)。

查看所有系统信息示例:

1
2
$ 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。