1. 程式人生 > >Linux基礎03

Linux基礎03

過去 程序退出 特殊 是否 ls -l 百度 不容易 png upd

** 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