【Linux】Linux指令进阶:从入门到熟练的实操指南

【Linux】Linux指令进阶:从入门到熟练的实操指南

前言

Linux 指令是操作系统的 “万能工具集”—— 从文本读写、文件管理到系统控制,几乎所有运维与开发场景都离不开它。

本篇会围绕9 类高频指令展开:从基础的输入输出、大文件查看,到实用的文件查找、打包压缩,再到系统信息查询、关机控制,甚至包含提升效率的热键与拓展指令。每个模块都以 “指令格式 + 场景示例” 为核心,帮你快速掌握指令的实际用法,从 “会用” 到 “用对”。


目录

☊. 输入输出指令

1、cat指令

2、echo指令

3、输出重定向

4、追加重定向

5、输入重定向

℡. 查看大文件的指令

1、more指令

2、less指令

3、head指令

4、tail指令

☋. 时间相关的指令

1、Date指令

2、Cal指令

☺. 查找文件指令

1、find指令

2、grep指令

☆. 打包和压缩指令

1、zip和unzip指令

2、tap指令:打包/解包/不打开它,直接看内容

▷. 其他指令

1、bc指令

2、uname指令

℡. 热键

©. 关机指令

☆. 拓展指令


☊. 输入输出指令

1、cat指令

语法cat [选项][文件]

功能:查看目标文件的内容

常用选项:

-b对非空输出行编号

-n对输出的所有行编号

-s不输出多行空行
cat指令演示

cat 的核心设计是将文件内容一次性全部输出到终端,如果文件内容过多(超过一屏),内容会快速滚动,前面的内容会被覆盖,所以cat只能查看小型文件

当 cat 指令后不跟具体文件时,它会默认从键盘读取输入内容:

此时,你在键盘上输入什么内容,cat 就会实时把内容输出到显示器上(按 Ctrl + D 可以退出这个输入模式)。

2、echo指令

是用于在终端输出指定内容(文本、变量值等)的命令,也可以配合输出重定向用来创建文件向文件中写入内容

echo指令演示

3、输出重定向

输出重定向是将命令的输出内容写入文件(而非显示在终端)的操作

向目标文件进行写入时会进行两步操作:

        1、清空文件

        2、写入新内容

【常见场景演示】

> test.c 有清空文件的作用,因为并没有写入新的内容,那么就只会清空文件

清空文件场景

因为目标文件原本不存在,所以系统会自动创建这个文件并写入内容。

echo > 文件名 相当于是把一个换行写入文件

Linux理念

Linux中一切即文件,意味着Linux可以统一的方式进行文件/设备访问。好处就是可以让操作系统以统一的一套方案来管理所有软件。

在 Linux 遵循“一切皆文件”的理念下,向显示器打印内容,本质就是向代表显示器的文件进行写入操作;从键盘读取输入,也相当于从代表键盘的文件中读取内容,各类硬件设备与普通文件一样,都能通过诸如 `fwrite`(写入)、`fread`(读取)这类文件操作方法来进行交互。

4、追加重定向

追加重定向是将命令输出内容追加到文件末尾,不覆盖原有内容的操作

【常见场景演示】

如果目标文件不存在,使用追加命令会自动创建一个新文件,并把内容写入这个新文件中

对已存在的文件执行追加操作时,内容会默认换行后再添加:

也可以单独追加一个换行到文件中:

5、输入重定向

输入重定向是将文件中的内容作为命令的输入,替代原本从键盘等标准输入设备获取数据的操作

【常见场景演示】

虽然下面指令的输出结果一样,但是实际上第一个是把文件的内容重定向到 cat 命令的输入,让 cat 读取该文件内容并输出;第二个则是 cat 命令直接读取指定文件 test.c 的内容并输出。二者最终呈现的结果相同,但操作的逻辑和底层的输入源指定方式有细微差别,不过在实际使用中,这两种方式都能达到查看 test.c 文件内容的目的。

℡. 查看大文件的指令

1、more指令

语法:more [选项][文件]功能:more命令,功能类似 cat常用选项:                 -n:对输出的所有行编号                  q:退出more

more可以打满一屏输出就停下来,让用户下翻逐行进行阅读,但是不适合使用大文本,比如查看日志,逐行查看会很废时间。

 对于↑↓健一般没啥用,只能通过回车执行下翻,其实我们并不怎么推荐这个指令,更加推荐下一个指令

2、less指令

less 工具是对文件或其他输出进行分页显示的工具,可称为 Linux 正统查看文件内容的工具,功能十分强大。

less 的用法比 more 更具弹性。使用 more 时,无法向前翻页,只能往后查看;而使用 less 时,可利用↑↓等按键前后翻看文件,更便于查看文件内容。

此外,less 具备更多搜索功能,不仅能向下搜索,也能向上搜索。

语法:less [参数] 文件

功能:less 与 more 类似,但使用 less 可随意浏览文件,more 仅能向前移动,不能向后移动,且 less 在查看前不会加载整个文件。

常用选项

-i:忽略搜索时的大小写

-N:显示每行的行号

/ 字符串:向下搜索 “字符串”

? 字符串:向上搜索 “字符串”

n:重复前一个搜索(与 / 或?有关)

N:反向重复前一个搜索(与 / 或?有关)

q:quit

3、head指令

语法:head [参数] [文件]

功能:head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行

常用选项:

-n <行数>指定显示前 N 行(简化写:-<行数>)例:head -n 20 file.txt = head -20 file.txt(显示前 20 行)

-c <字节数>按字节显示开头内容例:head -c 100 data.bin(显示前 100 字节)

-q多文件时不显示文件名

-v多文件时先显示文件名
head指令演示

4、tail指令

语法:tall [必要参数] [选择参数] [文件]

功能:用于显示指定文件的末尾内容;若不指定文件,会将输入信息作为处理对象。常被用于查看日志文件。

常用选项 :

-f实时监测文件,新增内容会自动显示(常用于看日志)例:tail -f access.log

-n <行数>
指定显示末尾 N 行;-n +N 表示从第 N 行显示到末尾例:tail -n 20 log.txt(末尾 20 行);tail -n +100 log.txt(第 100 行到末尾)

-q多文件时不显示文件名

-v多文件时先显示文件名

【问题:如何得到一个文件5000-5010行的内容】

正常操作是创建一个新文件,将原文件前5010行内容输出重定向到新文件中,然后取新文件的后10行

这里存在一个致命的缺点:它需要创建临时文件进行中转。

这里还有一种解决方法:需要用到我们前面提到的管道(后面会详细讲解管道的原理)

先从 num.txt 中取出前 5010 行,再从这 5010 行里取出最后 10 行(也就是原文件中 “第 5001 行到第 5010 行” 的内容)

☋. 时间相关的指令

1、Date指令

date 命令用于显示或设置系统的日期和时间,在系统管理、脚本编写等场景中十分常用。

语法:date [选项][+格式]

功能:

1、显示当前系统的日期和时间,可通过指定格式来定制显示内容。

2、具备设置系统日期和时间的功能(需 root 权限)。

3、支持日期与时间戳之间的相互转换。

【显示方面】

使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,常用标记如下:

%H小时(00..23)

%M分钟(00..59)

%S秒(00..61)

%X相当于 %H:%M:%S,显示时间部分

%d日(01..31)

%m月份(01..12)

%Y完整年份(0000..9999)

%F相当于 %Y-%m-%d,显示日期部分

示例:date +%Y:%m:%d 可按 “年:月: 日” 的格式显示当前日期。

【设定时间方面】

只有 root 权限才能设置系统时间,普通用户仅能查看。常见设置方式:

用法示例效果说明
date -s 20080523设置日期为 2008-05-23,时间默认 00:00:00
date -s 01:01:01仅设置时间为 01:01:01,日期不变
date -s "01:01:01 2008-05-23"同时设置时间(01:01:01)和日期(2008-05-23)
date -s "01:01:01 20080523"同上,日期格式为无分隔符形式
date -s "2008-05-23 01:01:01"同上,日期在前、时间在后
date -s "20080523 01:01:01"同上,日期(无分隔符)在前、时间在后

【时间戳】

时间 -> 时间戳:date +%s,可将当前时间转换为从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数(Unix 时间戳)。

时间戳 -> 时间:date -d@<时间戳>,例如 date -d@1508749502,可将时间戳转换为对应的日期和时间。

Unix 时间戳(英文为 Unix epoch、Unix time、POSIX time 或 Unix timestamp)是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。

2、Cal指令

cal 命令用于在终端显示公历(阳历)日历,方便查看日期相关信息。

语法:cal [参数] [月份] [年份]

功能:用于查看日历等时间信息。若只有一个参数,该参数表示年份(范围 1 - 9999);若有两个参数,依次表示月份和年份。

常用选项:

-3显示系统前一个月、当前月、下一个月的月历,能直观查看连续三个月的日期情况。

-j显示日期在当年中的第几天(一年日期按天算,从 1 月 1 日起算),默认显示当前月各日期在当年的天数。

-y显示当前年份的完整日历,可查看一整年的日期分布。

举例:

cal -y 2018:显示 2018 年一整年的日历,能看到该年每个月的日期排布。

cal 12 2025:显示 2025 年 12 月的日历。

cal -3:显示系统当前月及前后各一个月的月历。

cal -j:显示当前月各日期在当年的天数(比如 1 月 5 日会显示为 5)。

演示:

☺. 查找文件指令

1、find指令

语法:find pathname -options

功能:用于在文件树中查找文件,并作出相应的处理(过程可能访问磁盘)。

常用选项:

选项作用示例
-name按文件名精确匹配(区分大小写),支持通配符(*任意字符、?单个字符)find /home -name "test.txt"(找 test.txt);find /etc -name "*.conf"(找.conf 结尾文件)
-iname-name,但忽略大小写find / -iname "Test.txt"(匹配 Test.txt/test.txt 等)
-not -name查找不匹配指定文件名的文件find /var -not -name "*.log"(找不以.log 结尾的文件)
find指令演示

2、grep指令

语法:grep [选项] 搜查字符串 文件

功能:在文件中搜索字符串,将找到的行打印出来

常用选项:

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行

-E:启用扩展正则表达式(等价于 egrep),支持更复杂的匹配规则(如 |“或”、() 分组等),无需额外转义符号【常用正则符号(搭配 -E 更易用)】:

^行开头锚定符,匹配以指定字符 / 字符串开头的行(例如 ^a 表示匹配以 “a” 开头的行)
grep指令

☆. 打包和压缩指令

打包和压缩是什么?

比如你上学需要装东西,打包好比拿一个麻袋装起来,而压缩就是先把东西整理好再放进去。

打包和压缩作用

        缩小体积,占据磁盘空间比较小,下载速度快

        不会轻易的丢失文件

        便于网络传输

1、zip和unzip指令

zip 用于将目录或文件压缩(压缩+打包)成 zip 格式,unzip 用于解压(解包+解压缩) zip 格式的压缩包,在文件归档、传输等场景中常用。

语法:

   [zip] [压缩文件.zip] [目录或文件] 

   [unzip] [压缩文件.zip] [-d 目标目录] 

功能:

   zip:将指定的目录或文件压缩成 zip 格式的压缩包

   unzip:对 zip 格式的压缩包进行解压操作

常用选项(zip)

   -r:递归处理,将指定目录下的所有文件和子目录一并压缩,保证目录结构完整。

常用选项(unzip)

-d <目标目录>:指定解压后的文件存放目录,若不指定,默认解压到当前目录。

-l:查看压缩包内的文件列表,不解压。

-o:覆盖已存在的文件时不提示,直接覆盖。

【使用场景】:

下面是没有使用-r选项的场景:

先把lesson01压缩成了lesson01.zip,再解压lesson01.zip,发现解压后只有一个lesson01空目录,这是由于压缩dir目录时,没有使用-r递归处理,所以只有那个空目录被压缩。

下面是使用-r选项后的场景:

当前目录下只有一个lesson01,我把lesson01压缩到当前目录,删除了之前的lesson01,解压lesson01.zip,发现lesson01目录下的所有文件都在,这表明了,整个目录的文件都被压缩并且解压

还有一种方法:使用通配符*

我先把lesson01压缩到当前目录,最后再解压到当前目录的lesson02目录中,发现lesson01完全一致

2、tap指令:打包/解包/不打开它,直接看内容

tar 是 Linux 中打包、解包、压缩、解压的核心工具,可将多个文件 / 目录整合为一个 “tar 包”,还能结合 gzip/bzip2 压缩,常用于备份、传输。

核心参数

参数含义
-c创建 tar 包(打包)
-x解开 tar 包(解包)
-t查看 tar 包内的文件列表
-z结合 gzip 压缩 / 解压(生成 .tar.gz/.tgz
-j结合 bzip2 压缩 / 解压(生成 .tar.bz2
-v显示压缩 / 解压过程(打印文件名,方便看进度)
-f指定包文件名(必须紧跟 -f,是最核心的参数)
-C解包时,指定解压到的目标目录
-p保留文件的权限、属性(备份时常用)

1. 打包 + 压缩(tar -czf

将文件 / 目录打包后用 gzip 压缩,生成 .tar.gz(或简写为 .tgz)格式。

命令格式

tar -czf 压缩包名.tar.gz 要压缩的文件/目录 

示例:把 lesson01 目录打包压缩成 lesson01.tar.gz

2. 预览压缩包内容(tar -tzf

不解压,仅查看 .tar.gz(或 .tgz)压缩包内的文件列表。

命令格式

tar -tzf 压缩包名.tar.gz 

示例:查看 lesson01.tar.gz 里的文件

3. 解压 + 解包(tar -xzf

将 .tar.gz(或 .tgz)格式的压缩包解压并还原文件 / 目录。

命令格式

tar -xzf 压缩包名.tar.gz [-C 目标目录] # -C 可选,指定解压目录 

示例 1:直接解压到当前目录

示例 2:解压到 /tmp 目录

格式小知识:

.tar 是打包后缀(表示 “tar 包”);

.gz 是gzip 压缩后缀

因此 .tar.gz 可简写为 .tgz,两种后缀格式等价~

(下面的做个了解,有需要的看)

范例一:将整个 /etc 目录下的文件全部打包成为 `/tmp/etc.tar` [root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩! [root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩 [root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~ 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~ 上述指令在执行的时候,会显示一个警告讯息: 『`tar: Removing leading `/" from member names`』那是关於绝对路径的特殊设定。 范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件? [root@linux ~]# tar -ztvf /tmp/etc.tar.gz 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要的! 范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下 [root@linux ~]# cd /usr/local/src [root@linux src]# tar -zxvf /tmp/etc.tar.gz 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说, 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz , 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔! 范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp [root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件, 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了! 范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限! [root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时! 范例六:在 /home 当中,比 2005/06/01 新的文件才备份 [root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home 范例七:我要备份 /home, /etc ,但不要 /home/dmtsai [root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc 范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件! [root@linux ~]# cd /tmp [root@linux tmp]# tar -cvf - /etc | tar -xvf - 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的! 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~ 这分别代表 standard output, standard input 与管线命令啦! 

▷. 其他指令

1、bc指令

bc是 Linux 系统中一款便捷的浮点运算计算器工具,可直接在终端中进行各类数学计算。

在交互界面输入quit并回车,即可退出计算器

2、uname指令

语法: uname [选项]

功能: uname 用来获取电脑和操作系统的相关信息

补充说明: uname 可显示 Linux 主机所用的操作系统版本、硬件名称等基本信息

常用选项:

-a 或 --all:详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。

-r:仅显示内核版本号

℡. 热键

[Tab] 按键:具有「命令补全」和「档案补齐」的功能

[Ctrl]+c 按键:让当前的程序「停掉」

[Ctrl]+d 按键:通常代表「键盘输入结束(End Of File, EOF 或 End Of Input)」;另外,也可以用来取代 exit

[ctrl]+r 按键:搜索历史命令,Linux 会默认记录最新的 1000 条


©. 关机指令

语法:shutdown [选项]

常见选项

                -h:将系统服务停掉后,立即关机

                -r:将系统服务停掉后,重新启动

                -t sec:-t 后加秒数,即「过几秒后关机」的意思

☆. 拓展指令

1、安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last

2、文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln

3、系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab

4、网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup

5、系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、ps、who

6、其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk