从零开始学习Linux笔记
Linux 從零開始學習筆記
從零開始學習Linux,記錄筆記,擔心自己以后會忘,也供大家茶余飯后,閑來無事看看,自己的理解只能到這,能力有限。也希望大家可以指出我的錯誤,讓我可以有一點點進步,以后會一直更新,同時也希望大家可以收藏,點贊加關注三連一下,大家有什么問題或者我的錯誤也可以在評論里留下來,相互討論一下,謝謝大家。
隨便一提,視頻配套的PPT在這 ,戳鏈接!!!!!!
視頻配套PPT.
或者自己復制
http://down-ww3.7down.net/pcdown/soft/xiazai/xishuolinux.rar
網絡基礎篇也已經開始更新啦,謝謝大家關注,有需要的可以去看看!鏈接: Linux網絡基礎篇.
或者聯系我:QQ1771566679 或者 加入QQ交流群一起分享資源 593378353
Linux學習筆記
- 第一章 Linux起源
- 第二章 系統分區
- 第三章 Linux安裝與配置
- 第四章 Linux常用命令
- 第一節 文件處理命令
- 第一講 命令格式與目錄處理命令ls
- 第二講 目錄處理命令
- 第三講 文件處理命令
- 第四講 鏈接命令
- 第二節 權限管理命令
- 第一講 權限管理命令chmod
- 第二講 其他權限管理命令
- 第三節 文件搜索命令
- 第一講 文件搜索命令find
- 第二講 其他文件搜索命令
- 第四節 幫助命令
- 第五節 用戶管理命令
- 第六節 壓縮解壓命令
- 第七節 網絡命令
- 第七節 掛載命令
- 第八節 關機重啟命令
- 第五章 文本編輯器Vim
- 第一節 Vim常用操作
- 第二節 Vim使用技巧
- 第六章 軟件包管理
- 第一節 軟件包管理簡介
- 第二節 rpm命令管理
- 第一講 包命名與依賴性
- 第二講 安裝升級與卸載
- 第三講 查詢
- 第四講 校驗和文件提取
- 第二節 RPM包管理
- 第一講 yum在線管理
- 第一部分 IP地址配置和網絡yum源
- 第二部分 yum命令
- 第三部分 光盤yum源搭建
- 第三節 源碼包管理
- 第一講 源碼包和RPM包的區別
- 第二講 源碼包安裝過程
- 第四節 腳本包管理
- 第一講 腳本包安裝
- 第七章 用戶和用戶組管理
- 第一節 用戶配置文件
- 第一講 用戶信息文件/etc/passwd
- 第二講 影子文件/etc/shadow
- 第三講 組文件信息/etc/group
- 第四講 組密碼文件/etc/gshadow
- 第二節 用戶管理相關文件
- 第三節 用戶管理命令
- 第一講 用戶添加命令useradd
- 第二講 修改用戶密碼passwd
- 第三講 修改用戶信息usermod
- 第四講 修改用戶密碼狀態chage
- 第五講 刪除用戶userdel
- 第六講 用戶切換命令su
- 第四節 用戶組管理命令
- 第八章 權限管理
- 第一節 ACL權限
- 第一講 ACL權限簡介與開啟
- 第二講 ACL權限查看與設定
- 第三講 ACL權限最大有效權限與刪除
- 第四講 ACL權限默認與遞歸
- 第二節 文件特殊權限
- 第一講 SetUID
- 第二講 SetGID
- 第三講 Sticky BIT
- 第三節 文件系統屬性chattr權限
- 第三節 系統命令sudo權限
- 第九章 文件系統管理
- 第一節 回顧分區和文件系統
- 第二節 文件系統常用命令
- 第一講 df命令、du命令、fsck命令和dump2fs命令
- 第二講 掛載命令
- 第三講 掛載光盤與U盤
- 第四講 支持NTFS文件系統
- 第三節 fdisk分區
- 第一講 fdisk命令分區過程
- 第二講 分區自動掛載與fstab文件修復
- 第四節 新建swap分區
- 第十章 Shell基礎
- 第一節 Shell概述
- 第二節 Shell腳本的執行方式
- 第三節 Bash的基本功能
- 第一講 歷史命令與命令補全
- 第二講 命令別名與常用快捷鍵
- 第三講 輸入輸出重定向
- 第四講 多命令順序執行與管道符 多命令順序執行
- 第五講 通配符與其他特殊符號
- 第四節 Bash的變量
- 第一講 用戶自定義變量
- 第二講 環境變量
- 第三講 位置參數變量
- 第四講 預定義變量
- 第五節 Bash的運算符
- 第一講 數值運算與運算符
- 第二講 變量測試與內容替換
- 第六節 Bash的運算符
- 第一講 環境變量配置文件簡介
- 第二講 環境變量配置文件作用
- 第三講 其他配置文件和登錄信息
- 第十一章 Shell編程
- 第一節 基礎正則表達式
- 第一節 字符截取命令
- 第一講 cut字段提取命令
- 第二講 printf命令
- 第三講 awk命令
- 第四講 sed命令
- 第三節 字符處理命令
- 第四節 條件判斷
- 第五節 流程控制
- 第一講 if語句
- 第二講 case語句
- 第三講 for循環
- 第四講 while循環與until循環
- 第十二章 Linux服務管理
- 第一節 服務簡介與分類
- 第二節 RPM包安裝服務的管理
- 第一講 獨立服務的管理
- 第二講 基于xinetd服務的管理
- 第三節 源碼包安裝服務的管理
- 第四節 服務管理總結
- 第十三章 Linux系統管理
- 第一節 進程管理
- 第一講 進程查看
- 第二講 進程管理
- 第二節 進程管理
- 第三節 系統資源查看
- 第四節 系統定時任務
- 第十四章 日志管理
- 第一節 日志管理簡介
- 第二節 rsyslogd日志服務
- 第三節 日志輪替
- 第十五章 啟動管理
- 第一節 CentOS 6.x啟動管理
- 第一講 系統運行級別
- 第二講 系統啟動過程
- 第二節 啟動引導程序grub
- 第一講 Grub配置文件
- 第二講 Grub加密與字符界面分辨率調整
- 第三節 系統修復模式
- 第十六章 備份與恢復
- 第一節 備份概述
- 第二節 dump和restore命令
第一章 Linux起源
unix,C語言,TCP-IP 可以看作三胞胎,他們結合在一起相互誕生,其他具體自行可以看:計算機組成原理,計算機網絡,以及C語言。可以結合在一起來學習,效果更佳。
第二章 系統分區
Linux與Windows一樣,它的主分區和拓展分區加起來不能超過四個,而且拓展分區最多一個且不能放入數據文件以及它不能格式化,拓展分區里放的邏輯分區可以放數據和格式化。
Linux 硬件全為文件 這一點與Windows不一樣,下面介紹一些Linux的主要硬件文件名已經存放路徑。
-
IDE硬盤 /dev/hd[a-d]
-
SCSI/SATA/USB硬盤 /dev/sd[a-p]
-
光驅 /dev/cdrom或/dev/sr0
-
軟盤 /dev/fd[0-1]
-
打印機(25針) /dev/lp[0-2]
-
打印機(USB) /dev/usb/lp[0-15]
-
鼠標 /dev/mouse
分區:把大硬盤分為小的邏輯分區
格式化:寫入文件系統
分區設備文件名:給每個分區定義設備文件名
掛載:給每個分區分配掛載點
注意:根分區 “/ ” 以下的子分區可以單獨使用硬盤
在虛擬機安裝中 swap 的大小為內存的兩倍但是超過2G沒有意義,建議1000MB合適
/boot路徑是為了讓Linux系統可以順利運行 里面最好不要存放數據 在虛擬機安裝中分配200M左右大小就可以了
安裝教程可以觀看一下視頻,新手學習建議安裝CentOS
鏈接: Linux安裝.
第三章 Linux安裝與配置
在Linux遠程登錄管理配置IP時,需要的一些簡單命令:
ifconfig 查詢當前網卡信息 ifconfig eth0 配置網卡 ifconfig eth0 后+ VmNAT8的網絡IP df 查看系統分區 ls /bin/ 里面存放的為Linux命令文件注意:這些配置都是臨時配置,在重啟之后IP會丟,永久修改需要在配置文件中修改
VmNAT8為VMware虛擬中虛擬網卡 可以自行查詢IP
具體操作看以下視頻:
鏈接: VMware環境配置.
第四章 Linux常用命令
第一節 文件處理命令
第一講 命令格式與目錄處理命令ls
-
以下為不同文件的不同后綴
壓縮包:.gz .bz2 .tar.bz2 .tgz
二進制軟件包:.rpm
網頁文件:.html .php
腳本文件:.sh
配置文件:.conf -
注意: Linux不靠擴展名區分文件信息,而且所有存儲設備必須掛載后方可使用(硬盤,U盤,光盤)
-
一些主要目錄
/bin/ ( bin的意思是二進制可執行文件)
/sbin/
/usr/bin/
/usr/sbin/
/boot/:系統啟動相關數據。需要備份時 /boot目錄(也需備份)
/dev:硬件信息 設備文件保存文字
/etc :(也需備份) 配置文件保存位置 如賬 戶,密碼
/lib/ :系統函數保存位置 (也需備份)
/lost+found/:意外關機或者系統崩潰產生的碎片文件 可以復原 家目錄
/media/: 掛載目錄 軟盤或光盤
/mnt/: 掛載U盤或者移動硬盤 -
空目錄才可以作為掛載點
例如:/mnt/cdrom 掛載光盤 /mnt/usb 掛載U盤
/opt/ :第三方軟件保存位置 不過保存到/usr/local/里更好 為約定俗成的
/proc/ :保存系統內核 進程的 例如CPU信息不能存放文件沒有意義 內存占滿死機 沒滿重啟消失
/sys/ :與proc一樣 是在內存里的 不可以寫東西 放內核信息
/tmp/ :臨時目錄 做練習
/usr/:系統軟件資源目錄(也需備份)
/var/: 動態數據保存 保存緩存,日志以及軟件運行產生的文件(也需備份)
文中標記(也需備份)的為在服務器中使用進行安全備份時主要的備份目錄 非常重要 -
常用命令
ls -a 查看隱藏文件
ls -l 長顯示,顯示文件或者目錄詳細信息包括大小 修改時間
ls -d 顯示目錄
ls -h 更加人性化顯示 比如字節轉換為MB,GB 不用自己算
ls -i 查詢文件inode號(inode存儲文件的詳細信息) 信息編號,類似于人的身份證號碼 -
用戶有三類
第一類:所有者(只有一個)
第二類:所屬組
第三類:其他人
在 ls -l 查詢文件詳細信息后,第一列會出現類似:-rwxr-xr-x 這樣的字符,其中開頭的 - 便是代表這個文件是二進制文件的意思,以下為其他開頭的含義:
-:二進制文件
d:目錄
l :軟鏈接文件
r 代表可以讀 w 代表可以寫 x代表可以執行
-rwxr-xr-x
-(rwx)(r-x)(r-x ) Linux中的文件以這種方式來顯示不同用戶的不同權限
u g o
u 所有者 g 所屬組 o 其他人
-(rwx)(r-x)(r-x )說明這個文件:所有者可以讀,寫,執行;所屬組可以讀和執行,但是不能寫;其他人可以讀和執行,但是不能寫。
第二講 目錄處理命令
- mkdir 創建目錄 在/tmp/目錄下創建臨時文件 只能創建/tmp/***** 二級目錄
mkdir -p 可以遞歸創建 在沒有一級目錄的情況下新創建二級目錄
pwd 顯示當前所在路徑
cd . . 返回上一級目錄(兩個點連著)
rmdir 刪除空目錄 只能刪除沒有文件的空目錄 (不經常使用)
cp 復制文件 cp [原文件路徑][需要復制到的路徑]
cp -r 復制目錄
cp -p 保留原文件屬性復制目錄 比如保留創建時間 日志文件的復制需要用到
cp -rp 復制目錄并且保留原文件屬性
mv 剪切 改名(在同一個目錄下為改名)
rm 刪除文件
rm -f 強制刪除 不再詢問
rm -r 刪除目錄 一般是rm -rf 連著用
control+C退出選項
注意:
rm -rf 使用時一定要謹慎 切記 !!!
使用時一定要謹慎 切記 !!!
使用時一定要謹慎 切記 !!!
rm -rf /* 系統直接全部被刪除!!!
第三講 文件處理命令
- touch [文件名] 在當前目錄下創建空文件
touch[絕對路徑+文件名]。 指明絕對路徑,在絕對路徑處創建文件
“Program files” 加雙引號創建帶空格的文件名 不推薦使用 以后的查詢,操作都需要用到 除了代表根分區的/ 以外 其他符號都可以 - cat [文件名] 顯示文件內容 只適合短的文件內容
cat -n [文件名] 顯示行號 給文件內容的每一行標號
cat -A [文件名] 顯示隱藏字符
tac [文件名] 逆序顯示文件內容 倒著來 不支持-n - more [文件名] 一頁一頁顯示文件內容 適合長的文件內容 空格或者f 翻頁 回車(Enter)一行一行翻,換行 q或者Q ,退出
- less [文件名] 一頁一頁顯示文件內容,只不過這條命令可以往回翻頁,查看翻過的文件內容 page up向上翻頁,↑箭頭向上翻一行
其他操作和more命令一樣 在less命令中 可以按/+需要查找文件內容的關鍵字查詢內容,高亮內容即為含有關鍵字的內容,按n(表示next)可以查看下一個含有關鍵字的內容 - head [文件名] 顯示文件最前幾行 具體幾行加n head -n 行數 [文件名] 沒有指定 默認10行
- tail [文件名] 顯示文件最后幾行 具體幾行加n tail -n 行數 [文件名] 沒有指定 默認10行 tail -f 動態顯示文件末尾內容
第四講 鏈接命令
首先給大家介紹一下軟鏈接:
軟鏈接的作用和Windows中的快捷方式是差不多的。他只不過是指向源文件安裝路徑的符號鏈接,所以大小也很小 而且它的文件類型是lrwxrwxrwx 看似三種用戶都可以擁有所有權限。其實,真正擁有的權限是源文件所決定的權限 ,所以這中顯示也是軟鏈接的一大特征之一。
- ln -s [原文件] [目標文件] 創建軟鏈接
硬鏈接:
硬鏈接就是把源文件拷貝到目標位置,而他與cp -p 最大的一點區別就是他可以同步更新,源文件有變化 硬鏈接文件也會同時發生變化,但是如果源文件丟失或者被刪除,硬鏈接也并不會消失。可以通過i節點來區分,源文件和硬鏈接文件的i節點是一樣的,所以他們會同步更新,但是他不能跨分區放置硬鏈接比如:/分區 硬鏈接 不能放到/boot 分區 ,而且不能對目錄使用。
- ln [原文件] [目標文件] 創建硬鏈接
第二節 權限管理命令
第一講 權限管理命令chmod
這一部分主要說明一下如何修改文件或者目錄的權限。
- chmod [{u,g,o,a}{+,-,=}{r,w,x}] [文件或者目錄]
u :所有者
g :所屬組
o :其他人
a :所有用戶
例如:chomd g+x,o+r /tmp/testfile
就是把testfile文件的所有組增加執行權限,其他人增加讀權限
chomd a=rwx /tmp/testfile
就是testfile文件的所有用戶增加讀寫執行權限
權限位的數字表示:
- chmod [rwx的和,rwx的和,rwx的和]] [文件或者目錄]
首先需要知道 r=4 w=2 x=1
例如:rwxrw-r- - 它的權限位數字表示就是 764
具體算法:
r+w+x=4+2+1=7
r+w=4+2+0=6
r=4+0+0=4 - chmod -R [rwx的和,rwx的和,rwx的和][文件或目錄]
這條命令與mkdir -p遞歸創建目錄一樣 這個命令把一個目錄下的所有子目錄的操作權限全部修改為同樣的 - 創建用戶命令
useradd [用戶名] 創建普通用戶
passwd [用戶名] 用戶密碼
su - [用戶名] 切換普通用戶**
我們仍需注意在文件與目錄中的不同權限,他們具體可以實施的操作是什么!這一點非常重要,有許多人到現在也不太清楚,認為對文件有寫權限就可以刪除文件。這一點是非常錯誤的。
附下表以供參考:
| r | 讀權限 | 可以查看文件內容 可以cat/more/head/tail/less | 可以列出目錄中的內容 可以ls |
| w | 寫權限 | 可以修改文件內容 可以vim | 可以在目錄中創建,刪除文件 可以touch/mkdir/rmdir/rm |
| x | 執行權限 | 可以執行文件 可以script(腳本) command(命令) | 可以進入目錄 可以cd |
第二講 其他權限管理命令
改變文件或者目錄所有者
- chown [所有者] [文件或者目錄]
改變所有組
- Groupadd [所有組組名] 添加組
- chgrp [所有組][文件或者目錄]
默認組為創建文件的所有者的缺省組 - umask -S 以rwx形式顯示新建文件缺省權限
改變文件或者目錄所有者和所屬組
- chown [所有者]:[所屬組] [文件或者目錄]
但是在mkdir 一個目錄之后
進行ls -ld 發現他的權限為 drwxr-xr-x
但是在touch 一個文件之后
進行ls -l 發現他的權限為-rw-r- -r- -
這是因為在Linux系統里面把任何新建的文件都會把可執行權限去掉,其實umask值還沒變,只不過是因為他是文件,木馬病毒入侵之后沒有可執行權限,就沒有作用了。
- umask
umask 指令直接輸入之后會顯示 0022
其中 0代表特殊權限
022代表 777與022之間的一種邏輯與的關系
他會進行邏輯比對,兩者重復的不能保留,把沒有的寫下來
777 rwx rwx rwx
022 — -w- -w-
—————————
755 rwx r-x r-x 目錄
rw- r— r— 二進制文件
如果想把默認創建的文件改為700
700 rwx — --- 目錄
rw- — --- 二進制文件
這樣運算 進行邏輯與比對
777 rwx rwx rwx
X
—————————
700 rwx — ---
這就像一個解方程 求X
X=— rwx rwx 077
可以使用umask 077 修改缺省創建文件權限,但是不推薦修改。
第三節 文件搜索命令
第一講 文件搜索命令find
- find [搜索范圍][匹配條件] 用于文件搜索
- find [搜索范圍] -name [關鍵字] 在特定路徑下搜索文件名作為關鍵字的文件或者目錄
- find [搜索范圍] -name [關鍵字]* 這樣為帶有關鍵字開頭的任何文件都可以被搜索出來
- find [搜索范圍] -name * [關鍵字] * 這樣為帶有關鍵字的任何文件都可以被搜索出來
匹配任意字符 加通配符* - find [搜索范圍] -name [關鍵字]??? 這樣搜索的是關鍵字后帶三個字符的 幾個問號為幾個字符
- find [搜索范圍] -iname [關鍵字] 不區分大小寫搜索
注意:不能在服務區高峰時候使用查找命令。太占內存資源,搜索的范圍路徑越小越好,搜索條件越精準越好 - find [搜索范圍] -size [數據塊] 根據文件大小查找
數據塊前面加+表示查找大于這個大小的文件,-表示查找小于這個大小的文件,不加表示查找等于這個大小的文件(一般不常用)
1個數據塊=512字節=0.5K
size后接的數據只能為數據塊 需要換算,比如需要查找大于100MB的文件
100MB=102400KB=204800
find /etc -size +204800
數據塊為Linux存儲文件最小單位 - find [搜索范圍] -user [所有者名] 根據所有者查找
- find [搜索范圍] -group [所屬組名] 根據所屬組查找
- find [搜索范圍] -amin [時間] 查找時間以內被訪問過的文件和目錄 a:access
- find [搜索范圍] -cmin [時間] 查找時間以內被修改過屬性的文件和目錄 c:change
- find [搜索范圍] -mmin [時間] 查找時間以內被修改過內容的文件和目錄 m:modift
+:超過多長時間 -:多長時間以內 - find [搜索范圍] -size [數據塊] -a -size [數據塊]
-a:兩個條件同時滿足
-o:兩個條件滿足任意一個即可
find /etc -size +163840 -a -size -204800
在/etc下查找大于80MB小于100MB的文件 - find [搜索范圍] -name [關鍵字] -a -type f
在特定路徑下搜索文件名作為關鍵字的文件
-type 根據不同類型查找
f:文件
d:目錄
l:軟鏈接 - find [搜索范圍] -name [關鍵字] -exec ls -l {} \ ;
查找到文件之后并且對其進行查看ls操作。
-exec:查找到文件之后并且對其進行各種操作 {} \ ;不能丟
-ok:用于詢問確認 一般在刪除操作的時候使用,比如:
find -user yangyang -ok rm {} \ ;
刪除yangyang用戶的文件 他會挨個詢問你是不是確定刪除 - find [搜索范圍] -inum [i節點值] 根據i節點查詢
find /etc -inum 12345 -exec rm {} \ ;
刪除這個i節點文件 非常方便
也可以用來查詢一個文件的硬鏈接
find /etc inum 12345 -exec ls -l {} \ ;
因為硬鏈接和文件肯定在同一個分區,并且i節點一樣
第二講 其他文件搜索命令
- locate [文件名]
在文件資料庫中查找 速度更快
updatedb 更新文件資料庫 因為locate并不是實時的
如果存放的文件在/tmp 臨時文件存放處下面 locate就找不到,文件資料庫不存儲臨時文件內容
注意:在使用的Linux系統為Linux(CentOS7)的時候,使用命令locate時發現系統顯示:-bash: locate: 未找到命令,遇到錯誤。它的原因是:在CentOS 7 系統中默認沒有安裝該命令。
以下為解決辦法:
鏈接: 解決locate命令未找到問題. - locate -i 不區分大小寫查找
- which 查找命令存放位置,可以看到命令可以使用的使用者是誰,也可以查看命令別名 which rm 會顯示 alias rm='rm -i’
我們所使用的rm只不過是別名 不是真正的rm命令,其實是rm -i命令,所以才會詢問是否真的刪除,真正的rm是不會詢問的,比如:
/bin/rm /tmp/yangyang 文件直接刪除不會詢問是否刪除 相當于加了 -f - whereis 也可以找到命令的絕對路徑,還可以找到查詢命令的幫助信息文檔所在位置
- grep 在文件內查詢字符串或者關鍵字列出來
- grep -i 不區分大小寫查找
- grep -v 排除指定字符串
比如:
grep -v ^# /etc/inittab
查找排除#開頭的注釋行文件信息
^代表行首
文件中#開頭的行 為配置文件信息,腳本信息
第四節 幫助命令
- man [命令名稱或者配置文件名稱] 獲得命令或者配置文件的幫助信息
man后面直接寫命令或者配置文件的名稱就好,不能加絕對路徑。進入里面之后操作和more,或者less一樣。
如過使用CentOS服務器,沒有man命令,需要輸入下面命令來下載:
sudo yum install man-pages
配置文件幫助文檔第一步看他是干什么用的,第二步看配置文件的格式。
man services
service-name | port/protocol | [aliases …]
服務名稱 | 端口/傳輸協議 | [別名]
就可以看懂more /etc/services里的配置文件了
man passwd 他會把命令,命令的幫助,配置文件,全部找到
通過whereis passwd 可以發現
/usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
有三個路徑 他們分別為命令的路徑,命令的幫助的路徑,配置文件的幫助路徑
其中man1代表命令的幫助,man5代表配置文件的幫助
所以我們可以通過man 5 passed就可以直接找到配置文件的幫助 - whatis ls [命令] 查詢簡短的命令的作用
- apropos [配置文件名稱] 查詢簡短的配置文件的作用
- [命令] - -help 找到命令的主要選項
- date 查詢系統當前時間
如果想修改提前用man date 查看一下時間格式
例如:
date 051910272020.18
修改完畢
man與info作用大同小異,沒有本質區別,依照個人習慣使用 - help 查詢shell內置命令的幫助信息
在CentOS7之前的版本 直接which 命令是找不到所在路徑的,因為:
Shell是一個命令解釋器 它里面有內置命令比如cd,umask
他們使用which后找不到命令所在路徑,他們就不能使用man 命令 ,他會把所有的內置命令全列出來 可以直接使用help
help用于內置命令的幫助和shell編程查看語法規則
第五節 用戶管理命令
- useradd 添加新用戶
- passwd [新用戶名稱] 給新用戶填加密碼
- who 查看登陸用戶信息
第一列 登陸用戶名
第二列 登陸終端 tty表示本地終端 pts表示遠程登陸終端
第三列 登陸時間
第四列 登陸主機的IP地址 如果沒有寫表示本機登陸 - w 查看登陸用戶詳細信息
第一行顯示
17:04:55 up 22 days, 21:32, | 2 users,| load average: 0.02, 0.02, 0.05
第一個表示當前時間
第二個表示服務區系統連續運行時間沒有重啟或者關機,衡量服務區穩定性
第三個表示當前總共有多少個用戶登陸
第四個表示負載均衡指數,分別記錄了過去一分鐘,五分鐘,十五分鐘系統的負載情況,加起來除以三就是平均負載指數,系統的負載情況主要是指 CPU和內存的負載情況,數字大表示負載嚴重
uptime 命令也可以顯示此項數據
第二行顯示
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
其中IDLE表示用戶登陸過來后空閑多久
PCPU表示用戶登陸后執行的操作占用的CPU的時間 CPU時間
JCPU表示累計占用的CPU時間
WHAT表示執行的操作
第六節 壓縮解壓命令
- gzip [文件名] 壓縮文件 只能壓縮文件不能壓縮目錄,而且不保留原文件
壓縮后格式為:.gz - gunzip [壓縮包名] 解壓縮.gz文件
- gzip -d [壓縮包名] 也是一樣的作用,解壓縮.gz文件
- tar [選項] [壓縮后文件名] [目錄]
-c 打包
-v 顯示詳細信息
-f 指定文件名
-z 打包同時壓縮
例子:
tar -cfv Japan.tar Japan
打包目錄Japan 并且以Japan.tar命名
tar -zcfv Japan.tar.gz Japan
打包并且壓縮 目錄Japan 以Japan.tar.gz命名
一步到位 - tar [選項] [壓縮文件名] [目錄]
-x 解包
-v 顯示詳細信息
-f 指定解壓文件名
-z 解壓縮
tar -xfv Japan.tar Japan
解包目錄Japan.tar并且以Japan命名
tar -zxfv Japan.tar.gz
解壓縮并且解包目錄Japan.tar.gz以Japan命名 - zip [選項] [壓縮后文件或目錄名] [文件或目錄]
原文件會保留 而且提示壓縮比 deflated
沒有gzip壓縮比大,不常用
壓縮后格式為:.zip
zip -r 壓縮目錄 - unzip [壓縮文件] 解壓zip文件
- bzip2 [選項] [文件名] 壓縮文件,大型文件一般用這個壓縮
例子:
bzip2 -k Japan
-k:保留原文件 如果不需保留可去掉
生成Japan.bz2壓縮文件
他還可以與tar結合使用
tar -cjfv Japan.tar.bz2 Japan - bunzip2 [選項] [壓縮文件名] 解壓文件
-k:保留壓縮包
與tar結合使用
tar -xjfv Japan.tar.bz2 Japan
第七節 網絡命令
- write <用戶名> 給在線用戶發信息,按Ctrl+D保存結束 只能給在線用戶發 可以用w查詢用戶在線情況 不在線發不出去
- wall [信息] 發廣播信息 群發所有在線用戶
- ping [IP地址] 測試網絡連通性
ping -c 指定發送次數 - ifconfig 查看網卡信息 主要功能是查詢當前本機IP地址
- mail <用戶名>
給不在線的用戶發送郵件
例子:mail yangyang
進入之后:
Subject:輸入標題
下面輸入正文,按Ctrl+D保存結束并發送
按mail查詢收到的郵件
N 表示未讀郵件
想看第幾封郵件就按前面的標號數字
h鍵查看郵箱列表
d [n] 刪除第n封郵件
q 退出
在CentOS7服務器中,比如阿里云ESC服務器中運行的CentOS7中,就會出現mail命令無法使用:Linux CentOS7 命令錯誤:send-mail: fatal: parameter inet_interfaces: no local interface found for ::1
解決辦法寫在了我的另一片博文上:
鏈接: mail命令錯誤解決辦法.
以供大家解決問題。 - last 列出目前與過去登陸系統的用戶信息
- lastlog 檢查某特定用戶上次登陸的時間
- lastlog -u [uID] 檢查uID用戶上次登陸的時間
- traceroute 顯示數據包到主機間的路徑
這里CentOS7用戶也會出現traceroute命令不能使用的問題,直接下載traceroute就好了
yum install -y traceroute 安裝 - traceroute [網站網址] 可以檢查網絡哪個節點出現問題
- netstat [選項] 顯示網絡相關信息
-t TCP協議:傳輸控制協議
-u UDP協議:用戶數據報
-l 監聽
-r 路由:網關
-n 顯示IP地址和端口號
netstat -tlun :查詢本機監聽的端口
netstat -an :查看本機所有的網絡連接
netstat -rn :查看本機路由(網關) - setup 配置網絡 redhat專有命令 ,在其他版本不存在,他是永久生效的 和剛開始介紹的ifconfig命令不一樣
CentOS7使用 nmtui命令代替setup,不過是在虛擬機中調試
第七節 掛載命令
- mount [-t 文件系統] 設備文件名 掛載點
- mount 設備文件名/掛載點 卸載光盤,設備文件名和掛載點兩者任選其一
第一步:放入光盤,虛擬機中放入,或者服務器下載ios文件
第二步:創建一個空目錄,設為掛載點
mkdir /media/cdrom /media用來做光盤掛載的,/mnt 也可以
第三部:輸入命令
mount -t iso9660 /dev/sr0 /media/cdrom
設備文件名默認就是/dev/sr0,文件系統為iso9660 它是國際標準的cd文件格式,它告訴mount命令,我要掛載的是一個標準的cd。需要死記!!!
/dev/cdrom也可以寫 /dev/sr0
/dev/cdrom是sr0的軟鏈接。
第四步:進入掛載后的盤符
cd /media/cdrom
第四步:卸載光盤
先退出/media/cdrom,輸入命令:cd;然后再輸入命令:umount /dev/sr0
注意:如果之前掛載過其他盤,需要卸載之后才能掛載,輸入命令:
umount /dev/sr0
第八節 關機重啟命令
- shutdown [選項] 時間
時間選項里可以填具體時間比如:
now 現在關機
20:30 八點半關機
-c:取消前一個關機命令
-h:關機
-r:重啟
例子:
shutdown -h now 關機
shutdown -c 取消上一次設定的關機時間
在服務器上重啟需要謹慎,需要先停掉服務,否則物理內存會壞
而且遠程服務器只能重啟,關機后需要管理員手動開機 - 其他關機命令:
halt
poweroff 相當于直接斷電
init 0
推薦使用shutdown關機,會保存正在運行的服務
其他重啟命令:
reboot
init 6
系統的運行級別:
init 0-6
0:關機
1:單用戶 進入選項菜單 只有root用戶登陸進去 相當于Windows安全模式F8,只不過沒有圖形界面
2:不完全多用戶,不含NFS服務,沒有圖形界面 NFS網絡文件系統,Linux之間文件傳輸共享方式,除了NFS服務,和3一樣。
3:完全多用戶,沒有圖形界面
4:未分配,沒有圖形界面
5:圖形界面
6:重啟 - runlevel 查詢系統運行級別
- logout 退出登陸命令
注意:在服務器中一定要在操作完成之后退出登陸,否則其他人會直接進入你的服務器,造成非常大的損失。最基本的安全意識一定要有!!!
第五章 文本編輯器Vim
第一節 Vim常用操作
Vim沒有菜單,只有命令
Vim的工作模式有三種:
- 第一種:命令模式 vi/vim+文件名 進入命令模式 不可以輸入文字,只能識別命令
插入命令:
a:在光標所在字符后插入
A:在光標所在行尾插入
i:在光標所在字符前插入
I:在光標所在行行首插入
o:在光標下插入新行
O:在光標上插入新行 - 第二種:插入模式 按i/a/o進入,可以繼續輸入文字,按Esc退出
- 第三種:編輯模式 在命令模式下按:,即可進入 編輯模式 可以輸入編輯命令 比如:保存并退出,加行號
定位命令:- :set nu 設置行號
- :set nonu 取消行號
- gg 到第一行
- G 到最后一行
- nG 到第n行
- : n 到第n行 和上面一樣的格式
- $ 移動到行尾
- 0 移動到行首
- 刪除命令:
- x 刪除光標所在處的字符
- nx 刪除光標所在處后n個字符
- nd 刪除光標所在行
- ndd 刪除n行
- dG 刪除光標所在行到文件末尾的內容
- D 刪除光標所在處到行尾內容
- :n1,n2d 刪除指定范圍的行 n1-n2的行全部被刪除
- 復制和剪切命令:
- yy 復制當前行
- nyy 復制當前行一下n行
- dd 剪切當前行
- ndd 剪切當前行以下n行
- p 粘貼在當前光標所在行下
- P 粘貼在當前光標所在行上
- 替換或取消命令:
- r 替換光標所在處字符
- R 從光標所在處開始替換字符,按Esc結束
- u 取消上一不操作
- 搜索和搜索替換命令:
- /string 搜索指定字符串string 與less命令操作類似
搜索時忽略大小寫:set ic
搜索時不忽略大小寫:set noic - n 搜索指定字符串的下一個出現位置
- :%s/要替換的字符串/替換的新的字符串/g 不詢問
把/g換成/c 進行詢問確認
全文替換指定字符串 - :n1,n2s/要替換的字符串/替換的新的字符串/g
在一定范圍內替換指定字符串
- /string 搜索指定字符串string 與less命令操作類似
- 保存和退出命令:
:w 保存修改
:w new_filename 另存為指定文件
:wq 保存修改并退出
ZZ 快捷鍵,保存修改退出
:q! 不保存修改退出
:wq! 保存修改并退出(只有文件所有者以及root可以使用)適合保存root只有只讀權限的文件
第二節 Vim使用技巧
在Vim中有許多黑科技小技巧便于我們操作,我總結了以下幾天最為方便的操作,以供大家學習:
- :r !命令 當前的Vim文檔導入命令執行結果
例子:
:r !date 直接把當前時間導入當前的Vim文檔 - map [快捷鍵] [觸發命令] 定義快捷鍵
其中快捷鍵需要按ctrl+v+需要設定的鍵位,設定好之后顏色會變,比如想設定ctrl p為快捷鍵那么就按ctrl+v+p 會出現^P ,不能按shift+6出現的^,這兩個雖然看起來一樣但是顏色不一樣
觸發命令按需要執行的命令的先后順序來排列,比如給腳本加注釋#鍵就可以把[觸發命令]設為I#
例子:
map ^P I# 給腳本行首加#注釋 - :n1,n2s/^/#/g 替換行首字符為#,連續行的注釋,不過需先設置行號 :set nu
- :n1,n2s/^#/ /g 取消注釋
- :n1,n2s/^/ \ / \ //g 給行首加// 需先設置行號 :set nu
因為系統無法識別太多的,所以需要在//每一條/前都加轉義符\,\表達命令的正在含義,比如ls /etc 里面的文件會有顏色,但是\ls 就沒有,他是表達執行ls真正含義不執行ls別名 - ab [a內容][b內容]
例子:
ab mymail 1771566679@qq.com
替換命令,當你在vim文檔中輸入mymail時按回車或者空格會自動變1771566679@qq.com
即:會自動把b內容替換成a
非常實用的小技巧
有些時候在重啟服務器之后,定義的快捷鍵會消失,這時候我們需要在用戶的家目錄下寫配置文件,保存快捷鍵
root用戶在 /root/.vimrc
其他用戶在 /home/username/.vimrc在里面進行編輯,永久生效
第六章 軟件包管理
第一節 軟件包管理簡介
源碼包:可以看到源代碼,但是安裝時間較慢,腳本安裝包 類似Windows安裝軟件, 他是寫了安裝界面的源碼包
- 優點:
- 1.開源,如果有足夠的能力,可以修改源代碼
- 2.可以自由選擇所需的功能
- 3.軟件是編譯安裝,所以更適合自己的系統,使用更加穩定也效率更高
- 4.卸載方便,直接刪除安裝目錄
- 缺點:
- 1.安裝過程步驟較多,尤其安裝較大的軟件集合時(如LAMP環境搭建),容易出現拼寫錯誤
- 2.編譯過程時間較長,安裝比二進制安裝時間長
- 3.因為是編譯安裝,安裝過程中一旦報錯新手很難解決
二進制包:RPM包,系統默認包,廠商已經進行了編譯,看不到源代碼,但是安裝時間較快
- 優點:
- 1.包管理系統簡單,只通過幾個命令就可以實現包的安裝,升級,查詢和卸載
- 2.安裝速度比源碼包安裝快得多
- 缺點:
- 1.經過編譯,不再可以看到源代碼
- 2.功能選擇不如源碼包靈活
- 3.依賴性 依賴性指的是要想安裝A包就得先安裝B包,要想安裝B包又得先安裝C包,所以只能以CBA的順序安裝RPM包,刪除的時候得按ABC順序刪除安裝包,基本上所有的RPM包全有依賴性
第二節 rpm命令管理
第一講 包命名與依賴性
RPM包命名規則
例子:
Httpd-2.2.15.el6.centos.1.i686.rpm
其中:
- Httpd 軟件包包名
- 2.2.15 軟件版本
- 15 軟件發布的次數
- el6.centos 適合的Linux平臺
- i686 適合的硬件平臺 noarch 表示任何硬件平臺都可以安裝
- rpm rpm包擴展名
如果自己組建rpm包,都以rpm結尾,這樣更加清晰,其他管理員可以明白
注意:Httpd-2.2.15.el6.centos.1.i686.rpm為包全名,Httpd 為包名是有區別的,Linux系統命令嚴格區分兩者
RPM包依賴性
- 樹形依賴:a→b→c
- 環形依賴:a→b→c→a
- 環形依賴需要把a,b,c三個同時安裝
模塊依賴:模塊依賴查詢網站:www.rpmfind.net
==如果安裝時遇到問題,出現依賴性錯誤
被依賴文件以.so.[數字]結尾的為庫依賴,需要直接安裝這個軟件,錯誤會自動解決
安裝這個包時需要進入網站 www.rpmfind.net.
查詢被依賴文件
第二講 安裝升級與卸載
包全名:操作的包是沒有安裝的軟件包時,使用包全名。而且要注意路徑
包名:操作以及安裝的軟件包時,使用包名。是默認在搜索/var/lib/rpm中的數據庫
- rpm -ivh 包全名 RPM安裝
-i 安裝(install)
-v 顯示詳細安裝信息(verbose)
-h 顯示進度(hash)
–nodeps 不檢測依賴性 一般不用,安裝時都得顯示依賴性
注意:安裝一定要用包全名 - rpm -Uvh 包全名 RPM包升級
-U 升級(upgrade)
rpm -e 包名
-e 卸載(erase)
–nodeps 不檢查依賴性
第三講 查詢
- rpm -q 包名 查詢是否安裝
-q 查詢(query)
rpm -qa 查詢所有安裝的包
-a 所有(all) - rpm -qa | grep [關鍵字]
查詢所有含義關鍵字的包,| 為管道符 。作用是管道符左邊命令的輸出就會作為管道符右邊命令的輸入
注意:
1、管道命令只處理前一個命令正確輸出,不處理錯誤輸出。
2、管道命令右邊命令,必須能夠接收標準輸入流命令才行。 - rpm -qi 包名 查詢安裝過軟件包詳細信息
-i 查詢軟件信息(information)
-p 查詢未安裝包信息(package) - rpm -qip 包全名 查詢沒安裝過軟件包詳細信息 因為包沒有安裝所以得加包全名,因為包在生產好的時候他的信息就已經生成,所以可以查到沒安裝好的包的信息
- rpm -ql 包名 查詢包中文件安裝位置
-l 列表(list)
-p 查詢未安裝包信息(package) - rpm -qf 系統文件名 查詢系統文件屬于哪個RPM包
-f 查詢系統文件屬于哪個軟件包(file) - rpm -qR 包名 查詢軟件包的依賴性
-R 查詢軟件包的依賴性(requires)
-p 查詢未安裝包信息(package)
第四講 校驗和文件提取
- rpm -V 已安裝的包名 RPM包校驗
-V 校驗指定RPM包中的文件(verify)
例子:rpm -V httpd 顯示:
S.5……T. c /etc/httpd/conf/heepd.conf- 驗證內容中的8個信息的具體內容:
S:文件大小是否改變
M:文件的類型或文件的權限(rwx)是否被改變
5:文件MD5校驗和是否改變(可以看成文件內容是否改變) MD5是進行文件完整性驗證的
D:設備的中,從代碼是否改變
L:文件路徑是否改變
U:文件的屬主(所有者)是否改變
G:文件的屬組是否改變
T:文件的修改時間是否改變 - 文件類型:
c:配置文件(config file)
d:普通文檔(documentation)
g:“鬼”文件(ghost file),很少見,就是該文件不應該被這個RPM包包含
l:授權文件(license file)
r:描述文件(read me)
- 驗證內容中的8個信息的具體內容:
- rpm2cpio 包全名 | cpio -idv.文件絕對路徑
rpm2cpio 將rpm包轉換為cpio格式的命令
cpio 是一個標準工具,他用于創建軟件檔案文件和從檔案文件中提取文件
第二節 RPM包管理
第一講 yum在線管理
第一部分 IP地址配置和網絡yum源
IP地址配置
紅帽使用setup 命令配置IP,子網掩碼,網關,DNS
然后service network restart 重啟網絡服務
CentOS7使用nmtui命令配置IP,子網掩碼,網關,DNS
然后service network restart 重啟網絡服務
云服務器進阿里云/騰訊云遠程登陸端口配置
如果還沒有聯網 輸入命令:
vi/etc/sysconfig/network-scripts/ifcfg-eth0
進入Vim編輯器后把ONBOOT=“no”改為ONBOOT=“yes” ,接著需要使用命令service network restart,重新啟動網卡
網絡yum源
vi /etc/yum.repos.d/CentOS-Base.repo
其中:
- CentOS-Base.repo為網絡yum源
- CentOS-Media.repo為本地磁盤yum源
進入yum內部配置文件中可以看到以下內容:
- [base]:容器名稱,一定要放在[]中
- name:容器說明,可以自己隨便寫
- mirrorlist:鏡像站點,這個可以注釋掉
- baseurl:我們的yum源服務器的地址。默認是CentOS的官方的yum源服務器,是可以使用的,如果覺得慢可以改成你喜歡的yum鏡像源地址
- enabled:此容器是否生效
如果不寫或者寫成enable=1都是生效的,寫成enable=0就是不生效 - gpgcheck:如果1是指RPM的數字證書生效,如果是0則不生效
- gpgkey:數字證書的公鑰文件保存位置。不用修改
第二部分 yum命令
- yum list 查詢所有可用軟件包列表
- yum search [關鍵字(包名)] 搜索服務器上所有和關鍵字相關的包
- yum -y install [包名] 安裝軟件包
install 安裝
-y 自動回答yes - yum -y update [包名] 升級軟件包
update 升級
-y 自動回答yes
注意:yum -y update 后必須加包名,否則就是全盤更新,包括Linux內核也會更新,Linux內核在更新完成之后需要在本地進行配置,內核才可以啟動,如果你是在服務器上跑這條命令,服務器直接崩潰,永遠無法連接,再也不能啟動!!! - yum -y remove 包名 卸載包
remove 卸載
-y 自動回答yes
注意:yum -y remove卸載會把包所有的依賴包都會卸載,有時候會把系統文件也同時卸載,小心使用,盡量不要多用!!!
Linux 服務器安裝軟件包原則:
最小化安裝,不安裝多余軟件,使用什么軟件安裝什么軟件,手工裝,盡量不卸載,尤其yum卸載盡量不要用!!!
yum軟件組管理命令
- yum grouplist 列出所有可用的軟件組列表
- yum groupinstall “軟件組名” 安裝指定軟件組,組名可以由grouplist查詢出來,如果組名之間有空格,用雙引號擴起來
- yum groupmove 軟件組名 卸載指定軟件組
第三部分 光盤yum源搭建
光盤yum源搭建步驟:
- 第一步:掛載光盤
mount /dev/sr0 /mnt/cdrom - 第二步:讓網絡yum源失效
把/etc/yum.repos.d/文件里除了CentOS-Media.repo文件的其他文件全部改名,把repo后綴改了,隨便改一個,比如.bak
還可以讓每個文件里面的enabled=0 - 第三步:修改光盤yum源文件
vim CentOS-Media.repo
[容器] 改為c6-media 叫什么都可以
name=CentOS-$releaserver - Media 名稱叫什么都可以
baseurl=file:///mnt/cdrom 地址為自己的光盤掛載地址 file:// 為固定格式不能省略 /mnt/cdrom為光盤掛載地址
把下面兩個多余地址用#注釋了
然后把enabled=0改為enabled=1 讓源配置文件生效
注意:千萬不要隨意改配置文件格式,加注釋,加空格縮緊 都會造成命令錯誤!!!!!
第三節 源碼包管理
第一講 源碼包和RPM包的區別
安裝之前的區別:概念上的區別
安裝之后的區別:安裝位置不同
-
RPM包默認安裝路徑(絕大部分軟件文件安裝位置)
- /etc 安裝文件安裝目錄
- /usr/bin/ 可執行的命令安裝目錄
- /usr/lib 程序所使用的函數庫保存位置
- /usr/share/doc/ 基本的軟件使用手冊保存位置
- /usr/share/man 幫助文件保存位置
-
源碼包安裝位置:
安裝在指定位置當中,一般是
/usr/local/軟件名/ -
安裝位置不同帶來的影響
RPM包安裝的服務可以使用系統服務管理命令(service)來管理,例如RPM包安裝的Apache的啟動方法是:-
/etc/rc.d/init.d./httpd start
-
service httpd start (紅帽系列專有命令,如果沒有只能靠/etc/rc.d/init.d./啟動)
-
RPM包的啟動文件全在/etc/rc.d/init.d./里,servic會搜索RPM包所有的安裝路徑,所以service才能啟動RPM包軟件,但是啟動不了源碼包軟件,因為源碼包在/usr/local里,和RPM包不一樣
- 源碼包啟動使用絕對路徑加start
第二講 源碼包安裝過程
這里舉例(安裝Apache)說明一下:
-
1.安裝準備
安裝C語言編譯器
使用命令:
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
下載源碼包
http://mirror.bit.edu.cn/apache/httpd/
選擇任何版本,比如:
httpd-2.4.43.tar.bz2 版本 -
2.注意事項
源碼包保存位置:/usr/local/src
軟件安裝位置:/usr/local
然后確定安裝過程報錯:
安裝過程停止,并出現error,warning或者no提示,即發生錯誤
把電腦本機下載好的源碼包傳輸到Linux系統或者服務器上
Windows下載WinSCP軟件進行本機與虛擬機或者遠程傳輸
Mac連接遠程阿里云服務器,終端使用命令 scp進行傳輸:
scp -r localfile.txt username@192.168.0.1:/home/username/
其中,
1)scp是命令,-r是參數
2)localfile.txt 是文件的路徑和文件名
3)username是服務器賬號,一般為root
4)192.168.0.1是要上傳的服務器ip地址
5)/home/username/是要拷入的文件夾路徑,一般為/root 家目錄
例子:
scp -r /Users/yangyangyang/Desktop/httpd-2.4.43.tar.bz2 root@47.95.5.171:/root -
3.解壓下載到源碼包
使用命令 tar -jxvf httpd-2.4.43.tar.bz2
如果是tar.gz壓縮包可以使用 tar -zxvf 命令 -
4.進入解壓縮目錄
輸入命令:cd httpd-2.4.43
INSTALL:安裝說明
README:使用說明
進入安裝說明:vi INSTALL
$ ./configure --prefix=PREFIX 編譯前準備
$ make 進行編譯
$ make install 編譯安裝
$ PREFIX/bin/apachectl star 啟動命令
這些為詳細的安裝步驟,其中:
./configure為軟件配置與檢查 我們也稱編譯前準備
1.定義需要的功能選項。
2.檢測系統環境是否符合安裝要求
3.把定義好的功能選項和檢測系統環境的信息都寫入Makefile文件,用于后續的編輯。 -
4.定義安裝路徑
退出之后
輸入命令:./configure --prefix=/usr/local/apache2
如果報錯顯示:
進以下網址尋求解決辦法
http://www.cnblogs.com/yuzhaokai0523/p/4382974.html -
5.完成定義:
輸入命令:make 進行編譯 -
6.完成編譯:
輸入命令:make install 編譯安裝 -
7.啟動:
輸入命令:/usr/local/apache2/bin/apachectl start
$ PREFIX/bin/apachectl star中 $ PREFIX為軟件安裝路徑
啟動apache遇到錯誤:httpd: Could not reliably determine the server’s fully qualified domain name
解決辦法:
1.cd /usr/local/apache2/conf
2.vi httpd.conf
找到#ServerName www.example.com:80
并且在下面一行添加
ServerName localhost:80 localhost可以換成阿里云的IP
3.保存并退出
4.再重新啟動apache
/usr/local/apache2/bin/apachectl start
阿里云服務器的Linux需要關閉防火墻,然后在控制臺里面的實例添加一個安全組,端口號為80的,協議是TCP
如果還是不行的話聯系我的QQ:1771566679
如果在以后碰到
./configure這一步編譯錯誤,問題解決不了 自己輸入命令:make clear 自己清除所有編譯產生的臨時文件,因為在輸入make instal之后軟件才真正開始安裝。
第四節 腳本包管理
第一講 腳本包安裝
腳本包:
- 腳本安裝包并不是獨立的軟件包類型,常見安裝的是源碼包。
- 是人為把安裝過程寫成了自動安裝的腳步,只要執行腳本,定義簡單的參賽,就可以完成安裝。
- 非常類似于Windows下軟件的安裝方式。
安裝程序以.sh結尾 下一步點回車
再輸入的時候如果想刪除字符按ctrl+退格鍵
比如安裝Webmin 網頁系統用戶管理,圖形化工具管理
第七章 用戶和用戶組管理
第一節 用戶配置文件
第一講 用戶信息文件/etc/passwd
-
用戶管理簡介:
-
越是對服務器安全性要求高的服務器,越需要建立合理的用戶權限登記制度和服務器操作規范
-
在Linux中主要是通過用戶配置文件來查看和修改用戶信息
/etc/passwd
通過命令:man 5 passwd 來查看passwd配置文件幫助信息 5代表配置文件 -
passwd配置文件分為七個字段:
-
第一個字段:用戶名稱
-
第二個字段:密碼標志 x代表用戶有密碼,真正的密碼放在/etc/shadow里,它里面進行了SHA512加密,如果沒有x,代表沒有密碼,只能進行本地登陸,遠程登陸會被禁止,SHA協議禁止
-
第三個字段:UID(用戶ID)
- 0:超級用戶
- 1-499:系統用戶(偽用戶)
- 500-65535:普通用戶
-
第四個字段:GID(用戶初始組ID)
- 初始組:就是指用戶一登陸就立刻擁有這個用戶組的相關權限,每個用戶的初始組只能有一個,一般就是和這個用戶的用戶名相同的組名作為這個用戶的初始組
- 附加組:指用戶可以加入多個其他的用戶組,并擁有這些組的權限,附加組可以有多個
-
第五個字段:用戶說明
-
第六個字段:家目錄
- 普通用戶:/home/用戶名/
- 超級用戶:/root/
-
第七個字段:登陸之后的Shell
Shell就是Linux的命令解釋器
在/etc/passwd當中,除了標準Shell是/bin/bash之外。還可以寫如/sbin/nologin,普通用戶全為/sbin/nologin
/bin/bash為可以登陸,/sbin/nologin為禁止登陸,修改之后便可以禁止普通用戶登陸
-
第二講 影子文件/etc/shadow
Shadow配置文件分為個字段:
- 第一個字段:用戶名
- 第二個字段:加密算法
加密算法升級為SHA512散列加密算法
如果密碼是“!!”或者“0”代表沒有密碼,不能登陸
可以用感嘆號禁用用戶密碼 - 第三個字段:密碼最后一次修改日期
使用1970年1月1日作為標準時間,每過一天時間戳加1
時間戳換算:
時間戳換算日期:
date -d “1970-01-01 [時間戳] days”
日期換算時間戳:
echo((((((date --date=“年/月/日” +%s)/[時間戳]+1)) - 第四個字段:兩次密碼的修改時間間隔時間(和第三個字段相比)
- 第五個字段:密碼有效期(和第三個字段相比)
- 第六個字段:密碼修改到期前的警告天數(和第五個字段相比)
- 第七個字段:密碼過期后的寬限天數(和第五個字段相比)
0:代表密碼過期后立即失效
-1:代表密碼永遠不會失效 - 第八個字段:賬號失效時間
要用時間戳表示 - 第九個字段:保留
第三講 組文件信息/etc/group
組文件信息配置文件分為個字段:
- 第一個字段:組名
- 第二個字段:組密碼標志
- 第三個字段:GID
- 第四個字段:組中附加用戶
第四講 組密碼文件/etc/gshadow
組密碼文件配置文件分為個字段:
- 第一個字段:組名
- 第二個字段:組密碼
- 第三個字段:組管理員用戶名
- 第四個字段:組中附加用戶
第二節 用戶管理相關文件
- 用戶的家目錄
- 普通用戶:/home/用戶名/,所有者和所屬組都是此用戶,權限是700
- 超級用戶:/root/,所有者和所屬組都是root用戶,權限是550
普通用戶變為超級用戶家目錄不會變
- 用戶的郵箱
/var/spool/mail/用戶名/ - 用戶模板目錄
/etc/skel
在/etc/skel里創建了文件的話,在創建新用戶時會自動出現在新用戶家目錄的默認隱藏信息里(用于寫警告信息)
第三節 用戶管理命令
第一講 用戶添加命令useradd
useradd命令格式
- useradd[選項] 用戶名
- -u UID:手工指定用戶的UID號
- -d 家目錄:手工指定用戶的家目錄
- -c 用戶說明:手工指定用戶的說明
- -g 組名:手工指定用戶的初始組
- -G 組名:手工指定用戶的附加組
- -s shell:手工指定用戶的登陸shell。默認是/bin/bash
例子:
useradd yangyang
grep yangyang /etc/passwd
grep yangyang /etc/shadow
grep yangyang /etc/group
grep yangyang /etc/gshadow
ll -d /home/yangyang
ll /var/spool/mail/yangyang
里面都有新用戶信息
- 用戶默認值文件
里面定義了建立用戶的默認信息- /etc/default/useradd
- GROUP=100 用戶默認組
- HOME=/home 用戶家目錄
- INACTIVE=-1 密碼過期寬限天數(shadow文件第七個字段)
- EXPIRE= 密碼失效時間(shadow文件第八個字段)
- SHELL=/bin/bash 默認shell
- SKEL=/etc/skel 模板目錄
- CREATE_MALL_SPOOL=yes 是否建立郵箱
- /etc/login.defs
- PASS_MAX_DAYS 99999 密碼有效期shadow文件第五個字段)
- PASS_MIN_DAYS 0 密碼修改間隔shadow文件第四個字段)
- PASS_MIN_LEN 5 密碼最小5位(PAM)
現在為PAM生效,5位密碼不生效 - PASS_WARN_AGE 7 密碼到期警告shadow文件第六個字段)
- UID_MIN 500
- UID_MAX 60000 最小和最大UID范圍
- ENCRYPT_METHOD SHA512 加密模式
- /etc/default/useradd
第二講 修改用戶密碼passwd
passwd [選項] 用戶名
- -S 查詢用戶密碼的密碼狀態。僅root用戶可以
- -l 暫時鎖定用戶/僅root用戶可用
- -u 解鎖用戶。僅root用戶可用
- –stdin 可以通過管道符(|)輸出的數據作為用戶的密碼
例子:echo“123” | passwd —stdin [用戶名 ]
第三講 修改用戶信息usermod
usermod [選項] 用戶名
- -u UID:修改用戶的UID號
- -c 用戶說明:修改用戶的說明信息
- -G 組名:修改用戶的附加組
- -L:臨時鎖定用戶(Lock)
- -U:解鎖用戶鎖定(Unlock)
第四講 修改用戶密碼狀態chage
chage [選項] 用戶名
- -l:列出用戶的詳細密碼狀態
- -d [日期] :修改密碼最后一次更新時間(shadow文件第三個字段)
例子重要用法:
chage -d 0 [用戶名]
這個命令其實是把密碼修改日期歸0了,這樣用戶一登陸就要修改密碼(學校,公司身份系統修改初始密碼) - -m [天數]:兩次修改密碼間隔(shadow文件第四個字段)
- -M [天數]:密碼有效期(shadow文件第五個字段)
- -W [天數]:密碼過期前警告天數(shadow文件第六個字段)
- -I [天數]:密碼過期后寬限天數(shadow文件第七個字段)
- -E [日期]:賬號失效時間(shadow文件第八 個字段)
第五講 刪除用戶userdel
userdel [-r] 用戶名
- -r:刪除用戶的同時刪除用戶家目錄
- Id 用戶名 查看用戶ID,UID,GID
第六講 用戶切換命令su
su [選項] 用戶
- - :選項只使用“-”代表連帶用戶的環境變量一起切換
- env:查看用戶環境變量
- -c:僅執行一次命令,而不切換用戶身份
例子:
su - root -c “useradd yangyang” 不切換成root,但是執行useradd命令添加yangyang用戶
第四節 用戶組管理命令
groupadd [選項] 組名
- -g GID:指定組ID
groupmod [選項] 組名 修改用戶組
- -g GID:修改組ID
- -n 新組名:修改組名
groupdel 組名:刪除用戶組
gpasswd 選項 組名 :把用戶添加入組或者從組中刪除
- -a 用戶名 :把用戶加入組
- -d 用戶名 :把用戶從組中刪除
第八章 權限管理
第一節 ACL權限
第一講 ACL權限簡介與開啟
ACL權限是為了解決所有者,所屬組,其他人三個權限用戶身份分配不足的問題
- dumpe2fs -h [分區]
dumpe2fs命令是查詢指定分區詳細文件系統信息的命令 - -h :僅顯示超級塊中信息,而不顯示磁盤塊組的詳細信息
臨時開啟分區ACL權限
mount -o remount,acl / 重新掛載根分區,并掛載加入acl權限
永久開啟分區ACL權限
vim /etc/fstab
顯示:UUID=59d9ca7b-4f39-4c0c-9334-c56c182076b5 / ext4 defaults 1 1
在ext4后面的 defaults加,acl 成為
UUID=59d9ca7b-4f39-4c0c-9334-c56c182076b5 / ext4 defaults,acl 1 1
然后輸入:mount -o remount /
重新掛載文件系統或重啟系統,使修改生效
Linux現在一般所有分區全部默認開啟ACL,不用修改配置
第二講 ACL權限查看與設定
- getfacl 文件名 查看ACL命令 查看ACL權限
- setfacl [選項] 文件名
-
-m:設定ACL權限
例子:- setfacl -m u:st:rx /tmp/project 給用戶設定ACL權限讀和操作
- setfacl -m g:tg1:rwx /tmp/project 給用戶組設定ACL權限讀,寫和操作
-
-x:刪除指定的ACL權限
-
-b:刪除所有的ACL權限
-
-d:設定默認的ACL權限
-
-k:刪除默認ACL權限
-
-R:遞歸設定ACL權限
-
第三講 ACL權限最大有效權限與刪除
最大有效權限mask
mask是用來指導最大有效權限的。如果給用戶賦予了ASL權限,是需要和mask 的權限“相與”才能得到用戶的真正權限
- setfscl -m m:rx 文件名
設定mask權限為r-x。使用“m:權限”格式
為了防止用戶或者用戶組給的權限過高,提前設定
權限的刪除
- setfacl -x u:用戶名 文件名 刪除指定用戶的ACL權限
- setfacl -x g:組名 文件名 刪除指定用戶組的ACL權限
- setfacl -b 文件名 會刪除文件的所有ACL權限
第四講 ACL權限默認與遞歸
遞歸ACL權限
遞歸是父目錄在設定ACL權限時,所有的子文件和子目錄也會擁有相同的ACL權限
命令:
- setfacl -m u:用戶名:權限 -R 目錄名 -R必須在這個位置
默認ACL權限
默認ACL權限的作用是如果給父目錄設定默認ACL權限,那么父目錄中所有新建的子文件和子目錄都會繼承父目錄的ACL權限
命令:
- Setfacl -m d:u:用戶名:權限 目錄名 可以在權限后面加-R來進行遞歸
第二節 文件特殊權限
第一講 SetUID
- 只有可以執行的二進制程序才能設定SUID權限,普通文件或者目錄沒有意義
- 命令執行者要對該程序擁有x(執行)權限
- 命令執行者在執行該程序時獲得該程序文件屬主的身份(在執行程序的過程中靈魂附體為文件的屬主)SetUID權限只在該程序執行過程中有效,也就是說身份改變只在程序執行過程中有效
例子:
passwd命令擁有SetUID權限,所以普通用戶可以修改自己的密碼
- 設定SetUID的方法
- chmod 4755 文件名 4代表SUID權限
- chmod u+s 文件名
- 取消SetUID的方法
- chmod 755 文件名
- chmod u-s 文件名
如果用戶對文件沒有執行權限,就會報錯,此時給他加特殊權限,就會顯示大S
危險的SetUID
關鍵目錄應當嚴格控制寫權限。比如:“/”,“/usr”等
用戶的密碼設置要嚴格遵守密碼三原則
對系統中默認應該具有SetUID權限的文件作一列表,定時檢查有沒有這之外的文件被設置了SetUID權限
第二講 SetGID
SetGID針對文件
- 只有可以執行的二進制程序才能設定SGID權限
- 命令執行者要對該程序擁有x(執行)權限
- 命令執行在執行程序的時候,組身份升級為該程序文件的所屬組SetGID權限同只在該程序執行過程中有效,也就是說組身份改變只在程序執行過程中有效
例子:
locate 命令擁有SetGID權限,所以普通用戶可以使用locate來查詢
- 設定SetUID的方法
- chmod 2755 文件名 2代表SGID權限
- chmod g+s 文件名
- 取消SetUID的方法
- chmod 755 文件名
- chmod g-s 文件名
SetGID針對目錄
普通用戶必須對此目錄擁有r和x權限,才能進入此目錄
普通用戶在此目錄中的有效組會變成此目錄的所屬組
若普通用戶對此目錄擁有w權限時,新建的文件的默認所屬組是這個目錄的所屬組
第三講 Sticky BIT
SBIT粘著位作用
-
粘著位目前只對目錄有效
-
普通用戶對該目錄擁有w和x權限,即普通用戶可以在此目錄擁有寫入權限
-
如果沒有粘著位,因為普通用戶擁有w權限,使用可以刪除此目錄下所有文件,包括其他用戶建立的文件。一旦賦予了粘著位,除了root可以刪除所有文件,普通用戶就算擁有了w權限,也只能刪除自己建立的文件,但是不能刪除其他用戶建立的文件
-
設定粘著位的方法
- chmod 1755 目錄名 1代表粘著位
- chmod o+t 目錄名
-
取消粘著位的方法
- chmod 755 目錄名
- chmod o-t 目錄名
第三節 文件系統屬性chattr權限
chattr命令格式
- chattr [+ - =] [選項] 文件名或者目錄名
- +:增加權限
- -:刪除權限
- =:等于某權限
- i:如果對文件設置i屬性,那么不允許對文件進行刪除,改名,也不能添加和修改數據;如果對目錄設置i屬性,那么只能修改目錄下文件的數據,但是不允許建立和刪除文件
- a:如果對文件設置a屬性,那么只能在文件中增加數據,但是不能刪除或者修改數據;如果對目錄設置a屬性,那么只允許在目錄中建立和修改文件,但是不允許刪除文件
查看文件系統屬性
- lsattr [選項] 文件名
- -a:顯示所有文件和目錄
- -d:若目標是目錄,僅列出目錄本身的屬性,而不是子文件的
第三節 系統命令sudo權限
sudo權限
- root把本來只能超級用戶執行的命令賦予普通用戶執行
- sudo的操作對象是系統命令
sudo使用
- visudo 實際修改的是/etc/sudoers文件
- root ALL=(ALL) ALL
用戶名 被管理主機的地址=(可使用身份) 授權命令(絕對路徑) - %wheel ALL=(ALL) ALL
%組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
被管理主機的地址:本機IP或者ALL,限制的不是來源IP,而是訪問IP
- root ALL=(ALL) ALL
例子:
授權用戶可以可以重啟服務器
visudo
yangyang ALL= /sbin/shutdown –r now
sudo -l 查看可用的sudo命令
sudo [授權命令的絕對路徑] 普通用戶執行sudo賦予的命令
例子:
sudo /sbin/shutdown -r now
第九章 文件系統管理
第一節 回顧分區和文件系統
分區類型
- 主分區:總共最多只能分四個
- 擴展分區:只能有一個,也算作主分區的一種 ,也就是說主分區加擴展分區最多有四個。但 是擴展分區不能存儲數據和格式化,必須再劃 分成邏輯分區才能使用。
- 邏輯分區:邏輯分區是在擴展分區中劃分的, 如果是IDE硬盤,Linux最多支持59個邏輯分區 ,如果是SCSI硬盤Linux最多支持11個邏輯分區
可以這樣分區:
| 主分區1 | /dev/sda1 |
| 主分區2 | /dev/sda2 |
| 主分區3 | /dev/sda3 |
| 擴展分區 | /dev/sda4 |
| 邏輯分區1 | /dev/sda5 |
| 邏輯分區2 | /dev/sda6 |
| 邏輯分區3 | /dev/sda7 |
不過就是主分區只有一個,第一個邏輯分區也只能從5開始編號
| 主分區1 | /dev/sda1 |
| 擴展分區 | /dev/sda2 |
| 邏輯分區1 | /dev/sda5 |
| 邏輯分區2 | /dev/sda6 |
| 邏輯分區3 | /dev/sda7 |
其中sda6中的sd代表SATA硬盤接口,hd代表IDE硬盤接口,abcd代表第幾塊硬盤,1234代表主分區,5678代表邏輯分區
文件系統
- ext2:是ext文件系統的升級版本,Red Hat Linux7.2版本以前的系統默認都是ext2 文件系統。1993年發布,最大支持16TB的分區和最大2TB的文件(1TB=1024GB=1024*1024KB)
- ext3: ext3文件系統是ext2文件系統的升 級版本,最大的區別就是帶日志功能,以在系統突然停止時提高文件系統的可靠性 。支持最大16TB的分區和最大2TB的文件
- ext4:它是ext3文件系統的升級版。ext4 在性能 、伸縮性和可靠性方面進行了大量改進。它的變化可以說是翻天覆地的,比如向下兼容 EXT3、最大1EB文件系統和16TB文件、無限數 量子目錄、Extents連續數據塊概念、多塊分配 、延遲分配、持久預分配、快速FSCK、日志校 驗、無日志模式、在線碎片整理、inode增強、 默認啟用barrier等。是CentOS 6.3的默認文件系統
(1EB=1024PB=1024*1024TB)
第二節 文件系統常用命令
第一講 df命令、du命令、fsck命令和dump2fs命令
文件系統查看命令df
- df [選項] [掛載點]
- -a 顯示所有的文件系統信息,包括特殊文件系統,如 /proc、/sysfs
- -h 使用習慣單位顯示容量,如KB,MB或GB等
- -T 顯示文件系統類型
- -m 以MB為單位顯示容量
- -k 以KB為單位顯示容量。默認就是以KB為單位
統計目錄或文件大小
- du [選項] [目錄或文件名]
- -a 顯示每個子文件的磁盤占用量。默認只統計 子目錄的磁盤占用量
- -h 使用習慣單位顯示磁盤占用量,如KB,MB 或GB等
- -s 統計總占用量,而不列出子目錄和子文件的 占用量
du命令與df命令的區別
- df命令是從文件系統考慮的,不光要考慮 文件占用的空間,還要統計被命令或程序占用的空間(最常見的就是文件已經刪除 ,但是程序并沒有釋放空間)
- du命令是面向文件的,只會計算文件或目錄占用的空間
文件系統修復命令fsck
- fsck [選項] 分區設備文件名
- -a: 不用顯示用戶提示,自動修復文件系統
- -y:自動修復。和-a作用一致,不過有些文件系統只支持-y
注意:知道就行,不必操作,有可能弄崩潰系統
顯示磁盤狀態命令dumpe2fs
- dumpe2fs 分區設備文件名
第二講 掛載命令
查詢與自動掛載
- mount 查詢系統中已經掛載的設備
- mount -l 查詢系統中已經掛載的設備并會顯示卷標名稱
- mount –a 依據配置文件/etc/fstab的內容,自動掛載
掛載命令格式
mount [-t 文件系統] [-L 卷標名] [-o 特殊選項] 設備文件名 掛載點
- -t 文件系統:加入文件系統類型來指定掛載的類型,如果文件系統是硬盤,分區就寫ext3、ext4 ,如果是光盤,就寫iso9660
- -L 卷標名: 掛載指定卷標的分區,而不是安裝設備文件名掛載
- -o 特殊選項:可以指定掛載的額外選項
| atime/noatime | 更新訪問時間/不更新訪問時間。訪問分區文件時,是否更新文件 的訪問時間,默認為更新 |
| async/sync | 異步/同步,默認為異步 |
| auto/noauto | 自動/手動,mount –a命令執行時,是否會自動安裝/etc/fstab文件內容掛載,默認為自動 |
| defaults | 定義默認值,相當于rw,suid,dev,exec,auto,nouser,async這七個選項 |
| exec/noexec | 執行/不執行,設定是否允許在文件系統中執行可執行文件,默認 是exec允許 |
| remount | 重新掛載已經掛載的文件系統,一般用于指定修改特殊權限 |
| rw/ro | 讀寫/只讀,文件系統掛載時,是否具有讀寫權限,默認是rw |
| suid/nosuid | 具有/不具有SUID權限,設定文件系統是否具有SUID和SGID的權限,默認是具有 |
| user/nouser | 允許/不允許普通用戶掛載,設定文件系統是否允許普通用戶掛載 默認是不允許,只有root可以掛載分區 |
| usrquota | 寫入代表文件系統支持用戶磁盤配額,默認不支持 |
| grpquota | 寫入代表文件系統支持組磁盤配額,默認不支持 |
注意:針對的都是分區
第三講 掛載光盤與U盤
掛載光盤
例子:
mkdir /mnt/cdrom/ 建立掛載點
mount -t iso9660 /dev/cdrom /mnt/cdrom/
- 掛載光盤
mount /dev/sr0 /mnt/cdrom/ - 卸載命令
umount 設備文件名或掛載點
掛載U盤
- fdisk –l 查看U盤設備文件名
- mount -t vfat /dev/sdb1 /mnt/usb/
- 卸載命令
umount 設備文件名或掛載點
注意:
- Linux默認是不支持NTFS文件系統的
- 格式化就是重新寫入文件系統
- fat16分區識別為fat fat32分區識別為vfat
第四講 支持NTFS文件系統
- 下載NTFS-3G插件 tar
wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz - 解壓
tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz
cd ntfs-3g_ntfsprogs-2013.1.13 進入解壓目錄 - 安裝NTFS-3G
./configure 編譯器準備。沒有指定安裝目錄,安裝到默認位置中
make 編譯
make install 編譯安裝 - 使用
mount -t ntfs-3g 分區設備文件名 掛載點
第三節 fdisk分區
第一講 fdisk命令分區過程
-
通過虛擬機加入新硬盤
- 查看新硬盤
fdisk -l
- 查看新硬盤
-
使用fdisk命令分區
fdisk /dev/sdb 后面不能加數字 因為此時硬盤還沒有分區
通過交互進行分區,交互指令如下:
| a | 設置可引導標記 |
| b | 編輯bsd磁盤標簽 |
| c | 設置DOS操作系統兼容標記 |
| d | 刪除一個分區 |
| l | 顯示已知的文件系統類型。82為Linux swap分區,83為Linux分區 |
| m | 顯示幫助菜單 |
| n | 新建分區 |
| o | 建立空白DOS分區表 |
| p | 顯示分區列表 |
| q | 不保存退出 |
| s | 新建空白SUN磁盤標簽 |
| t | 改變一個分區的系統ID |
| u | 改變顯示記錄單位 |
| v | 驗證分區表 |
| w | 保存退出 |
| x | 附加功能(僅專家) |
-
重新讀取分區表信息
- partprobe
-
格式化分區
- mkfs -t ext4 /dev/sdb1
-
建立掛載點并掛載
- mkdir /disk1
- mkdir /disk5
- mount /dev/sdb1 /disk1/
- mount /dev/sdb5 /disk5/
第二講 分區自動掛載與fstab文件修復
上一節說的掛載操作在重啟之后便會消失,每次重啟都得重新掛載,使用我們需要把它寫入系統掛載命令文件中,每次開機都會自動掃描掛載,使用/etc/fstab文件,將掛載信息寫入文件
- /etc/fstab文件
- 第一字段:分區設備文件名或UUID(硬盤通用唯一識別碼)
- 第二字段:掛載點
- 第三字段:文件系統名稱
- 第四字段:掛載參數
- 第五字段:指定分區是否被dump備份,0代表不備份,1 代表每天備份,2代表不定期備份
- 第六字段:指定分區是否被fsck檢測,0代表不檢測,其 他數字代表檢測的優先級,那么當然1的優先級比2高
注意:在寫入文件之后先不要著急重啟,我們可以先用mount -a命令來實現系統自動重新掛載,如果出現錯誤會提示,不至于系統崩潰
/etc/fstab文件修復
如果一旦寫錯了,出現了報錯,可以在開機顯示之后出現一個讓你輸入root用戶密碼的界面,再輸入密碼之后,可以使用vim /etc/fstab進入fstab文件修改錯誤,如果出現文件只有只讀權限,不能修改,強制保存也不行,退出文件輸入命令:mount -o remount,rw / ,重新把根分區掛載讀寫權限,就可以保存了,而且只能在根分區沒有錯誤,在本機登陸,不能使用服務器或者遠程連接的情況下才能修復。
第四節 新建swap分區
swap 分區通常被稱為交換分區,這是一塊特殊的硬盤空間,即當實際內存不夠用的時候,操作系統會從內存中取出一部分暫時不用的數據,放在交換分區中,從而為當前運行的程序騰出足夠的內存空間。也就是說,當內存不夠用時,我們使用 swap 分區來臨時頂替。這種“拆東墻,補西墻”的方式應用于幾乎所有的操作系統中。
-
free命令
free 查看內存與swap分區使用狀況- -m:按MB字節顯示
cached(緩存):是指把讀取出來的數據保存在內存當中,當再次讀取時,不用讀取硬盤而直接從內存當中讀取,加速了數據的讀取過程
buffer(緩沖):是指在寫入數據時,先把分散的寫入操作保存到內存當中,當達到一定程度再集中寫入硬盤, 減少了磁盤碎片和硬盤的反復尋道,加速了數據的寫入過程
新建swap分區
- fdisk /dev/sdb
進行交互式操作
別忘記把分區ID改為82 ,記得保存,然后重啟
格式化 - 分區完之后需要格式化
mkswap /dev/sdb1 這里不能使用mkfs進行格式化 - 加入swap分區
swapon /dev/sdb1 加入swap分區 - 如果不想用了使用以下命令取消:
swapoff /dev/sdb1 取消swap分區 - swap分區開機自動掛載
vi /etc/fstab
/dev/sdb1 swap swap defaults 0 0
注意:swap前面沒有/,他不是根分區下的
修改之后使用mount -a 命令來檢測錯誤
第十章 Shell基礎
第一節 Shell概述
-
Shell是什么
- Shell是一個命令行解釋器,它為用戶提供 了一個向Linux內核發送請求以便運行程 序的界面系統級程序,用戶可以用Shell來 啟動、掛起、停止甚至是編寫一些程序。
- Shell還是一個功能相當強大的編程語言, 易編寫,易調試,靈活性較強。Shell是解 釋執行的腳本語言,在Shell中可以直接調 用Linux系統命令。
-
Shell的分類
-
Bourne Shell:從1979起Unix就開始使用 Bourne Shell,Bourne Shell的主文件名為 sh。
-
C Shell: C Shell主要在BSD版的Unix系 統中使用,其語法和C語言相類似而得名
Shell的兩種主要語法類型有Bourne和C, 這兩種語法彼此不兼容。Bourne家族主要 包括sh、ksh、Bash、psh、zsh;C家族主 要包括:csh、tcsh
Bash: Bash與sh兼容,現在使用的Linux 就是使用Bash作為用戶的基本Shell。
-
-
Linux支持的Shell
/etc/shells
會顯示:
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
都是Linux支持的Shell
第二節 Shell腳本的執行方式
echo輸出命令
echo [選項] [輸出內容]
-e: 支持反斜線控制的字符轉換
下表為控制符的作用:
| \ | 輸出\本身 |
| \a | 輸出警告音 |
| \b | 退格鍵,也就是向左刪除鍵 |
| \c | 取消輸出行末的換行符。和“-n”選項一致 |
| \e | ESCAPE鍵 |
| \f | 換頁符 |
| \n | 換行符 |
| \r | 回車鍵 |
| \t | 制表符,也就是Tab鍵 |
| \v | 垂直制表符 |
| \0nnn | 按照八進制ASCII碼表輸出字符。其中0為數字零,nnn是三位八進制數 |
| \xhh | 按照十六進制ASCII碼表輸出字符。其中hh是兩位十六進制數 |
例子:
- echo -e “ab\bc”
輸出:ac 刪除左側字符 - echo -e "a\tb\tc\nd\te\tf"
輸出:
a b c
d e f 制表符與換行符 - echo -e “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”
輸出:
a b c
d e f 按照十六進制ASCII碼也同樣可以輸出 - echo -e "\e[1;31m abcd \e[0m"
輸出:
紅色的abcd
因為\e[1 表示開啟顏色區別 \e[0m 表示結束顏色區別 31m表示紅色 還有其他:
30m=黑色,31m=紅色,32m=綠色,33m=黃色,34m=藍色,35m=洋紅,36m=青色,37m=白色
腳本
vi hello.sh
內容:
#!/bin/Bash
#The first program
#Author: yangyang (E-mail: 1771566679@qq.com
vi)
echo -e ‘Hello World!’
注意:在這一段腳本中,#!/bin/Bash這一句是個例外,他并不是注釋,是標識,說明以下語句是Shell腳本,‘Hello World!’如果要加感嘆號就得是單引號,如果沒有感嘆號才可以是雙引號,這感嘆號有意義。
腳本執行
-
賦予執行權限,直接運行
chmod 755 hello.sh
./hello.sh -
通過Bash調用執行腳本
bash hello.sh
不需要執行權限就可以執行
所有程序必須用絕對路徑或者相對路徑執行有一個操作:
如果從Windows里面拷貝一個腳本到Linux 雖然有的時候格式一樣但是還是會報錯,這便是因為兩個系統中腳本的格式不同,比如Windows中的回車在腳本中用^M$表示,而Linux中為$,(可以用cat -A [文件名] 來查詢)所以需要轉變,此時用到一個命令:dos2unix [文件名]
轉換后,Linux就可以執行啦,通過沒有這個命令可以使用yum安裝
第三節 Bash的基本功能
第一講 歷史命令與命令補全
歷史命令
history [選項] [歷史命令保存文件]
-
-c: 清空歷史命令
-
-w: 把緩存中的歷史命令寫入歷史命令保存文件 ~/.bash_history
歷史命令默認會保存1000條,可以在環境 變量配置文件/etc/profile中進行修改
找到HISTSIZE=1000進行修改,隨意修改到100000條都可以,修改之后重啟使配置文件生效
歷史命令的調用
- 使用上、下箭頭調用以前的歷史命令
- 使用“!n”重復執行第n條歷史命令
- 使用“!!”重復執行上一條命令
- 使用“!字串”重復執行最后一條以該字 串開頭的命令
命令與文件補全
在Bash中,命令與文件補全是非常方便與常用的功能,我們只要在輸入命令或文件時,按“Tab”鍵就會自動進行補全
第二講 命令別名與常用快捷鍵
命令別名
- alias 別名=‘原命令’ 設定命令別名
- alias 查詢命令別名
命令執行時順序
- 1 第一順位執行用絕對路徑或相對路徑執行 的命令。
- 2 第二順位執行別名。
- 3 第三順位執行Bash的內部命令。
- 4 第四順位執行按照$PATH環境變量定義的 目錄查找順序找到的第一個命令。
讓別名永久生效
vi /root/.bashrc
刪除別名
unalias 別名
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 | 恢復屏幕輸出。 |
其中標記的為重點快捷鍵,需要熟練使用
注意:ctrl+z 快捷鍵一定要謹慎使用,如果使用的多了,系統會占用大量存儲空間來存放暫停的數據,用多了系統會變卡!!!
第三講 輸入輸出重定向
標準輸入輸出
| 鍵盤 | /dev/stdin | 0 | 標準輸入 |
| 顯示器 | /dev/sdtout | 1 | 標準輸出 |
| 顯示器 | /dev/sdterr | 2 | 標準錯誤輸出 |
輸出重定向
就是改變輸出方向,比如由屏幕輸出到文件,非常有用
| 標準輸出重定向 | 命令 > 文件 | 以覆蓋的方式,把命令的正確輸出輸 出到指定的文件或設備當中。 |
| 標準輸出重定向 | 命令 >> 文件 | 以追加的方式,把命令的 正確輸出輸出到指定的文 件或設備當中。 |
| 標準錯誤輸出重定向 | 錯誤命令 2>文件 | 以覆蓋的方式,把命令的 錯誤輸出輸出到指定的文 件或設備當中。 |
| 標準錯誤輸出重定向 | 錯誤命令 2>>文件 | 以追加的方式,把命令的錯誤輸出輸出到指定的文件或設備當中。 |
在輸入報錯文件中 2和>>必選連著寫
標準錯誤輸出不常用
| 正確輸出和錯誤輸出同時保存 | 命令 > 文件 2>&1 | 以覆蓋的方式,把正確輸 出和錯誤輸出都保存到同 一個文件當中。 |
| 正確輸出和錯誤輸出同時保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正確輸 出和錯誤輸出都保存到同 一個文件當中。 |
| 正確輸出和錯誤輸出同時保存 | 命令 &>文件 | 以覆蓋的方式,把正確輸出和錯誤輸出都保存到同一個文件當中。 |
| 正確輸出和錯誤輸出同時保存 | 命令 &>>文件 | 以追加的方式,把正確輸出和錯誤輸出都保存到同一個文件當中。 |
| 正確輸出和錯誤輸出同時保存 | 命令 >> 文件1 2>>文件2 | 把正確的輸出追加到文件1中,把錯誤的輸出追加到文件2中。 |
命令 >> 文件 2>&1 ,命令 &>>文件 兩種保存都一樣,只不過是格式不同
有一個用法:
命令 &>/dev/unll 不管命令是否正確,直接丟人這個文件夾,不保存任何數據,在寫shell腳本時有用
輸入重定
不通過鍵盤輸入,通過文件輸入,在實際中用的不多,用在給源碼包打補丁
wc [選項] [文件名]
- -c 統計字節數
- -w 統計單詞數
- -l 統計行數
用法:
命令 < 文件 把文件作為命令的輸入
命令 << 標識符 一直輸入,直到輸入標識停止輸入把標識符之間內容作為命令的輸入
第四講 多命令順序執行與管道符 多命令順序執行
| ; | 命令1 ;命令2 | 多個命令順序執行,命令之間沒有任何邏輯聯系,就算第一條報錯,第二條也會執行 |
| && | 命令1 && 命令2 | 邏輯與當命令1正確執行,則命令2才會執行 當命令1執行不正確,則命令2不會執行 |
| || | 命令1 || 命令2 | 邏輯或當命令1 執行不正確,則命令2才會執行 當命令1正確執行,則命令2不會執行 |
磁盤文件復制:
dd if=輸入文件 of=輸出文件 bs=字節數 count=個數
- if=輸入文件 指定源文件或源設備
- of=輸出文件 指定目標文件或目標設備
- bs=字節數 指定一次輸入/輸出多少字節,即把這些字節看做 一個數據塊
- count=個數 指定輸入/輸出多少個數據塊
這條命令可以把系統文件,磁盤都復制了,非常強大
例子:
date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date
管道符
命令1 | 命令2
注意:命令1的正確輸出作為命令2的操作對象
顏色顯示
grep [選項] “搜索內容” 文件名
- -i: 忽略大小寫
- -n: 輸出行號
- -v: 反向查找
- –color=auto 搜索出的關鍵字用顏色顯示
第五講 通配符與其他特殊符號
通配符
| ? | 匹配一個任意字符 |
| * | 匹配0個或任意多個任意字符,也就是可以匹配任何內容 |
| [] | 匹配中括號中任意一個字符。例如:[abc]代表一定匹配 一個字符,或者是a,或者是b,或者是c。 |
| [-] | 匹配中括號中任意一個字符,-代表一個范圍。例如:[a-z] 代表匹配一個小寫字母。 |
| [^] | 邏輯非,表示匹配不是中括號內的一個字符。例如:[^0- 9]代表匹配一個不是數字的字符。 |
Bash中其他特殊符號
| ‘’ | 單引號。在單引號中所有的特殊符號,如“$”和“`”(反引號)都 沒有特殊含義。 |
| “” | 雙引號。在雙引號中特殊符號都沒有特殊含義,但是“$”、“`” 和“\”是例外,擁有“調用變量的值”、“引用命令”和“轉義符”的特殊含義。 |
| `` | 反引號。反引號括起來的內容是系統命令,在Bash中會先執行它。 和$()作用一樣,不過推薦使用$(),因為反引號非常容易看錯。 |
| $() | 和反引號作用一樣,用來引用系統命令。 |
| # | 在Shell腳本中,#開頭的行代表注釋。 |
| $ | 用于調用變量的值,如需要調用變量name的值時,需要用$name 的方式得到變量的值。 |
| \ | 轉義符,跟在\之后的特殊符號將失去特殊含義,變為普通字符。 如$將輸出“$”符號,而不當做是變量引用。 |
第四節 Bash的變量
第一講 用戶自定義變量
什么是變量:
變量是計算機內存的單元,其中存放的值可以改變。當Shell腳本需要保存一些信息 時,如一個文件名或是一個數字,就把它 存放在一個變量中。每個變量有一個名字 ,所以很容易引用它。使用變量可以保存 有用信息,使系統獲知用戶相關設置,變量也可以用于保存暫時信息。
變量設置規則:
- 變量名稱可以由字母、數字和下劃線組成 ,但是不能以數字開頭。如果變量名是 “2name”則是錯誤的。
- 在Bash中,變量的默認類型都是字符串型 ,如果要進行數值運算,則必需指定變量類型為數值型。
- 默認變量類型全都是字符串型,和其他語言不太一樣
變量用等號連接值,等號左右兩側不能有空格。 - 變量的值如果有空格,需要使用單引號或雙引號包括。
- 在變量的值中,可以使用“\”轉義符。
- 如果需要增加變量的值,那么可以進行變量值的疊加。不過變量需要用雙引號包含 “$變量名”或用${變量名}包含。
- 如果是把命令的結果作為變量值賦予變量 ,則需要使用反引號或$()包含命令。
- 環境變量名建議大寫,便于區分。
變量的分類:
- 用戶自定義變量
- 環境變量:這種變量中主要保存的是和系統操作環境相關的數據。
- 位置參數變量:這種變量主要是用來向腳本當 中傳遞參數或數據的,變量名不能自定義,變量作用是固定的。
- 預定義變量:是Bash中已經定義好的變量,變量名不能自定義,變量作用也是固定的。
本地變量(用戶自定義變量)
變量定義
例子:
name=“yang yang”
-
變量疊加
aa=123
aa="$aa"456
aa=${aa}789 -
變量調用
echo $變量名 -
變量查看
set -
變量刪除
unset 變量名
第二講 環境變量
環境變量:
用戶自定義變量只在當前的Shell中生效, 而環境變量會在當前Shell和這個Shell的所 有子Shell當中生效。如果把環境變量寫入相應的配置文件,那么這個環境變量就會在所有的Shell中生效
設置環境變量:
-
export 變量名=變量值 申明變量
-
env 查詢變量
-
echo $變量名 變量調用
-
unset 變量名 刪除變量
-
pstree 樹形顯示進程數
沒有這條命令可以執行以下命令下載:
yum -y install psmisc
yum provides /命令 查看沒有的命令的安裝包 配合yum -y install使用
系統常見環境變量
- PATH:系統查找命令的路徑
這便是輸入命令之前不用輸入絕對路徑的根本原因,系統會提前在PATH環境變量里的所有路徑中查詢一遍有沒有你輸入的命令,找到之后直接執行
如果你想直接執行shell腳本,不加絕對路徑,直接寫入PATH環境變量,使用疊加
例子:
echo $PATH
PATH="$PATH":/root/sh PATH變量疊加
此后,/root/sh路徑里面的執行文件都可以在任意目錄下直接執行,不過是臨時生效 - PS1:定義系統提示符的變量 用來改[root@localhost ~]# 這個顯示
- \d:顯示日期,格式為“星期 月 日”
- \h:顯示簡寫主機名。如默認主機名“localhost”
- \t:顯示24小時制時間,格式為“HH:MM:SS”
- \T:顯示12小時制時間,格式為“HH:MM:SS”
- \A:顯示24小時制時間,格式為“HH:MM”
- \u:顯示當前用戶名
- \w:顯示當前所在目錄的完整名稱
- \W:顯示當前所在目錄的最后一個目錄
- #:執行的第幾個命令
- $:提示符。如果是root用戶會顯示提示符為“#”,如果是普通用戶 會顯示提示符為“$”
第三講 位置參數變量
位置參數變量
| $n | n為數字,$0代表命令本身,$1-9代表第一到第九個參數,十以上的參數需要用大括號包含,如9代表第一 到第九個參數,十以上的參數需要用大括號 包含,如9代表第一到第九個參數,十以上的參數需要用大括號包含,如{10}. |
| $* | 這個變量代表命令行中所有的參數,$*把所 有的參數看成一個整體 |
| $@ | 這個變量也代表命令行中所有的參數,不過 $@把每個參數區分對待 |
| $# | 這個變量代表命令行中所有參數的個數 |
例子腳本:
- $n的例子:
#!/bin/bash
num1=$1
num2=$2
sum=$(( $num1 + $num2)) #變量sum的和是num1加num2 echo $sum #打印變量sum的值 - $*,$@,$#的例子:
#!/bin/bash
echo “A total of $# parameters” #使用$#代表所有參數的個數
echo “The parameters is: $*” #使用$*代表所有的參數
echo “The parameters is: $@” #使用$@也代表所有參數 - $*與$@的區別例子:
#!/bin/bash
for i in “$*” #$*中的所有參數看成是一個整體,所以這個for循環只會循環一次
do
echo “The parameters is: $i”
done
x=1
for y in “$@” #$@中的每個參數都看成是獨立的,所以“$@”中有幾個參數,就會循環幾次
do
echo “The parameter$x is: $y”
x=$(( $x +1 ))
done
第四講 預定義變量
預定義變量
| $? | 最后一次執行的命令的返回狀態。如果這個變 量的值為0,證明上一個命令正確執行;如果 這個變量的值為非0(具體是哪個數,由命令 自己來決定),則證明上一個命令執行不正確 了。 |
| $$ | 當前進程的進程號(PID) |
| $! | 后臺運行的最后一個進程的進程號(PID) |
例子:
#!/bin/bash
#Author: yangyang (E-mail: 1771566679@qq.com)
echo “The current process is $$”
#輸出當前進程的PID。
#這個PID就是variable.sh這個腳本執行時,生成的進程的PID
find /root -name hello.sh &
#使用find命令在root目錄下查找hello.sh文件 #符號&的意思是把命令放入后臺執行,工作管理在系統管理章節會詳細介紹
echo "The last one Daemon process is $!"
接受鍵盤輸入
read [選項] [變量名]
- -p “提示信息”:在等待read輸入時,輸出提示信息
- -t 秒數: read命令會一直等待用戶輸入,使用 此選項可以指定等待時間
- -n 字符數:read命令只接受指定的字符數,就會執行
- -s: 隱藏輸入的數據,適用于機密信息的輸入
第五節 Bash的運算符
第一講 數值運算與運算符
declare聲明變量類型
declare [+/-][選項] 變量名
- -: 給變量設定類型屬性
- +: 取消變量的類型屬性
- -i: 將變量聲明為整數型(integer) set-x: 將變量聲明為環境變量
- -p: 顯示指定變量的被聲明的類型
數值運算
- 數值運算—方法1
aa=11
bb=22 給變量aa和bb賦值
declare -i cc=$aa+$bb - expr或let數值運算工具—方法2
aa=11
bb=22 給變量aa和bb賦值
dd=$(expr $aa + $bb) dd的值是aa和bb的和。注意“+”號左右兩 側必須有空格
let與expr一樣 - “$((運算式))”或“$[運算式]” —方法3
aa=11
bb=22 給變量aa和bb賦值
ff=$(( $aa+$bb ))
gg=$[ $aa+$bb ]
運算符
運算符優先級表:
| 13 | -, + | 單目負、單目正 |
| 12 | !, ~ | 邏輯非、按位取反或補碼 |
| 11 | *,/, % | 乘、除、取模 |
| 10 | +, - | 加、減 |
| 9 | << , >> | 按位左移、按位右移 |
| 8 | < =, > =, < , > | 小于或等于、大于或等于、小于、大于 |
| 7 | == , != | 等于、不等于 |
| 6 | & | 按位與 |
| 5 | ^ | 按位異或 |
| 4 | | | 按位或 |
| 3 | && | 邏輯與 |
| 2 | || | 邏輯或 |
| 1 | =,+=,-=,*=,/=,%=,&=, ^=,賦值、運算且賦值 |=, <<=, >>= |
例子:
- aa=$(( (11+3)*3/2 ))
雖然乘和除的優先級高于加,但是通過小括號可以調整運算優先級 - bb=$(( 14%3 ))
14不能被3整除,余數是2 - cc=$(( 1 && 0 ))
邏輯與運算只有想與的兩邊都是1,與的結果才是1,否則與的結果是0 - dd=$(( 1 || 0 ))
邏輯或運算只要有一邊是1,或的結果就是1,兩邊都為0,或的結果才是0
第二講 變量測試與內容替換
用來測試一個變量到底有沒有設置,測試表:
| x=${y-新值} | x=新值 | x為空 | x=$y |
| x=${y:-新值} | x=新值 | x=新值 x=$y | |
| x=${y+新值} | x為空 | x=新值 | x=新值 |
| x=${y:+新值} | x為空 | x為空 | x=新值 |
| x=${y=新值} | x=新值 y=新值 | x為空 y值不變 | x=$y y值不變 |
| x=${y:=新值} | x=新值 y=新值 | x=新值 y=新值 | x=$y y值不變 |
| x=${y?新值} | 新值輸出到標準錯誤輸出(就是屏幕) | x為空 | x=$y |
| x=${y:?新值} | 新值輸出到標準錯誤輸出 | 新值輸出到標準錯誤輸 | x=$y |
例子:
測試x=${y-新值} 測試y變量存不存在
- unset y 刪除變量y
x=${y-new} 進行測試
echo $x
顯示new,y變量不存在
因為變量y不存在,所以x=new - y="" 給變量y賦值為空
x=${y-new} 進行測試
echo $x
顯示空,y為空值 - y=old 給變量y賦值
x=${y-new} 進行測試
echo $x
顯示old ,y變量存在且有值
在用到的時候查詢就好,不需要死記硬背。這個表是在寫腳本的時候給電腦程序看的,人不參與其中
第六節 Bash的運算符
第一講 環境變量配置文件簡介
source命令
- source 配置文件 強制使配置文件在修改之后生效,不需要重啟
- . 配置文件 和source 配置文件的作用是一樣的
環境變量配置文件簡介
環境變量配置文件中主要是定義對系統的操作環境生效的系統默認環境變量,比如 PATH、HISTSIZE、PS1、HOSTNAME等 默認環境變量。
配置文件保存位置
- /etc/profile
- /etc/profile.d/*.sh 指/etc/profile.d/下所有的.sh結尾的文件
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
/etc下的環境變量配置文件是針對所有用戶都有效的
而~下的只是對root用戶的家目錄下有效
第二講 環境變量配置文件作用
以下幾個環境變量的配置文件是最主要的:
- /etc/profile
- /etc/profile.d/*.sh 指/etc/profile.d/下所有的.sh結尾的文件
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
環境變量配置文件調用順序流程圖
這些是在登陸的時候挨個調用,所以在這里面設置環境變量,登陸之后就會自動設置好
- 登陸輸入密碼之后,第一步是讀取/etc/profile文件
/etc/profile的作用:
USER變量
LOGNAME變量
MAIL變量
PATH變量
HOSTNAME變量
HISTSIZE變量
umask
里面有以上環境變量的配置 - 接下來便調用/etc/profile.d/*.sh文件
然后就是下面的文件,語言包文件,識別系統自帶的語言
~/.bash_profile的作用 - 調用了~/.bashrc文件。
在PATH變量后面加入了“:$HOME/bin” 這個目錄
~/.bashrc的作用
定義默認別名 - 調用/etc/bashrc
/etc/bashrc的作用
PS1變量
umask
PATH變量 - 調用/etc/profile.d/*.sh文件
這一塊就是進入界面以內,切換shell登陸方式,這種不需要密碼,所以和前面的/etc/profile的作用不沖突
第三講 其他配置文件和登錄信息
注銷時生效的環境變量配置文件
- ~/.bash_logout
注銷登陸時寫入
其他配置文件
- ~/bash_history 歷史命令文件
Shell登錄信息
- 本地終端歡迎信息: /etc/issue
| \d | 顯示當前系統日期 |
| \s | 顯示操作系統名稱 |
| \l | 顯示登錄的終端號,這個比較常用。 |
| \m | 顯示硬件體系結構,如i386、i686等 |
| \n | 顯示主機名 |
| \o | 顯示域名 |
| \r | 顯示內核版本 |
| \t | 顯示當前系統時間 |
| \u | 顯示當前登錄用戶的序列號 |
- 遠程終端歡迎信息: /etc/issue.net
- 轉義符在/etc/issue.net文件中不能使用
- 是否顯示此歡迎信息,由ssh的配置文件 /etc/ssh/sshd_config決定,加入“Banner /etc/issue.net”行才能顯示(記得重啟SSH服務)
登陸后歡迎信息:/etc/motd
不管是本地登錄,還是遠程登錄,都可以顯示此歡迎信息
第十一章 Shell編程
第一節 基礎正則表達式
正則表達式與通配符
- 正則表達式用來在文件中匹配符合條件的 字符串,正則是包含匹配。grep、awk、 sed等命令可以支持正則表達式。
- 通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來進行匹配了。
基礎正則表達式
| * | 前一個字符匹配0次或任意多次。 |
| . | 匹配除了換行符外任意一個字符。 |
| ^ | 匹配行首。例如:^hello會匹配以hello開頭的行。 |
| $ | 匹配行尾。例如:hello&會匹配以hello結尾的行。 |
| [] | 匹配中括號中指定的任意一個字符,只匹配一個字符。 例如:[aoeiu] 匹配任意一個元音字母,[0-9] 匹配任意一位 數字, [a-z][0-9]匹配小寫字和一位數字構成的兩位字符。 |
| [^] | 匹配除中括號的字符以外的任意一個字符。例如:[^0-9] 匹配 任意一位非數字字符,[^a-z] 表示任意一位非小寫字母。 |
| \ | 轉義符。用于取消講特殊符號的含義取消。 |
| {n} | 表示其前面的字符恰好出現n次。例如:[0-9]{4} 匹配4位數 字,[1][3-8][0-9]{9} 匹配手機號碼。 |
| {n,} | 表示其前面的字符出現不小于n次。例如: [0-9]{2,} 表示兩 位及以上的數字。 |
| {n,m} | 表示其前面的字符至少出現n次,最多出現m次。例如: [a- z]{6,8} 匹配6到8位的小寫字母。 |
-
“*”前一個字符匹配0次,或任意多次
- grep “a*” test_rule.txt
匹配所有內容,包括空白行 - grep “aa*” test_rule.txt
匹配至少包含有一個a的行 - grep “aaa*” test_rule.txt
匹配最少包含兩個連續a的字符串 - grep “aaaaa*” test_rule.txt
則會匹配最少包含四個個連續a的字符串
- grep “a*” test_rule.txt
-
“.” 匹配除了換行符外任意一個字符
- grep “s…d” test_rule.txt
“s…d”會匹配在s和d這兩個字母之間一定有兩個字符的單詞 - grep “s.*d” test_rule.txt
匹配在s和d字母之間有任意字符 - grep “.*” test_rule.txt
匹配所有內容 - “^”匹配行首,“$”匹配行尾
- grep “^M” test_rule.txt
匹配以大寫“M”開頭的行 - grep “n$” test_rule.txt
匹配以小寫“n”結尾的行 - grep -n “^$” test_rule.txt
會匹配空白行
- grep “^M” test_rule.txt
- grep “s…d” test_rule.txt
-
“[]” 匹配中括號中指定的任意一個 字符,只匹配一個字符
- grep “s[ao]id” test_rule.txt
匹配s和i字母中,要不是a、要不是o - grep “[0-9]” test_rule.txt
匹配任意一個數字 - grep “^[a-z]” test_rule.txt
匹配用小寫字母開頭的行 - “[^]” 匹配除中括號的字符以外的 任意一個字符
- grep “^[^a-z]” test_rule.txt
匹配不用小寫字母開頭的行 - grep “^[^a-z A-Z]” test_rule.txt
匹配不用字母開頭的行
- grep “^[^a-z]” test_rule.txt
- grep “s[ao]id” test_rule.txt
-
“\” 轉義符
- grep “\.$” test_rule.txt
匹配使用“.”結尾的行 - “\{n\}”表示其前面的字符恰好出現n次
- grep “a\{3\}” test_rule.txt
匹配a字母連續出現三次的字符串 - grep “[0-9]\{3\}” test_rule.txt
匹配包含連續的三個數字的字符串 - “\{n,\}”表示其前面的字符出現不小于n次
- grep “^\[0-9]\{3,\}[a-z]” test_rule.txt
匹配最少用連續三個數字開頭的行 - “\{n,m\}”匹配其前面的字符至少出現n次, 最多出現m次
- grep “sa\{1,3\}i” test_rule.txt
匹配在字母s和字母i之間有最少一個a,最多三個a
- grep “\.$” test_rule.txt
第一節 字符截取命令
第一講 cut字段提取命令
cut [選項] 文件名
- -f 列號: 提取第幾列
- -d 分隔符: 按照指定分隔符分割列
grep為提取行,cut提取列,而且cut提取的表格中,只能用制表符隔開不能用空格比如:
| 1 | Li | M | 86 |
| 2 | Shen | M | 90 |
| 3 | Gao | M | 83 |
他們之間所有的都是拿Tab鍵隔開的,不是空格
- 提取多列時,用“,”隔開就可以
cut -f 2 student.txt
cut -f 2,3 student.txt - 有具體分割符時,也可以沒有Tab鍵
cut -d “:” -f 1,3 /etc/passwd 以:為分隔符取1,3列 - 一般在使用cut命令的時候和管道符“|”連著使用
第二講 printf命令
printf ‘輸出類型輸出格式’ 輸出內容
- 輸出類型:
- %ns: 輸出字符串。n是數字指代輸出幾個字符
- %ni: 輸出整數。n是數字指代輸出幾個數字
- %m.nf: 輸出浮點數。m和n是數字,指代輸出的整數 位數和小數位數。如%8.2f代表共輸出8位數, 其中2位是小數,6位是整數。
- 輸出格式:
- \a: 輸出警告聲音
- \b: 輸出退格鍵,也就是Backspace鍵
- \f: 清除屏幕
- \n: 換行
- \r: 回車,也就是Enter鍵
- \t: 水平輸出退格鍵,也就是Tab鍵 \v: 垂直輸出退格鍵,也就是Tab鍵
例子:
printf %s 1 2 3 4 5 6
printf %s %s %s 1 2 3 4 5 6
printf ‘%s %s %s’ 1 2 3 4 5 6
printf ‘%s %s %s\n’ 1 2 3 4 5 6
只有最后一個會輸出:
1 2 3
4 5 6
因為每有一個%s代表每幾個字符輸出一次
%s %s %s\n 代表沒三個字符輸出一次并且換行
他在與cat命令結合使用的時候,需要用$()把cat命令擴起來,使用這種命令賦予變量的方式,才能正確輸出文件內容,但是具體格式還得用%s\t 或者%s\n控制
- printf主要在awk命令編程中使用
例子:
vi student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66 - printf ‘%s’ $(cat student.txt)
不調整輸出格式 - printf ‘%s\t %s\t %s\t %s\t %s\t %s\t \n’ $(cat student.txt)
調整格式輸出
在awk命令的輸出中支持print和printf命令
- print:print會在每個輸出之后自動加入一 個換行符(Linux默認沒有print命令)
- printf:printf是標準格式輸出命令,并不會自動加入換行符,如果需要換行,需要手工加入換行符
第三講 awk命令
awk命令也叫awk編程,可以識別非制表符的空格,用來解決cut命令解決不了的提取列工作,他是把需要提取的原文件一行一行掃描,掃描每一行中所需要點列,然后把它記錄下來,在全部掃描完之后全部打印出來。
- awk ‘條件1{動作1} 條件2{動作2}…’ 文件名
-
條件(Pattern):
一般使用關系表達式作為條件- x > 10 判斷變量 x是否大于10
- x>=10 大于等于
- x<=10 小于等于
-
動作(Action):
-
格式化輸出流程控制語句**
例子:
vi student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66 -
awk ‘{printf $2 “\t” $6 “\n”}’ student.txt
其中$2代表第2列,$6代表第6列,他可以識別非制表符的空格,單引號里面直接大括號代表沒有條件,只要是輸入有內容全部符合
取第2列和第6列
df -h | awk '{print $1 “\t” $3}'
提取 df -h命令顯示之后的內容中第一列和第三列
-
需要注意:
printf 不可以自動換行,print 可以在末尾自動換行,但是在Linux系統中沒有print命令,只有printf命令,但是在wak命令中兩個都有,使用print可以少一個換行符。
- BEGIN
BEGIN必須是大寫,他是一個條件。
awk ‘BEGIN{printf “This is a transcript \n” } {printf $2 “\t” $6 “\n”}’ student.txt
他會在打印出2,6行之前先輸出一句話This is a transcript
它的作用是強者命令第一個執行他后面的語句,也可以指定分割符 - FS內置變量
FS是用來指定分隔符的
FS=“:”就是指定:為分隔符
例子:
cat /etc/passwd | grep “/bin/bash” |
awk 'BEGIN {FS=":"} {printf $1 “\t” $3 “\n”}'
這是打印用戶信息地一和第三列,為什么需要在{FS=":"} 前加BEGIN呢?
因為如果你不加BEGIN你會發現除了第一行,其他都已經按格式打印出來了,但是只有第一行會照原樣輸出,因為awk默認是空格為分隔符,他在執行這條命令的時候,第一行數據已經被掃描了,所以來不及修改格式,但是加了BEGIN,他會第一步強制先把默認分隔符修改了。
- 關系運算符
cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2 “\n” }'
第四講 sed命令
sed命令
sed 是一種幾乎包括在所有 UNIX 平臺(包括 Linux)的輕量級流編輯器。sed主要是用來將數據進行選取、替換、刪除、新增的命令。
它不僅可以修改文件內容,還可以修改命令結果,支持管道符操作,這就是與vim最大的區別
sed [選項] ‘[動作]’ 文件名
選項:
- -n: 一般sed命令會把所有數據都輸出到屏幕 , 如果加入此選擇,則只會把經過sed命令處理的行輸出到屏幕。
- -e: 允許對輸入數據應用多條sed命令編輯
- -i: 用sed的修改結果直接修改讀取數據的文件, 而不是由屏幕輸出
動作:
- a : 追加,在當前行后添加一行或多行。添加多行時,除最后 一行外,每行末尾需要用“\”代表數據未完結。
- c : 行替換,用c后面的字符串替換原數據行,替換多行時,除最后一行外,每行末尾需用“\”代表數據未完結。
- i : 插入,在當期行前插入一行或多行。插入多行時,除最后 一行外,每行末尾需要用“\”代表數據未完結。
- d: 刪除,刪除指定的行。
- p:打印,輸出指定的行。
- s:字串替換,用一個字符串替換另外一個字符串。格式為“行范 圍s/舊字串/新字串/g”(和vim中的替換格式類似)。
例子:
sed ‘2p’ student.txt
查看文件的第二行會顯示:
| 1 | Liming | 82 | 95 | 86 | 87.66 |
| 1 | Liming | 82 | 95 | 86 | 87.66 |
| 2 | Sc | 74 | 96 | 87 | 85.66 |
| 3 | Gao | 99 | 83 | 93 | 91.66 |
會發現多了一行,因為一般sed命令會把所有數據都輸出到屏幕 ,只不過會先輸出你想要的,這時候就需要-n配合
- sed -n ‘2p’ student.txt
輸入-n后就沒有多余的了 - sed ‘2,4d’ student.txt
刪除第二行到第四行的數據,但不修改文件本身 - sed ‘2a hello’ student.txt
在第二行后追加hello - sed ‘2i hello \ world’ student.txt
在第二行前插入兩行數據 - sed '2c No such person‘ student.txt
數據替換
字符串替換
sed ‘s/舊字串/新字串/g’ 文件名
- sed ‘3s/74/99/g’ student.txt
在第三行中,把74換成99 - sed -i ‘3s/74/99/g’ student.txt
sed操作的數據直接寫入文件 - sed -e ‘s/Liming//g ; s/Gao//g’ student.txt
同時把“Liming”和“Gao”替換為空
第三節 字符處理命令
排序命令sort
sort [選項] 文件名
- -f:忽略大小寫
- -n:以數值型進行排序,默認使用字符串型排序
- -r:反向排序
- -t:指定分隔符,默認是分隔符是制表符
- -k n[,m]: 按照指定的字段范圍排序。從第n字段開始, m字段結束(默認到行尾)
例子:
- sort /etc/passwd
排序用戶信息文件 - sort -r /etc/passwd
反向排序 - sort -t “:” -k 3,3 /etc/passwd
指定分隔符是“:”,用第三字段開頭,第三字段結尾排序,就是只用第三字段排序,但是他不認識數字,會把數字當成字符串,認為3比11大 ,所以我需要加-n,進行數值排序 - sort -n -t “:” -k 3,3 /etc/passwd
統計命令wc
wc [選項] 文件名
- -l: 只統計行數
- -w: 只統計單詞數
- -m: 只統計字符數
第四節 條件判斷
- 按照文件類型進行判斷
| -b 文件 | 判斷該文件是否存在,并且是否為 塊設備文件(是塊設備文件 為真) |
| -c文件 | 判斷該文件是否存在,并且是否為字符設備文件(是字符設備 文件為真) |
| -d 文件 | 判斷該文件是否存在,并且是否為目錄文件(是目錄為真) |
| -e 文件 | 判斷該文件是否存在(存在為真) |
| -f 文件 | 判斷該文件是否存在,并且是否為普通文件(是普通文件為真) |
| -L 文件 | 判斷該文件是否存在,并且是否為管道文件(是管道文件為真) |
| -p 文件 | 判斷該文件是否存在,并且是否為符號鏈接文件(是符號鏈接 文件為真) |
| -s 文件 | 判斷該文件是否存在,并且是否為非空(非空為真) |
| -S 文件 | 判斷該文件是否存在,并且是否為套接字文件(是套接字文件 為真) |
兩種判斷格式
上面的表結合一下命令來判斷
- test -e /root/install.log
- [ -e /root/install.log ]
中括號兩邊必須有空格,只能為[ -e /root/install.log ] ,不能是[-e /root/install.log]
在判斷之后,使用echo $?來觀察輸出語句是否為真
[ -d /root ] && echo “yes” || echo "no"
第一個判斷命令如果正確執行,則打印“yes”,否則打印“no”
- 按照文件權限進行判斷
| -r 文件 | 判斷該文件是否存在,并且是否該文件擁有讀權限(有讀 權限為真) |
| -w文件 | 判斷該文件是否存在,并且是否該文件擁有寫權限(有寫 權限為真) |
| -x 文件 | 判斷該文件是否存在,并且是否該文件擁有執行權限(有 執行權限為真) |
| -u 文件 | 判斷該文件是否存在,并且是否該文件擁有SUID權限(有 SUID權限為真) |
| -g 文件 | 判斷該文件是否存在,并且是否該文件擁有SGID權限(有 SGID權限為真) |
| -k 文件 | 判斷該文件是否存在,并且是否該文件擁有SBit權限(有 SBit權限為真) |
例子:
[ -w student.txt ] && echo “yes” || echo "no"
判斷文件是擁有寫權限的
不過系統不會區分,比如-w,只要所有者,所屬組,其他人其中有一個有寫權限,他就會返回yes,所以這個時候就需要我們自己寫腳本
- 兩個文件之間進行比較
| 文件1 -nt 文件2 | 判斷文件1的修改時間是否比文件2的新(如果新則為真) |
| 文件1 -ot 文件2 | 判斷文件1的修改時間是否比文件2的舊(如果舊則為真) |
| 文件1 -ef 文件2 | 判斷文件1是否和文件2的Inode號一致,可以理解為兩個文件是否為同一個文件。這個判斷用于判斷硬鏈接是很好的方法 |
例子:
ln /root/student.txt /tmp/stu.txt
創建一個硬鏈接
[ /root/student.txt -ef /tmp/stu.txt ] && echo “yes” || echo “no” yes
用test測試
- 兩個整數之間比較
| 整數1 -eq 整數 2 | 判斷整數1是否和整數2相等(相等為真) |
| 整數1 -ne 整數 2 | 判斷整數1是否和整數2不相等(不相等位置) |
| 整數1 -gt 整數2 | 判斷整數1是否大于整數2(大于為真) |
| 整數1 -lt 整數2 | 判斷整數1是否小于整數2(小于位置) |
| 整數1 -ge 整數2 | 判斷整數1是否大于等于整數2(大于等于為真) |
| 整數1 -le 整數2 | 判斷整數1是否小于等于整數2(小于等于為真) |
例子:
-
[ 23 -ge 22 ] && echo “yes” || echo “no” yes
判斷23是否大于等于22 -
[ 23 -le 22 ] && echo “yes” || echo “no” no
判斷23是否小于等于22 -
字符串的判斷
| -z 字符串 | 判斷字符串是否為空(為空返回真) |
| -n 字符串 | 判斷字符串是否為非空(非空返回真) |
| 字串1 ==字串2 | 判斷字符串1是否和字符串2相等(相等返回真) |
| 字串1 != 字串2 | 判斷字符串1是否和字符串2不相等(不相等返回真) |
例子:
name=sc
給name變量賦值
[ -z “$name” ] && echo “yes” || echo “no” no
判斷name變量是否為空,因為不為空,所以返回no
aa=11
bb=22
給變量aa和變量bb賦值
[ “$aa” == “$bb" ] && echo “yes” || echo "no"
判斷兩個變量的值是否相等,明顯不相等 ,所以返回no
- 多重條件判斷
| 判斷1 -a 判斷2 | 邏輯與,判斷1和判斷2都成立,最終的結果才為真 |
| 判斷1 -o 判斷2 | 邏輯或,判斷1和判斷2有一個成立,最終的結果就為 真 |
| !判斷 | 邏輯非,使原始的判斷式取反 |
例子:
aa=11
[ -n “$aa” -a “$aa” -gt 23 ] && echo “yes” || echo "no"
判斷變量aa是否有值,同時判斷變量aa的是否大于23
因為變量aa的值不大于23,所以雖然第一個判斷值為真, 返回的結果也是假
aa=24
[ -n “$aa” -a “$aa” -gt 23 ] && echo “yes” || echo “no” yes
第五節 流程控制
第一講 if語句
- 單分支if條件語句
或者
if [ 條件判斷式 ]then 程序 fi單分支條件語句需要注意幾個點
- if語句使用fi結尾,和一般語言使用大括號結尾不同
- [ 條件判斷式 ]就是使用test命令判斷,所以中括號和條件判斷式之間必須有空格
- then后面跟符合條件之后執行的程序,可以放在[]之后,用“;”分割。也可以換行寫入,就不需要“;”了
例子:判斷分區使用率
#!/bin/bash #統計根分區使用率 #Author: yangyang (E-mail: 1771566679@qq.com) rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" - f1) #把根分區使用率作為變量值賦予變量rate if [ $rate -ge 80 ]thenecho "Warning! /dev/sda3 is full!!" fi- 雙分支if條件語句
例子1:備份mysql數據庫
#!/bin/bash #備份mysql數據庫。 # Author:yangyang (E-mail: 1771566679@qq.com) ntpdate asia.pool.ntp.org &>/dev/null #同步系統時間 date=$(date +%y%m%d) #把當前系統時間按照“年月日”格式賦予變量date size=$(du -sh /var/lib/mysql) #統計mysql數據庫的大小,并把大小賦予size變量 if [ -d /tmp/dbbak ]thenecho "Date : $date!" > /tmp/dbbak/dbinfo.txtecho "Data size : $size" >> /tmp/dbbak/dbinfo.txtcd /tmp/dbbak tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null rm -rf /tmp/dbbak/dbinfo.txtelsemkdir /tmp/dbbakecho "Date : $date!" > /tmp/dbbak/dbinfo.txtecho "Data size : $size" >> /tmp/dbbak/dbinfo.txtcd /tmp/dbbak tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null rm -rf /tmp/dbbak/dbinfo.txt fi例子2:判斷apache是否啟動
#!/bin/bash #Author: yangyang (E-mail:1771566679@qq.com) port=$(nmap -sT 47.95.5.171 | grep tcp | grep http | awk '{print $2}') #使用nmap命令掃描服務器,并截取apache服務的狀態,賦予變量port if [ "$port" == "open" ] thenecho “$(date) httpd is ok!” >> /tmp/autostart-acc.log else/etc/rc.d/init.d/httpd start &>/dev/nullecho "$(date) restart httpd !!" >> /tmp/autostart-err.log finmap 遠程掃描,檢查服務是否啟動
nmap -sT 掃描指定服務器上開啟的TCP端口
- 多分支if條件語句
例子:
#!/bin/bash #判斷用戶輸入的是什么文件 #Author: yangyang (E-mail:1771566679@qq.com) read -p "Please input a filename: " file #接收鍵盤的輸入,并賦予變量file if [ -z "$file" ] #判斷file變量是否為空 then echo "Error,please input a filename" exit 1 #定義錯誤返回值1 elif [ ! -e "$file" ] #判斷file的值是否存在 thenecho "Your input is not a file!" exit 2 #定義錯誤返回值2 elif [ -f "$file" ] #判斷file的值是否為普通文件 thenecho "$file is a regulare file!" elif [ -d "$file" ] #判斷file的值是否為目錄文件 thenecho "$file is a directory!" elseecho "$file is an other file!" fi第二講 case語句
多分支case條件語句
case語句和if…elif…else語句一樣都是多分支條件語句,不過和if多分支條件語句不同的是,case語句只能判斷一種條件關系,而if語句可以判斷多種條件關系。
用于選擇列表,打印選擇車票
例子:
第三講 for循環
- 語法一
例子
#!/bin/bash#Author:yangyang (Email:1771566679@qq.com) #打印時間for time in morning noon afternoon eveningdoecho “This time is $time!”done這種方法看起來很笨,需要把循環次數寫入for,但是在系統管理的時候,當我們不確定循環次數的時候,比如解壓縮一個文件里所有的壓縮包,他會自動加入新的壓縮包,這個時候我就需要用這種笨辦法,這種后面加次數的也有一個好處,就是循環變量只要是由空格,或者回車,或者tab鍵隔開的,都可以算在內,所以才能和cat,ls等命令結合使用,cat命令執行之后顯示的結果就是由回車隔開的,都可以算成是循環變量。在加入或者減少壓縮包的時候,不需要修改腳本。
例子1:批量解壓縮
#!/bin/bash#Author:yangyang (Email:1771566679@qq.com) #批量解壓縮軟件包cd /lamp ls *.tar.gz > ls.log #ls *.tar.gz 輸出結果覆蓋到ls.log文件 for i in $(cat ls.log)dotar -zxf $i $>/dev/nulldone rm -rf /lamp/ls.log例子2:打印車票
#!/bin/bash#Author:yangyang (Email:1771566679@qq.com) #計算文件個數,并打印到屏幕cd /root/sh ls *.sh > ls.log for i in $(cat ls.log)doecho $yy=$(($y+1))done rm -rf ls.log- 語法二
例子:計算1加到100
#!/bin/bash#Author:yangyang (Email:1771566679@qq.com) #計算1加到100s=0 for ((i=1;i<=100;i++))dos=$(($s+$i))done echo "The sum of 1+2+...+99+100 is $s!"這種情況適用于知道循環次數
例子:批量創建用戶
#!/bin/bash#Author:yangyang (Email:1771566679@qq.com) #批量添加新用戶read -p "Please input user name: " -t 30 name #輸入用戶名,等待時間30s read -p "Please input the number of users: " -t 30 num #輸入創建用戶個數,等待時間30s read -p "Please input the password of users: " -t 30 pass #輸入用戶密碼,等待時間30s if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ] #判斷輸入信息是否為空 theny=$(echo $num | sed s/'^[0-9]*$'//g) #這里是判斷輸入的用戶個數是否為數字,sed后也可以把^[0-9]*$換為's/[0-9]//g'if [ -z "$y" ] #如果上一條語句輸出不為空,就是輸入的用戶個數為數字,繼續執行thenfor ((i=1;i<=$num;i++)) #開始循環do/usr/sbin/useradd "$name$i" &>/dev/null #建立用戶echo $pass | /usr/bin/passwd --stdin "$name$i" &>/dev/null #設置用戶密碼,與用戶名相同doneecho "Build seccees!"fi fi如果輸入的時候輸錯了需要按,ctrl+退格鍵
第四講 while循環與until循環
while循環
while循環是不定循環,也稱作條件循環 。只要條件判斷式成立,循環就會一直繼續,直到條件判斷式不成立,循環才會停止。這就和for的固定循環不太一樣了。
例子:從1加到100
#!/bin/bash #Author: yangyang (E-mail: 1771566679@qq.com) #從1加到100i=1 s=0 while [ $i -le 100 ] #如果變量i的值小于等于100,則執行循環 do s=$(( $s+$i ))i=$(( $i+1 )) done echo "The sum is: $s"until循環
until循環,和while循環相反,until循環時只要條件判斷式不成立則進行循環,并執行循環程序。一旦循環條件成立,則終止循環。
例子:從1加到100
#!/bin/bash #Author: yangyang (E-mail: 1771566679@qq.com) #從1加到100i=1 s=0 until [ $i -gt 100 ] #循環直到變量i的值大于100,就停止循環 do s=$(( $s+$i ))i=$(( $i+1 )) done echo "The sum is: $s"第十二章 Linux服務管理
第一節 服務簡介與分類
服務的分類
啟動與自啟動
- 服務啟動:就是在當前系統中讓服務運行 ,并提供功能。
- 服務自啟動:自啟動是指讓服務在系統開 機或重啟動之后,隨著系統的啟動而自動 啟動服務。
查詢已安裝的服務
-
RPM包安裝的服務
- chkconfig --list
查看服務自啟動狀態,可以看到所有RPM包安裝的服務,查看在進入不同級別的啟動中所有服務的啟動狀態 - ps aux
查看啟動服務的進程
- chkconfig --list
-
源碼包安裝的服務
查看服務安裝位置,一般是/usr/local/下
RPM安裝服務和源碼包安裝服務的區別
就是安裝位置的不同
- 源碼包安裝在指定位置,一般是/usr/local/
- RPM包安裝在默認位置中
第二節 RPM包安裝服務的管理
第一講 獨立服務的管理
RPM包安裝服務的位置
RPM安裝服務和源碼包安裝服務的區別就是安裝位置的不同
- 源碼包安裝在指定位置,一般是/usr/local/
- RPM包安裝在默認位置中
/etc/init.d/:啟動腳本位置
/etc/sysconfig/:初始化環境配置文件位置
/etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服務的啟動腳本
/var/lib/:服務產生的數據放在這里
/var/log/:日志
獨立服務的啟動
- /etc/rc.d/init.d/獨立服務名 start|stop|status|restart
- service 獨立服務名 start|stop|restart|status
service --status-all 查詢服務器全部已經安裝的RPM包的服務的運行狀態
CentOS7為systemctl list-unit-files
不過server是紅帽版本專有的
獨立服務的自啟動
-
chkconfig [–level 運行級別] [獨立服務名] [on|off]
- chkconfig --level 2345 htttpd on 下次開機自啟動apache
- chkconfig --level 2345 htttpd off 下次開機不自啟動apache
-
修改/etc/rc.d/rc.local文件
把/etc/rc.d/init.d/ 獨立服務名 start 寫入文件 -
使用ntsysv命令管理自啟動
如果沒有ntsysv命令,yum -y install ntsysv下載即可,不過這個也是紅帽專有的
第二講 基于xinetd服務的管理
- xinetd是新一代的網絡守護進程服務程序,又叫超級Internet服務器,常用來管理多種輕量級Internet服務。
xinetd提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。 - Telnet協議是TCP/IP協議族中的一員,是Internet遠程登錄服務的標準協議和主要方式。不過現在已經被ssh替代。
安裝xinetd與telnet
yum -y install xinetd
yum -y install telnet-server
telnet 服務器端不安全,實驗完之后立馬刪除!!!
xinetd服務的啟動
- 進入配置文件,把disable=yes改為no
vim /etc/xinetd.d/telnet
service telnet 服務的名稱為telnet
{
flags = REUSE #標志為REUSE,設定TCP/IP socket可重用
socket_type = stream #使用TCP協議數據包
wait =no #允許多個連接同時連接
user =root #啟動服務的用戶為root
server =/usr/sbin/in.telnetd #服務的啟動程序
log_on_failure += USERID #登陸失敗后,記錄用戶的ID
disable = no #服務不啟動
} - 重啟xinetd服務
service xinetd restart
重啟xinetd服務,基于他的telnet自動重啟
xinetd服務的自啟動
- chkconfig telnet on
- ntsysv
基于xinetd的服務自啟動和啟動是相通的,非常不適合做服務器管理,開啟自啟動,服務自動啟動。關閉自啟動,服務也關閉 。
第三節 源碼包安裝服務的管理
-
源碼包安裝服務的啟動
使用絕對路徑,調用啟動腳本來啟動。不同的源碼包的啟動腳本不同。可以查看源碼包的安裝說明,查看啟動腳本的方法。
/usr/local/apache2/bin/apachectl start|stop -
源碼包服務的自啟動
vi /etc/rc.d/rc.local
加入
/usr/local/apache2/bin/apachectl start -
讓源碼包服務被服務管理命令識別
讓源碼包的apache服務能被service命令管理啟動
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache -
讓源碼包的apache服務能被chkconfig與 ntsysv命令管理自啟動
- 在創建好軟鏈接后,修改servic可以掃描的Apache文件
vi /etc/init.d/apache
#chkconfig: 35 86 76
#指定httpd腳本可以被chkconfig命令管理。格式是: chkconfig: 運行級別 啟動順序 關閉順序
啟動級別在/etc/rc.d/ 里面查看,rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d這六個就是0-6運行級別中文件的啟動以及關閉順序,啟動順序以S打頭,關閉順序以K打頭,只需要找一個沒有被占用的數字即可,不能和現有的順序重疊。
#description: source package apache
#說明,內容隨意
只需要寫兩句英文即可,兩句都是注釋,都得有#號,寫在文件開始。
不太推薦修改,使用標準的啟動方式就比較好
- 在創建好軟鏈接后,修改servic可以掃描的Apache文件
第四節 服務管理總結
第十三章 Linux系統管理
第一節 進程管理
第一講 進程查看
進程簡介
進程是正在執行的一個程序或命令,每一個進程都是一個運行的實體,都有自己的地址空間,并占用一定的系統資源。
進程管理的作用
- 判斷服務器健康狀態
- 查看系統中所有進程
- 殺死進程
查看系統中所有進程
- ps aux
查看系統中所有進程,使用BSD操作系統格式。(Unix) - ps -le
查看系統中所有進程,使用Linux標準命令格式。
ps aux 輸出信息 - USER:該進程是由哪個用戶產生的;
- PID:進程的ID號;
- %CPU:該進程占用CPU資源的百分比,占用越高,進程 越耗費資源;
- %MEM:該進程占用物理內存的百分比,占用越高,進程 越耗費資源;
- VSZ:該進程占用虛擬內存的大小,單位KB;
- RSS:該進程占用實際物理內存的大小,單位KB;
- TTY:該進程是在哪個終端中運行的。其中tty1-tty7代表 本地控制臺終端,tty1-tty6是本地的字符界面終端,tty7是圖形終端。pts/0-255代表虛擬終端。
- STAT:進程狀態。常見的狀態有:R:運行、S:睡眠 、T:停止狀態、s:包含子進程、+:位于后臺
- START:該進程的啟動時間
- TIME:該進程占用CPU的運算時間,注意不是系統時間
- COMMAND:產生此進程的命令名
查看系統健康狀態
top [選項]
- -d 秒數: 指定top命令每隔幾秒更新。默認是3秒 在top命令的交互模式當中可以執行的命令
- ?或h: 顯示交互模式的幫助
- P: 以CPU使用率排序,默認就是此項
- M: 以內存的使用率排序
- N: 以PID排序
- q: 退出top
第一行信息為任務隊列信息
| 12:26:46 | 系統當前時間 |
| up 1 day, 13:32 | 系統的運行時間,本機已經運行1天 13小時32分鐘 |
| 2 users | 當前登錄了兩個用戶 |
| load average: 0.00, 0.00, 0.00 | 系統在之前1分鐘,5分鐘,15分鐘 的平均負載。一般認為小于1時,負 載較小。如果大于1,系統已經超出 負荷。 |
第二行為進程信息
| Tasks: 95 total | 系統中的進程總數 |
| 1 running | 正在運行的進程數 |
| 94 sleeping | 睡眠的進程 |
| 0 stopped | 正在停止的進程 |
| 0 zombie | 僵尸進程。如果不是0,需要手工檢查僵尸進程 |
第三行為CPU信息
| Cpu(s): 0.1%us | 用戶模式占用的CPU百分比 |
| 0.1%sy | 系統模式占用的CPU百分比 |
| 0.0%ni | 改變過優先級的用戶進程占用的CPU百分比 |
| 99.7%id | 空閑CPU的CPU百分比 |
| 0.1%wa | 等待輸入/輸出的進程的占用CPU百分比 |
| 0.0%hi | 硬中斷請求服務占用的CPU百分比 |
| 0.1%si | 軟中斷請求服務占用的CPU百分比 |
| 0.0%st | st(Steal time)虛擬時間百分比。就是當有虛擬機時,虛擬CPU等待實際CPU的時間百分比。 |
第四行為物理內存信息
| Mem: 625344k total | 物理內存的總量,單位KB |
| 571504k used | 已經使用的物理內存數量 |
| 53840k free | 空閑的物理內存數量,我們使用的是虛 擬機,總共只分配了628MB內存,所以 只有53MB的空閑內存了 |
| 65800k buffers | 作為緩沖的內存數量 |
第五行為交換分區(swap)信息
| Swap: 524280k total | 交換分區(虛擬內存)的總大小 |
| 0k used | 已經使用的交互分區的大小 |
| 524280k free | 空閑交換分區的大小 |
| 409280k cached | 作為緩存的交互分區的大小 |
查看進程樹
pstree [選項]
- -p: 顯示進程的PID
- -u: 顯示進程的所屬用戶
第二講 進程管理
kill命令
kill [信號代號] PID
kill后加PID號
kill –l
查看可用的進程信號
常用進程信號表
| 1 | SIGHUP | 該信號讓進程立即關閉,然后重新讀取配置文件之后重啟。 |
| 2 | SIGINT | 程序終止信號,用于終止前臺進程。相當于輸出ctrl+c快捷 鍵。 |
| 8 | SIGFPE | 在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢出及除數為0等其它所有的算術的錯誤。 |
| 9 | SIGKILL | 用來立即結束程序的運行. 本信號不能被阻塞、處理和忽略。 一般用于強制終止進程。 |
| 14 | SIGALRM | 時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數 使用該信號。 |
| 15 | SIGTERM | 正常結束進程的信號,kill命令的默認信號。有時如果進程已 經發生問題,這個信號是無法正常終止進程的,我們才會嘗 試SIGKILL信號,也就是信號9。 |
| 18 | SIGCONT | 該信號可以讓暫停的進程恢復執行,本信號不能被阻斷。 |
| 19 | SIGSTOP | 該信號可以暫停前臺進程,相當于輸入ctrl+z快捷鍵。本信號 不能被阻斷。 |
例子:
- kill -1 22354
重啟進程號為22354的進程 - kill -9 22368
強制殺死進程號為22368的進程
killall命令
killall [選項][信號代號] 進程名
按照進程名殺死進程
- -i: 交互式,詢問是否要殺死某個進程
- -I: 忽略進程名的大小寫
和kill不一樣,他加進程名
pkill命令
pkill [選項] [信號] 進程名
按照進程名終止進程
- -t 終端號: 按照終端號踢出用戶
按照終端號踢出用戶- w
使用w命令查詢本機已經登錄的用戶 - pkill -t -9 pts/1
強制殺死從pts/1虛擬終端登錄的進程
- w
第二節 進程管理
工作管理
把進程放入后臺
- 命令后面加&
- 例子:
tar -zcf etc.tar.gz /etc & (后臺運行)
但是像top,vim和用戶交互的命令放在后臺自動停止,不再運行
- 例子:
- 運行界面按按ctrl+z
- 例子:
top
在top命令執行的過程中,按ctrl+z快捷鍵放入后臺(后臺暫停)
- 例子:
查看后臺的工作
jobs [-l]
- -l 顯示工作的PID
注意:“+”號代表最近一個放入后臺的工作,也是工作恢復時,默認恢復的工作。“-”號代表倒數第二個放入后臺的工作
將后臺暫停的工作恢復到前臺執行
- fg %工作號
%工作號:%號可以省略,但是注意工作號和PID到區別
把后臺暫停的工作恢復到后臺執行
- bg %工作號
注意:后臺恢復執行的命令,是不能和前臺有交互的,否則不能恢復到后臺執行
第三節 系統資源查看
-
vmstat命令監控系統資源
vmstat [刷新延時 刷新次數]
例子:- vmstat 1 3
-
dmesg開機時內核檢測信息
dmesg
例子:- dmesg | grep CPU
-
free命令查看內存使用狀態
free [-b|-k|-m|-g]- -b: 以字節為單位顯示
- -k: 以KB為單位顯示,默認就是以KB為單位顯示
- -m: 以MB為單位顯示
- -g: 以GB為單位顯示
-
緩存和緩沖的區別
簡單來說緩存(cache)是用來加速數據 從硬盤中“讀取”的,而緩沖(buffer) 是用來加速數據“寫入”硬盤的。 -
查看CPU信息
cat /proc/cpuinfo -
uptime命令
uptime
顯示系統的啟動時間和平均負載,也就是top命令的第一行。w命令也可以看到這個數據。 -
查看系統與內核相關信息
uname [選項]- -a: 查看系統所有相關信息;
- -r: 查看內核版本;
- -s: 查看內核名稱。
-
判斷當前系統的位數
沒有直接的命令可以查看
只能通過查看系統外部命令的文件類型,順帶寫出位數
file /bin/ls -
查詢當前Linux系統的發行版本
lsb_release -a -
列出進程打開或使用的文件信息
lsof [選項]
列出進程調用或打開的文件的信息 -
-c 字符串: 只列出以字符串開頭的進程打開的文件
-
-u 用戶名: 只列出某個用戶的進程打開的文件
-
-p pid: 列出某個PID進程打開的文件
第四節 系統定時任務
crond服務管理與訪問控制
- service crond restart 啟動
- chkconfig crond on 自啟動
用戶的crontab設置
crontab [選項]
- -e: 編輯crontab定時任務
- -l: 查詢crontab任務
- -r: 刪除當前用戶所有的crontab 任務 ,如果想刪一個,-e進去之后刪除
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分都會 執行命令。注意:星期幾和幾號最好 不要同時出現,因為他們定義的都是 天。非常容易讓管理員混亂。 |
注意:在crontab -e 編輯下 %有特殊含義,所以就應該加轉義符
第十四章 日志管理
第一節 日志管理簡介
日志服務
在CentOS 6.x中日志服務已經由rsyslogd取代了原先的syslogd服務。rsyslogd日志服務更加先進,功能更多。但是不論該服務的使用,還是日志文件的格式其實都是和syslogd服務相兼容的,所以學習起來基本和syslogd服務一致。
rsyslogd的新特點:
- 基于TCP網絡協議傳輸日志信息;
- 更安全的網絡傳輸方式;
- 有日志消息的及時分析框架;
- 后臺數據庫;
- 配置文件中可以寫簡單的邏輯判斷;
與syslog配置文件相兼容。
確定服務啟動
ps aux | grep rsyslogd
查看服務是否啟動
chkconfig --list | grep rsyslog
查看服務是否自啟動
CentOS 7 變為 systrmctl list-unit-files | grep rsyslog
常見日志的作用
| /var/log/cron | 記錄了系統定時任務相關的日志。 |
| /var/log/cups/ | 記錄打印信息的日志 |
| /var/log/dmesg | 記錄了系統在開機時內核自檢的信息。也可以使用 dmesg命令直接查看內核自檢信息。 |
| /var/log/btmp | 記錄錯誤登錄的日志。這個文件是二進制文件,不能直接vi查看,而要使用lastb命令查看,命令如下: lastbroot tty1 Tue Jun 4 22:38 - 22:38 (00:00) 有人在6月4日22:38使用root用戶,在本地終端1登錄錯誤 |
| /var/log/lastlog | 記錄系統中所有用戶最后一次的登錄時間的日志。這個文件也是二進制文件,不能直接vi,而要使用lastlog命令查看。 |
| /var/log/mailog | 記錄郵件信息。 |
| /var/log/message | 記錄系統重要信息的日志。這個日志文件中會記錄Linux系統的絕大 |
| /var/log/secure | 記錄驗證和授權方面的信息,只要涉及賬戶和密碼的程序都會記錄。 比如說系統的登錄,ssh的登錄,su切換用戶,sudo授權,甚至添加 用戶和修改用戶密碼都會記錄在這個日志文件中。 |
| /var/log/wtmp | 永久記錄所有用戶的登錄、注銷信息,同時記錄系統的啟動、重啟、 關機事件。同樣這個文件也是一個二進制文件,不能直接vi,而需 要使用last命令來查看。 |
| /var/run/utmp | 記錄當前已經登錄的用戶的信息。這個文件會隨著用戶的登錄和注 銷而不斷變化,只記錄當前登錄用戶的信息。同樣這個文件不能直 接vi,而要使用w,who,users等命令來查詢。 |
除了系統默認的日志之外,采用RPM方 式安裝的系統服務也會默認把日志記錄在/var/log/目錄中(源碼包安裝的服務日志 是在源碼包指定目錄中)。不過這些日志不是由rsyslogd服務來記錄和管理的,而 是各個服務使用自己的日志管理文檔來記錄自身日志。
| /var/log/httpd/ | RPM包安裝的apache服務的默認日志目錄 |
| /var/log/mail/ | RPM包安裝的郵件服務的額外日志目錄 |
| /var/log/samba/ | RPM包安裝的samba服務的日志目錄 |
| /var/log/sssd/ | 守護進程安全服務目錄 |
第二節 rsyslogd日志服務
日志文件格式
基本日志格式包含以下四列:
- 事件產生的時間;
- 發生事件的服務器的主機名;
- 產生事件的服務名或程序名;
- 事件的具體信息。
/etc/rsyslog.conf配置文件
寫入這個文件可以自定義需要記錄日志的程序
authpriv.* /var/log/secure
服務名稱[連接符號]日志等級 日志記錄位置
認證相關服務.所有日志等級記錄在/var/log/secure日志中
服務名稱
| auth | 安全和認證相關消息(不推薦使用authpriv替代) |
| authpriv | 安全和認證相關消息(私有的) |
| cron | 系統定時任務cront和at產生的日志 |
| daemon | 和各個守護進程相關的日志 |
| ftp | ftp守護進程產生的日志 |
| kern | 內核產生的日志(不是用戶進程產生的) |
| local0-local7 | 為本地使用預留的服務 |
| lpr | 打印產生的日志 |
| 郵件收發信息 | |
| news | 與新聞服務器相關的日志 |
| syslog | 有syslogd服務產生的日志信息(雖然服務名 稱已經改為rsyslogd,但是很多配置都還是沿 用了syslogd的,這里并沒有修改服務名)。 |
| user | 用戶等級類別的日志信息 |
| uucp | uucp子系統的日志信息,uucp是早期linux系 |
統進行數據傳遞的協議,后來也常用在新聞 組服務中。
連接符號
連接符號可以識別為:
- “*”代表所有日志等級,比如:“authpriv.*”代表authpriv認證信息服務產生的日志,所有的日志等級都記錄
- “.”代表只要比后面的等級高的(包含該等級)日志都記錄下來。比如:“cron.info”代表cron服務產生的日志,只要日 志等級大于等于info級別,就記錄
- “.=”代表只記錄所需等級的日志,其他等級的都不記錄。比 如:“*.=emerg”代表人和日志服務產生的日志,只要等級是 emerg等級就記錄。這種用法及少見,了解就好
- “.!”代表不等于,也就是除了該等級的日志外,其他等級的 日志都記錄。
日志等級
| debug | 一般的調試信息說明 |
| info | 基本的通知信息 |
| notice | 普通信息,但是有一定的重要性 |
| warning | 警告信息,但是還不回影響到服務或系統的運行 |
| err | 錯誤信息,一般達到err等級的信息以及可以影響到服務或系統的運行了。 |
| crit | 臨界狀況信息,比err等級還要嚴重 |
| alert | 警告狀態信息,比crit還要嚴重。必須立即采取行動 |
| emerg | 疼痛等級信息,系統已經無法使用了 |
日志記錄位置
- 日志文件的絕對路徑,如“/var/log/secure”
- 系統設備文件,如“/dev/lp0”
- 轉發給遠程主機,如“@192.168.0.210:514”
用戶名,如“root” - 忽略或丟棄日志,如“~”
第三節 日志輪替
日志文件的命名規則
如果配置文件中擁有“dateext”參數,那么日志會用日期來作為日志文件的后綴, 例如“secure-20130605”。這樣的話日志文件名不會重疊,所以也就不需要日志文 件的改名,只需要保存指定的日志個數, 刪除多余的日志文件即可。
如果配置文件中沒有“dateext”參數,那么日志文件就需要進行改名了。當第一次進行日志 輪替時,當前的“secure”日志會自動改名為 “secure.1”,然后新建“secure”日志,用來 保存新的日志。當第二次進行日志輪替時, “secure.1”會自動改名為“secure.2”,當前的 “secure”日志會自動改名為“secure.1”,然 后也會新建“secure”日志,用來保存新的日志 ,以此類推。
logrotate配置文件
| daily | 日志的輪替周期是每天 |
| weekly | 日志的輪替周期是每周 |
| monthly | 日志的輪替周期是每月 |
| rotate 數字 | 保留的日志文件的個數。0指沒有備份 |
| compress | 日志輪替時,舊的日志進行壓縮 |
| create mode owner group | 建立新日志,同時指定新日志的權限與所有者和 所屬組。如create 0600 root utmp |
| mail address | 當日志輪替時,輸出內容通過郵件發送到指定的 郵件地址。如mail 1771566679@qq.com |
| missingok | 如果日志不存在,則忽略該日志的警告信息 |
| notifempty | 如果日志為空文件,則不進行日志輪替 |
| minsize 大小 | 日志輪替的最小值。也就是日志一定要達到這個 最小值才會輪替,否則就算時間達到也不輪替size 大小 日志只有大于指定大小才進行日志輪替,而不是 按照時間輪替。如size 100k |
| dateext | 使用日期作為日志輪替文件的后綴。如secure- 20130605 |
在/etc/logrotate.conf 配置文件里修改輪替規則,下面大括號外面的變量相當于局部變量,而大括號里面的相當于全局變量,只有大括號里面沒有聲明,外面的才生效,一旦大括號聲明了,大括號里面的優先級高于外面,優先生效
把apache日志加入輪替
vi /etc/logrotate.conf /usr/local/apache2/logs/access_log
{
daily
create
rotate 30
}
一般只有源碼包安裝才需要這樣加入,RPM包在安裝時候會自動做日志
logrotate命令
logrotate [選項] 配置文件名
如果此命令沒有選項,則會按照配置文件中的條件進行
日志輪替
- -v:顯示日志輪替過程。加了-v選項,會顯示日志的輪 替的過程
- -f: 強制進行日志輪替。不管日志輪替的條件是否已經 符合,強制配置文件中所有的日志進行輪替
第十五章 啟動管理
第一節 CentOS 6.x啟動管理
第一講 系統運行級別
運行級別
| 0 | 關機 |
| 1 | 單用戶模式,可以想象為windows的安全模式,主要用 于系統修復 |
| 2 | 不完全的命令行模式,不含NFS服務 |
| 3 | 完全的命令行模式,就是標準字符界面 |
| 4 | 系統保留 |
| 5 | 圖形模式 |
| 6 | 重啟動 |
運行級別命令
- runlevel
查看運行級別命令 - init 運行級別
改變運行級別命令
修改系統默認運行級別
vim /etc/inittab
id:3:initdefault:
系統開機后直接進入哪個運行級別,就把數字改為對應的數字
第二講 系統啟動過程
initramfs內存文件系統
CentOS 6.x中使用initramfs內存文件系統 取代了CentOS 5.x中的initrd RAM Disk。 他們的作用類似,可以通過啟動引導程序加載到內存中,然后加載啟動過程中所需要的內核模塊,比如USB、SATA、SCSI 硬盤的驅動和LVM、RAID文件系統的驅動
- 一個實驗看initramfs文件系統
- mkdir /tmp/initramfs
建立測試目錄 - cp /boot/initramfs-2.6.32-279.el6.i686.img /tmp/initramfs/ 復制initramfs文件
- cd /tmp/initramfs/
- file initramfs-2.6.32-279.el6.i686.img
- mv initramfs-2.6.32-279.el6.i686.img initramfs-2.6.32-279.el6.i686.img.gz
修改文件的后綴名為.gz - gunzip initramfs-2.6.32-279.el6.i686.img.gz
解壓縮 - file initramfs-2.6.32-279.el6.i686.img
cpio -ivcdu < initramfs-2.6.32-279.el6.i686.img
解讀cpio文件
- mkdir /tmp/initramfs
調用/etc/init/rcS.conf配置文件
主要功能是兩個:
- 先調用/etc/rc.d/rc.sysinit,然后由 /etc/rc.d/rc.sysinit配置文件進行Linux系統初始化。
- 然后再調用/etc/inittab,然后由/etc/inittab配 置文件確定系統的默認運行級別。
由/etc/rc.d/rc.sysinit初始化
- 1、獲得網絡環境
- 2、掛載設備
- 3、開機啟動畫面Plymouth(取替了過往的 RHGB)
- 4、判斷是否啟用SELinux
- 5、顯示于開機過程中的歡迎畫面
- 6、初始化硬件
- 7、用戶自定義模塊的加載
- 8、配置內核的參數
- 9、設置主機名
- 10、同步存儲器
- 11、設備映射器及相關的初始化
- 12、初始化軟件磁盤陣列(RAID)
- 13、初始化 LVM 的文件系統功能
- 14、檢驗磁盤文件系統(fsck)
- 15、設置磁盤配額(quota)
- 16、重新以可讀寫模式掛載系統磁盤
- 17、更新quota(非必要)
- 18、啟動系統虛擬隨機數生成器
- 19、配置機器(非必要)
- 20、清除開機過程當中的臨時文件
- 21、創建ICE目錄
- 22、啟動交換分區(swap)
- 23、將開機信息寫入/var/log/dmesg文件中
調用/etc/rc.d/rc文件
運行級別參數傳入/etc/rc.d/rc這個腳本之 后,由這個腳本文件按照不同的運行級別啟動/etc/rc[0-6].d/目錄中的相應的程序
- /etc/rc3.d/K??開頭的文件(??是數字),會按照數字順序依次關閉
- /etc/rc3.d/S??開頭的文件(??是數字),會 按照數字順序依次啟動
第二節 啟動引導程序grub
第一講 Grub配置文件
grub中分區表示
| 第一塊SCSI硬盤 | 第一個主分區 | /dev/sda1 | hd(0,0) |
| 第一塊SCSI硬盤 | 第二個主分區 | /dev/sda2 | hd(0,1) |
| 第一塊SCSI硬盤 | 擴展分區 | /dev/sda3 | hd(0,2) |
| 第一塊SCSI硬盤 | 第一個邏輯分區 | /dev/sda5 | hd(0,4) |
| 第二塊SCSI硬盤 | 第一個主分區 | /dev/sdb1 | hd(1,0) |
| 第二塊SCSI硬盤 | 第二個主分區 | /dev/sdb2 | hd(1,1) |
| 第二塊SCSI硬盤 | 擴展分區 | /dev/sdb3 | hd(1,2) |
| 第二塊SCSI硬盤 | 第一個邏輯 | /dev/sdb5 | hd(1,4) |
grub配置文件 vi /boot/grub/grub.conf
default=0 默認啟動第一個系統
timeout=5 等待時間,默認是5秒
splashimage=(hd0,0)/grub/splash.xpm.gz
這里是指定grub啟動時的背景圖像文件的保存位置的
hiddenmenu 隱藏菜單
在CentOS7中為vim /etc/default/grub
title CentOS (2.6.32-279.el6.i686) title就是標題的意思
root (hd0,0) 是指啟動程序的保存分區
kernel /vmlinuz-2.6.32-279.el6.i686 ro root=UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
定義內核加載時的選項
initrd /initramfs-2.6.32-279.el6.i686.img 指定了initramfs內存文件系統鏡像文件的所在位置
第二講 Grub加密與字符界面分辨率調整
在開機選擇內核界面可以按e進入里面破解root密碼,這個時候為了安全,便需要給grub加密才能進入按e界面
grub加密
命令:
grub-md5-crypt
生成加密密碼串
vi /boot/grub/grub.conf
在splashimage=(hd0,0)這一行前面寫入
password --md5 剛剛生產的密碼串
Password選項放在整體設置處
重啟就可以了
CentOS 7.2以后使用 grub2-setpassword 直接設置密碼
純字符界面的分辨率調整
查詢內核是否支持分辨率調整
grep “CONFIG_FRAMEBUFFER_CONSOLE” /boot/config-3.10.0-1127.el7.x86_64
顯示 CONFIG_FRAMEBUFFER_CONSOLE=y
就為可以調整
再輸入命令:
vim /boot/grub/grub.conf
內核的選項文件中
Kernel /vmlinuz- *******這句話后面加入 vga=791,便是調整1024*768 16位的分辨率,具體數字對應分辨率見下表:
| 8位 | 769 | 771 | 773 | 775 |
| 15位 | 784 | 787 | 790 | 793 |
| 16位 | 785 | 788 | 791 | 794 |
| 32位 | 786 | 789 | 792 | 795 |
第三節 系統修復模式
單用戶模式
在登陸選擇內核界面,按e鍵進入內核選項
單用戶模式常見的錯誤修復
- 遺忘root密碼
- 修改系統默認運行級別
修改密碼:
CentOS7
找到linux16 這一行 在CN.UTF-8 后面加入
rd.break console=tty0
然后按ctrl+x
然后依次輸入:
mount -o remount,rw /sysroot
chroot /sysroot/
passwd root 或者 echo 密碼 | passwd --stdin root
在這之后會出現很多小方塊 這行小方塊是中文編碼問題,不用管它。輸一次密碼回車,再輸一次確認密碼,回車。
接著輸入:
touch /.autorelabel
sync
exit
exit
重啟就OK了,使用新密碼登陸
光盤修復模式
在忘記了grub密碼的時候可以使用這個模式
在虛擬機中放入光盤iso文件,在虛擬機VMware界面讀條的時候,快速按F2鍵,蘋果系統可按fn+F2,進入剛開始學習安裝的界面之后,選擇上面第四欄BOOT,調到光盤啟動CR-Drive為首選(按+號調節),F10保存。在安裝節目選第三項Troublesooting 回車,選擇第二項Rescue a CentOS system 回車,選擇2 Shell模式 回車 回車 ,此時根目錄已經被掛載到光盤下 /mnt/sysimage目錄下
chroot /mnt/sysimage #改變主目錄
grub2-setpassword
輸入新密碼即可
重要系統文件丟失,導致系統無法啟動
假設丟了etc/inittab 文件,你可以在其他同版本的Linux查詢到這個文件所在的包
chroot /mnt/sysimage #改變主目錄
cd /root
rpm -qf /etc/inittab #查詢下/etc/inittab文件屬于哪個包。
mkdir /mnt/cdrom #建立掛載點
mount /dev/sr0 /mnt/cdrom #掛載光盤
rpm2cpio /mnt/cdrom/Packages/initscripts-8.45.3-1.i386.rpm | cpio -idv ./etc/inittab
#提取inittab文件到當前目錄
cp etc/inittab /etc/inittab #復制inittab文件到指定位置
在光盤修復模式下可以修改大部分問題。
Linux的安全性

所以安全性是相對的,這是給我們留的退路
第十六章 備份與恢復
第一節 備份概述
Linux系統需要備份的數據
- /root/目錄:
- /home/目錄:
- /var/spool/mail/目錄:
- /etc/目錄:
- 其他目錄:
安裝服務的數據
-
apache需要備份的數據
- 配置文件
- 網頁主目錄
- 日志文件
-
mysql需要備份的數據
- 源碼包安裝的mysql:/usr/local/mysql/data/
- RPM包安裝的mysql:/var/lib/mysql/
備份策略
-
完全備份:完全備份就是指把所有需要備 份的數據全部備份,當然完全備份可以備份整塊硬盤,整個分區或某個具體的目錄
-
增量備份
 -
差異備份

第二節 dump和restore命令
dump命令
dump [選項] 備份之后的文件名 原文件或目錄
- -level:就是我們說的0-9十個備份級別
- -f 文件名: 指定備份之后的文件名
- -u: 備份成功之后,把備份時間記錄在/etc/dumpdates文件
- -v:顯示備份過程中更多的輸出信息
- -j: 調用bzlib庫壓縮備份文件,其實就是把備份文件壓縮 為.bz2格式,默認壓縮等級是2
- -W: 顯示允許被dump的分區的備份等級及備份時間
CentOS 7以前版本需要安裝dump yum -y install dump下載
CentOS 7 以后版本使用xfsdump備份xfs文件系統
- XFS提供了 xfsdump 和 xfsrestore 工具協助備份XFS文件系統中的數據。xfsdump 按inode順序備份一個XFS文件系統。
- centos7選擇xfs格式作為默認文件系統,而且不再使用以前的ext,仍然支持ext4,xfs專為大數據產生,每個單個文件系統最大可以支持8eb,單個文件可以支持16tb,不僅數據量大,而且擴展性高。還可以通過xfsdump,xfsrestore來備份和恢復。
- 與傳統的UNIX文件系統不同,XFS不需要在備份前被卸載;對使用中的XFS文件系統做備份就可以保證鏡像的一致性。XFS的備份和恢復的過程是可以被中斷然后繼續的,無須凍結文件系統。xfsdump 甚至提供了高性能的多線程備份操作——它把一次dump拆分成多個數據流,每個數據流可以被發往不同的目的地。
- 使用yum -y install xfsdump下載
只有在備份文件系統才能執行增量備份,執行1-9級別,文件和目錄只能執行0級別
備份分區
dump -0uj -f /root/boot.bak.bz2 /boot/
備份命令。先執行一次完全備份,并壓縮和更新備份時間 cat /etc/dumpdates
查看備份時間文件
cp install.log /boot/
復制日志文件到/boot分區
dump -1uj -f /root/boot.bak1.bz2 /boot/
增量備份/boot分區,并壓縮
dump –W
查詢分區的備份時間及備份級別的
備份文件或目錄
dump -0j -f /root/etc.dump.bz2 /etc/
完全備份/etc/目錄,只能使用0級別進行完全備份 ,而不再支持增量備份
restore命令
estore [模式選項] [選項]
- 模式選項:restore命令常用的模式有以下四種,這四個模式不能混用。
- -C:比較備份數據和實際數據的變化。
- -i: 進入交互模式,手工選擇需要恢復的文件。
- -t: 查看模式,用于查看備份文件中擁有哪些數據。
- -r: 還原模式,用于數據還原。
- 選項:
- -f: 指定備份文件的文件名
比較備份數據和實際數據的變化
mv /boot/vmlinuz-2.6.32-279.el6.i686 /boot/vmlinuz-2.6.32- 279.el6.i686.bak
#把/boot目錄中內核鏡像文件改個名字 restore -C -f /root/boot.bak.bz2 #restore發現內核鏡像文件丟失
查看模式
restore -t -f boot.bak.bz2
還原模式
還原boot.bak.bz2分區備份
先還原完全備份的數據
mkdir boot.test
cd boot.test/
restore -r -f /root/boot.bak.bz2
#解壓縮
restore -r -f /root/boot.bak1.bz2
#恢復增量備份數據
#還原/etc/目錄的備份etc.dump.bz2
restore -r -f etc.dump.bz2
#還原etc.dump.bz2備份
終于,終于,終于都更新完Linux基礎系統篇的一些小實驗和知識點了, 這些東西都需要我們反復來記,這里面也有一些運維的思想在里面,希望對大家有一點幫助。然而我們要走的路才剛剛開始,已經寫了關于Linux 網絡環境,已經網絡基礎篇,希望大家可以多開看看! 鏈接: Linux網絡基礎篇.
總結
以上是生活随笔為你收集整理的从零开始学习Linux笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试之 Redis汇总
- 下一篇: Linux 监控命令 iostat