管道符和做業控制 shell變量 環境變量配置文件

8.6 管道符和做業控制

• 管道符 | 把前面命令輸出的結果給後面命令運行

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

root:x:0:0:root:/root:/bin/bashweb

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

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

22bash

• ctrl z 暫停一個任務

[root@localhost ~]# sleep 100less

^Zdom

[1]+ 已中止 sleep 100ssh

• jobs查看後臺的任務

[root@localhost ~]# jobssvg

[1]- 已中止 sleep 100oop

[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 的區別】

一、當你直接在機器login界面登錄、使用ssh登錄或者su切換用戶登錄時,.bash_profile 會被調用來初始化shell環境

Note:.bash_profile文件默認調用.bashrc文件

.bash_profile中有以下內容

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi 

二、當你不登錄系統而使用ssh直接在遠端執行命令,.bashrc 會被調用

三、當你已經登錄系統後,每打開一個新的Terminal時,.bashrc 都會被再次調用。

 

 

測試準備工做

hclient2主機hadoop用戶家目錄下執行

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

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

 

 

Login Shell

一、窗口登錄

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 ~]$

二、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 ~]$

三、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 文件中。由於不論是登錄仍是不登錄,該文件總會被調用!

相關文章
相關標籤/搜索