shell是一个命令解释器,它在操做系统的最外层,负责直接与用户对话,把用户的输入解释给操做系统,并处理各类各样的操做系统的输出结果,输出到屏幕返回给用户。这种对话方式能够是交互的方式(从键盘输入命令,能够当即获得shell的回应),或非交互(脚本)的方式。换句话说,Shell是一个命令行解释器,它为用户提供一个像Linux内核发送请求以便运行程序的界面系统级程序,用户能够用Shell来启动,挂起,中止甚至是编写一些程序。 Shell仍是一个功能至关请打的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中能够直接调用Linux系统命令。html
每一个用户均可以有本身特定的shellshell
CentOS7默认shell为bash(Bourne Agin Shell)编程
还有zsh、ksh等,这shell默认是不安装的,使用须要进行安装centos
shell支持特定语法,好比逻辑判断、循环(if for whell)bash
命令历史查查看编程语言
使用过的命令历史存放在用户家目录下的.bash_history文件中,能够经过history命令查看命令使用历史测试
历史命令存储centos7
1.能够经过:echo $HISTSIZE 查看多能够存储多少条历史命令,默认为:1000条。操作系统
2.history -c 能够清除历史命令,可是不能清除.bash_history文件中的历史命令.net
3.历史记录只有退出终端的时候才会保存到.bash_history文件中,非正常关闭终端使用过的命令不会保存。
4.环境变量HISTSIZE的大小能够在/etc/profile中修改HISTSIZE参数,改完source或者退出终端从新登陆生效
命令历史格式修改
一、修改前
二、临时修改
HISTTIMEFORMAT="%Y/%m/%d %H:%M"
三、永久修改
/etc/profile中加入:
HISTTIMEFORMAT="%Y/%m/%d %H:%M "
命令永久保存
若是想把命令永久保存,不想别人删除,那能够把.bash_history文件加上a权限,使文件只能添加不能删除。
chattr -a ~/.bash_history
命令历史快捷键
!!: 执行最后一次执行的命令
!+ 数字: 执行命令历史中对应数字的命令
!+xx: 执行以xx开头的最后一条命令
centos7中参数补全
centos6中只能tab进行命令补全,centos7中能够支持参数补全。
默然是不支持的须要安装bash-completion,ctrl+d退出,从新登陆后生效。
安装: yum -y install bash-completion
重启:reboot
完成后测试:
命令别名
若是以为有些命令比较长和繁琐,可使用给这些命令起一个别名,起别名的命令:alias
用法:alias 别名='具体命令'
查看已有的别名
命令:alias
取消自定义的别名
命令:unalias 别名
"*" :表示0或者多个任意字符
如:*.txt 列出全部以.txt结尾文件
? : 一个任意字符
如:?.txt 列出一个任意字符的.txt文件
如:[123].txt 会列出1.txt 2.txt 3.txt
它也能够支持字母
示例:
列出:1-9
列出:1-9 和a-z
{} :列出花括号里面开头
如:{}.txt: 列出花括号内开头带有.txt
示例:
输出重定向:
1.> :左边输出重定向到右边
如:cat 1.txt > 2.txt 会把1.txt的内容重定向到2.txt中
2.>>:左边输出追加到右边
如:at 1.txt >> 2.txt 会把1.txt的内容追加到2.txt中
3.2> :错误重定向
如:输入一个错误的命令,加上2> 它会把错误信息重定向到2.txt中。
4.2>>: 错误追加剧定向
5.&> 是 > 和 2> 结合 ,会把正确和错误信息所有重定向。
输入重定向
把右边的文件输入到左边的命令中
如:把2.txt的内容输入到wc -l命令中进行统计行数
管道符
就是把前一个命令输出结果传到后面的命令
示例:把cat的输出结果传给wc进行统计
做业控制
做业控制:ctrl + z 能够暂停一个任务
好比说正在vi编辑一个文件,能够ctrl + z暂停vi编辑,这时能够在控制台继续使用其它操做:
若是想继续进行vi编辑可使用fg命令从新调用回来继续执行:
有多个任务在暂停中,可使用jobs命令查看:
多个暂停的任务时,指定任务恢复:
fg id号 ,若是不指定id号那就是恢复最后一次运行的。
暂停任务放到后台继续运行:
以下图sleep 300 任务是暂停状态,咱们使用bg 命令把它丢到后台继续运行,再查看它的状态已经变为运行中
在命令后面加入&也可使命令直接在后台执行
列出系统环境变量
env命令:列出系统预设的所有系统变量
set命令:set不只能够显示系统预设的环境变量,还能够显示用户自定义的变量
自定义变量
自定义变量命名规则
a=b,a为变量名,b为值,等号两边不能有空格。
变量名只能由字母,数字以及下划线组成,并且不能以数字开头。
当变量值带有特殊字符时,须要加上单引号。
变量内容自己就带有单引号,这个时候须要加上双引号。
示例:
当变量值有特殊符号时须要使用单引号(''):
变量累加:
全局变量
当打开多个终端,在其中一个终端中设置一个环境变量,在另一个终端中是查看不到的。
echo $SHH_TTY:能够经过此命令查看当前在哪一个终端下。
终端1:
终端2:
pstree查看当前所在位置
若是当前shell中运行bash命令,则会进入一个新的shell中,这个shell是原来shell的子shell
咱们能够用pstree命令来查看当前所在的位置(若是没安装则先安装:yum install -y psmisc)
exprot命令
以上这种状况是本地环境变量,只在当前终端下生效,若是想要变为全局变量则须要使用:exprot命令
示例:
另一个终端查看:
再从新打开一个终端:
取消环境变量
unset 变量名
环境变量配置文件两个维度
系统环境变量配置文件分两个维度:系统层次和用户层次
系统层
/etc/profile 用户登陆的时候会加载到
/etc/bashrc 用户或系统执行shell脚本时候,会用调用这个文件里的一些配置
通常不要编辑,若是须要全部用户使用的全局变量则修改/etc/profile
用户层
~/.bashrc
~/.bash_profile
~/.bash_history 记录历史命令
~/.bash_logout 用户退出时作的一些操做,如:想退出时删除历史命令,把删除命令放入这个文件中便可。
是环境变量生效
source 配置文件
或者 . 配置文件
PS1环境变量
PS1是来定义系统提示符的系统变量,通常系统默认的形式是:[username@host 工做目录]$.
root用户显示:
普通用户:
root是以#结尾,普通用户是$结尾。
echo $PS1查看:
修改:
修改显示的绝对路径
修改显示颜色
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'
ps2模式
查看PS2模式:
profile只用用户登陆才会生效
bashrc用户不登陆也会生效
source命令
source 命令的另外一种写法是点符号,用法和 source 相同
功能:使Shell读入指定的Shell程序文件并依次执行文件中的全部语句
source命令和exec的区别
经过三个脚本测试:
2.sh
#!/bin/bash echo "children script PID is $$" echo "now to children script." export a=2 echo "in children, a=$a"
source.sh
#!/bin/bash echo "fater script PID is $$" echo "fater script, set a is 1" export a=1 echo "it will source ./2.sh" source ./2.sh echo "now to father script." echo "fater script, a is $a"
exec.sh
#!/bin/bash echo "fater script PID is $$" echo "fater script, set a is 1" export a=1 echo "it will exec ./2.sh" exec ./2.sh echo "fater script, a is $a"
使用s是不会产生新的pid,souce脚本中的变量跟着进入到父脚本中。会把子脚本中的变量带出来
exec场景:记录日志