鳥哥的Linux私房菜-基礎學習篇(第四版)_讀書筆記
- 第四章 首次登入與在線求助
- 4.2 文本模式下指令的下達
- 4.2.2 基礎指令的操作
- cal
- 第六章 Linux 檔案與目錄管理
- 6.1 目錄與路徑
- 6.2 檔案與目錄管理
- 6.1.2 目錄的相關操作
- mkdir (建立新目錄)
- 6.2.2 復制、洗掉與移動: cp, rm, mv
- cp (復制檔案或目錄)
- rm (移除檔案或目錄)
- 6.3 檔案內容查閱
- 6.3.1 直接檢視檔案內容
- cat (concatenate)
- tac (反向列示)
- nl (添加行號列印)
- 6.3.2 可翻頁檢視
- more (一頁一頁翻動)
- less (一頁一頁翻動)
- 6.5 指令與檔案的搜尋
- 6.5.2 檔案檔名的搜尋
- find
- 與時間相關的引數
- -mtime -n +n
- 與名稱有關的引數
- -name: 按名稱過濾,可使用正則運算式,區分大小寫
- -iname: 按名稱過濾,可使用正則運算式,不區分大小寫
- -o: or,表示“或”的關系(括號需轉義)
- 其他相關引數
- -type:按型別過濾:
- 參考檔案
- 第七章 Linux 磁盤與檔案系統管理
- 7.2 檔案系統的簡單操作
- 7.2.1 磁盤與目錄的容量
- df
- du
- 第八章 檔案與檔案系統的壓縮,打包與備份
- 8.2 Linux 系統常見的壓縮指令
- 8.2.1 gzip, zcat/zmore/zless/zgrep
- 8.2.2 bzip2, bzcat/bzmore/bzless/bzgrep
- 8.2.3 xz, xzcat/xzmore/xzless/xzgrep
- 8.3 打包指令: tar
- 8.3.1 tar
- tar
- zip
- 8.6 其他常見的壓縮與備份工具
- 8.6.1 dd
- 第九章 vim 程式編輯器
- 9.3 vim 的額外功能
- 9.3.5 vim 環境設定與記錄: ~/.vimrc, ~/.viminfo
- ~/.viminfo
- /etc/vimrc & ~/.vimrc
- 第十章、認識與學習 BASH
- 10.3 命令別名與歷史命令
- 10.3.1 命令別名設定: alias, unalias
- alias
- unalias
- 10.3.2 歷史命令: history
- history
- 10.6 管線命令 (pipe)
- 10.6.1 擷取命令: cut, grep
- cut
- 10.6.2 排序命令: sort, wc, uniq
- wc
- 10.6.6 引數代換: xargs
- xargs
- 10.8 本章習題
- 簡答題
- 你輸入一串指令之后,發現前面寫的一長串資料是錯的,你想要洗掉游標所在處到最前面的指令串內容,應該如何處理?
- 如何顯示 HOME 這個環境變數?
- 第十一章 正規表示法與檔案格式化處理
- 11.1 開始之前:什么是正規表示法
- 11.2 基礎正規表示法
- 11.2.2 grep 的一些進階選項
- 11.2.5 sed 工具
- 以行為單位進行洗掉
- 以行為單位進行新增/插入
- 以行為單位進行替換
- 以行為單位進行查詢/列印
- 行中資料的替換
- 直接修改檔案內容(危險動作)
- 11.4 檔案的格式化與相關處理
- 11.4.2 awk:好用的資料處理工具
- awk
- awk的默認變數
- awk 的邏輯運算字符
- 函式
- 條件
- if陳述句
- 參考檔案
- 第十三章 Linux 賬號管理與 ACL 權限設定
- 13.6 Linux 主機上的用戶訊息傳遞
- 13.6.1 查詢使用者: w, who, last, lastlog
- w
- who
- lastlog
- 第十四章 磁盤配額(Quota)與進階檔案系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟體磁盤陣列 (Software RAID)
- 14.3 邏輯滾動條管理員 (Logical Volume Manager)
- 14.3.1 什么是 LVM: PV, PE, VG, LV 的意義
- 14.3.2 LVM 實作流程
- 14.3.3 放大 LV 容量
- 14.3.4 使用 LVM thin Volume 讓 LVM 動態自動調整磁盤使用率
- 14.3.5 LVM 的 LV 磁盤快照
- 14.3.6 LVM 相關指令匯整與 LVM 的關閉
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十六章 行程管理與 SELinux 初探
- 16.3 行程管理
- 16.3.1 行程的觀察
- top-動態查看行程資訊
- 16.4 特殊檔案與行程
- 16.4.3. 查詢已開啟檔案或已執行行程開啟之檔案
- lsof :列出被行程所開啟的檔案檔名
- 第十八章 認識與分析登錄檔
- 18.1 什么是登錄檔
- 18.1.1 CentOS 7 登錄檔簡易說明
- 18.4 systemd-journald.service 簡介
- 18.4.1 使用 journalctl 觀察登錄資訊
- 第十九章 開機流程、模塊管理與 Loader
- 19.3 Boot Loader: Grub2
- 第二十章 基礎系統設定與備份策略
- 20.1 系統基本設定
- 20.1.1 網路設定 (手動設定與 DHCP 自動取得)
- 手動設定 IP 網路引數
- 自動取得 IP 引數
- 修改主機名
- 主機名的查看
- 主機名的修改
- 第二十二章 軟體安裝 RPM, SRPM 與 YUM
- 22.1 軟體管理員簡介
- 22.1.1 Linux 界的兩大主流: RPM 與 DPKG
- 22.1.2 什么是 RPM 與 SRPM
- 22.1.3 什么是 i386, i586, i686, noarch, x86_64
- 22.1.4 RPM 的優點
- 22.1.5 RPM 屬性相依的克服方式: YUM 在線升級
- 22.2 RPM 軟體管理程式:rpm
- 22.2.1 RPM 默認安裝的路徑
- 22.2.2 RPM 安裝 (install)
- 22.2.3 RPM 升級與更新 (upgrade/freshen)
- 22.2.4 RPM 查詢 (query)
- 22.2.5 RPM 驗證與數字簽名 (Verify/signature)
- 22.2.6 RPM 反安裝與重建資料庫 (erase/rebuilddb)
- 22.3 YUM 在線升級機制
- 22.4 SRPM 的使用:rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
第四章 首次登入與在線求助
4.2 文本模式下指令的下達
4.2.2 基礎指令的操作
cal
cal # 查看當月日歷
cal -3 # 查看最近3月的日歷(前月、當月、后月)
cal 2020 # 查看 2020 年的日歷
cal -y 2020 # 查看 2020 年的日歷
cal 3 2020 # 查看 2020 年 3 月的日歷
Linux命令模式下查看日歷
第六章 Linux 檔案與目錄管理
6.1 目錄與路徑
6.2 檔案與目錄管理
6.1.2 目錄的相關操作
mkdir (建立新目錄)
- -v :verbose,創建程序可視化
- -p :parents,先創建父目錄,在創建子目錄
mkdir -pv /data/mysql # 遞回創建/data, /data/mysql目錄
6.2.2 復制、洗掉與移動: cp, rm, mv
cp (復制檔案或目錄)
-t, --target-directory=DIRECTORY:target,目標,-t 引數指定復制到的目標目錄
rm (移除檔案或目錄)
6.3 檔案內容查閱
cat 從第一行開始顯示檔案內容,由第一行顯示到最后一行
tac 從最后一行開始顯示檔案內容,由最后一行顯示到第一行,tac 就是 cat 的倒著寫
nl 顯示的時候,順便顯示行號
more 分頁顯示檔案內容
less 分頁顯示檔案內容
head 取出并顯示前幾行
tail 取出并顯示后幾行
od 以二進制的方式讀取檔案內容
6.3.1 直接檢視檔案內容
cat (concatenate)
tac (反向列示)
nl (添加行號列印)
6.3.2 可翻頁檢視
more (一頁一頁翻動)
more:分頁顯示檔案內容
space(空格鍵) # 向后翻頁
b 或 ctrl+b # 向前翻頁(只對檔案有用,對管道無用)
enter # 向下翻一行
:f # 顯示檔案名及目前所在行數
q # 退出
less (一頁一頁翻動)
less:分頁顯示檔案內容
pagedown 或 space(空格鍵) # 向后翻頁
pageup # 向前反野
enter # 向下翻一行
g # 跳轉到檔案的第一行
G # 跳轉到檔案的最后一行
/string # 向后搜索字串 string
?string # 向前搜索字串 string
n # 重復前一行搜索
N # 反向重復前一個搜索
:f # 顯示檔案名及目前所在行數
q # 退出
6.5 指令與檔案的搜尋
6.5.2 檔案檔名的搜尋
find
與時間相關的引數
與時間有關的引數,共有 -atime、-ctime、-mtime,以 -mtime 為例進行說明:
-mtime n:過濾 n 天之前的那天被修改過的檔案
-mtime -n +n
-mtime -n +n:modify time,按照修改時間來查找檔案或目錄,-n 表示修改時間距現在 n 天以內,+n 表示修改時間距現在 n 天以前
find / -mtime 0
# 查找"~"目錄下修改時間在最近7天以內、匹配"*jpeg"或"*jpg"的檔案和目錄,不區分大小寫
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7
與名稱有關的引數
-name: 按名稱過濾,可使用正則運算式,區分大小寫
find ~ -name '*jpg' # 查找"~"目錄下所有匹配"*jpg"的檔案及目錄,區分大小寫
-iname: 按名稱過濾,可使用正則運算式,不區分大小寫
find ~ -iname '*jpg' # 查找"~"目錄下所有匹配"*jpg"的檔案及目錄,不區分大小寫
- -name filename:查找檔案名為 filename 的檔案
- -size [+/-]SIZE:查找大小大于(+size)/小于(-size) size 的檔案,單位:c(byte),k(KB),m(MB)
- -type TYPE:查找檔案型別為 TYPE 的檔案,對應檔案型別有:f(檔案),b、c(裝置檔案),d(目錄),鏈接(l),socket(s),FIFO(p)
- -perm MODE:查找檔案權限為 MODE 的檔案
- -perm -MODE:查詢檔案權限包含 MODE 中所有權限的檔案
- -perm /MODE:查找檔案權限包含 mode 中任一權限的檔案
find / -name passwd # 查找 / 目錄下名稱為 passwd 的檔案
find / -name "*passwd*" # 查找 / 目錄下名稱含 passwd 字串的檔案,* 做通配符
find / -perm /7000 # 查找 / 目錄下檔案權限包含 7000 中任一權限的檔案
find /run -type s # 查找 /run 目錄下型別為 s 的檔案
-o: or,表示“或”的關系(括號需轉義)
# 查找"~"目錄下所有匹配"jpeg"或"jpg"的檔案及目錄,
# 不區分大小寫,其中括號需使用"\"轉義
find ~ \( -iname 'jpeg' -o -iname 'jpg' \)
其他相關引數
- -exec command:對 find 命令的查找結果執行命令 command
- -print:默認引數,列印 find 命令查找結果
# 查找 /usr/bin, /usr/sbin/ 目錄中、檔案權限含 7000 中任一權限的檔案,并使用 ls -l 命令羅列出來
find /usr/bin/ /usr/sbin/ -perm -7000 -exec ls -l {} \;
find -type f -name 'test.c' -exec rm -rf {} \; # 查找當前目錄下名稱為 test.c 的檔案并洗掉
find -type f -name "*.txt" -exec rm -rf {} \; # 查找當前目錄下后綴為 txt 的檔案并洗掉
find / # 查詢 / 目錄下的所有檔案
# 查找"~"目錄下修改時間為最近7天內、匹配"*jpeg"或"*jpg"的檔案,并將其復制到 ~/Pictures 目錄
sudo find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7 -print0 | xargs -0 cp -t ~/Pictures/
-type:按型別過濾:
-type:按型別過濾檔案或目錄,可選值如下:
- b:塊設備檔案
- c:字符設備檔案
- d:目錄
- f:普通檔案
- l:符號鏈接檔案
- p:管道檔案
# 查找"~"目錄下所有匹配"*jpeg"或"*jpg"的檔案,不區分大小寫,其中括號需轉義
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f
# 查找"~"目錄下所有匹配"*jpeg"或"*jpg"的目錄,不區分大小寫,其中括號需轉義
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d
參考檔案
在Linux系統中, 為找到檔案try_grep含有以a字母
【日常小記】linux中強大且常用命令:find、grep
每天一個linux命令(22):find 命令的引數詳解
Linux中find命令用法全匯總,看完就沒有不會用的!
Linux之Find命令詳解
find命令
第七章 Linux 磁盤與檔案系統管理
7.2 檔案系統的簡單操作
7.2.1 磁盤與目錄的容量
df
df——Disk File,查看磁盤大小
Linux 查看檔案夾大小,磁盤剩余空間(du/df)
du
du——Disk Usage,查看檔案/目錄大小
- -s, --summarize :對檔案大小求和
- -k, --kilobytes :以 KB 為單位進行計數
- -m, --megabytes :以 MB 為單位進行計數
- -h, --human-readable :以人類可讀的方式進行統計計數,及以 GB 為單位進行計數
- -t, --threshold=SIZE :篩選大小超過 SIZE 的檔案或目錄
man du # 查看 du 命令的幫助資訊
du -sm /home/fly/GoEnv # 以 MB 為單位對 /home/fly/GoEnv 目錄進行大小的求和統計
Linux 查看檔案夾大小,磁盤剩余空間(du/df)
linux如何查詢檔案及檔案夾大小?
Linux du命令
linux命令詳解之du命令
du命令_Linux du命令:查看檔案夾和檔案的磁盤占用情況
第八章 檔案與檔案系統的壓縮,打包與備份
8.2 Linux 系統常見的壓縮指令
8.2.1 gzip, zcat/zmore/zless/zgrep
8.2.2 bzip2, bzcat/bzmore/bzless/bzgrep
8.2.3 xz, xzcat/xzmore/xzless/xzgrep
8.3 打包指令: tar
8.3.1 tar
tar
以下五個是獨立的命令,壓縮解壓都要用到其中一個,可以和其他命令連用但只能用到其中一個,
- -c: 建立壓縮檔案
- -x: 解壓
- -v: 顯示所有程序
- -C: 解壓到指定的目錄
以下是根據壓縮/解壓的需要可選的引數
- -x: 有gzip屬性的
引數-f是必須的
- -f: 檔案名;切記:這個引數是最后一個引數,后面只能接檔案名
tar cvf node_modules.tar node_modules/ # 壓縮 node_modules/ 目錄到 tar 格式的 node_modules.tar 檔案
tar cvf test.tar airflow/ dags/ # 壓縮 airflow/, dags/ 目錄到 tar 格式的 test.tar 檔案
tar xvf deploy.tar # 解壓 deploy.tar 檔案
# 解壓mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz檔案到/usr/local/下的同名目錄
tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
Linux下常用壓縮 解壓命令和壓縮比率對比
linux的tar命令詳情;linux多個檔案壓縮打包到一個壓縮檔案
linux下解壓tgz檔案
linux解壓rar檔案
tar壓縮解壓縮命令詳解
Ubuntu 下解壓tar.xz方法
zip
zip -r Golang-Win.zip Golang-Win # 將 Golang-Win 目錄壓縮為 Golang-Win.zip 檔案
unzip Golang-Win.zip -d Golang-Win # 將 Golang-Win.zip 檔案解壓到 Golang-Win 目錄
8.6 其他常見的壓縮與備份工具
8.6.1 dd
第九章 vim 程式編輯器
9.3 vim 的額外功能
9.3.5 vim 環境設定與記錄: ~/.vimrc, ~/.viminfo
~/.viminfo
~.viminfo 檔案用于記錄 vim 的操作歷史(越近的操作排在越上面),由系統自行創建
/etc/vimrc & ~/.vimrc
/etc/vimrc 和 ~/.vimrc 檔案都是用于設定 vim 的環境變數的,
- /etc/vimrc:vim 的全域環境變數設定檔案,在這個檔案中設定的 vim 環境變數對系統全域有效,該檔案為系統自行建立,不需用戶手動創建;
- ~/.vimrc:vim 的個人環境變數設定檔案,在這個檔案中設定的 vim 環境變數對個人環境有效,該檔案需用戶自行創建
vim 相關的環境變數如下:
:set all # 查看 vim 所有的環境變數
第十章、認識與學習 BASH
10.3 命令別名與歷史命令
10.3.1 命令別名設定: alias, unalias
alias
alias # 列出所有已設定的命令別名
alias ll='ls -l' # 設定 ls -l 命令的別名為 ll
unalias
unalias ll # 取消 ls -l 的命令別名 ll
Ubuntu學習之alias命令
ubuntu檔案夾建立軟鏈接方法
10.3.2 歷史命令: history
history
history: 查看或寫入歷史命令到~/.bash_history檔案
histroy 命令讀取與記錄 ~/.bash_history 檔案的流程如下:
[dmtsai@study ~]$ history [n]
[dmtsai@study ~]$ history [-c]
[dmtsai@study ~]$ history [-raw] histfiles
選項與引數:
n : 數字,要列出的歷史命令的行數
-c : 將目前的 shell 中的所有 history 內容全部消除
-a : 將目前新增的 history 指令新增入 histfiles 中,若沒有加 histfiles ,則預設寫入 ~/.bash_history
-r : 將 histfiles 的內容讀到目前這個 shell 的 history 記憶中;
-w : 將目前的 history 記憶內容寫入 histfiles 中!
# 范例一: 列出目前記憶體中的所有歷史命令
history
# 列出的資訊當中,包含兩列,第一列為命令的行數,第二列為具體的命令;
# 總共列出的命令列數與系統引數 HISTSIZE 有關!

# 范例二: 列出最近的3筆歷史命令
history 3
[dmtsai@study ~]$ !number
[dmtsai@study ~]$ !command
[dmtsai@study ~]$ !!
選項與引數:
number : 執行第幾筆指令的意思;
command :由最近的指令向前搜尋『指令串開頭為 command』的那個指令,并執行;
!! :就是執行上一個指令(相當于按↑按鍵后,按 Enter)
!66 # 執行第 66 筆指令
!! # 執行上一個指令
!al # 執行最近以 al 為開頭的指令
10.6 管線命令 (pipe)
10.6.1 擷取命令: cut, grep
cut
10.6.2 排序命令: sort, wc, uniq
wc
linux中wc命令用法
10.6.6 引數代換: xargs
xargs
xargs:接受標準輸入,并以"空格"作為分隔符,將標準輸入組合為一行新的引數,傳遞給之后的命令或直接進行列印;
xargs 主要用于作為管道來傳遞引數,以方便傳遞引數給那些非管道命令
選項與引數:
-0 :如果輸入的 stdin 含有特殊字符,例如 \、空格鍵等等字符時, 這個 -0 引數可以將他還原成一般字符, 這個引數可以用于特殊狀態喔!
-e :這個是 EOF (end of file) 的意思,后面可以接一個字串, 當 xargs 分析到這個字串時,就會停止作業!
-p :通過 xargs 傳遞引數前進行詢問
-n :number,每次通過 xargs 傳遞的引數的數量
# 獲取標準輸入,并將標準輸入直接傳遞給 ls 命令
find /usr/sbin/ -perm /7000 | xargs ls -l
# 獲取標準輸入,并將標準輸入以"空格"作為分隔符組合為一行新的資料,
# 然后傳遞給 id 命令,每次傳遞一個引數
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id
# 獲取標準輸入,并將標準輸入以"空格"作為分隔符組合為一行新的資料,
# 然后傳遞給 id 命令,每次傳遞一個引數,在傳遞引數前將會進行詢問
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 -p id
# 獲取標準輸入,并將標準輸入以"空格"作為分隔符組合為一行新的資料,
# 然后傳遞給 id 命令,每次傳遞一個引數,在引數傳遞前將會進行詢問,執行到'sync'引數時則終止(不包含)
cut -d ':' -f 1 /etc/passwd | xargs -n 1 -e'sync' id
10.8 本章習題
簡答題
你輸入一串指令之后,發現前面寫的一長串資料是錯的,你想要洗掉游標所在處到最前面的指令串內容,應該如何處理?
按下 ctrl + u 組合鍵即可
如何顯示 HOME 這個環境變數?
echo $HOME
第十一章 正規表示法與檔案格式化處理
11.1 開始之前:什么是正規表示法
11.2 基礎正規表示法
11.2.2 grep 的一些進階選項
11.2.5 sed 工具
sed——管道命令,用于對管道中的資料以行為單位進行增刪改查,
sed [-nefr] [n1[,n2]]function
選項與引數:
-n :slient,安靜模式,常規 sed 的用法中,會列印所有行;使用安靜模式后,只列印符合查詢條件的行
-e :edit, 編輯;
-f :直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 sed 動作;
-r :sed 的動作支持的是延伸型正規表示法的語法, (預設是基礎正規表示法語法)
-i :直接修改讀取的檔案內容,而不是由螢屏輸出,
n1, n2 :操作資料的行數,可為空
function :操作資料的命令,支持如下操作:
a :add,新增,a 后接字串,在對應行后(對應行的下一行)新增字串
c :replace,替換,c 后接字串,將指定行替換為字串
d :delete,洗掉
i :insert,插入,i 后接字串,在對應行前(對應行的上一行)新增字串
p :print,列印,通常與 sed -n 一起使用
s :replace,取代,常用格式: sed 's/要被取代的字串/新的字串/g'
以行為單位進行洗掉
# 使用 nl
nl /etc/passwd | sed '2d' # 使用 sed 命令洗掉 'nl /etc/passwd' 命令輸出資料的第2行
nl /etc/passwd | sed '2,5d' # 使用 sed 命令洗掉 'nl /etc/passwd' 命令輸出資料的第2-5行
nl /etc/passwd | sed '3,$d' # 使用 sed 命令洗掉 'nl /etc/passwd' 命令輸出資料的3-最后一行
以行為單位進行新增/插入
# 使用 sed 命令在 'nl /etc/passwd' 命令的輸出資料的第二行后(即第三行)新增 'drink tea' 字串
nl /etc/passwd | sed '2a drink tea'
# 使用 sed 命令在 'nl /etc/passwd' 命令的輸出資料的第二行前(即第二行)插入 'drink tea' 字串
nl /etc/passwd | sed '2i drink tea'
# 使用 sed 命令在 'nl /etc/passwd' 命令的輸出資料的第二行前(即第二行)插入 'drink tea or drink coffee' 字串
nl /etc/passwd | sed '2i drink tea \
> or drink coffee'
以行為單位進行替換
# 使用 sed 命令將 '/etc/passwd' 輸出資料的第2-5行替換為'No 2-5 number'字串
nl /etc/passwd | sed '2,5c No 2-5 number'
以行為單位進行查詢/列印
# 使用 sed 命令(顯示所有資料,符合查詢條件的資料會重復列印)查詢并列印 'nl /etc/passwd' 命令的輸出資料的第5-7行
nl /etc/passwd | sed '5,7p'
# 使用 sed 命令以安靜模式(不符合查詢條件的資料不顯示)查詢并列印 'nl /etc/passwd' 命令的輸出資料的第5-7行
nl /etc/passwd | sed -n '5,7p'
行中資料的替換
# 1. 查看 wlp2s0 網卡相關資訊
ifconfig wlp2s0
# 2. 查看 wlp2s0 網卡相關資訊,并過濾 IP 相關行
ifconfig wlp2s0 | grep 'inet '
# 3. 查看 wlp2s0 網卡相關資訊,過濾 IP 相關行,并將頭部 inet 替換為空串
ifconfig wlp2s0 | grep 'inet ' | sed 's/^.*inet //g'
# 4. 查看 wlp2s0 網卡相關資訊,過濾 IP 相關行,將頭部 inet 替換為空串,并將尾部 netmask 替換為空串
ifconfig wlp2s0 | grep 'inet ' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'
# 1. 過濾 /etc/manpath.config 檔案中 'MAN' 相關資料
cat /etc/manpath.config | grep 'MAN'
# 2. 過濾 /etc/manpath.config 檔案中 'MAN' 相關資料,并將 # 開始的行替換為空行
cat /etc/manpath.config | grep 'MAN'| sed 's/#.*$//g'
# 3. 過濾 /etc/manpath.config 檔案中 'MAN' 相關資料,將 # 開始的行替換為空行,然后洗掉空行
cat /etc/manpath.config | grep 'MAN'| sed 's/#.*$//g' | sed '/^$/d'
直接修改檔案內容(危險動作)
sed -i 's/\.$/\!/g' regular_express.txt # 將 regular_express.txt 檔案中所有結尾處的.替換為!
sed -i '$a # This is a test' regular_express.txt # 在 regular_express.txt 檔案尾新增 '# This is a test'
11.4 檔案的格式化與相關處理
11.4.2 awk:好用的資料處理工具
awk
awk——按列處理資料
- -F :分隔符
awk 通常運作的模式是這樣的:
awk '條件型別 1{動作 1} 條件型別 2{動作 2} ...' filename
awk 后面接兩個單引號并加上大括號 {} 來設定想要對資料進行的處理動作, awk 可以處理后續接的檔案,也可以讀取來自前個指令的 standard output , 但如前面說的, awk 主要是處理『每一行的欄位內的資料』,而默認的『欄位的分隔符為 “空格鍵” 或 “[tab]鍵” 』 !
在 awk 的括號內, 每一行的每個欄位都是有變數名稱的,那就是 $1, $2… 等變數名稱,以上面的例子來說, dmtsai 是 $1 ,因為他是第一欄嘛!至于 192.168.1.100是第三欄, 所以他就是 $3 啦!后面以此類推~呵呵!還有個變數喔!那就是 $0 , $0 代表『一整列資料』的意思~以上面的例子來說,第一行的 $0 代表的就是『 dmtsai … 』那一行啊!
# last -n 5: 使用last指令取出登錄用戶,只取前5行
# awk '{print $1 "\t" $3}': 以空格(默認)為分隔符,列印(print)出第一列($1)和第三列($3)的資料,
# 并以"\t"為分隔符進行顯示
last -n 5 | awk '{print $1 "\t" $3}'
awk 是『 以行為一次處理的單位』, 而『 以欄位為最小的處理單位』,
awk的默認變數
| 變數名稱 | 代表意義 |
|---|---|
| FILENAME | 當前檔案名 |
| NF | Num Field,每一行 ($0) 擁有的欄位總數;NF表示欄位總數,$NF表示最后一個欄位,$(NF-1)表示倒數第二個欄位 |
| NR | Num Row,目前 awk 所處理的是『第幾行』資料 |
| FS | Field Split,欄位分隔符,默認是空格或制表符,也可使用-F引數指定 |
| RS | Row Split,行分隔符,用于分割每一行,默認是換行符, |
| OFS | Output Field Split,輸出欄位的分隔符,用于列印時分隔欄位,默認為空格 |
| ORS | Output Row Split,輸出記錄的分隔符,用于列印時分隔記錄,默認為換行符, |
| OFMT | 數字輸出的格式,默認為%.6g |
# last -n 5: 使用last指令取出登錄用戶,只取前5行
# awk '{print $1 "\t lines: " NR "\t columns: " NF}': 以空格(默認)為分隔符,拆分前面命令的輸出,
# 并以\t為分隔符,列印出對應變數的資料
# 并以"\t"為分隔符進行顯示
last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}'
awk 的邏輯運算字符
| 運算單元 | 代表意義 |
|---|---|
| > | 大于 |
| < | 小于 |
| >= | 大于或等于 |
| <= | 小于或等于 |
| == | 等于 |
| != | 不等于 |
# {FS=":"}, 以:為分隔符進行分割,從第二行開始生效
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'
# BEGIN {FS=":"}, 以:為分隔符進行分割,從第一行開始生效,BEGIN表示預設變數
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
函式
條件
if陳述句
awk提供了if結構,用于撰寫復雜的條件,
# 以":"為分隔符,查找demo.txt(/etc/passwd檔案的備份)檔案中第一列大于m的欄位并輸出
awk -F ':' '{if ($1 > "m") print $1}' demo.txt
if結構還可以指定else部分,
awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
參考檔案
Linux三劍客之awk命令
awk 入門教程
AWK程式設計語言
第十三章 Linux 賬號管理與 ACL 權限設定
13.6 Linux 主機上的用戶訊息傳遞
13.6.1 查詢使用者: w, who, last, lastlog
w
who
lastlog
第十四章 磁盤配額(Quota)與進階檔案系統管理
14.1 磁盤配額 (Quota) 的應用與實作
14.2 軟體磁盤陣列 (Software RAID)
14.3 邏輯滾動條管理員 (Logical Volume Manager)
14.3.1 什么是 LVM: PV, PE, VG, LV 的意義
14.3.2 LVM 實作流程
14.3.3 放大 LV 容量
14.3.4 使用 LVM thin Volume 讓 LVM 動態自動調整磁盤使用率
14.3.5 LVM 的 LV 磁盤快照
14.3.6 LVM 相關指令匯整與 LVM 的關閉
14.4 重點回顧
14.5 本章習題
14.6 參考資料與延伸閱讀
第十六章 行程管理與 SELinux 初探
16.3 行程管理
16.3.1 行程的觀察
top-動態查看行程資訊
16.4 特殊檔案與行程
16.4.3. 查詢已開啟檔案或已執行行程開啟之檔案
lsof :列出被行程所開啟的檔案檔名
sudo lsof -i :80 # 列出所有在使用80埠的行程
lsof -p 2148|grep 1521|wc -l ## 查看專案使用的相關連接檔案
lsof命令
linux lsof命令詳解
第十八章 認識與分析登錄檔
18.1 什么是登錄檔
18.1.1 CentOS 7 登錄檔簡易說明
18.4 systemd-journald.service 簡介
18.4.1 使用 journalctl 觀察登錄資訊
第十九章 開機流程、模塊管理與 Loader
19.3 Boot Loader: Grub2
第二十章 基礎系統設定與備份策略
20.1 系統基本設定
20.1.1 網路設定 (手動設定與 DHCP 自動取得)
手動設定 IP 網路引數
自動取得 IP 引數
修改主機名
主機名的查看
hostname # 查看主機名
hostnamectl # 查看主機名、系統內核、架構、作業系統
cat /etc/hostname # 查看主機名
主機名的修改
hostnamectl set-hostname fly # 修改主機名為 fly
第二十二章 軟體安裝 RPM, SRPM 與 YUM
22.1 軟體管理員簡介
22.1.1 Linux 界的兩大主流: RPM 與 DPKG
22.1.2 什么是 RPM 與 SRPM
22.1.3 什么是 i386, i586, i686, noarch, x86_64
22.1.4 RPM 的優點
22.1.5 RPM 屬性相依的克服方式: YUM 在線升級
22.2 RPM 軟體管理程式:rpm
22.2.1 RPM 默認安裝的路徑
22.2.2 RPM 安裝 (install)
[root@study ~]# rpm -ivh package_name
選項與引數:
-i :install
-v :view,查看安裝詳細安裝資訊
-h :以安裝資訊列顯示安裝進度
范例一:安裝原版光碟上的 rp-pppoe 軟體
[root@study ~]# rpm -ivh /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:rp-pppoe-3.11-5.el7 ################################# [100%]
范例二、一口氣安裝兩個以上的軟體時:
[root@study ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
# 后面直接接上許多的軟體檔案!
范例三、直接由網路上面的某個檔案安裝,以網址來安裝:
[root@study ~]# rpm -ivh http://website.name/path/pkgname.rpm
rpm 安裝時常用的選項與引數說明
| 可下達的選項 | 代表意義 |
|---|---|
| –nodeps | 使用時機:當發生軟體屬性相依問題而無法安裝,但你執意安裝時 危險性: 軟體會有相依性的原因是因為彼此會使用到對方的機制或功能, 如果強制安裝而不考慮軟體的屬性相依, 則可能會造成該軟體的無法正常使用! |
| –replacefiles | 使用時機: 如果在安裝的程序當中出現了『某個檔案已經被安裝在你的系統上面』的資訊, 又或許出現版本不合的訊息 (confilcting files) 時,可以使用這個引數來直接覆寫檔案, 危險性: 覆寫的動作是無法復原的! 所以,你必須要很清楚的知道被覆寫的檔案是真的可以被覆寫喔!否則會欲哭無淚! |
| –replacepkgs | 使用時機: 重新安裝某個已經安裝過的軟體! 如果你要安裝一堆 RPM 軟體檔案時,可以使用 rpm -ivh *.rpm , 但若某些軟體已經安裝過了, 此時系統會出現『某軟體已安裝』的資訊,導致無法繼續安裝, 此時可使用這個選項來重復安裝喔! |
| –force | 使用時機: 這個引數其實就是 --replacefiles 與 --replacepkgs 的綜合體! |
| –test | 使用時機: 想要測驗一下該軟體是否可以被安裝到使用者的 Linux 環境當中, 可找出是否有屬性相依的問題,范例為:rpm -ivh pkgname.i386.rpm --test |
| –justdb | 使用時機: 由于 RPM 資料庫破損或者是某些緣故產生錯誤時, 可使用這個選項來更新軟體在資料庫內的相關資訊, |
| –nosignature | 使用時機: 想要略過數字簽名的檢查時,可以使用這個選項, |
| –prefix 新路徑 | 使用時機: 要將軟體安裝到其他非正規目錄時, 舉例來說,你想要將某軟體安裝到 /usr/local而非正規的 /bin, /etc 等目錄, 就可以使用『–prefix /usr/local 』來處理了, |
| –noscripts | 使用時機: 不想讓該軟體在安裝程序中自行執行某些系統指令, 說明: RPM 的優點除了可以將檔案放置到定位之外,還可以自動執行一些前置作業的指令, 例如資料庫的初始化, 如果你不想要讓 RPM 幫你自動執行這一型別的指令,就加上他吧! |
例題
在沒有網路的前提下,你想要安裝一個名為 pam-devel 的軟體,你手邊只有原版光碟,該如何是好?
你可以透過掛載原版光碟來進行資料的查詢與安裝,請將原版光碟放入光驅,底下我們嘗試將光碟掛載到/mnt 當中,
并據以處理軟體的下載啰:
1. 掛載光碟,使用: mount /dev/sr0 /mnt
2. 找出檔案的實際路徑: find /mnt -name 'pam-devel*'
3. 測驗此軟體是否具有相依性: rpm -ivh pam-devel... --test
4. 直接安裝: rpm -ivh pam-devel...
5. 卸除光碟: umount /mnt
22.2.3 RPM 升級與更新 (upgrade/freshen)
22.2.4 RPM 查詢 (query)
- RPM 在查詢的時候,其實查詢的地方是在 /var/lib/rpm/ 這個目錄下的資料庫檔案啦!
[root@study ~]# rpm -qa <==已安裝軟體
[root@study ~]# rpm -q[licdR] 已安裝的軟體名稱 <==已安裝軟體
[root@study ~]# rpm -qf 存在于系統上面的某個檔案名 <==已安裝軟體
[root@study ~]# rpm -qp[licdR] 未安裝的某個檔案名 <==查閱 RPM 檔案
選項與引數:
查詢已安裝軟體的資訊:
-q : query,查詢;
-qa :query all,查詢所有已安裝在本機 Linux 的 RPM 格式的軟體;
-qi :query information,查詢該軟體的詳細資訊,包括開發商、版本與說明等;
-ql :query list,查詢該軟體包含的所有目錄及檔案;
-qc :query config,查詢該軟體所有的組態檔 (找出在 /etc/ 底下的檔名而已)
-qd :query description,查詢該軟體所有的說明檔案 (找出與 man 有關的檔案而已)
-qR :query Required,查詢該軟體所依賴的軟體和檔案
-qf :query father,由后面接的檔案名,找出該檔案屬于哪一個已安裝的軟體;
-q --scripts:列出是否含有安裝后需要執行的腳本檔,可用以 debug 喔!
查詢某個 RPM 檔案內含有的資訊:
-qp[icdlR]:注意 -qp 后面接的所有引數以上面的說明一致,
但用途僅在于找出某個 RPM 檔案內的資訊,而非已安裝的軟體資訊!注意!
范例一:找出你的 Linux 是否有安裝 logrotate 這個軟體?
[root@study ~]# rpm -q logrotate
logrotate-3.8.6-4.el7.x86_64
[root@study ~]# rpm -q logrotating
package logrotating is not installed
# 注意到,系統會去找是否有安裝后面接的軟體名稱,注意,不必要加上版本喔!
# 至于顯示的結果,一看就知道有沒有安裝啦!
范例二:列出上題當中, 屬于該軟體所提供的所有目錄與檔案:
[root@study ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
....(以下省略)....
# 可以看出該軟體到底提供了多少的檔案與目錄,也可以追蹤軟體的資料,
范例三:列出 logrotate 這個軟體的相關說明資料:
[root@study ~]# rpm -qi logrotate
Name : logrotate # 軟體名稱
Version : 3.8.6 # 軟體的版本
Release : 4.el7 # 釋出的版本
Architecture: x86_64 # 編譯時所針對的硬體等級
Install Date: Mon 04 May 2015 05:52:36 PM CST # 這個軟體安裝到本系統的時間
Group : System Environment/Base # 軟體是放再哪一個軟體群組中
Size : 102451 # 軟體的大小
License : GPL+ # 釋出的授權方式
Signature : RSA/SHA256, Fri 04 Jul 2014 11:34:56 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : logrotate-3.8.6-4.el7.src.rpm # 這就是 SRPM 的檔名
Build Date : Tue 10 Jun 2014 05:58:02 AM CST # 軟體編譯打包的時間
Build Host : worker1.bsys.centos.org # 在哪一部主機上面編譯的
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : https://fedorahosted.org/logrotate/
Summary : Rotates, compresses, removes and mails system log files
Description : # 這個是詳細的描述!
The logrotate utility is designed to simplify the administration of
log files on a system which generates a lot of log files. Logrotate
allows for the automatic rotation compression, removal and mailing of
log files. Logrotate can be set to handle a log file daily, weekly,
monthly or when the log file gets to a certain size. Normally,
logrotate runs as a daily cron job.
Install the logrotate package if you need a utility to deal with the
log files on your system.
# 列出該軟體的 information (資訊),里面的資訊可多著呢,包括了軟體名稱、
# 版本、 開發商、 SRPM 檔案名、打包次數、 簡單說明資訊、 軟體打包者、
# 安裝日期等等!如果想要詳細的知道該軟體的資料,用這個引數來了解一下
范例四:分別僅找出 logrotate 的組態檔與說明檔
[root@study ~]# rpm -qc logrotate
[root@study ~]# rpm -qd logrotate
范例五:若要成功安裝 logrotate ,他還需要什么檔案的幫忙?
[root@study ~]# rpm -qR logrotate
/bin/sh
config(logrotate) = 3.8.6-4.el7
coreutils >= 5.92
....(以下省略)....
# 由這里看起來,呵呵~還需要很多檔案的支持才行喔!
范例六:由上面的范例五,找出 /bin/sh 是那個軟體提供的?
[root@study ~]# rpm -qf /bin/sh
bash-4.2.46-12.el7.x86_64
# 這個引數后面接的可是『 檔案』吶!不像前面都是接軟體喔!
# 這個功能在查詢系統的某個檔案屬于哪一個軟體所有的,
范例七:假設我有下載一個 RPM 檔案,想要知道該檔案的需求檔案, 該如何?
[root@study ~]# rpm -qpR filename.i386.rpm
# 加上 -qpR ,找出該檔案需求的資料!
例題
1. 我想要知道我的系統當中,以 c 開頭的軟體有幾個,如何實做?
rpm -qa | grep ^c | wc -l
2. 我的 WWW 服務器為 Apache ,我知道他使用的 RPM 軟體檔案名為 httpd ,現在,我想要知道這
個軟體的所有組態檔放置在何處,可以怎么作?
rpm -qc httpd
3. 承上題,如果查出來的組態檔案已經被我改過,但是我忘記了曾經修改過哪些地方,所以想要直
接重新安裝一次該軟體,該如何作?
假設該軟體在網路上的網址為:http://web.site.name/path/httpd-x.x.xx.i386.rpm
則我可以這樣做:rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs
4. 如果我誤砍了某個重要檔案,例如 /etc/crontab,偏偏不曉得他屬于哪一個軟體,該怎么辦?
雖然已經沒有這個檔案了,不過沒有關系,因為 RPM 有記錄在 /var/lib/rpm 當中的資料庫啊!
所以直接下達:rpm -qf /etc/crontab,就可以知道是那個軟體啰!重新安裝一次該軟體即可!
22.2.5 RPM 驗證與數字簽名 (Verify/signature)
22.2.6 RPM 反安裝與重建資料庫 (erase/rebuilddb)
22.3 YUM 在線升級機制
22.4 SRPM 的使用:rpmbuild (Optional)
22.5 重點回顧
22.6 本章習題
22.7 參考資料與延伸閱讀
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/222845.html
標籤:其他
上一篇:SecureCRT的下載、安裝( 程序非常詳細!!值得查看)
下一篇:MPLS配置實驗
