Linux系统 --- 指令
指令
- 前言
- 一、基本指令
- pwd
- whoami
- mkdir
- touch
- cd
- ls
- clear
- 二、详细介绍指令
- 1、ls
- ls -l
- Linux系统下的文件类型
- ls -a
- ls -l - a / ll
- 2、cd
- Linux的文件系统和路径
- cd . / ..
- cd 绝对路径/相对路径
- cd -
- cd ~
- 3、mkdir
- mkdir -p
- 4、rm
- rm -i
- rm -f
- rm -r (rm -ri)
- rm -rf
- 5、man
- 6、cp
- scp
- 7、mv
- 8、echo
- echo >
- echo >>
- 9、cat
- cat <
- tac <
- cat -n/-b/-s
- 10、more && less
- more
- less
- 11、head && tail
- head
- tail
- 管道
- 12、find
- 13、alias
- 14、grep
- grep -v/-n/-i
- 15、zip / unzip
- 16、tar
- 17、rz / sz
- 18、date / cal / top / bc
- date
- cal
- top
- bc
- 19、uname
前言
在Linux系统下,指令就是在命令行界面中输入指定的字符串序列,以用来完成文件管理、系统监控等的一系列操作。它是用户和Linux系统内核进行交互的主要方式。
学习Linux系统时,有些地方会对照着Windows系统进行类比学习。
本篇指令学习所用到两种用户,root用户和普通用户(dyj),所使用的Linux发行版本是Ubuntu22.04。
一、基本指令
所谓基本指令也就是非常基础的指令,学习后面的指令必须要掌握这里提到的基本指令。
pwd
学习此指令之前,在Windows系统下,我们开机之后所见到的页面,也就是桌面,它其实也是一个文件夹,是在C盘用户(Users)下自己的用户名(hahah)这个文件夹内的桌面(Desktop)这个文件夹里面,由于此文件夹里面的内容做了图形化处理,所以也就有了我们桌面的样子。也就是说我们一开始就是所处在一个特定的路径之下。
回到Linux系统下,我们完成登录后,在界面输入pwd,即可知道我们当前是所处在哪一个目录。
root用户:
普通用户:
这上述两条路径就是Linux系统登录成功后,用户默认处在的目录里。为什么会有两条不同的路径,因为用户不同,所处的默认目录也会不同。
当然,这只是pwd的用法之一,我们在任意目录下,pwd同样也可以知道我们当前是所处在哪一个目录。
whoami
此命令是用来确认当前登录的用户是谁。
root用户:
普通用户:
mkdir
此命令是用来创建一个空的目录(文件夹),在Linux系统下,目录就是Windows系统的文件夹。
上述指令是在test01这个目录下又创建了一个test02的空目录,cd指令是进入test02此目录,详情请在下文cd部分观看,之后再使用pwd输出我当前在哪一个目录里。
touch
此命令是用来创建一个普通文件的指令。例如创建.c源文件,.txt文本文件等。
上述指令是在test02这个目录里面创建了一个名叫code.c的普通文件,ls指令是输出当前目录下内容,详情请在下文ls部分观看。
cd
此指令是指定目标目录,并跳转至指定目录。例如上文的cd test02,就是跳转至test02这个目录。
上述指令是从默认目录跳转至test01这个目录里面去了。
ls
此指令是=显示当前目录里面的内容,此内容可以是普通文件,也可以是此目录里面的子目录。
上述指令是对test01使用ls之后,显示出子目录test02,进入test02这个目录里面,对其使用ls之后,显示出普通文件code.c。
clear
此指令就是一个清空屏幕的操作。
二、详细介绍指令
1、ls
上文说过ls是罗列、显示出当前目录里的内容。
在细讲ls指令之前,需要了解一个概念,在Windows系统里,我们创建了一个内容为空的空的文本文件XXX.txt,尽管这个文件内容为空,但是它依旧是占内存空间的,文件创建的时间,文件名,文件创建的用户,就是这之类的文件属性在占用内存空间,所以有一个结论,一个文件 = 文件属性 + 文件内容。
现在再回看ls,会发现罗列出的只是文件的名称,所以ls是罗列当前目录下的子目录或者文件的名称。
ls -l
ls -l这种样式的指令是ls(指令本身)加上-l(选项)组成的,其作用是罗列出当前目录下更加详细的文件属性或者子目录。
上面罗列出的就是一些创建时间,文件大小,文件名称,所创建的用户,还有一个接下来要介绍的文件类型。
(了解)stat指令更加详细的罗列文件属性信息
Linux系统下的文件类型
众所周知,在Windows系统下,标识一个文件的类型是通过文件的后缀来标识的,例如C源文件XXX.c,文本文件XXX.txt,可执行文件XXX.exe,等等很多的文件后缀;而在Linux系统下,标识一个文件类型不由文件后缀来决定,是通过文件属性最前面的一串英文的第一个字符所决定的。
例如上文ls -l中演示的test02文件,它最前面的一个字符是d,所以d就代表目录文件;演示的code.c文件,它最前面的一个字符是-,所以小横杠就代表普通文件。
尽管Linux系统不是通过后缀来标识文件类型的,但是不代表用户不能使用后缀来标识文件类型,在对文件进行命名的时候可以加上后缀,以增加可读性。
(了解)file指令可以显示出更加详细的文件类型。
对于目录文件:
对于普通文件:
ls -a
在讲此指令之前,需要了解在Windows系统里面是有隐藏文件(相较于正常文件,此类文件颜色更淡)存在的,在Linux系统下也是一样的存在着,隐藏文件是用一个点来标识的,在Linux下,空目录都会有一个点,两个点的隐藏文件。
ls指令加上-a选项,就是显示此目录下所有的内容,包括隐藏文件。
以至于一个点,两个点是什么,有什么用,我放在详细介绍cd指令里面去介绍。
ls -l - a / ll
这种样式的指令其实是指令本身选项的组合,-l是显示更多的文件属性,-a是显示隐藏文件,两者加起来就是显示包括隐藏文件的所有文件属性。也可以直接使用两个ll,这种写法也是可以的。
2、cd
上文曾说,cd是指定一个目标目录,并跳转至目标目录。
Linux的文件系统和路径
在细说cd指令之前,需要了解不论是Windows还是Linux系统,它们的文件系统都是一颗多叉树,并且标识文文件唯一性的都是通过路径来标识的,多叉树很好理解,就是我们学习的数据结构里的树状结构,通俗讲就是一个目录里嵌套子目录的这种情况;路径就是/root/test01/test02,这种样式的写法,在第一个命令pwd里面,Win和Linux的路径都有展示过。
既然Linux文件系统是一颗多叉树,此时就有两个显而易见的结论:
结论1:其叶子节点一定是空目录或者普通文件。
结论2:其非叶子节点的本质是目录。
那么既然认识到了文件系统是多叉树,此时就又有一个问题,为什么路径能唯一标识文件,这是因为,树的每一个节点的双亲节点都唯一。
所以也就能够引申出两种路径,绝对路径和相对路径。
绝对路径:以根节点(‘/’)为起点,到任意文件或者目录的路径。
相对路径:以当前目录或者文件为起点,到任意文件或者目录的路径。
上述两种路径都能唯一标识文件,不过绝对路径只有一条,而相对路径有可能有多条。
(了解)如何证明Linux的文件系统是树状结构? — tree命令
此命令一般在系统里面是没有安装的,安装命令如下:
Ubuntu:apt install -y tree
Centos:yum install -y tree
演示tree一下/root目录:
cd . / …
回到cd指令本身,在详细介绍ls部分,见到了一个点.和两个点…,一个点代表着当前路径,两个点代表上级路径。所以:
cd . :进入当前目录。
cd … :进入上级目录。
这个cd . 指令看起来没有什么区别,但是在我们要编译运行代码文件的时候,就需要它的出现了,因为在编译运行文件时候,首先的一步就是要找到它,所以前面就会接上 ./ 来表示在当前这个目录下寻找此文件。
cd 绝对路径/相对路径
我们也可以接绝对或者相对路径来进入目标目录。
假设当前我们在根目录下:
cd 绝对路径:
cd 相对路径:
相对路径这里,本身我就在test02这个目录下,现在想去test01目录下的子目录test03,相对路径如图所示。
cd -
cd - 是返回到上次所处的目录下,反复执行cd -命令,就可以在两个目录间反复跳跃。
cd ~
cd ~ 是返回家目录。
root用户家目录:
普通用户家目录:
3、mkdir
mkdir -p
单一个mkdir是创建一个空目录,mkdir -p是创建一连串的路径。
(不重要)rmkdir用来删除空的目录。
4、rm
rm是Linux系统下的删除命令,而且Linux下没有所谓的“回收站”,也就是删除不可恢复。
单一个rm是用来删除普通文件的,并且不会进行询问是否要删除此文件。
rm -i
需要进行询问删除是rm -i选项,此时需要按下y(yes)或者n(no)。
rm -f
rm -f是强制删除文件指令,也就是不会产生上面的询问是否需要删除。
rm -r (rm -ri)
rm -r是用来删除目录的,由于文件系统是一个树状结构,所以要删除目录就是使用递归删除,这个也会提醒。
rm -rf
rm -rf是强制删除目录。 这个需要特别注意一下,别使用它时删除了特别重要的目录。
5、man
此指令的作用是相当于帮助手册,详细罗列出需要了解的例如指令,系统调用等的用法、作用,不过都是英语,若要退出手册按q。
用法:
man 指令/系统调用/C库函数(此使用较少),并且man本身也是有分类的。
man + 指令(举例whoami):
man + C库函数(举例printf):
man本身分类:
只需要了解前三个,1就是指令(默认的,平常不用写),2是系统调用,3是C库函数,使用后两个的语法是:man 2/3 + XXX。
6、cp
此指令就是Linux系统下的拷贝,复制指令。
拷贝普通文件:cp 源文件 目标文件
上述指令是在test01目录下有我们的源文件code.c,使用了nano指令编辑了code.c的内容,现在在此目录下的子目录test04里有我们的目标文件testcp.c,拷贝语法就如上图所示,cat指令是用来查看文件的内容,后面我会介绍的。
拷贝目录:cp -rf 源目录 目标目录
scp
此指令用于远程拷贝,用于两个Linux系统下的文件网络传输。
用法:
scp 指定文件 username@目标用户服务器IP:目标目录 (传输文件)
scp -r 指定目录 username@目标用户服务器IP:目标目录 (传输目录)
使用scp回车后会要求输入目标云服务器下此用户的密码,密码输入时不回显。
7、mv
此指令有两个用法一是移动目标文件或者目录,类比Win下的剪切功能,二是重命名。
移动普通文件:mv 源文件 目标目录。
移动目录文件:mv 源目录 目标目录,这个不用加 -rf。
重命名:mv 源文件/目录文件 新的文件/目录名。
命名规则是系统中不存在,不可查找的新的文件名或者目录名。
8、echo
在了解此命令之前需要了解Linux系统的一个概念,就是在Linux系统下,一切皆“文件”,在计算机里常常有这两个操作,一个是向显示器打印,例如C语言的printf,另一个是从键盘获取数据,在Linux里就变成了向显示器文件写入,从键盘文件获取数据。
回到指令本身,echo指令是向显示器文件打印。
echo >
echo后面跟上一个大于号,是讲内容从显示器文件打印更替为输出到指定文件。
针对上面的一个大于号,我们叫它为输出重定向,有两个特点,一是若指定文件不存在,则会先新建文件,再将内容输入进去;二是重复向一指定文件输出重定向,则是先请空旧内容,再输入进文件。
echo >>
两个大于号的就叫做追加重定向,也就是内容在文件内追加输出。
上述两个输出重定向和追加重定向不止可以向文件进行输出,也可以在不同的Linux用户的终端上进行输出。
在Linux系统里的根目录下有一个终端文件目录dev/pts,里面存储着你相同IP下用户的标识,例如我这里的root账号就是0,我又登录了一个普通账号,标识就多了一位,也就是普通账号是1,向着终端’0’,输出重定向,那么root账号的这个屏幕就会显现内容,向着终端’1’,输出重定向,那么普通账号的这个屏幕就会显现内容,追加重定向也是如此。
9、cat
此指令有两种用法,一个直接使用,另一个是cat + 文件。
先说cat + 文件,这个是用来查看短小文件的内容的,在上面的指令演示过程中已经演示过了。
而直接使用cat是从键盘上获取数据,并回显到出来。退出按Ctrl c即可。
cat <
cat后面跟一个小于号,这个小于号就是输入重定向,是将文件的内容正序输出到屏幕上。
tac <
此指令是将文件的内容倒序输出到屏幕上。
cat -n/-b/-s
-n选项是将输出结果自动带有编号,空行也会被编号。
-b选项是对有效的内容进行编号。
-s选项会将连续的空行保留为一行。
10、more && less
这两个指令都是用来查看文件的内容的,与cat的区别在于这两个是用来查看长文件(例如日志文件)的内容。两个都是按q退出。
日志文件目录
Centos:/var/log/messages
Ubuntu:/var/log/syslog
more
此指令只支持空格向下翻,也就是按一次空格向下翻阅一次内容。
less
此指令支持方向键上下翻阅,也支持搜索匹配翻阅。
匹配: /搜索内容, N(向上匹配查找),n(向下匹配查找)
更加推荐使用这个。
11、head && tail
这两个指令是用来查看指定位置的文件内容。
head
此指令查看文件前几行的内容,没有给定选项,则默认只查看10行的内容。head -x,查看指定的x行内容。
上述图片就是利用head查看前10行的日志信息。
tail
此指令查看文件末尾几行的内容,没有给定选项,则默认只查看10行的内容。tail -x,查看指定的x行内容。使用效果和head同理,这里不再举例。
管道
学习了上面两个指令,这里就可以衍生出管道这一种语法。
举例一种情景,在一个1000行的文件中,你想要准确获得中间500行到515之间这15的内容时,先前所学的指令不能直接到达我们所需要的要求,这时管道就可以然我们提取到文件中间的内容。
所谓的管道就是指令head和指令tail之间的 ‘|’ ,先前不是说Linux系统下一切皆“文件”,这里的管道也可以看成管道文件,并且结合实际,管道肯定是有入口出口的,结合上述指令,先将head -515这515行的内容输出给管道文件,再将管道文件内的515行文件内容经tail -15,选出最后15行的内容,这样就形成了读取文件中间内容的操作。
管道可以组合指令(不仅仅是这里的head和tail),以形成流水线处理。
12、find
此指令是查找的功能,是真的会在目录树里面去查找的。
语法是:find 查找的路径 -name(选项) 文件或者目录
find也可以去查找指令:
这是会发现出现的都是一条一条的路径,所以就可以得出结论我们所学的绝大多数指令,其本质都是在Linux系统里固定目录内的二进制可执行文件。(固定目录:/user/bin/xxx)
(延申)which && whereis
which指令是专门用来查找指令的,而whereis指令是用于找到系统中的源、二进制文件或者手册。
which指令:
whereis指令:
13、alias
此指令是取别名。
语法:alias 别名 = ‘指令’
不熟悉Linux系统的新手建议少用,并且这个起的别名是内存级的,也就是退出系统后会自动销毁。若有别名,则使用搜索指令时,会先去搜索别名,并不会其固定的目录下去搜索。
14、grep
此指令是行文本过滤工具,本身是区分大小写的,所谓的行文本过滤工具,其实就是让满足给定条件的内容显示输出出来。
单一输入使用grep:
上述指令的意思是将htcode.c文件里面出现99的内容给输出显示出来。
grep -v/-n/-i
-v选项是和上面反过来,例如上面是只要出现99的就输出显示,这个是除开99选项的都输出出来。
-n选项是将输出的内容带上编号。
-i选项是不区分大小写进行输出。
15、zip / unzip
此指令是压缩/解压的作用。 此指令和下面的tar指令都是压缩/解压的作用,在Linux系统下压缩,打包不分家。
下载指令:
Centos:yum install zip / unzip
Ubuntu:apt install zip / unzip
zip语法:
zip xxx.zip 指定文件 - - - (压缩普通文件)
zip -r xxx.zip 指定目录 - - - (压缩目录)
unzip语法:
unzip xxx.zip - - - (解压在当前目录下)
解压至当前目录会覆盖源文件,导致看不出来什么区别,所以不做演示。
unzip xxx.zip -d 指定目录 - - - (解压在指定目录下)
上述指令是将test02.zip这个压缩文件解压至test01这个目录下的子目录test05。
16、tar
此指令是打包和解包的作用
用法:
tar czf或者cvzf xxx.tgz 指定文件或者目录 - - - (压缩打包成tgz文件)
tar xzf xxx.tgz - - - (解压至当前目录)
解压至当前目录会覆盖源文件,导致看不出来什么区别,所以不做演示。
tar xzf xxx.tgz -C 指定目录 - - - (解压至指定目录)
17、rz / sz
此指令用于Windows和Linux系统下通过Xshell实现双系统的网络传输。
用法:
rz:是Windows传给Linux,可以输入指令传输,也可以直接将Win的文件拖拽进Linux进行传输。
sz:是Linux传给Windows,这个只能输入指令传输,并且需要安装。
下载指令:
Centos:yum install lrzsz
Ubuntu:apt install lrzsz
18、date / cal / top / bc
date
此指令是默认输出Linux系统时。
也可以格式化输出系统时:
格式:date +%Y_%m_%d_%H:%M:%S,中间的连接符可以随意更换。
date +%s:获取时间戳:
这里的时间戳是一个计数器,是从1970年1月1日午夜0点开始计算。
也可以和上面结合起来格式化将时间戳转化为时间:
格式:date +%Y_%m_%d_%H:%M:%S -d @时间戳。
cal
此指令是输出日历。此指令需要安装。
下载指令:
Centos:yum install ncal
Ubuntu:apt install ncal
cal -3:输出上个月的日历。
cla 某年(例如2025):显现出2025年一整年的日历。
top
此指令相当于Windows里面的任务管理器,这里可以查看进程,cpu,内存等,若要退出按q。
也有升级的htop,当然这个要安装,这里有兴趣的可以自己去搜搜。
top -d 数字 -n 数字:按照一定的频率时间间隔来刷新。
例如:top -d 1 -n 5,就是每秒刷新一次,总共刷新5次。
bc
此指令是Linux系统下内置计算器,可以进行浮点数计算,这个了解即可。
19、uname
此指令是用来输出显示系统信息的,常用的两个选项-a和-r。
-a是输出显示机器的所有系统信息,例如,内核版本,架构等。
-r是只输出显示机器的内核版本。
(了解)cat /proc/cpuinfo 或者 lscpu ,显示cpu信息。
(了解)cat /proc/meminfo,显示内存信息。
(了解)查看系统版本
lsb_release -a
cat /etc/os-release