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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 我们一起来学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方式来管理作业,当前终端的作业在其他终端不可见。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
安全 Shell 网络安全
|
6月前
|
安全 Shell Linux
什么是shell?
系统内核是操作系统的基本组成部分,它负责管理系统的硬件和软件资源,并提供一组基本的系统服务。内核是操作系统的核心,控制着计算机的所有主要功能,包括内存管理、进程管理、设备驱动程序、系统调用和安全防护等。内核在计算机中扮演着重要的角色,它为用户空间的应用程序提供访问硬件资源的接口,并通过进程间通信机制及系统调用来完成这些操作。内核的设计和实现对于操作系统的性能和稳定性有着至关重要的影响。 Linux系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用。
|
机器学习/深度学习 Shell Linux
shell
shell
85 0
|
网络协议 Shell Perl
shell 常用
./sss xxx $1 $2 $# $0 $? tail -1 head -1 awk '{ if ($1=="FIND") print $2 }' 如何调试bash脚本 #!/bin/bash -xv function aa(){ echo "xx" } let $a=$b+$c $a=(($b+$c)) if[ -f /xx/xx ] then xxx fi for i in $(ls) do ccc done head -10 xx|tail -1 命令“export” 有什么用 ? 使变量在子shell 中可用。
982 0
|
Shell Windows Unix
|
Shell 数据安全/隐私保护 网络安全
下一篇
无影云桌面