1. 引言
在正式学习 Linux 指令之前,先花几分钟了解一下 Linux 的来龙去脉,会帮助你更好地理解为什么指令是这样设计的、为什么系统是这样组织的。这一节作为「前传」,只讲最核心的背景知识,不涉及具体指令操作。
2. 什么是 Linux
Linux 是一个开源的操作系统内核,最初由芬兰人林纳斯·托瓦兹(Linus Torvalds)于 1991 年发布。我们平时说的「Linux 系统」,实际上是 Linux 内核加上 GNU 工具集、各种应用软件共同组成的完整操作系统,通常称为 GNU/Linux。
简单来说,内核是操作系统的核心,负责管理硬件资源(CPU、内存、磁盘、网络等),并为上层应用提供接口。你敲下的每一条指令,最终都要经过内核来调度硬件完成工作。
3. 从 Unix 说起
Linux 的诞生离不开 Unix。Unix 是 20 世纪 70 年代由贝尔实验室开发的多用户、多任务操作系统,它奠定了现代操作系统的许多基础设计:
- 一切皆文件:设备、进程、网络等都被抽象成文件,统一用文件操作的方式管理。
- 多用户多任务:多个用户可以同时登录使用,系统按权限隔离。
- 模块化设计:系统由许多小工具组成,每个工具只做好一件事,再通过管道组合完成复杂任务。
Unix 后来分化出多个商业版本(如 BSD、System V),但因其闭源、昂贵,普通人难以接触。这为 Linux 的出现埋下了伏笔。
4. Linux 的诞生
1991 年,还在赫尔辛基大学读书的林纳斯·托瓦兹,出于学习和兴趣,编写了一个能在个人电脑上运行的小型内核,并把它发布到网上,命名为 Linux。他采用了 GNU 通用公共许可证(GPL),允许任何人自由使用、修改和分发源代码。
这一决定引爆了开源运动。全球的开发者共同参与改进,Linux 迅速成长为一个稳定、强大、免费的操作系统,并逐渐从服务器走向桌面、嵌入式设备、手机(Android 内核基于 Linux)乃至超级计算机。
5. Linux 的主要特点
- 开源免费:源代码公开,可自由修改和分发,成本低。
- 稳定可靠:长时间运行不易崩溃,广泛用于服务器。
- 安全:权限管理严格,多用户隔离,病毒相对较少。
- 多用户多任务:支持多人同时使用,任务并发处理。
- 强大的命令行:通过 Shell 可以高效地完成各种操作,这也是本系列要重点讲解的内容。
- 丰富的软件生态:通过包管理器可以方便地安装、更新软件。
6. 常见发行版
Linux 内核本身不直接面向普通用户,而是由各个发行版(Distribution)打包成完整可用的系统。常见的发行版有:
- Ubuntu:界面友好,适合新手,社区活跃。
- CentOS / Rocky Linux:稳定,常用于服务器。
- Debian:稳定、自由,是许多发行版的基础。
- Fedora:较新,技术前沿。
- Kali Linux:面向安全测试。
不同发行版在指令上大同小异,核心指令基本通用,因此学会一套,换发行版也能很快上手。
7. 为什么先学指令
图形界面虽然直观,但指令(命令行)才是 Linux 的灵魂:
- 指令更高效,批量操作、自动化脚本都依赖它。
- 服务器通常没有图形界面,只能通过命令行远程管理。
- 理解指令能帮助你深入理解系统的工作原理。
接下来的内容,我们将从最基础的指令开始,一步步带你掌握 Linux 的常用操作。
8、Linux基本指令
1、ls指令
语法:ls [选项] [目录或文件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信
息。

我们在这里使用的是超级用户(root)当我们输入ls的时候就可以看到我们在这个root目录下面的所有目录包括文件,我们可以看到里面包括一个目录113和一个普通文件test.c
补充:ls-l列出⽂件的详细信息(我们在后续多使用ll,ls -l的别名就是ll)

注意指令和后面的选项要有空格,在这里我们输入了ls -l,就可以看到列表当中更详细的信息 ,比如占多少字节以及创建的时间等等,不单单只有目录或文件的名称。
2、pwd命令
语法: pwd
功能:显⽰⽤⼾当前所在的⽬录


这里pwd简单来说就是我当前处在那个目录下面,很好理解
3、cd 指令
语法:cd ⽬录名
功能:改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下

我们可以看到一开始我们在root路径下,当我们ls之后发现里面有一个113目录,我们可以直接cd 113就直接进入到了113的目录下面,此时我们pwd就可以直接看出我们目前所处的目录就是113的目录。
补充:cd 只能跟目录名,不能跟普通文件,与此同时我们cd 目录,这里的目录可以是绝对路径,也可以是相对路径

这里我们既可以cd /root/113,也可以直接cd 113都是可以的。并且在介绍一下cd .和cd …
比如我们在113这个目录里的某个文件当中,当我们cd .就直接从某个文件返回到113这个目录下,而此时当我们处在113这个目录下之后,如果我们想返回上一个目录,我们就可以cd …就返回到/root根目录下面

当然如果我们想直接返回/root家目录我们可以直接cd ~就直接返回到家目录,就不用一步一步的返回上一个目录.
4、touch 指令
语法:touch [选项]…文件…
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在
的⽂件。
假如我们现在只有113这个处在/root家目录下的子目录,如果我们想在这个113目录下新建一个普通文件,此时我们就可以使用touch 文件

我们可以看到我们首先cd进入113这个目录下面,此时这个目录下面没有任何文件,此时我们touch 一个新的文件,此时我们可以看到此时113这个目录下面就存在一个新的文件test1.c
5、mkdir 指令
语法:mkdir [选项]…dirname
功能:在当前⽬录下创建⼀个名为“dirname”的⽬录
在上面我们学会了如何创建文件,如果我们想创建一个目录呢?
此时我们如果想在/root家目录下面再创建一个目录,我们就可以mkdir一个新的目录

我们可以看到我们mkdir 111这个新的目录在/root家目录下面
6、rm 指令
语法:rm [选项][目录或文件]
功能:rm命令可以同时删除⽂件或⽬录
当我们想要删除文件或目录的时候,我们可以直接统一使用rm -rf 文件或目录,注意如果我要删除某个文件的时候,必须先返回某个文件所处的目录,如果想要删除某个目录,必须先返回这个目录的上一个目录,这样才可以删除成功。
比如我们在上面的/root家目录下面新建了一个111目录,和在113目录下面建了一个文件test1.c

我们可以看到新建的111目录和test1.c文件已经删除完毕。
7、man 指令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助
语法:man [选项] 命令
比如我们上面所说的ls,如果我们想看一下ls可以跟那些参数,而我们忘记了,就可以man 指令,就可以查看某个指令的参数

8、cp 指令
语法:cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能: 复制⽂件或⽬录

我们可以看到我们此时有两个文件,一个是test.c和test1.c两个文件,其中一个文件test.c里面展开有内容,而另一个test1.c里面没有内容,此时如果我们想要把test.c里面的内容复制到test1.c里面去,我们此时就可以使用cp 指令

此时我们再次观察就可以看出这个文件就已经复制完成了。
假如我们想要把一个目录复制到另一个目录下呢?该如何做呢?
由于目录下面有很多子目录或文件,当我们想要复制时,就需要使用递归,而在这个指令后面添加一个-r参数

我们可以看到在这里我们在/root家目录下面新建了一个111目录,当我们想把113目录下面的各种子目录或着问件复制到111目录下时,就可以cp -r 113 111,就完成了复制粘贴
9、mv 指令
mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move(rename)files,经常⽤来备份⽂件
或者⽬录
语法:mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:
- 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其
移⾄⼀个新的⽬录中。 - 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬
录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。 - 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源
⽂件均移⾄⽬标⽬录中。
简答来说mv 指令的作用就是把目录或文件里的内容移动到另一个目录或文件当中,此时我们的家目录假如是这样的

此时/root家目录下面只有113目录和test.c文件,接下来移动目录或文件有两种可能
(1)移动到目标目录或文件已经创建,此时就是简单的移动
比如我们新建一个111目录

此时原来处在/root目录下的113已经移动到了新建的111目录下面
(2)移动到目标目录或文件没有创建呢?

当我们没有创建目标目录或文件时,此时mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
10、cat 指令
语法:cat [选项] 文件
功能:查看⽬标⽂件的内容
比如我们此时有一个test.c文件,当我们想要看一下这个文件里面的内容时,我们就可以cat 文件

如果我们想要在输出的内容上面加上行号,就可以cat -n 文件

11、more 指令
语法:more [选项]
功能:more命令,功能类似cat

12、less 指令
• less⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具,
功能极其强⼤
• less的⽤法⽐起more更加的有弹性,在more的时候,我们并没有办法向前⾯翻,只能往后⾯
看
• 但若使⽤了less时,就可以使⽤[pageup][pagedown]等按键的功能来往前往后翻看⽂件,更
容易⽤来查看⼀个⽂件的内容
• 除此之外,在less⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜。
语法:less [参数] 文件
功能:less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽
且less在查看之前不会加载整个⽂件。


当我们输入less 指令之后就直接进入到文件当中。
13、head 指令
head与tail就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤
来显⽰档案的开头⾄标准输出中,⽽tail想当然尔就是看档案的结尾。
语法:head[参数]… [⽂件]…
功能:head⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。
比如说我们在test.c文件当中,我们只想看前面的几行或着文件的某几行,此时我们就可以使用head 指令

因为我们这里的test.c文件里面的内容只有两行内容,所以我们这里就简单的测试一下,简单看一下这两个指令就可以了。比如我们想查看第一行,就head -1 文件,如果想看文件的最后一行,就tail -1 文件。
14、tail 指令
tail 命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂
件,tail-f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.
语法:tail 必要参数[⽂件]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。

对head和tail进行知识扩展:重定向和管道
如果我们想查看一个文件的某几行也可以这样写:

我们可以把 | 理解成一个管道,如果我们想要取文件的第一行或着最后一行,我们就可以先把这个文件先展示到这个管道内,让后在输入head 或tail 指令对管道内的内容进行操作,此时就取出了第一行或最后一行
15、date 指令
指定格式显⽰时间:date +%Y:%m:%d
⽤法:date [OPTION]… [+FORMAT]
- 在显⽰⽅⾯,使⽤者可以设定欲显⽰的格式,格式设定为⼀个加号后接数个标记,其中常⽤的标记
列表如下
• %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时,就会 帮我们显示当前所对应的时间,如果我们想看当前所对应的准确的时间,我们就可以按照上面指定格式显示时间,就可以显示出我们所对应的时分秒

此时,按照相应的格式就显示处当前时间的时分秒。
16、cal 指令
cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳
历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。
命令格式:
cal 参数[年份]
功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份和年份
常⽤选项:
•-3显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
•-j 显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)
•-y 显⽰当前年份的⽇历

当我们输入cal指令就会显示出当前所处的月份的日历
如果我们想看当年的日历我们可以在指令后面加上所想显示出的年份

此时我们输入当年(2026年)就可以把一整年的日历显示出来。
我们也可以显示当前月份的上个月和下个月

注意这里的-3代表的是当前的月份、上一个月、和下一个月,并不是本年的前三个月。
17、find 指令
• Linux下find命令在⽬录结构中搜索⽂件,并执⾏指定的操作。
• Linux下find命令提供了相当多的查找条件,功能很强⼤。由于find具有强⼤的功能,所以它的选
项也很多,其中⼤部分选项都值得我们花时间来了解⼀下。
• 即使系统中含有⽹络⽂件系统(NFS),find命令在该⽂件系统中同样有效,只你具有相应的权
限。
• 在运⾏⼀个⾮常消耗资源的find命令时,很多⼈都倾向于把它放在后台执⾏,因为遍历⼀个⼤的⽂件系统可能会花费很⻓的时间(这⾥是指30G字节以上的⽂件系统)。
语法:find pathname -options
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)
常⽤选项
•-name 按照⽂件名查找⽂件
• 其他选项需要在查,这个命令其实⽐较复杂
如果我们想查看一个文件所处的路径,我们就可以使用find指令对该文件进行查找,就可以找到对应的路径
比如我们当前的这个家目录下有这几个文件

此时,我们就可以找到我们想要的文件的绝对路径。
18、which指令
功能:搜索系统指定的命令

大白话讲就是说搜索我们上面所讲的这些指令的路径
19、alias 指令
功能:设置命令的别名
比如我们上面所写的ls -l,它的别名就是ll

20、grep 指令
语法:grep [选项] 搜寻字符串⽂件
功能:在⽂件中搜索字符串,将找到的⾏打印出来
常⽤选项:
•-i:忽略⼤⼩写的不同,所以⼤⼩写视为相同
•-n:顺便输出⾏号
•-v:反向选择,亦即显⽰出没有’搜寻字符串’内容的那⼀⾏

假如此时我们的test.c文件当中的内容是这些,如果我们只想打印出我们想要的指定的内容,此时我们就可以使用grep指令进行操作

如果我们忽略大小写,只要是我们想要的内容,无论大小写,我们都想打印出来,我们就可以进行增加参数,-i

此时,不管是大写还是小写,我们统统打印出来,如果我们想看一下我们所打印的内容处在原文本的哪一行,我们就可以再新添一个参数-n

这里如果有多个参数,参数的顺序不同,不影响最终的结果。
我们还可以进行反向操做,就是我们增加某个参数-v,代表除了我们所写的内容都不要打印,其他的都打印

看,此时我们增加了参数-v之后,就得到了除abcd之外文本的所有的内容。
21、zip/unzip 指令
语法:zip 压缩⽂件.zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式
常⽤选项
•-r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理
举例
将test2⽬录压缩:zip test2.zip test2/*
解压到tmp⽬录:unzip test2.zip -d /tmp

例如,我们如果想要把test.c文件打包到111目录下,我们就可以先将test打包成压缩包的形式test.zip,此时只需要将其test.zip文件解压让后传给111目录即可。

关于rzsz
这个⼯具⽤于windows机器和远端的Linux机器通过XShell传输⽂件.安装完毕之后可以通过拖拽的
⽅式将⽂件上传过去.

此时,我们输入sz 指定文件,让后回车就会要求我们发送到电脑的各个位置。
相反,我们也可以从桌面发生到Linux中,这里我们可以直接拖拽的形式直接拉到Linux当中,这里不在过多的讲解。
22 tar 指令
打包/解包,不打开它,直接看内容
语法:tar [-cxtzjvf] ⽂件与⽬录…
区别:这里的tar和zip有区别,zip是即压缩又打包,而这里的tar只打包,不做压缩。
•-c:建⽴⼀个压缩⽂件的参数指令(create的意思);
•-x:解开⼀个压缩⽂件的参数指令!
•-t:查看tarfile⾥⾯的⽂件!
•-z:是否同时具有gzip的属性?亦即是否需要⽤gzip压缩?
•-j:是否同时具有bzip2的属性?亦即是否需要⽤bzip2压缩?
•-v:压缩的过程中显⽰⽂件!这个常⽤,但不建议⽤在背景执⾏过程!
•-f:使⽤档名,请留意,在f之后要⽴即接档名喔!不要再加参数!
•-C:解压到指定⽬录

此时,我想把打包好的文件解压到111目录下面

这里不能直接写指定目录,要在目录前面加上-C,因为tar以为你要从包里提取111这个文件,但是包里啥都没有。
区分:tar:解压到别处->-C大写
unzip:解压到别处->-d小写
23、bc指令
bc命令可以很⽅便的进⾏浮点运算
这个指令很简单,这里我们直接举几个例子就可以掌握

这里输入bc指令之后,就跟进入一个计算机一样
24、uname‒r指令(面试考过)
面试问:怎么在Linux环境看你的体系结构和系统内核版本

第一个参数-a:全部信息,一次性输出内核+架构 +主机名
第二个参数-m:体系结构
第三个参数-r:系统内核版本
语法:uname[选项]
功能:uname⽤来获取电脑和操作系统的相关信息。
补充说明:uname可显⽰linux主机所⽤的操作系统的版本、硬件的名称等基本信息。
常⽤选项:
•-a或‒all详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
• lsb_release-a:查看操作系统版本。
9、shell命令以及运⾏原理
Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“,但我们⼀般⽤⼾,不能直接
使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为
什么不能直接使⽤kernel?
从技术⻆度,Shell的最简单定义:命令⾏解释器(commandInterpreter)主要包含:
• 将使⽤者的命令翻译给核⼼(kernel)处理。
• 同时,将核⼼的处理结果翻译给使⽤者。
大白话理解::如果说你是⼀个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头
漂亮的且有让你⼼动的MM⼩花。你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找
媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给⼩花,⽽我们找到媒婆
姓王,所以我们叫它王婆,它对应我们常使⽤的bash。

当我们写一个指令例如ls,pwd,find等等指令的过程是:
1.shell(外壳程序)生成子进程
2.子进程去跑命令
执行成功:子进程退出,销毁,返回退出状态0给shell
执行失败:子进程依旧正常退出,销毁,返回非0状态给shell
3.不管成功还是失败:子进程都会销毁,子进程死活不会破坏shell
4.shell拿到子进程返回的状态码,让后打印命令提示符,等待下一条输入

比如:当我们输入cat指令之后
创建cat子进程,cat发现找到文件,子进程退出,销毁,返回状态码是0,让后shell接收这个状态码为0的返回值,打印信息,此时shell本身完好,等待下一条指令的输入。
《Linux(一)Linux的基本指令操作和shell命令以及运行原理》 是转载文章,点击查看原文。