当前位置: 首页 > web >正文

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 指令的本质与执行逻辑

  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: 使用临时文件
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 行)

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


时间相关的指令

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

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

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

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

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

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


* 指令(通配符)

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

常见用途:

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

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

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

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

    rm *.log
    

注意事项:

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

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

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

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

常用选项:

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

基本用法:

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

    whereis ls
    

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

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

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

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

    whereis -b ls
    

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

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

    whereis -m ls
    

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

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

    whereis -s ls
    

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

  5. 查找命令或程序是否安装: 如果你 不知道某个命令是否安装,可以用 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按文件大小查找文件,支持指定文件大小单位(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. 示例:

  • 按文件名查找文件:

    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显示匹配行之后的 NUMgrep -A 3 "pattern" file.txt:显示匹配行及其后的 3 行内容。
-B NUM显示匹配行之前的 NUMgrep -B 2 "pattern" file.txt:显示匹配行及其前的 2 行内容。
-C NUM显示匹配行前后的 NUMgrep -C 3 "pattern" file.txt:显示匹配行及其前后的 3 行内容。

3. 使用示例

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

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

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

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

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

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

    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 一起使用
.gzgzip 压缩格式,通常与 .tar 配合使用gzip, gunzip适合单个文件压缩
.bz2bzip2 压缩格式,比 gzip 压缩率更高bzip2, bunzip2常与 tar 一起使用
.xzxz 压缩格式,压缩率非常高xz, unxz适用于大文件压缩,压缩率高
.7z7zip 压缩格式,压缩比非常高7zip常用于 Windows 和 Linux 之间交换文件
.rarRAR 压缩格式,通常需要额外工具来解压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. 压缩文件

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

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

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

    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 文件

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

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

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

    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 文件

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

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

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

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

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

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

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

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

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

    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 后,你可以进行算术运算。例如:

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

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

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

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

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

  7. 支持进制转换: 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。

共勉

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/4501.html

相关文章:

  • C语言| 递归求两个数的最大公约数
  • 17.Three.js 光照系统之《LightProbe》详解指南(含 Vue 3示例)
  • 准确--Notepad++ 实用的插件介绍
  • 【论文阅读】HunyuanVideo: A Systematic Framework For Large Video Generative Models
  • Linux系统安装指南
  • vue2中的组件注册
  • Landsat WRS介绍 及 Polygon定位WRS算法
  • WPF MVVM入门系列教程(六、ViewModel案例演示)
  • [Windows] 蓝山看图王 1.0.3.21021
  • JGL021垃圾渗滤液小试实验装置
  • 三、大模型原理:图文解析MoE原理
  • NGINX `ngx_http_charset_module` 字符集声明与编码转换
  • 【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应
  • goland无法debug
  • 做PPT的感想
  • 在IPv6头部中,Next Header字段
  • 基于 ISO 22301 与国产化实践的 BCM 系统菜单设计指南
  • 计算机网络中相比于RIP,路由器动态路由协议OSPF有什么优势?
  • 服务器数据恢复—硬盘坏道导致EqualLogic存储不可用的数据恢复
  • 2023年华为杯研究生数学建模竞赛B题DFT类矩阵的整数分解逼近
  • ActiveMQ 源码剖析:消息存储与通信协议实现(二)
  • 英伟达发布Llama-Nemotron系列新模型,性能超越DeepSeek-R1
  • 初学Python爬虫
  • Spring AI 之 AI核心概念
  • 第十一节:图像处理基础-图像阈值处理
  • ES6入门---第三单元 模块七: Proxy的使用+Reflect的使用
  • 【备考高项】模拟预测题(二)综合知识及答案详解
  • PostgreSQL 常用SQL操作命令
  • 南京市出台工作方案深化“智改数转网联”,物联网集成商从“困局”到“蓝海”!
  • Linux 安全加固