Linux入门指南:从零掌握基础指令
欢迎拜访:Madison-No7个人主页
文章主题: Linux入门指南:从零掌握基础指令
隶属专栏:从0到1掌握Linux
写作日期:2025年9月30号
目录
一、初识Linux操作系统
二、Linux基本指令
📖2.1 mkdir指令
📖2.2 ls指令
📖2.3 touch指令
📖2.4 pwd指令
📖2.5 cd 指令
重要结论:
📖2.6 rmdir && rm
📖2.7 man 指令
📖2.8 cp指令
📖2.9 echo指令
📖2.10 cat 与 tac 指令
📖2.11 mv 指令
📖2.12 more 指令(不推荐)
📖2.13 less 指令
📖2.14 head 指令
📖2.15 tail 指令
📖2.16 date指令
📖2.17 cal指令
📖2.18 find 指令
📖2.19 which 指令
📖2.20 whereis 指令
📖2.21 grep 指令
📖2.22 zip/unzip 指令
📖2.23 tar 指令
📖2.24 bc 指令
📖2.25 uname 指令
📖2.26 关机指令
三、Linux中⼏个常用的热键
四、如何理解重定向
输出重定向:>
输出追加重定向:>>
输入重定向:
五、shell命令以及运⾏原理
一、初识Linux操作系统
Linux操作系统是在1991年,由芬兰的科学家林纳斯·本纳第克特·托瓦兹在他22岁的时候发布了自己独创的操作系统—Linux,并将其开源。

最初的Linux操作系统是由部分汇编和C语言编写而成。且是一款开源(源代码公开)的操作系统,为什么要开源呢?在当时,1991年,苹果和微软(闭源)的操作系统已经问世十几年了,为了赶上苹果和微软的操作系统开源出来,这样就会有很多工程师,黑客愿意参加到Linux的开发,为什么他们愿意免费打工呢?因为这些顶尖的工程师并不缺钱而是愿景驱动他们,想寻找成就感,还有那些反对苹果、微软的工程师也会参与到该项目。
那开源到底好不好呢?
首先我们得知道衡量操作系统的好坏,要从性能、稳定性、安全性方面去考虑。
其中安全性是最重要的,如果一款操作系统存在安全的隐患,那还敢去用吗?操作系统安不安全就是存在的bug多不多,如果开源的话就意味着有很多人去使用这款操作系统, bug就较容易发现,因为是开源的,所以发现bug和解决bug的人之间不存在利益冲突,而且针对某个bug,大家可以各抒其见,使用一种最优的解法,及时解决bug,同时也能让代码的质量更高。相反,苹果的操作系统就是闭源的,也就意味着发现bug的人也就是苹果内部的人,也就是只有苹果内部的人才有能力去发现bug和解决bug,如果发现bug,也就只有负责掌管那一两万行代码的工程师才能去改bug,所以发现和解决bug的效率不会太高。
综上:开源比闭源更好。
既然操作系统的安全性特别重要,所以在一些企业中,使用的操作系统内核并不是最新的,而是要用老一点的版本,因为越老的版本能发现的bug很多都发现完了,安全性就相对更高了。
关于Linux内核版本的名称:
Linux 操作系统的操作方式:
终端+指令操作
二、Linux基本指令
说明:以下所有指令的演示,均在阿里云服务器上。
在Linux中系统中,一切皆文件,文件分为两种,第一种目录 相当于windows中的文件夹,第二种是文件 ,它是文件内容+文件属性,文件属性就是文件名、文件的位置、大小、创建时间、修改时间等等,属性相当于就是文件的身份证和定位器一样。就算是空文件也要占据磁盘空间。就比如我们在windows系统下,新建一个文本文件,即使我们什么也不写,我们也能把它保存在一个文件夹下,也能通过路径找到它。
📖2.1 mkdir指令
功能:在当前目录下创建一个新目录;
语法:mkdir 目录名称
说明:可以理解为make directory。意为创建目录。
比如创建一个名为hello linux的目录。
这样就创建了一个名为"hello linux"的目录。
那我们怎么知道创建成功没有呀?
Linux当中就有一个ls指令,列出当前目录下的所有子目录与文件。
mkdir -p a/b/c/d/e 创建一串目录结构
tree命令是一个递归以树状结构显示指定目录的命令。
📖2.2 ls指令
功能:显示文件的属性。
语法:ls 【命令行选项】 【目录或文件】
单输入ls指令,默认只会显示当前文件下的文件名属性,"hello linux"就在其中。
ls -l指令 会以列的形式列出文件的属性。l是line的意思。
这里可以记一下,在Linux中,查看文件属性中,以d开头的是目录。
ls -a指令,会列出目录下的所有文件的文件名属性(显示隐藏文件)。a是all的意思
大家可以看到,上图中有很多文件以.开头,注意:以.开头的文件为隐藏文件,如果ls指令后面不加-a,就看到隐藏文件。
注意:命令行选项都可以混合使用,顺序随便,ls -l -a、ls -a -l、ls -la都行。
大家可以观察到,有两个目录的名称是 . 和 .. ,实际上,对于任何一个目录,即便是一个空目录,默认系统都会自带.和..目录。.表示当前目录,..表示上级目录。
ls 路径 -la 查看指定路径下的文件属性
ls 路径 -d 查看路径本身
📖2.3 touch指令
功能:新建一个普通文件(不是目录)。修改文件创建的时间。
语法:touch 文件名
新建一个"wwwChina"普通文件。新建好了,ls -l查看有没有。
大家可以发现,这个文件在Linux中是以-开头的,要记一下,它为普通文件。
📖2.4 pwd指令
功能:显示用户当前所在目录。
语法:pwd
说明:pwd可以理解为person work directory,用户工作的目录,也就是当前的用户所在的目录。
认识一下路径:
window下的路径。
windows当中用' \ '作为路径分隔符。处于两个\之间的一定是文件夹,处于路径最后的可能是一个文件或空文件夹。
Linux可以类比windows,Linux用'/'作为路径分隔符。处于两个/之间的一定是目录,处于路径最后的可能是一个文件或空目录。
📖2.5 cd 指令
功能:将当前工作目录改变到指定的目录下。
语法:cd 目录名
说明:cd可理解为change directory,切换路径。
把路径从/root/hello/linux切换到/root/hello。
从上面可以看出,cd ..的功能是退回到上级目录。当然也不是能够一直回退的,但回退到只剩/时就不能回退了。
这个 / 就叫Linux操作系统的根目录,根目录下可以放其他目录和文件。
重要结论:
Linux的文件结构,是一颗从根目录/开始的一个多叉树!叶子节点一定是普通文件或者空目录,非叶子节点一定是一个非空目录。
路径是找到文件的唯一途径。而路径具有唯一性,因为每一个目录或文件只有一个父亲。路径又分为绝对路径和相对路径。
区分绝对路径和相对路径:
- 绝对路径:从跟根节点开始到文件。在配置文件中进行使用
- 相对路径:以非空叶子节点为参照,定位文件。平时操作多
cd ~ 回到家目录,家目录就是任何一个linux用户,用特定的用户名登录上,默认在家目录下。
当前用户为root,所以家目录为root。
cd - 表示最近所处路径
📖2.6 rmdir && rm
rmdir指令:(基本不用)
功能:只能删除空目录
说明:rmdir可理解为remove directory,与mkdir命令相对应。
rm指令:(未来删除用它就行)
功能:默认只能删除普通文件。
说明:在root用户下,删除文件会提示。在普通用户下,删除不会提示。
rm -f 文件名 强制删除文件 f对应英文:forced
rm -r 文件名/目录名 递归删除目录及其下所有文件 r对应英文:recursion
如果要删除目录,rm就要加-r,因为目录是递归定义的。
把hello这个目录删除了。
提醒:千万不能随意使用rm -fr删除,在删除之前你一定要清楚该目录下的信息是否重要,避免因误操作而删除了重要文件。
* 在Linux中表示通配符,比如ls .* 显示出在该系统中含有 . 的所有文件或目录。
禁用:rm -rf * 或者rm -rf / 表示删除根目录下的所有文件和目录。千万不能这样写,否则系统会挂掉。
📖2.7 man 指令
功能:Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助
语法:man [选项] 命令
选项:
- -k根据关键字搜索联机帮助
- num只在第num章节查找
- -a将所有章节的都显⽰出来
man⼿册分为9章(不同系统可能会有差别)
- 是普通的命令
- 是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么头⽂件)
- 是库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
- 略
- 是指⽂件的格式,⽐如passwd,就会说明这个⽂件中各个字段的含义
- 是给游戏留的,由各个游戏⾃⼰定义 •
- 是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明
- 是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig
- 略
比如我们不会使用pwd命令,就可以使用man pwd,查看指令用法。
📖2.8 cp指令
功能:拷贝⽂件或⽬录
语法:cp 【选项】源文件 目标文件
说明:cp 可以想成copy英文单词
cp -r 源文件 目标文件或目录 因为目录是递归定义的,不加-r就不能拷贝。
cp 源文件 目录 会把指定的文件,拷贝到指定的目录内部
📖2.9 echo指令
功能:把后续内容当成字符串打印出来;
语法:echo 字符串
说明:echo 英文有回显的意思
📖2.10 cat 与 tac 指令
功能:查看⽬标⽂件的内容
语法: cat [ 选项 ] [ ⽂件 ]
注意:cat 指令 与 echo 指令区分。echo指令是把后续内容当成字符串打印出来,cat指令是把文件里面的内容打印出来。
cat -n 文件 在打印的时候,带上了行号。
还有一个指令tac 指令,反向显示文件内容。
📖2.11 mv 指令
功能:类似于剪切的功能。
语法:mv 【选项】 源文件或目录 目标文件或目录
说明:mv 是move的缩写。
因为上级目录中不存在hello.txt文件,所以mv指令就是剪切了,把hello.txt移动到上级目录下。
mv指令还可以对指定文件进行重命名。
注意:要区分mv指令是移动文件还是重命名。
如果目标文件不是目录或者不存在,就是重命名。
如果目标文件存在,就是剪切/移动。
因为helloworld.txt目录在当前目录下不存在,所以mv指令就是重命名了。将helloworld目录名改为helloworld.txt。
注意:在Linux中,同一目录下:不允许存在同名的文件或目录。
不同目录下:允许存在同名的文件或目录。
因为Linux中,路径具有唯一性,如果同一目录下,存在同名文件或目录,那该文件或目录的位置就无法通过路径找到它了。
📖2.12 more 指令(不推荐)
功能:查看文件内容。与cat类似
语法:more [选项] 文件
常用选项:
-n 指定输出行数
q 推出more
回车支持下翻,pgUp和pgDn都不是逐行上翻和下翻。
📖2.13 less 指令
功能:less与more类似,但使⽤less可以随意浏览⽂件。
语法:less 【参数】 文件
常用选项:
/ 字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
q 推出less
这条指令的功能是通过 while
循环,从 0
到 2000
依次计数,每次循环输出 hello
加上当前计数值,并将这些输出结果写入到 temp.txt
文件中 。
/99 表示向下搜索带99的,并会高亮显示。
📖2.14 head 指令
head与tail就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤ 来显⽰文件的开头⾄标准输出中,⽽tail想当然就是看文件的结尾咯。
功能: head⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。
语法: head 【参数】 ⽂件
选项:-n(⾏数)要显⽰的⾏数
📖2.15 tail 指令
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
语法: tail 参数 [ ⽂件 ]
选项:
- -f 循环读取
- -n 显⽰⾏数
看temp.txt文件结尾的20行:
那如果我们想看temp.txt文件中500-520行的信息呢?有两种方法:
法一:
用head指令,把temp.txt文件中前520行重定向到log.txt文件中,在用tail显示log.txt文件后20行即可。
这里之所以显示的是500-519行,是因为是从 0
到 2000
依次计的数。
法二:
将head和tail指令结合使用,用管道文件'|'连接。管道文件能将各种命令组合使用。
📖2.16 date指令
指定格式显⽰时间: date +%Y:%m:%d
⽤法: date [OPTION] [+FORMAT]
1. 在显⽰⽅⾯,使⽤者可以设定欲显⽰的格式,格式设定为⼀个加号后接数个标记,其中常⽤的标记列表如下:
- %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
2.时间戳
时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。
- 时间->时间戳:date +%s
- 时间戳->时间:date-d@时间戳
📖2.17 cal指令
cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳 历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。
命令格式: cal 参数 【年份】
功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰ ⽉份 和年份
常⽤选项:
- -3 显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
- -j 显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)
- -y 显⽰当前年份的⽇历
📖2.18 find 指令
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)
语法:find pathname -选项
常⽤选项:
- -name 文件名 按照⽂件名查找⽂件
比如我们要在家目录下,查找后缀为.txt的文件。*为通配符。
操作系统根据文件名(ls),在根目录下查找文件名为ls的文件。find查找类似于深度和广度优先遍历。
📖2.19 which 指令
功能:用于查找指令,到指定的目录下,去查找指定的命令。
📖2.20 whereis 指令
功能:查找程序的源、⼆进制⽂件或⼿册
📖2.21 grep 指令
功能:行文本过滤工具,系统会把包含有搜索字符串的行保留下来,让我们做内容的筛选。
语法:grep 【选项】搜索字符串 文件
常用选项:
-n :顺便输出行号
-i :忽略⼤⼩写的不同,所以⼤⼩写视为相同
-v :反向选择,亦即显⽰出没有 '搜寻字符串' 内容的那⼀⾏
📖2.22 zip/unzip 指令
补充知识:
什么是打包压缩?
打包:把许许多多的小文件合并成一个文件的过程。作用:防止文件的丢失。
压缩:由于打包所形成的文件体积很大,所以通过压缩文件,减小体积。作用:减小体积,节省存储空间,同时可以有效的减少网络传送的时间。
功能:将⽬录或⽂件压缩成zip格式。
语法:zip 需要压缩的文件.zip 需要压缩的目录或文件
- -r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理
操作:
zip -r dest.zip src
把lesson4打包压缩。
解压:unzip xxx.zip
把压缩包解压。
解压到指定目录下:unzip xxx.zip -d 指定目录
sz指令:表示send zip 发送压缩包
就能在windows电脑的指定位置找到该压缩包。
rz指令:表示receive zip 接收压缩包
所以:互传文件,要先进行打包压缩,再用rz和sz指令发送和接收压缩包。解压就能得到数据了。
此外,Xshell支持拖拽式的从windows向Linux上传压缩包。
📖2.23 tar 指令
说明:tar指令是tape archive(磁带存档)的缩写。最初用于将文件打包到磁带设备中,但现在广泛用于在文件系统中打包和压缩文件。tar 本身不压缩文件,但可以与压缩工具(如 gzip 或 bzip2)结合使用,创建压缩的归档文件(如 .tar.gz 或 .tar.bz2)。
语法: tar 选项 xxx.tar.gz(xxx.tgz) srcdir 把后者打包压缩成前者
选项:
- -c :创建一个新的归档文件;
- -x :解压归档文件!
- -t :列出归档文件的内容!
- -z :使用
gzip
压缩归档文件。- -j :使用
bzip2
压缩归档文件。- -v :显示详细压缩或解压过程(verbose)。
- -f :指定归档文件的名称(必须放在选项列表的最后),请留意,在 f 之后要⽴即接档名喔!不要再加参数!
- -C : 解压到指定⽬录下。
打包压缩:
tar czf lesson4.tgz lesson4
解压:
tar xzf lesson4.tgz
tar xzf lesson4.tgz -C /root 解压到指定目录下
scp dest.tgz 要传输到linux的用户名@该用户的公网IP:目标机器指定的路径
📖2.24 bc 指令
相当于Linux中的计算器
📖2.25 uname 指令
功能: uname⽤来获取电脑和操作系统的体系结构和系统内核版本。语法:uname [选项]常⽤选项:-a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理 器类型,硬件平台类型,操作系统名称
📖2.26 关机指令
常⻅选项:
- -h:将系统的服务停掉后,⽴即关机。
- -r:在将系统的服务停掉之后就重新启动
- -t sec:-t 后⾯加秒数,亦即『过⼏秒后关机』的意思
特别说明:远端的云服务永不关机,除非在维护或者该服务器不用了。
三、Linux中⼏个常用的热键
1.ctrl +c 终止异常任务;
2.上下键查看历史命令;
3.[Tab]按键---具有『命令补全』和『档案补⻬』的功能
4.ctrl +r :搜索历史命令 (history 查看历史自己输入的命令)
5.ctrl + d 退出当前Linux的用户
四、如何理解重定向
请你先记住:在Linux中,一切皆文件,具体原因,以后再解释。
linux中的文件有很多,有我们自己写的文件,还有系统默认打开的键盘文件、显示器文件等等,它们都是文件。
我们在学习C语言的时候,每次要对文件操作,都要先把文件打开吧,比如要向一个test.c文件中写入信息,
就要先确定文件的位置吧,就是要找到它并打开,C语言用fopen函数,它就是负责打开指定路径的文件,并设置对文件操作的方式,并返回一个指向 FILE
结构体的指针(即 “文件流指针”),FILE
结构体封装了文件的相关信息(如文件描述符、缓冲区、读写位置等),后续可以通过这个指针调用 fread
、fwrite
、fprintf
等函数进行文件操作。
fprintf就是向指定流文件中写入格式化数据,但是为什么printf函数直接就能在屏幕上输出信息了,它并没有指定要向那个文件流写入信息呀!因为系统在启动程序时,系统默认帮助我们打开了显示器文件(stdout)流文件。printf
可以看作是 fprintf
的特殊形式 ——printf(format, ...)
等价于 fprintf(stdout, format, ...)
,即固定向标准输出流(stdout
)输出。
在C语言中,stdin
、stdout
、stderr
这三个标准流文件本质上也是 FILE*
类型的文件流,由 C 标准库定义(在 <stdio.h>
中声明),只是由系统在程序启动时自动通过类似 fopen
的机制创建,无需手动fopen调用。标准输出流(Standard Output),默认对应屏幕输出。标准输入流(Standard Input),默认对应键盘输入。例如 printf()
函数默认向 stdout
写入数据。在Linux中,显示器文件文件对应就是stout流文件。也可以使用printf格式化输出数据。
那么为什么系统要帮我们打开这三个流文件呢?
我们写C程序,无非就是输入一些数据,再输出数据到屏幕上,如果系统不帮我们打开,就需要自己手动打开了,那多麻烦呀!因为最常用的就是那三个,如果你要用其他的流,自己打开就行了。
输出重定向:>
我们使用echo指令,在屏幕上打印出了一个字符串。也就是说:echo指令把后面的helloworld写入了显示器文件里,所以我们才看到了。
我们输入完这串指令时,屏幕上并没有显示后面的字符串。
ls查看一下文件属性,发现多了一个文件。
再cat查看文件里面的内容,结果显示helloworld。
综上:我们可以知道helloworld这段字符是被写入到了hello.txt的文件中,而没有写入到显示器文件,意思就相当于改变了这段字符的去向,原本是应该去到显示器文件里的,就能显示在屏幕上,但是这里用>做了重定向,让它去到了hello.txt这个文件中。所以我们把这样的操作叫做输出重定向。
注意: > 的特点:
echo helloworld > test.txt
a.后续文件不存在,新建它。
b.后续文件存在,要先清空,再写入。
输出追加重定向:>>
与输出重定向一样,只是后续文件中的内容不删除了,接着写入。
输入重定向:
当你使用cat指令,后面什么都不输时,系统会阻塞在那里。按ctrl+c可以终止。
此时,你在键盘上随便输入一些字母,数字,会直接显示在屏幕上。也就是说cat是在向键盘文件里读内容,把读到的内容反向的写到显示器文件,你就能看到了。
系统默认会从键盘文件里读内容,那我们不从键盘文件里读内容,从其他文件里读,就是输入重定向了。
从hello.txt文件里读内容,然后将读到的内容写入到显示器文件里。
其实,我们平时在登录远端服务器时,在/dev/pts下会新建一个文件,数字为0的文件。
再用同样的用户,在同一SSH下再登录一下:
此时/dev/pts又新增了一个数字为1的文件。
我们可以把终端也理解成一个文件,那我们在终端0中,就可以利用输出重定向先终端1中写入信息,就显示到了终端1上。
在Linux系统中,终端也是一个文件/dev/pts/xxx;
五、shell命令以及运⾏原理

- 将使⽤者的命令翻译给核⼼(kernel)处理。
- 同时,将核⼼的处理结果翻译给使⽤者。
第一次感性理解shell:
举一个例子帮助理解:
1.方便用户操作。
完。
今天的分享就到这里,感谢各位大佬的关注,还请大家多多支持,你们的支持是我前进的最大动力!