8.6 管道符和做业控制linux
8.7/8.8 shell变量shell
8.9 环境变量配置文件bash
8.6 管道符和做业控制:ssh
~cat 1.txt |wc -l ; cat 1.txt |grep 'aaa'.net
管道符前面的命令输出的结果给后面的命令进程
~ctrl z 暂停一个任务字符串
好比在编辑一个文件,想要查看磁盘空间,能够ctrl z暂停。fg能够把暂停的这个任务在调回来get
可暂停多个任务it
~jobs查看后台的任务ast
jobs能够把ctrl z的任务调出来,调出全部后台的任务
~bg[id]把任务调到后台
能够把一个正在执行的任务,搞到后台。
多个任务可后面加序号
不加序号就是执行最后一个
~fg[id]把任务调到前台
jobs可查看多个已中止的任务,fg 后面加序号,可回到这个序号的任务
不加序号,执行最后一个
~命令后面加&直接丢到后台
~两个终端是没法使用jobs查看的,但能够查看进程
---------------------------------------------------------------------------------------------------------------------------------------
8.7/8.8 shell变量:
~1.PATH,HOME,PWD,LOGNAME
~2.env命令
~3.set命令多了不少变量,而且包括用户自定义的变量
~4.自定义变量a=111
~5.变量名规则:字母、数字下划线,首位不能为数字
能够写a=1 或者a_1=1 又或者_a=1,可是不能写1=1
~6.变量值有特殊符号是须要用单引号括起来
例如空格,a=‘1 2 3’
~7.变量的累加,(重点,实例有介绍单引号、双引号的用法)
可累计查看 echo $a$b
双引号、单引号
~8.全局变量export b=2 (详细看实例)
bash生成一个子shell
exit返回上一个shell
在一个终端下设置的变量设置的,在另外一个下看不到的叫非全局变量或本地变量
全局变量只往下生效,子文件-子子文件这样生效。往上不生效,子文件不会影响父文件
也就是说,创建了1文件和2文件,1能使用2的变量,但2不能使用1的变量
运行子shell,直接运行bash
~9.unset变量
unset后面跟变量的名字,可取消名字
变量的名字一般是大写的英文字母
变量的值不必定是大写的
env可查看变量
set也可查看变量,也包括用户的变量,set通常是shell脚本
4.
咱们能够自定义用户的变量,就是PATH
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# a=111
[root@localhost ~]# echo $a
111
[root@localhost ~]# set |grep '111'
_=111
a=111
固然不是系统内核的。他只在set里找到,也就是用户自定义的变量
5.
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# a_1=1
[root@localhost ~]# echo $a_1
1
[root@localhost ~]# _a=1
[root@localhost ~]# echo $_a
1
[root@localhost ~]# 1=1
-bash: 1=1: 未找到命令
[root@localhost ~]# 2=a
-bash: 2=a: 未找到命令
6.
[root@localhost ~]# a=1 2 3
-bash: 2: 未找到命令
[root@localhost ~]# a='1 2 3'
[root@localhost ~]# echo $a
1 2 3
7.
[root@localhost ~]# a=1
[root@localhost ~]# b=2
[root@localhost ~]# echo $a$b 简单的能够直接写
12
[root@localhost ~]# a='a$bc' a=复杂的 用单引号括起来
[root@localhost ~]# echo $a$b 再次$a$b
a$bc2 a就表明了上边用单引号括起来的字符
[root@localhost ~]# c=a"$b"c 若是想要让c=$b的值,就要用双引号括起来
[root@localhost ~]# echo $c 因此他所表达出来的值,就是$b结果的值,而不是表明$b这个字符
a2c
8.
按 w 能够看到有几个登陆的
[root@localhost ~]# w
15:26:00 up 8 min, 2 users, load average: 0.01, 0.12, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.159.1 15:19 0.00s 0.13s 0.04s w
root pts/1 192.168.159.1 15:25 23.00s 0.05s 0.05s -bash
登陆的 各分配了 分别从这个IP
都是root TTY 登过来
两个终端咱们分别看一下,各自的TTY
[root@localhost ~]# echo $SSH_TTY
/dev/pts/0 分别对应以上的TTY
[root@localhost ~]# echo $SSH_TTY
/dev/pts/1 分别对应以上的TTY
咱们在终端1上设置axin=linux这个变量,在终端2上是没有的
[root@localhost ~]# axin=linux
[root@localhost ~]# echo $axin
linux 终端1上定义,有这个变量
[root@localhost ~]# echo $axin
终端2上就没有
[root@localhost ~]#
shell自己是一个进程。咱们输入 bash,至关于进入另外一个终端。再w一下
[root@localhost ~]# bash
[root@localhost ~]# w 发现仍然在pts/0
15:38:11 up 20 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.159.1 15:19 3.00s 0.17s 0.02s w
root pts/1 192.168.159.1 15:25 3:47 0.05s 0.05s -bash
pstree一下,咱们linux上没有pstree这个命令,安装了psmisc
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───bash───pstree 咱们如今这这个位置,前面的bash是咱们刚打开的新 的bash,在他的基础上运行这个命令叫pstree
│ └─sshd───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
咱们再运行echo $axin,发现也没有生效咱们以前设置的axin=linux
[root@localhost ~]# echo $axin
[root@localhost ~]#
咱们exit,退出刚才那个bash
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $axin 发现有有了刚才设置的axin=linux
linux
像这样的叫为非全局变量,或者本地变量(load),仅仅在这个终端下生效
那怎么变成全局的呢:
[root@localhost ~]# export axin=linux 使用export
[root@localhost ~]# echo $axin
linux
[root@localhost ~]# bash 咱们再bash一个
[root@localhost ~]# echo $axin 就有了
linux
这个就叫作全局变量,也就是说在一开始的那个bash咱们设置了axin=linux,那么他的子bash或者子子bash都生效。
可是在另外一个终端下不会生效,例如,咱们再打开另外一个终端,pstree
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───bash───bash
│ └─sshd───bash───pstree 咱们在这,他跟上面的是并列关系,因此不会生效
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
演练了这么多,咱们得出一个结论。
因此,所谓的全局变量,是向下的。在这个shell的基础上生成子shell,子子shell等等,这样的话是生效的。不会向上的全局的!!
---------------------------------------------------------------------------------------------------------------------------------------
8.9 环境变量配置文件:
系统层次(这两个文件不要动):
~ /etc/profile 用户环境变量,交互,登陆才执行
咱们登陆才会执行。他会调用bashrc
~ /etc/bashrc 用户不用登陆,执行shell就生效
咱们执行shell就能够生效。bashrc是执行shell脚本的时候,用户不用登陆,就能够执行shell脚本,只要执行shell,他就会调用bashrc里面的一些配置
用户层次:
~ ~/.bashrc
~ ~/.bash_profile
~ ~/.bash_history
~ ~/bash_logout
用户退出的时候,须要作的一些操做
例如,让一个用户每次退出的时候都要删除他的命令历史。就能够把这个配置文件放到logout里面
~ ps1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'
ps1表示 [root@axinlinux-01 ~]# 。echo $ps1能够查看这些配置文件,都是能够改的。但日常不会 去动
后面的这些字符串是设置 [root@axinlinux-01 ~]# 的颜色
ps2表示 进入另外一个终端,例如MYSQL的时候所显示的。但仅仅是一个>