3.8 8.6-8.9聽課筆記
[root@localhost ~]# cat a.txt
-bash: lsaaa: 未找到命令
-bash: lsaaa: 未找到命令
[root@localhost ~]# cat a.txt|wc -l
2
[root@localhost ~]# cat a.txt|grep 'aaa'
-bash: lsaaa: 未找到命令
-bash: lsaaa: 未找到命令
*將前面的結果交給後面的命令執行
Ctrl+z 臨時暫停正在執行的進程(調向後臺)
[root@localhost ~]# vim 2.txt
[1]+ 已停止 vim 2.txt
[root@localhost ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/sda3 28G 1.4G 27G 5% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 97M 100M 50% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@localhost ~]# fg 將後臺進程調回前臺
vim 2.txt
[root@localhost ~]# vim aa.txt
[2]+ 已停止 vim aa.txt
[root@localhost ~]# fg
vim aa.txt
[2]+ 已停止 vim aa.txt
[root@localhost ~]# jobs 將已經停止的後臺任務列出
[1]- 已停止 vim 2.txt
[2]+ 已停止 vim aa.txt
[root@localhost ~]# fg 2 多進程在後臺時調回一個進程(fg+id號)
vim aa.txt
[root@localhost ~]jobs
[1]- 已停止 vim 2.txt
[2]+ 已停止 vim aa.txt
[3] 運行中 vmstat 1 &
[root@localhost ~]fg 3
[root@localhost ~]vmstat 1 該進程會不停的在屏幕上輸出信息,按ctrl+z進程停止,敲bg進程會在後臺運行起來
[root@localhost ~]# jobs
[3]- 已停止 vmstat 1
[4]+ 已停止 vim aa
[root@localhost ~]# bg 4
[4]+ vim aa &
[root@localhost ~]# jobs
[3]- 已停止 vmstat 1
[4]+ 已停止 vim aa
*有的命令在後臺只能是停止狀態(vim),有些命令按ctrl+z會被放在後臺並停止,但使用bg+id可以使這種命令在後臺運行起來(vmstat 1)
[root@localhost ~]# sleep 1000 在這1000秒內什麽也不做
Ctrl+z停止進程,暫停這種狀態
[root@localhost ~]#
[root@localhost ~]# sleep 200
^Z
[6]+ 已停止 sleep 200
[root@localhost ~]# jobs
[3] 已停止 vmstat 1
[4] 已停止 vim aa
[5]- 已停止 sleep 1000
[6]+ 已停止 sleep 200
[root@localhost ~]# fg
sleep 200
fg後不加任何內容則將最新被停止的進程拉到前臺執行
[root@localhost ~]# bg 6
[6]+ sleep 200 &
[root@localhost ~]# jobs
[3] 已停止 vmstat 1
[4]- 已停止 vim aa
[5]+ 已停止 sleep 1000
[6] 運行中 sleep 200 &
被執行了bg的停止進程會在後臺重新運行起來
[root@localhost ~]# sleep 100 &
[7] 1112
[6] 完成 sleep 200
[root@localhost ~]# jobs
[3] 已停止 vmstat 1
[4]- 已停止 vim aa
[5]+ 已停止 sleep 1000
[7] 運行中 sleep 100 &
[root@localhost ~]#
將一條命令直接丟到後臺執行
*Jobs命令只能發現目前終端下的被放在後臺的進程
[root@localhost ~]# ps aux |grep sleep
root 1109 0.0 0.0 107904 612 pts/0 T 21:32 0:00 sleep 1000
root 1115 0.0 0.0 112676 984 pts/0 S+ 21:43 0:00 grep --color=auto sleep
[7] 完成 sleep 100
Shell變量
查看變量
[root@localhost ~]# env 查看系統常用的環境變量
XDG_SESSION_ID=4
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=2000
…
[root@localhost ~]# set 查看系統內置環境變量和用戶自定義變量
[root@localhost ~]# a=111 自定義變量
[root@localhost ~]# set |grep '111' 以111為條件在set的結果下查找
PPID=1118
a=111
[root@localhost ~]# env |grep 'a=111' env無法搜索自定義變量
[root@localhost ~]#
[root@localhost ~]# env |grep HOSTNAME
HOSTNAME=localhost.localdomain
系統變量通常不能修改(可以通過配置文件更改),自定義變量是用戶自己定義的變量;
變量名可以是字母、數字、下劃線,變量名不能以數字開頭;
變量值有特殊符號時需要用單引號括起來
[root@localhost ~]# a1=2
[root@localhost ~]# echo $a1
2
[root@localhost ~]# _a1=3
[root@localhost ~]# echo $_a1
3
[root@localhost ~]# 1a1=4
-bash: 1a1=4: 未找到命令
[root@localhost ~]# g=a b c
-bash: b: 未找到命令
[root@localhost ~]# g='a b c'
[root@localhost ~]# h="a$bc"
[root@localhost ~]# echo $h
a
[root@localhost ~]# h='a$bc' ‘’中無論任何特殊符號都會原樣輸出
[root@localhost ~]# echo $h
a$bc
單引號:
可以說是所見即所得:即將單引號內的內容原樣輸出,或者描述為單引號裏面看見的是什麽就會輸出什麽。
雙引號:
把雙引號內的內容輸出出來;如果內容中有命令,變量等,會先把變量,命令解析出結果,然後在輸出最終內容來。
雙引號內命令或變量的寫法為`命令或變量`或$(命令或變量)。
無引號:
把內容輸出出來,可能不會講含有空格的字符串視為一個整體輸出,如果內容中有命令,變量等,會先把變量,命令解析結果,然後在輸出最終內容來,如果字符串中帶有空格等特殊字符,則不能完整的輸出,需要改加雙引號,一般連續的字符串,數字,路徑等可以用,不過最好用雙引號替代之
[root@localhost ~]# c="a$b"c “”中的變量、命令會先被執行再輸出
[root@localhost ~]# echo $c
a3c
[root@localhost ~]#
全局變量
[root@localhost ~]# w 查看當前系統用戶登錄情況
22:36:39 up 2:07, 3 users, load average: 0.00, 0.01, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 20:30 2:06m 0.02s 0.02s -bash
root pts/0 192.168.91.1 20:30 40:55 1.45s 0.14s -bash
root pts/1 192.168.91.1 21:45 7.00s 0.09s 0.02s w
[root@localhost ~]# echo $SSH_TTY 通過環境變量查看自己在哪個tty下
/dev/pts/1
[root@localhost ~]# echo $SSH_TTY
/dev/pts/1
[root@localhost ~]# hyc=linux
[root@localhost ~]# echo $hyc
linux
[root@localhost ~]# echo $SSH_TTY
/dev/pts/0
[root@localhost ~]# echo $hyc
在一個tty下定義的變量在另一個tty下不生效
[root@localhost ~]# pstree
*重新打開一個bash(子shell)執行pstree命令
[root@localhost ~]# echo $hyc 打開的兩個子shell並沒有繼承自定義變量hyc
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $hyc
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $hyc 退出到最初的shell
linux
之前自定義的變量只在本地生效
定義全局變量
[root@localhost ~]# export aming=linux
[root@localhost ~]# echo $aming
linux
[root@localhost ~]# bash
[root@localhost ~]# echo $aming
Linux
全局變量向下生效,該shell下配置的全局變量只在該shell的子shell及以下的shell中生效;
不同sshd的全局變量互不影響;
[root@localhost ~]# unset aming 取消自定義的變量
[root@localhost ~]# export yy=aa
[root@localhost ~]# echo $yy
aa
[root@localhost ~]# bash
[root@localhost ~]# echo $yy
aa
[root@localhost ~]# unset yy
[root@localhost ~]# echo $yy
子shell可以刪除從上級shell獲得的全局變量
環境變量配置文件
系統層次配置文件
/etc/profile /etc/bashrc
用戶層次
~/.bashrc ~/.bash_history ~/.bash_logout ~/.bash_profile
Profile是用戶登錄才生效;
bashrc在系統執行shell時就生效,此時用戶可以不用登錄
如果需要變量全局生效則在/etc下編輯對應文件,如果只針對某個用戶生效則在用戶家目錄下編輯對應文件
~/.bash_logout 定義用戶每次登出時執行的操作
變量PS1
[root@localhost ~]受PS1影響
[root@localhost ~/d6z/hyc]#echo $PS1
[\u@\h \w]\$
[root@localhost ~/d6z/hyc]#PS1='[\u@\h \W]\$'
[root@localhost hyc]#
W小寫代表絕對路徑,大寫代表相對路徑
[root@localhost hyc]#PS1='<\u@\h \W>\$' []可代替為其他任意符號或消除
<root@localhost hyc>#
設置使括號內容帶顏色
變量PS2
例如進入mysql會進入一個小終端,此時一行開頭顯示的內容會用到變量PS2
root@localhost ~]#echo $PS2
>
root@localhost ~]#for i in `seq 1 100` 進入PS2
>
> done
-bash: 未預期的符號 `done' 附近有語法錯誤
root@localhost ~]#PS2="#"
root@localhost ~]#for i in `seq 1 100`
#
3.8 8.6-8.9聽課筆記