本文将详细的介绍Linux中各常见指令的用法,并且在每个指令都有使用样例。一共有以下指令:
1. man指令
2.目录基础指令:2.1 pwd指令、2.2 ls指令、2.3 cd指令
3.文件创建与删除:3.1 touch指令、3.2 mkdir指令、3.3 rmdir 指令 && rm 指令
4.文件修改指令:4.1 cp 指令、4.2 mv 指令
5.文件查看指令:5.1 cat 指令、5.2 more 指令、5.3 less 指令、5.4 head 和 tail 指令
6.时间相关指令:6.1 date 指令、6.2 cal 指令
7.文件查找指令: 7.1 find 指令 、7.2 grep 指令
8.文件解压缩指令:8.1 zip/unzip 指令、8.2 tar 指令
9.一些其他指令:9.1 bc 指令、9.2 一些重要的热键[Tab],[ctrl]-c,[ctrl]-d、9.3 关机指令 shutdow
注:本文中使用的Linux版本为CentOs7.9。若需要查看对应的指令用法,可直接根据目录进行查找。
1. man指令
所谓授人以鱼不如授人以渔,man 指令相当于matlab中的help函数可以帮助查询指令的用法。Linux的命令有很多的参数,我们不可能记全,但是我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是:
man指令
使用语法:
man [选项] 命令
注:当执行该命令时,会跳转到另一个页面,按 q 才会退出该界面。
我们在使用 man 指令之前,需要先在我们的Linux环境中对 man 指令进行相关的扩展安装,在原有的环境中有关于 man 指令的手册,但是不全,我们可以使用以下指令来进行扩展:
yum -y install man-pages
现在我们就可以开始对指令进行查询,查看指令的用法,如下:
输入指令: man rm ,得到:
当我们输入rm指令时就会跳转到另一个界面,该界面会详细讲解该指令的用法,其中,红框表示该指令的全称,蓝框表示该指令的用法,橙框表示该指令与其他参数的使用方法。
那当我们输入:man man 指令时呢,就表示查询 man 指令的用法,如下:
我们会发现,man指令一共可以搭配1~9的数字指令,其中每个数字指令代表的意思都不同,但比较常见的是前三种,至于后面的指令,由于不重要,我们就不做介绍。其中用得最多的是 2 。
数字1~3的搭配以及解释:
man 1 printf //在系统的默认手册中查找可执行程序、指令的用法(普通命令)
man 2 printf //系统调用,如open、write之类的指令
man 3 printf //在C库函数查找printf函数的用法
当我们执行了以上三条命令时,得出结果如上,1和3中的printf指令的用法不同,而在2中没有找到该指令的用法。
2.目录基础指令
2.1 pwd指令
功能:显示用户当前所在目录
语法:pwd
如上图,表示现在处于/root/test.dir这个目录当中。
2.2 ls指令
功能:对于目录,该命令列出该目录下所有子目录与文件。对于文件,将列出文件名以及其他信息。
语法:ls [选项][目录或文件]
常用选项:
-a 列出目录下的所有文件,包括以.开头的隐含文件;
-d 将目录像文件一样显示,而不是显示其下的文件,如:ls -d 指定目录
-l 列出文件的详细信息
-r 对目录反向排序
-t 以时间排序
-1 一行只输出一个文件
当我输入 ls -l 指令时,如下:
对于得出的文件,红框表示的是,该目录下的文件或者目录名,名前面的表示该文件或者目录的详细信息。
当输入ls -a 命令和ls -a -l 命令时:
由上对比可知,指令的参数之间可以叠加使用,ls -a -l 表示列出该目录下所有文件的详细信息(ls -a -l 同样可以写成ls -al 或者ls -la)。
当我们对比上图ls -l 列举出来的文件,发现ls -a 多列举出两个文件,其文件名为“ . ”和“ .. ”,其中“ . ”表示:当前目录,“ .. ” 当前目录的上一级目录。
2.3 cd指令
功能:改变工作目录。将当前工作目录改变到指定目录下。
语法:cd 目录名。
在Linux系统中,磁盘上的文件和目录组成了一颗目录树,每个节点都是目录或者文件,如下:
我们还可以通过命令操作来查看文件和目录是否为树状结构,如下:
在使用 tree 指令前需要先安装,如下:
yum install -y tree
其中,对于cd的操作,有以下几种:
cd .. :返回上级目录
cd /home/litao/linux/ :绝对路径
cd ../day02/ :相对路径
cd ~ :进入用户家目录
cd - :进入最近访问目录
如上图,通过 cd 指令对当前目录的切换的使用。
3.文件创建与删除
3.1 touch指令
功能:touch的命令参数可以更改文档或者目录的日期时间,包括存取时间和更改时间,或者创建一个新的不存在的文件。
语法:touch [选项]... 文件...
常用选项:
-t :使用指定的日期时间,而非现在的时间
-r :把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同
-m :或--time=mtime或--time=modify 只改变时间
-f :此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题
-d :指定的日期时间。而非现在的时间
-c :或--no-create 不建立任何文档
-a :或--time=atime或--time=access或--time=use 之更改存取时间
touch创建文件,如下:
对于该文件的创建,我们还可以使用另一个指令查看文件更为详细的信息,如下:
stat 文件名
如上,stat 指令只能查看文件的详细信息,但是不能查看目录的详细信息。
3.2 mkdir指令
功能:在当前目录下创建一个名为“dirname”的目录。
语法:mkdir [选项] dirname...
常用选项:
-p,--parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项将自动建立好那些尚不存在的目录,即一次性可以建立多个目录;
mkdir -p test/test1 :递归建立多个目录
如下:
使用递归创建出了多级目录。
3.3 rmdir 指令 && rm 指令
rmdir是一个与mkdir相互对应的命令。mkdir是建立目录,而rmdir为删除命令。
功能:删除空目录。
语法:rmdir [-p][dirName]
适用对象:具有当前目录操作权限的所有使用者。
常用选项:
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除
当我们想要删除目录时,rmdir 指令只能删除空目录,并且需要到对应路径下才能将其删除。
rm 指令可以同时删除文件或者目录。
功能:删除文件或者目录。
适用对象:所有使用者,不在局限于空目录或者空文件。
语法:rm [-f-i-r-v][dirName/dir]
常用选项:
-f 及时文件属性为只读(即写保护),同样直接将其删除
-i 删除前逐一询问确认
-r 删除目录下所有文件
如上图,当我们适用 rm 删除目录时,不能直接删除,需要加上 -r 参数,并且删除时,系统还会提醒是否需要删除该目录,输入 y 则表示同一,输入 n 则表示不同意删除。 若我们直接使用 -f 参数,那么系统将不会提醒是否需要删除该目录。另外,参数之间可以直接配合使用。
4.文件修改指令
4.1 cp 指令
功能:复制文件或者目录
语法:cp [选项] 源文件或或者目录 目标文件或者目录
注:cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或者目录复制到此目录中。若同时指定多个文件或者目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
常用选项:
-f 或 --force 强行复制文件或目录,不论目的文件或目录是否已经存在。
-i 或 --interactive 覆盖文件之前选询问用户。
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态不属于目录或符号链接,则一律按照普通文件处理。
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理。
如上图所示,我们可以使用类似于 rm 指令的参数形式进行 copy ,并且将其拷贝到另一个路径时,我们会发现,如果另一个路径没有该目录,那么会将源文件进行改名,并在该路径下创建。
若我们没有使用 -r 或 -f 参数,很可能遇到和上面直接使用 rm 指令相类似的问题。
4.2 mv 指令
mv 指令是 move的缩写,可以用来移动文件或将文件改名,是Linux系统下常用的指令之一,经常用来备份文件或目录。
功能:1. mv 指令中的第二个参数类型的不同(是目标文件还是目标目录),mv 命令将文件重命名或将其移至一个新的目录中;
2.当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件(源目录)只能有一个,它将所给的源文件或目录重命名为给定的目标文件名。
3.当第二个参数是已经存在的目录名称时,源文件或目标参数可以有多个,mv 命令将各参数指定的源文件均移动到目标目录中。
常用选项:
-f :force强制,如果目标文件已经存在,不会询问而直接覆盖。
-i :若目标文件已经存在,就会询问是否将其覆盖。
如上图所示,当我们直接使用 mv 指令时,若遇见同名文件时,那么会询问是否将其覆盖,若加上 -f 参数,则会直接将其覆盖,不会询问。当然,如果没有遇见同名文件时,也不会出现这种情况。 当然这只是对文件进行剪切,我们还可以对文件进行重命名,但其实底层逻辑是一样的,将其剪切到当前路径下,并且重命名,用在同一目录下就是重命名。
5.文件查看指令
5.1 cat 指令
功能:查看目标文件的内容;
语法:cat [选项][文件]
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
与cat相类似的一个指令:tac 文件名。可以将文件内容从最后开始打印。
另外,当我们需要在文件中写入内容时,我们可以使用以下指令对文件进行写入,如下:
nano 文件名
//若Linux中未安装nano,输入:yum -y install nano
当输入 nano 文件名 时,会进入这个界面,接下来就可以开始对文件进行编辑了。如果要退出来,ctrl+x退出,然后输入y,最后回车就可以退出来了。
如上所示,cat的各种用法,已经使用 tac 指令将文件内容倒着打印。
5.2 more 指令
功能:more 指令的功能类似于cat,但是如果对于大文件来说的话,cat会直接加载整个文件信息,而more只能显示部分信息,只能向前浏览,不能向后浏览,若想要查看到对应的位置,需要输入指令。
语法:more [选项][文件]
常见选项:
-n 对输出的所有行编号
q 退出more
如上图所示,当输入对应的编号时,会自动进行查找。找到对应的位置,不过唯一的缺点就是不可以向后浏览,只能向前浏览。
5.3 less 指令
功能:less 与 more 类似,但使用 less 可以随意的浏览文件,而 more 仅仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
语法:less [参数][文件]
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串 :向下搜索“字符串”的功能
n :重复前一个搜索(与 / 或 ?有关)
N :反向重复前一个搜索(与 / 或 ?有关)
q :quit退出
less的优点:1.less 工具也是对文件或其他输出进行分页显示的工具,应该说是Linux正统查看文件内容的工具。
2.less 的用法比起 more 更加有弹性。在 more 的时候,我们并没有办法向前面翻,只能往后面查看。
3.但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
4.除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
当我输入 less big.txt时,输出的结果如上,我们可以按pageup和pagedown,来查看上下的信息。也可以直接 /关键字 来查找对应的位置。
5.4 head 和 tail 指令
head 和 tail 就像它们的名字一样,是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 就是查看档案的结尾。
head 的功能:显示档案开头至标准输出中,默认 head 命令打印其相应文件的开头10行。
tail 的功能:显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
语法:head [参数]... [文件]... tail [参数]... [文件]...
常用选项:
-n 显示的行数
如上所示,可以显示文件内容的头和尾。
如何用头和尾来获得文件的中间部分内容呢,比如在这一万行的数据中,找到数据5090 ~ 5100行的数据,如下:
在命令行中使用了 “ | ” 来对数据链接,先将前5100各数据筛选出来,然后在筛选后11个,这样就得出了中间的数据。
6.时间相关指令
6.1 date 指令
在显示方面:
语法:date +%Y:%m:%d
使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
%H :小时
%M :分钟
%S :秒
%X :相当于%H:%M:%S
%d :日
%m :月份
%Y :完整年份
%F :相当于%Y-%m-%d
时间戳:
时间转化为时间戳:date +%s
时间戳转化为时间:date -d@1508749502(时间戳)
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
如上,对于时间的输出格式,可以由我们自己来定,对于时间戳的显示也如上。
6.2 cal 指令
功能:用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
语法:cal [参数][月份][年份]
常用选项:
-3 显示系统前一个月,当前月,下一个月的日历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
7.文件查找指令
7.1 find 指令
功能:用于在文件树中查找文件,并做出相应的处理。
语法:find pathname -options
常用选项:
-name 按照文件名查找文件
1. Linux下find命令在目录结构中搜索文件,并执行指定的操作。
2. Linux下find命令提供了相当多的查找条件,功能很强大。
3.即使系统中含有网络文件系统(NFS),find 命令在该文件系统中同样有效,只你具有相应的权限。
4.在运行一个非常消耗资源的 find 命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
上图所表示的以上按照名称在 ” / “目录中查找code.c文件。find 的查找其实是在目录的树形结构中查找文件,也就是说其实相当于对目录的遍历。
7.2 grep 指令
功能:在文件中搜索字符串,将找到的行打印出来。
语法:grep [选项] 搜索字符串 文件
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,即显示出没有“搜索字符串”内容的行
如上图,我们得出的在code.c文件中含关键字 999 的行。
8.文件解压缩指令
8.1 zip/unzip 指令
功能:将目录或文件压缩成zip格式/将zip格式的文件解压。
语法:zip 压缩文件.zip 目录或文件。
unzip 压缩文件.zip [-d /path/to/directory]
常用选项:
-r 递归处理,将指定目录下的所有文件和子目录一并处理
如上所示,将根目录下的 a 目录压缩在了 / 目录中,并更名尾 new.zip。
上图所示即为将压缩文件解压到目标文件。
8.2 tar 指令
功能:与 zip 、unzip 指令一样,具有压缩和解压缩文件的功能;
语法:tar [-cxtzjvf] 文件与目录 ...
常用选项:
-c :建立一个压缩文件的参数指令(Create)
-x :解开一个压缩文件的参数指令
-t :查看tarfile里面的文件
-z :是否同时具有gzip的属性?即是否需要使用gzip压缩
-j :是否同时具有bzip2的属性?即是否需要用bzip2压缩
-v :压缩的过程中显示文件,常用,但不建议用在背景执行过程
-f :使用档名,注:在f之后要立即使用档名,不要在有其他参数,即f是最后的参数
-C :解压到指定目录
对于以上的常用参数,我们通常只需要记住两个就可以了:
tar -cvzf name.tgz file1 file2 ... //压缩文件
tar -xvzf name.tgz [-C path] //解压文件
左图为压缩,右图为解压。
9.一些其他指令
9.1 bc 指令
bc 指令可以用于进行浮点运算,相当于一个计算器。
如上图,可直接输入 bc 指令进行计算器模式,ctrl+c退出计算器模式,也可以使用管道连接来计算。
9.2 一些重要的热键[Tab],[ctrl]-c,[ctrl]-d
[Tab]按键具有指令补全以及档案补全的功能;
[ctrl]-c按键可以让当前程序立即停掉,特别是一些陷入死循环的程序;
[ctrl]-d按键通常代表:键盘输入结束,另外,可以用来取代exit。
如上图的橙框,当输入的一些指令不全时,按两下 Tab 键,下面就会显示可能的指令,若只有一种指令则直接补全。ctrl+c 终止当前程序。 ctrl+d 会导致直接退出当前操作系统。
9.3 关机指令 shutdown
语法:shutdown [选项] ** 常见选项:**
-h :将系统的服务关掉,立即关机
-r :在将系统的服务关掉之后重启
-t sec :-t 后面加秒数,即过几秒后关机
因为我是云服务器的缘故,我便不在展示关机指令的操作。(理论上:云服务器严禁关机,但其实也可以关机,只不过之后操作起来稍微麻烦了一点)