linux bash命令_玩转Linux的神操作:五分钟搞定Bash特性与使用技巧

1e67071587a4a909dbd10ce51bb7025f.png

一个完整计算机的体系结构包括:硬件与软件,而软件又分为系统软件与应用软件,负责对硬件仅需管理与操作的是系统软件的内核部分,用户是无法与硬件或内核打交道的,用户通过应用程序或部分系统软件发出指令(可能是通过浏览器发送一封邮件),这些指令会被翻译并传给内核,内核在得知用户的需求后调度硬件资源来完成操作(比如,使用网卡发送数据包)。

b378d24f9b689a50b3ca1a178ee78d6b.png

在Linux环境下,我们一般通过Shell来与内核交流,并最终实现我们想要使用计算机资源的目的。由于Linux的开放性特点,使得在Linux下对Shell的选择也很多,不同的Shell有不同的特点以及操作方式,我们这里了解下Linux技巧之一:Bash特性。

一、bash简介

①shell

bash的起源——shell。shell俗称壳,它是指UNIX系统下的一个命令解析器;主要用于用户和系统的交互。UNIX系统上有很多种Shell。首个shell,即Bourne Shell,于1978年在V7(AT&T的第7版)UNIX上推出。后来,又演变出C shell、bash等不同版本的shell。

广义shell包含:

1、GUI:Gnome、KDE、Xfce

2、CLI:sh,csh,ksh,bash

进程:在每个进程看来,当前主机上只存在内核和当前进程,进程是程序的副本,进程是程序执行实例。

②bash bash,全称为Bourne-Again Shell。它是一个为GNU项目编写的Unix shell。bash脚本功能非常强大,尤其是在处理自动循环或大的任务方面可节省大量的时间。bash是许多Linux平台的内定Shell,这也是我们介绍它主要的原因。

1、支持命令历史、命令补全

2、支持管道、重定向

3、支持命令别名

4、支持命令行编辑

5、支持命令行展开

6、支持文件名通配

7、支持变量

8、支持编程

二、bash的示例和书写流程

1、新建文件test.sh

$ touch test.sh

2、添加可执行权限

$ chmod +x test.sh

3、编辑test.sh,test.sh内容如下:

#!/bin/bash

echo "hello bash"

exit 0

说明: #!/bin/bash : 它是bash文件声明语句,表示是以/bin/bash程序执行该文件。它必须写在文件的第一行! echo "hello bash" : 表示在终端输出“hello bash” exit 0 : 表示返回0。在bash中,0表示执行成功,其他表示失败。 4、执行bash脚本

$ ./bash

在终端输出“bash hello”

三、bash特性

1、命令历史:

history:

查看命令历史:history

-c:清空命令历史

-d OFFSET[n]:删除指定位置的命令

例1:history -d 500 #删除第500个历史命令

例2:history -d 500 3 #删除第500个命令起3个历史命令

-w:保存命令历史至历史文件(家目录下.bash_history)中

2、命令历史使用技巧:

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

例:root@localhost /]# !44

!-n:执行命令历史中倒数第N条命令

例:[root@localhost /]# !-44

!!:重新执行上一次命令

!string:执行命令历史中最近一个已指定字符(string)串开头的命令

!$:引用前一个命令的最后一个参数

ESC,.:引用前一个命令的最后一个参数

Alt+.:引用前一个命令的最后一个参数

3、命令别名:

alias CMDALIAS=‘COMMAND [options] [arguments]’

例:[root@localhost /]# alias cls=clear

在shell中定义的别名仅在当前shell生命周期中有效:别名有效范围为当前shell进程

unalias:撤销别名

例:[root@localhost /]# unalias cls

COMMAND:使用命令本身

4、命令替换:

$(COMMAND)

`COMMAND`:(反引号)

把命令中某个子命令替换为其执行结果的过程

例1:[root@localhost ~]# echo "The current directory is $(pwd)."

The current directory is /root.

例2:[root@localhost ~]# touch ./file-$(date +%F-%H-%M-%S).txt

[root@localhost ~]# ls

anaconda-ks.cfg file-2017-03-30-15-10-30.txt install.log sort.test

Desktop hello install.log.syslog

5、bash支持的引号:

``:命令替换

"":弱引用,可以实现变量替换

‘’:强引用,不完成变量替换

6、文件名通配:globbing

# man 7 glob 可获得以下列表:

*:任意长度的任意字符

?:任意单个字符

[ ]:匹配指定范围内的任意单个字符

[a-z], [A-Z], [0-9], [a-zA-Z]

[[:space:]]:空白字符

[[:punct:]]:标点符号

[[:lower:]]:小写字母

[[:upper:]]:大写字母

[[:alpha:]]:大小写字母

[[:digit:]]:数字

[[:alnum:]]:数字和大小写字母

[^]:匹配指定范围之外的任意单个字符

[^0-9]:非数字

[^[:alpha:]]:非字母

7、环境变量:

PATH:命令搜索路径

HISTSIZE:命令历史缓冲区大小(默认1000条):

例:[root@localhost ~]# echo $HISTSIZE

1000

8、命令行编辑:

Bash准备了大量的快捷键为用户使用,熟练掌握这些快捷键的全部或部分会使你在工作中受益颇多,开始的时候你可能需要花费大量的时间来记忆这些快捷键,但一旦你记住了他们,你的工作效率会直线上升。下面列出了常用的快捷键及其功能描述。

光标跳转:

Ctrl+a:跳到命令行首部

Ctrl+e:跳到命令行尾

Ctrl+f:光标右移一个字符

Ctrl+b:光标左移一个字符

Ctrl+u:删除光标至命令行首的内容

Ctrl+k:删除光标至命令行尾的内容

Ctrl+l:清屏,等同于clear命令

Ctrl+c:终止进程

Ctrl+z:挂起进程(可以通过jobs命令查看挂起的进程)

Ctrl+w:删除光标前一个单词(以空格为分隔符)

Alt+d:删除光标后一个单词

9、命令行展开

在Linux bash中可以使用命令行展开特性一步完成需要分开成多步完成的操作,达到事半功倍的效果。在Linux指令参数位置使用{}将相应的参数括起来,括号中的参数以逗号分隔,然后bash在执行这一指令时会自动将括号中的内容进行展开。

例如:

/tmp/{x,y} #生成/tmp/x和/tmp/y

mkdir {1..10} #生成1-10为名的文件夹

mkdir -p {1..10}/{1..10} #在名为1-10的文件夹里再生成1-10为名的文件夹

总结:

Linux 新手往往对命令行心存畏惧,部分原因是因为需要记忆大量的命令,毕竟掌握命令是高效使用命令行的前提。

不幸的是,学习这些命令并无捷径,然而在你开始学习命令之初,有些工具还是可以帮到你的。“学而时习之,不进则退”,只要不断地学习不断地摸索,你早晚有一天也会成为Linux大牛!

原文链接:https://zhuanlan.zhihu.com/p/57636114

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值