第八章shell基礎

 
8.1 shell介紹
8.2 命令歷史
8.3 命令補全和別名
8.4 通配符
8.5 輸入輸出重定向
8.6 管道符和做業控制
8.7/8.8 shell變量
8.9 環境變量配置文件
8.10擴展: bashrc和bash_profile的區別
8.11課堂筆記
 
 
8.1 shell介紹
 

 

8.2 命令歷史
命令存放路徑:/用戶家目錄下/.bash_hsitory
#只有用戶退出總終端的時候纔會將命令緩存保存到文件裏
#默認最大存儲1000條命令
系統內置環境變量HISTSIZE
echo $HISTSIZE                       #查看HISTSIZE大小
[root@localhost ~]#  echo $HISTSIZE
1000
 
修改HISTSIZE的配置文件:/etc/profile
#修改事後不會馬上生效,要重登終端或者source   /etc/profile
 
history                         #查看使用過的命令
 
histtory  -c             #清空使用過命令的緩存(刪除不了.bash_hsitory內的命令
 
將查看命令歷史設置使用時間
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"      
 #Y/m/d    年/月/日;   H:M:S   時:分:秒 ( 僅在當前終端生效
#要想永久在因此終端都生效,將該命令寫進 /etc/profile文件裏面
 
#將命令歷史永久保存,/用戶家目錄下/.bash_history添加a權限
chattr +a  /用戶家目錄下/.bash_history
 
注意:若是終端沒有正常退出,重登的時候會發現歷史命令保存的不全
 
!!              #執行上一條命令
[root@localhost ~]#  ls
2.txt  3.txt  anaconda-ks.cfg  asda.txt
[root@localhost ~]#  !!
ls
2.txt  3.txt  anaconda-ks.cfg  asda.txt
 
!n              #n是命令歷史的排序號
1026  2018/08/12 19:37:25vim /etc/profile
1027  2018/08/12 19:38:43ls
1028  2018/08/12 19:39:26history
[root@localhost ~]#  !1027
ls
2.txt  3.txt  anaconda-ks.cfg  asda.txt
 
!word     #或者最近使用一次命令的開頭
 
 
8.3 命令補全和別名
#參數補全,須要安裝 bash-completion
Tab鍵按一次,補全命令和參數
Tab鍵按兩次,顯示支持補全的參數
 
 
配置別名的文件路徑存放: /用戶家目錄下/.bashrc
其它自定義別名存放: /etc/profile.d 
 
 
8.4 通配符
*                 #表示通配全部字符
?               #表示通配一個字符
[root@localhost ~]#  ls *.txt
1.txt  2.txt  3.txt  aa.txt  asda.txt  a.txt  bbb.txt  b.txt  c.txt
[root@localhost ~]#  ls ?.txt
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt
 
[ ]               #可寫數字,字母,範圍;括號內字符都是或者的關係
[root@localhost ~]#  ls [123].txt
1.txt  2.txt  3.txt
[root@localhost ~]#  ls [0-2].txt
1.txt  2.txt
[root@localhost ~]#  ls [a-z].txt
a.txt  b.txt  c.txt
[root@localhost ~]#  ls [1-3a-c].txt
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt
[root@localhost ~]#  ls [1-3a-cA-Z].txt
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt
 
{ }               #可寫數字,字母;括號內字符都是或者的關係,可是中間須要用逗號「,」隔開
[root@localhost ~]#  ls {1,2}.txt
1.txt  2.txt
[root@localhost ~]#  ls {1-2}.txt
ls: 沒法訪問{1-2}.txt: 沒有那個文件或目錄
[root@localhost ~]# ls {1,2,3,a,}.txt
1.txt  2.txt  3.txt  a.txt
 
 
8.5 輸入輸出重定向
一、輸出「>」
cat 1.txt  > 2.txt           #  重定向,將1.txt內容刪掉再從新寫入2.txt的內容
cat 1.txt  >> 2.txt        # 追加,將2.txt內容追加到1.txt的結尾處的下一行
lsaaa   2> 2.txt            # 錯誤重定向,ls命令產生的錯誤信息重定向到2.txt
lsaaa  2>> 2.txt         # 錯誤追加劇定向,ls命令產生的錯誤信息追加到2.txt
 
>+2> ==  &>           #即 &>是重定向和錯誤重定向的結合
例:
一、ls  [12].txt  abc.txt   &> 3.txt
[root@localhost ~]#  ls  [12].txt  abc.txt   &> 3.txt
[root@localhost ~]#  cat 3.txt
ls: 沒法訪問abc.txt: 沒有那個文件或目錄
1.txt
2.txt
 
二、ls  [12].txt  abc.txt    >3.txt   2>a.txt
[root@localhost ~]#  ls  [12].txt  abc.txt    >3.txt   2>a.txt
[root@localhost ~]#  cat 3.txt
1.txt
2.txt
[root@localhost ~]# ca t a.txt
ls: 沒法訪問abc.txt: 沒有那個文件或目錄
 
二、輸入「<」
wc -l < 1.txt             #輸入重定向,將1.txt的內容輸入重定向到wc -l
[root@localhost ~]#  wc -l < 3.txt
2
[root@localhost ~]#  2.txt < 3.txt
-bash: 2.txt: 未找到命令
ps:左邊只能是命令
 
command >1.txt 2>&1       
# &1 表示標準正確輸出目標。由於前面已經定義了  >1.txt 標準正確輸出到了 1.txt,因此 &1就是 1.txt
 
 
8.6 管道符和做業控制
cat 1.txt |wc -l             #|管道符,把前面命令的結果交給後面命令執行
 
cat 1.txt  |grep 'aaa'
 
# Ctrl z 暫停一個任務
jobs           #查看後臺任務
 
fg [ id]                   #把任務調到前臺 , 不加id默認最後一次暫停的命令
bg[ id]                   #把任務調到後臺運行,不加id默認最後一次暫停的命令
 
命令後面加&直接丟到後臺運行
例: sleep  100  &
[root@localhost ~]#  sleep 100 &
[4] 3384
[root@localhost ~]#  ls
1.txt  3.txt   anaconda-ks.cfg  a.txt    b.txt
2.txt  aa.txt  asda.txt         bbb.txt  c.txt
[root@localhost ~]#  jobs
[2]+  已中止               sleep 100
[3]-  已中止               sleep 1000
[4]   運行中               sleep 100 &
 
vmstat 1                #顯示實時的系統狀態
sleep 1000            #系統睡眠1000s
 
 
8.7/8.8 shell變量
 
env命令          #查看系統內置變量
set命令          #查看系統內置變量 及用戶自定義的變量
 
自定義變量a=1111
set    |grep  a=1111           #經過管道符,set過濾找到a=1111的變量
[root@localhost ~]# s et |grep a=1111
a=1111
 
一、變量名規則:首位能夠字母、數字下劃線,首位不能爲數字
二、變量值有特殊符號時須要用 單引號括起來
 
三、變量的累加
[root@localhost ~]#  a=1
[root@localhost ~]#  b=2
[root@localhost ~]#  echo $a
1
[root@localhost ~]#  echo $ab
 
[root@localhost ~]#  echo $a$b
12
[root@localhost ~]#  echo a$bc
a
[root@localhost ~]#  echo 'a$b'c
a$bc
[root@localhost ~]#  echo "a$b"c
a2c
[root@localhost ~]#  echo a"$b"c
a2c
 
ps:設置的變量僅在當前shell窗口bash下有效(本地變量,非全局變量)
bash       #建立子shell窗口
 
pstree     #查看當前shell所在窗口
 
四、全局變量export (針對當前終端)
#全局變量只是向下全局子shell,下一層的子shell定義的全局變量不會再上層顯示
export   定義變量名=變量值            #定義全局變量,全部子shell都能顯示
 
 
五、unset   變量名                   #取消掉定義的變量
 
 
8.9 環境變量配置文件
系統層次:
/etc/profile 用戶環境變量,交互,登陸才執行         #用戶登陸時會加載到
/etc/bashrc用戶不用登陸,執行shell就生效            #系統執行shell時用到
 
用戶層次:
/用戶家目錄/.bashrc                       #寫用戶自定義別名
/用戶家目錄/.bash_profile             #寫用戶自定義變量
/用戶家目錄/.bash_history            #用戶存放歷史
/用戶家目錄/.bash_logout            #定義用戶退出時須要作的操做
 
source  .bash_profile ==  .  .bash_profile  
[root@localhost ~]#  source  .bash_profile
[root@localhost ~]#  .  .bash_profile  
 
/etc/bashrc
PS1="[\u@\h \W]\\$ "       #就是[root@localhost ~]#這種
改W爲w,能夠顯示爲絕對路徑
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]#PS1='[\u@\h \w]\$'
[root@localhost ~]#cd /etc/yum.repos.d
[root@localhost /etc/yum.repos.d]#
 
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'                         #改字體顏色

 

 

8.10擴展:bashrc和bash_profile的區別 http://ask.apelearn.com/question/7719 
 
 
8.11課堂筆記
1、
#出現403 forbidden錯誤,緣由是沒有關閉防火牆
Linux防火牆有兩種
一、firewalld
systemctl stop  firewalld          # 關閉防火牆( 臨時
systemctl disable firewalld   #開機不啓動防火牆( 永久
 
二、sexLinux安全機制
有三種狀態
 
enforceing     #sexLinux機制強制地、必須執行
permissive     #sexLinux機制只會打印警告
disabled        #表示可用,沒有sexlinux策略
 
#sexLinux存放位置: /etc/sysconfig/sexlinux(軟鏈接文件)
getenforce                     #查看sexLinux的狀態
 
setenforce 0                   #關閉sexLinux防火牆( 臨時
修改 etc/sysconfig/sexlinux,將sexLinux=Enforcing改成sexLinux= disabled,而後重啓終端就會生效 ( 永久
 
 
2、搭建web服務
#能夠經過ip地址在網上查看放在/var/www/html/下的目錄和文件(前提是要關閉防火牆)
#網站內容默認放在/var/www/html/目錄下
#修改網站內容目錄的文件在/etc/httpd/httpd.conf ,修改DocumentRoot「 」雙引號裏面的目錄便可
搭建步:
一、安裝httpd
yum install -y  httpd
二、將文件軟連接或者放到/var/www/html/目錄下便可
 
 
3、通配符與特殊符號
"^"      # 以什麼開頭  例:   ^[a-z]  ,表示以小寫字母a-z開頭的
"#"      #  註釋
"\"      #轉義字符,將特殊字符或通配符還原成通常字符
";"       #命令銜接符,連續執行兩條命令
"$"      # 取用變量符號
"&"    #工做控制,將指令變成後臺 運行工做
" '' "    #單引號,沒法引用變量
" "" "   #雙引號,能夠引用變量
" `` "    #反引號,表示指令引用,功能同 $(command)
例 : echo=`pwd`
"2>&1"     #表示正確和錯誤的都輸出
例: ls  1.txt 2.txt 2>&1 >>3.txt       #ls 1.txt 和2.txt,將正確和錯誤的信息都追加到3.txt
 
cat  >  qq  << EOF
#cat的同時往qq裏面覆蓋內容寫入
>
>
>EOF         #最後輸入EOF就會結束
 
cat  >>  qq  << EOF
#cat的同時往qq裏面追加內容寫入
 
4、巧用垃圾桶
Linux 下有一個特殊的設備  /dev/null ,全部被寫入該設備的東西都會消失,因此若是有部分信息不想輸出至文件,也不想輸出至屏幕,那就輸出至 /dev/null 吧
 
5、做業控制
ps aux grep| top     #查看系統進程ID
 
殺死進程兩種方式
一、 kill    [signal]  [進程ID]
 
經常使用signal
  • -1: 從新讀取參數的配置文件(相似 reload)
  • -9: 當即強制刪除一個任務
  • -15: 已正常方式結束一個任務
 
二、 pkill  進程名   
 
 
6、shell基礎
一、變量的命名
由字母、數字、下劃線組成,且只能以非數字開頭
 
二、變量的設定
語法:變量名=變量值
注意-1:若是變量值中存在空格,須要用單引號或雙引號將變量值括起來
注意-2:若是變量值中有引用其餘變量,須要 用雙引號將變量值括起來
 
三、export   
# 將變量轉換爲環境變量
語法: export  變量
[root@choco-01 ~]#  echo $full 
 Choco Lee @ China
 [root@choco-01 ~]#  bash
 [root@choco-01 ~]#  echo $full          # 進入子 shell 後, 變量失效 
 [root@choco-01 ~]#  exit
 exit 
 [root@choco-01 ~]#  export full            # 聲明該變量爲環境變量
 [root@choco-01 ~]#  bash
 [root@choco-01 ~]#  echo $full            # 進入子 shell 後, 變量仍讓有效  
Choco Lee @ China
 
四、declare
declare [選項]  <var_name>
選項:
  •   -a:定義變量爲數組
  •   -i:定義變量爲純數字
  •  -x:定義變量爲環境變量
  •   -r:定義變量爲 readonly
 
五、經常使用環境變量
  •  HOME: 當前用戶的家目錄
  •  HOSTNAME: 該主機的主機名
  •  USER: 當前用戶的用戶名
  •  SHELL: 當前使用的 shell 類型
  •  HISTSIZE: 可存儲的歷史命令條數
  •  MAIL: 當前用戶的郵箱
  •  PATH: 可執行命令的所在目錄
  •  LANG: 當前語系
  •  PS1: 命令提示符的格式, 可玩性較高, 但工做中不經常使用, 可自行 man bash 查看 PS1 的設置方法
  •  PS2: 輸入命令時強制換行後的提示符
  • OSTYPE: 當前操做系統類型
  •  MACHTYPE: 安裝的機器類型
  •  HOSTTYPE: 主機的位數, x86 仍是 x86_64
 
六、環境變量配置文件
6.1啓動加載文件順序: (須要掌握)
 
6.2設定環境變量
  • PATH:根據 UID 決定PATH 變量是否要包含 sbin 目錄
  • USER:根據 id 命令的結果,顯示用戶名
  • LOGNAME:等於 USER
  • MAIL:配置好用戶的郵箱
  • HOSTNAME:根據 hostname 指令,決定該變量值
  • HISTSIZE:直接設定歷史命令記錄的條數爲 1000
相關文章
相關標籤/搜索