Bash学习基础知识一“命令”

Bash 学习基础知识

目录

一、Shell是个啥?

二、BASH的命令

    2.1 命令的语法格式

    2.2 什么是命令

    2.4 命令的类型

    2.5 命令帮助

    2.6 bash的命令操作特性

三、通配符

四、命令间交互(特殊字符)

    4.1 重定向  >或>>

    4.2 管道 | 

    4.3 反引号  “命令输出结果引用

    4.4 花括号  {} 命令行展开

    4.5 强、弱引用‘’与“”

    4.6 ;(&&):命令执行分隔符

    4.6 || 也是个命令执行分隔符

    4.7 $ 变量替换

    4.8 \ 转义符 

一、Shell是个啥?

首先简单了解下什么是bash:

首先我们要理解操作系统也是一组应用程序;就像我们常用的WORD、LOL等等一样都是程序。只不过这组程序比较特别而已,他工作在底层是可以直接与硬件进行沟通和加流的当然了还能对硬件加以控制;相对于程序员或者用户来说直接与内核打交道还是太难了。于是shell再次就有了很大的用途,它位于内核的外层把内核做了精美的包装让它能够易于沟通和交流。我们现在对计算机的操作应该都是通过Shell完成的。

Shell广义上来说分为图形化和命令行;windows的桌面就是windows的默认图形化的shell;Bash是linux的默认命令行shell。这些shell都提供了用户与内核交流的接口;详细大家也都明白图形化的要比命令行的要更加易于交流;但是命令行才是真正与linux打交道的金钥匙。Bash是使用和管理linux系统的任督二脉,打通Bash方可在linux内行走江湖。

二、BASH的命令

2.1命令的语法格式:

COMMAND(命令) OPTIONS(选项) ARGUMENTS(参数)

在命令行中通常被输入的第一个是命令,后面跟上相对应的选项和参数回车即可执行。

2.2什么是命令

通常我们所指命令包含:

1)应用程序:包含应用程序中内建的命令程序,关于内建的命令程序在下面会讲到同时大家想一箱bash是个命令吗?

2)脚本文件:通常脚本以*.sh结尾并有执行权限

2.3什么是选项参数:

选项就是对命令的作用方式进行调整,分为短选项和长选项。

       1)短选项书写格式:-char, 例如,-l, -d, -h,-r,-R(同样区分大小写)

       2)多个选项间要使用空格分隔开来:-l -d –h【对于短选项的空格你隔开1个和100

个linux都会认为是一个】

       3)合并使用:-ldh

       4)长选项:–word, 例如:–long, –directory, –human-readable;注意:长选项

一般不能合并使用

5)参数有些选项需要带参数,称为选项参数

       以ls(显示目标列表)为例

[root@zhuzw ~]# ls          命令单独执行(有默认参数)

[root@zhuzw ~]# ls –a       加上一个短选项 a显示显示所有的列表

[root@zhuzw ~]# ls –l        短选项 l

[root@zhuzw ~]# ls –al       短选项连续使用

[root@zhuzw ~]# ls –lh /etc  短选项连续使用并制定一个目录为这个命令的参数

[root@zhuzw ~]# ls –color=auto  ls的长选项使用不同的颜色高亮显示不同类型的

篇幅有限就不做插图展示了,短选项一般是单个大小写字母前面加-区分,可以多个短

选连起来使用;长选项一帮是单个或多个单词前面加–,不可多个长选项连起来使用。

至于命令的选项都有哪些在下面会有介绍。

2.4命令的类型:

前面我们提到过内建的命令程序现在我们来说明一下:

 内建命令: 由shell程序自带的命令;查找方式只要你的shell启动了shell就知道这些命令在哪  。 

       外部命令: 本身是一个独立的可执行程序文件,命令名即为程序文件名;查找方式:通过shell的内置的环境变量PATH中指定的路径进行查找(如下图所示); 

shell会从左往右依次找知道找到第一个与之相对应的可执行程序为止并将它缓存在自己的命令历史中。1.png

那么如何区分命令是内建命令还是外部命令:type COMMAND(如下图所示)

2.png

2.5命令帮助:

2.5.1内建命令:help COMMAND (全英文的,部分命令会有中文)

3.png

2.5.2外部命令:COMMAND –help

4.png

 

2.5.3 MAN 文档查看,获取命令、文档的帮助及介些信息

       man命令格式:man [#] COMMAND (调用vim查看文档) q退出

5.png

1)手册的段落:

NAME:

命令名称

DESCRIPTION

命令功能的详细描述

OPTIONS

所有选项

SYNOPSIS

使用格式

EXAMPLES

使用示例

FILES

与当前命令相关的配置文件

SEE ALSO

可参考的其它手册

 

2)帮助中的命令格式字串:[]:可省略;<>: 不可省略;|: 二选一或多选一;…: 同类内容可以出现多个

3)man的使用技巧:

空格键

向文件尾部翻一屏

b

 向文件首部翻一屏

回车键

向文件尾部翻一行

k

 向文件首部翻一行

Ctrl+d

向文件尾部翻半屏

Ctrl+u

 向文件首部翻并屏

/keyword

 从文件首部向尾部进行搜索

?keyword

 从文件尾部向首部进行搜索

n

 显示找到的下一个,针对/就是向尾部走;?可就是向首部走了

N

显示找到的上一个,针对?就是向尾部走;/可就是向首部走了

 

4) man能够为除命令之外的配置文件、系统调用、库调用等都能提供帮助手册,它们分别位于不同的章节中;1: 用户命令;2: 系统调用;3: 库调用;4: 设备文件;5: 配置文件;6: 游戏;7:杂项;8:管理命令

      可以通过whatis COMMAND 来查看哪些章节下有帮助文件。

注意:whatis根据数据库执行查找操作,此库为系统定期更新;可使用makewhatis手动更新;

2.6 bash的命令操作特性

2.6.1  命令记忆能力(history)

      所有操作的命令都会被linux系统记录下来;默认的记录条数为1000。可以通过history命命令可查看;调整保存的条数更改$HISTSIZE变量。

6.png

当用户登出后会保存在家目录下的.bash_history文件内。

7.png

与此目录和文件相关的两个环境变量:$HISTFILE(存储路径)、$ HISTFILESIZE(存储条数)

通过;

Bash可以调用命令历史列表中的命令:

    上下箭头选择历史命令执行

       !#: 执行命令历史中的第#条命令

       !!: 执行上一条命令

       !string: 执行命令历史中最近一次以string开头的命令;

       !$: 调用上一条命令的最后一个参数

       ESC+.:功能同上

2.6.2  命令和文件补全  输入个不全的命令按下tab(Esc)键试试,一下和两下的区别吧。

2.6.3  命令别名设置

先看个命令执行的结果

8.png

有一些常用命令的选项和输入格式非常常用,但是输入起来又很麻烦那么我们就给他定义个别名例如我没常用的ls 其实就是 ls –color=auto的别名。

alias 新的命令='原命令 -选项/参数'

要删除一个别名,可以使用 unalias 命令,如 unalias l。
小伙伴们去自定义属于自己的命令吧!!差点忘了alias命令的作用只局限于该次登入的操作。如果你要个性化的的话请将alias命令存放到bash的初始化文件/etc/bashrc中。

三、通配符

在bash的操作环境中有一个非常有用的功能,那就是通配符。

下面列出一些常用的通配符,如下表所示

符号

意义

*

万用字符,代表0个到无穷个任意字符

?

万用字符,代表一定有一个任意字符

[ ]

代表一定有一个在中括号内的字符。例如:[abcd]代表一定有一个字符,可能是a、b、c、d这四个中的任何一个

[-]

若有减号在中括号时,代表在编码顺序内的所有字符。例如:[0-9]代表0到9之间的所有数字,因为数字的语系编码是连续的

[^]

若中括号内的第一个字符为指数符号(^),那么表示反向选择,例如:[^abcd]代表一定有一个字符,只要不是a、b、c、d中一个就可以

[:space:]

 所有空白字符,这是字符集合要引用的话需要加上[ ]。

[:punct:]

 所有标点符号

[:lower:]

所有小写字母 [a-z]  不能写成[z-a]

 [:upper:]

所有大写字母 [A-Z]

[:digit:]

 所有数字     [0-9]

[:alnum:]

所有数字和字母 [A-Z0-9a-z]

[:alpha:]  

所有字母       [a-zA-Z]

以ls命令为例

查找/etc下以.d结尾的的所有文件和目录,*就代表.d前面可以出现任意次数的任意字符。

9.png

简单实例

10.png

字符集合要引用的话需要加上[ ]。例如下图

11.png

重要的是多练练理解这些字符的意义并熟练应用

四、命令间交互(特殊字符)

  4.1重定向 >或>>

4.1.1:如何定义输入输出

标准输入:使用文件描述符0(默认是键盘)

标准输出:使用文件描述符1(默认是显示器)

标准错误:使用文件描述符2(默认是显示器)

4.1.2:重定向如何表示

>:将一个命令的输出写到一个文件并覆盖旧的内容
>>:将一个命令的输出追加到一个文件的尾部

2>或2>>:错误信息覆盖或者追加给一个文件(尾部)

&>:标准输出和错误输出同样追加给一个文件

例如我们cat 下/etc/passwd 把输出结果重定向到/tmp/passwd文件内

[root@zhuzw-centos6 /]# cat /etc/passwd >> /tmp/passwd

[root@zhuzw-centos6 /]# cat /tmp/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

把文件的名字故意写错 然后使用 &>> 追加到/tmp/passwd 文件下然后使用tail 查看后几行的结果输出:

12.png

4.2管道 | :

管道的意思是将一个命令的输出当作另一个命令的输入

示例:查看/etc/passwd 文件内容 通过管道送给 cut –d制定:为分隔符 –f 7 查看并显示第7列内同通过管道把处理结果送给 sort –u进行排序去重

13.png

4.3反引号 “命令输出结果引用
  可以将以反引号括起来的命令的输出作为另一个命令的命令行参数

14.png

 

4.4花括号 {} 命令行展开

 创建a_当前时间;b_当前时间的文件就可以使用花括号(请无视那个写错的命令)

15.png

4.5 强、弱引用‘’与“”

‘’ :强引用,由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而作为普通字符解释

“”:弱引用,由双引号括起来的字符,除了“$”,“\”,和“””这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说就是用其后指定的变量值来代替这个变量和$

16.png

4.6;(&&):命令执行分隔符

COMMAND;COMMAND;COMMAND

COMMAND && COMMAND && COMMAND

格式分割符前后的命令会依次顺序执行;如下图所示

17.png

18.png

还是加上空格看着舒服

4.6 || 也是个命令执行分隔符,
格式:# COMMAND 1 || COMMAND 2

只有当命令1执行失败的时候才执行命令2

4.7 $ 变量替换

例如 echo $PATH 显示的结果就是变量PATH的变量内容而不是这串字符。

4.8 \转义符

\:转意符将特殊字符或通配符还原成一般字符

示例

19.png

    我是个新手;接触这些前期也很难全部理解搞明白,那么这样想其实这些语法、特殊字符、通配符都是规则,一个Bash的游戏规则;且一切的解释权在Bash。既然你要跟Bash玩耍你就要遵守它所制定的游戏规则;不遵守人家就不陪你玩。那么就把这些规则一个个的符统计出来看一个个的去理解实验。    

    以上这些内容应该是bash命令使用中的基础的基础,做到了然于心最好了。其实不用背多用用自然就全记住了。当然了我想我也并没有列举全后续有学习到先的在加上。谢谢!

原创文章,作者:东郭先生,如若转载,请注明出处:http://www.178linux.com/2386

(0)
东郭先生东郭先生
上一篇 2015-04-02
下一篇 2015-04-03

相关推荐

  • CentOS 5和6的启动流程

    Linux: kernel+rootfs  kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 rootfs: glibc 库:函数集合, function, 调用接口 过程调用:procedure 函数调用:function 程序  内核设计流派: 单内核设计:Linux 把所有功能集成于同一个程序; 微内核设计…

    Linux干货 2016-08-23
  • haproxy 监控配置

    方法一:在defaults段增加如下配置: stats refresh 30s #统计页面自动刷新时间stats uri /stats #统计页面urlstats realm baison-test-Haproxy #统计页面密码框上提示文本stats auth admin:admin123 #统计页面用户名和密码设置stats hide-version #…

    Linux干货 2018-03-19
  • CentOS7系统用户空间管理进程systemd详解

    概述:     系统启动过程中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工作,就交由init进行启动和管理,在CentOS6之前的init的管理方式都类似,相关的内容我们在之前的文章中也做出过介绍。在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟大家欧一…

    Linux干货 2016-09-21
  • grub应用 (Blog 10)

    grub1.x 、grub2.x详解

    2017-11-27
  • 网络组(Network Teaming)

    网络组(Network Teaming) 网络组:是将多个网卡聚合在一起的方法,从而实现容错和提高吞吐量 网络组不同于旧版中bonding技术,提供更好的性能和扩展性 网络组由内核驱动和teamd守护进程实现. 多种方式runner     broadcast     roundrobin     …

    Linux干货 2017-03-26
  • 编译httpd2.4.10踩坑记

    作者【Jev Tse】【版权所有】  系统环境:centos6.8     【本文概览】     零、httpd2.4.10编译总结         1、基础环境         2、依赖包组   &…

    Linux干货 2016-11-29

评论列表(2条)

  • stanley
    stanley 2015-04-04 22:50

    比上次的好了不知多少倍~非常棒,不过还有很大提升空间。技术需要沉淀,不骄不躁,不卑不亢,定成大器,加油

  • stanley
    stanley 2015-04-04 22:50

    下次记得加标签哦,可以大提高文档的搜索命中率