[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
[root@localhost ~]# sleep 100less
^Zdom
[1]+ 已中止 sleep 100ssh
[root@localhost ~]# jobssvg
[1]- 已中止 sleep 100oop
[2]+ 已中止 sleep 300
bg fg不加任務id默認調用有+標誌的任務
[root@localhost ~]# bg 2
[2] sleep 300 &
[root@localhost ~]# jobs
[1] 已中止 sleep 100
[2] 運行中 sleep 300 &
[3]- 已中止 sleep 100
[4]+ 已中止 sleep 10
bg後的任務在後臺處於運行狀態,命令後面&表示後臺運行
[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 &
• 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 ~]#
環境變量是和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 文件中。由於不論是登錄仍是不登錄,該文件總會被調用!