Shell和Bush-Linux自动化运维

前言

​ Hello,各位码友,大家好。感谢您点开这篇文章。希望在接下来的几分钟里您所看到的内容不辜负您宝贵的宝贵时间,也希望我的总结对您有所帮助。欢迎大家读完本文在下方评论区与我交流讨论互动,我在评论区等你们哦。

​ 好啦,做好准备了吗?好戏开场啦!!!

自动化运维

什么是Shell?

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

​ 在Linux的环境下,我们可以通过Shell与内核进行交流,并最终达到我们要使用计算机资源的目的。由于Linux的开放性特点,使得在Linux下对Shell的选择也很多,CentOS 7 系统中可以使用的Shell有/bin/sh、/bin/bash、/bin/tcsh、/bin/csh这几种,/etc/shells文件说明了当前系统有哪些可用的Shell。不同的Shell有不同的特点及炒作方式,这里以CentOS默认使用的Shell为例来开展本次的学习,也就是Bash。


Bash的功能简介

命令历史

​ Bash拥有自动记录命令历史的功能,用户执行的命令都会在注销时自动记录到自己家目录下的.bash_history 隐藏文件中。查看这些命令历史记录的方法有很多,可以通过直接打开文件来查看,也可以通过键盘的上下键来上翻或下翻历史记录,还可以通过history命令来查看历史记录,所有的命令历史都有记录编号。命令历史能够记录的信息数量由HISTSIZE变量所决定,CentOS 7 默认通过/etc/profile文件定义了HISTSIZE=1000,也就是做多可以记录最近所使用的1000条命令,当有第1001条命令执行时,第一条命令就会被覆盖,执行histort -c命令可以清空所有的历史记录。

​ 记录命令历史除了可以查看历史记录外,还可以在需要时直接调用历史记录再次执行该命令。

  • 上下翻阅历史命令,找到合适的命令后海子街回车键即可执行
  • 输入!string调用历史命令(string为关键字),如!242将直接调用命令历史的第242条记录并执行
  • 通过Ctrl+r快捷键打开搜索功能,接着输入关键字,即可在命令历史中搜索相关的命令,按回车键来完成执行操作。如果没有搜索到合适的命令,按Esc键退出搜索。

命令别名

​ CentOS 7 系统中,我们可以直接使用ll命令来显示文件的详细信息,其实系统中并没有ll命令,它只是被提前定义好的一个别名而已,别名的好处是可以把本来很长的指令简化缩写,为常用且复杂的命令及选项创建别名可以大大提高日常工作效率。

[root@localhost ~]# alias		#查看系统当前所有的别名
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]# alias h5='head -5'		#定义新的别名
[root@localhost ~]# unalias h5			#取消定义别名

管道与重定向

​ Bush的标准 输入设备时键盘、鼠标、手写板等设备,标准输出设备是显示器,一般我们通过键盘输入命令并执行,系统将返回信息显示在屏幕上,默认不论是正确的还是错误的信息都将会输出到显示器。标准输入的文件描述符为0,标准输出的文件描述符为1,错误输出的文件描述符为2。但是有时候我们饿需要改变这样的标准输入与输出方式,Linux中可以使用重定向符(<、>、<<、>>、|)重新定义输入和输出。

​ 管道使得我们可以将多条命令连接在一起使用,他的作用是将一个命令的标准输出重定向给下一个命令,并作为该命令的标准输入。例如,使用ifconfig eno16777736|grep 'inet addr'命令过滤包含IP地址的行,ifconfig本身会输出大量的网络接口信息,由于这里使用了管道符号(|),所以ifconfig命令的所有 输出都将作为grep命令的输入内容,最终实现过滤包含IP地址的行。

​ 对于标准的输出信息是输出到显示器,而有时候你可能不需要这些信息,有或者是暂时不需要这些信息。另外,对于输入,一般是通过键盘输入,而有事你或许希望可以从文件中读取输入信息。输出冲抵昂想可以使用>>>符号,使用>可以将输出导入到文件,如果文件不存在,则创建这个文件,如果文件已经存在,则将会覆盖文件内容;而使用>>可以将输出追加至文件;对应错误信息的重定向需要使用2>2>>符号实现。输入重定向可以使用<符号,他可以帮助我们从文件中提取输入信息。

​ 下面通过几个简单的实例演示重定向的使用方法

[root@localhost ~]# rpm -qa |grep gcc						#查询计算机中是否安装了gcc软件
[root@localhost ~]# echo "pass" | passwd --stdin tom		#设置tom的面为pass
[root@localhost ~]# ls										#查看当前文件列表
[root@localhost ~]# ls > list.txt							#将输出保存到list.txt,屏幕无输出
[root@localhost ~]# hostname >> list.txt					#将主机名追加至list.txt文件末尾
[root@localhost ~]# mail -s test xx@gmail.com < list.txt	#发送邮件,邮件内容来自文件
[root@localhost ~]# ls -l abc initial-setup-ks.cfg			#查看文件详细信息,abc并不存在
ls: 无法访问abc: 没有那个文件或目录
-rw-r--r--. 1 root root 1735 4月  25 08:31 initial-setup-ks.cfg
[root@localhost ~]# ls -l abc initial-setup-ks.cfg 2> error.txt
-rw-r--r--. 1 root root 1735 4月  25 08:31 initial-setup-ks.cfg	#仅将错误重定向,不影响正确输出
[root@localhost ~]# ls -l sbc initial-setup-ks.cfg > all 2>&1	#标准输出余错误输出均导入至all
[root@localhost ~]# ls -l sbc initial-setup-ks.cfg >> all 2>&1	#标准输出与错误输出追加至all
[root@localhost ~]# ls -l sbc initial-setup-ks.cfg &> all		#标准输出与错误输出均导入至all

快捷键


​ Bash提供了大量的快捷键为用户所使用,熟练掌握这些快捷键会提高工作效率。下面的表格中列出了常用的快捷键机器功能描述。

快捷键功能描述
Ctrl+a光标移动到行首
Ctrl+e光标移动到行尾
Ctrl+f光标右移一个字符
Ctrl+b光标左移一个字符
Ctrl+l清屏,相当于clear命令
Ctrl+u删除光标至行首的字符
Ctrl+k删除光标至行尾的字符
Ctrl+c终止进程
Ctrl+z挂起进程(jobs命令查看挂起进程)
Ctrl+w删除光标前一个单词(以空格为分隔符)
Alt+d删除光标后一个单词
Tab自动补齐

Bash使用技巧

重定向技巧

​ 如果年编写了一个脚本实现自动修改系统账号的密码,那么默认当前密码修改成功后系统会出现successfully提示信息,如果需要修改20个账户面,则显示20条这样信息。像这样的案例大量的成功提示信息并不是我们的关注的重点,管理员更多的是关心错误提示。所以这时候可以考虑将标准正确输出屏蔽,Linux中提供了一个特殊设备/dev/null,它很像太阳黑洞,任何东西向内写入都将永远消失。对大量的无意义的输出信息,可以通过冲抵昂想导入/dev/null设备,命令如下:

[root@localhost ~]# echo "pass" | passwd --stdin root >/dev/null

​ 标准输出与错误输出分离重定向,很多时候自动运行的脚本编写完成后,是在深夜服务器负载最低时以无人值守的方式运行的,name当管理员去检查脚本运行情况时,会希望看到哦呦哪些命令执行成功了,有哪些命令出现了问题,并且为了方便管理,需要将正确输出与错误输出分别保存在两个不同的记录文件中,这时候分离重定向就显得尤为重要。

​ 下面检查系统中是否存在tom用户 ,如果存在,则将tom先关信息记录至user文件中,否则记录到error文件中。

[root@localhost ~]# id tom >> user 2>> error

命令序列使用技巧

​ 在Linux中,我们可以使用控制字符(;、&&、||、&)来控制命令的执行方式。其中【&】控制符使得命令开启一个字Shell,并在后台执行;使用【;】控制字符可以把多个命令组合,但多个命令之间没有任何逻辑上的关系,仅按顺序执行;使用【&&】控制控制字符可以将多个命令组合,但仅当前一个命令执行失败才会执行【||】控制符的作用与【&&】刚好相反,仅当前一个命令执行失败才会执行【||】控制符后面的命令。

​ come on,我们来举几个例子

第一个栗子:

火狐浏览器通过前端启动,使用当前Shell将暂时无法使用。

[root@localhost ~]# firefox

第二个栗子:

后台运行浏览器,不影响当前Shell的使用

[root@localhost ~]# firefox &

第三个栗子:

所有命令按顺序执行(不管前面的命令是否成功,后面的命令一定正常执行)

[root@localhost ~]# ls /tmp ; ls /root ; ls /home

第四个栗子:

如果某个文件存在,则显示该文件内容,否则报错(仅当ls执行成功才会执行cat

[root@localhost ~]# ls test.txt && cat test.txt

第五个栗子:

如果有gedit编辑器,则打开该程序,否则打开vim编辑器

[root@localhost ~]# gedit || vim

第六个栗子:

如果id tom执行成功,则说明用户存在,屏幕将显示【Hi,tom】,否则将显示【No suchuser】

[root@localhost ~]# id tom &>/dev/null && echo "Hi tom" || echo "No such user"

第六个栗子首先通过【&>】重定向将id命令的所有输出屏蔽,然后使用【&&】与【||】来判断id命令是否执行成功,成功就显示问候语,否则显示没有该用户。


作业控制技巧

​ Bush环境中通过命令开启进程的时候使用【&】符号可以使该程序进入后台执行,以后随时可以使用jobs命令查看这些后台进程,并且会为每个这样的进程分配一个编号,通过【fg<编号>】的形式可以将这些后台进程再次调回前台执行

[root@localhost ~]# firefox &
[root@localhost ~]# jobs
[root@localhost ~]# fg l

花括号的使用技巧

​ 通过括号扩展可以生成命令行或脚本所需要的字符串,括号中可以包含连续的序列或使用逗号分隔的多个项目,连续的序列包括一个起点与一个终点,并使用【…】分隔。

​ 来,我们一起来看一下语法格式

[root@localhost ~]# echo {a,b,c}
[root@localhost ~]# echo user{1,5,8}
[root@localhost ~]# echo {0..10}
[root@localhost ~]# echo {0..10..2}
[root@localhost ~]# echo a{2..-1}
[root@localhost ~]# mkdir /tmp/{dir1,dir2,dir3}
[root@localhost ~]# ls -ld /tmp/dir{1,2,3}
[root@localhost ~]# chmod 777 /tmp/dir{1,2}

本次分享就到这里,感谢您的宝贵时间!!!
希望有所帮助。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7旅病娘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值