常見的變量:
PATH:決定shell在哪些目錄下尋找命令和程序;
HOME:家目錄;
PWD:當前目錄;
LOGNAME:當前用戶名稱;linux
查看常見變量;
HOSTNAME:表示主機的名稱。
SHELL:表示當前用戶的shell類型。
HISTSIZE:表示歷史記錄數。
MAIL:表示當前用戶的郵件存放目錄。
PATH:該變量決定了shell將到哪些目錄中尋找命令或程序。
PWD:表示當前目錄。
LANG:這是與語言相關的環境變量,多語言環境能夠修改此環境變量。
HOME:表示當前用戶的家目錄。
shell
查看所有系統以及本身定義變量;
若是想讓設定的環境變量永久有效,有如下兩種方法:
容許系統內全部用戶登陸後都能使用該變量。具體的操做方法是:在/etc/profile文件的最後一行加入export myname=jinkai,而後運行source /etc/profile就能夠生效了。此時再運行bash命令或者切換到其餘帳戶bash
[root@jinkai01 ~]# echo "export myname=jinkai" >> /etc/profile
[root@jinkai01 ~]# source !$
source /etc/profile
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# echo $myname
jinkai
[root@jinkai01 ~]# exit
exit
root@jinkai01 ~]# su - linuxprobe
[linuxprobe@jinkai01 ~]$ echo $myname
jinkaissh
如僅容許當前用戶使用該變量。具體的操做方法是:在用戶主目錄下的.bashrc文件的最後一行加入export myname=jinkai,而後運行source .bashrc就能夠生效了。這時再登陸test帳戶,myname變量則不會生效了。這裏source命令的做用是將目前設定的配置刷新,即不用註銷再登陸也能生效。ide
[root@jinkai01 ~]# echo "export myname=jinkai" >> .bashrc
[root@jinkai01 ~]# source .bashrc
[root@jinkai01 ~]# echo $myname
jinkai
[root@jinkai01 ~]# su - linuxprobe
Last login: Mon Aug 17 22:47:20 CST 2020 on pts/0
[linuxprobe@jinkai01 ~]$ echo $myname編碼[linuxprobe@jinkai01 ~]$code
自定義的變量規則:
設定變量的格式爲a=b,其中a爲變量名,b爲變量的內容,等號兩邊不能有空格。
變量名只能由字母、數字以及下劃線組成,並且不能以數字開頭。
當變量內容帶有特殊字符(如空格)時,須要加上單引號。排序
實驗1:特殊符號變量,必須加單引號;文檔
[linuxprobe@jinkai01 ~]$ myname='jin kai'
[linuxprobe@jinkai01 ~]$ echo $myname
jin kaiget
實驗2:變量內容自己帶有單引號,這時就須要加雙引號
[linuxprobe@jinkai01 ~]$ myname="jin'kai"
[linuxprobe@jinkai01 ~]$ echo $myname
jin'kai
實驗3:若是變量內容中須要使用到其餘命令,運行結果則可使用反引號
[linuxprobe@jinkai01 ~]$ name=
pwd
[linuxprobe@jinkai01 ~]$ echo $name
/home/linuxprobe
實驗4:變量內容能夠累加其餘變量的內容,但須要加雙引號
[root@jinkai01 ~]# b=2
[root@jinkai01 ~]# myname="$b"a
[root@jinkai01 ~]# echo $myname
2a
定義全局變量:
格式:
export [變量名]=[變量值]
[root@jinkai01 ~]# abc=123
[root@jinkai01 ~]# echo $abc
123
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# echo $abc
#沒有使用全局變量前,切換一個環境,變量不生效了
[root@jinkai01 ~]# exit
exit
[root@jinkai01 ~]# export abc
[root@jinkai01 ~]# echo $abc
123
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# echo $abc
123 #設定全局變量後,切換環境,變量依然生效
取消全局變量:
格式:
unset [變量名]
[root@jinkai01 ~]# echo $abc
123
[root@jinkai01 ~]# unset abc
[root@jinkai01 ~]# echo $abc[root@jinkai01 ~]#
pstree命令須要安裝psmisc包;
yum -y install psmisc
查看當前所在bash
[root@jinkai01 ~]# pstree
systemd-+-NetworkManager---2[{NetworkManager}]
|-VGAuthService
|-agetty
|-auditd---{auditd}
|-crond
|-dbus-daemon---{dbus-daemon}
|-firewalld---{firewalld}
|-lvmetad
|-master-+-pickup
| `-qmgr
|-polkitd---6[{polkitd}]
|-rsyslogd---2[{rsyslogd}]
|-sshd---sshd---bash---pstree
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-tuned---4[{tuned}]
`-vmtoolsd---{vmtoolsd}
進入新bash
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# pstree
systemd-+-NetworkManager---2[{NetworkManager}]
|-VGAuthService
|-agetty
|-auditd---{auditd}
|-crond
|-dbus-daemon---{dbus-daemon}
|-firewalld---{firewalld}
|-lvmetad
|-master-+-pickup
| `-qmgr
|-polkitd---6[{polkitd}]
|-rsyslogd---2[{rsyslogd}]
|-sshd---sshd---bash---bash---pstree
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-tuned---4[{tuned}]
`-vmtoolsd---{vmtoolsd}
退出
exit
/etc/profile :用戶環境變量、交互、登陸才執行;
/etc/bashrc : 用戶不用登陸、執行shell就生效;(這個文件主要預設umask以及PS1)
.bash_profile:該文件定義了用戶的我的化路徑與環境變量的文件名稱。每一個用戶均可使用 該文件輸入專屬於本身的shell信息,當用戶登陸時,該文件僅僅執行一次。
.bashrc:該文件包含專屬於本身的shell的bash信息,當登陸或每次打開新的shell時,該文件 會被讀取。例如,你能夠將用戶自定義的別名或者自定義變量寫到這個文件中。
.bash_history:該文件用於記錄命令歷史。
.bash_logout:當退出shell時,會執行該文件。你能夠將一些清理的工做放到這個文件中。
當咱們登陸系統後,命令的最左邊會顯示:
[root@jinkai01 ~]#
怎樣控制這個顯示,那麼就要說到PS1變量;
PS1變量定義在 /etc/bashrc 文件下面;
[root@jinkai01 ~]# echo $PS1
[\u@\h \W]\$
[root@jinkai01 ~]#u@:表明用戶名
h:表明hostname
W:表明最後一個路徑
注意:可將大W改小w 顯示爲絕對徹底路徑
實驗1:修改顯示爲絕對路徑;
[root@jinkai01 ~]# PS1='[\u@\h \w]\$'
[root@jinkai01 ~]#cd /etc/sysconfig/
[root@jinkai01 /etc/sysconfig]#
號* 任意個任意字符
號?任意一個字符
號 # 註釋字符
\ 脫義字符
| 管道符
$變量前面的標識符,還能夠和!結合使用。
!$ 表示上條命令中的最後一個變量,例如ls a.txt,那麼當前命令下輸入!$則表明a.txt
;多條命令寫到一行,用分號分隔
~ 用戶家目錄
& 放到命令後面,會把命令丟到後臺執行,例如:sleep 300 &
;> :輸出重定向
;>> :追加劇定向
2> :錯誤輸出重定向
2>> :錯誤追加劇定向
&>:正確和錯誤結果重定向到一個文件
[ ] :方括號表示指定字符中的一個,【0-9】,【a-zA-Z】,【abc】;
||和&& 判斷語句,用於命令之間;(|| 或的意思 ls 1.txt || ls 2.txt 若是執行ls 1.txt成功 就不會執行ls 2.txt)
(&& 是and的意思 ls 1.txt && ls 2.txt 表示 若是ls 1.txt 執行成功 纔會執行 ls 2.txt)
做用:截取文件部分顯示
格式:cut -d ‘分割字符’ [-cf] 數字
-d 後面跟分隔符,分割字符要用單引號括起來
-f指定段數
-c後面接的是第幾個字符;
顯示passwd文檔的前兩段,截取:以前的1段;
cat /etc/passwd |head -2 |cut -d ":" -f 1
[root@jinkai01 /etc]#cat /etc/passwd | head -2 | cut -d ':' -f 1
root
Bin
做用:排序顯示;
格式:sort [ -t 分隔符 ] [ -kn1,n2 ] [-nru ]
-n:表示使用純數字排序
-r:表示使用反向排序
-t:後面跟分割字符,做用跟cut 的 -d 選項同樣
-kn1/-kn1,n2:表示由n1區間排序到n2區間,能夠只寫-kn1,即對n1字段排序
若是sort 不加任何選項,則從首字符向後依次按照ASCII碼值進行比較,最後將它們按升序輸出
實驗:將psswd 按ACISS編碼排序從a-z順序;
sort /etc/passwd #仔細看首字符字母順序
[root@jinkai01 /etc]#sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
做用:統計文件行數、字符數或詞數;
-l: 統計文件行數;
-m:統計字符數(換行符也會計算在內)#cat -A 能夠看到文件換行符
-w:統計詞 (空白做爲分隔)
統計/etc/passwd 有多少行
[root@jinkai01 /etc]#wc -l /etc/passwd
19 /etc/passwd
[root@jinkai01 /etc]#
做用:去重複(去重複內容只限於相鄰段),配合sort排序而後再去重複,-c 統計重複的行數,並把行數寫在前面;
實驗1:不排序去重複;
[root@jinkai01 /etc]#cat a.txt
abc
222
abc
111
111
[root@jinkai01 /etc]#uniq a.txt
abc
222
abc
111
結果:abc沒有去重複,由於不相鄰
實驗2:排序去重複;結合sort使用
[root@jinkai01 /etc]#cat a.txt
abc
222
abc
111
111
[root@jinkai01 /etc]#sort a.txt
111
111
222
abc
abc
[root@jinkai01 /etc]#sort a.txt | uniq
111
222
abc
sort 先給排序,而後把輸出結果經過管道符給後面去執行
做用:至關於>命令,也就是輸出重定向,可是能夠顯示;
參數-a:追加;
[root@jinkai01 /etc]#cat a.txt | tee 2.txt
abc
222
[root@jinkai01 /etc]#cat a.txt | tee -a 2.txt
abc
222
[root@jinkai01 /etc]#cat 2.txt
abc
222
abc
222
做用:替換字符;
-d:表示刪除某個字符,後面跟要刪除的字符
-s:表示刪除重複的字符
實驗:把小寫字母換成大寫字母,如tr ‘[a-z]’ ‘[A-Z]’
[root@jinkai01 /etc]#head -2 /etc/passwd | tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
實驗:還能夠替換字符
[root@jinkai01 /etc]#grep 'root' /etc/passwd | tr 'r' 'R'
Root:x:0:0:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin
做用:切割命令,將一個大的文件分割成多個文件;
-b表示依據大小來分割(默認單位字節),
-l 表示依據行數來分割;
實驗1:按大小來分割文件;
[root@jinkai01 /etc]#mkdir aa
[root@jinkai01 /etc]#cp /etc/passwd aa/
[root@jinkai01 /etc]#cd aa
[root@jinkai01 /etc/aa]#split -b 500 passwd
[root@jinkai01 /etc/aa]#ls
passwd xaa xab
能夠指定目標文件名
[root@jinkai01 /etc/aa]#rm -f xa*
[root@jinkai01 /etc/aa]#split -b 500 passwd 123
[root@jinkai01 /etc/aa]#ls
123aa 123ab passwd
實驗2:按行數來分割文件;
[root@jinkai01 /etc/aa]#split -l 10 passwd [root@jinkai01 /etc/aa]#lspasswd xaa xab[root@jinkai01 /etc/aa]#wc -l *19 passwd10 xaa9 xab38 tota