1 shell介绍
2 命令历史
3 命令补全和别名
4 通配符
5 输入输出重定向
6 管道符和作业控制
7/8 shell变量
9 环境变量配置文件
1、shell介绍
shell脚本仅仅是shell的一个表现
centos7 用的是bash
shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。
什么是shell
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/linux 操作系统之核心。
yum list |grep zsh 查看有没有安装zsh
yum list |grep ksh 查看有没有安装ksh
2、命令历史
ls /root/.bash_history /root/.bash_history历史命令存放位置,退出终端时才会保存到文件中去
history 查看历史命令,最大存放1000条
echo $HISTSIZE 查看能存放多少条命令
history -c 清空内存中的历史命令,不能删除存命令的配置文件
vim /etc/profile 编辑/etc/profile,定义记录多少条历史命令
echo $HISTSIZE 查看记录多少条历史命令
source /etc/profile
要命令历史数值生效需要重新进一下终端或者source一下
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S" 记录命令什么时候运行的时间
%Y 年份 %m月份 %d日期 %H:%M:%S小时 分钟 秒
echo $HISTTIMEFORMAT 系统默认环境变量不存在,需要自己定义
会记录日志和时间
vim /etc/profile 编辑配置文件,让变量永久生效
source !$ 执行上一条source开头的命令
chattr +a ~/.bash_history 定义特殊权限,只会追加,不会删除
exit 正常退出,没有正常退出命令保存不全
!! 上一条命令
!n n指的是数字,运行指定等于n的命令
!echo 运行以echo开头的命令
3、命令补全和别名
tab键,命令开头一样多余两个的时候需要按两下,一个自动补全
yum install -y bash-completion yum安装bash-completion
reboot 重启系统
rpm -qa bash-completion 查看bash-completion包有没有安装
systemctl restart network.service 重启网络服务
alias restartnet='systemctl restart network.service' 将systemctl restart network.service定义别名成restartnet
alias 查看系统里的所有别名
vi .bashrc 编辑定义别名文件
cd /etc/profile.d/ 定义别名的目录
colorls.sh ls变量
colorgrep.csh grep变量
.bashrc /etc/profile.d/
unalias restartnet 取消自定义别名restartnet
4、通配符
ls *.txt *表示通配符
ls ?.txt ?表示任意的一个字符
ls [0-3].txt [0-3]表示0到3中的任意一个字符
ls [123].txt [123]表示1、2、3所有的三个字符
ls {1,2}.txt 相当于1或2
5、输入输出重定向
> 把前面命令的输出输入到后面的文件里面去(正确输出信息)
cat 1.txt > 2.txt 把1.txt的内容重定向到2.txt里面去
>> 追加重定向
2> 把命令产生的错误信息输入到文件里面去(错误输出信息,错误重定向)
2>> 错误输出信息,错误追加重定向
>+2>等于&> 结合了正确和错误重定向
< 输入重定向
lsaaa 2> a.txt 把lsaaa产生的错误信息输入到a.txt
lsaaa 2>> a.txt 把lsaaa产生的错误信息追加重定向到到a.txt
ls [12].txt aaa.txt&> a.txt 错误和正确信息同时重定向到a.txt
ls [12].txt aaa.txt >3.txt 2>a.txt 既有正确输出也有错误输出
wc -l < 3.txt 把1.txt输入给wc -l查看文件长度,左边必须是命令
1、管道符和作业控制
|管道符,表示把前面一个命令输出的结果传给后面的命令
ls | wc -l 查看当前目录文件交给wc -l 查看有多少个文件
find ./ -type f |wc -l 列出当前目录下所有文件交给wc -l查看有多少个文件
ctrl z 暂停一个任务
jobs 查看后台的任务
fg 把任务调到前台
bg 把任务调到后台
vmstat 1 持续输出系统信息
sleep 1000 暂停1000秒
sleep 100 & 直接把命令丢到后台执行(再开一个终端看不到后台任务,可以用ps aux |grep sleep查看进程)
2、shell变量(上)
PATH 系统内置变量
HOME,PWD,LOGNAME 等都是变量
env 获取变量,等于号左边是变量名,变量值:数字、字符串等
PWD 当前目录
LANG 语言
set 获取系统、用户自定义变量
a=111 自定义变量为111
echo $a 查看变量a
set |grep 111 显示环境变量筛选出带有111的内容
a='a b c' 定义a变量为a b c,有特殊符号时用单引号,单引号褪意
变量名规则
变量名可以是字母、数字和下划线,首位不能为数字
变量值有特殊符号时需要用单引号(脱义)括起来
变量的累加
全局变量
当打开多个终端时,使用命令echo $SSH_TTY,可以查看当前所在终端
在终端1定义一个变量,在终端2中是查看不到的
进入子shell
然后用pstree查看
父shell中设定的变量在子shell中不生效,需要设置全局变量export
在子shell中设置全局变量export,在其父shell中也不生效,所以全局变量只能往下生效。
取消变量
3、环境变量配置文件
环境变量配置文件可分为:系统层次配置文件和用户层次配置文件
系统层次配置文件(/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用户显示#