2018年8月14日第十节课笔记——shell基础(上)

内容摘要

  • 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+别名取消命令别名。

四、通配符和特殊符号

  • 符号*表示通配,即全部的意思。不分字数,不分符号。例:ls *.txt  查看所有txt结尾的文件。如图:

  • 符号表示一个任意的字符。例:ls ?.txt  如图:

  • 符号[ ]表示其中的任意一个字符,支持指定范围。例:ls [123].txt或者ls [1-3].txtls [a-zA-Z].txt   如图

  • 符号{1,2,3}表示1或者2或者3,于[ ]唯一的不同就是需要使用逗号分隔。
  • 符号$ 变量前缀,正则里面表示行尾。
  • 符号多条命令在一行时,使用它分隔。
  • 符号~用户家目录,正则表达中表示匹配符。
  • 符号||表示或者的意思,执行正确命令后不会执行后续的命令。
  • 符号&&表示命令执行正确时才会继续执行后续的命令。

五、输入输出重定向

  • 大于号>,表示将前面命令的内容定向到后面的文件中,覆盖删除后面文件的内容。如图:

  • 两个大于号>>,表示追加,不会删除原文件的内容。
  • 错误重定向2> ,将错误信息重定向覆盖删除指向的文件内容。如图:

  • 错误追加重定向2>>
  •  正确和错误重定向&>
  • 分别将输出重定向和错误重定向到两个文件中,如图:

  • 输入重定向<

六、管道符和作业控制

  • 管道符号|,将前面命令的结果输出到后面的命令中去。如图:

  • 快捷键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)

十一、垃圾桶扩展

  • Linux 下有一个特殊的设备 /dev/null ,所有被写入该设备的东西都会消失,所以如果有部分信息不想输出至文件,也不想输出至屏幕,那就输出至 /dev/null 吧

十二、作业控制

  • foreground: 前台, 平常执行命令的界面
  • background: 后台, 看不到的地方
  • 什么样的工作适合放到后台: 不需要与用户交互的命令
  • 放入后台的工作是无法用 Ctrl + c 来终止的
  • 后台的工作有两种状态: 暂停(stop) 和 运行中( running)

十三、环境变量配置文件

  • 常用的几个环境变量
  1.  HOME: 当前用户的家目录
  2. HOSTNAME: 该主机的主机名
  3. USER: 当前用户的用户名
  4. SHELL: 当前使用的 shell 类型
  5. HISTSIZE: 可存储的历史命令条数
  6. MAIL: 当前用户的邮箱
  7. PATH: 可执行命令的所在目录
  8. LANG: 当前语系
  9. PS1: 命令提示符的格式, 可玩性较高, 但工作中不常用, 可自行 man bash 查看 PS1 的设置方法
  10. PS2: 输入命令时强制换行后的提示符
  11. OSTYPE: 当前操作系统类型
  12. MACHTYPE: 安装的机器类型
  13. HOSTTYPE: 主机的位数, x86 还是 x86_64
  14. bash shell 读取完通用配置后,才开始进行用户个性化配置的读取。
  • 用户个性化配置的文件不止 ~/.bash_profile 一个,还可能有 ~/.bahs_login 和 ~/.profile
  • 为什么有这么多个性化配置文件呢?主要是为了给从其他种类的 shell 转来使用 bash 的用户提供便利,满足其习惯罢了。
  • 所以我们往往只能见到 ~/.bash_profile 而已
  •  三种文件的读取顺序及规律
  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile
  • 命令declare定义变量
  1. 选项-a:定义变量为数组
  2. 选项 -i:定义变量为纯数字
  3. 选项-x:定义变量为环境变量
  4. 选项 -r:定义变量为 readonly

十四、bash_profile和bashrc区别

  • 当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile 会被调用来初始化shell环境
  • 当你不登陆系统而使用ssh直接在远端执行命令,.bashrc 会被调用
  • 当你已经登陆系统后,每打开一个新的终端时,.bashrc 都会被再次调用。
  • 若要配置环境变量之类,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登陆,该文件总会被调用!

猜你喜欢

转载自blog.csdn.net/CN_SHzhaoyujie/article/details/81711470