我们一起来学Shell - 初识shell 1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 我们一起来学Shell - 初识shell

Shell 的分类

  • Linux中默认的Shell是/bin/bash,流行的Shell有ashbashkshcshzsh等,不同的Shell都有自己的特点以及用途。
    bash

大多数Linux系统默认使用的Shell,bash Shell 是 Bourne Shell 的一个免费版本,它是最早的Unix Shell

bash还有一个特点,可以通过help命令来查看帮助。

包含的功能几乎可以涵盖Shell所具有的功能,所以一般的Shell脚本都会指定它为执行路径。

csh

csh是具有C语言风格的一种Shell,其内部命令有52个,较为庞大。

目前使用的并不多,已经被/bin/tcsh所取代。

ksh

Korn Shell 的语法与 Bourne Shell 相同,同时具备了 C Shell 的易用特点。

许多安装脚本都使用ksh

ksh 有42条内部命令,与bash相比有一定的限制性。

tcsh

tcshcsh的增强版,与 csh 完全兼容。

sh

是一个快捷方式,已经被 /bin/bash 所取代。

nologin

指用户不能登录

zsh

目前Linux里最庞大的一种 zsh

它有84个内部命令,使用起来也比较复杂。

一般情况下,不会使用该Shell。

Shell 能做什么

  • 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)
  • 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
  • 应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)
  • 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk)
  • 自动化备份恢复程序(MySQL完全备份/增量 + Crond)
  • 自动化管理程序(批量远程修改密码,软件升级,配置更新)
  • 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  • 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  • 自动化扩容(增加云主机——>业务上线)
  • Zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上线)
  • 俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现
  • Shell可以做任何事(一切取决于业务需求)

bash 环境变量文件

/etc/profile

全局(公有)配置,不管是哪个用户,登录时都会读取该文件。

/etc/bashrc

Ubuntu 没有此文件,与之对应的是 /ect/bash.bashrc

它也是全局(公有)的

bash 执行时,不管是何种方式,都会读取此文件。

~/.profile

若 bash 是以 login 方式执行时,读取 ~/.bash_profile,

若它不存在,则读取 ~/.bash_login,

若前两者不存在,读取~/.profile。

图形模式登录时,此文件将被读取,即使存在 ~/.bash_profile 和 ~/.bash_login。

~/.bash_login

若 bash 是以 login 方式执行时,读取 ~/.bash_profile,

若它不存在,则读取 ~/.bash_login,

若前两者不存在,读取 ~/.profile。

~/.bash_profile

Unbutu 默认没有此文件,可新建。

只有 bash 是以 login 形式执行时,才会读取此文件。

通常该配置文件还会配置成去读取 ~/.bashrc。

~/.bashrc

当 bash 是以 non-login 形式执行时,读取此文件。

若是以 login 形式执行,则不会读取此文件。

.bashrc 文件内写一行

source /etc/profile

每执行一次shell,都会执行一次bashrc,然后就会执行source,避免环境变量报错

~/.bash_logout

注销时,且是 longin 形式,此文件才会读取。

在文本模式注销时,此文件会被读取,

图形模式注销时,此文件不会被读取。

bash 环境变量加载

  • 图形模式登录时,顺序读取:/etc/profile~/.profile
  • 图形模式登录后,打开终端时,顺序读取:/etc/bash.bashrc~/.bashrc
  • 文本模式登录时,顺序读取:/etc/bash.bashrc/etc/profile~/.bash_profile
  • 从其它用户 su 到该用户,则分两种情况:
  • 如果带 -l 参数(或-参数,--login 参数),如:su -l username,则 bash 是 login 的,它将顺序读取以下配置文件:/etc/bash.bashrc/etc/profile~/.bash_profile
  • 如果没有带 -l 参数,则 bash 是 non-login 的,它将顺序读取:/etc/bash.bashrc~/.bashrc
  • 注销时,或退出 su 登录的用户,如果是 longin 方式,那么 bash 会读取:~/.bash_logout
  • 执行自定义的 Shell 文件时,若使用 bash -l a.sh 的方式,则 bash 会读取行:/etc/profile~/.bash_profile
  • 若使用其它方式,如:bash a.sh./a.shsh a.sh(这个不属于bash Shell),则不会读取上面的任何文件
  • 上面的例子,凡是读取到 ~/.bash_profile 的,若该文件不存在,则读取 ~/.bash_login,若前两者不存在读取 ~/.profile

login shell与non-login shell

login shell

取得 bash 时需要完整的登陆流程的,就称为 login shell

举例来说,我们登陆终端时,需要输入用户的账号与密码,此时取得的 bash 就称为 login shell

non-login shell

取得 bash 时不需要完整的登陆流程的 ,就称为 non-login shell

在原本的 bash 环境下再次使用 bash 这个命令,建立了一个bash子进程,没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell

bash 特性

命令和文件自动补齐

很多命令都会提供一个 bash-complete 的脚本,在执行该命令时,敲 tab 可以自动补全参数,会极大提高生产效率。

linux命令自动补全需要安装 bash-completion (yum install -y bash-completion)

注意: 断开终端,重新连接后可正常 tab 补齐

默认情况下,Bash 为 Linux 用户提供了下列标准补全功能。

  • 变量补全
  • 用户名补全
  • 主机名补全
  • 路径补全
  • 文件名补全

命令历史记忆功能

Bash 有自动记录命令的功能,自动记录到.bash_history隐藏文件中。还可以在下次需要是直接调用历史记录中的命令

centos 可以通过/etc/profile中的文件来定义一些参数、

在bash中,使用history 命令来查看和操作之前的命令,以此来提高工作效率。

history是bash的内部命令,所以可以使用 help history 命令调出 history 命令的帮助文档(history默认保存1000行)。

关于history的一些用法,可以看我的另一篇博客:有个姑娘叫history

别名功能

alias 命令

别名的好处是可以把本来很长的指令简化缩写,来提高工作效率。

alias # 查看系统当前所有的别名

alias h5='head -5' # 定义新的别名。这时候输入h5就等于输入’head-5‘

unalias h5 # 取消别名定义

如果想要文件永久生效,只需将上述别名命令写到对应用户或者系统 bashrc 文件中

如果想用真实命令可以在命令前面添加反斜杠 ,使别名失效

关于alias的一些用法,可以看我另一篇博客:linux可以这样玩 之 杂乱无章的随笔(不定期更新){搜索:利用alias传参,自定义linux命令}

快捷键

快捷键不区分大小写,大写是为了方便区分

快捷键 作用
ctrl+A 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
ctrl+E 把光标移动到命令行结尾。
ctrl+C 强制终止当前的命令。
ctrl+L 清屏,相当于clear命令。
ctrl+U 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便
ctrl+K 删除或剪切光标之后的内容。
ctrl+W 删除或剪切光标之前的内容(注意:和浏览器的快捷键会有冲突,浏览器的快快捷键是关闭当前标签页)。
ctrl+Y 粘贴ctrl+U或ctul+K剪切的内容。
ctrl+R 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+D 退出当前终端。
ctrl+Z 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。
ctrl+S 暂停屏幕输出。
ctrl+Q 恢复屏幕输出。

前后台作业控制

Linux bash Shell单一终端界面下,经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。所有的上述的这些工作可以在一个 bash 内实现,在同一个终端窗口完成。

前后台作业的定义
  • 前后台作业实际上对应的也就是前后台进程,因此也就有对应的 pid。在这里统称为作业。
  • 无论是前台作业还是后台作业,两者都来自当前的Shell,是当前Shell的子程序。
  • 前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。
  • 后台作业:在内存可以自运行的作业,用户无法参与交互以及使用[ctrl]+c来终止,只能通过bg或fg来调用该作业。
几个常用的作业命令
  • command & 直接让作业进入后台运行
  • [ctrl]+z 将当前作业切换到后台
  • jobs 查看后台作业状态
  • fg %n 让后台运行的作业n切换到前台来
  • bg %n 让指定的作业n在后台运行
  • kill %n 移除指定的作业n
  • "n" 为jobs命令查看到的job编号,不是进程id。
  • 每一个job会有一个对应的job编号,编号在当前的终端从1开始分配。
  • job 编号的使用样式为[n],后面可能会跟有 “+” 号或者 “-” 号,或者什么也不跟。
  • “+” 号表示最近的一个job,
  • “-” 号表示倒数第二个被执行的Job。
  • 注,“+” 号与 “-” 号会随着作业的完成或添加而动态发生变化。
  • 通过jobs方式来管理作业,当前终端的作业在其他终端不可见。
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
存储 Unix Shell
什么是Shell
Shell是用户与操作系统内核之间的接口,允许用户通过命令行或脚本来与操作系统进行交互。 它解释用户输入的命令,并将其转换为操作系统能够理解的指令,然后执行这些指令并将结果返回给用户。
100 4
|
Shell 程序员
Shell 替代
Shell 替代
47 0
|
存储 机器学习/深度学习 搜索推荐
shell小结
Shell小小总结,曾经的爱,一路相伴。
shell小结
|
Shell Windows Unix
|
Shell Linux Perl