五周第四次课(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时,用户退出时将要做的操作。。

原文地址:http://blog.51cto.com/13578154/2084345

时间: 2024-10-09 20:57:33

五周第四次课(3月8日)的相关文章

Linux学习笔记第三周第四次课(2月8日)

4.1 df命令 df,report file system disk space usage汇报文件系统磁盘空间使用情况: df命令格式:df [选项] df -a:all 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统. df -h:human readable以容易理解的格式输出文件系统大小,例如124KB.345MB.46GB. df -i:inodes 显示i节点使用情况. df -m:以MB为单位显示文件系统使用情况: df -t:type 显示各指定类型的文件系统

Linux20180416三周第四次课(4月9日)

4.1 df命令4.2 du命令4.3/4.4 磁盘分区扩展学习 parted分区gpt格式 http://www.apelearn.com/bbs/thread-7243-1-1.html df命令 df - report file system disk space usage tmpfs说明文件系统是临时文件系统 dev/shm是内存,通常是物理内存的一半 df -h 比较友好的观看模式 -m 是以MB为单位的 -i 是查看inodes的个数和使用情况.inodes是在格式化的过程中创建的

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

五周第四次课(1月11日)8.6 管道符和作业控制8.7/shell变量8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html 关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command

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

五周第四次课(4月23日) 8.6 管道符和作业控制8.7/8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environ

三周第三次课(12月27日) 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录

三周第三次课(12月27日)3.7 su命令3.8 sudo命令3.9 限制root远程登录 su命令: 用户和工作组管理: su命令用于切换当前用户身份到其他用户身份, 变更时须输入所要变更的用户帐号与密码. 语法: su(选项)(参数) 选项: -c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份: -f或--fast:适用于csh与tsch,使shell不用去读取启动文件: -l或--login:改变身份时,也同时变更工作目录,以及HOME,SHE

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

8.6 管道符和作业控制 管道符|,前面命令的结果给到后面命令处理: fg把任务调到前台:bg丢到后台并运行: #vmstat 1不停的显示系统的状态 sleep 1000暂停1000秒 8.7/8.8 shell变量 PATH环境变量: #env获取到系统变量,系统内置: #set查看系统及用户变量 有特殊符号的要用单引号: 全局变量,其他连接的用户也可以查看到这个变量:其他用户看不到: #w查看当前主机连接的用户信息: pstree命令安装,#yum install psmisc 全局变量设

2018.4.21 五周第四次课(shell特殊符号,cut截取等命令)

shell特殊符号_cut命令 概念:cut命令用来截取某一个字段 格式:cut -d '分割字符' [-cf] n,这里的n是数字,该命令选项有如下几个: - d 后面跟分割字符,分割字符要用单引号括起来 - c 后面接的是第几个字符 - f 后面接的是第几个区块 cut命令用法如下 [[email protected] do]# cat /etc/passwd |head -2root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/no

Linux学习笔记第三周第三次课(2月7日)

3.7 su命令 root用户切换到普通用户命令,su: 完全彻底切换 - ,连环境变量,家目录也切换,命令为#su - aming: 查看当前登陆用户,命令为#whoami: 查看当前目录,命令为#pwd: 查看用户UID,GID,组,家目录,用户shell目录,命令为#id: 切换用户,环境变量和家目录没切换,命令为#su aming: 退出切换的用户,命令为#exit: 当前用户下,不切换到aming用户,使用aming账号,执行touch命令,#su - -c "touch /tmp/a

Linu20180415三周第三次课(4月4日)

3.7 su命令3.8 sudo命令3.9 限制root远程登录 su就是切换用户的命令 su - username 切记要使用 - . 我经常使用的时候是不加上-的,这样的话切换的不彻底,尚在之前用户的家目录下 可以采用 whoami来查看当前用户 -c 选项可以用来不登入用户,但是使用该用户来执行命令 su - -c "touch /tmp/3.33333" hello如下图所示 是否还记得 useradd -M user 是建立用户但是不生成家目录? 这样虽然可以切换到这个用户但