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

擴展:html

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前端

管道符 |

  • 管道符的做用是將前面一個命令的輸出做爲後面一個命令的輸入
[root@yong-02 ~]# cat /etc/passwd |wc -l
25
[root@yong-02 ~]# cat /etc/passwd |grep 'root'
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

做業控制

  1. 當一個進程運行時,ctrl+z 能夠暫停這個任務
[root@yong-02 ~]# sleep 1000
^Z
[1]+  已中止               sleep 1000
  1. 當暫停後,能夠輸入fg(foreground簡寫)命令來恢復這個進程,讓它在前端繼續運行。
[root@yong-02 ~]# fg
sleep 1000
  1. 咱們也可使用命令bg(background簡寫)將暫停的進程直接丟到後臺運行。
[root@yong-02 ~]# bg
[1]+ sleep 1000 &
  1. 咱們可使用命令jobs來查看有那些進程是被暫停了。
[root@yong-02 ~]# jobs
[1]-  運行中               sleep 1000 &
[2]+  已中止               sleep 2000
  1. 咱們能夠直接將一條命令丟在後臺運行。
[root@yong-02 ~]# jobs 
[1]   運行中               sleep 1000 &
[2]+  已中止               sleep 2000
[3]-  運行中               sleep 3000 &

變量

  • 變量就是使用一個比較簡單的字符串來代替某些具備特殊意義的設定以及數據。
  • 環境變量PATH,它是shell預設的一個變量,一般shell預設的變量都是大寫的。
[root@yong-02 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@yong-02 ~]# echo $HOME
/root
[root@yong-02 ~]# echo $HISTSIZE
1000

命令env

  • 使用env命令能夠列出系統預設的所有系統變量
[root@yong-02 ~]# env
XDG_SESSION_ID=1
HOSTNAME=yong-02
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.180.1 50125 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
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
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.180.1 50125 192.168.180.135 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
  • HOSTNAME:表示主機的名稱;
  • SHELL:表示當前用戶的shell類型;
  • HISTSIZE:表示歷史記錄數;
  • MAIL:表示當前用戶的郵件存放目錄;
  • PATH:改變量決定了shell將到那些目錄中尋找命令或者程序;
  • PWD:表示當前目錄;
  • LANG:這是與語言相關的環境變量,多語言環境能夠修改此環境變量;
  • HOME:表示當前用戶的家目錄;
  • LOGNAME:表示當前用戶的登陸名;

命令set

  • 命令set不只能夠顯示系統預設的環境變量,還能夠顯示用戶自定義的變量。

自定義變量規則:linux

  • 設定變量的格式爲a=b,其中a爲變量名,b爲變量的內容,等號兩邊不能有空格;
  • 變量名只能由字母,數字以及下劃線組成,並且不能以數字開頭。
  • 當變量值帶有特殊字符(如空格)時,須要加上單引號。
[root@yong-02 ~]# name=li yong
-bash: yong: 未找到命令
[root@yong-02 ~]# name="li yong"
[root@yong-02 ~]# echo $name
li yong
  • 變量內容自己就帶有單引號,這個時候須要加上雙引號
[root@yong-02 ~]# name="'li' yong"
[root@yong-02 ~]# echo $name
'li' yong
  • 若是變量內容中須要用到其餘命令,運行結果則可使用反引號;
[root@yong-02 ~]# name=`pwd`
[root@yong-02 ~]# echo $name
/root
  • 變量內容能夠累加其餘變量的內容,單須要加上雙引號
[root@yong-02 ~]# a=1
[root@yong-02 ~]# b=2
[root@yong-02 ~]# c=3
[root@yong-02 ~]# d="$a$b$c"
[root@yong-02 ~]# echo $d
123
  • 查看當前在那個終端下:
[root@yong-02 ~]# echo $SSH_TTY 
/dev/pts/0
[root@yong-02 ~]# w
 15:33:38 up 58 min,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.180.1    14:38    2.00s  0.13s  0.01s w
  • 若是再當前shell中運行bash命令,則會進入一個新的shell中,這個shell是原來shell的子shell,咱們能夠用pstree來查看:
  • 須要先安裝一個包:yum install -y psmisc
[root@yong-02 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─agetty
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{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}]
        └─vmtoolsd───{vmtoolsd}
  • 設置全局變量
#export a=111
 #export PATH="$var_PATH"
 #export 可查看當前系統下的全部環境變量.
  • 注意:export聲明變量a後,只會讓該shell的子shell或者孫shell生效,可是不會讓它的父shell和其餘終端的shell生效。
  • 撤銷變量    unset 變量名

系統環境變量和我的環境變量

  • /etc/profile 用戶環境變量,交互,登陸才執行
  • /etc/bashrc 用戶不用登陸,執行shell就生效
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.bash_history
  • ~/.bash_logout
  • PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$ '

環境變量分爲系統層次變和用戶層次web

  • /etc/profile 設置系統環境變量,無論針對哪一個用戶這些環境變量都會生效,可是設置這個配置文件

不太好,編輯的時候會有一段提示: 這不是一個好主意來改變這個文件,除非你知道你 正在作的事情。若是你想更改某些環境變量,最好在/etc/profile.d /下去自定義,建立格式爲XXX.sh, 在將來的更新將防止合併的必要性。shell

[root@yong-02 ~]# ls /etc/profile.d
256term.csh         colorgrep.csh  colorls.sh  less.csh  vim.sh
256term.sh          colorgrep.sh   lang.csh    less.sh   which2.csh
bash_completion.sh  colorls.csh    lang.sh     vim.csh   which2.sh
[root@yong-02 ~]# vim /etc/profile.d/path.sh
#!/bin/path
export PATH=$PATH:/tmp/:/data/bin/
  • 編輯完後要source /etc/profile,加載的時候會調用profile.d下面的全部文件。apache

  • /etc/bashrc 設置PS1和umask; 它和/etc/profile同樣,在/etc/bashrc設置很差,要在/etc/profile.d下去定義,建立格式爲.sh的文件vim

  • 進去編輯配置,完成後source /etc/profile 加載一下。bash

[root@yong-02 ~]# vim /etc/profile.d/umask.sh 
#bsah/bin
PS1="[\u@\h-\t \W]\$ "
[root@yong-02 ~]# source /etc/profile
[root@yong-02-15:52:15 ~]$ ls
1.sh       anaconda-ks.cfg         multi-user.target  reboot.target
1.txt      auto_install_apache.sh  passwd             rescue.target
1.txt.bak  graphical.target        poweroff.target    test
  • \u 用戶名 \h主機名 \t 時間 \W 當前目錄 \w 目錄的完整路徑 $ 就是#,若是普通用戶就是$less

  • 默認 PS1='[\u@\h \W]\$ 'dom

  • .bash_profile 定義用戶本身的環境變量,每一個用戶均可以使用該文件輸入專用於本身使用的

  • shell信息,當用戶登錄時,該文件僅僅執行一次

  • .bashrc :文件包含專屬用戶本身的shell的bash信息,登錄時以及每次打開新的shell時,該文件都被讀取。能夠將用戶之定義的alias或者自定義變量寫到這個文件中

  • .bash_history 記錄命令歷史用的

  • .bash_logout 退出shell時,會執行該文件,能夠把一些清理的工做放到這個文件中。

環境變量配置文件

/etc/profile 用戶環境變量,交互、登錄才執行(不要修改)

概念:/etc/profile這個文件預設了幾個重要的變量,例如PATH、USER、LOGNAME、等變量。
/etc/bashrc 用戶不用登錄,執行shell就生效。(不要修改)

這個文件主要預設umask以及PS1;
這個PS1就是咱們在輸入命令時前面的那串字符;
例如Linux系統的就是[root@localhost ~]# 
咱們能夠看一下PS1的值,以下:
[root@yong-02 ~]# echo $PS1
[\u@\h \W]\$
其中,\u指用戶,\h指主機名,\W指當前目錄,\$指字符# (若是是普通用戶則爲¥)
~/.bashrc

概念:該文件包含專屬於本身的shell的bash信息;
當登錄或每次新打開新的shell時,該文件會被讀取;
例如,你能夠將用戶自定義的別名或者自定義變量寫到這個文件中。
~/.bash_profile

概念:該文件定義了用戶的我的化路徑於環境變量的文件名稱;
每一個用戶均可使用該文件輸入專屬本身的shell信息,當用戶登錄時,該文件僅執行一次。
~/.bash_history

概念:該文件用戶記錄命令歷史。
~/.bash_logout

概念:當退出shell時,會執行該文件,能夠將一些清理的工做放到這個文件中。
更改用戶自定義顏色:

[root@localhost /]# PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]\$ '
 

擴展:

有時候咱們須要對線上用戶操做記錄進行歷史記錄待出現問題追究責任人,,但Linux系統自帶的history命令用戶有自行刪除權限,那怎麼設置可讓用戶的操做記錄實時記錄,並保證普通用戶無權刪除呢?本文教你一招
 
1.mkdir -p /usr/local/domob/records/
 
  chmod 777 /usr/local/domob/records/
 
  chmod +t /usr/local/domob/records/
 
2.vi /etc/profile 在最後添加下面的代碼
 

if [ ! -d  /usr/local/domob/records/${LOGNAME} ]   then   mkdir -p /usr/local/domob/records/${LOGNAME}   chmod 300 /usr/local/domob/records/${LOGNAME}   fi   export HISTORY_FILE="/usr/local/domob/records/${LOGNAME}/bash_history"   export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'

相關文章
相關標籤/搜索