8.1 shell介绍
- shell是一个命令解释器,提供用户和机器之间的交互。(人机接口,把人话翻译成机器话。)
- 支持特定语法,比如逻辑判断、循环。
- 每个用户都可以有自己特定的shell。
- CentOS7默认的shell是bash(Bourne Agin Shell)
- shell还有其他种类例如zsh、ksh等等。
8.2命令历史
8.2.1 /用户家目录/用户/bash.history文件
这个文件记录了了用户所使用过的历史命令。
8.2.2 环境变量HISTSIZE
- echo $HISTSIZE
- 这个变量定义了系统可以存储命令的最大条目数。
- /etc/profile 中定义了这个变量的内容。可以根据自己的需要更改。
- 要想使这个配置生效,只有重开终端,或者使用source /etc/profile。
8.2.3 history命令
- 显示历史命令
- 选项-c 清空内存中的命令历史。(注意是内存)
- 变更history输出内容的格式:HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
- 永久变更环境变量应该更改/etc/profile文件。
8.2.4 永久保存命令历史
chattr +a ~/.bash_history
- 即使HISTSIZE设置了最大条目,这样也会使内存里的命令记录到.bash_history文件里。
- 如果没有正常退出终端不会把内存里的命令记录到历史里。
8.2.5 重复执行命令历史中的命令
- 两个叹号表示最后一次执行的命令
- 叹号加数字,重复执行指定编号的命令。
- 叹号加命令,重复执行最后一次使用这条命令的历史。
8.3 命令补全和别名
8.3.1 tab命令补全
- 使用命令时可以只打这个命令的前几个字母,按tab键系统会自动补全整条命令。
- 敲一下就可以使命令补全。
- 如果发生命令前几个字母重复,按两下tab键可以自动列出可能的命令。
8.3 通配符
8.3.1 星号*
- 可以代替任意个任意字符。
8.3.2 问号
- 可以代替任意一个字符。
8.3.3 区间 []
- 方括号的内容是一范围
- 每次只取其中的一个值
- 数字0-9,字母a-z,大写字母A-Z。
8.3.4 花括号{}
- 用法和方括号类似。
- 花括号的内容可以不关联。
8.4 输出重定向
8.4.1 屏幕输出内容定向至文件。
- 一个大于号是覆盖重定向,会把内容全部改写为现有的。
- 两个大于号是追加,会把内容追加到文件的末尾去。
8.4.2 记录错误信息
- 2>会把命令执行产生的错误信息写到向边的文件里。
- 2>>会把命令执行产生的错误信息追加到文件里。
8.4.3 输出内容和错误信息同时存在
- 使用&>和&>>来代表把执行内容和错误信息都写进文件里。
8.4.4 输入重定向
- wc -l < 1.txt
- 把右边的文件内容交给左边的命令去操作。
- 重定向操作左边必须是命令,右边必须是文件。
8.6 管道符和作业控制
8.6.1 管道符
- grep 命令是用来过滤关键字的。
- |坚线就是管道符。他的作用是把左边命令生成的内容交给右边的命令去处理。
8.6.2 暂停任务
- ctrl+z 可以暂停当前的命令,光标回到提示符。
- 被暂停的服务或命令,这时在后台。
8.6.3 列出已停止的命令
- jobs可以把后台已停止的命令列出来。
- []方括号的数字就表示这个命令的编号,这个编号可以被fg命令使用。
8.6.4 把后台命令调用至前台。
- 直接使用fg会把最后一个使用过的后台命令调用至前台。
- fg n #n为后台命令的编号,可以把指定编号的命令调用至前台。
8.6.5 把前台命令调用至后台。
- bg n #把指定命令调用至后台。
- n是用jobs所列出命令的编号。
8.7 变量
- 常用系统变量PATH , HOME ,PWD ,LOGNAME
- 系统变量通常是大写字母。
8.7.1 env命令
- 可以获取系统变量
- 使系统显示中文的变量内容: LANG=zh_CN.UTF-8
8.7.2 set命令
- set不仅会显示系统变量,还会显示用户自定义的变量。
8.7.3 自定义变量
- 用“变量名=变量值”这种方法为变量赋值。
- 变量名可以是字母加下划线或数字。
- 变量名首位不能为数字。
- 变量值带空格时,需要用双引号把变量值引起来,表示这是一个整体。
- 双引号内的符号可以运行,单引号内的符号是作为字符存在的。
8.7.4 全局变量声明 export
- 查看自己终端所在的tty.
echo $SSH_TTY - pstree 可以查看自己所在的终端位置
- export $变量名
可以把变量应用到全局去。新开的子shell也可以使用这个变量。 - 即使使用了export,不在同一个终端下变量也不会被应用。
- 所谓的全局是向下应用。而他的上级是不受影响的。
8.7.5 取消变量的赋值
- unset 变量名
8.9 环境变量配置文件
8.9.1 系统层次环境变量
- /etc/proflie 用户登录才会执行
- /etc/bashrc 用户不需要登录,只要系统执行shell就会生效。
8.9.2 用户层次环境变量
- /.bashrc和/bash_profile对应系统环境变量的两个文件。
- 点和source的作用是一样的。
8.9.3系统变量PS1
- 提示符左侧所显示的内容就是PS1变量的内容。
- 默认显示是
[\u@\h \W]$
\u是用户\h是主机名\W大写的W是路径的最后一层级。 - 如果最后一位是小写w就会变成绝对路径。
- 最后一位提示符,普通用户是$,root用户就是#了。
- echo显示颜色的方法在这里也可以使用。
直播笔记
bashrc和bash_profile
http://ask.apelearn.com/question/7719
- .bash_proflie对应login sehlls ,需要用户登录。
- .bashrc对应non-login sehlls.并不一定需要用户登录。
- .bash_proflie和/etc/bash_profile的区别在于,后者是全局,而前者只对应用户。
- profile肯定会调用bashrc,反之则不会。
echo 显示颜色
http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html
source 和exec的区别
http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html
- source不会产生新的PID,会把子脚本里的变量带出来。
- exec执行后不会返回父进程。
- exec一般被用来记录日志。在它后边执行的脚本都被归档为它自己。