认识Linux的Bash

参考书籍:蔡德明_鸟哥的Linux私房菜

目录

1、硬件、kernel与Shell

2、为何要学习文字接口的shell?

3、系统的合法shell与/etc/shells的功能

(1)shell的历史:

[(2)查看系统有多少个可用的shells:Linux 预设就是使用 bash](#(2)查看系统有多少个可用的shells:Linux 预设就是使用 bash)

(3)登录时系统的预设shell:

[(4)Bash shell的功能(/bin/bash)](#(4)Bash shell的功能(/bin/bash))

[(5)查询指令是否为Bash Shell内建命令:](#(5)查询指令是否为Bash Shell内建命令:)

(6)指令的下达与快速编辑按钮


1、硬件、kernel与Shell

用户透过shell输入指令,与Linux的kernel进行沟通,使得硬件按照指令正确工作


2、为何要学习文字接口的shell?

(1)图形化接口不一致性:X Window 与 web 接口的工具虽然看着简单明了,但只是一堆软件整合而成的应用程序,不同的配件版本所提供的接口也都不相同。

(2)各家文字shell基本一样,能够轻松适应。

(3)远程联机时文字传输速度更快。

(4)能够更好的管理自己的主机,shell 提供的数据流重导向以及管线命令大大提高管理系统的效率。


3、系统的合法shell与/etc/shells的功能

(1)shell的历史:

第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为****sh !

后来另一个广为 流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为C shell ,简称为 csh !

(2)查看系统有多少个可用的shellsLinux 预设就是使用 bash

bash 复制代码
sudo cat /etc/shells
  • /bin/sh (已经被 /bin/bash 所取代)
  • /bin/bash (就是 Linux 预设的 shell)
  • /bin/tcsh (整合 C Shell ,提供更多的功能)
  • /bin/csh (已经被 /bin/tcsh 所取代)

(为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件啊? 这是因为系统某些服务在运作过程中,会去检查使用者能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个文件啰!)

(3)登录时系统的预设shell

查看/etc/passwd文件内容,可以看到用户登陆时系统预设的shell

bash 复制代码
cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

(4)Bash shell的功能(/bin/bash)

bash 是 GNU 计划中 重要的工具软件之一,目前也是 Linux distributions****的标准 shell 。 bash 主要兼容于 sh ,并且依 据一些使用者需求而加强的 shell 版本。

  • **命令编修能力(history):**bash能够记忆使用过的指令。 (上下键)~/.bash_history中会记录前一次登入以前所执行过的指令,这一次的会暂存在内存中,注销系统后才会将本次登入的指令记录到~/.bash_history中。(默认会记录1000个)
  • 命令与文件补全功能(tab键): 如果我想要知道我的环境当中所有以 c 为开头的指令呢?就按下『 c[tab][tab] 』

|-----------------------------------------------------------------|
| [Tab] 接在一串指令的第一个字的后面,则为命令补全; |
| [Tab] 接在一串指令的第二个字以后时,则为『文件补齐』! |
| 若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行『选项/参数的补齐』功能! |

  • **命令别名设定功能(alias):**ls -al可以知道目录下所有文件以及属性,可以使用alias命令来创建bieming
bash 复制代码
alias lm='ls -al'
lm
total 96
drwx------. 16 langxi langxi  4096 Dec 27 16:37 .
drwxr-xr-x.  4 root   root      31 Jun 30 16:17 ..
  • 工作控制(job control)、前景背景控制: 前、背景的控制可以让工作进行的更为顺利! 至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中执行!而不怕不小心使用了 [Ctrl] + c 来停掉该程序。
  • 程序化脚本(shell scripts): 在 Linux 底下的 shell scripts 则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续指令写成一个文件, 该文件并且 可以透过对谈交互式的方式来进行主机的侦测工作!也可以藉由 shell 提供的环境变量及相关指令来 进行设计,相当于一个小型的程序语言。
  • 通配符(Wildcard): 除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与指令下达。 例如:想知道 /usr/bin 底下有多少以****X 为开头的文件吗?使用:『 ls -l /usr/bin/X* 』就能够知道

(5)查询指令是否为Bash Shell内建命令:

为了方便 shell 的操作, 其实 bash 已经『内建』了很多指令了,例如上面提到的 cd , 还有例如 umask 等等的指令,都是内建在 bash 当中的。
利用 type 这个指令来观察某指令是否为Bash内建命令:

bash 复制代码
[dmtsai@study ~]$ type [-tpa] name

选项与参数:
 :不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内建指令
-t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
 file :表示为外部指令;
 alias :表示该指令为命令别名所设定的名称;
 builtin :表示该指令为 bash 内建的指令功能;
-p :如果后面接的 name 为外部指令时,才会显示完整文件名;
-a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias

范例一:查询一下 ls 这个指令是否为 bash 内建?
type ls
 ls is aliased to `ls --color=auto' # 未加任何参数,列出 ls 的最主要使用情况

type -t ls
 alias # 仅列出 ls 执行时的依据

type -a ls
ls is aliased to `ls --color=auto' # 最先使用 aliase
ls is /usr/bin/ls # 还有找到外部指令在 /bin/ls

范例二:那么 cd 呢?
type cd
cd is a shell builtin # 看到了吗? cd 是 shell 内建指令

(6)指令的下达与快速编辑按钮

  • shell环境的指令下达: 这个指令用途是将三个文件复制到 /root****这个目录下而已。不过,因为指令太长, 于是利用『 \[Enter] 』来将 [Enter] 这个按键『跳脱!』开来,**[Enter]** **按键不再具有『开始执行』的功能!**好让指令可以继续在下一行输入。
bash 复制代码
范例:如果指令串太长的话,如何使用两行来输出?
cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root

 \ 仅跳脱紧接着的下一个字符,不能有空格,否则跳脱的是空格键
 顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号, 你可以继续输入指令啰!
 也就是说,那个 > 是系统自动出现的,你不需要输入。
  • 快速编辑按钮:当你所需要下达的指令特别长,或者是你输入了一串错误的指令时,你想要快速的将这串指令整个删除掉,一般来说,我们都是按下删除键的。 有没有其他的快速组合键可以协助呢?是有的!常见的有底下这些:

|-------------------------|---------------------------------------------------------|
| 组合键(移动/删除) | 功能与示范 |
| [ctrl]+u / [ctrl]+k | 分别是从光标处向前删除指令串 ([ctrl]+u) 及向后删除指令串 ([ctrl]+k) 。 |
| [ctrl]+a / [ctrl]+e | 分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e)。 |

总之,当我们顺利的在终端机 (tty) 上面登入后, Linux 就会依据 /etc/passwd 文件的设定给我们一
个 shell ( 预设是 bash) ,然后我们就可以依据上面的指令下达方式来操作 shell , 之后,我们就可以透过 man 这个在线查询来查询指令的使用方式与参数说明, 很不错吧!那么我们就赶紧更进一步来操作 bash 这个好玩的东西啰!

相关推荐
ShyTan3 分钟前
使用IDEA远程debug服务器上的jar包
运维·服务器
WGS.22 分钟前
Temporary failure resolving ‘security.ubuntu.com‘
linux·ubuntu
码思途远27 分钟前
NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试
linux·nxp·i.mx8·i.mx8m
xybDIY1 小时前
【亚马逊云】基于Amazon EC2实例部署 NextCloud 云网盘并使用 Docker-compose 搭建 ONLYOFFICE 企业在线办公应用软件
运维·docker·容器·aws
wanhengidc1 小时前
高防服务器在网络游戏中起着哪些作用?
运维·服务器
我是阿呆同学2 小时前
Linux平台下实现的小程序-进度条
linux·小程序
我明天再来学Web渗透2 小时前
【2024年-11月-23日-开源社区openEuler实践记录】KubeOS:云原生时代操作系统的革新力量
运维·开发语言·云原生·开源·云计算·openstack
猿人启示录2 小时前
Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接
运维·负载均衡·lvs
天地人-神君2 小时前
centos双网卡不能上网
linux·运维·centos
rgrgrwfe2 小时前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx