Bash功能与使用技巧
Bash功能与使用技巧
目录:
历史命令
命令别名
管道与重定向
常用快捷键
作业控制
花括号扩展
一个完整计算机的体系结构包括:硬件与软件,而软件又分为系统软件与应用软件,负责对硬件仅需管理与操作的是系统软件的内核部分,用户是无法与硬件或内核打交道的,用户通过应用程序或部分系统软件发出指令(可能是通过浏览器发送一封邮件),这些指令会被翻译并传给内核,内核在得知用户的需求后调度硬件资源来完成操作(比如,使用网卡发送数据包)。在Linux环境下,我们一般通过Shell来与内核交流,并最终实现我们想要使用计算机资源的目的。由于Linux的开放性特点,使得在Linux下对Shell的选择也很多,CentOS 6.3系统中可以使用的Shell有/bin/sh、/bin/bash、/bin/tcsh、/bin/csh这几种,/etc/shells文件说明了当前系统有哪些可用的Shell。不同的Shell有不同的特点以及操作方式,我们这里以CentOS默认使用的Shell为讲解案例即Bash。
1.2 BASH功能介绍
1.2.1 命令历史
Bash拥有自动记录命令历史的功能,用户所执行的命令会在注销时自动记录到自己家目录下的.bash_history 这样一个隐藏文件中。查看这些命令历史记录的方法有很多,可以通过直接打开文件来查看,也可以通过键盘的上下键来上翻或下翻历史记录,还可以通过history命令查看历史记录,所有的命令历史都有记录编号。命令历史能够记录的信息数量由HISTSIZE变量所决定,CentOS 6.3默认通过/etc/profile文件定义了HISTSIZE=1000,也就是最多可以记录最近所使用的1000条命令,当有第1001条命令执行时第一条命令会被覆盖,执行history -c命令可以清空所有的历史记录。
记录命令历史的除了可以查看历史记录外,还可以在需要时直接调用历史记录再次执行该命令:
1.上下键翻阅历史命令,找到合适的命令后直接回车即可执行。
2. 输入!string调用命令历史(string为关键字),如!vim将调用最后一次执行的以vim开头的命令。或者通过!n来准确定位历史记录,如!242将直接调用命令历史的第242条记录并执行。
3. 通过Ctrl+r快捷键打开搜索功能,接着输入关键字即可在命令历史中搜索相关命令,回车完成执行操作。如果没有搜索到适合的命令按ESC键退出搜索。
1.2.2 命令别名
在CentOS 6.3系统中我们可以直接使用ll命令来显示文件的详细信息,其实系统中并没有ll这样一个命令,它仅是被提前定义好的一个别名而已,别名的好处是可以把本来很长的指令简化缩写,为常用且复杂的命令及选项创建别名可以大大提高日常工作效率。
- [root@centos6 ~]# alias #查看系统当前所有别名
- alias cp='cp -i'
- 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'
- [root@centos6 ~]# alias h5=’head -5’ #定义新的别名
- [root@centos6 ~]# unalias h5 #取消别名定义
1.2.3 管道与重定向
Bash的标准输入设备是键盘、鼠标、手写板等设备,标准输出为显示器,一般我们通过键盘输入命令并执行,系统将返回信息显示在屏幕上,默认不管是正确的还是错误的信息都将输出至显示器。标准输入的文件描述符为0,标准输出的文件描述符为1,错误输出的文件描述符为2。但有时我们需要改变这样的标准输入与输出方式,Linux中我们可以使用重定向符(<、>、<<、>>、|)重新定义输入与输出。
管道使得我们可以将多条命令连接在一起使用,它的作用是将一个命令的标准输出重定向给下一个命令并作为该命令的标准输入。例如,使用ifconfig eth0 | grep ‘inet addr’命令过滤包含IP地址的行,ifconfig本身会输出大量网络接口的信息,由于这里使用了管道符号(|)所以ifconfig命令的所有输出都将作为grep命令的输入内容,最终实现过滤包含IP地址的行。
对于标准的输出信息是输出至显示器,而有时你可能并不需要这些输出信息,又或者是暂时不需要在屏幕上看到这些信息;另外对于输入一般是通过键盘输入,而有时你或许希望可以从文件中读取输入信息。输出重定向可以使用>或>>符号,使用>可以将输出导入至文件,如果文件不存在则创建该文件,如果文件已经存在则会覆盖该文件的内容;而使用>>可以将输出追加至文件;另外,对应错误信息的重定向需要使用2>或2>>符号实现。输入重定向可以使用<符号,它可以可以帮助我们从文件中提取输入信息。
以下通过几个简单的实例演示重定向的使用方法:
- [root@centos6 ~]# rpm -qa |grep gcc #查询计算机中是否安装了gcc软件
- [root@centos6 ~]# echo “pass” | passwd --stdin tom #设置tom的密码为pass
- [root@centos6 ~]# ls #查看当前文件列表
- anaconda-ks.cfg install.log install.log.syslog
- [root@centos6 ~]# ls > list.txt #将输出保存至list.txt,屏幕无输出
- [root@centos6 ~]# hostname >> list.txt #将主机名追加至list.txt文件末尾
- [root@centos6 ~]# mail -s test xx@gmail.com < list.txt #发送邮件,邮件内容来自文件
- [root@centos6 ~]# ls -l abc install.log #查看文件详细信息,abc并不存在
- ls: cannot access abc: No such file or directory
- -rw-r—r--. 1 root root 9064 Dec 4 09:30 install.log
- [root@centos6 ~]# ls -l abc install.log 2> error.txt #仅将错误重定向,不影响正确输出
- -rw-r—r--. 1 root root 9064 Dec 4 09:30 install.log
- [root@centos6 ~]# ls -l abc install.log > all 2>&1 #标准输出与错误输出均导入至all
- [root@centos6 ~]# ls -l abc install.log >> all 2>&1 #标准输出与错误输出均追加至all
- [root@centos6 ~]# ls -l abc install.log &> all #标准输出与错误输出均导入至all
1.2.4 快捷键
Bash准备了大量的快捷键为用户使用,熟练掌握这些快捷键的全部或部分会使你在工作中受益颇多,开始的时候你可能需要花费大量的时间来记忆这些快捷键,但一旦你记住了他们,你的工作效率会直线上升。下面列出了常用的快捷键及其功能描述。
- 快捷键 功能描述
- Ctral+a 光标移动至行首
- Ctrl+e 光标移动至行尾
- Ctrl+f 光标右移一个字符
- Ctrl+b 光标左移一个字符
- Ctrl+l 清屏,等同于clear命令
- Ctrl+u 删除光标至行首的字符
- Ctrl+k 删除光标至行尾的字符
- Ctrl+c 终止进程
- Ctrl+z 挂起进程(可以通过jobs命令查看挂起的进程)
- Ctrl+w 删除光标前一个单词(以空格为分割符)
- Alt+d 删除光标后一个单词
1.3 BASH使用技巧
1.3.1 重定向技巧
1.如果你编写了一个脚本实现自动修改系统帐号的密码,那么默认当密码修改成功后系统会提示successfully这样的提示信息,如果需要修改20个账户密码则显示20条这样的信息。像这样的案例,大量的成功提示信息并不是我们关注的重点,管理员更多的是关心错误提示。所以这时可以考虑将标准正确输出屏蔽,Linux中提供了一个特殊设备/dev/null,它很像太阳黑洞,任何东西往里写入都将永远消失。对大量无意义的输出信息可以通过管道导入至/dev/null设备。
- [root@centos6 ~]# echo "pass" | passwd --stdin root >/dev/null
2.标准输出与错误输出分离重定向
很多时候自动运行的脚本编写完成后,是要在深夜服务器负载最低时以无人职守方式运行的,那么当管理员去检查脚本运行情况时会希望看到哪些命令执行成功了,哪些命令出现了问题,并且为了方便管理需要将正确输出与错误输出分写保存在两个不同的记录文件中,那么分离重定向就显得尤为重要了。下面我们检查系统中是否存在tom用户,如果存在则将tom相关信息记录至user文件中,否则记录至error文件中:
- [root@centos6 ~]# id tom >> user 2>> error
2.1.1 命令序列
在Linux中我们可以使用控制字符(;、&&、||、&)来控制命令的执行方式。其中[&]控制符使得命令开启一个子Shelll并在后台执行;使用[;]控制字符可以把多个命令组合,但多个命令之间没有任何逻辑上的关系,仅按循序执行;使用[&&]控制字符也可以将多个命令组合,但仅当前一个命令执行成功后才会执行[&&]控制符后面的命令;[||]控制字符的作用与[&&]刚好相反,仅当前一个命令执行失败才会执行[||]控制符后面的命令。下面通过实例演示。
1.火狐浏览器通过前端启动,使得当前Shell将暂时无法使用:
[root@centos6 ~]# firefox
2.后台运行浏览器,不影响当前Shell的使用:
[root@centos6 ~]# firefox &
3.所有命令按顺序执行(不管前面的命令是否成功,后面的命令一定正常执行):
[root@centos6 ~]# ls /tmp ; ls /root ; ls /home
4.如果某个文件存在则显示该文件内容,否则报错(仅当ls执行成功才会执行cat):
[root@centos6 ~]# ls test.txt && cat test.txt
5.如果有gedit编辑器则打开该程序,否则打开vim编辑器:
[root@centos6 ~]# gedit || vim
6.如果id tom执行成功则说明用户存在屏幕将显示Hi,tom,否则显示No such user:
[root@centos6 ~]# id tom &>/dev/null && echo “Hi,tom” || echo “No such user”
实例5首先通过&>重定向符将id命令的所有输出屏蔽,让后使用&&与||来判断id命令是否执行成功,成功就显示问候语否则显示没有该用户。
2.1.2 作业控制
Bash环境中通过命令开启进程的时候使用&符可以使得该进程进入后台执行,或者一个命令执行后使用Ctrl+z快捷键可以将该进程放入后台并暂停执行,以后随时使用jobs命令可以查看这些后台进程,并且会为每个这样的进程分配一个编号,通过fg <编号>的形式可以将这些后台进程再次调回前台执行。
[root@centos6 ~]# firefox &
[root@centos6 ~]# jobs
[1]+ Running firefox &
[root@centos6 ~]# fg 1
2.1.3 花括号{}的使用
通过括号扩展可以生产命令行或脚本需要的字串,括号中可以包含连续的序列或使用逗号分割的多个项目,连续的序列包括一个起点与一个终点并使用..分割。接下来看看具体的语法格式案例:
- [root@centos6 ~]# echo {a,b,c}
- a b c
- [root@centos6 ~]# echo user{1,5,8}
- user1 user5 user8
- [root@centos6 ~]# echo {0..10}
- 0 1 2 3 4 5 6 7 8 9 10
- [root@centos6 ~]# echo {0..10..2}
- 0 2 4 6 8 10
- [root@centos6 ~]# echo a{2..-1}
- a2 a1 a0 a-1
- [root@centos6 ~]# mkdir /tmp/{dir1,dir2,dir3}
- [root@centos6 ~]# ls -ld /tmp/dir{1,2,3}
- [root@centos6 ~]# chmod 777 /tmp/dir{1,2}
转载于:https://blog.51cto.com/ttwtyl/1133952
Bash功能与使用技巧相关推荐
- linux中bash的功能主要有,Linux系统中的Bash功能的介绍
今天小编要跟大家分享的文章是关于Linux系统中的Bash功能的介绍.一个完整计算机的体系结构包括:硬件与软件,而软件又分为系统软件与应用软件,负责对硬件仅需管理与操作的是系统软件的内核部分,用户是无 ...
- BASH的保护性编程技巧
BASH的保护性编程技巧 shell常用逻辑判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目录, ...
- ipadpro+打开html文件,iPadPro日常基本功能的使用技巧汇总
iPadPro日常基本功能的使用技巧汇总今天来给大家分享一下了,苹果的iPadPro这款平板还是很实用的,而且还自带的手写笔,平时大家在使用这款iPadPro中肯定遇到了不少问题,下面小编就来分享一下 ...
- WebStorm 常用功能的使用技巧分享
代码编辑 代码跳转: Ctrl + 左键 或者 Ctrl + B,可以跳转到函数或者变量的声明位置 调用位置: Alt + F7,查找调用者 自动补全: 最好是修改一下响应时间,Settings-&g ...
- 编写可靠bash脚本的一些技巧
编写可靠bash脚本的一些技巧 原作者:腾讯技术工程 原文链接:https://zhuanlan.zhihu.com/p/123989641 写过很多 bash 脚本的人都知道,bash 的坑不是一般 ...
- EmEditor小功能与使用技巧
polaris几乎每天都会使用EmEditor,使用的过程中会不断的发现一些小功能与使用技巧,在此与大家分享,您如果也有新的发现,可以留言告之.谢谢. 1 复制当前行 EmEditor复制当前行很方便 ...
- 关于AD19常用功能和使用技巧的总结
关于Altium Designer 19常用功能和使用技巧的总结 文章目录 关于Altium Designer 19常用功能和使用技巧的总结 一.常用功能 原理图 PCB图 想到在更 一.常用功能 原 ...
- CAD制图初学入门:CAD图块功能的使用技巧
在使用国产CAD制图软件绘制图纸的过程中,经常会用到CAD图块功能.那么作为一名CAD制图初学入门者你知道如何使用浩辰CAD建筑软件中的CAD图块功能吗?不知道也没关系,接下来就让小编来给大家分享一下 ...
- 浩辰3D制图软件中薄壁功能的使用技巧
浩辰3D制图软件中薄壁功能的使用,类似其他三维软件的抽壳的概念,主要是设计那些薄壁零件.容器等.与其他主流三维软件相比,浩辰3D制图软件薄壁的内容丰富,操作更加便捷,能在快速建模和顺序建模等不同的环境 ...
最新文章
- 高项2015年下半年培训随堂作业(10月日)
- 搜索引擎蜘蛛抓取主要依据用户的四种行为
- Go的遍历map与slice的区别:map无序slice有序
- float相乘后的类型_Psychopy | 第1期:数据类型及运算符
- 【无码专区6】球与盒子(数学线性筛)
- matplotlib图表介绍
- python语言的jenkinapi
- 大数据开发笔记(十):Hbase列存储数据库总结
- CentOS下Privoxy和Iptables 实现透明代理,修改http-header
- 我是如何用单例模式征服面试官的?
- C语言--输入一个数判断是否为素数(多种方法)
- 使用傲腾内存加速的电脑(神舟)安装Ubuntu双系统
- 8.以微型计算机为中心,全国网络教育统一考试《计算机应用基础》复习要点
- 深度学习模型大小与模型推理速度的探讨
- Python爬取皮皮虾视频
- 吕旭军:如何打造区块链数字资产交易?
- sqlmap之tamper脚本编写
- imx53-saber-tablet开发记录
- 康耐视智能相机Insight内置FTP存图
- vue中Watch 和 Computed 的区别是什么?
热门文章
- 如何使对话框中接收到WM_CHAR消息(Windows编程)
- centos 7 lvs 负载均衡搭建部署
- UI Automation的两个成熟的框架(QTP 和Selenium)
- 首个全球智慧城市在线社区启动 将锁定对城市发展构成挑战的困难
- 当个新手很幸福!网络创业之新手小白一样可以吸粉又赚钱
- 26个复古风格网站设计欣赏
- 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal
- linux下Mysql 的安装、配置、数据导入导出
- 使用 EOLINKER 进行接口测试的最佳路径 (下)
- luoguP2479 [SDOI2010]捉迷藏