1. 程式人生 > 實用技巧 >Linux基本使用

Linux基本使用

Linux

教程:兄弟連的Linux教程

Linux是一套免費使用和自由傳播的類Unix作業系統,是一個基於POSIX和Unix的多使用者、多工、支援多執行緒和多CPU的作業系統。它能執行主要的Unix工具軟體、應用程式和網路協議。它支援32位64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多使用者網路作業系統。

一、Linux由來

Linux系統誕生於1991年,由芬蘭大學李納斯和後來陸續加入的眾多愛好者共同開發完成。

Linux是開源軟體,原始碼開放的UNIX。

二、Linux發展

Linux主要版本:

LAMP代表

  • L : linux 作業系統
  • A : Apache Web伺服器
  • M : Mysql資料庫
  • P : PHP語言

三、Linux應用領域

  • 基於Linux企業伺服器
  • 嵌入式應用
  • Linux在電影娛樂業

四、Linux分割槽

4.1、分割槽

Linux系統只能有4個分割槽,3個主分割槽,1個擴充套件分割槽。而擴充套件分割槽可以再次分4小分割槽?

4.2、格式化

寫入檔案格式,通常一個新硬碟,都是需要格式化,才能進行儲存檔案內容的,而格式化就是寫一個架子來規定硬碟可以儲存什麼樣的檔案,在Linux中有EXT2EXT3EXT4

4.3、分割槽裝置檔名

系統自己做的,對於我們來說是透明的

4.4、掛載

就像於給分割槽分配實際記憶體,比如Windows中C盤有100G的空間

Linux中,必須分割槽

  • /(根分割槽)

  • swap分割槽(交換分割槽,記憶體2倍,不超過2G)

  • 推薦分割槽

    • /boot(啟動分割槽,200MB)

五、VMware網絡卡之間關係

VMware虛擬機器中的網路選項

橋接模式 --- 使用的是真實網絡卡就是從路由中分配IP

NAT 模式 ---- 使用VMware 8網絡卡通訊

僅主機模式 --- 使用VMware1網絡卡通訊

六、Linux學習建議

6.1、Linux不靠副檔名區分檔案型別

  • 壓縮包:*.gz*.bz2*.tar.bz2*.tgz
  • 二進位制軟體包:*.rpm
  • 指令碼檔案:*.sh
  • 配置檔案:*.conf

七、Linux常用命令

7.1、檔案處理命令

以點開頭的檔案就是隱藏檔案

命令格式

命令 [-選項] [引數]

ls -a /etc

  • 命令名稱:ls

  • 命令英文原意:list

  • 命令所在目錄:/bin/ls

  • 命令執行許可權:所有使用者

  • 功能描述:顯示目錄檔案

  • 語法:`ls 選項[-aldh] [檔案或目錄]

    • -a 顯示所有檔案,包括隱藏檔案
    • -l 詳細 資訊顯示
    • -d 檢視目錄屬性
    • -i 顯示ID
    • -h 以單位(KB、MB)顯示檔案大小

檔案頭表示意義

d開頭表示是一個資料夾

-開頭表示是一個檔案

-rw-r--rr--rw對應root所屬人,-r對應所屬組,那麼r、w、x都是意思呢?

r:讀

w:寫

x:執行

7.1.2、目錄處理命令

建立一個目錄

  • 命令名稱:mkdir

  • 命令英文原意:make directories

  • 命令所在路徑:/bin/mkdir

  • 執行許可權:所有使用者

  • 語法:mkdir -p [目錄名]

  • 功能描述:建立新的目錄

    • -p 代表遞迴建立
  • 示例

  • mkdir -p /tmp/project/c
    mkdir /tmp/project/c++
    

進入目錄

cd

cd ../返回上級目錄

cd ./同級目錄

檢視當前所有路徑

命令名稱:pwd

命令英文原意:print working directory

命令所在路徑:/bin/pwd

執行許可權:所有使用者

語法:pwd

功能描述:顯示當前目錄

示例:

pwd
/tmp/project/c

刪除資料夾

刪除目錄

命令名稱:rmdir

命令英文原意:remove empty directories

命令所在路徑:/bin/rmdir

執行許可權:所有使用者

語法:rmdir [目錄名]

功能描述:只能刪除空目錄,所以此命令用的少

示範

rmdir /tmp/project/c

檔案拷貝

命令名稱:cp

命令英文原意:copy

命令所在路徑:/bin/cp

執行許可權:所有使用者

語法:cp -rp [原檔案路徑] [目標檔案路徑]

​ -r 複製目錄

​ -p 保留原檔案屬性

功能描述:複製檔案或目錄,目錄需要帶上-r

示例

cp -r /tmp/project/c /home/roo

也可以一次性賦值多個目錄
cp -r /tmp/project/c /tmp/project/c++ /home/root


剪下、改名檔案或目錄

命令名稱:mv

命令原意:move

命令所在目錄:/bin/mv

執行許可權:所有永輝

語法:mv [原檔案或目錄路徑] [目標目錄]

功能:剪下檔案、改名

示例:

mv /tmp/pro/c /home/roo

改名
mv /tmp/pro/c++ /tmp/pro/c

刪除檔案或目錄

命令名稱:rm

命令英文原意:remove

命令所在路徑;/bin/rm

執行許可權:所有使用者

語法:rm -rf [檔案或目錄]

​ -r 刪除目錄

​ -f 強制刪除

功能描述:刪除檔案

示例

rm /tmp/pro/c

7.1.3、檔案處理命令

建立檔案

命令名稱:touch

命令所在路徑:/bin/touch

執行許可權:所有使用者

語法:touch [檔名]

功能描述:建立空檔案

示例:touch /tmp/Hello.java

注意事項:可以建立帶有空格的檔案,必須加雙引號才行,不然會當做兩個檔案來建立

如:touch Project File 會當做兩個檔案

解決辦法是加上雙引號:touch "C++ Java Project"

顯示檔案全部內容

命令名稱:cat

命令所在路徑:/bin/cat

執行許可權:所有使用者

語法:cat [檔名]

​ -n 顯示行號

功能描述:顯示檔案內容

示例:cat /etc/issue

​ cat -n /etc/issue

倒序顯示檔案全部內容

命令名稱:tac

命令所在路徑:/bin/tac

執行許可權:所有使用者

語法:tac [檔名]

​ -n 顯示行號

功能描述:顯示檔案內容

示例:tac /etc/issue

​ tac -n /etc/issue

顯示檔案內容帶分頁

命令名稱:more

命令所在路徑:/bin/more

執行許可權:所有使用者

語法:more [檔名]

​ (空格) 或 f 翻頁

​ 回車 換行

	  q或Q				退出

功能描述:分頁顯示檔案內容

示例:more /etc/servimces

分頁顯示檔案內容帶上下翻頁

命令名稱:less

命令所在路徑:/usr/bin/less

執行許可權:所有使用者

語法:less [檔名]

​ PU 和 PD 上一頁,下一頁

​ 回車 換行

	  q或Q				退出			

​ 輸入/ 再輸入關鍵字進行搜尋,再輸入n表示下一個

功能描述:分頁顯示檔案內容(可向上翻頁)

示例:less /etc/servimces

顯示檔案前面幾行內容

命令名稱:head

命令所在路徑:/usr/bin/head

執行許可權:所有使用者

語法:head [檔名]

​ -n 指定行數

示例:head -n 20 /etc/servimces

如果不指定預設顯示前10行

顯示檔案末尾內容

命令名稱:tail

命令所在路徑:/usr/bin/tail

執行許可權:所有使用者

語法:tail [檔名]

​ -n 執行從尾部開始顯示幾行

​ -f 動態顯示檔案預設內容

示例:tail -n 18 /etc/servimces

7.1.4、連結命令

連結檔案 軟連線 or 硬連結

命令名稱:ln

命令影院原意:link

命令所在路徑:/bin/ln

執行許可權:所有使用者

語法:ln -s [原檔案] [目標檔案]

​ -s 建立軟連線

​ 去掉-s硬連結

功能描述:生成連結檔案

軟連結與硬連結的區別

軟連結:像是一個windows中的快鍵方式

硬連結:是一個檔案的拷貝 + 同步更新

7.2、許可權管理命令

7.2.1、許可權管理命令chmod

命令名稱:chmod

命令英文原意:change the permissions mode of a file

命令所在路徑:/bin/chmod

執行許可權:所有使用者

語法:

  1. chmod [{ugoa} {+-=} {rwx} [檔案或目錄]]

    符號 代表
    u 所屬者
    g 所屬組
    o 其他人
    a 所有人
    對應字母 所代表的許可權
    r
    w
    x 執行
  2. chmod [許可權數字 [檔案或目錄]]

    許可權對應數字
    r 4
    w 2
    x 1
  3. 引數 : -R 遞迴修改,就是修改目錄中所有許可權

功能描述:改變檔案或目錄的許可權

以字元方式修改許可權

-rw-r--r-- 1 root root 0 Apr 29 17:56 Hello.java

chmod u=rwx Hello.java

-rwxr--r-- 1 root root 0 Apr 29 17:56 Hello.java

以數字修改許可權

chmod 774 Hello.java

[root@iZ8vb6xljiklnfnmawnio3Z temp]# chmod 774 Hello.java

7.2.2、其他許可權管理命令

修改檔案或目錄所屬者

命令名稱:chown

命令英文原意:change file ownership

命令所在路徑;/bin/chown

執行許可權:所有使用者

語法:chown [所屬者] [檔案或目錄]

功能描述:改變檔案或目錄的所有者

示例:chown xiaoxin /temp

​ 修改/temp目錄所屬者為:xiaoxin

改變檔案或目錄所屬組

命令名稱:chgrp

命令英文原意:change file group ownership

命令所在路徑:/bin/chgrp

執行許可權:所有使用者

語法:chgrp [使用者組] [檔案或目錄]

功能描述:改變檔案或目錄所屬組

示例:chgrp xiaoxin /tmp/temp

​ 改變/tmp/temp目錄使用者組為xiaoxin

修改預設建立檔案或目錄的許可權

命令名稱:umask

命令英文原意:the user file-creation mask

命令所在路徑:Shell內建命令

執行許可權:所有使用者

語法:umask [-S]

​ -S 以rwx形式顯示新建檔案預設許可權

功能描述:顯示、設定檔案的預設許可權

示例:umask -S

注意事項

  1. 如果加上-S引數以可讀方式顯示
  2. 如果沒有加上-S是數字方式顯示,而且數字方式不是正常閱讀的,需要用777-得到的數字等於的就是許可權表示
[root@iZ8vb6xljiklnfnmawnio3Z ~]# umask 
0022

777 - 0022 = 0755  ===> -rwx r-x r-x

7.3、檔案搜尋命令

命令名稱:find

命令所在路徑:/bin/find

執行許可權:所有使用者

語法:find [搜尋範圍] [匹配條件]

功能描述:檔案搜尋

7.3.1、find各種使用方法以及舉例

7.3.1.1、根據名字查詢找

find /etc/ -name init

不區分大小寫查詢

find /etc/ -iname init

模糊查詢

find / -name *init* # 查詢包括init字元的檔案
find / -name init???    # init開頭後面3個位置字元的檔名

7.3.1.2、根據檔案大小查詢

linux中檔案大小劃分

1資料塊 ======== 521位元組 0.5kb

100MB === 102400KB

find / -size +大小
符號代表 作用
+n 大於n
-n 小於n
n 等於

7.3.1.3、根據檔案或目錄所屬者查詢

find /home -user xiaoxin   # 根據所屬者查詢
find /home -group xiaoxin  # 根據所屬組查詢

7.3.1.4、根據檔案屬性來查詢

find /etc -cmin -5
# 在/etc目錄下查詢被修改過屬性的檔案和目錄

引數

  • amin訪問時間
  • cmin問價耐屬性
  • mmin檔案內容

7.3.1.5、根據檔案型別查詢

  • -type
    • f 檔案
    • d 目錄
    • l 軟連線檔案

find /etc -name init -a -type f

7.3.1.6、根據i編號查詢

根據檔案的編號來查詢檔案或目錄

find / -inum 1179683

7.3.1.7、邏輯命令 與 或

  • -a 就是與
  • -o 就是或

示例

find /etc -size +100 -a size -200

7.3.1.8、根據查詢結果進行篩選顯示

find /etc -name init -exec ls -l {} ;

就是對查詢結果進行再一次操作,還可以再次進行篩選

-exec相當於連線另一個命令的意思

7.3.2、其他搜尋命令

7.3.2.1、檔案搜尋命令,與find類似,但是比它快

命令名稱:locate

命令所在路徑:/usr/bin/locate

執行許可權:所有使用者

語法:locate 檔名

功能描述:在檔案資料庫中查詢檔案

範圍:locate init

find命令的比較,locate命令查詢比find命令快,但是有缺點,locate命令是通過一個檔案來查詢的,所以他快,但是有時候,你新建裡的檔案,var/lib/mlocate沒有更新到最新建立的檔案,就會搜尋不到,如果想要解決,就需要updatedb命令來更新一下檔案

7.3.2.2、命令搜尋工具

命令名稱:which

命令所在路徑:/usr/bin/which

執行許可權:所有使用者

語法:which命令

功能描述:搜尋命令所在目錄以及別名資訊

示例:which cp

另一個命令搜尋工具,搜尋出來的命令帶命令的幫助文件位置

命令名稱:whereis

命令所在路徑:/usr/bin/whereis

執行許可權:所有使用者

語法:whereis [命令名稱]

功能描述:搜尋命令所在目錄及幫助文件路徑,以及配置檔案所在位置

示例:whereis ls

7.3.2.3、檔案內容搜尋

命令名稱:grep

命令所在路徑:/bin/grep

執行許可權:所有使用者

語法:grep -i v [指定字串] [檔案]

功能描述:在檔案中搜尋字串匹配的行並輸出

​ -i 不區分大小寫

​ -v 排除指定字串

示範:grep mysql /root/install.log

grep "on an" /etc/issue

幫助型別

1:命令幫助

5:配置檔案幫助

7.4、幫助命令man

命令名稱:man

命令英文原意:manual

命令所在路徑:/usr/bin/man

執行許可權:所有使用者

語法:man [命令或配置檔案]

功能描述:獲取幫助資訊

示例:

  • 獲取命令的幫助man ls
    • 檢視ls命令的幫助資訊,是less和more命令的組合
  • 獲取配置檔案的幫助man servimces
    • 檢視配置檔案servimces的幫助資訊
    • 在獲取配置資訊的幫助的時候不要帶上絕對路徑

7.4.1、幫主命令help獲取Shell內建命令的幫助

命令名稱:help

命令所在路徑:Shell內建命令

執行許可權:所有使用者

語法:help 命令

功能描述:獲取Shell內建命令的幫助資訊

示例:help cd

7.4.2、簡介獲取命令資訊whatis

命令名稱:whatis

命令所在路徑:/usr/bin/whatis

語法:whatis 命令

示例:whatis cp

7.4.3、簡介獲取配置檔案資訊apropos

命令名稱:apropos

命令所在路徑:/usr/bin/apropos

語法:apropos 配置檔案

示例:apropos servimces

7.5、使用者管理命令

7.5.1、新增使用者useradd

命令名稱:useradd

命令所在路徑:/usr/sbin/useradd

執行許可權:root

語法:useradd使用者名稱

功能描述:新增新使用者

示例:useradd xiaoxin

7.5.2、設定密碼passwd

命令名稱:passwd

命令所在領:/usr/bin/passwd

執行許可權:所有使用者

語法:passwd 使用者名稱

功能描述:設定使用者密碼

示例:passwd xiaoxin

7.5.3、檢視登陸使用者資訊who

命令名稱:who

命令所在領:/usr/bin/who

執行許可權:所有使用者

語法:who

功能描述:檢視登陸使用者資訊

示例:who

7.5.4、更加詳細檢視登陸使用者資訊w

命令名稱:w

命令所在路徑:/usr/bin/w

執行許可權:所有使用者

語法:w

功能描述:檢視登陸使用者詳細資訊

示例:w

7.6、壓縮解壓命令

7.6.1解壓縮gzip、

壓縮

命令名稱:gzip

命令所在路徑:/bin/gzip

執行許可權:所有使用者

語法:gzip [檔案]

功能描述:只能壓縮檔案

壓縮後文件格式:.gz

注意事項:壓縮後,原檔案就會沒有

解壓

命令名稱:gunzip

命令所在路徑:/bin/gunzip

執行許可權:所有使用者

語法:gunzip [壓縮檔案]

功能描述:加壓縮.gz的壓縮檔案

壓縮後文件格式:gz

注意事項:解壓後,原壓縮檔案就會沒有

7.6.2、解壓縮tar

壓縮

命令名稱:tar

命令所在路徑:/bin/tar

執行許可權:所有使用者

語法:tar 選項[-zcf] [壓縮後文件名] [目錄]

​ -c 打包

​ -v 顯示詳細資訊

​ -f 指定檔名

​ -z 打包同時壓縮

功能描述:打包目錄:

壓縮後文件格式.tar.gz

注意事項:

  1. 如果想要打包的同時壓縮命令一定要這麼寫:tar -zcf 名字.tar.gz] [要壓縮的目錄]

解壓縮tar

tar命令加壓縮語法:

​ -x 解包

​ -v 顯示詳細資訊

​ -f 執行解壓檔案

​ -z 解壓縮

示例:tar -zxvf [需要解壓名.tar.gz]

注意事項:

  1. 這裡順序也不能換tar -zxvf [需要解壓名.tar.gz]也就是說先要加壓縮,在解包

7.6.3、解壓縮zip

壓縮

命令名稱:zip

命令所在路徑:/usr/bin/zip

執行許可權:所有使用者

語法:zip 選項[-r] [壓縮後的檔名] [檔案或目錄]

-r是壓縮目錄所用到的

壓縮後的檔案格式:.zip

解壓

命名名稱:unzip

命令所在目錄:/usr/bin/unzip

執行許可權:所有使用者

示例:unzip test.zip

7.6.4、壓縮命令bzip2

壓縮

命令名稱:bzip2

命令所在路徑:/usr/bin/bzip2

執行許可權:所有使用者

語法:bzip2 選項[-k] [檔案]

引數說明:-k產生壓縮檔案後保留原本檔案

壓縮後文件格式:.bz2

示例:bzip2 -k temp

tar -cjfv JavaProject.tar.bz2 JavaProject

解壓

命令名稱:bunzip2

命令所在路徑:/usr/bin/bunzip2

執行許可權:所有使用者

語法:bunzip2 選項[-k] [壓縮檔案]

-k 解壓後保留原檔案

示例:bunzip2 -k temp.bz2

tar -xjf Java.tar.bz2

7.7、網路命令

7.7.1、write給本地使用者傳送資訊

指令名稱:write

所在路徑:/usr/bin/write

執行許可權:所有使用者

語法:write <使用者名稱>

功能描述:給本地使用者發信息,以Ctrl + D儲存結束

示例:write xiaoxin

7.7.2、wall-給所有使用者傳送資訊

指令名稱:wall

所在路徑:/usr/bin/wall

執行許可權:所有使用者

語法:wall [message]

示例:wall 訊息

7.7.3、ping-傳送網路請求

命令名稱:ping

命令所在路徑:/bin/ping

執行許可權:所有使用者

語法:ping [-c] IP地址

-c 執行傳送次數

示例:ping www.baidu.com 會一直髮送,Ctrl+D結束

ping -c 3 www.baidu.com 3次結束

7.7.4、ifconfig-檢視網路

命令名稱:ifconfig

命令所在路徑:/sbin/ifconfig

執行許可權:root

語法:ifconfig 網絡卡名稱 IP地址

功能描述:檢視和設定網絡卡資訊

示例:ifconfig eth0 192.168.8.250

ifconfig 只是檢視網路資訊

7.7.5、last-列出過去登入系統的使用者資訊

命令名稱:last

命令所在路徑:/usr/bin/last

執行許可權:所有使用者

語法:last

功能描述:列出目前與過去登入系統的使用者資訊

示例:last

7.7.6、lastlog-特定使用者最後登入時間

命令名稱:lastlog

命令所在路徑:/usr/bin/lastlog

執行許可權:所有使用者

語法:lastlog

功能描述:檢查某特定使用者上次登入的時間

示例:lastlog -u 使用者ID

7.7.7、traceroute-檢視資料到主機間路徑

命令名稱:traceroute

命令所在路徑:/bin/traceroute

執行許可權:所有使用者

語法:traceroute

功能描述:顯示資料包到主鍵間路徑

示例:traceroute www.baidu.com

詳細看:https://commandnotfound.cn/linux/1/335/traceroute-%E5%91%BD%E4%BB%A4

7.7.8、netstat-顯示網路相關資訊

命令名稱:netstat

命令所在路徑:/bin/netstat

執行許可權:所有使用者

語法:netstat [引數]

引數:

  1. -t : TCP協議
  2. -u:UDP協議
  3. -l:監聽
  4. -r:路由
  5. -n :顯示IP地址和埠號

功能描述:顯示網路相關資訊

示例:

  1. netstat -tlun 檢視本機監聽埠
  2. netstat -an 檢視本機所有的網路
  3. netstat -rn 檢視本機路由表

7.7.9、setup-配置網路

命令名稱:setup

命令所在路徑:/usr/bin/setup

執行許可權:root

語法:setup

功能描述:配置網路

安裝:https://blog.csdn.net/zhangzhikaixinya/article/details/46691323

7.7.10、mount-掛載命令

命令名稱:mount

命令所在路徑:/bin/mount

執行許可權:所有使用者

語法:mount [-t檔案系統] 裝置檔名 掛載點

示例:mount -t iso9660 /dev/sr0 /mnt/cdrom

7.8、關機重啟命令

7.8.1、shutdown

語法:shutdown [引數] 時間

引數:

  1. -c : 取消前一個關機命令
  2. -h:關機
  3. -r:重啟

使用舉例:shutdown -r now

now當前時間

7.8.2、退出登入命令

logout

八、vim

8.1、vim常用操作

  1. 建立或開啟檔案vim filename
  2. 退出:wq
  3. esc退出編輯模式,切換命令模式

8.1.1、插入命令

命令 作用
a 在游標所在字元後插入
A 在游標所在行尾插入
i 在游標所在字元前插入
I 在標籤所在行行首插入
o 在游標下插入新行
O 在游標上插入新行

8.1.2、定位命令

命令 作用
:set nu 設定行號
:set nonu 取消行號
gg 到第一行
G 到最後一行
nG 到第n行
:n 到第n行
:$ 移至行尾
:0 移至行首

8.1.3、刪除命令

命令 作用
x 刪除游標所在處字元
nx 刪除游標所在處後n個字元
dd 刪除游標所在行,ndd刪除n行
dG 刪除游標所在行到檔案末尾內容
D 刪除游標所在處到行尾內容
:n1,n2d 刪除指定範圍的行

8.1.4、複製和剪下命令

命令 作用
yy 複製當前行
nyy 複製當前行一下n行
dd 剪切當前行
ndd 剪切當前行一下n行
p、P 貼上在當前游標所在行下或行上

8.1.5、替換和取消命令

命令 作用
r 取代游標所在字元
R 從游標所在處開始替換字元,按Esc結束
u 取消上一步操作

8.1.6、搜尋和搜尋替換命令

命令 作用
/string 搜尋指定字串
搜尋時忽略大小寫:set ic
n 搜尋指定字元的下一個出現位置
:%s /old/new/g or c 全文替換指定字串
:n1,n2s/old/new/g or c 在一定範圍內替換指定字串

g代表不詢問替換

c詢問替換

8.1.7、儲存與退出命令

命令 作用
:w 儲存修改
:w new_filename 另存為指定檔案
:wq 儲存修改並退出
ZZ 儲存修改並退出
:q! 不儲存修改退出
:wq! 強制修改儲存並退出(檔案所有者與root可以使用)

8.2、vim使用技巧

匯入那個執行結果 : :r 命令

:r 檔案路徑,就會將這個檔案匯入到開啟檔案所在路徑

  1. :!which 指令:顯示執行所在路徑

自定義快捷鍵

:map 命令+自定義操作

  1. :map ^p I#<ESC> 在頭部插入#
  2. :map ^B 0x 刪除首行第一個字元
  3. :map [email protected] 在游標處插入郵箱

注意:^是 Ctrl + V + 你要設定的快捷鍵

連續行註釋

:n1, n2s/^/#/g ^行首,#要替換內容 g不用詢問

:n1, n2s/^#//g 去掉行首的#號

替換

:ab mymail [email protected] 輸入mymail後就會自動替換郵箱

如果想永久生效,那麼配置檔案就必須寫在使用者目錄下命名為.vimmrc檔案就會自定義的配置就會永久生效

九、軟體包管理

軟體包分類

  1. 原始碼包
  2. 二進位制包(RPM包、系統預設包)

9.1、RPM包管理

安裝略過

9.1.1、查詢是否安裝

rpm -q 包名   不用全包名,只要包名就可以了
rpm -qa   查詢所有已經安裝包

9.1.2、查詢詳細資訊

rpm -qi 包名
- i 查詢軟體資訊
- p 查詢未安裝包資訊,得在包目錄下

9.1.3、檢視系統檔案屬於哪個rpm包

rpm -qf 系統檔名

rpm -ql 包名,檢視包名安裝在哪個檔案路徑下

9.1.4、檢視軟體包的依賴性

rpm -qR 包名
-R: 查詢軟體包的依賴性
-p: 查詢未安裝包資訊(在沒有安裝包的路徑下查詢)

9.1.5、RPM包校驗

rpm -V 已經安裝的報名
-V: 曉燕指定RPM包中檔案

驗證內容引數如下:
S : 檔案大小是否修改
M : 檔案型別或檔案的許可權是否被修改
5 : 檔案MD5校驗和是否修改(可以看做檔案內容是否改變)
D : 裝置中,從程式碼是否改變
L : 問價你路徑是否改變
U : 問價耐屬性(所有者)是否改變
G : 檔案屬組是否改變
T : 檔案修改時間是否改變
檔案型別:
	c : 配置檔案
	d : 普通檔案
	g : "鬼"檔案
	l : 授權檔案
	r : 描述檔案

9.1.6、RPM包中檔案提取

rpm2cpio 包全名 cpio -idv .檔案絕對路徑

cpio 選項 <檔案|裝置>
 選項:
 	-i: copy-in,還原
 	-d: 還原時自動新建目錄
 	-v: 顯示還原過程

rpm2cpio 將rpm包轉換為cpio格式的命令

cpio 是一個標註農工局,用於建立軟體檔案檔案和檔案檔案中提取檔案

示例

rpm -qf /bin/ls
# 查詢ls屬於哪個包
mv /bin/ls /tmp/
# 造成ls命令誤刪除假象
rpm2cpio /mnt/cdrom/Packages/coreutil-8.4-19.el16.i686.rpm | cpio -div ./bin/ls
cp /root/bin/ls /bin/

9.2、yum線上管理

9.2.1、IP地址配置

setup
vim /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT = "no" 改為yes

servimce network restart

9.2.2、修改yum源

vim /etc/yum.repos.d/CentOS-Base.repo

引數說明
	- [base] 容器名稱,一定要放在[]中
	- name : 容器說明,自己可以隨意寫
	- mirrorlist : 映象站點,這個可以註釋掉
	- baseurl : 我們yum源伺服器的地址。預設是CenOS服務yum源伺服器
	- enabled : 此容器是否生效,如果不寫或寫成enabled=1都是生效,寫成enabled=0就是不生效
	- gpgcheck : 如果是1是指RPM的數字證書生效
	- gpgkey : 數字證書的公鑰檔案儲存位置。不用修改

9.2.3、查詢可用軟體包列表

yum list
# 查詢所有可用軟體包列表

9.2.4、搜尋安裝包

yum search 關鍵字
# 搜尋伺服器刪給所有和關鍵字相關的包

9.2.5、安裝

yum -y install 包名
引數:
	install  安裝
	-y : 自動回答yes

9.2.6、升級

yum -y update 包名
引數:
	update 升級
	-y: 自動回答yes

注意事項:

  1. 如果yum -y update 沒有寫指定包名,那麼就會升級所有軟體包括核心,如果升級核心,需要在伺服器本地進行配置,所以千萬不要全部升級
  2. 使用yum安裝的,儘量不要解除安裝

9.2.7、解除安裝

yum -y remove 包名

9.2.8、Yum軟甲那組管理命令

# 1. 查出所有可用的軟體組列表
yum grouplist

# 2. 安裝指定軟體組,組名可以由grouplist查出來,如果名字有空格,要用雙引號抱起來
yum groupinstall 軟體組名

# 3. 解除安裝指定軟體組
yum groupremove 軟體組名

9.2.9、光碟yum源

9.3、原始碼包管理

區別

  1. 概念上區別
  2. 可選安裝位置

安裝準備

  1. 安裝C語言編譯器 gcc
  2. 下載要安裝的原始碼

注意事項

  1. 原始碼儲存位置:/usr/local/src
  2. 軟體安裝位置:/usr/local/
  3. 如何確定安裝過程報錯:
    • 安裝過程停止,並出現error、warning或no的提示

原始碼包安裝過程

  1. 下載原始碼包
  2. 解壓縮下載的原始碼包
  3. 進入解壓縮目錄

./config 軟體配置與檢查

  • 定義需要的功能選項
  • 檢查系統環境是否符合安裝要求
  • 把定義好的功能選項和檢測系統的資訊都吸入Makefile檔案,用於後續編輯

在解決之後,需要先檢視兩個檔案

  1. INSTALLREADME 分別是:安裝說明,使用說明

開始操作

  1. 進入到包目錄後,直接解壓
  2. ./config --prefix=/usr/local/名字
  3. make 編譯
  4. make install 編譯安裝

注意事項

  1. 如果在編譯的時候出現錯誤,可以使用make clean 來清理編譯出的垃圾檔案

9.4、指令碼安裝包

概念

  1. 指令碼安裝包並不是獨立的軟體包型別,常見的安裝十原始碼包
  2. 是人為把安裝過程寫成了自動安裝的指令碼,只要執行指令碼,定義簡答引數,即可安裝

.sh字尾的檔案,直接執行即可,進入目錄,./*.sh

*代表當前檔案的名字

十、使用者和使用者組管理

10.1、使用者配置檔案

10.1.1、使用者資訊檔案

使用者資訊檔案/etc/passwd

概念

在Linux中主要是通過使用者配置檔案來檢視和修改使用者的資訊

/etc/passwd檔案中每個使用者欄位的說明

第1欄位:使用者名稱稱

第2欄位:密碼標誌

第3欄位:UID(使用者ID)

  • 0: 超級使用者
  • 1-499: 系統使用者(偽使用者)
  • 500-65535:普通使用者

第4欄位:GID(使用者初始組ID)

第5欄位:使用者說明

第6欄位:家目錄

  • 普通使用者:/home/使用者名稱/
  • 超級使用者:/root/

第7欄位:登陸之後的Shell

什麼是初始組和附加組

初始組:就是使用者一登陸就立刻擁有的使用者組先關許可權,每個使用者的初始組只能有一個,一半就是和這個使用者的使用者名稱相同的組名作為這個用初始組

附加組:指使用者可以加入多個其他使用者組,並擁有這個使用者組對應的許可權。附加組可以加入多個

使用者對應的密碼在影子檔案中:/etc/shadow

10.1.2、影子檔案

影子檔案所在路徑

/etc/shadow

vim /etc/shadow

第1欄位:使用者名稱

第2欄位:加密密碼

  • 如果密碼位是:!!* 代表沒有密碼,不能登入

第3欄位:面膜最後一次修改日期

  • 使用1970年1月1日作為標準時間,每過一天時間戳加1

第4欄位:兩次密碼的修改間隔時間(和第3欄位比)

第5欄位:密碼有效期(和第3個欄位相比)

第6欄位:密碼修改到期前的警告天數(和第5欄位相比)

第7欄位:密碼過期後的寬限天數(和第5欄位比較)

  • 0:代表密碼過期後立即生效
  • -1:代表密碼永久不會失效

第8欄位:賬號失效時間

  • 用時間戳表示

第9欄位:保留

時間戳換算

  • 把時間戳換算為日期
date -d "1970-01-01 時間戳 days"
  • 日期換算為時間戳
echo $(($(date --date="時間" +%s)/86400+1))
echo $(($(date --date="2020/07/02" +%s)/86400+1))

10.1.3、組資訊檔案

組資訊檔案 /etc/group

第1欄位:組名

第2欄位:組密碼標誌

第3欄位:GID

第4欄位:組中附加使用者

組密碼檔案 /etc/gshadow

第1欄位:組名

第2欄位:組面膜

第3欄位:組管理員使用者名稱

第4欄位:組中附加使用者

10.1.4、使用者管理相關檔案

10.1.4.1、使用者的家目錄

普通使用者:/home/使用者名稱,所有者和所屬組都是此使用者,許可權是700

超級使用者:/root/,所有這和所屬組都是root使用者,許可權是550

10.1.4.2、使用者的郵箱

目錄:/var/spool/mail/使用者名稱/ 如果有郵件就會出現在這個檔案中

10.1.4.3、使用者模板目錄

目錄:/etc/skel/ 此目錄下所有檔案,在建立新使用者的時候都會從這裡copy一份到新使用者家目錄下

10.2、使用者管理命令

10.2.1、useradd-使用者新增命令

命令格式

useradd [引數] 使用者名稱
引數:
	-u UID : 手工指定使用者的UID
	-d 家目錄: 手工指定使用者的家目錄
	-c 使用者說明: 手工指定使用者的說明
	-g 組名:手工指定使用者的初始組 --> 不建議使用
	-G 族名:	指定使用者的附加組
	-s shell: 手工指定使用者的登陸shell。預設是/bin/bash.

示例:useradd -u 666 -G root,bin -d /home/lamp1 -c "test user" -s /bin/bash sc

useradd sc後修改的其實就是一下檔案

grep sc /etc/passwd
grep sc /etc/shadow
grep sc /etc/group
grep sc /etc/gshadow
ll -d /home/lamp/
ll /var/spool/mail/lamp

使用者預設值檔案

/etc/default/useradd

  • GROUP=100 使用者預設組
  • HOME=/home 使用者家目錄
  • INACTIVE=-1 密碼過期寬限天數(shadow檔案7欄位)
  • EXPIRE= 密碼失效時間
  • SHELL=/bin/bash 預設shell
  • SKEL=/etc/skel 模板目錄
  • CREATE_MAIL_SPOOL=yes 是否建立郵箱

注意事項:

  1. Linux中有共有模式與私有模式,現在建立的使用者預設都是私有,所以GROUP=100 就不起作用

/etc/login.defs

PASS_MAX_DAYS   99999	# 密碼有效期
PASS_MIN_DAYS   0		# 密碼修改間隔
PASS_MIN_LEN    5		# 密碼最小5位
PASS_WARN_AGE   7		# 密碼到期警告
UID_MIN         1000	# 最小和最大UID範圍
UID_MAX         60000
ENCRYPT_METHOD SHA512    # 加密模式

10.2.2、passwd-修改使用者密碼

命令格式:

passwd [引數] 使用者名稱
引數:
	-S : 查詢使用者密碼的密碼狀態。僅root使用者可用
	-l : 暫時鎖定使用者。僅root使用者可用
	-u : 解鎖使用者。僅root使用者可用
	--stdin : 可以通過管道符輸出的資料作為使用者的密碼

使用舉例

檢視密碼狀態

passwd -S user1
user1 PS 2020-07-02 0 99999 7 -1 (Password set, SHA512 crypt.)
# 使用者名稱密碼設定時間(2020-07-02) 密碼修改間隔時間(0) 
# 密碼有效期(99999)  警告時間(7)   密碼不失效(-1)

鎖定使用者與解鎖使用者

passwd -l user1
passwd -u user1

其實鎖定使用者,就是改的是/etc/shadow檔案,在密碼前面加了個!!

沒有加鎖

已經加鎖

使用字串作為密碼

echo "123" | passwd --stdin user1

10.2.3、usermod-修改使用者資訊 和 chage-修改使用者密碼狀態

修改使用者資訊-usermod

命令格式

usermod [引數] 使用者名稱
引數:
	-u: UID		修改使用者名稱的UID號
	-c: 使用者說明  修改使用者的說明資訊
	-G: 組名	   修改使用者的附加組
	-L: 		臨時鎖定使用者(lock)
	-U: 		解鎖使用者鎖定(unLock)

舉例:
usermod -c "test user" -G root -u 550 user1

修改使用者密碼狀態-chage

命令格式

chage [引數] 使用者名稱
引數:
	-l:		列出使用者的詳細密碼狀態
	-d日期:  修改密碼最後一個更改日期(shadow3欄位)
	-m 天數: 兩次密碼修改間隔(4欄位)
	-M 天數: 密碼有效期(5欄位)
	-W 天數: 密碼過期前警告天數(6欄位)
	-I 天數: 密碼過後寬限天數(7欄位)
	-E 日期: 賬號失效時間(8欄位)

注意事項:

其實上面的功能我們可以在/etc/shadow檔案中直接通過Vim來修改,但是為什麼要學習這個命令呢?

chage -d 0 使用者名稱
# 這個命令其實就是把密碼修改日期歸0了(shadow3欄位)
# 這樣使用者一登入就要修改密碼

就是為了這條命令。

10.2.4、userdel-刪除使用者 和 su-使用者切換命令

刪除使用者userdel

命令格式

userdel [-r] 使用者名稱
引數:
	-r: 刪除使用者的同時刪除使用者家目錄

底層做的事情

vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm -rf /var/spool/mail/使用者名稱
rm -rf /home/使用者名稱/

檢視使用者ID

命令格式

id 使用者名稱
uid=1000(user1) gid=1000(user1) groups=1000(user1)

切換使用者身份su

命令格式:

su [引數] 使用者名稱
引數:
	-: 選項只使用"-"代表連帶使用者的環境變數一起切換
	-c: 僅執行一次命令,而不是切換使用者身份
	
例子:
su - root
su - root -c "useradd user2"

10.3、使用者組管理

10.3.1、新增使用者組

命令格式

groupadd [引數] 組名
引數:
	-g GID 		指定組ID

10.3.2、修改使用者組

命令格式

groupmod [引數] 組名
引數:
	-g GID 		指定組ID
	-n 新組名	  修改組名
	
例子
groupmod -n testgrp groupl
# 把組名groupl 修改為testgrp

10.3.3、刪除使用者組

groupdel 組名

10.3.4、使用者新增組或從組中刪除

gpasswd [引數] 組名
引數:
	-a 使用者名稱:		把使用者加入組
	-d 使用者名稱:		把使用者從組中刪除 

10.3.5、修改使用者組的注意事項

  1. 要刪除組,但是要刪除組中已經有使用者,那得看該使用者的初始組是哪個,如果不是要刪除的組,那麼可以直接把這個組刪除掉;如果組下使用者的初始組是該組,那麼就必須先刪除使用者

十一、許可權管理

11.1、ACL許可權

什麼是 ACL許可權,它的出現以及應用場景

Linux系統所自帶的許可權系統,已經無法滿足我們的需求。

比如,建立一個/project目錄,指定它的所屬組,所有人,以及其他人。對屬主(root)以及屬組都有rwx許可權,其他人無許可權。

這個時候又來一個使用者,他得有r-x讀與執行許可權,這個時候就需要ACL許可權

一個目錄只能屬於一個使用者組

首先來檢視系統有哪些分割槽

df -h

檢視ACL許可權是否開啟

dumpe2fs -h /dev/vda1
引數:
	-h: 僅顯示超級塊中資訊,而不顯示磁碟快組的詳細資訊

目前所有Linux系統都已預設開啟ACL

臨時開啟分割槽ACL許可權

mount -o remount.acl
# 重新掛載根分割槽,並掛載加入acl許可權

永久生效開啟ACL許可權

vim /etc/fstab
# UUID=1114fe9e-2309-4580-b183-d778e6d97397 /                       ext4    defaults,acl        1 1
mount -o remount
# 重新掛載檔案系統或重啟系統,使修改生效

上圖場景的模擬

# 先來新增幾個使用者
useradd student1
useradd student2
useradd student3

# 建立一個學生使用者組
groupadd Stu
# 新增使用者到組
gpasswd -a student1 Stu
gpasswd -a student2 Stu
gpasswd -a student3 Stu

# 建立目錄
mkdir /project

# 修改目錄許可權
chown root:Stu /project  
# 設定許可權
chmod 770  /project #xrwx
# 檢視許可權
ll -d /project

# 新增試聽使用者
useradd st
passwd st

# 開始給st使用者設定ACL許可權
setfacl -m u:st:rx /project
# u表示給使用者
# g表示給使用者組
# 後面跟目錄或檔案

# 檢視ACL許可權
# getfacl 目錄或檔案
getfacl /project

11.1.1、檢視與設定ACL許可權

檢視ACL許可權

getfacle 目錄/檔名
# 檢視ACL許可權

設定ACL許可權

setfacl [引數] 目錄/檔名
引數:
	-m: 設定ACL許可權
	-x: 刪除指定的ACL許可權
	-b: 刪除所有的ACL許可權
	-d: 設定預設ACL許可權
	-k: 刪除預設ACL許可權
	-R:	遞迴設定ACL許可權
	
	
示例:
setfacl -m u:使用者名稱:對應許可權 目錄
u: 表示使用者
g: 表示使用者組

setfacl -m u:st:rx /project

11.1.2、最大有效許可權mask與刪除ACL許可權

mask的作用

mask用來指定最大有效許可權的。如果我給使用者賦予了ACL許可權,是需要和mask的許可權“相與”才能得到使用者的真正許可權

[root@iZ8vb6xljiklnfnmawnio3Z ~]# getfacl /root/project
getfacl: Removing leading '/' from absolute path names
# file: root/project
# owner: root
# group: Stu

user:st:r-x

mask::r-x

只有mask 和 user 全向相與才是真正可用許可權

刪除ACL許可權

setfacl -x u:使用者名稱 檔名
# 刪除指定使用者的ACL許可權

setfacl -x g:使用者組名 檔名
# 刪除指定使用者組的ACL許可權

setfacl -b 檔名
# 刪除檔案的所有ACL許可權

11.1.3、預設ACL許可權和遞迴ACL許可權

什麼是遞迴

遞迴是父目錄在設定ACL許可權時,所有的子檔案和子目錄也會擁有相同的ACL許可權

遞迴的給目錄設定許可權

setfacl -m u:使用者名稱:許可權 -R 檔名

注意事項:

  1. 使用上面命令,是對已經存在的檔案或目錄設定許可權,如果是之後再新建的就不會有許可權
  2. 解決辦法是:設定預設許可權

預設ACL許可權

預設ACL許可權就是如果父目錄設定ACL許可權,那麼父目錄所新建的子檔案都會繼承父目錄的ACL許可權

setfacl -m d:u:使用者名稱:許可權 檔名

11.2、檔案特殊許可權

11.2.1、SetUID----4

什麼是SetUID

用來以該檔案屬主身份執行的一個許可權。

簡單的說:一個檔案有SUID許可權的話,那麼其他使用者在執行這個檔案的時候,就會擁有屬於該檔案的屬主許可權

  1. 只有可執行的二進位制程式才能設定SUID許可權。
  2. 命令執行者要對該程式擁有x(執行)許可權
  3. 命令執行者在執行噶程式時,獲得程式檔案屬主的身份(在執行程式的過程中靈魂附體為檔案的屬主)
  4. SetUID許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效

簡單的應用場景

passwd命令擁有SetUID許可權,所以普通使用者可以修改自己的密碼

ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

cat命令沒有SetUID許可權,所以普通使用者不能檢視/etc/shadow檔案內容

ll /bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat

SetUID許可權的執行流程

11.2.1.1、設定SetUID的方法

4代表SUID

chmod 4755 檔名   # 建議這種方式來操作。如果檔案沒有x許可權那麼就會有錯誤 是大寫的`S`
chmod u+s 檔名

這是沒有x許可權,但是以chmod u+s 檔案 給予的SETUID許可權,會發現有大寫S

建議

對於關鍵目錄嚴格控制此許可權。比如://usr

11.2.2、SetGID -- 2

SetGID對目錄的作用

  1. 普通使用者必須對此目錄擁有rx許可權,才能進入此目錄
  2. 普通目錄在此目錄中的有小組會變成此目錄的屬組
  3. 若普通使用者對此目錄擁有w許可權時,新建的檔案預設陣列就是這個目錄的屬組

SetGID對檔案的作用

  1. 只有可執行的二進位制程式才能設定SGID許可權

  2. 命令執行者要對該程式擁有x(執行)許可權

  3. 命令執行在執行程式的時候,組身份升級為該程式檔案的屬組

  4. SetGID許可權同樣只在該程式執行過程中有效,也就是說組身份改變只在程式執行過程中有效

11.2.2.1、設定SetGID

chmod 2755 檔名
chmod g+s 檔名

實戰舉例

cd /tmp/
mkdir test
# 設定GID
chmod g+s test

# 設定所有使用者都有許可權
chmod 777 test
# 切換使用者,檢視user1使用者在使用test目錄的時候,所屬組的情況
su - user1
cd /tmp/test
touch abc

# 檢視許可權
ll

11.2.2.3、取消SetGID

chmod 755 檔名
chmod g-s 檔名

11.2.3、SetckyBIT--1

SBIT粘著位作用

  1. 粘著位目前只對目錄有效
  2. 普通使用者對該目錄擁有wx許可權,即普通使用者可以在此目錄擁有寫入許可權
  3. 如果沒有粘著位,因為普通使用者擁有w許可權,所以可以刪除此目錄下所有檔案,包括其他使用者建立的檔案。一旦賦予了粘著位,除了root可以刪除所有檔案,普通使用者就算擁有w許可權,也只能刪除自己建立的檔案,但是不能刪除其他使用者建立的檔案

粘著位具體作用

對於一個目錄,這個目錄是/tmp目錄,所有使用者都可以並擁有wrx許可權,那麼,需求是:在這目錄下所有使用者都可以讀,但是每個使用者只能對自己建立的檔案進行修改或刪除,這個時候就需要SBIT粘著位

11.2.3.1、設定與取消粘著位

# 設定粘著位
chmod 1755 目錄名
chmod o+t 目錄名

# 取消粘著位
chmod 777 目錄名
chmod o-t 目錄名

11.3、檔案系統屬性chattr許可權

命令格式,注意:如果使用該命令設定許可權,使用ll許可權是檢視不了許可權的,只能使用lsattr命令來檢視

chattr [+-=] [引數] 檔案或目錄名
	+: 增加許可權
	-: 刪除許可權
	=: 等於某許可權

引數:
	i: 如果對檔案設定i屬性,那麼不允許對檔案進行 刪除、改名、也不能新增和修改資料。
	   對目錄:只能修改目錄下檔案的資料,但不允許建立(新建)和刪除檔案
	a: 如果對檔案設定a屬性,那麼只能在檔案中增加資料,不能刪除、修改資料;
	   對目錄:只允許在目錄中建立和修改檔案,不允許刪除

使用舉例

chattr +i abc

檢視檔案系統屬性

命令格式

lsattr 引數 檔名
引數:
	-a: 顯示所有檔案和目錄
	-d: 若目標是目錄,僅列出目錄本身的屬性,而不是子檔案的

使用舉例

lsattr -a abc

11.4、系統命令sudo許可權

什麼是sudo許可權?作用。以及場景

場景:Linux上,只能有一個root使用者,對有些命令,其他普通使用者也會用得到,如果普通使用者需要使用root級別命令。老是通知Liunx中root使用者來幫我們執行的話,不現實,root管理員有他自己的事情要做

sudo許可權:root把本來只能超級使用者執行的命令賦予普通使用者來執行。

sudo的操作物件是系統命令

這個時候就需要sudo許可權登場了。它可以由root指定我們可以執行哪些命令

sudo實際上修改的就是/etc/sudoers檔案

visudo
# 開啟/etc/sudoers檔案

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
# 使用者名稱  被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
# %wheel ALL=(ALL) ALL
# %組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)

給予普通使用者許可權

# 在/etc/sudoers檔案中加入
# 使用者名稱 ALL=絕對許可權路徑 引數
sc ALL=/sbin/shutdown -r now

普通使用者檢視可用的sudo命令

sudo -l
# 普通使用者執行sudo賦予的命令
sudo /sbin/shutdown -r now
# 當前時間重啟

注意:千萬不要給他vim軟體的許可權。因為給他這樣類似的軟體之後普通使用者可以通過軟體來修改重要的檔案了

十二、檔案系統管理

12.1、回顧分割槽和檔案系統

分割槽型別

  • 主分割槽:加上擴充套件分割槽,最多隻能有4個
  • 擴充套件分割槽:只能有一個分割槽屬於擴充套件分割槽,但是擴充套件分割槽不能儲存資料和格式化,必須再劃分邏輯分割槽才能使用。
  • 邏輯分割槽:邏輯分割槽是在擴充套件分割槽中劃分的。

12.2、檔案系統常用命令

12.2.1、df/du/fack/dumpe2fs命令

12.2.1.1、df-檔案系統檢視命令

df [引數] [掛載點]
引數
	-a: 顯示所有的檔案系統資訊,包括特殊檔案系統如 /proc、/sysfs
	-h: 使用習慣單位顯示容量,如KB, MB或GB等
	-T: 顯示檔案系統型別
	-m: 以MB為單位顯示容量
	-k: 以KB為單位顯示容量。預設就是以KB顯示

12.2.1.2、du-統計目錄大小

du [引數] [目錄]
引數:
	-a: 顯示每個子檔案的磁碟佔用量。預設只統計子目錄的磁碟佔用量
	-h: 使用習慣單位顯示磁碟佔用量, 如KB、MB、GB
	-s: 統計總佔用量,而不列出子目錄和子檔案佔用量

有趣的問題

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  1.9G   36G   5% /

du -sh /
1.8G	/

可以很清楚看到,都是/目錄,df檢視的卻比du檢視的佔用空間要大,這是為什麼?

du命令與df命令的區別

  • df命令是從檔案系統考慮的,不光要考慮檔案佔用空間,還要統計被命令和程式佔用的空間(最常見的是檔案已經刪除了,但是程式並沒有釋放空間)
  • du命令是面向檔案的,只會計算檔案或目錄佔用的空間

12.2.1.3、fsck-檔案系統修復命令

fsck [引數] 分割槽裝置檔名
引數:
	-a: 不用顯示使用者提示,自動修復檔案系統
	-y: 自動修復。和-a作用一致,不過有些檔案兄只支援-y

12.2.1.4、dumpe2fs-顯示磁碟狀態命令

dumpe2fs 分割槽裝置檔名

12.2.2、掛載命令

查詢與自動掛載

mount -l
# 查詢系統已經掛載的裝置, -l 會顯示卷標名稱

mount -a
# 依據配置檔案/etc/fstab的內容,自動掛載

掛載命令格式

mount [-t 檔案系統] [-L 卷標名] [-o 特殊選項] 裝置檔名 掛載點
引數:
	-t 檔案系統: 加入檔案系統型別來指定掛載的型別,可以ext3、ext4,、iso9660檔案系統
	-L 卷標名:掛載指定卷標的分割槽,而不是安裝裝置檔名掛載
	-o 特殊選項: 可以指定掛載的額外選項

12.2.3、掛載光碟與U盤-實戰

掛載光碟

# 1. 先來建立掛載點,所謂掛載點就是一個目錄,可以理解為Widnows中碟符
mkdir /mnt/cdrom   # /mnt目錄是CoentOS系統專門留的目錄

# 2. 掛載點與裝置名建立關係
mount -t iso9660 /dev/cdrom /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
# 上面連個命令是一樣的效果;iso9660是光碟的檔案系統


#-----
# 解除安裝光碟
umount 裝置檔名或掛載點
umonnt /mnt/drom

掛載U盤

# U盤的話就和硬碟是一樣的了,裝置名是系統分配的,我們要系那個知道那麼只能查詢
# 查詢裝置檔名
fdisk -l

# 建立聯絡
mount 裝置檔名 掛載點
mount /dev/sdb1 /mnt/usb

注意:Liunx預設不支援NTFS檔案系統

12.2.4、支援NTFS檔案系統

12.3、fdisk分割槽

12.3.1、fdisk命令分割槽過程

# 1. 新增硬碟
# 2. 使用命令,檢視硬碟,得到硬體名
fdisk -l

# 3. 使用fdisk 命令分割槽
fdisk 得到的硬體名

# 4. 進入工具後開始分割槽,具體看下面的指令圖
n  # 新建分割槽
 --> e extended 
 --> p primary partition(1-4)
 Partition number (1-4): 1   # 主分割槽號
 First cylinder (1-1305, default 1):  # 指定分割槽大小 開始位置 
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G #指定分割槽大小可以用G、M、K表示
#--- 到此第一個分割槽完成,不過只是示例,到時候具體看

fdisk分割槽互動指令說明

12.3.2、分割槽自動掛載與fstab檔案修復

什麼是fstab檔案和fstab檔案作用

是用來存放檔案系統的靜態資訊的檔案

Fstab檔案:就當前對我而言,這個檔案作用是為了完成自動掛載而存在的,只要裡面寫的東西,在系統啟動的時候就會自己去掛載,不用每次手動掛載

第一欄位:分割槽裝置名或UUID(硬碟通用唯一UUID)

第二欄位:掛載點

第三欄位:檔案系統名稱

第四欄位:掛載引數

第五欄位:指定分割槽是否被dump備份,0代表不備份;1代表每天備份;2代表不定期備份

第六欄位:指定分割槽是否被fsck檢測,0代表不檢測;其他數字代表檢測的優先順序,那麼1的優先順序最高,其他依次。

# 檢視裝置的UUID
dumpe2fs -h 裝置名

新增需自動掛載的

vim /etc/fsttab

# 開啟檔案後,自己寫就行了

# 新增完成後,檢測是否修改正確,重新掛載
mount -a
# 上面就是根據配置檔案/etc/fstab的內容自動掛載

/etc/fstab檔案修復

mount -o remount, rw /

# 然後修改/etc/fstab檔案即可

12.5、分配swap分割槽-交換分割槽

# 檢視記憶體與swap分割槽使用情況
free [引數]
引數:
	-m: 以M格式檢視
	-g: 以G格式檢視

十三、Shell

什麼是Shell

百度百科:在電腦科學中,Shell俗稱殼(用來區別於核),是指“為使用者提供操作介面”的軟體(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。

對於我們而言,Shell就是一個直譯器,把我們的程式碼轉換成為計算機能夠識別的二進位制。

13.1、第一個Shell程式以及注意事項

第一個Shell程式

#!/bin/bash   # 這個表示是一個宣告吧  一定要加
# 這是第一個指令碼,上面表示SH程式設計

echo "Hello, World"
  • echo 表示輸出
  • #!/bin/bash 表示是一個shell程式

注意事項:

  1. 檔案最好以.sh為字尾。
  2. 嚴格區分大小寫
  3. 如果是在Windows中寫的Shell檔案到Liunx是不能直接執行的,那是因為回車以及換行的方式不一樣的原因具體可以通過cat -A hello.sh來檢視,這個時候可以通過dos2unix來轉化一下

dos2unix的安裝

# 1. 安裝
yum -y install dos2unix

# 2. 開始轉換
dos2unix hello.sh

13.2、shell的執行

方式一:賦予執行許可權

chmod 755 hello.sh
./hello.sh

方式二:通過bash呼叫執行

bash hello.sh

13.3、bash的基本功能

13.3.1、歷史命令-history 與命令補全-tab鍵兩次

歷史命令

history [引數] [歷史命令儲存檔案]
引數:
	-c: 清空歷史命令
	-w: 把快取中的歷史命令寫入歷史命令儲存檔案中,刷新歷史命令檔案,講歷史命令寫入.bash_history檔案中

每個使用者的history檔案在/home/使用者名稱目錄下.bash_history檔案中

歷史命令預設會儲存1000條,可以在環境變數配置檔案/etc/profile中修改

歷史命令的呼叫

  1. 使用上、下箭頭呼叫以前的歷史命令
  2. 使用!n重複執行第N條歷史命令
    • n:可以通過命令history命令檢視編號
  3. 使用!!重複執行上一條命令
  4. 使用!字串會執行最近以字串開頭的命令

命令補全

在bash中,命令與檔案補全是非常方便與常用的功能,我們只要輸入命令或檔案時,按Tab鍵就會自動補全。

按兩次Tab鍵就會提示出與你要輸入的類似的命令

既可以補全命令也可以補全檔名

13.3.2、命令別名與常用快捷鍵

別名的設定方式

# 設定別名
alias 別名='原命令'

# 查詢命令別名
alias

命令執行順序

  1. 第一順序位執行用絕對路徑或相對路徑執行的命令
  2. 第二順序位執行別名
  3. 第三順序位執行bash的內部命令
  4. 第四順序位執行按照$PATH環境變數定義的目錄查詢順序找到的第一個命令

設定別名永久生效

寫入檔案,檔案位置為:/root/.bashrc每個使用者目錄下的.bashrc檔案

vim /root/.bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

刪除別名

unalias 別名

13.3.2.1、bash快捷鍵

快捷鍵 作用
Ctrl + A 把游標移動到命名行開頭。如果我們輸入的命令過長,想把游標移動到命令列開頭時使用。
Ctrl + E 把游標移動到命令列結尾
Ctrl + C 強制終止當前的命令
Ctrl + L 清屏,相當於clear命令
Ctrl + U 刪除或剪下游標之前的命令。我輸入了一行很長的命令,不適用退格鍵一個一個刪除字元,使用這個快捷鍵更方便
Ctrl + K 刪除或剪下游標之後的內容
Ctrl + Y 貼上 Ctrl + U 或 Ctrl + K剪下的內容
Ctrl + R 在歷史命令中搜索,按下Ctrl + R之後,就會出現搜尋介面,只要輸入搜尋內容,就會從歷史命令中搜索
Ctrl + D 退出當前終端
Ctrl + Z 暫停,並放入後臺。這個快捷鍵牽扯工作管理內容,我們在系統管理章節詳細介紹。
Ctrl + S 暫停螢幕輸出
Ctrl + Q 恢復螢幕輸出

13.3.3、輸入輸出重定向

什麼是重定向

舉個例子來說,原本ls命令是講該目錄中檔案輸出到螢幕中來,而我想讓他輸出到一個檔案當中去,這就是重定向

13.3.3.1、輸出重定向

13.3.3.2、正確輸出與錯誤輸出到一檔案

13.3.3.3、輸入重定向

wc [引數] [檔名]
引數:
	-c: 統計位元組數
	-w: 統計單詞數
	-l: 統計行數
如果什麼都寫 : wc abc
會統計abc檔案的位元組數、單詞數、行數

13.3.4、多命令順序執行與管道符

程式碼示例

ls; date; cd /usrssdxx; pwd

# 會照樣執行 執行到cd報錯因為沒有目錄

13.3.4.1、dd-檔案或裝置拷貝

dd if=輸入檔案 of=輸出檔案 bs=位元組數 count=個數
選項
	if=輸入檔案		指定原始檔或源裝置
	of=輸出檔案		指定目標檔案或目標裝置
	bs=位元組數		指定一次輸入/輸出多少位元組,即把這些位元組看做一個數據塊
	count=個數	  指定輸入/輸出多少個數據塊
	
例子
date; dd if=/dev/zero of=/root/testfile bs=1k count=100000; date

13.3.4.2、管道符

命令1 | 命令2

# 將命令1的一個正確的輸出,作為命令2的操作物件

# 例子:
ll -a /etc/ | more
#ll -a /etc 出的結果使用more分頁

netstat -an | grep "ESTABLESHED"
# netstat -an的輸出,然後使用grep搜尋

13.3.4.3、grep - 搜尋命令

grep [引數] "搜尋內容"
引數
	-i: 忽略大小寫
	-n: 輸出行號
	-v: 反向查詢
	--color=auto 搜尋出來的關鍵字用顏色顯示

13.3.5、萬用字元與其他特殊符號

13.4、變數

13.4.1、使用者自定義變數

  1. bash中變數的預設型別都是字串型別,如果要進行數值運算,則必須指定變數的型別為數值型。
  2. 變數兩邊不能有空格

程式碼示例

# 變數定義
name=hello

# 變數呼叫
echo name

# 變數檢視,檢視所有變數包括環境變數以及自己定義的變數
set

# 變數刪除
unset name

# 下面是變數定義
name="xiao bai"

# 變數疊加
aa=123
aa="$aa"456
aa=${aa}789

13.4.2、環境變數

在記憶體中定義環境變數

export 變數名=變數值

# 查詢變數
env  
# 如果查詢不到,太多不好看,可以這麼玩,管道流
env | grep '變數名' 

# 刪除變數
unset 變數名

在記憶體中插入目錄到PATH環境變數中

  1. 首先我們都知道像ls這種命令其實都是可執行檔案,可以使用相關命令檢視該命令所在路徑。
  2. 然後根據路徑看到該路徑在環境變數PATH中,這樣我們可以自己建立一個可執行檔案,把目錄加入PATH環境變數中。然後直接執行我們的sh指令碼
# 先來建立目錄 並建立檔案
# 當前目錄是/root/目錄
mkdir test
cd test
vi Hello.sh

# 設定許可權,提升為可以執行
chmod 755 Hello.sh

# 新增到PATH環境變數中
PATH=${PATH}:/root/test

# 然後就可以在任意目錄執行
Hello.sh 

13.4.3、位置引數變數

位置引數變數 作用
$n n為數字,$0代表命令本身,$1-$9代表第一個引數到第9個引數,十以上的引數需要用大括號使用${10}
$* 這個變數代表命令列中所有引數,把插入的引數看做一個整體,其實就是字串
$@ 這個變數也代表命令列中所有引數,和上面不同的是這個封裝為陣列
$# 這個表示引數的個數

$n的例項

#!/bin/bash

echo $0
echo $1
echo $2
echo $3

# ----一下是執行的時候
# 先提權
chmod 755 canshu1.sh
canshu1.sh 11 22 33

# ----- 結果
./canshu1.sh is ./canshu1.sh
11 is  11
22
33

$*$@區別

#!/bin/bash

for i in "$*"
	do 
		echo $i
	done
x=1

for y in "$@"
	do
		echo $y
	done

# ---- 結果
[root@iZ8vb6xljiklnfnmawnio3Z temp]# bash ./canshu2.sh 1 2 3 4
1 2 3 4
1
2
3
4

13.4.4、預定義變數

預定義變數 作用
$? 驗證上一條命令是否正確的被執行,如果這個變數的值為0,證明上一個命令正確執行;如果變數為非0,則證明上一條命令執行不正確
$$ 當前程序的程序號(PID)
$! 後臺執行的最後一個程序的程序號

$?的例項

echo $?
--->:0
lst
--->:-bash: lst: command not found
echo $?
--->:127

可以看到,上次命令執行成功那$?的值是0,如果錯誤,則是非0的值。

$$與$!的例項

#!/bin/bash

echo "The current process is $$"
# 輸出當前程序的PID
# 是這個指令碼在執行的時候的PID

find /root -name hello.sh &
# 使用find命令在root目錄下查詢hello.sh檔案
# 符號& 的意思是把命令放入後臺執行。

echo "The last one Daemon process is $! "


#----輸出結果
The current process is 13959
The last one Daemon process is 13960 

13.4.5、read-接受鍵盤輸入

read [引數] [變數名]
引數
	-p: "提示資訊" 在等待read輸入時,輸出提示資訊
	-t: 秒數 read命令會一直等待使用者輸入,使用此選項可能指定等待字元數,就會執行
	-n: 字元數 read命令值接受指定的字元數 就會執行
	-s: 隱藏輸入的資料,適用於機密資訊的輸入

程式碼示例

#!/bin/bash

read -t 30 -p "Please input your name: " name
echo -e "\n"
echo "Is your name? $name "

read -t 30 -p "Please input your age" -s age
# 加密輸入 -s
echo -e "\n"
echo "Is your age? $age " 

read -t 30 -p "Please input your gender[M/F]" -n 1  gender
echo -e "\n"
echo "Is your gender?  $gender" 

13.4.6、數值運算與運算子

13.4.6.1、declare-宣告變數型別

declare [+/-] [引數] 變數名
引數:
	-: 給變數設定型別的屬性
	+: 取消變數的型別屬性
	-i: 將變數宣告為整數型
	-x: 將變數宣告為環境變數
	-p: 顯示指定變數被宣告的型別
	
	
#-----使用舉例
aa=11
declare -p aa
--->:declare -- aa="11"


# -----方法一:
aa=11
bb=22
# 計算和
declare -i cc=$aa+$bb

# ------方法二:
aa=11
bb=11
dd=$(expr $aa + $bb)
# 注意空格必須有

#------方法三:
aa=11
bb=22
ff=$(( $aa+$bb ))

13.4.7、變數測試與內容替換

程式碼示例

x=${y-new}  # new 就是新值    x肯定沒有 y也是,那麼y沒有 那x肯定是新值了
echo $x
---->:new

13.5、環境變數配置

13.5.1、環境變數配置檔案

什麼是環境變數配置檔案

主要是定義對系統的操作環境生效的系統預設環境變數,比如PATHHISTSIZEPSI``HOSTNAME等等預設的環境變數

常用環境變數配置檔案

  • /etc/profile
  • /etc/profile.d/*.sh
  • /etc/bashrc
  • ~/.bash_profile
  • ~/.bashrc

/etc/開頭的都是每個使用者讀取的環境變數配置檔案,其餘都是使用者家目錄下的配置檔案

13.5.1.1、source命令直接修改配置檔案不用重啟

source 配置檔案
也可以,這麼玩
. 配置檔案

主要用於 ,一般對配置檔案修改後需要重啟什麼的,使用這個命令修改之後不必重啟,直接生效

13.5.2、配置檔案的執行順序

/etc/profile檔案的主要作用

  • USER變數
  • LOGNAME變數
  • MAIL變數
  • PATH變數
  • HOSTNAME變數
  • HISTSIZE變數
  • umask
  • 呼叫/etc/profile.d/*.sh檔案

~/.bash_prifile的作用

PATH變數,對於一些新的環境配置需要的可以加入這個環境中

  • 呼叫了~/.bashrc檔案
  • 在PATH變數後面加入了PATH=$PATH:$HOME/bin

13.5.3、其他配置檔案和登陸檔案

登出時生效的配置變數檔案

~/.bash_logout

其他配置檔案

~/bash_history

遠端終端歡迎資訊:/etc/issue.net

  1. 上面圖中的轉移符在,這裡不能使用
  2. 是否顯示此歡迎資訊,由ssh的配置檔案/etc/ssh/sshd_config決定,加入Banner /etc/issue.net行才能顯示(還得重啟SSH服務service sshd restart)

登陸後歡迎資訊

/etc/motd

不管是本地登陸還是遠端登陸,都可以顯示歡迎資訊

13.6、正則表示式

正則表示式用來在檔案中匹配符合條件的字串。正則是包含匹配。grepawksed等支援正則

13.6.1、基本正則表示式

元字元 作用
* 前一個字元匹配0次或任意多次
. 匹配出了換行符外任意1個字元
^ 匹配行首,例如^hehe開頭的hello
$ 匹配行尾,例子和上面一樣
[] 匹配括號中指定的1個字元,如[0-9]或[a-z]匹配0到9或a到z小寫
[^] 匹配括號以外的1個字元,就是說只要不是括號裡的字元
\ 轉移符。
\{n\} 表示其前面的字元恰好出現n次,如:a\{2\}兩個字元a
\{n, \} 表示其前面字元出現不小於n次。例如[0-9]\{2\}表示兩位以上數字
\{n, m\} 表示前面的字元至少出現n次,最多出現m次例如:[a-z]\{6,8\}匹配6-8個小寫字母

程式碼示例

grep "a*" test.txt
# 匹配所有內容,包括空白行。*是匹配0次或多次,所以

grep "aa*" test.txt
# 匹配至少包含有一個a的行

grep "aaa*" test.txt
# 匹配最少包含2個連續a的字串

grep "aaaa*" test.txt
# 匹配最少包含4個連續a的字串

13.6.2、字串擷取命令

13.6.2.1、cut欄位提取

cut [引數] 檔名
引數:
	-f: 列號,提取第幾列
	-d: 分隔符,按照指定分隔符分割列
	
#----示例
1       xiaohong        89
2       xiaobai         100
cut -f 2 student.txt
--->:xiaohong
--->:xiaobai

13.6.2.2、printf命令

printf '輸出型別輸出格式' 輸出內容
輸出型別
	%ns:	輸出字串。n是輸出幾個字元
	%ni:	輸出整數。n是輸出幾個數字
	%m.nf:	輸出浮點數,m和n是數字,代指輸出的整數和小數位數
輸出格式
	\a:		輸出警告聲
	\b:		輸出退格鍵
	\f: 	清楚螢幕
	\n:		回車
	\r:		回車,也就是Enter鍵
	\t:		水平輸出退格鍵,也就是Tab鍵
	\v:		垂直輸出退格鍵,也就是Tab鍵

13.6.2.3、awk命令

awk '條件1{動作1} 條件2{動作2}...' 檔名
條件一般為表示式
動作:
	格式化輸出
	流程控制
	
前-後:加入BEGIN和END關鍵字
awk 'BEGIN {printf"This is a book"} {printf $2 "\t" $4 "\n"}' student.text
--->:This is a bookxiaohong	
xiaobai	

13.7、sed命令

sed是一種幾乎包括在UNIX平臺的輕量級編輯器。主要是用來將資料進行選取、替換、刪除、新增的命令

sed [引數][動作] 檔名
引數:
	-n: 一般sed會直接把所有資料輸出螢幕,如果加入此引數,則只會輸出經過sed命令處理的輸出螢幕上
	-e: 允許對輸出資料應用多條sed命令編輯
	-i: 用sed的修改結果直接修改讀取資料檔案,而不是由螢幕輸出

程式碼示例

sed '2p' -n student.text 
# 檢視檔案第二行
--->:2	xiaobai		100


####-------字串替換
sed 's/舊字串/新字串/g' 檔名

[root@iZ8vb6xljiklnfnmawnio3Z temp]# cat student.text 
1	xiaohong	89
2	xiaobai		100
3	xiaohuang	50
4	xiaohei		90
5	baibai		100
[root@iZ8vb6xljiklnfnmawnio3Z temp]# sed '3s/50/150/g' student.text 
1	xiaohong	89
2	xiaobai		100
3	xiaohuang	150
4	xiaohei		90
5	baibai		100

13.8、字串處理

13.8.1、sort-排序命令

sort [引數] 檔名
引數
	-f: 忽略大小寫
	-n: 以數值型進行排序,預設使用字串排序
	-r: 反向排序
	-t: 指定分隔符,預設是分隔符是製表符
	-k n[,m]: 安裝指定欄位範圍排序,從n欄位開始m欄位結束(預設到行尾),簡單說就是指定根據哪列進行排序
sort /etc/passwd

sort -k 3,3 /etc/passwd

13.8.2、wc-統計命令

wc [引數] 檔名
引數:
	-l: 只統計行數
	-w: 只統計單詞數
	-m: 只統計字元數
	什麼不寫,都統計

13.9、檔案判斷-條件判斷

13.9.1、按照檔案型別

# 兩種判斷格式
test -e /root/install.log
[ -e /root/install.log ]

# 然後通過
echo $? # 來驗證上次命令是否執行正常

#----
[ -d /root ] && echo "yes" || echo "no"
# 如果檔案存在則列印yes

13.9.2、檔案許可權判斷

使用方式和上面的一樣

13.9.3、兩個檔案之間比較

[ canshu1.sh -nt canshu2.sh ] && echo "yes" || echo "no"
--->: no

13.9.4、兩個整數之間比較

13.9.5、字串比較

name=sc
# 給name賦值

[ -z "$name"] && echo "yes" || echo "no"

13.9.6、多個條件判斷

aa=11
[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"

13.10、流程控制

13.10.1、if

if [ 條件表示式 ]; then
	程式
fi

if [ 條件表示式 ]
	then 
		程式
fi        
#!/bin/bash

rete=$(df -h | grep "/dev/vda1" | awk '{print $5'} | cut -d "%" -f1)
# 把分割槽使用率給變數rete

if [ $rete -ge 80 ]
        then
                echo "Warning! /dev/vda1 is full!!"
fi

if...else

if [ 條件表示式 ]
	then 
		條件成立,執行此處
	else
		條件不成立,執行此處
fi   
#!/bin/bash

port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print$2}' " )

if[ "$port" == "open" ]
	then 
		echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
	else
		/etc/rc.d/init.d/httpd start &>/dev/null
		echo "$(date) restart httpd !!" >> /tmp/autostart-error.log
fi

多分支if使用

if [ 表示式1 ]
	then 
		語句1
elif [ 表示式2 ]
	then
		語句2
...
else 
	所有不滿足,執行此
fi

13.10.2、case

case相當於程式語言中的switch

case $變數名 in
	"值1")
		語句1
	;;
	"值2")
		語句2
	;;
	"值2")
		語句2
	;;
	*)
		都不滿足,執行此處
		;;
esac

13.10.3、for

使用方式1

for 變數 in 值1 值2 值3 值3
	do 
		程式
	done
	
#!/bin/bash

#-----示例
for i in 1 2 3 4 5
        do
                echo "date is ${i}"
        done	

語法二

for (( 初始值; 迴圈控制條件; 變化值 ))
	do
		程式
	done

13.10.4、while

while [ 條件判斷 ]  # 成立執行程式
 do
 	程式
 done

十四、服務管理

14.1、服務分類

  • RPM安裝的服務
    • 獨立的服務
    • 基於xinetd的服務
  • 原始碼包安裝的服務

服務的啟動與自啟動

啟動:就是當前系統中啟動的服務

自啟動:就是指重啟系統後,軟體的服務會隨著系統重啟一起啟動

14.2、查詢已安裝的服務

RPM服務的查詢

systemctl list-unit-files
# 檢視服務的自啟動狀態,可以看到所有RPM包安裝的服務
# 回車是下一頁
# 左邊是名稱,右邊是:enabled 是開機啟動; disabled開機不啟動

原始碼包安裝的服務

# 一般是/usr/local目錄下

14.3、RPM包安裝服務的位置

RPM包安裝的一下位置中,預設位置

/etc/init.d/:啟動指令碼位置

/etc/sysconfig/:初始化環境配置檔案位置

/etc/:配置檔案位置

/etc/xinetd.conf:xinetd配置檔案

/etc/xinetd.d:基於xinetd服務的啟動指令碼

/var/lib/:服務產生的資料放在這裡

/var/log/:日誌

獨立服務的啟動

systemctl start|stop|status|restart 服務名.service

關閉一個服務

systemctl stop xxx.service

重啟一個服務

systemctl restart xxx.service

顯示一個服務的狀態

systemctl status xxxx.service

檢視一個服務是否開機啟動

systemctl is-enabled xxxx.service

檢視已啟動的服務列表

systemctl list-unit-files | grep enabled

設定開機時啟動服務

systemctl enable xxx.service

設定開機禁止服務的啟動

systemctl disable xxx.service 

14.4、原始碼包的服務管理

在每個原始碼包裡,都有啟動方式的介紹

路徑+指令碼 start

想要原始碼包的安裝像rpm那樣啟動,用到時候再說吧

十五、系統管理

15.1、程序管理

15.1.1、程序檢視

# 檢視系統中所有程序,使用BSD作業系統格式
ps aux [推薦使用]

# 檢視系統中所有程序,使用Liunx標準命令格式
ps -le

每列的說明

USER:程序是由哪個使用者產生的

PID:程序的ID號

%CPU:該程序佔用CPU資源的百分比,佔用越高,程序越耗費資源

%MEM:該程序佔用實體記憶體的百分比,佔用越高,程序越耗費資源

VSZ:該程序佔用虛擬記憶體大小,單位KB

RSS:該程序佔用實際實體記憶體的大小。單位KB

TTY:該程序是在哪個終端執行的。其中tty1-tty7代表本地控制檯終端。tty1-tty6是本地字元介面終端。tty7是圖形終端。pts/0-256代表虛擬終端

STAT:程序狀態。常用的有R:執行S:睡眠T:停止狀態s:包含子程序+:位於後臺

TIME:程序佔用CPU的運算時間,注意不是系統時間。

COMMAND:產生此程序的命令名

15.1.2、程序管理

程序管理作用

  1. 判斷伺服器健康狀態
  2. 檢視系統中所有程序
  3. 殺死程序

15.1.2.1、top-檢視系統健康狀態

top [引數]
引數:
	-d: 秒數 指定top命令每個幾秒更新。預設是3秒,在top命令的互動模式當中可以執行的命令。
	? 或 h: 顯示互動模式的幫助
	P: 以CPU使用率排序,預設就是此項
	M: 以記憶體使用率排序
	N: 以PID排序
	q: 退出top

資訊說明

第一行任務佇列資訊

內容 說明
20:12:57 當前時間:時分秒
up 7 days, 3:14 系統執行時間。本機已經7天3個小時
1 users 當前登入了1個使用者
load average: 0.01, 0.04, 0.05 系統在前1分鐘,5分鐘,15分鐘的平均負載。一般認為小於1小時,負載較小,大於1,系統已經超出負載

第二行程序資訊

內容 說明
Tasks: 75 total 系統中程序總數
1 running 正在執行的程序數
74 sleeping 睡眠的程序
0 stopped 正在停止的程序
0 zombie 殭屍程序,如果是0需要手工檢查殭屍程序

第三行CPU資訊

內容 說明
Cpu(s): 0.2 us 使用者模式佔用的CPU百分比
0.2 sy, 系統模式佔用的CPU百分比
0.0 ni 改變過優先順序的使用者程序佔用的百分比
99.7 id 空閒的CPU的CPU百分比
0.0 wa 等待輸入/輸出的程序的佔用CPU百分比
0.0 hi 硬中斷請求服務佔用的CPU百分比
0.0 si 軟中斷請求服務佔用的CPU百分比
0.0 st st(Steal time)虛擬時間佔用的百分比,就是當有虛擬機器時2,虛擬CPU等待實際CPU的時間百分比

第四行實體記憶體資訊

內容 說明
Mem : 3880340 total, 實體記憶體總量,單位KB
2873604 free 空閒的實體記憶體數量,我們使用的虛擬機器,總共分配了628M記憶體
88604 used 已經使用的實體記憶體數量
918132 buff/cache 作為緩衝區的記憶體數量

第五行交換分割槽

內容 說明
Swap: 0 total 交換分割槽(虛擬記憶體)的總大小
0 free 空閒互動分割槽的大小
0 used 已經使用的互動分割槽的大小
3509836 avail Mem 作為快取的互動分割槽大小

KiB Swap: 0 total, 0 free, 0 used. 3509836 avail Mem

15.1.2.2、pstree-檢視程序樹

pstree [引數]
引數
	-p: 顯示程序的PID
	-u: 顯示程序的所屬使用者

15.1.2.3、終止程序

15.1.2.3.1、kill-檢視可用程序訊號
kill -l

常用的程序號

程式碼示例

kill -1 xxxx
# 重啟該程序

kill -9 xxx
# 強制殺死該程序
15.1.2.3.2、killall-根據執行緒名殺死程序
killall [引數][程序號] 程序名
引數
	-i: 互動式,詢問是否要殺死某個程序
	-I: 忽略程序名的大小寫
	
killall -9 httpd
# 殺死httpd程序
15.1.2.3.3、pkill-踢出使用者
pkill [引數][程序號] 程序名
引數:
	-t: 終端號    按照終端號踢出使用者
	
#----
# 使用w命令查詢本機登陸使用者獲取TTY
w
# 踢出使用者
pkill -t -9 上面獲取的TTY

15.2、工作管理

15.2.1、&-程序放入後臺

# 程序放入後臺的方式有兩種
# 第一種,放入後臺
tar -zcf etc.tar.gz /etc/ &

# 第二種,暫停程序放入後臺
top #然後Ctrl + Z快捷鍵

15.2.2、jobs-檢視後臺工作/程序

jobs [-l]
	-l: 顯示工作的PID
# +號代表最近一個放入後臺工作,-號代表第二個放入後臺工作

15.2.3、fg-後臺工作恢復到前臺執行

fg %工作號
引數
	%工作號	%號可以省略,但是注意工作號與PID的區別

15.2.4、bg-將後臺暫停工作恢復到後臺執行

bg %工作號

#注意:後臺恢復執行的命令,是不能和前臺有互動的,否則不能恢復到後臺執行

15.3、系統資源檢視

15.3.1、vmstat-命令監控系統資源

vmstat [重新整理延時 重新整理次數]

#例如
vmstat 1 3

15.3.2、dmesg-開機時硬體檢測資訊

dmesg

dmesg | grep CPU

15.3.3、free-檢視記憶體使用狀態

free [-b|-k|-m|-g]
引數
	-b: 以位元組為單位顯示
	-k: 以KB為單位顯示,預設是KB
	-m: 以MB為單位電視
	-g: 以GB為單位顯示

15.3.4、uptime-顯示系統啟動時間和平均負載

uptime
# 也就是top命令的第一行,

15.3.5、檢視系統與核心相關資訊

uname [引數]
引數
	-a: 檢視系統所有相關資訊
	-r: 檢視核心版本
	-s: 檢視核心名稱

15.3.6、判斷當前系統的位數

file /bin/ls
# 檢視ls命令格式

15.3.7、檢視當前Linux髮型版本

lsb_release -a

15.3.8、lsof-列出程序開啟或使用檔案的資訊

lsof [引數]
引數
	-c 字串: 只列出以字串開頭的程序開啟的檔案
	-u 使用者名稱: 只列出某個使用者的程序開啟的檔案
	-p pid: 列出某個PID程序開啟的檔案
	
# 意思就是說該程序呼叫了哪些檔案
lsof -p xxxx

15.4、系統定時任務

15.4.1、crond-服務管理與訪問控制

檢視該服務是否開啟

systemctl list-unit-files | grep crond

15.4.2、使用者crontab設定

crontab [引數]
引數
	-e: 編輯crontab定時任務
	-l: 查詢crontab任務
	-r: 刪除當前使用者所有的crontab任務
crontab -e
# 進入crontab編輯介面,會開啟vim編輯你的工作
* * * * * 執行的任務

時間的定義,每個*的作用

專案 含義 範圍
第一* 一個小時當中第幾分鐘 0-59
第二個* 一天當中第幾個小時 0-23
第三個* 一個月當中第幾天 1-31
第四個* 一年當中第幾月 1-12
第五個* 一週當中星期幾 0-7(0和7都是代表星期日)

特殊符號

特殊符號 含義
* 代表任何時間。比如第一個*代表一小時中每分鐘都執行一次
, 代表不連續的時間,比如"0 8, 12, 16 * * *"命令,就是代表每天8點0分,12點0分16點0分都執行一次
- 代表連續的時間範圍,比如"0 5 * * 1-6"命令,代表每週一和週六凌晨5點0分執行命令
*/n 代表每隔多久執行一次。比如"*/10 * * * *"命令,代表每隔10分鐘都執行一次

例子

時間 含義
45 22 * * * 命令 每天22點45分執行命令
0 17 * * 1 命令 每週1的17點0分執行
0 5 1, 15 * * 命令 每月1號和15號的凌晨5點0分執行命令
40 4 * * 1-5 每週一到週五的凌晨4點40分執行命令
*/10 4 * * * 命令 每天的凌晨4點,每隔10分鐘執行一次命令
0 0 1,15 * 1命令 每月1號和15號,每週1的0點0分執行一次

注意:星期幾和幾號最好不用一起使用,容易混亂

十六、日誌

16.1、確定日誌已經啟動

# 檢視服務是否啟動
ps aux | grep rsyslogd

# 檢視服務是否自啟動
systemctl list-unit-files | grep rsyslog

常見日誌作用

日誌檔案 說明
/var/log/cron 記錄系統定時任務相關的日誌
var/log/cpus 記錄列印資訊的日誌
var/log/dmesg 記錄系統開機時核心自檢的資訊。也可以使用dmesg命令直接檢視
/var/log/btmp 記錄錯誤登陸的日誌。這個檔案是二進位制的,不能vi看,使用lastb命令檢視
/var/log/lastlog 記錄系統中所有使用者最後一次的登陸時間,這個檔案也是二進位制,要使用lastlog命令檢視
/var/log/secure 記錄驗證和授權方面資訊。只要涉及賬戶和密碼的程式都會記錄。
/var/log/message 記錄系統重要資訊日誌,這個日誌會記錄Linux系統絕大多數重要資訊,如果系統出現問題,首先應該堅持這個
/var/run/utmp 記錄當前一登入的使用者資訊。這個檔案會隨著使用者登入和登出不斷變化,只記錄當前登入使用者的資訊。要使用wwhousers等命令檢視

除了系統預設的日誌之外,採用RPM安裝的系統服務也會預設把日誌記錄在/var/log目錄中(原始碼包安裝的服務日誌是在原始碼包指定目錄中)。不過這些日誌不是由rsyslogd服務來記錄和管理的。而是由各個服務使用自己的日誌管理文件來記錄自身日誌

16.2、日誌檔案格式

基本日誌格式包含以下四列

  1. 事件產生的時間
  2. 發生事件的伺服器的主機名
  3. 產生事件的服務名或程式名
  4. 事件的具體資訊

16.3、/etc/rsyslog.conf配置檔案

/etc/rsyslog.conf配置檔案

authpriv.*     					/var/log/secure
# 服務名稱[連線符號]日誌等級        日誌記錄位置,
# 認證相關服務.所有日誌等級 

服務名稱

服務名稱 說明
auth 安全和認證相關資訊(不推薦使用authpriv代替)
authpriv 安全和認證相關訊息(私有的)
cron 系統定時任務cront和at產生的日誌
daemon 和各個守護程序產生的日誌
ftp ftp守護程序產生的日誌
kern 核心產生的日誌(不是使用者程序產生的)
loca10-loca17 為本地使用預留的服務

連線號

  • *代表所有日誌等級,比如:authpriv.*代表authpriv認證資訊服務產生的日誌。
  • .代表只要比後面的等級高的(包含該等級)日誌都記錄下來,比如cron.info代表cron服務產生的日誌,只要日誌等級大於info等級,就要記錄
  • =代表只記錄所需等級的日誌,其他等級都不記錄。比如果*.emerg代表人和日誌服務產生的日誌,只要等級是emerg等級就記錄
  • .!代表不等於,也就是說除了該等級的日誌外,其他等級日誌都記錄

日誌等級

16.4、日誌輪替

日誌論題簡單的說,就是為了防止日誌被替換,比如,今天的伺服器記錄的日誌寫到secure檔案中,那麼到明天之後,日誌名就變為secure-日期。然後今天又會有新的日誌。依次類推

這種配置的方式要在/etc/logrotate.conf 檔案中修改。

先來看一下配置檔案中引數

logrotate配置檔案中引數

引數 引數說明
daily 日誌的輪替週期是每天
weekly 日誌的輪替週期是每週
monthly 日誌的輪替週期是每月
rotate 數字 保留的日誌檔案個數。0指沒有備份
compress 日誌輪替時,舊的日誌進行壓縮
create mode owner group 建立新日誌,同時指定新日誌的許可權與所有者和所屬組 如 create 0600 root utmp
mail address 當日志輪替時,輸出內容通過郵件傳送到指定的郵件地址
missingok 如果日誌不存在,則忽略日誌警告資訊
notifempty 如果日誌為空檔案,則不進行日誌輪替
minsize 大小 日誌輪替的最小值。也就是日誌一定要達到這個最小值才會輪替。否則就算時間到達也不會輪替
size 大小 日誌只有大於指定大小才進行日誌輪替,而不是按照時間輪替。如size 100k
dateext 使用日期作為日誌輪替檔案字尾,如secure-20200709

16.4.1、把apache日誌加入輪替

vi /etc/logrotate.conf
/usr/local/apache2/logs/access_log{
	daily
	create
	rotate 30
}
# 只要這麼寫appche就會加入日誌

logrotate命令

logrotate [引數] 配置檔名
引數
	-v: 顯示日誌輪替過程
	-f: 強制進行日誌輪替。不管日誌輪替條件是否符合
	
#---
logrotate -f /etc/lofrotate.conf

十七、啟動管理

17.1、linux執行級別,以及修改預設級別

ContOS執行級別

執行級別 含義
0 關機
1 單使用者模式,只要用於系統修復,常用語修改root密碼
2 不完全的命令列模式,不含NFS服務
3 完全的命令列模式,就是標準字元介面
4 系統保留
5 圖形模式
6 重啟動

檢視當前系統執行幾倍

runlevel

執行級別的修改

init 執行級別

修改系統預設執行級別

vim /etc/inittab
id:3:initdefault:
# 系統開機後直接進入哪個執行級別

十八、備份與恢復

Linux需要備份的目錄

  • /root/目錄
  • /home/目錄
  • /var/spool/mail/目錄
  • /etc/目錄
  • 其他目錄

18.1、備份策略

完全備份:完全備份是指把所有需要備份的資料全部備份。可以是整個硬碟,也可以是整個目錄

增量備份:第一次備份,整個都備份,第二次備份只備份增加的資料,依次類推

差異備份:第一次全部備份。第二次對一第一次只備份增加的。第三次備份對第一次備份對比,備份增加的

18.2、dump-備份

1.驗證是否安裝該命令

rpm -qa | grep dump

# 安裝
yum -y install dump

使用方式

dump [引數] 備份之後的檔名 原檔案或目錄
引數
	-level: 就是我們說的0-9十個備份級別  0完全備份  1第一次增量 2第二次增量  最多可以9次 
	-f 檔名: 指定備份之後的檔名
	-u: 備份成功之後,把備份時間記錄在/etc/dumpdates檔案
	-v:  顯示備份過程中更多的輸出資訊
	-j: 呼叫bzlib庫壓縮備份檔案,其實就是把備份檔案壓縮為.bz2格式
	-W: 顯示允許被dump的分割槽的備份等級及備份時間

注意事項

  1. dump備份分割槽的時候可以使用增量備份

  2. 當備份為獨立分割槽時,可以使用-u引數。如果備份分割槽下檔案不能使用-u會報錯誤

    DUMP: You can't update the dumpdates file when dumping a subdirectory
    DUMP: The ENTIRE dump is aborted.
    

18.3、restore-恢復

restore [引數] [選項]
引數:
	-C: 比較備份資料和實際資料的變化
	-i: 進入互動模式,手工選擇需要恢復的檔案
	-t: 檢視模式,用於檢視備份檔案中擁有哪些資料。
	-r: 還原模式,用於資料還原
	
選項:
	-f: 指定備份檔案的檔名
	
# 還原
# 1. 先建立新目錄
# 之後 restore -r -f 備份檔案.bz2