五周第四次课(3月8日)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五周第四次课(3月8日)相关的知识,希望对你有一定的参考价值。

8.6 管道符和作业控制
8.7/8.8 shell变量
8.9 环境变量配置文件
 



8.6 管道符和作业控制


技术分享图片

管道符| 

将前一个指令的输出作为后一个指令的输入。

#cat 1.txt |wc -l 

[[email protected] ~]# cat 1.txt |wc -l 统计行数

2

[[email protected] ~]# ls 

1.txt  1.xtx  2.txt  3.txt  4.txt  a_(2).txt  AA.txt  anaconda-ks.cfg  anaconda-ks.cfg.1  a.txt  A.txt  bb.txt  err  temp.1

[[email protected] ~]# ls |wc -l 统计文件数量

14


#cat 1.txt |grep 'aaa'在1.txt中过滤'aaa',并显示出相关'aaa'的信息。



ctrl z暂停一个任务

假如,在使用#vim 1.txt写入信息时,想退出当前vim窗口去做其他操作又不想影响数据录入,又不想wq退出。这时候可以使用ctrl z去把任务暂停。

[[email protected] ~]# vim 1.txt 


[1]+  已停止               vim 1.txt

[[email protected] ~]# cat 1.txt 

1.txt

2.txt


jobs查看后台的任务

# jobs

[1]-  已停止               vim 1.txt

[2]+  已停止               vim a.txt


fg[id]把任务调到前台

#fg 可以把被暂停的任务调出来,如果多个被暂停,需要加入ID号即可调出。例如暂停了2个任务,把第二个任务调出来,如下操作:

#fg2

# fg 2

vim a.txt


[2]+  已停止               vim a.txt


bg[id]把任务调到后台

退出fg2先

#fg2 进入第二个vim,q或者wq退出。

[[email protected] ~]# jobs 

[1]+  已停止               vim 1.txt

用vmstat 1来测试,#vmstat1命令:不停自动显示系统状态

#vmstat1 

技术分享图片

ctrl z停止,使用#bg调到前台

#jobs

技术分享图片

期间可以敲命令 可以正常使用,只是影响显示。

现在要把vmsta1调到前台,

首先把fg1退出

#fg 进去把之前的vim暂停任务退出,q!

#jobsvmstat1

#fg把vmstat 1调到前台

技术分享图片

#jobs运行中

ctrl c退出

#jobs无任务。


示例2

#sleep 1000暂停1000秒

^Z

[1]+  已停止               sleep 1000


#jobs 已停止状态

# jobs

[1]+  已停止               sleep 1000


#sleep 200

#jobs两个停止状态

#fgfg不加ID号,会自动识别成:fg 最后一次暂停

ctrl z 暂停

# bg 1放到后台。

[1]- sleep 1000 &


#jobs

# jobs

[1]-  运行中               sleep 1000 &

[2]+  已停止               sleep 200


退出两个sleep命令

#fg1 + ctrl c 

#fg2 + ctrl c


命令后面加&直接丢到后台

#sleep 100 &



8.7shell变量(上)


变量

技术分享图片

例如环境变量PATH,它是shell预设的一个变量。

shell预设的变量都是大写的。

变量就是使用一个简单的字符串来替代某些具有特殊意义的设定以及数据。

就拿PATH来讲,这个PATH就代替了所有常用命令的绝对路径的设定。

有了PATH这个变量,我们运行某个命令时,就不再需要输入全局路径,直接输入命令名即可。


env命令

技术分享图片

HOSTNAME主机名

SHELL表示当前用户的shell类型

HISTSIZE你是记录数

MAIL当前用户的邮件存放目录

PATH该变量决定了shell将到哪些母驴寻找命令程序。

LANG语言

HOME 家目录

LOGNAME当前用户登录名

PWD当前目录


set命令多了很多变量,并且包括用户自定义的变量

技术分享图片

自定义变量a=1

[[email protected] ~]# a=111 

[[email protected] ~]# echo $a

111


在set里可以过滤出刚刚设了值为a=111

# set |grep 111

a=111

或者 #set |less

在set下面/搜索a=111

/a=111

#env下面没有a=111值,因为不会被保存到env里


变量名规则:字母、数字下划线,首位不能为数字

a2=111

_a2=111这两个都可以

2a=111这个不行


变量值有特殊符号时需要用单引号括起来(“”双引号也可以,不过建议用‘’因为可以脱意)

[[email protected] ~]# a='a b c'

[[email protected] ~]# echo $a

a b c


下例演示值为a=a$bc 没脱意与脱意的效果

[[email protected] ~]#  a="a$bc"

[[email protected] ~]# echo $a

a使用"",不能脱意

[[email protected] ~]# a='a$bc'

[[email protected] ~]# echo $a

a$bc使用'',脱意



变量的累加

演示$代表累加,连着显示。

[[email protected] ~]# a=1

[[email protected] ~]# b=2

[[email protected] ~]# echo $a$b

12

[[email protected] ~]# c="a$bc"

[[email protected] ~]# echo $c

a

[[email protected] ~]# c="a$b"c 

[[email protected] ~]# echo $c

a2c

[[email protected] ~]# c=a"$b"c c="a$b"c与 c=a"$b"c 是两个一样的效果。命令c="a$b"c的第一个"会被移动a后面,演变成了c=a"$b"c,所以两者效果一样。

[[email protected] ~]# echo $c

a2c


全局变量export b=2



unset变量



8.8 shell变量(下)


全局变量export b=2

先打开2个终端(0号和1号)

技术分享图片查看当前窗口位于哪个tty下

先w查看登录信息

[[email protected] ~]# w

 17:40:31 up  7:46,  3 users,  load average: 0.02, 0.02, 0.05

USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT

root     tty1                      09:56    7:43m  0.08s  0.08s -bash

root     pts/0    192.168.189.1    09:57    7.00s  0.44s  0.00s w

root     pts/2    192.168.189.1    17:38    2:11   0.01s  0.01s -bash

利用$SSH_TTY 查看当前tty

0号查看

echo $SSH_TTY 

/dev/pts/0


1号查看

# echo $SSH_TTY 

/dev/pts/2


在0号建立变量aming=linux

[[email protected] ~]# aming=linux

[[email protected] ~]# echo $aming 

linux


在1号使用变量aming=linux

[[email protected] ~]# echo $aming


在0号使用#bash进入一个子shell,然后#pstree查看当前bash位置

#bash(shell其实就等于一个进程,如果#bash,等于进入一个新的bash)

#pstree

技术分享图片详解此段ssh-bash-bash-pstree

首先通过ssh获得了一个bash(第一个bash,主shell),然后#bash(第二个bash,子shell),再在第二个bash执行了pstree命令


0号和1号都是无变量值

[[email protected] ~]# echo $aming 无变量值


#exit退出刚刚建立的#bash(子shell),返回第一个bash,主shell。#echo有变量值

[[email protected] ~]# exit

exit

[[email protected] ~]# echo $aming 

linux

这种变量叫非全局、本地local变量,仅仅在当前终端(sshd)生效。


全局变量 export aming=linux 

在使用全局变量后,新加shell也是可以使用该变量,仅仅在当前终端(sshd)生效。。

[[email protected] ~]# export aming=linux

[[email protected] ~]# echo $aming 

linux

[[email protected] ~]# bash进入一个新shell

[[email protected] ~]# echo $aming

linux成功


演示2

[[email protected] ~]# export b=2

[[email protected] ~]# echo $b

2

[[email protected] ~]# exit

exit

[[email protected] ~]# echo $aming 

linux

[[email protected] ~]# echo $b

为什么这里是空,原因很简单。是因为shell生成原理是基础shell向下生成子shell,孙shell,以此类推。而exit是退出shell,属于向上,往上动作,所以此时全局变量是不会生效的。所以为什么exit退出shell时,echo $aming生效 而echo $b不生效,是因为echo $aming处于的shell比echo $b还要往上,而shell是往下生成,所以echo $b不生效。


unset变量

# unset $aming

# unset $b取消 $b的变量



8.9 环境变量配置文件


技术分享图片

两大围度


系统层次 

/etc/profile用户环境变量,交互,登录才执行

这个文件预设了几个重要的变量。例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等。


高亮用户层次


/etc/bashrc用户不用登录,执行shell就生效

这个文件主要预设umask以及PS1。这个PS1就是我们在输入命令时前面的那串字符[[email protected] ~]# 。

[[email protected] ~]# echo $PS1查看PS1的变量

[\[email protected]\h \W]\$ 对应是\u=user @h=hostnae \W=目录的最后一层。 

可以更改PS1的值,把W改成w,效果是显示绝对路径

#PS1='[\[email protected]\h \w]\$ '注意,有特殊符号需要加''来脱意

#echo PS1 

[\[email protected]\h \w]\$ 

可以更改改颜色参数 

PS1='\[\033[01;32m\]\[email protected]\h\[033[00m\]:\[033[01;36\]\w\[\033[00m\]\$ '


~/.bashrc

该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。例如,可以将用户自定义的别名或者自定义变量写到这个文件中。  


~/.bash_profile

.跟#source是一样的效果,例如

#. .bash_profile = #source .bash_profile

定义用户的个人化路径与环境变量的文件名称。每个用户都可以使用该文件输入属于自己的shell信息,当用户登录时,该文件仅仅执行一次。


~/.bash_history

用于记录命令历史。


~/.bash_logout

退出shell时,用户退出时将要做的操作。。




以上是关于五周第四次课(3月8日)的主要内容,如果未能解决你的问题,请参考以下文章

Linux20180423五周第四次课(4月23日)

Linux学习笔记第五周第四次课(3月8日)

五周第四次课(1月11日)?

五周第四次课(1月11日) 8.6 管道符和作业控制 8.7/shell变量 8.8 shell变量 8.9 环境变量配置文件

Linux学习笔记第六周第四次课(3月15日)

五周第四次课