了解 BASH
管理整个计算机硬件的其实是操作系统的核心(kernel),这个核心是需要被保护的。所以使用者就只能通过shell来跟核心沟通,以让核心达到想要的工作。那么系统中有多少 shell?为什么要使用 bash等等?我们来简单了解下。
一、Bash shell 的功能
【1】命令编辑能力(history):base具有『记忆使用过的指令』功能,我们只需按『上下键』就可以找到前/后一个输入的指令,在很多distribution(Linux发行版)中,默认的指令记忆功能可以到达1000个。指令记录在用户家目录的 .bash_history中,需要注意的是,~/.bash_history记录的是前一次登入以前所执行过的指令,而至于这一次登入所执行的指令都被暂存在内存中,当你成功的注销系统后,该指令记忆才会记录到./bash_history中。这样最大的好处就是可以『查询曾经做过的举动』如此可以知道你执行步骤,那么就可以追踪你曾下达过的指令,以作为除错的重要流程。但如此一来被黑客入侵后,它们翻你曾经的指令,当好你的指令又跟系统有关(例如直接输入MySQL的密码在指令上面),那么就要合理的考虑这个问题了。
【2】命令与文件补全功能(|tab|键):[Tab]接在一串指令的第一个字后面,则为命令补全。[Tab]接在一串指令的第二个字以后时,则为『文件补全』。若安装bash-completion软件,则在某些指令后面使用[Tab]按键时,可以进行『选项/参数的补全』功能。
【3】命令别名设置功能(alias):通过:alias lm='ls -al' 意思就是lm指令效果与ls -al相同。
【4】工作控制、前景背景控制(job control,foreground,background):使用前、背景的控制可以让工作进行的更为顺利,工作控制(jobs)的用途则更广,可以让我们随时将工作丢到背景中执行,而不怕不小心使用了Ctrl+C来停掉程序。此外,也可以在单一登录的环境中,达到多任务的目的。
【5】程序化脚本(shell scripts):在 DOS年代还记得将一堆指令写在所谓的『批处理文件』,在Linux底下的shell scripts则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续指令写成一个文件,该文件并且可以透过对谈交互式的方式来进行主机的侦测工作,也可以由 shell 提供的环境变量及相关指令来进行设计。
【6】通配符(Wildcard):除了完整的字符串之外,bash还支持许多的通配符来帮组用户查询与指令下达。例如,想知道/usr/bin底下有多少个以X开头的文件,使用:『ls -l /usr/bin/X*』等等通配符。
二、查询指令是否为Bash shell的内建命令:type
bash 的说明文件通过命令:man base 查看。这个说明文件里面还有其他说明文件。例如,cd 指令的说明就在 man page 内,然后直接输入man cd 时,会出现一堆指令的介绍。其实bash已经内建了很多指令,例如说道的 cd,还有umask等等指令,都是内建在 bash 当中的。同时,我们可以通过 type 指令来判断命令是否为 bash 所提供的指令。
[root@learnVM 桌面]# type [-tpa] name
选项与参数:不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内建指令
-t: 当加入 -t 参数时,type 会将 name 以如下字眼显示出他的意义。
file : 表示为外部指令
alias :表示该指令为命令别名所设定的名称
builtin :表示该指令为 bash 内建的指令功能
-p: 如果后面接的是外部指令才会显示完整的文件名
-a: 会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含alias
范例一:查询一下 ls 这个指令是否为 bash 内建?
1 [root@learnVM 桌面]# type ls
2 ls is aliased to `ls --color=auto' <= 未加任何参数,列出 ls 的最主要使用情况
3 [root@learnVM 桌面]# type -t ls
4 alias <= 只列出 ls 执行时的依据
5 [root@learnVM 桌面]# type -a ls
6 ls is aliased to `ls --color=auto' <= 最先使用 alias
7 ls is /bin/ls <= 还有找到外部指令在 /bin/ls
范例二:查询 cd 指令?
1 [root@learnVM 桌面]# type cd
2 cd is a shell builtin <= cd 是内建指令
透过 type 这个指令我们可以知道这个指令是否为 bash 指令。此外,由于利用 type 搜索后面的名称时,如果后面的名称并不能以执行档的状态被找到,那么该名称是不会被显示出来的。也就是说,type 主要找出『执行档』而不是一般文档名,所以这个 type 也可以用来作为类似 which 指令的用途。
三、指令的下达与快速编辑按钮
范例:如果指令太长的话,如何使用两行来输出?
[root@learnVM 桌面]# cp /var/tool /etc/crontab \
> /etc/fastab /root
上面的指令用途是将是将三个文件复制到 /root 这个目录下而已。不过因为指令太长,于是就利用『\[Enter]』来将 [Enter] 这个按键『跳脱』开来,让 [Enter] 键『开始执行』的功能,好让指令可以继续在一行输入。需要注意的是,[Enter] 键是紧接着反斜杠(\)的,两者之间没有其他字符。因为 \ 仅跳脱『紧接着的下一个字符』而已。如果顺利跳脱下一行,则下一行最前面会总动出现 > 的符号,就可以继续输入指令。 当你所需下达的指令特别长,或者是你输入了一串错误的指令时,我们可以通过如下快捷键:
[Ctrl]+u/[Ctrl]+k:分别使用光标出先前删除指令串([Ctrl]+u)及向后删除指令串([Ctrl]+k)
[Ctrl]+a/[Ctrl]+e:分别是让光标移动到整个指令串的最前面([Ctrl]+a)或最后面([Ctrl]+e)
了解 BASH的更多相关文章
- scp报错 -bash: scp: command not found
环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...
- bash字符串操作
参考 http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 问题:bash怎么提取字符串的最后一位?例如python中strin ...
- grep 查找bash脚本中的注释代码
出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...
- Bash 脚本编程语言中的美学与哲学
我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...
- cmder git bash 使用
cmder 是一款 windows 下的命令集合软件,它可以集合各种系统下的命令,并且操作非常快速方便. 安装有两个版本,一个是简化版(4.27M),一个是完全版(75.7M),它们的唯一区别:完全版 ...
- 安装完成后在命令行运行bash时报错0x80070057
在命令运行bash 提示如下: 解决方法,不启用旧版本控制台: 右键命令提示栏 打开属性,把勾选去掉如下图红色边框标识: 然后重启,就可以使用,也包括可以打开Bash on Unbuntu on Wi ...
- Bash简明教程--变量
1. 前言 Bash是一门流行在*nix系统下的脚本语言.作为一门脚本语言,变量是一门语言的基本要素,在这篇教程中,我们将学习Bash中的变量是怎么表示的,以及变量相关的一些语法规则. 2. Bash ...
- 让BASH,VIM美美的Powerline
前言 鉴于BASH及其周边强大的工具以及VIM高效快捷,加上现在我工作重心转移到前端开发上,因此我华丽地转向Linux阵营(当然从最傻瓜式的Ubuntu开始啦!).但BASH和VIM默认样式确实颜值 ...
- 解决Bash On Ubuntu On Window安装Zsh无效问题附安装说明
前言 Zsh是一款非常棒的Shell,使用Linux和Mac系统的人,基本上都知道zsh的存在. 问题 在安装完Zsh后,zsh是可以使用的,但是重启之后,又恢复至默认的bash. 我在安装好之后,使 ...
- source /etc/profile报错-bash: id:command is not found
由于误操作导致 source /etc/profile 报错 -bash: id:command is not found 此时,linux下很多命令到不能能用,包括vi ls 等... 可以使用 e ...
随机推荐
- 5G工业网关在智能工厂的应用案例
智能工厂是5G技术的重要应用场景之一.利用5G网络将生产设备无缝连接,并进一步打通设计.采购.仓储.物流等环节,使生产更加扁平化.定制化.智能化,从而构造一个面向未来的智能制造网络. 5G 作为最优的 ...
- 写入自定义 ASP.NET Core 中间件
中间件是一种装配到应用管道以处理请求和响应的软件. ASP.NET Core 提供了一组丰富的内置中间件组件,但在某些情况下,你可能需要写入自定义中间件. 备注:本主题介绍如何编写基于约定的中间件. ...
- https://计算机四级
计算机四级内容: 一,网络工程师 基本要求 1.了解大型网络系统规划.管理方法: 2.具备中小型网络系统规划.设计的基本能力: 3.掌握中小型网络系统组建.设备配置调试的基本技术: 4.掌握企事业单位 ...
- Jmeter二、开始使用
一.最简单的性能测试脚本 testplan→ thread group→HTTP request→view results tree.jmx后缀文件,xml文件校验 二.使用过程中其他需要注意的 1. ...
- win 端口占用
netstat -aon|findstr "8080" 查看端口 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 11468 TCP 172.27.232 ...
- 论MVC架构设计及其应用
论MVC架构设计及其应用 张紫诺1 (1. 位石家庄铁道大学,河北 石家庄 050000) 摘要:随着信息化建设的发展,人们愈发需要考虑采用一种良好的架构实现快速构建企业应用程序的目标.而MVC架构正 ...
- AntD为Form的List设置默认值 (antd form.list 设置默认值 )
import React from "react"; function demo() { const FormConfig = { labelCol: { span: 8 }, w ...
- win10 wampserver升级 php7.0至 php7.2
1.去官网下载php7.2 下载地址: https://windows.php.net/download#php-7.0 2.下载安装 visual c++ 2017 或 visual c++ 20 ...
- matlab函数学习笔记
数值精度 显示精度由format函数控制,不影响原始数据,只控制显示精度 命令 说明 long short rat 分数 digits vpa pi的输出 命令 显示结果结果 form ...
- jdbc连接数据库access denied for user 'root'@'localhost'(using password:YES)
navicat可以进行连接,一般原因为mysql未启用远程连接 以下为解决方案 解决方法-更新用户加密方式: MySQL [mysql]> ALTER USER 'root'@'%' IDENT ...