Linux命令使用技巧和帮助信息获取 | 学习笔记

简介: 快速学习Linux命令使用技巧和帮助信息获取

开发者学堂课程【Linux企业运维实战 - 入门及常用命令Linux命令使用技巧和帮助信息获取】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/550/detail/7599


Linux命令使用技巧和帮助信息获取


Linux命令使用技巧和帮助信息获取

Echo命令主要的作用是在终端上打印一些提示信息,其中在Echo显示的时候经常会调用一些相应的符号,例如双引号或者单引号,甚至还会出现反向单引号,在数字一旁边。

如果想显示一些字符串,例如可以直接写

echo”welcome to magedu”

这是可以把它打印出来的普通字符串,也可以一次显示多个变量。通过研究如下命令得出结论:

Echo echo $PS1

根据Echo echo $PS1 的显示结果来看,Echo命令把后面的当成字符串,$PS1是个变量。

如果加双引号Echo “echo $PS1”的结果也是一样的。双引号引起以后,他仍然把Echo后面的命令认为只是个字符串,但是变量确实识别出来了。

如果换一个单引号,执行如下命令:

Echo ‘echo $PS1’

这时候的结果不一样。刚才的PS1他能当成变量,现在PS1只认为是个普通字符串。

如果换成反向单引号,执行结果是是PS1的内容。如果输入如下命令:

echo MyHostname is `hostname`

只需有一个执行命令,执行结果就是把执行命令打印出来,所以改命令的执行结果就是Echo把hostname打印出来。一般来讲就是当一个命令调用另一个命令的标准输出的时候,就使用反向单引号,被调用的命令就放在反向单引号中。

希望另一个命令调用这个命令的输出信息的时候,一般被调用的这个命令要放到反向单引号里面。当然它和另外一个写法是等价的,命令如下:

echo MyHostname is $(hostname)

现在希望显示当前日期,首先创建一个空文件,创建空文件可以通过命令Touch来创建,但是现在希望这个时间,是用命令生成的,而不是手工去敲出来的。

因为今天执行这个命令,明天仍然还会执行,不可能今天看一眼时间再去执行这个命令。其中有一个命令就能显示出这个年月日的格式,就是date。

它显示年月日格式,其中有一个写法就是%F。所以如果想生成的一个日期加log的后缀的文件,就输入如下命令:

touch`date +%F`.log

LS这个程序它是个别名,但是他确实是个外部命令,在磁盘上有这个文件。现在就想把这个文件复制到data目录下,现在假设并不知道这个文件的路径,只知道有一个外部命令叫LS。现在想把这个命令对应的外部路径,包括这路径给它复制到说data目录下。复制命令就是CP命令。

例如把F1复制到第3项,就可以输入如下命令

cp f1/data

复制这个文件,把这个路径写上就行。但是假设现在只知道LS命令并不知道他路径,可以用刚才的写法:

cp `Which –skip-alias ls`/data

要单独执行一下这条命令:Which –skip-alias ls`/data

它的效果就是只显示路径不显示别名。命令的执行结果实际上就是/usr/bin/ls。先执行如下命令:

Which –skip-alias ls`/data

生成一个输出信息,然后再替代为

Which –skip-alias ls`

然后CP命令执行,把它复制过去。所以,对于命令套命令的操作来说,反向单引号较为方便。

反向单引号一般来讲都是命令去调用另一个命令的标准输出信息的时候经常会这么用。

前面讲的双引号,单引号以及反向单引号,这三者在平时执行命令的时候,他的规则如下:

如果是双引号的话,这个命令没当成命令,但是变量确实识别出来;单引号命令也不认识,变量也不认,就认为是普通字符串。反向单引号命令和变量通通都识别出来了,对于三者做归纳总结之后,有助于记忆。

尤其是发现单引号非常灵活,当一个命令调用另外一个命令的输出信息的时候,要把被调用的命令放到反向单引号里面。在平时执行命令的时候还会用到一些别的符号。例如花括号。输入如下命令:

echo{a..e}

以上命令的作用把A到E的都显示出,他是个表示的范围。既然如此,也可以表示数字范围,甚至还可以按照倒序或者顺序的规则来递增,这些都是非常实用的写法,a和A之间有许多特殊的符号,顺序都是按照ASCII码表里面的顺序来显示的。

其中还有以下写法:

echo {a,b,c}

以上命令的作用就是把ABC打印出来,这看不出效果来,加一个前缀file。加上之后,与之前不同的实际上就是把A和file,b和file,c和file做组合。输入如下命令:

echo file{a,b,c}.log{log.txt}

这就是数学里经常说的笛卡尔乘积,互相组合,组合出6个文件。如果用Touch命令就创建6个文件。将来可以非常方便地进行组合生成需要的一些文件。

在执行命令的时候,在Linux里有个非常好的功能,就是用tab键可以进行补全命令。无论是内部命令也好,外部命令也好,它都可以自动的加tab键补全命令。

当然前提有要求的。例如enabled,这个是个完整命令,但是也可以敲一部分,再敲tab键,把它补出来,但是前提是一定要确保输入的内容已经是唯一性。

例如Ena开头的,这3个字母开头命令如果只有enabled个命令,用tab键补全是没有问题的。但是以en开头的有好多命令,是无法自动补全的。

当然想知道所有以EN开头的命令,敲两次tab键,所有目前内部命令外部命令以en开头的就显示出来了。不仅命令可以补全,文件路径同样也可以补全,只要能确保它的唯一性,它都可以补全。有一些命令把它写全,但是这个命令的用法比较复杂,所以当按两次tab键的时候,他会把他的相关的子用法,子命令用法列出来,也就是说这个命令后面还可以跟这些子命令。对于这个内容,不需要特殊记忆。另外,在/的下面敲2个tab键,显示出来的实际上就跟目录下的所有文件列表。

tab实际上就是把当前目录下的所有文件全显示出来,它显示的是文件夹,显示的不是所有文件。

另外还可以列出所有用户。~+2个tab键就是所有用户列表。$+2个tab键,就是所有变量。=+2个tab键相当于LS-A。对于其他帐号不熟悉,因为许多帐号都不是给用户用的。

在Linux里面还有一个特性,也就是它支持命令行历史,就是可以查看一下曾经执行过的命令,也就是使用History命令, History是个内部命令,会列出曾经执行过的命令,它会记录下来曾经执行过的命令历史。

他会只记录最近的1000条。达到1000条就开始把最早的部分内容丢了。从哪能确认是1000条,它有一个变量HISTSIZE来决定。如果想记录更多,可以把这个变量加以修改。这个修改需要改一个文件Profile,在其中把HISTSIZE修改,它就可以让记录历史变得更多或者更少。

利用历史的好处就是不仅能看到曾经执行过的命令,还可以重复利用这些命令。例如想把这条命令再重复执行一遍,可以看到前面有编号,就可以直接写编号重复执行。这些历史放在内存中,当退出的时候他会把内存中些命令历史存放在磁盘中的一个文件中,这个文件就在每个用户的目录里。

但是这个文件不是实时更新的,不是敲一条命令就更新一下这个文件。是执行完命令以后退出的时候,他才会把内存中增加的新的历史,往这个文件里写。

如果是不正常关机,突然停电,就不会把命令写进去,就会丢失一部分。利用历史可以重复执行之前的操作。这个编号是正向的,当然也可以倒数的。如果想执行倒数第五条命令,可以用!-5表示倒数第5条命令。

也可以用上下方向键把曾经执行过命令给它调出来。Windows也有这个功能。如果想把上一条命令重新执行一遍,以上4种方法都行,

其中还有如下快捷操作方式:

!!并回车执行;

!-1并回车执行;

Ctrl+p并回车执行;

!:0,0就是表示前一条命运,但是他把后面的选项参数去了。如果输2个!

它是把前面的命令id -u wang重新执行一遍。对于这个命令来讲,wang属于参数,-u属于选项,id命令。

如果!:0,他只执行ID这个命令,后面这个选项和参数就去了,光执行命令本身。!后面跟上字符串,就是重复前一个最近的历史中,以某一个字符串开头的命令。

现在想执行type history这条命令。最近的历史中只有一个Type开头的,其他的都不是type开头的,这时候就可以不用写全,就敲Ty就行,以T Y开头的只找最近的一个命令。也以某一个字符串包含的,

例如想执行如下命令:

echo $HISTSIZE

就可以写如下操作:

!?HIST


在执行这些操作时候比较方便。还可以只打印历史,不去执行,就是光是把它显示出来不执行。!$可以打印最后一条命令的最后一个参数,这个叹号dollar是表示最后一个参数。其中Id -u wang,wang就是最后一个参数,!$就表示这个参数。

以后输入一些命令的时候,利用这些方式可以大大提高的输入速度效率,但也不能只追求速率。

另外,^string还可以删除上一个命令的第一个字符串。当然,它实际上如果有多个字符串的话,例如输入如下命令:

echo ABC

再输入如下命令:

^A

执行以上命令之后,就是把前面的命令的A删了。

^string1^string2可以把前一个命令中的第一个字符串替换成第二个字符串,但是它只替代第一个。

例如如下命令:

ouch/data/f1/data/f2

以上命令是一个完整命令,接下来想把data替换,换成root文件夹,完全没有必要重写一遍,只需要把data替换成root时,其他保留下来就可以。

方法如下:

^string1^string2

但是使用如上方法, 只替代第一个,后面就不替代了,如果都想替代也有方法,

方法如下:

!:gs/string1/string2

如果说命令比较长的时候,用这种写法比较方便。如果命令比较短,就适合简单修改。以上内容不要求记忆。

在历史中,也可以用ctrl加R来进行搜索历史。现在执行很多命令,想搜一个字符串就可以ctrl加R,然后就输log。自动就把历史中最近带log的命令显示出来了。

Ctrl G是从命令历史中退出。

此外,还有一些比较有用的写法,就是可以调用前一个命令的最后一个参数。例如看过Shadow这个文件,然后接下来想cat他,这时候没有必要把这个文件再重写一遍,就可以用以下写法:

!$

除了这种写法,还可以用快捷键,就是按ESC松手按.。或者按alt键但是不松手敲.。

但是Alt加.需要外设一下,在session Ocean中有一个按键,需要去调一下映射键,勾上使用ALT。以下方法也可以调用历史参数:

Command!^

以上命令实际上就是把前一个命令的最后一个参数作为此命令的参数。例如Echo ABC,对于这个命令来讲,ABC分别是它们的参数。 A是第一个参数,B是第2个参数。

想把前面的命令的第一个参数给它调出来,这时候就可以用以下方法:

command !^

如果执行以下方法:

command !*

该方法就是把前命令的所有参数作为此命令的参数。

对于history命令来讲,它还有一些常见的选项。

在Linux里面命令很多,如果想查以A打头的命令,可以输A+tab键,如果敲Y,它就全列出来了。事实上也没有必要去分别都研究它,有些命令常见的命令知道就行,然后需要的时候大概知道有这个命令,需要的时候,临时查帮助就行,所以这个查帮助的能力必须要有。

帮助的用法如下:

在Linux里如何来获取帮助。目前来讲很多人遇到问题通常都是搜索引擎,实际上很多情况下不一定有比较方便的条件提供上网。在linux中,获取帮助有很多种方法,其中 whatis 这个命令它本身是一个外部命令。它的功能非常简单,也非常实用,虽然不详细,但是至少会告知用途。

但是whatis有一个小问题,如果是刚刚装好的系统,他在执行的时候没有结果。因为whatis它在显示这些信息的时候,实际上是从数据库里把它显示出来的,而what is数据库刚刚装好,系统是不会生成的,需要等一段时间才会自动生成。

也可以去手工去创建数据库,创建数据库的方法如下:

makewhatis

如果是CentOS 7的话,可以用这个命令来创建数据库。在创建这个数据库之前,用what is RM就没有东西,就相当于刚装系统的时候,不过过一段时间以后,它会自动的执行whatis数据。CentOS6上用mandb创建数据库的,这两个写法是等价的。

在linux中,命令执行的时候有3种常见的情况,别名,内部命令,外部命令。对于内部命令enable ,history 来讲,查看帮助的用法非常简单,就是help后面跟上内部命令,他就可以列出这个命令的用法是什么。

三种不同的格式,用来显示和维护历史列表;显示历史列表,并且带有行的编号,如果这个文件被修改过,它在前面会加个*,就表示他被修改过。

接着看这些选项,例如第一个-C,清除所有的历史列表,通过删除所有的interests Entry条目。

历史是放在两个地方的,第一是内存,第二是history。在history 显示的时候,有一部分是从磁盘文件中读出来的,有一部分是在内存中的。

现在-C执行完毕以后,再去执行history,发现没有内容了,他清的是内存,磁盘文件还存在。当用户一登录的时候,它会自动的读取这个文件放到内存里去,后续再执行的命令历史,也放在里面。所以只要一退出再重新登录之前放在文件中的又显示出来了。如果想把删除的命令彻底不想显示,应该是先把这个文件执行R M删除后再执行-C。

输入的最新命令都是在内存里头,只有退出的时候,它才会把内存中的历史写到文件中。-d就是删除历史,按照偏移量(就是命令历史的编号),就是要删除第几条历史,可以删除所有历史,也可以删除第几条历史。

例如,现在想把203条删了,九,输入如下命令:

-d 203

-a,追加本次会话,新执行的命令历史列表至历史文件中。从会话中给他附加新的历史条目到历史文件,因为历史文件它不是实时更新的,只有正常退出的时候,他才会把内存中的历史往这个文件里写,但是现在就想马上往里面写,就可以用如下命令:

history -a

执行如上命令之后,就不需要退出来保存历史,可以实时的保存。

-r,读取data file,读历史文件附加到历史列表,就是从磁盘文件里面把一个文件里的内容读出来,然后把它追加到的命令历史列表中。追加到映射列表中,也就意味着和-a是相反的,也就是从磁盘文件里面读入到内存里去。

-w,把当前的历史写入到文件中,并且附加在这个历史的列表后面。当前历史在内存中,执行该命令就把历史写入到了文件中。例如历史有16条,文件里也不多,执行如下命令:

history -w

执行之后再执行一次,和执行一次相比,追加了一些新的信息,在进行不断地追加,也在往里面写东西。

-n,读所有的历史条目,但是他是从没有读过的文件中。现在在文件里面有很多历史,为了看得更清楚一些。把这个文件稍微删除一些,执行几个比较短的命令然后退出。退出完以后,重新看这个文件,这个文件只有几条命令。

这个文件和当前内存中的 history 的内容应该是一样的,因为是刚登陆,刚登陆以后,移动用户一登陆,就要把这个文件读到内存里,所以这些内容是从内存里来的。

现在另外一个用户,也在自己的电脑上执行一些操作,例如只限1000命令:

whoami

执行以上命令之后,他就把刚才自己在当前历史中写一些新指令写到文件里去了。在这个原来的终端上,它显示的还是旧的历史,但这个文件里面已经更新。

现在想把这些新的增加的内容读出来,放到的历史列表里,就执行如下命令:

history

默认情况一般是重新登录都在读,已经读过的就不读了,但是没读过的就给他读进来。

-p,执行历史扩展。在每一个ART,ART是参数,并且显示该结果,但是它并不保存到历史中。现在想执行命令,不让产生历史,也就是无痕浏览。不仅可以不记录历史,也可以把参数写入历史当中。也就是可以构造历史,可以伪造历史,篡改历史。

enable 也是内部命令,用help也能查看它的帮助,但存在一个小问题,在显示这个帮助的时候有可能显示的并不全面,和它相关的一些变量并没有完全显示,更为齐全的内部命令在bash里面,bash 本身是个外部命令。因为他是个二进制的程序,是个外部命令,外部命令查看帮助一般用 Man。外部命令查看帮助也可以用Help或者-H,但是每一个命令支持的帮助不同,中括号表示的是可选项,也就是说这里面东西可以加,也可以不加,不加的话,语法不是错的。

当然要完成特定功能还是要加一些特定选项。而竖线表示的是选其中的一个,不用都选行,是可选的。…表示可以加多个,例如LS,选项可以加多个,文件也可以加多个,就表示可以分很多个文件的意思。+format放在中括号里面表示这是可选项,可以有也可以没有。+format表示格式。%F等价于%Y-%M-%d,其中对应结果如下:

Y对应的是年,当然也可以小写,小写表示两位的年。m对应的是月。

D对应的是日。%F相当于把它组合起来,就是年月日给组合起来,中间用-给他粘起来。

-S选项就是秒。外部命令可以用--Help,或者是-H来显示帮助,当然不是所有命令都支持这个Help或者是-H的,date命令不支持杠H,有的命令它支持杠H,有的命令不支持。有些选项它不一定是帮助用法,反而它有特定功能。

data命令的用法,其中看这一个-d,它可以用来根据后面跟的这个字符串描述显示时间,有2种写法,一种是-d now,另一种是—date=now。如果想生成一个昨天的日期,生成一个日志文件。生成的文件是用Touch。

但是想显示的是昨天日期,例如现在凌晨1点钟,要把之前的日志文件生成一个文件放着,但是之前的日志就是昨天的,所以他应该写一个昨天日期。

用date命令生成一个昨天日期就是-b后面跟字符串,也就是touch`date -d “yesterday”+%F`.log。这是生产中比较实用的小技巧。甚至还可以用命令设置一下时间。假如说想把时间设成昨天的时间,可以用data-S。-S是设置时间,按照指定的字符串来直接设置时间,直接把时间就设成昨天的时间。其他时间都保留下来,当然硬件时间是准的。如果想回归到正确时间就用-s,<>表示变化数据,…表示是列表项,x|y|z表示或的关系,{}就表示分组。

如果要显示当前时间格式为2016-06-18 10:20:30,就要输入date “+%F %H:%M:%S”。

 

实际上在data命令里面,%HMS有一个T是和它等价的,需要注意,这是因为有空格,所以必须要加双引号,如果不加双引号,这个格式是错误的。

 

要显示前天是星期几,就输入date -d “-2 day” +%A。+A就是完整的星期几的描述。设置当前日期为2019-08-07  06:05:10,就输入date 080706052019.10


相关文章
|
1天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
2天前
|
Linux
【超全】Linux命令思维导图总结 值得收藏
【超全】Linux命令思维导图总结 值得收藏
8 0
|
2天前
|
Linux 文件存储 Windows
Linux常用的基础命令
Linux常用的基础命令
9 1
|
3天前
|
运维 关系型数据库 MySQL
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
|
3天前
|
运维 Linux Shell
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
|
3天前
|
运维 程序员 Linux
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
|
3天前
|
运维 Ubuntu 安全
运维最全linux 命令行操作串口_linux串口命令(2),2024年最新Linux运维源码的Binder权限是如何控制
运维最全linux 命令行操作串口_linux串口命令(2),2024年最新Linux运维源码的Binder权限是如何控制
运维最全linux 命令行操作串口_linux串口命令(2),2024年最新Linux运维源码的Binder权限是如何控制
|
3天前
|
运维 Linux Perl
运维最全linux 命令行操作串口_linux串口命令(1),21年Linux运维面经分享
运维最全linux 命令行操作串口_linux串口命令(1),21年Linux运维面经分享
运维最全linux 命令行操作串口_linux串口命令(1),21年Linux运维面经分享
|
3天前
|
消息中间件 运维 Linux
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
|
3天前
|
运维 Linux 程序员
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你