Linux基礎03
** Linux基本操作常用命令(三)
** Linux的軟件包
Linux的軟件把分為“源碼包”和“二進制包”
源碼包:免費,開源
二進制包:系統默認包,即RPM包(上一節我們通過rpm卸載過openJDK),比較常用
特點:
* 經過編譯
* 安裝,卸載,升級,查詢直接使用命令來操作即可
* 安裝速度比源碼包更快,省略編譯過程。
* 安裝具有依賴性
比如:安裝某個包03,前提需要安裝了某個包02,而安裝某個包02,又需要提前安裝某個包01,即,在安裝包03時,如果沒有安裝前幾個包,那麽該包03是無法直接安裝的。
** rpm命令
1、centos主要管理方式:RPM
2、rmp管理以rpm結尾的包
(接下來我們要使用這個命令安裝個rpm程序試試)
3、掛載光驅
mount /dev/cdrom /media/
即掛載光驅 到 掛載點media
掛載成功後,出現:
光驅文件為只讀,不可寫4、進入該光盤,即切換到該光驅的掛載點目錄
cd /media/
之後使用ls -l命令,查看該光驅下的文件結構:
切換到Packages目錄下,查看該目錄文件,你會發現全是以.rpm結尾的安裝包:
在此你可以使用ls | wc -l來查看該目錄下一共有多少個rpm安裝包5、安裝
使用命令:rpm -ivh zlib-devel-1.2.7-15.el7.x86_64.rpm
zlib-devel-1.2.7-15.el7.x86_64.rpm為某個安裝包,記得使用tab鍵來智能補全,不然你需要自己把文件名打全。
參數解釋:
-i:安裝
-vh:顯示安裝時的進度
6、卸載
rpm -e zlib-devel-1.2.7-15.el7.x86_64
rpm
參數解釋:
-e:卸載
7、查詢
rpm -qa 查看當前系統有哪些已經安裝好的rpm包
-q:query查詢
-a:all全部
8、查詢文件屬於哪個rpm安裝包
rpm -qf /etc/ntp.conf
參數解釋:
-f:file文件
** yum命令
1、批量解決rpm依賴性問題
我們使用rpm命令安裝某一個文件時,需要解決一系列依賴問題,即,安裝包03,需要先找到並安裝包02,安裝包02,需要找到並安裝包01,這樣操作很麻煩,效率也比較低,yum命令可以自動找到並安裝所有依賴,很方便。
2、查詢
yum list
該命令可以列出系統中所有已經安裝包的rpm包,例如:
3、右邊的updates表明已安裝的包有更新可用
4、安裝
yum -y install httpddevel.x86_64,即安裝httpddevel.x86_64
安裝過程依賴於網速5、卸載
yum -y remove httpddevel.x86_64
(尖叫提示:-y表明yes,即批量安裝依賴包的時候,會有確認提示,yes or no,-y,即全部yes,簡單粗暴)
6、yum倉庫
路徑:/etc/yum.repos.d/
配置:CentOS-Base.repo就是以.repo結尾的
gpgcheck=1代表是否開啟校檢(0為不開啟)
gpgkey=校檢公鑰所在位置
7、常見錯誤:
* 外網不同:檢查網卡設置,檢查IP設置,檢查DNS設置
* 無法下載:檢查倉庫是否正確
** shell編程
什麽是shell,我建議你百度一下。
簡而言之:即shell解釋層,用於外層應用程序和內存交互的,例如你使用的ls命令,就是一個ls腳本,即名字為ls的shell腳本,ls是個命令,可以理解為ls是一個文件,文件裏保存的是一系列代碼,該代碼稱之為shell腳本,使用ls命令的過程,就是執行文件名為ls的腳本的過程。
顯示當前系統支持的shell環境:
其中Linux中最常用的shell是bash
1、環境變量
保存系統運行時的環境變量
用戶變量:
.bash_profile
每個用戶下都有一個用來保存每一個用戶的環境變量,對於其他用戶不共享
系統變量:
/etc/profile
系統全局生效的配置文件,系統下所有的用戶共享該文件
(尖叫提示:這個和windows下的管理模式是一樣的)
2、位置變量
將傳遞給腳本的參數保存位置變量中以便於在腳本中引用這些參數,類似於編程中,函數的形參。
bash中定義了9個位置變量:$1.....$9
$0則代表腳本名稱
現在創建一個.sh腳本,例如vi zz01.sh,內容如下:
#!/bin/bash
echo $0
echo $2
echo $3
echo $1
傳遞參數要以空格隔開,如圖:
#!/bin/bash這句話的意思是:標識當前sh腳本為bash
接下來,執行該腳本,sh zz01.sh aa bb cc dd
其中aa bb cc dd為參數,輸出結果:
dd其實也是傳遞進去了,但是處於第4個位置,而我們的腳本中沒有使用echo打印第四個位置的參數,所以沒有顯示,大家仔細對比一下就能發現規律。
3、預定義變量
$0:當前腳本名稱
$!:進程PID,每一個進程都有一個編號
$$:當前進程ID號
$#:當前shell的參數個數
$*:顯示所有參數內容(整體)
$@:顯示所有參數內容(逐個讀取)
$?:判斷,表示程序退出的代表(返回0表示成功,返回非0表示失敗)
4、自定義變量
語法格式:
name=[value]
等號兩邊不能有空格,變量名大小寫敏感,定義好以後使用$變量名來調用變量的值
例如:a=2 echo $a
5、邏輯符號
&&:邏輯與
cmd1 && cmd2
具有短路作用
例如:
cat /etc/passwd && mkdir zzz/
解釋:
查看該文件如果不成功(比如文件不存在),那麽就不會執行mkdir zzz/這個命令,反之則執行該命令
||:邏輯或
cmd1 || cmd2
具有短路作用
例如:
cat /etc/passwd || mkdir zzz/
解釋:
如果查看該文件成功,則mkdir zzz/指令就直接短路不執行,反之,則執行後邊命令
無邏輯符號
cmd1 ; cmd2
例如:
cat /etc/passwd ; mkdir zzz/
解釋:
依次執行這兩個命令
6、算數運算
格式:
1、$((表達式))
2、$[表達式]
3、expr 表達式
例如:
a=10
b=20
1、echo $((a+b))
echo $(($a+$b))
2、echo $[a+b]
echo $[$a+$b]
3、expr a+b
expr $a+$b
乘法:expr $a \* $b
註意:\*此處左右兩邊有空格
7、內置測試判斷
數值測試:
-eq:等於
-ne:不等於
-le:小於等於
-ge:大於等於
-lt:小於
-gt:大於
例如:[ 2 -eq 2] 則返回結果為真,以此類推
字符串測試:
=:等於則為真
!=:不相等則為真
-z:字符串長度為空則為真
-n:字符串長度不為空則為真
文件測試:
-e 文件名:如果文件存在則為真
-r 文件名:如果文件存在且可讀則為真
-w 文件名:如果文件存在且可寫則為真
-x 文件名:如果文件存在且可執行則為真
-s 文件名:如果文件存在且至少有一個字符則為真
-d 文件名:如果文件存在且為目錄則為真
-f 文件名:如果文件存在且為普通文件則為真
-c 文件名:如果文件存在且為字符型特殊文件則為真
-b 文件名:如果文件存在且為塊特殊文件則為真
Linux還提供了非(!)、或(-o)、與(-a)三個邏輯操作符,用於將測試條件連接
優先級順序:!> -a > -o
8、時間命令
date:時間命令,用語查看當前系統時間,例如:
修改時間:-s,例如:
date -s "2015-05-09 10:20:30",如圖:
查看時間:
date "+%Y%m%d%H%M",如圖:
其中YmdHM各代表什麽,自己對照即可明白。
時間操作:
回到5天前:
date -d ‘5 day ago‘ ‘+%Y%m%d%H%M‘,如圖:
具體其他用法可以使用man命令查看,如果忘記,請滑動至頁面底部查看9、書寫shell腳本的規範
* 一般以.sh結尾,方便識別文件類型
* 一般開頭加上註釋:#!/bin/bash 以表明這是bash shell
(尖叫提示:bash shell是centos系統默認的shell環境)
10、for循環
語法1:
語法2:
例子1:vi for01.sh,編輯內容如下:
執行:sh for01.sh,結果如下:
例子2:vi for02.sh,編輯內容如下:
\t為制表符table
(尖叫提示:如果do和for不在一行,則可以省略分號;)
執行:sh for02.sh,結果如下:
11、while循環
語法1:
語法2:
例子1:vi while01.sh,編輯內容如下:
執行:sh while01.sh,結果如下:
let關鍵字解釋:
如果只是 let a=1 和 a=1,它們沒有區別,但是 let 還可以用於帶賦值的運算,例如
let a=1+5
echo $a
得到計算結果 6,而
a=1+5
echo $a
得到一個字符串 1+5
例子2:vi while02.sh,內容如下:
該腳本用語讀取passwd文件的每一行並打印出來
執行:sh while02.sh,結果如下:
12、awk命令
該命令一言兩語無法解釋清楚,請大家參看該博客(為尊重作者,請大家鏈接過去)
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
簡單例子:
cat /etc/passwd | awk -F ‘:‘ ‘{print $1"\t"$2}‘
13、if命令
語法1:
語法2:
例子1:vi if01.sh,編輯內容如下:
執行:sh if01.sh,結果如下:
例子2:vi if02.sh,內容編輯如下:
功能解釋:是否存在目錄./123,如果存在,則列出該目錄下的文件,如果不存在,則創建該目錄
執行:sh.if02.sh,結果如下:
可以看到創建出了123這個目錄
14、case語句
語法1:
語法2:
例子1:vi case01.sh,編輯內容如下:
執行:sh case01.sh gameover,如圖
如果傳入的參數沒有匹配到case,則默認執行*)通配條件。(如上圖的aaa參數)
** 額外:
(尖叫提示:使用man命令可以查看某個命令的具體幫助)
(尖叫提示:使用which命令,可以查看該命令的具體位置,比如:which vi,如圖:)
(尖叫提示:使用rpm -qf 命令傳入具體位置,可以查看命令路徑的安裝包,如圖:)
** 總結
判斷測試符可能比較零碎,不容易記憶,多操作即可。循環語法之類的東西,理解其中1,2即可觸類旁通,重在理解。
個人微博:http://weibo.com/seal13
QQ大數據技術交流群(廣告勿入):476966007
作者:Z盡際
鏈接:https://www.jianshu.com/p/21cd6afa40f7
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
Linux基礎03