第八章shell基础

 
8.1 shell介绍
8.2 命令历史
8.3 命令补全和别名
8.4 通配符
8.5 输入输出重定向
8.6 管道符和做业控制
8.7/8.8 shell变量
8.9 环境变量配置文件
8.10扩展: bashrc和bash_profile的区别
8.11课堂笔记
 
 
8.1 shell介绍
 

 

8.2 命令历史
命令存放路径:/用户家目录下/.bash_hsitory
#只有用户退出总终端的时候才会将命令缓存保存到文件里
#默认最大存储1000条命令
系统内置环境变量HISTSIZE
echo $HISTSIZE                       #查看HISTSIZE大小
[root@localhost ~]#  echo $HISTSIZE
1000
 
修改HISTSIZE的配置文件:/etc/profile
#修改事后不会马上生效,要重登终端或者source   /etc/profile
 
history                         #查看使用过的命令
 
histtory  -c             #清空使用过命令的缓存(删除不了.bash_hsitory内的命令
 
将查看命令历史设置使用时间
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"      
 #Y/m/d    年/月/日;   H:M:S   时:分:秒 ( 仅在当前终端生效
#要想永久在因此终端都生效,将该命令写进 /etc/profile文件里面
 
#将命令历史永久保存,/用户家目录下/.bash_history添加a权限
chattr +a  /用户家目录下/.bash_history
 
注意:若是终端没有正常退出,重登的时候会发现历史命令保存的不全
 
!!              #执行上一条命令
[root@localhost ~]#  ls
2.txt  3.txt  anaconda-ks.cfg  asda.txt
[root@localhost ~]#  !!
ls
2.txt  3.txt  anaconda-ks.cfg  asda.txt
 
!n              #n是命令历史的排序号
1026  2018/08/12 19:37:25vim /etc/profile
1027  2018/08/12 19:38:43ls
1028  2018/08/12 19:39:26history
[root@localhost ~]#  !1027
ls
2.txt  3.txt  anaconda-ks.cfg  asda.txt
 
!word     #或者最近使用一次命令的开头
 
 
8.3 命令补全和别名
#参数补全,须要安装 bash-completion
Tab键按一次,补全命令和参数
Tab键按两次,显示支持补全的参数
 
 
配置别名的文件路径存放: /用户家目录下/.bashrc
其它自定义别名存放: /etc/profile.d 
 
 
8.4 通配符
*                 #表示通配全部字符
?               #表示通配一个字符
[root@localhost ~]#  ls *.txt
1.txt  2.txt  3.txt  aa.txt  asda.txt  a.txt  bbb.txt  b.txt  c.txt
[root@localhost ~]#  ls ?.txt
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt
 
[ ]               #可写数字,字母,范围;括号内字符都是或者的关系
[root@localhost ~]#  ls [123].txt
1.txt  2.txt  3.txt
[root@localhost ~]#  ls [0-2].txt
1.txt  2.txt
[root@localhost ~]#  ls [a-z].txt
a.txt  b.txt  c.txt
[root@localhost ~]#  ls [1-3a-c].txt
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt
[root@localhost ~]#  ls [1-3a-cA-Z].txt
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt
 
{ }               #可写数字,字母;括号内字符都是或者的关系,可是中间须要用逗号“,”隔开
[root@localhost ~]#  ls {1,2}.txt
1.txt  2.txt
[root@localhost ~]#  ls {1-2}.txt
ls: 没法访问{1-2}.txt: 没有那个文件或目录
[root@localhost ~]# ls {1,2,3,a,}.txt
1.txt  2.txt  3.txt  a.txt
 
 
8.5 输入输出重定向
一、输出“>”
cat 1.txt  > 2.txt           #  重定向,将1.txt内容删掉再从新写入2.txt的内容
cat 1.txt  >> 2.txt        # 追加,将2.txt内容追加到1.txt的结尾处的下一行
lsaaa   2> 2.txt            # 错误重定向,ls命令产生的错误信息重定向到2.txt
lsaaa  2>> 2.txt         # 错误追加剧定向,ls命令产生的错误信息追加到2.txt
 
>+2> ==  &>           #即 &>是重定向和错误重定向的结合
例:
一、ls  [12].txt  abc.txt   &> 3.txt
[root@localhost ~]#  ls  [12].txt  abc.txt   &> 3.txt
[root@localhost ~]#  cat 3.txt
ls: 没法访问abc.txt: 没有那个文件或目录
1.txt
2.txt
 
二、ls  [12].txt  abc.txt    >3.txt   2>a.txt
[root@localhost ~]#  ls  [12].txt  abc.txt    >3.txt   2>a.txt
[root@localhost ~]#  cat 3.txt
1.txt
2.txt
[root@localhost ~]# ca t a.txt
ls: 没法访问abc.txt: 没有那个文件或目录
 
二、输入“<”
wc -l < 1.txt             #输入重定向,将1.txt的内容输入重定向到wc -l
[root@localhost ~]#  wc -l < 3.txt
2
[root@localhost ~]#  2.txt < 3.txt
-bash: 2.txt: 未找到命令
ps:左边只能是命令
 
command >1.txt 2>&1       
# &1 表示标准正确输出目标。由于前面已经定义了  >1.txt 标准正确输出到了 1.txt,因此 &1就是 1.txt
 
 
8.6 管道符和做业控制
cat 1.txt |wc -l             #|管道符,把前面命令的结果交给后面命令执行
 
cat 1.txt  |grep 'aaa'
 
# Ctrl z 暂停一个任务
jobs           #查看后台任务
 
fg [ id]                   #把任务调到前台 , 不加id默认最后一次暂停的命令
bg[ id]                   #把任务调到后台运行,不加id默认最后一次暂停的命令
 
命令后面加&直接丢到后台运行
例: sleep  100  &
[root@localhost ~]#  sleep 100 &
[4] 3384
[root@localhost ~]#  ls
1.txt  3.txt   anaconda-ks.cfg  a.txt    b.txt
2.txt  aa.txt  asda.txt         bbb.txt  c.txt
[root@localhost ~]#  jobs
[2]+  已中止               sleep 100
[3]-  已中止               sleep 1000
[4]   运行中               sleep 100 &
 
vmstat 1                #显示实时的系统状态
sleep 1000            #系统睡眠1000s
 
 
8.7/8.8 shell变量
 
env命令          #查看系统内置变量
set命令          #查看系统内置变量 及用户自定义的变量
 
自定义变量a=1111
set    |grep  a=1111           #经过管道符,set过滤找到a=1111的变量
[root@localhost ~]# s et |grep a=1111
a=1111
 
一、变量名规则:首位能够字母、数字下划线,首位不能为数字
二、变量值有特殊符号时须要用 单引号括起来
 
三、变量的累加
[root@localhost ~]#  a=1
[root@localhost ~]#  b=2
[root@localhost ~]#  echo $a
1
[root@localhost ~]#  echo $ab
 
[root@localhost ~]#  echo $a$b
12
[root@localhost ~]#  echo a$bc
a
[root@localhost ~]#  echo 'a$b'c
a$bc
[root@localhost ~]#  echo "a$b"c
a2c
[root@localhost ~]#  echo a"$b"c
a2c
 
ps:设置的变量仅在当前shell窗口bash下有效(本地变量,非全局变量)
bash       #建立子shell窗口
 
pstree     #查看当前shell所在窗口
 
四、全局变量export (针对当前终端)
#全局变量只是向下全局子shell,下一层的子shell定义的全局变量不会再上层显示
export   定义变量名=变量值            #定义全局变量,全部子shell都能显示
 
 
五、unset   变量名                   #取消掉定义的变量
 
 
8.9 环境变量配置文件
系统层次:
/etc/profile 用户环境变量,交互,登陆才执行         #用户登陆时会加载到
/etc/bashrc用户不用登陆,执行shell就生效            #系统执行shell时用到
 
用户层次:
/用户家目录/.bashrc                       #写用户自定义别名
/用户家目录/.bash_profile             #写用户自定义变量
/用户家目录/.bash_history            #用户存放历史
/用户家目录/.bash_logout            #定义用户退出时须要作的操做
 
source  .bash_profile ==  .  .bash_profile  
[root@localhost ~]#  source  .bash_profile
[root@localhost ~]#  .  .bash_profile  
 
/etc/bashrc
PS1="[\u@\h \W]\\$ "       #就是[root@localhost ~]#这种
改W为w,能够显示为绝对路径
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]#PS1='[\u@\h \w]\$'
[root@localhost ~]#cd /etc/yum.repos.d
[root@localhost /etc/yum.repos.d]#
 
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'                         #改字体颜色

 

 

8.10扩展:bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 
 
 
8.11课堂笔记
1、
#出现403 forbidden错误,缘由是没有关闭防火墙
Linux防火墙有两种
一、firewalld
systemctl stop  firewalld          # 关闭防火墙( 临时
systemctl disable firewalld   #开机不启动防火墙( 永久
 
二、sexLinux安全机制
有三种状态
 
enforceing     #sexLinux机制强制地、必须执行
permissive     #sexLinux机制只会打印警告
disabled        #表示可用,没有sexlinux策略
 
#sexLinux存放位置: /etc/sysconfig/sexlinux(软链接文件)
getenforce                     #查看sexLinux的状态
 
setenforce 0                   #关闭sexLinux防火墙( 临时
修改 etc/sysconfig/sexlinux,将sexLinux=Enforcing改成sexLinux= disabled,而后重启终端就会生效 ( 永久
 
 
2、搭建web服务
#能够经过ip地址在网上查看放在/var/www/html/下的目录和文件(前提是要关闭防火墙)
#网站内容默认放在/var/www/html/目录下
#修改网站内容目录的文件在/etc/httpd/httpd.conf ,修改DocumentRoot“ ”双引号里面的目录便可
搭建步:
一、安装httpd
yum install -y  httpd
二、将文件软连接或者放到/var/www/html/目录下便可
 
 
3、通配符与特殊符号
"^"      # 以什么开头  例:   ^[a-z]  ,表示以小写字母a-z开头的
"#"      #  注释
"\"      #转义字符,将特殊字符或通配符还原成通常字符
";"       #命令衔接符,连续执行两条命令
"$"      # 取用变量符号
"&"    #工做控制,将指令变成后台 运行工做
" '' "    #单引号,没法引用变量
" "" "   #双引号,能够引用变量
" `` "    #反引号,表示指令引用,功能同 $(command)
例 : echo=`pwd`
"2>&1"     #表示正确和错误的都输出
例: ls  1.txt 2.txt 2>&1 >>3.txt       #ls 1.txt 和2.txt,将正确和错误的信息都追加到3.txt
 
cat  >  qq  << EOF
#cat的同时往qq里面覆盖内容写入
>
>
>EOF         #最后输入EOF就会结束
 
cat  >>  qq  << EOF
#cat的同时往qq里面追加内容写入
 
4、巧用垃圾桶
Linux 下有一个特殊的设备  /dev/null ,全部被写入该设备的东西都会消失,因此若是有部分信息不想输出至文件,也不想输出至屏幕,那就输出至 /dev/null 吧
 
5、做业控制
ps aux grep| top     #查看系统进程ID
 
杀死进程两种方式
一、 kill    [signal]  [进程ID]
 
经常使用signal
  • -1: 从新读取参数的配置文件(相似 reload)
  • -9: 当即强制删除一个任务
  • -15: 已正常方式结束一个任务
 
二、 pkill  进程名   
 
 
6、shell基础
一、变量的命名
由字母、数字、下划线组成,且只能以非数字开头
 
二、变量的设定
语法:变量名=变量值
注意-1:若是变量值中存在空格,须要用单引号或双引号将变量值括起来
注意-2:若是变量值中有引用其余变量,须要 用双引号将变量值括起来
 
三、export   
# 将变量转换为环境变量
语法: export  变量
[root@choco-01 ~]#  echo $full 
 Choco Lee @ China
 [root@choco-01 ~]#  bash
 [root@choco-01 ~]#  echo $full          # 进入子 shell 后, 变量失效 
 [root@choco-01 ~]#  exit
 exit 
 [root@choco-01 ~]#  export full            # 声明该变量为环境变量
 [root@choco-01 ~]#  bash
 [root@choco-01 ~]#  echo $full            # 进入子 shell 后, 变量仍让有效  
Choco Lee @ China
 
四、declare
declare [选项]  <var_name>
选项:
  •   -a:定义变量为数组
  •   -i:定义变量为纯数字
  •  -x:定义变量为环境变量
  •   -r:定义变量为 readonly
 
五、经常使用环境变量
  •  HOME: 当前用户的家目录
  •  HOSTNAME: 该主机的主机名
  •  USER: 当前用户的用户名
  •  SHELL: 当前使用的 shell 类型
  •  HISTSIZE: 可存储的历史命令条数
  •  MAIL: 当前用户的邮箱
  •  PATH: 可执行命令的所在目录
  •  LANG: 当前语系
  •  PS1: 命令提示符的格式, 可玩性较高, 但工做中不经常使用, 可自行 man bash 查看 PS1 的设置方法
  •  PS2: 输入命令时强制换行后的提示符
  • OSTYPE: 当前操做系统类型
  •  MACHTYPE: 安装的机器类型
  •  HOSTTYPE: 主机的位数, x86 仍是 x86_64
 
六、环境变量配置文件
6.1启动加载文件顺序: (须要掌握)
 
6.2设定环境变量
  • PATH:根据 UID 决定PATH 变量是否要包含 sbin 目录
  • USER:根据 id 命令的结果,显示用户名
  • LOGNAME:等于 USER
  • MAIL:配置好用户的邮箱
  • HOSTNAME:根据 hostname 指令,决定该变量值
  • HISTSIZE:直接设定历史命令记录的条数为 1000
相关文章
相关标签/搜索