概述:命令行解釋器,翻譯程序指令給內核請求調用硬件功能。
通俗來說是:內核和用戶之間的命令解釋器,至關於一個翻譯官。linux
計算機識別:二進制(依賴ASCII
碼錶翻譯)
爲用戶提供了一個 -》Linux
內核(發送請求)-》運行程序
實質:界面系統級程序
用途:啓動、掛起、中止、編寫程序
編程語言:解釋執行的腳本語言,可直接調用Linux
系統命令
Shell:Linux
中的字符界面(接受命令、將命令轉換成二進制)Windows
:有shell
嗎?操做界面能夠稱爲shell
。shell
1.Bourne Shell:從1979起Unix就開始使用bourne shell,bourne shell的主文件名爲sh。 2.C Shell:C Shell主要在BSD版的Unix系統中使用,其語法和C語言相相似而得名。 3.shell的兩種主要語法類型有bourne和C,這二者語法彼此不兼容。
echo $SHELL
查看Shell
Bash:Bash
與sh
兼容,如今使用的Linux
就是使用Bash
做爲用戶的基本Shell
。編程
Linux
支持的shell 目錄vi /etc/shells
。緩存
幫助管理員簡化管理linux系統的一種腳本語言,簡化管理操做
。沒有像Java、PHP等語言複雜的功能。bash
格式:
echo
[選項] [輸出內容]
選項: -e
:支持反斜線控制的字符轉換服務器
\a - 輸出警告音 \b - 退格符 \n - 換行符 \r - 回車鍵 \t - 製表符,也就是tab鍵 \v - 垂直製表符 \0nnn - 按照八進制ASCII碼輸出字符 \xhh - 按照十六進制ASCII表輸出字符
echo "bols he cangls ni xihuan nayige"
echo -e "bols he cangls nib xihuan nayige"
echo -e "hellbo"
echo -e "htetlnltot"
echo -e "x68tx65tx6cnx6ctx6f"
echo -e "e[1;31mShell基礎e[0m"編程語言
輸出顏色:spa
\e[1;xxm
- 開啓顏色顯示;\e[0m
- 關閉顏色顯示
30m
=黑色,31m
=紅色,32m
=綠色,33m
=黃色34m
=藍色,35m
=洋紅,36m
=青色,37m
=白色命令行
方法1:賦予執行權限,直接運行翻譯
chmod 755 hello.sh
./hello.sh
(或者絕對路徑執行 /root/hello.sh
)
方法2:經過Bash
調用執行腳本
bash hello.sh
註解:#
第一行:#!/bin/Bash
不是註釋,它標稱下面的內容是Linux
的標準腳本程序
若是該腳本使用純shell語句完成,不加#!/bin/Bash
,運行沒問題
但,腳本調用了其餘語言,就會報錯。
alias
:查看系統中全部的命令別名
alias ls = 'ls --color=never'
設定別名(臨時生效,重啓或重登陸後失效)
alias 別名=‘原命令’(臨時的)
永久生效vi ~/.bashrc
(不止一個環境變量文件) --寫入環境變量配置文件(~
表明用戶家目錄)vi /root/.bashrc
--增長alias ls = 'ls --color=never'
(系統再次重啓後永久生效)source .bashrc
--使當前環境變量設置生效(不須要系統再次重啓後永久生效)
刪除別名:unalias ls
命令生效順序
第一順位執行絕對路徑或者相對路徑的命令
第二順位執行別名
第三順位執行Bash的內部命令
第四順位執行按照$PATH環境變量設置定義的目錄順序的第一個命令
ctrl + c 強制終止 ctrl + l 清屏至關於clear ctrl + a 光標快速回到行首 ctrl + e 光標快速去到行尾 ctrl + u 從光標所在位置刪除到行首 ctrl + z 把命令放入後臺--這個命令很謹慎使用 ctrl + r 歷史命令搜索
歷史命令指的是把操做過的命令保留在系統當中, 當須要的時候能夠從新進行調用。
cat ~./history
, 該文件下記錄的命令是上次登陸, 正確註銷以後保存的。history
命令查看, 不止有以前保存下來的, 還有本次登陸後新操做的命令, 這些命令只有本次正確退出以後纔會寫入 ~./bash_history
。
history [選項] [歷史命令保存文件]
選項:
-c : 清空歷史命令 # 不建議清空緣由1 : 當本次操做出現錯誤可用過歷史命令進行比對排錯 # 不建議清空緣由2 : 當登陸後發現歷史命令被清空, 則可判斷出有人登陸過該帳戶或服務器 # 不建議清空緣由3 : 即便命令保存數目衆多, 文件大小也不大, 不會給服務器形成多大壓力 -w : 把緩存中的歷史命令強制寫入歷史命令保存文件 ~/.bash_history
歷史命令默認保存1000條, 能夠再環境變量配置文件 /etc/profile
中進行修改 (HISTSIZE
)
歷史命令的調用:
使用上、下箭頭調用之前的歷史命令 使用 "!n" 重複執行一次第 n 條歷史命令 使用 "!!" 重複執行一次上一條命令 使用 "!字串" 重複執行一次最後一條以該字串開頭的命令
如執行service network restart
後再輸入!ser
,就是執行一樣命令。
命令與文本補全
Bash
中, 命令
,目錄
與文件補全是很是方便與經常使用的功能, 咱們只要在輸入命令或文件時, 按"Tab
"鍵就會自動進行補全。關於2>&1的含義
將標準錯誤輸出重定向到標準輸出
>&
是一個總體,不可分開,分開後就不是上述含義了。 好比有些人可能會這麼想:2是標準錯誤輸入,1是標準輸出,>是重定向符號,那麼」將標準錯誤輸出重定向到標準輸出」是否是就應該寫成」2>1」就好了?是這樣嗎? 若是是嘗試過,你就知道2>1的寫法實際上是將標準錯誤輸出重定向到名爲」1」的文件裏去了Q&A : 每次都寫」>log 2>&1」太麻煩,能簡寫嗎?
有如下兩種簡寫方式
1. &>log 2. >&log
上面兩種方式都和」>log 2>&1」一個語義。
那麼 上面兩種方式中&>和>&有區別嗎?
語義上是沒有任何區別的,可是第一中方式是最佳選擇,通常使用第一種
命令 &> /dev/null
將命令的結果丟入null
(做用相似於垃圾箱)中 只執行,不顯示.
wc [選項] [文件名]
選項:
-c:統計字節數 -w:統計單詞數 -l:統計行數
wc <
文件名 用文件的內容做爲輸入 wc <<
標識符
...標識符
把標識符之間內容做爲命令的輸入
腳本中的應用:
命令 && echo yes || echo no
命令正確yes
錯誤no
注意: && echo yes || echo no
順序不能顛倒,否則命令出錯的時候會同時輸出no yes
。
分頁顯示文件內容:
more [文件名]
管道符:
命令1 | 命令2
命令1正確的結果
做爲命令2的操做對象。
例如
ls -l > /etc/ | more 用於分頁顯示命令執行結果 netstat -an | grep ESTABLISHED | wc -l 用於查看當前鏈接本機的客戶端,並統計客戶端數量
1.? 匹配任意一個字符 2.* 匹配0個或任意多個字符 3.[] 匹配括號中任意一個字符 4.[-]匹配括號中任意一個字符,-表明一個範圍 5.[^]匹配不是括號中任意一個字符
如:ls test*
Bash中其餘特殊符號:
'' 單引號,在單引號中左右的特殊符號,如$,&都沒有特殊含義 "" 雙引號,在雙引號中左右的特殊符號都沒有特殊含義,可是「$」,"`","\"是例外。擁有「調用變量的值」,「引用命令」和「轉義符」的特殊含義 `` 反引號,反引號括起來的內容是系統命令,在Bash中會先執行它。和$()做用同樣。 $() 用來引用系統命令 # 在Shell腳本中,#開頭的行表明註釋 $ 用於調用變量的值,如須要調用變量name的值時,須要用$name的方式獲得變量的值 \ 轉義符,跟在\以後的特殊符號將失去特殊含義,變爲普通字符。如\$將輸出"$"符號