管道符和作业控制 shell变量 环境变量配置文件

8.6 管道符和作业控制

• 管道符 | 把前面命令输出的结果给后面命令运行

[root@localhost ~]# cat /etc/passwd |grep root

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# cat /etc/passwd |wc -l

22

• ctrl z 暂停一个任务

[root@localhost ~]# sleep 100

^Z

[1]+ 已停止 sleep 100

• jobs查看后台的任务

[root@localhost ~]# jobs

[1]- 已停止 sleep 100

[2]+ 已停止 sleep 300

bg fg不加任务id默认调用有+标志的任务

• bg[id]把任务调到后台

[root@localhost ~]# bg 2

[2] sleep 300 &

[root@localhost ~]# jobs

[1] 已停止 sleep 100

[2] 运行中 sleep 300 &

[3]- 已停止 sleep 100

[4]+ 已停止 sleep 10

bg后的任务在后台处于运行状态,命令后面&表示后台运行

• fg[id]把任务调到前台

[root@localhost ~]# jobs

[1]- 已停止 vmstat 1

[2]+ 已停止 vim .bash_history

[root@localhost ~]# fg 1

vmstat 1

2 0 0 1617656 764 156500 0 0 4648 126 1398 2346 0 0 100 0 0

0 0 0 1617656 764 156500 0 0 0 0 31 57 0 0 100 0 0

0 0 0 1617656 764 156500 0 0 0 0 29 52 0 0 100 0 0

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

[root@localhost ~]# sleep 100 &

[3] 2510

[root@localhost ~]# jobs

[1]+ 已停止 vmstat 1

[2]- 已停止 vim .bash_history

[3] 运行中 sleep 100 &

8.7/8.8 shell变量

• PATH,HOME,PWD,LOGNAME

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/tmp

[root@localhost ~]# echo $HOME

/root

[root@localhost ~]# echo $PWD

/root

[root@localhost ~]# echo $LOGNAME

root

注:系统内置变量用大写英文字母

 

• env命令

env命令用于显示系统中已存在的环境变量

[root@localhost ~]# env

XDG_SESSION_ID=10

HOSTNAME=localhost.localdomain

SELINUX_ROLE_REQUESTED=

TERM=xterm-256color

SHELL=/bin/bash

HISTSIZE=1000

SSH_CLIENT=172.20.3.27 50637 22

SELINUX_USE_CURRENT_RANGE=

SSH_TTY=/dev/pts/0

USER=root

LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:

MAIL=/var/spool/mail/root

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/tmp

PWD=/root

LANG=zh_CN.UTF-8

SELINUX_LEVEL_REQUESTED=

HISTCONTROL=ignoredups

SHLVL=1

HOME=/root

LOGNAME=root

SSH_CONNECTION=172.20.3.27 50637 172.20.5.89 22

LESSOPEN=||/usr/bin/lesspipe.sh %s

XDG_RUNTIME_DIR=/run/user/0

_=/usr/bin/env

 

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

注:set可以查看用户自定义的变量;

 

• 自定义变量a=1

a=1

b=2

[root@localhost ~]# a=1

[root@localhost ~]# b=2

[root@localhost ~]# set |grep 'a=1' ; set |grep 'b=2'

a=1

b=2

[root@localhost ~]# echo $a

1

[root@localhost ~]# echo $b

2

 

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

 

• 变量值有特殊符号时需要用单引号括起来,(单引号有脱义的效果)

a='1 2 3 '

b='a$bc'

[root@localhost ~]# c=$a$b

[root@localhost ~]# echo $c

1 2 3 2

[root@localhost ~]# d='$a$b'

[root@localhost ~]# echo $d

$a$b

 

 

• 变量的累加

c=a"$b"c 变量c等于a变量b的值c

[root@localhost ~]# b=1

[root@localhost ~]# c=a"$b"c

[root@localhost ~]# echo $c

a1c

 

 

• 全局变量export b=2

w命令查看负载,可以看到有哪些终端登录了linux。

[root@localhost ~]# w

14:34:56 up 4:18, 2 users, load average: 0.00, 0.01, 0.04

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 10:16 2:05m 0.05s 0.05s -bash

root pts/0 172.20.3.27 12:29 0.00s 0.05s 0.01s w 此行表示当前终端

SSH_TTY 当前登录终端的变量

[root@localhost ~]# echo $SSH_TTY

/dev/pts/0

 

bash 在当前终端打开一个新的bash环境;exit退出bash;

pstree命令以树状图显示进程间的关系;

[root@localhost ~]# bash

[root@localhost ~]# pstree

systemd─┬─NetworkManager─┬─dhclient

│ └─3*[{NetworkManager}]

├─auditd───{auditd}

├─crond

├─dbus-daemon───{dbus-daemon}

├─dhclient

├─firewalld───{firewalld}

├─login───bash

├─lvmetad

├─master─┬─pickup

│ └─qmgr

├─polkitd───5*[{polkitd}]

├─rsyslogd───2*[{rsyslogd}]

├─sshd───sshd───bash───bash───pstree

├─systemd-journal

├─systemd-logind

├─systemd-udevd

└─tuned───4*[{tuned}]

自定义的变量只能在当前终端bash下用,重新打开个bash就认不到了:

[root@localhost ~]# a=1

[root@localhost ~]# echo $a

1

[root@localhost ~]# bash

[root@localhost ~]# echo $a

[root@localhost ~]#

 

export全局通告后的变量可以在当前bash的子bash中生效;另外一个终端不生效,在新的bash中export 的

变量,在终端bash不生效

[root@localhost ~]# export a=gavin

[root@localhost ~]# bash

[root@localhost ~]# echo $a

gavin

[root@localhost ~]# export b=123

[root@localhost ~]# echo $b

123

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $b

 

[root@localhost ~]#

• unset 变量

取消定义的变量;

[root@localhost ~]# echo $a

gavin

[root@localhost ~]# unset a

[root@localhost ~]# echo $a

 

[root@localhost ~]#

8.9 环境变量配置文件 

环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell。对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell。对于UNIX,可能是CShelll。环境变量是通过Shell命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于bash这个Shell程序来说,可以通过变量名来访问相应的环境变量,通过export来设置环境变量。下面通过几个实例来说明。

 

一.系统级:

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

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目

录的配置文件中搜集shell的设置.

注:在这里我们设定是为所有用户可使用的全局变量。

 

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

为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取

 

二.用户级(这些文件处于家目录下):

• ~/.bashrc

该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取,例如你可以将

用户自定义的alias或者自定义的变量写到这个文件中。

 

• ~/.bash_profile

定义了用户的个人化路径与环境变量的文件名称。每个用户都可以使用该文件输入专用于自己使用的shell信息

当用户登录时该文件仅仅执行一次。

 

• ~/.bash_history

记录命令历史用的,只在用户退出当前终端或使用history -w时写入命令历史。

 

• ~/.bash_logout

当退出shell时会执行该文件,可以把一些清理掉工作放到这个文件中。

 

• PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

设置成带颜色和完整路径的显示

PS1是我们登录到linux后前面的那串字符了,例如chentos7 root用户默认的PS1就是[root@localhost ~]#。

[root@localhost ~]# echo $PS1

[\u@\h \W]\$

\u就是用户,\h主机名 ,\W 则是当前目录,\$ 就是那个“#"了,如果普通用户则显示为"$"

 

当bash期待输入更多的信息以完成命令时将显示第二级提示符。

比如:你输入cp filename1 \,回车,此时就出现第二级提示符。\是续行的意思。

默认的第二级提示符是“>;”。

如果要改变第二级提示符,可以通过在.bash_profile文件里设置PS2变量来实现。

[root@localhost ~]# echo $PS2

>

[root@localhost ~]#

 

source命令:

当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用source命令,如:source /etc/profile . /etc/profile

source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。

功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句

source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

用法:

source filename 或 . filename

source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。

 

 

 

 

 

bash_profile和bashrc区别

【.bash_profile 与 .bashrc 的区别】

.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

 

 

【login shell 与 non-login shell 的区别】

1、当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile 会被调用来初始化shell环境

Note:.bash_profile文件默认调用.bashrc文件

.bash_profile中有如下内容

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi 

2、当你不登陆系统而使用ssh直接在远端执行命令,.bashrc 会被调用

3、当你已经登陆系统后,每打开一个新的Terminal时,.bashrc 都会被再次调用。

 

 

测试准备工作

hclient2主机hadoop用户家目录下执行

[hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bashrc">>.bashrc

[hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bash_profile">>.bash_profile

 

 

Login Shell

1、窗口登陆

Red Hat Enterprise Linux Server release 6.3 (Santiago)

Kernel 2.6.32-279.el6.x86_64 on an x86_64

 

 

hclient2 login: hadoop

Password:

Last login: Mon Feb 25 23:03:45 on tty1

invoke hclient2:~/.bashrc

invoke hclient2:~/.bash_profile

 

[hadoop@hclient2 ~]$

2、SSH 登陆

[hadoop@hserver ~]$ ssh hclient2

Last login: Mon Feb 25 22:42:19 2013 from hserver

invoke hclient2:~/.bashrc

invoke hclient2:~/.bash_profile

[hadoop@hclient2 ~]$

3、su 登陆

[root@hclient2 ~]# su - hadoop

invoke hclient2:~/.bashrc

invoke hclient2:~/.bash_profile

 

 

Non-login Shell:

Note: ssh ...[user@] hostname [command]

If command is specified, it is executed on the remote host instead of a login shell.

[hadoop@hserver ~]$ ssh hclient2 hostname

invoke hclient2:~/.bashrc

hclient2

 

【故】若要配置环境变量之类,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登陆,该文件总会被调用!

转载于:https://my.oschina.net/u/3803404/blog/1799935

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值