Linux操作系统基础解析之(四)——Linux基本命令剖析(1)

Linux操作系统自从出现以来,就备受关注。但是人们往往会有这样的一个印象:Linux比Windows难。为什么好多人都会有这样的想法呢?很简单,因为Windows是在更早的时候,甚至是大多数国人都没有认识到计算机的时候就已经被安装到X86架构的计算机上了。Microsoft公司寻求Intel公司的技术支持,并且建立合作之后,PC的市场就几乎被这两家公司垄断了。所以,很多人刚刚开始接触并逐渐学会使用计算机,Intel的X86架构的主机,而且这个主机上一般安装的都是Windows操作系统。因此,大家对于Windows的印象就是操作简单,易学易用。

可是我想问大家一个问题,如果某个项目启动了,项目部有6个项目小组参与了这个项目。有这么一个需求,利用Windows系统创建一个保存该项目数据的文件夹,并且在这个文件夹下面创建出每个项目小组的子文件夹。就这么简单的一个要求,我们在Windows里面需要完成的操作至少分作7步,先创建项目文件夹,然后进入这个文件夹之后,再分别创建文件夹并改名。每一个习惯使用Windows操作者大概都会这么做,而且还会以为这样非常简单。但是在Linux里面,像上述的操作,其实只要一条命令就可以完成,别说是7个目录的创建,就算是再多些,一个命令足以。所以你还以为Windows的操作真的是简单么?其实从操作角度来讲,Linux是比Windows更简单的操作系统,只是Linux需要的入门起点稍高一些,但也仅此而已了。

接下来我们就来说说Linux系统的基本操作,跟大家简单的剖析一下Linux里面基础命令的使用方法,即使你对Linux很陌生也没有关系,相信大家看过之后能够轻松的玩Linux了。

至于Linux命令的格式,在前面的博文中已经说过了,有需要的请查看之前的那篇博文《Linux操作系统基础解析之(三)——基本命令行操作及获得帮助的方法》。

基本命令:

  1.pwd:内部命令

功能:显示当前工作目录的名称

格式:pwd [-L|-P]

常用选项:

-L 如果$PWD变量捕获到了当前工作目录的名称就显示该变量的值。

-P 显示真实的物理路径,而不是用符号链接来显示。

注意:-L选项被指定为pwd命令的默认行为。

退出状态:

除非给出的选项无效或当前目录不可读,返回值均为0。

使用举例:

      [[email protected] ~]# cd /etc/init.d
      [[email protected] init.d]# pwd
      /etc/init.d
      [[email protected] init.d]# pwd -P
      /etc/rc.d/init.d
      [[email protected] init.d]#

  2.cd:内部命令

功能:改变shell的工作目录

格式:cd [-L|-P] [dir]

常用选项:

-L 强制跟随符号链接。(也就是说,如果cd命令的参数是某一目录的符号链接,那么在更改目录之后,使用pwd -L命令显示的结果是符号链接的路径,而不是其真实的物理路径。)

-P 使用物理目录结构而不跟随用符号链接。

退出状态:

如果shell的工作目录成功更改,则状态返回值为0;否则不为0。

使用举例:

      [[email protected] ~]# cd /etc/init.d
      [[email protected] init.d]# pwd
      /etc/init.d
      [[email protected] init.d]# cd -P /etc/init.d
      [[email protected] init.d]# pwd
      /etc/rc.d/init.d
      [[email protected] init.d]# 


  3.ls:外部命令

功能:将目录内容列表显示

格式:ls [OPTION]... [FILE]...

常用选项:

-a, --all:显示指定目录中包括"."和".."在内的所有文件。

-A, --almost-all:显示指定目录中唯独部包括"."和".."在内的其他所有文件。

--color[=WHEN]:给输出结果着色。WHEN的取值可以是always、none或者auto。

-d, --directory:用目录本身的条目代替其内容,并且不参考符号链接。

-F, --classify:给输出条目附加指示符。(可以简单区分文件类型:目录文件附加/;二进制文件附加*;管道文件附加|;套接字文件附加=;符号链接文件附加@,等等)

-h, --human-readable:通常与-l配合使用,以K、M、G为单位显示转换单位以后的文件大小

--help:显示简短的帮助信息

-i, --inode:显示每个文件的索引编号

-l:使用长列表格式显示每个文件的详细属性信息

-n, --numeric-uid-gid:类似于-l,只不过会将文件的属主和属组以ID方式显示,不显示名称

-r, --reverse:将输出结果按照倒序排列

-R, --recursive:递归地列表子目录中的内容

-s, --size:显示为每个文件分配了多少磁盘空间,与-h配合能够显示更加合适的单位,默认单位是KB

-S:将输出结果按照文件大小进行排序

-t:将输出结果按照内容修改时间进行排序

-u:与-lt选项配合,将输出结果按照文件的访问时间进行排序

-U:不排序,按照目录中存放的顺序显示

-1:以每行列表显示一个文件的方式输出结果

-Z, --context:只显示文件的权限、属主、属组、安全上下文和文件名。

--scontext:只显示文件的安全上下文和文件名

退出状态:

0  命名被成功执行

1  小问题(不能访问子目录等)

2  大麻烦(没有权限访问、目标文件不存在、选项错误等)

使用举例:

        [[email protected] ~]# ls -lt /tmp                
        total 80
        -rw-r--r--. 1 root root 10033 May 18 10:55 install.log.syslog
        -rw-r--r--. 1 root root 50828 May 18 10:55 install.log
        -rw-------. 1 root root  1465 May 18 10:55 anaconda-ks.cfg
        -rw-r--r--. 1 root root 10240 May 18 10:55 a.tar
        -rw-------. 1 root root     0 May 11 08:14 yum.log
        [[email protected] ~]# 
        [[email protected] ~]# ls -ltu /tmp
        total 80
        -rw-------. 1 root root     0 May 18 10:57 yum.log
        -rw-r--r--. 1 root root 10033 May 18 10:55 install.log.syslog
        -rw-------. 1 root root  1465 May 18 10:55 anaconda-ks.cfg
        -rw-r--r--. 1 root root 10240 May 18 10:55 a.tar
        -rw-r--r--. 1 root root 50828 May 18 10:55 install.log
        [[email protected] ~]# 
        [[email protected] ~]# ls -i /tmp
        7340036 anaconda-ks.cfg  7340038 install.log  7340034 yum.log
        7340037 a.tar   7340039 install.log.syslog
        [[email protected]localhost ~]# [[email protected] ~]# ls -Z /tmp
        -rw-------. root root unconfined_u:object_r:user_tmp_t:s0 anaconda-ks.cfg
        -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 a.tar
        -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 install.log
        -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 install.log.syslog
        -rw-------. root root system_u:object_r:root_t:s0      yum.log
        [[email protected] ~]#
        [[email protected] ~]# ls --scontext /tmp
        unconfined_u:object_r:user_tmp_t:s0 anaconda-ks.cfg
        unconfined_u:object_r:user_tmp_t:s0 a.tar
        unconfined_u:object_r:user_tmp_t:s0 install.log
        unconfined_u:object_r:user_tmp_t:s0 install.log.syslog
        system_u:object_r:root_t:s0      yum.log

由于内容过多,其他选项的组合请大家自行尝试。

  4.mkdir:外部命令

功能:创建目录

格式:mkdir [OPTION]... DIRECTORY...

常用选项:

-m, --mode=MODE:就像使用chmod命令那样为目录设置权限,而不是用a=rws - umask的方式

-p, --parents:根据需要创建父目录,如果已存在也不会报错

-v, --verbose:为每个被创建的目录显示一条信息

-Z, --context=CTX:将每个被创建的目录的SELinux的安全上下文设置为CTX

--help:显示帮助菜单信息

--version:输出版本信息并退出

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

使用举例:

        [[email protected] ~]# mkdir -pv /tmp/myproject/dir{1,2,3/dir{1,2,3}}
        mkdir: created directory `/tmp/myproject‘
        mkdir: created directory `/tmp/myproject/dir1‘
        mkdir: created directory `/tmp/myproject/dir2‘
        mkdir: created directory `/tmp/myproject/dir3‘
        mkdir: created directory `/tmp/myproject/dir3/dir1‘
        mkdir: created directory `/tmp/myproject/dir3/dir2‘
        mkdir: created directory `/tmp/myproject/dir3/dir3‘
        [[email protected] ~]#


  5.rmdir:外部命令

功能:移除空目录

格式:rmdir [OPTION]... DIRECTORY...

常用选项:

-p, --parents:如果移除目录后,其祖先目录也为空,则一并移除

-v, --verbose:输出每个被处理执行的目录的操作结果

--help:显示简短帮助信息

--version:输出版本信息并退出

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

使用举例:

        [[email protected] ~]# rmdir -pv /tmp/myprojects/james/first        
        rmdir: removing directory, `/tmp/myprojects/james/first‘
        rmdir: removing directory, `/tmp/myprojects/james‘
        rmdir: removing directory, `/tmp/myprojects‘
        rmdir: removing directory, `/tmp‘
        rmdir: failed to remove directory `/tmp‘: Directory not empty
        [[email protected] ~]#


  6.touch:外部命令

功能:改变文件的时间戳

格式:touch [OPTION]... FILE...

常用选项:

-a:只改变访问时间

-c, --no-create:不创建任何文件

-d, --date=STRING:分析STRING并使用它代替当前时间

-m:只改变修改时间

-r, --reference=FILE:参考指定文件的时间戳来设置目标文件的时间戳,不使用当前时间

-t STAMP:使用[[CC]YY]MMDDhhmm[.ss]格式的时间代替当前时间

--time=WORD:改变指定的时间,WORD可以是:access, atime, modify, mtime

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

使用举例:

        [[email protected] test]# touch file1        
        [[email protected] test]# stat file1
          File: `file1‘
          Size: 5         Blocks: 8          IO Block: 4096   regular file
        Device: 802h/2050dInode: 7340048     Links: 1
        Access: (0644/-rw-r--r--)  Uid: (    0/    root)  Gid: (    0/    root)
        Access: 2016-05-21 18:30:59.844000944 +0800
        Modify: 2016-05-21 18:30:59.844000944 +0800
        Change: 2016-05-21 18:30:59.844000944 +0800
        [[email protected] test]# touch --time=atime file1
        [[email protected] test]# stat file1
          File: `file1‘
          Size: 5         Blocks: 8          IO Block: 4096   regular file
        Device: 802h/2050dInode: 7340048     Links: 1
        Access: (0644/-rw-r--r--)  Uid: (    0/    root)  Gid: (    0/    root)
        Access: 2016-05-21 18:31:24.270000248 +0800
        Modify: 2016-05-21 18:30:59.844000944 +0800
        Change: 2016-05-21 18:31:24.270000248 +0800
        [[email protected] test]# touch --time=mtime file1
        [[email protected] test]# stat file1
          File: `file1‘
          Size: 5         Blocks: 8          IO Block: 4096   regular file
        Device: 802h/2050dInode: 7340048     Links: 1
        Access: (0644/-rw-r--r--)  Uid: (    0/    root)  Gid: (    0/    root)
        Access: 2016-05-21 18:31:24.270000248 +0800
        Modify: 2016-05-21 18:32:40.812005557 +0800
        Change: 2016-05-21 18:32:40.812005557 +0800
        [[email protected] test]#

  7.stat:外部命令

功能:显示文件或文件系统状态信息

格式:stat [OPTION]... FILE...

常用选项:

-L, --dereference:不显示符号链接文件的状态,而是沿着链接路径显示源文件的状态

-Z, --context:在显示结果中添加该文件的SELinux的安全上下文信息

-f, --file-system:显示目标文件所在的文件系统的状态信息而不是该文件的信息

-t, --terse:以简洁模式输出结果,慎用(因为输出结果很难理解)。

-c  --format=FORMAT:使用指定格式输出文件的状态信息。

常用的基于文件的有效格式包括(不考虑文件系统):

%a  以数字的格式显示目标文件权限

%A  以模式的格式显示目标文件权限

%C  仅显示目标文件的SELinux的安全上下文信息

%d  以十进制显示目标文件所在设备的设备号

%D  以十六进制显示目标文件所在设备的设备号

%F  显示目标文件的文件类型

%g  显示目标文件的所属组的GID

%G  显示目标文件的所属组的名称

%h  显示目标文件的硬链接数量

%i  显示目标文件的索引节点编号(inode)

%n  显示目标文件的文件名

%N  如果目标文件是符号链接,则引用文件名即链接关系

%s  以字节为单位显示目标文件的完整大小

%t  以十六进制的格式显示目标块设备文件的主设备号

%T  以十六进制的格式显示目标块设备文件的次设备号

%u  显示目标文件的属主的UID

%U  显示目标文件的属主的用户名

%x  显示目标文件的最后访问时间

%X  显示目标文件的最后访问时间,格式为从1970-01-01 0:00:00到最后访问时间所经过

的秒数

%y  显示目标文件的最后修改时间

%Y  显示目标文件的最后修改时间,格式为从1970-01-01 0:00:00到最后修改时间所经过

的秒数

%z  显示目标文件的最后状态改变时间

%Z  显示目标文件的最后状态改变时间,格式为从1970-01-01 0:00:00到最后状态改变时

间所经过的秒数

常用的基于文件系统的有效格式包括:

%a  显示目标文件所在的文件系统中非超级用户可用的空闲块的数量

%b  显示目标文件所在的文件系统中数据块的总量

%c  显示目标文件所在的文件系统中文件索引节点的总量

%d  显示目标文件所在的文件系统中空闲的文件索引节点的数量

%f  显示目标文件所在的文件系统中空闲的数据块

%C  显示目标文件的SELinux安全上下文(很特殊,仍然针对目标文件而非文件系统)

%i  以十六进制显示显示目标文件所在的文件系统的文件系统ID

%l  显示目标文件所在的文件系统中文件名的最大长度

%n  显示目标文件的文件名(很特殊,仍然针对目标文件而非文件系统)

%s  显示目标文件所在的文件系统的块大小

%S  显示目标文件所在的文件系统的基础块大小

%t  以十六进制显示目标文件所在的文件系统的类型

%T  以人们比较熟悉的名称显示目标文件所在的文件系统的类型

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

使用举例:

        [[email protected] test]# stat file1
          File: `file1‘
          Size: 5         Blocks: 8          IO Block: 4096   regular file
        Device: 802h/2050dInode: 7340048     Links: 1
        Access: (4644/-rwSr--r--)  Uid: (    0/    root)  Gid: (    0/    root)
        Access: 2016-05-21 18:31:24.270000248 +0800
        Modify: 2016-05-21 18:32:40.812005557 +0800
        Change: 2016-05-21 18:40:35.278997593 +0800
        [[email protected] test]# stat -c %A file1
	-rw-r--r--
	[[email protected] test]# stat -c %a file1
	644
	[[email protected] test]# chmod 4644 file1
	[[email protected] test]# stat -c %a file1
	4644
	[[email protected] test]# stat -c %C file1
	unconfined_u:object_r:user_tmp_t:s0
	[[email protected] test]# stat -c %d file1
	2050
	[[email protected] test]# stat -c %D file1
	802
        [[email protected] test]# stat -c %F file1
        regular file
        [[email protected] test]# stat -c %F /etc
        directory
        [[email protected] test]# stat -c %F /dev/sda4
        block special file
        [[email protected] test]# stat -c %F /dev/zero
        character special file
        [[email protected] test]# stat -c %F /etc/grub.conf 
        symbolic link
        [[email protected] test]# stat -c %g file1
        0
        [[email protected] test]# stat -c %G file1
        root
        [[email protected] test]# stat -c %h /etc
        116
        [[email protected] test]# stat -c %n /etc/init.d
        /etc/init.d
        [[email protected] test]# stat -c %N /etc/init.d
        `/etc/init.d‘ -> `rc.d/init.d‘
        [[email protected] test]# stat -c %s file1
        5
        [[email protected] test]# stat -c %t /dev/sda4
        8
        [[email protected] test]# stat -c %t /dev/sda3
        8
        [[email protected] test]# stat -c %T /dev/sda3
        3
        [[email protected] test]# stat -c %T /dev/sda4
        4
        [[email protected] test]# stat -c %x /dev/sda3
        2016-05-18 08:58:24.980999987 +0800
        [[email protected] test]# stat -c %X /dev/sda3
        1463533104
        [[email protected] test]# stat -fc %a /dev/sda3
        56911
        [[email protected] test]# stat -fc %a file1
        27752096
        [[email protected] test]# stat -fc %a /boot/
        147705
        [[email protected] test]# stat -fc %b file1
        30204965
        [[email protected] test]# stat -fc %b /etc
        30204965
        [[email protected] test]# stat -fc %b /boot
        194241
        [[email protected] test]# stat -fc %b /testdir
        5006815
        [[email protected] test]# stat -fc %a /testdir
        4739567
        [[email protected] test]# stat -fc %c /testdir
        1281120
        [[email protected] test]# stat -fc %C /testdir
        system_u:object_r:etc_runtime_t:s0
        [[email protected] test]# stat -fc %i /testdir
        8b9a7d2d8533510f
        [[email protected] test]# stat -fc %l /testdir
        255
        [[email protected] test]# stat -fc %n /testdir
        /testdir
        [[email protected] test]# stat -fc %s /testdir
        4096
        [[email protected] test]# stat -fc %S /testdir
        4096
        [[email protected] test]# stat -fc %t /testdir
        ef53
        [[email protected] test]# stat -fc %T /testdir
        ext2/ext3

  8.cp:外部命令

功能:复制文件和目录

格式:

cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...

常用选项:

-a, --archive:归档文件,相当于-dR --preserve=all

-i:交互式操作,防止目标文件被误覆盖

-r, -R: 递归复制目录及内部的所有内容;

-d:--no-dereference --preserv=links 不复制原文件,只复制链接名

--preserv[=ATTR_LIST]

mode: 权限

ownership: 属主属组

timestamp:时间戳

links:符号链接

xattr:扩展属性

context:安全上下文

all:全部

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

  9.mv:外部命令

功能:移动(重命名)文件

格式:

mv [OPTION]... [-T] SOURCE DEST

mv [OPTION]... SOURCE... DIRECTORY

mv [OPTION]... -t DIRECTORY SOURCE...

常用选项:

-i: 交互式选项,移动文件之前提示用户是否覆盖

-f: 强制移动,覆盖文件之前不予提示

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

  10.rm:外部命令

功能:移除文件或目录

格式:rm [OPTION]... FILE...

常用选项:

-i: 每一次移除操作执行之前提示用户是否删除

-f: 忽略不存在的文件,也不给予提示,强制删除

-r, -R, --recursive: 递归地删除目录及目录中的内容

--no-preserve-root:不会特别地针对‘/‘实施保护

退出状态:

如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。

时间: 2025-01-02 15:11:51

Linux操作系统基础解析之(四)——Linux基本命令剖析(1)的相关文章

Linux操作系统基础解析之(四)——Linux基本命令剖析(2)

11.cat:外部命令 功能:连接文件并在标准输出中显示连接结果 格式:cat [OPTION]... [FILE]... 常用选项: -A, --show-all:相当于-vET -b, --number-nonblank:对输出的内容按行编号,但空白行不编号 -e:相当于-vE -E, --show-ends:在每一行结尾处显示"$"字符 -n, --number:对所有输出的内容不加区分的按行编号 -s, --squeeze-blank:合并多行连续的空白行为一行空白行 -t:相

Linux操作系统基础解析之(四)——Linux基本命令剖析(3)

19.wc:外部命令 功能:显示每个文件中的新行.字和字节数 格式:wc [OPTION]... [FILE]... 常用选项: -l:来只计数行数 -w:来只计数单词总数 -c:来只计数字节总数 -m:来只计数字符总数 退出状态: 如果命令执行成功,状态返回值为0:如果命令执行失败,状态返回值为非0. 使用举例:     [[email protected] ~]# cat test          this is a testfile     in linux      centos 6.

Linux操作系统基础解析之(三)——基本操作及获得帮助

我们传统意义上理解的操作系统实际上是指:包括了操作系统的kernel,以及在其上构建了大量的功能各异的应用程序的集合体.所以狭义上来讲,操作系统就是指kernel.kernel将底层的硬件的复杂逻辑屏蔽掉,将硬件虚拟化为更加容易使用和访问的资源,向上层的应用程序提供调用接口,从而可以保证应用程序能够正常运行,能够访问和使用硬件资源.在这些应用程序中,有一类应用程序是非常特殊的,它是操作者使用计算机的入口,是操作者完成交互式登录以及交互式作业的基础,这种应用程序我们称之为接口程序,或者叫用户访问界

Linux操作系统基础解析之(六)——文件系统层次结构标准(FHS)

一切皆文件是Linux的最基本的最朴素的哲学思想之一.意思就是说:凡是在Linux操作系统中能够被访问和使用的资源,都会以文件的形式提供给用户,即便是硬件设备.进程互操作.网络访问等这些看似与文件无关的内容,也可以虚拟抽象成文件,这就是Linux操作系统.也就是说,在一个完整意义的Linux操作系统中,存在的大量的.数以万计的文件.这些文件有的是硬件设备,有的是管道,有的是套接字,目录文件,符号链接文件,设备锁文件,进程锁文件,被编译好的二进制文件(可执行应用程序.库文件.内核文件).压缩包文件

linux操作系统基础篇(四)

系统监控 1. 系统监视和进程控制工具-top和free1) 掌握top命令的功能:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.2) 了解使用top命令列出系统状态时,系统默认每5秒刷新一下屏幕上的显示结果. 1. 第一行是任务队列信息 12:38:33 当前时间 up 50days 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.06, 0.60, 0.48 系统负载. 三个数

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)

在日常交际英语中,Shell可以翻译成壳,大多指能够对内部核心起到保护作用的一种装置或结构.在计算机科学中,shell其实是指:为操作者提供的.能够通过系统调用或库调用使用整个计算机资源的访问接口. 它既是一种命令解析器又是一种程序设计语言.作为命令解析器,它可以解释和执行用户输入的命令,也可以自动地解释和执行预先编写好并保存在某个文本文件中的一系列的命令:作为程序设计语言,shell特别定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和条件分支,让我们可以像使用高级语言

Linux操作系统基础解析之(七)——bash基础知识和基本使用技巧(1)

在日常交际英语中,Shell可以翻译成壳,大多指能够对内部核心起到保护作用的一种装置或结构.在计算机科学中,shell其实是指:为操作者提供的.能够通过系统调用或库调用使用整个计算机资源的访问接口.    它既是一种命令解析器又是一种程序设计语言.作为命令解析器,它可以解释和执行用户输入的命令,也可以自动地解释和执行预先编写好并保存在某个文本文件中的一系列的命令:作为程序设计语言,shell特别定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和条件分支,让我们可以像使用高

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(5)

十一.函数  shell函数就是按照上面SHELL GRAMMAR的描述定义的保存着一系列等待稍后执行的命令.当shell函数名被当做一个简单命令名使用时,被这个函数名关联的一系列命令都被执行.函数在当前shell的上下文环境中被执行:不会创建新的进程来解释它们(这与shell脚本的执行形成了对比).当执行函数时,函数的参数成为执行过程中的位置参数.特殊参数#被更新以反映这个变化.特殊参数0不会改变.函数执行时,FUNCNAME变量的第一个元素被设置为函数的名称.  shell执行环境的所有其他

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(2)

三.命令历史bash从Korn Shell和C Shell中吸收了很多的精华,其中之一正式为已经执行过的命令保存一个缓存副本的特性,我们称之为"命令历史"功能.我们为什么要使用命令历史功能呢?每个用户登录成功之后,尤其是使用bash这样的文件接口登录之后,所有的操作都是由执行命令来实现的,那么就不可避免的会出现重复执行某个命令的情况,如果每个命令都依靠键入的方式来输入的话,固然没有问题,但是效率不高而且也是浪费时间的"可耻"行为,命令历史刚好给我们提供了解决这种问题