内容摘要
- shell介绍
- 命令历史
- 命令补全和别名
- 通配符和特殊符号
- 输入输出重定向
- 管道符和作业控制
- shell变量
- 环境变量配置文件
- shell特殊符_cut命令
- sort_wc_uniq命令
- tee_tr_split命令
- shell特殊符号(下)
一、shell介绍
- shell是一个命令解释器,提供用户和机器的交互。
- CentOS7默认的shell是bash(Bourne Agin Shell),此外还有zsh、ksh等。
- 支持特定语法,比如逻辑判断、循环
- 每个用户都可以有自己特定的shell
二、命令历史
- 在/root/.bash_history 文件中保存有命令历史。
- 命令history可以查看命令历史,默认1000条。echo $HISTSIZE 查看相关变量。
- 命令history -c 可以清空当前内存中的命令历史,无法清除命令历史文件中的命令历史。
- 只有当退出终端的时候才会将历史命令保存进命令历史文件中去,没有正常退出终端时命令历史不能保存完整。
- 文件/etc/profile 是history的配置文件。在配置文件中更改HISTSIZE=5000后,需重启终端,或者使用命令 source /etc/profile 重置环境变量后才会生效。
- 变量HISTTIMEFORMAT="%Y/%m/%d %H:%m:%S "可以临时在history中显示详细的年月日和时间,在profile中添加这条命令可以永久更改。
- 命令chattr +a ~/.bash_profile 为该历史命令文件增加a权限后,该历史文件将会被永久保存,只能最加不会被删除。(即使HISTSIZE只有1000,当命令历史超过1000时也不会被删除)。
- 命令!!使用最近的一条命令,即history中最后一条命令。
- 命令!+n(历史命令中的序号),例:
- 命令!+命令运行命令历史中第一个以该命令开头的命令。
三、命令补全和别名
- tab键,敲一下,敲两下,可以补全命令或文件路径。
- 安装yum install -y bash-completion,使tab可以补全命令参数。
- alias别名给命令重新起个名字
- 直接使用alias可以查看所有设置的别名
- 各用户都有自己配置别名的文件 ~/.bashrc
- 自定义的alias放到~/.bashrc
- 在目录/etc/profile.d/下保存有针对所有用更换的alias
- 命令unalias+别名取消命令别名。
四、通配符和特殊符号
- 符号{1,2,3}表示1或者2或者3,于[ ]唯一的不同就是需要使用逗号分隔。
- 符号$ 变量前缀,正则里面表示行尾。
- 符号;多条命令在一行时,使用它分隔。
- 符号~用户家目录,正则表达中表示匹配符。
- 符号||表示或者的意思,执行正确命令后不会执行后续的命令。
- 符号&&表示命令执行正确时才会继续执行后续的命令。
五、输入输出重定向
六、管道符和作业控制
- 快捷键ctrl+z 可以暂停一个任务。
- 命令jobs例出暂停或后台的任务
- 命令fg 恢复后台的任务。fg+数字 恢复相应序列的命令到前台。bg+数字 将相应任务丢到后台并运行,直接使用bg则将最后一个任务丢到后台运行。
- 在命令后加&符号 可以将命令直接丢到后台运行。
七、shell变量
- 命令env可以查询系统常用的一些变量(不包括自定义变量)
- 命令set不仅可以查看系统内置的变量,也可以查看用户自定义的一些变量。
- 变量名规则:字母、数字下划线。首位不能为数字。例 a=111
- 变量值有特殊符号时需要用单引号括起来脱义,譬如有空格等符号时。例 a='a b c'
- 命令echo $SSH_TTY 可以查询当前在哪个终端下。
- 命令pstree以树状图的方式展现进程之间的派生关系,显示效果比较直观。
- 命令export可以设置全局变量,使当前bash下的bash生效该变量。(子bash设置的全局变量不会向上生效)例:export aming=linux。
- 命令unset+变量名 取消对应的变量。
- 修改或设置/etc/profile中的变量,可以使所有用户生效该变量。
八、环境变量配置文件
- 文件/etc/profile 用户环境变量,交互或登录才执行。(系统层次的变量文件),全局生效。
- 文件/etc/bashrc 用户不用登录,执行shell时就会生效。(系统层次的变量文件),全局生效。
- 文件~/.bash_profile root用户的环境变量文件,交互或登录才执行。(用户层次的变量文件). .bash_profile 和 source .bash_profile 是一样的效果,都可以加载该配置文件。
- 文件~/.bashrc root用户的环境变量文件,用户不用登录,执行shell时就会生效。(用户层次的变量文件)
- 文件~/.bash_logout 定义用户退出时需要做的一些操作。(用户层次的变量文件)
- 变量PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ ' 可以定义命令左侧的字符串显示形式。(当前bash下)
扩展:
九、命令历史(history)
- Linux 可以记录每个用户所使用的命令, 并记录到 ~/.bash_history 文件中
- 当用户以 bash 登入 Linux 主机后, 系统会主动地由 ~/.bash_history 读取命令历史
- 当用户注销时, 会将最近的 HISTFILESIZE 个记录写入 ~/.bash_history 文件中
十、通配符与特殊符号
符号 | 意义 |
* | 代表0-无穷个 任意字符 |
? | 代表有且只有一个字符 |
[ ] | 代表有且仅有一个字符,且为[...]中所枚举的其中一个, 如 [13579] |
[-] | 同上,只不过是一个范围,如[ 0-9 ],[a-z]等 |
[^] | 有且仅有一个,且不是所枚举的任何字符,如:[^a-zA-Z] 代表该位不是字母 |
符号 | 内容 |
# | 批注号 |
\ | 转义符号,将特殊字符或通配符还原成一般字符 |
| | 管道符 |
; | 命令衔接符,连续执行两条命令 |
~ | 当前用户家目录 |
$ | 取用变量符号 |
& | 工作控制,将指令变成后台工作 |
! | 逻辑非 |
>、>> | 数据流重定向,output |
<、<< | 数据流重定向,input |
' ' | 单引号,无法引用变量 |
" " | 双引号,可以引用变量 |
` ` | 指令引用,功能同 $(command) |
十一、垃圾桶扩展
十二、作业控制
- foreground: 前台, 平常执行命令的界面
- background: 后台, 看不到的地方
- 什么样的工作适合放到后台: 不需要与用户交互的命令
- 放入后台的工作是无法用 Ctrl + c 来终止的
- 后台的工作有两种状态: 暂停(stop) 和 运行中( running)
十三、环境变量配置文件
- HOME: 当前用户的家目录
- HOSTNAME: 该主机的主机名
- USER: 当前用户的用户名
- SHELL: 当前使用的 shell 类型
- HISTSIZE: 可存储的历史命令条数
- MAIL: 当前用户的邮箱
- PATH: 可执行命令的所在目录
- LANG: 当前语系
- PS1: 命令提示符的格式, 可玩性较高, 但工作中不常用, 可自行 man bash 查看 PS1 的设置方法
- PS2: 输入命令时强制换行后的提示符
- OSTYPE: 当前操作系统类型
- MACHTYPE: 安装的机器类型
- HOSTTYPE: 主机的位数, x86 还是 x86_64
- bash shell 读取完通用配置后,才开始进行用户个性化配置的读取。
- 用户个性化配置的文件不止 ~/.bash_profile 一个,还可能有 ~/.bahs_login 和 ~/.profile
- 为什么有这么多个性化配置文件呢?主要是为了给从其他种类的 shell 转来使用 bash 的用户提供便利,满足其习惯罢了。
- 所以我们往往只能见到 ~/.bash_profile 而已
- 三种文件的读取顺序及规律