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中有EXT2
、EXT3
、EXT4
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
執行許可權:所有使用者
語法:
-
chmod [{ugoa} {+-=} {rwx} [檔案或目錄]]
符號 代表 u 所屬者 g 所屬組 o 其他人 a 所有人 對應字母 所代表的許可權 r 讀 w 寫 x 執行 -
chmod [許可權數字 [檔案或目錄]]
許可權對應數字 r 4 w 2 x 1 -
引數 : -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
注意事項:
- 如果加上-S引數以可讀方式顯示
- 如果沒有加上-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
注意事項:
- 如果想要打包的同時壓縮命令一定要這麼寫:
tar -zcf 名字.tar.gz] [要壓縮的目錄]
解壓縮tar
tar命令加壓縮語法:
-x 解包
-v 顯示詳細資訊
-f 執行解壓檔案
-z 解壓縮
示例:tar -zxvf [需要解壓名.tar.gz]
注意事項:
- 這裡順序也不能換
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 [引數]
引數:
- -t : TCP協議
- -u:UDP協議
- -l:監聽
- -r:路由
- -n :顯示IP地址和埠號
功能描述:顯示網路相關資訊
示例:
netstat -tlun
檢視本機監聽埠netstat -an
檢視本機所有的網路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 [引數] 時間
引數:
- -c : 取消前一個關機命令
- -h:關機
- -r:重啟
使用舉例:shutdown -r now
now當前時間
7.8.2、退出登入命令
logout
八、vim
8.1、vim常用操作
- 建立或開啟檔案
vim filename
- 退出
:wq
- 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 檔案路徑,就會將這個檔案匯入到開啟檔案所在路徑
:!which 指令
:顯示執行所在路徑
自定義快捷鍵
:map 命令+自定義操作
:map ^p I#<ESC>
在頭部插入#
:map ^B 0x
刪除首行第一個字元:map [email protected]
在游標處插入郵箱
注意:^
是 Ctrl + V + 你要設定的快捷鍵
連續行註釋
:n1, n2s/^/#/g
^行首,#要替換內容 g不用詢問
:n1, n2s/^#//g
去掉行首的#號
替換
:ab mymail [email protected]
輸入mymail後就會自動替換郵箱
如果想永久生效,那麼配置檔案就必須寫在使用者目錄下命名為
.vimmrc
檔案就會自定義的配置就會永久生效
九、軟體包管理
軟體包分類
- 原始碼包
- 二進位制包(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
注意事項:
- 如果
yum -y update
沒有寫指定包名,那麼就會升級所有軟體包括核心,如果升級核心,需要在伺服器本地進行配置,所以千萬不要全部升級 - 使用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、原始碼包管理
區別
- 概念上區別
- 可選安裝位置
安裝準備
- 安裝C語言編譯器
gcc
- 下載要安裝的原始碼
注意事項
- 原始碼儲存位置:/usr/local/src
- 軟體安裝位置:/usr/local/
- 如何確定安裝過程報錯:
- 安裝過程停止,並出現error、warning或no的提示
原始碼包安裝過程
- 下載原始碼包
- 解壓縮下載的原始碼包
- 進入解壓縮目錄
./config 軟體配置與檢查
- 定義需要的功能選項
- 檢查系統環境是否符合安裝要求
- 把定義好的功能選項和檢測系統的資訊都吸入
Makefile
檔案,用於後續編輯
在解決之後,需要先檢視兩個檔案
INSTALL
後README
分別是:安裝說明,使用說明
開始操作
- 進入到包目錄後,直接解壓
./config --prefix=/usr/local/名字
make
編譯make install
編譯安裝
注意事項
- 如果在編譯的時候出現錯誤,可以使用
make clean
來清理編譯出的垃圾檔案
9.4、指令碼安裝包
概念
- 指令碼安裝包並不是獨立的軟體包型別,常見的安裝十原始碼包
- 是人為把安裝過程寫成了自動安裝的指令碼,只要執行指令碼,定義簡答引數,即可安裝
以.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
預設shellSKEL=/etc/skel
模板目錄CREATE_MAIL_SPOOL=yes
是否建立郵箱
注意事項:
- 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、修改使用者組的注意事項
- 要刪除組,但是要刪除組中已經有使用者,那得看該使用者的初始組是哪個,如果不是要刪除的組,那麼可以直接把這個組刪除掉;如果組下使用者的初始組是該組,那麼就必須先刪除使用者
十一、許可權管理
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 檔名
注意事項:
- 使用上面命令,是對已經存在的檔案或目錄設定許可權,如果是之後再新建的就不會有許可權
- 解決辦法是:設定預設許可權
預設ACL許可權
預設ACL許可權就是如果父目錄設定ACL許可權,那麼父目錄所新建的子檔案都會繼承父目錄的ACL許可權
setfacl -m d:u:使用者名稱:許可權 檔名
11.2、檔案特殊許可權
11.2.1、SetUID----4
什麼是SetUID
用來以該檔案屬主身份執行的一個許可權。
簡單的說:一個檔案有SUID許可權的話,那麼其他使用者在執行這個檔案的時候,就會擁有屬於該檔案的屬主許可權
- 只有可執行的二進位制程式才能設定SUID許可權。
- 命令執行者要對該程式擁有
x
(執行)許可權 - 命令執行者在執行噶程式時,獲得程式檔案屬主的身份(在執行程式的過程中靈魂附體為檔案的屬主)
- 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對目錄的作用
- 普通使用者必須對此目錄擁有
r
和x
許可權,才能進入此目錄 - 普通目錄在此目錄中的有小組會變成此目錄的屬組
- 若普通使用者對此目錄擁有
w
許可權時,新建的檔案預設陣列就是這個目錄的屬組
SetGID對檔案的作用
-
只有可執行的二進位制程式才能設定
SGID
許可權 -
命令執行者要對該程式擁有
x
(執行)許可權 -
命令執行在執行程式的時候,組身份升級為該程式檔案的屬組
-
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粘著位作用
- 粘著位目前只對目錄有效
- 普通使用者對該目錄擁有
w
和x
許可權,即普通使用者可以在此目錄擁有寫入許可權 - 如果沒有粘著位,因為普通使用者擁有
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程式
注意事項:
- 檔案最好以
.sh
為字尾。 - 嚴格區分大小寫
- 如果是在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
中修改
歷史命令的呼叫
- 使用上、下箭頭呼叫以前的歷史命令
- 使用
!n
重複執行第N條歷史命令- n:可以通過命令
history
命令檢視編號
- n:可以通過命令
- 使用
!!
重複執行上一條命令 - 使用
!字串
會執行最近以字串
開頭的命令
命令補全
在bash中,命令與檔案補全是非常方便與常用的功能,我們只要輸入命令或檔案時,按Tab
鍵就會自動補全。
按兩次Tab
鍵就會提示出與你要輸入的類似的命令
既可以補全命令也可以補全檔名
13.3.2、命令別名與常用快捷鍵
別名的設定方式
# 設定別名
alias 別名='原命令'
# 查詢命令別名
alias
命令執行順序
- 第一順序位執行用絕對路徑或相對路徑執行的命令
- 第二順序位執行別名
- 第三順序位執行
bash
的內部命令 - 第四順序位執行按照
$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、使用者自定義變數
- 在
bash
中變數的預設型別都是字串型別,如果要進行數值運算,則必須指定變數的型別為數值型。 - 變數兩邊不能有空格
程式碼示例
# 變數定義
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環境變數中
- 首先我們都知道像
ls
這種命令其實都是可執行檔案,可以使用相關命令檢視該命令所在路徑。 - 然後根據路徑看到該路徑在環境變數
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、環境變數配置檔案
什麼是環境變數配置檔案
主要是定義對系統的操作環境生效的系統預設環境變數,比如PATH
、HISTSIZE
、PSI``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
- 上面圖中的轉移符在,這裡不能使用
- 是否顯示此歡迎資訊,由
ssh
的配置檔案/etc/ssh/sshd_config
決定,加入Banner /etc/issue.net
行才能顯示(還得重啟SSH服務service sshd restart
)
登陸後歡迎資訊
/etc/motd
不管是本地登陸還是遠端登陸,都可以顯示歡迎資訊
13.6、正則表示式
正則表示式用來在檔案中匹配符合條件的字串。正則是包含匹配。grep
、awk
、sed
等支援正則
13.6.1、基本正則表示式
元字元 | 作用 |
---|---|
* |
前一個字元匹配0次或任意多次 |
. |
匹配出了換行符外任意1個字元 |
^ |
匹配行首,例如^he 以he 開頭的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、程序管理
程序管理作用
- 判斷伺服器健康狀態
- 檢視系統中所有程序
- 殺死程序
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 |
記錄當前一登入的使用者資訊。這個檔案會隨著使用者登入和登出不斷變化,只記錄當前登入使用者的資訊。要使用w 、who 、users 等命令檢視 |
除了系統預設的日誌之外,採用RPM
安裝的系統服務也會預設把日誌記錄在/var/log
目錄中(原始碼包安裝的服務日誌是在原始碼包指定目錄中)。不過這些日誌不是由rsyslogd
服務來記錄和管理的。而是由各個服務使用自己的日誌管理文件來記錄自身日誌
16.2、日誌檔案格式
基本日誌格式包含以下四列
- 事件產生的時間
- 發生事件的伺服器的主機名
- 產生事件的服務名或程式名
- 事件的具體資訊
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的分割槽的備份等級及備份時間
注意事項
-
dump備份分割槽的時候可以使用增量備份
-
當備份為獨立分割槽時,可以使用
-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