[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 文件中。由于不论是登录仍是不登录,该文件总会被调用!