3.8 8.6-8.9听课笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.8 8.6-8.9听课笔记相关的知识,希望对你有一定的参考价值。
管道符和作业控制
[[email protected] ~]# cat a.txt
-bash: lsaaa: 未找到命令
-bash: lsaaa: 未找到命令
[[email protected] ~]# cat a.txt|wc -l
2
[[email protected] ~]# cat a.txt|grep 'aaa'
-bash: lsaaa: 未找到命令
-bash: lsaaa: 未找到命令
*将前面的结果交给后面的命令执行
Ctrl+z 临时暂停正在执行的进程(调向后台)
[[email protected] ~]# vim 2.txt
[1]+ 已停止 vim 2.txt
[[email protected] ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 28G 1.4G 27G 5% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 97M 100M 50% /boot
tmpfs 98M 0 98M 0% /run/user/0
[[email protected] ~]# fg 将后台进程调回前台
vim 2.txt
[[email protected] ~]# vim aa.txt
[2]+ 已停止 vim aa.txt
[[email protected] ~]# fg
vim aa.txt
[2]+ 已停止 vim aa.txt
[[email protected] ~]# jobs 将已经停止的后台任务列出
[1]- 已停止 vim 2.txt
[2]+ 已停止 vim aa.txt
[[email protected] ~]# fg 2 多进程在后台时调回一个进程(fg+id号)
vim aa.txt
[[email protected] ~]jobs
[1]- 已停止 vim 2.txt
[2]+ 已停止 vim aa.txt
[3] 运行中 vmstat 1 &
[[email protected] ~]fg 3
[[email protected] ~]vmstat 1 该进程会不停的在屏幕上输出信息,按ctrl+z进程停止,敲bg进程会在后台运行起来
[[email protected] ~]# jobs
[3]- 已停止 vmstat 1
[4]+ 已停止 vim aa
[[email protected] ~]# bg 4
[4]+ vim aa &
[[email protected] ~]# jobs
[3]- 已停止 vmstat 1
[4]+ 已停止 vim aa
*有的命令在后台只能是停止状态(vim),有些命令按ctrl+z会被放在后台并停止,但使用bg+id可以使这种命令在后台运行起来(vmstat 1)
[[email protected] ~]# sleep 1000 在这1000秒内什么也不做
Ctrl+z停止进程,暂停这种状态
[[email protected] ~]#
[[email protected] ~]# sleep 200
^Z
[6]+ 已停止 sleep 200
[[email protected] ~]# jobs
[3] 已停止 vmstat 1
[4] 已停止 vim aa
[5]- 已停止 sleep 1000
[6]+ 已停止 sleep 200
[[email protected] ~]# fg
sleep 200
fg后不加任何内容则将最新被停止的进程拉到前台执行
[[email protected] ~]# bg 6
[6]+ sleep 200 &
[[email protected] ~]# jobs
[3] 已停止 vmstat 1
[4]- 已停止 vim aa
[5]+ 已停止 sleep 1000
[6] 运行中 sleep 200 &
被执行了bg的停止进程会在后台重新运行起来
[[email protected] ~]# sleep 100 &
[7] 1112
[6] 完成 sleep 200
[[email protected] ~]# jobs
[3] 已停止 vmstat 1
[4]- 已停止 vim aa
[5]+ 已停止 sleep 1000
[7] 运行中 sleep 100 &
[[email protected] ~]#
将一条命令直接丢到后台执行
*Jobs命令只能发现目前终端下的被放在后台的进程
[[email protected] ~]# ps aux |grep sleep
root 1109 0.0 0.0 107904 612 pts/0 T 21:32 0:00 sleep 1000
root 1115 0.0 0.0 112676 984 pts/0 S+ 21:43 0:00 grep --color=auto sleep
[7] 完成 sleep 100
Shell变量
查看变量
[[email protected] ~]# env 查看系统常用的环境变量
XDG_SESSION_ID=4
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=2000
…
[[email protected] ~]# set 查看系统内置环境变量和用户自定义变量
[[email protected] ~]# a=111 自定义变量
[[email protected] ~]# set |grep '111' 以111为条件在set的结果下查找
PPID=1118
a=111
[[email protected] ~]# env |grep 'a=111' env无法搜索自定义变量
[[email protected] ~]#
[[email protected] ~]# env |grep HOSTNAME
HOSTNAME=localhost.localdomain
系统变量通常不能修改(可以通过配置文件更改),自定义变量是用户自己定义的变量;
变量名可以是字母、数字、下划线,变量名不能以数字开头;
变量值有特殊符号时需要用单引号括起来
[[email protected] ~]# a1=2
[[email protected] ~]# echo $a1
2
[[email protected] ~]# _a1=3
[[email protected] ~]# echo $_a1
3
[[email protected] ~]# 1a1=4
-bash: 1a1=4: 未找到命令
[[email protected] ~]# g=a b c
-bash: b: 未找到命令
[[email protected] ~]# g='a b c'
[[email protected] ~]# h="a$bc"
[[email protected] ~]# echo $h
a
[[email protected] ~]# h='a$bc' ‘’中无论任何特殊符号都会原样输出
[[email protected] ~]# echo $h
a$bc
单引号:
可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看见的是什么就会输出什么。
双引号:
把双引号内的内容输出出来;如果内容中有命令,变量等,会先把变量,命令解析出结果,然后在输出最终内容来。
双引号内命令或变量的写法为`命令或变量`或$(命令或变量)。
无引号:
把内容输出出来,可能不会讲含有空格的字符串视为一个整体输出,如果内容中有命令,变量等,会先把变量,命令解析结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用,不过最好用双引号替代之
[[email protected] ~]# c="a$b"c “”中的变量、命令会先被执行再输出
[[email protected] ~]# echo $c
a3c
[[email protected] ~]#
全局变量
[[email protected] ~]# w 查看当前系统用户登录情况
22:36:39 up 2:07, 3 users, load average: 0.00, 0.01, 0.02
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root tty1 20:30 2:06m 0.02s 0.02s -bash
root pts/0 192.168.91.1 20:30 40:55 1.45s 0.14s -bash
root pts/1 192.168.91.1 21:45 7.00s 0.09s 0.02s w
[[email protected] ~]# echo $SSH_TTY 通过环境变量查看自己在哪个tty下
/dev/pts/1
[[email protected] ~]# echo $SSH_TTY
/dev/pts/1
[[email protected] ~]# hyc=linux
[[email protected] ~]# echo $hyc
linux
[[email protected] ~]# echo $SSH_TTY
/dev/pts/0
[[email protected] ~]# echo $hyc
在一个tty下定义的变量在另一个tty下不生效
[[email protected] ~]# pstree
*重新打开一个bash(子shell)执行pstree命令
[[email protected] ~]# echo $hyc 打开的两个子shell并没有继承自定义变量hyc
[[email protected] ~]# exit
exit
[[email protected] ~]# echo $hyc
[[email protected] ~]# exit
exit
[[email protected] ~]# echo $hyc 退出到最初的shell
linux
之前自定义的变量只在本地生效
定义全局变量
[[email protected] ~]# export aming=linux
[[email protected] ~]# echo $aming
linux
[[email protected] ~]# bash
[[email protected] ~]# echo $aming
Linux
全局变量向下生效,该shell下配置的全局变量只在该shell的子shell及以下的shell中生效;
不同sshd的全局变量互不影响;
[[email protected] ~]# unset aming 取消自定义的变量
[[email protected] ~]# export yy=aa
[[email protected] ~]# echo $yy
aa
[[email protected] ~]# bash
[[email protected] ~]# echo $yy
aa
[[email protected] ~]# unset yy
[[email protected] ~]# echo $yy
子shell可以删除从上级shell获得的全局变量
环境变量配置文件
系统层次配置文件
/etc/profile /etc/bashrc
用户层次
~/.bashrc ~/.bash_history ~/.bash_logout ~/.bash_profile
Profile是用户登录才生效;
bashrc在系统执行shell时就生效,此时用户可以不用登录
如果需要变量全局生效则在/etc下编辑对应文件,如果只针对某个用户生效则在用户家目录下编辑对应文件
~/.bash_logout 定义用户每次登出时执行的操作
变量PS1
[[email protected] ~]受PS1影响
[[email protected] ~/d6z/hyc]#echo $PS1
[\[email protected]\h \w]\$
[[email protected] ~/d6z/hyc]#PS1='[\[email protected]\h \W]\$'
[[email protected] hyc]#
W小写代表绝对路径,大写代表相对路径
[[email protected] hyc]#PS1='<\[email protected]\h \W>\$' []可代替为其他任意符号或消除
<[email protected] hyc>#
设置使括号内容带颜色
变量PS2
例如进入mysql会进入一个小终端,此时一行开头显示的内容会用到变量PS2
[email protected] ~]#echo $PS2
>
[email protected] ~]#for i in `seq 1 100` 进入PS2
>
> done
-bash: 未预期的符号 `done' 附近有语法错误
[email protected] ~]#PS2="#"
[email protected] ~]#for i in `seq 1 100`
#
以上是关于3.8 8.6-8.9听课笔记的主要内容,如果未能解决你的问题,请参考以下文章