8.1shell介绍 8.6管道符和作业控制
8.2命令历史 8.7shell变量【上】
8.3命令补全和别名 8.8shell变量【下】
8.4通配符 8.9环境变量配置文件
8.5输入输出重定向
{1}shell介绍
- shell是一个命令解释器,提供用户和机器之间的交互。
- 支持特定语法,比如逻辑判断、循环。
- 每个用户都可以有自己特定的shell。
- CentOS7默认shell为bash (Bourne Agin Shell)。
- 还有zsh、ksh等。
- 搜索有没有zsk和ksh。
{2}命令历史
- 使用过的命令,会存放在用户家目录下/root/.bash_history。
- history命令,可以查看使用过的命令历史,最多可存1000条。
- history -c命令,可以将当前内存的命令历史清空,但是不会清空/root/.bash_history里面的命令。
- 注意:刚刚敲过的命令,只有当用户正常退出终端时,才会保存到.bash_history文件中去。
- 环境变量HISTSIZE在/etc/profile中定义,可以vi /etc/profile,找到HISTSIZE并修改参数。
- 然后执行命令# source /etc/profile,使修改马上生效。
- 修改命令历史格式,可以更加方便我们能直观的查看。
- 修改命令历史格式,可以更加方便我们能直观的查看。
- 该格式只适用于当前终端,若想环境变量生效,需要# vim/etc/profile,在配置文件中添加。
- HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
- 然后source /etc/profile,打开其他终端,也会生效。
- 要想命令历史永久保存并不被别人删除,运行chattr +a ~/.bash_history(只能追加,不能删除)
- 如果不正常退出那你的命令保存的就不全。
- !! 表示执行最后一条命令,上一次执行的命令。
- !n 表示运行第几条命令(n代表数字)
- !echo 表示会在命令历史里面,最近一次执行以 echo 开头的命令。
{3}命令补全和别名
- 命令补全tab:按一次tab可以补全一个命令、一个路径或者是一个文件名;连续按两次tab键,则把所有的命令或者文件名都列出来。在centos7里支持参数自动补全,需要安装安装包bash-completion;然后重启下系统(reboot),才会生效。
- alias别名:通过alias把一个常用且很长的命令另取名一个简单易记的指令,如果不想用了,也可以使用unalias取消别名,直接执行alias命令,则会看到系统中所有的别名。
- alias存放:第一个在用户家目录下.bashrc文件下。
- 第二个在 /etc/profile.d 目录下的 colorgrep.sh 、colorls.sh 这些脚本中定义的。
{4}通配符
- 通配符*:星代表通配 ,星不仅可以放到前面也可以放到后面,列出零个或多个字符以txt结尾的文件。
- 通配符?,表示一个任意的字符。
- 方括号[ ]:ls [0-9].txt表示0-9范围内的任意.txt文件。
- 花括号 {}:ls {1,2,3}.txt表示括号内任意.txt文件。
{5}输入输出重定向
- > 正确的输出
- >>追加重定向
- 2>错误重定向
- 2>>错误追加重定向
- >+2 == &> 结合正确和错误,也支持 &>>追加。
- <输入到命令里面
- lsaaa 2> a.txt,2大于号表示将命令产生的错误信息输入到一个文件里去。
- lsaaa 2>>a.txt,表示错误信息追加重定向。
- ls [12].txt aaa.txt &> a.txt 这里&>代表了把正确和错误的输出都输出到a.txt里,如图:
- ls [12].txt aaa.txt &>> a.txt追加。
- ls [12].txt aaa.txt > 1.txt 2>a.txt 把错误的和正确的分开输入。
- wc -l < 1.txt 命令是1.txt的内容输入给wc -l 查看文件有多少行。不支持文件到文件,左边必须是一个命令。
{6}管道符,作业控制
- 管道符|,将前一个指令的输出作为后一个指令的输入。
- ls |wc -l 命令wc -l 统计文件数量。
- Ctrl+z 暂停一个任务:当正在编辑一个文件时,可以通过Ctrl+z暂停(处于后台),回到命令窗口。
- 使用fg(foreground)命令恢复。
- 如果暂停多个任务,可以用jobs查看在后台运行的任务。
- jobs 可以把你停止的任务列出来。
- 如果想重新调回,需要输入fg [id],同理也可以使用bg(background)命令放到后台运行去,用法bg [id]
- sleep 命令;sleep 1000=意思相当于让机器休眠静止1000秒.
- bg 1:bg放到后台运行 1是防止混淆加上好区别。
- “&” 命令:后面加&相当于直接把任务调到后台运行。
需注意:只能当前终端下运行。
{7}shell变量【上】
- 变量
- env命令:查看系统常用的环境变量。
- set命令:不仅可以查看系统内置的环境变量,还可以查看用户自定义的变量。
- 自定义变量
- 变量名规则:可以是字母、数字和下划线,首位不能为数字。
- 变量值有特殊符号时需要用单引号(脱义)括起来,比如带空格的 a='a b c'
- 变量的累加,表示式复杂的时候,用双引号或者单引号引起来 如图:
{8}shell变量【下】
- 当打开多个终端时,w可以查看当前用户。echo $SSH_TTY,可以查看当前所在终端。
- 在终端1定义一个变量,在终端2中是查看不到
- bash是shell的一个子bash,相当于在打开一个终端,虽然也在pts1上,可以通过pstree查看在哪。
- 远程登录sshd获得了一个bash,然后又在终端下运行了一个bash就是子,在新的的bash下运行了一个新的命令 pstree。
- 现在是在第二个bash下,第一个bash所设定的环境变量在第二个bash下不生效,如何让第一个bash的自定义环境变量在第二个bash下生效,利用全局变量:
- 所谓的全局变量是向下的,向上不生效。
- 想打开子sshd就用bash命令就可以。
- 取消变量。
{9}环境变量配置文件
- 环境变量配置文件可分为两个维度:系统层次配置文件和用户层次配置文件。
- 系统层次配置文件(/etc下的文件)如下
- /etc/profile 用户环境变量,交互,登录才执行
- /etc/bashrc 用户不用登录,执行shell就生效
- 用户层次配置文件(用户家目录下的文件)如下
- ~/.bashrc
- ~/.bash_profile
- 一般我们不要编辑系统层次的配置文件,在有需要时,可以编辑用户自己的配置文件.bash_profile。
- source .bash_profile和. .bash_profile作用一样,加载配置文件里的配置。
- ~/.bash_history,用来记录命令历史。
- ~/.bash_logout ,用来定义用户退出的时候需要做的一些操作。
- ps1是在/etc/bashrc里面定义的,用于定义命令左边的字符串显示,如下图
- 修改W为w,发现变成绝对路径
- 去掉方括号,更换,普通用户是$表示,root用户是# 表示
- 颜色显示
课堂笔记
- bash_profile和bashrc区别: http://ask.apelearn.com/question/7719
- shell脚本中echo显示内容带颜色显示:http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html