目录
1 管道符作业控制
"|"作用是将前面命令的输出作为后面命令的输入
[root@worker1 ~]# cat 4.txt | wc -l
28
[root@worker1 ~]# cat 4.txt | grep 'root'
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ctrl z 暂停一个任务
[root@worker1 ~]# vim 4.txt
[1]+ Stopped vim 4.txt
[root@worker1 ~]# vim 1.txt
[2]+ Stopped vim 1.txt
jobs查看后台的任务
[root@worker1 ~]# jobs
[1]- Stopped vim 4.txt
[2]+ Stopped vim 1.txt
bg[id]把任务调到后台
[root@worker1 ~]# bg 1
[1]- vim 4.txt &
fg[id]把任务调到前台
[root@worker1 ~]# jobs
[1]+ Stopped vim 4.txt
[2]- Stopped vim 1.txt
[root@worker1 ~]# fg 1
vim 4.txt
[root@worker1 ~]# jobs
[2]+ Stopped vim 1.txt
- 命令后面加&直接丢到后台
2 shell变量
PATH,HOME,PWD,LOGNAME
[root@worker1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@worker1 ~]# echo $HOME
/root
[root@worker1 ~]# echo $PWD
/root
[root@worker1 ~]# echo $LOGNAME
root
env命令 系统的变量
[root@worker1 ~]# env | head
XDG_SESSION_ID=4
HOSTNAME=worker1
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.139.1 4152 22
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
set命令多了很多变量,并且包括用户自定义的变量
[root@worker1 ~]# set | head
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(1)-release'
变量名规则:字母、数字下划线,首位不能为数字
[root@worker1 ~]# value=100
[root@worker1 ~]# set | grep 100
HISTFILESIZE=1000
HISTSIZE=1000
SSH_CONNECTION='192.168.139.1 4152 192.168.139.100 22'
value=100
变量值有特殊符号时需要用单引号括起来
[root@worker1 ~]# a=1
[root@worker1 ~]# b=2
[root@worker1 ~]# echo "a$b"
a2
[root@worker1 ~]# echo 'a$b'
a$b
变量的累加
[root@worker1 ~]# a=1
[root@worker1 ~]# b=2
[root@worker1 ~]# echo "$[$a+$b]"
[root@worker1 ~]# w
02:23:26 up 2:16, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.139.1 00:07 1:17m 0.35s 0.35s -bash
root pts/1 192.168.139.1 01:40 6.00s 0.23s 0.01s w
[root@worker1 ~]# echo $SSH_TTY
/dev/pts/1
bash 进入子shell
安装pstree,查看shell树
[root@worker1 ~]# yum install -y psmisc
[root@worker1 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─wpa_supplicant
[root@worker1 ~]# bash
[root@worker1 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─wpa_supplicant
[root@worker1 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─wpa_supplicant
全局变量export
[root@worker1 ~]# export scan=linux
[root@worker1 ~]# echo $scan
linux
再进入一层子shell
[root@worker1 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─wpa_supplicant
[root@worker1 ~]# bash
[root@worker1 ~]# echo $scan
linux
返回到父shell
[root@worker1 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─wpa_supplicant
[root@worker1 ~]# echo $scan
没有scan变量值,父shell不能获取子shell变量;在上一级或者另外一个bash是不生效的
取消全局变量
[root@worker1 ~]# unset scan
3 环境变量配置文件
- 在Linux系统中,用户一登录shell就自动加载一些变量,如下两个主要配置文件
/etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等
/etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是我们在输入命令时前面的那串字符
- 例如,Linux系统的PS1就是[root@localhost ~]#,我们不妨看一下PS1的值,如下所示:
- # echo $PS1
- [\u@\h \W]\$
- 其中,\u指用户,\h指主机名,\W指当前目录,\$ 指字符#(如果是普通用户,则显示为$)。
- 除了以上两个系统级别的配置文件外,每个用户的主目录下还有以下几个隐藏文件
~/.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用
该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
~/.bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件
会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中。
~/.bash_history:该文件用于记录命令历史。
~/.bash_logout:当退出shell时,会执行该文件。你可以将一些清理的工作放到这个文件中。
source或者. 表示刷新配置文件
扩展
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-environment-variables.html