命令指南1

命令指南

3種類型的時(shí)間戳

GUN/Linux的文件包含3種類型的時(shí)間戳

Access: 2020-01-02 20:05:17.117999915 +0800    # 文件最后被訪問(wèn)的時(shí)間
Modify: 2020-01-02 20:05:17.117999915 +0800    # 文件最后被修改的時(shí)間
Change: 2020-01-02 20:05:17.117999915 +0800    # 文件狀態(tài)最后被改變的時(shí)間

對(duì)應(yīng)ls命令,查看上述時(shí)間戳的選項(xiàng)如下

mtime:最后修改時(shí)間(ls -lt) # 修改文件內(nèi)容,文件的修改時(shí)間(modify time)會(huì)改變
ctime:狀態(tài)改變時(shí)間(ls -lc) # 修改文件內(nèi)容谤辜、移動(dòng)文件或改變文件屬性等,文件的change時(shí)間會(huì)改變
atime:最后訪問(wèn)時(shí)間(ls -lu) # 查看文件內(nèi)容時(shí),文件的訪問(wèn)時(shí)間(access time)會(huì)改變

Linux文件及目錄管理命令基礎(chǔ)

shutdown

參數(shù)選項(xiàng) 解釋說(shuō)明
-r 重啟系統(tǒng),而不是關(guān)機(jī),這個(gè)參數(shù)在系統(tǒng)重啟時(shí)經(jīng)常使用,例如,shutdown -r now
-h 關(guān)機(jī),這個(gè)參數(shù)在系統(tǒng)關(guān)機(jī)時(shí)經(jīng)常使用,例如,shutdown -h now
-H 關(guān)機(jī)(halt),使用這個(gè)參數(shù)對(duì)系統(tǒng)進(jìn)行關(guān)機(jī)后,系統(tǒng)其實(shí)并未完全關(guān)機(jī),不常用
-P 關(guān)機(jī)(poweroff),不常用
-c 取消正在執(zhí)行的shudown指令,不常用
-k 只發(fā)送關(guān)機(jī)警告并拒絕新用戶登錄,極不常用

實(shí)例

shutdown -h +1 1分鐘后關(guān)閉linux系統(tǒng)
shutdown -r 11:00 11點(diǎn)整重啟linux系統(tǒng)
shutdown -h now 立即關(guān)閉Linux系統(tǒng)

常見(jiàn)的關(guān)機(jī)、重啟、注銷命令集合

命令 說(shuō)明
關(guān)機(jī)命令
shutdown -h now 立刻關(guān)機(jī)(生產(chǎn)常用)
shutdown -h +1 1分鐘以后關(guān)機(jī),1可以是別的數(shù)字或時(shí)間點(diǎn),例如,11:00
halt 立即停止系統(tǒng),需要人工關(guān)閉電源,Centos7下為systemctl halt
init 0 切換到運(yùn)行級(jí)別0,0表示關(guān)機(jī),因此此命令的作用就是關(guān)機(jī)
poweroff 立即停止系統(tǒng),并且關(guān)閉電源,Centos7下為systemctl poweroff
重啟命令
reboot 立即重啟(生產(chǎn)常用),Centos7下為systemctl reboot
shutdown -r now 立即重啟(生產(chǎn)常用)
shutdown -r +1 1分鐘后重啟
init 6 切換到運(yùn)行級(jí)別6,6表示重啟,因此此命令的作用就是重啟
注銷命令
logout 注銷退出當(dāng)前用戶窗口
exit 注銷退出當(dāng)前用戶窗口,快捷鍵Ctrl+d

PS1變量

PS1變量 含義
\d 代表日期,格式為weekday month date,例如,"Mon Aug 1"
\H 完整的主機(jī)名稱
\h 僅取主機(jī)的第一個(gè)名字
\t 顯示時(shí)間為24小時(shí)格式,例如,HH:MM:SS
\T 顯示時(shí)間為12小時(shí)格式
\A 顯示時(shí)間為24小時(shí)格式,例如,HH:MM
\u 當(dāng)前用戶的賬號(hào)名稱
\v BASH的版本信息
\w 顯示完整的路徑,其中家目錄會(huì)以'~'代替
\W 利用basename獲取工作目錄名稱,只會(huì)列出最后一個(gè)目錄
\# 執(zhí)行的第幾個(gè)命令
\$ 提示字符,如果是root,則提示符為#,普通用戶為$

如需要讓PS1變量永久生效,編輯/etc/bashrc文件,定位到36行,將內(nèi)容中的大寫(xiě)的W改為小寫(xiě)的w,即可讓變量永久生效.執(zhí)行 source /etc/bashrc使得修改信息生效

PWD *****:顯示當(dāng)前所在位置的信息

參數(shù)選項(xiàng) 解釋說(shuō)明
-L logical首字符縮寫(xiě),表示顯示邏輯路徑(忽略軟連接文件),取PWD系統(tǒng)環(huán)境變量的值,此參數(shù)不常用
-P physical首字符縮寫(xiě),表示顯示物理路徑,如果當(dāng)前目錄路徑是軟連接文件,則會(huì)顯示軟連接對(duì)應(yīng)的源文件
echo $PWD PWD系統(tǒng)環(huán)境變量

cd *****:切換目錄

參數(shù)選項(xiàng) 解釋說(shuō)明
-P 如果切換的目標(biāo)目錄是一個(gè)軟連接,則會(huì)直接切換到軟連接指向的真正物理目標(biāo)目錄,與pwd命令的-P選項(xiàng)功能類似,不常用
-L 功能與-P相反,如果切換的目標(biāo)目錄是一個(gè)軟連接,則直接切換到軟連接所在的目錄,與pwd命令的-L選項(xiàng)功能類似,不常用
- 當(dāng)前用戶的上一次所在的目錄路徑
~ 當(dāng)前用戶的家目錄所在的路徑
.. 從當(dāng)前目錄切換到當(dāng)前目錄的上一級(jí)所在的路徑

tree ****:以樹(shù)形結(jié)構(gòu)顯示目錄下的內(nèi)容

參數(shù)選項(xiàng) 解釋說(shuō)明
-a 顯示所有文件,包括隱藏文件(以'.'開(kāi)頭的文件)
-d 只顯示目錄
-f 顯示每個(gè)文件的全路徑
-i 不顯示樹(shù)枝,常與-f參數(shù)配合使用
-L level 遍歷目錄的最大層數(shù),level為大于的正整數(shù)
-F 在執(zhí)行文件尉辑、目錄方灾、Socket雪标、符號(hào)鏈接陋气、管道名稱等不同類型文件的結(jié)尾,各自加上'*'篙耗、'|'迫筑、'='宪赶、'@'號(hào),類似于ls命令的-F選項(xiàng)

mkdir*****:創(chuàng)建目錄

參數(shù)選項(xiàng) 解釋說(shuō)明
-p ①遞歸創(chuàng)建目錄 ②即使要?jiǎng)?chuàng)建的目錄事先已存在,也不會(huì)報(bào)錯(cuò)提示目錄存在
-m 設(shè)置新創(chuàng)建目錄的默認(rèn)目錄對(duì)應(yīng)的權(quán)限
-v 顯示創(chuàng)建目錄的過(guò)程

touch*****:創(chuàng)建文件或更改文件時(shí)間戳

參數(shù)選項(xiàng) 解釋說(shuō)明
-a 只更改指定文件的最后訪問(wèn)時(shí)間
-d STRING 使用字符串STRING代表的事件作為模板設(shè)置指定文件的時(shí)間屬性
-m 只更改指定文件的最后修改時(shí)間
-r file 將指定文件的時(shí)間屬性設(shè)置為與模板文件file的時(shí)間屬性相同
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss]格式的時(shí)間設(shè)置文件的時(shí)間屬性.格式的含義從左到右依次為:世紀(jì)、年脯燃、月搂妻、日、時(shí)辕棚、分欲主、秒

ls*****:顯示目錄下內(nèi)容及屬性信息的命令

參數(shù)選項(xiàng) 解釋說(shuō)明
-l 使用長(zhǎng)格式列出文件及目錄信息
-a 顯示目錄下的所有文件,包括以'.'字符開(kāi)始的隱藏文件
-t 根據(jù)最后的修改時(shí)間(mtime)進(jìn)行排序,默認(rèn)是以文件名進(jìn)行排序
-r 依相反順序排序
-F 在條目后加上文件類型的指示符號(hào)(,/,=,@,|其中的一個(gè))*
-p 只在目錄后加上'/'
-i 顯示Inode節(jié)點(diǎn)信息
-d 當(dāng)遇到目錄時(shí),列出目錄本身而非目錄內(nèi)的文件,并且不跟隨符號(hào)鏈接
-h 以人類可讀的信息顯示文件或目錄的大小,如(1K 234M 2G)
-A 列出所有文件,包括隱藏文件,但不包括'.'與'..'這兩個(gè)目錄
-S 根據(jù)文件大小進(jìn)行排序
-R 遞歸列出所有子目錄
-x 逐行列出項(xiàng)目而不是逐欄列出
-X 根據(jù)擴(kuò)展名排序
-c 根據(jù)狀態(tài)改變時(shí)間(ctime)排序
-u 根據(jù)最后訪問(wèn)時(shí)間(atime)排序
--color={never,always,auto} 不同的文件類型顯示顏色參數(shù),never表示不顯示,always表示總是顯示,auto表示自動(dòng)顯示
--full-time 以完整的時(shí)間格式輸出,等同于ls -l --time-style=full-iso
--time-style={full-iso,long-iso,iso,locale} 以不同的時(shí)間格式輸出,long-iso效果最好
--time={atime,ctime} 按不同時(shí)間屬性輸出,atime表示訪問(wèn)時(shí)間,ctime表示按改變權(quán)限屬性時(shí)間,如果不加此參數(shù)則默認(rèn)為最后修改時(shí)間

cp*****:復(fù)制文件或目錄

參數(shù)選項(xiàng) 解釋說(shuō)明
-p 復(fù)制文件時(shí)保持源文件的所有者、權(quán)限信息以及時(shí)間屬性
-d 如果復(fù)制的源文件是符號(hào)鏈接,則僅復(fù)制符號(hào)鏈接本身,而且保留符號(hào)鏈接所指向的目標(biāo)文件或者目錄
-r 遞歸復(fù)制目錄,即復(fù)制目錄下的所有層級(jí)的子目錄和文件
-a 等同于上面的p逝嚎、d扁瓢、r這3個(gè)選項(xiàng)的總和
-i 在覆蓋已有文件前提示用戶確認(rèn),默認(rèn)cp帶有-i參數(shù)
-t 默認(rèn)情況下命令格式是'cp 源文件 目標(biāo)文件',使用-t參數(shù)可以顛倒順序,格式變?yōu)?cp -t 目標(biāo)文件 源文件'

cp覆蓋文件不提示的是否覆蓋的幾種方法

  1. which cp --> usr/bin/cp file1.txt file2.txt 使用cp命令的絕對(duì)路徑屏蔽別名
  2. \cp file1.txt file2.txt 使用'\'屏蔽別名
  3. alias取消別名 unalias cp 系統(tǒng)重啟失效
  4. cat ~/.bashrc 編輯 aliascp='cp -i',重啟后生效.'.bashrc'會(huì)在開(kāi)機(jī)時(shí)加載 不建議使用,只用于開(kāi)拓思路

快速備份文件案例

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori
# 上面的格式中,有一部分路徑重復(fù)了,使用{}進(jìn)行快捷輸入命令,這兩種方法是等效的

cp /etc/ssh/sshd_config{,.ori}
# 這種方法的原理是bash對(duì)大括號(hào)的展開(kāi)操作,/etc/ssh/sshd_config{,.ori}展開(kāi)成/etc/ssh/sshd_config /etc/ssh/sshd_config.ori再傳給cp命令

mv*****:移動(dòng)或重命名文件

參數(shù)選項(xiàng) 解釋說(shuō)明
-f 若目標(biāo)文件已經(jīng)存在,則不會(huì)詢問(wèn)而是直接覆蓋
-i 若目標(biāo)文件已經(jīng)存在,則會(huì)詢問(wèn)是否覆蓋
-n 不覆蓋已經(jīng)存在的文件
-t 指定mv的目標(biāo)目錄,適用于移動(dòng)多個(gè)源文件到一個(gè)目錄的情況,此時(shí)目標(biāo)目錄在前,源文件在后,與cp命令-t功能一致
-u 在源文件比目標(biāo)文件新,或者目標(biāo)文件不存在時(shí)才進(jìn)行移動(dòng)
  • mv dir1/file* ------>"file*"匹配所有以file開(kāi)頭的文件 將dir1/file**的文件移動(dòng)到當(dāng)前所在位置

rm:刪除文件或目錄

參數(shù)選項(xiàng) 解釋說(shuō)明
-f 強(qiáng)制刪除.忽略不存在的文件,不提示確認(rèn)
-i 在刪除前需確認(rèn)
-I
-r 遞歸刪除目錄及其內(nèi)容
  • 補(bǔ)充:慎用rsync --delete

    • 多數(shù)情況下,刪除數(shù)據(jù)后是可以恢復(fù)的(例如,可通過(guò)恢復(fù)工具ext3grep來(lái)實(shí)現(xiàn)),但一定會(huì)影響業(yè)務(wù),例如,造成停機(jī),或者數(shù)據(jù)丟失了較長(zhǎng)時(shí)間,用戶訪問(wèn)不了等.

Linux文件過(guò)濾及內(nèi)容編輯處理

vi/vim*****:純文本編輯器

vi是Linux命令行界面下的重要文字編輯器.vim是vi的增強(qiáng)版,例如,高亮顯示代碼、自動(dòng)縮進(jìn)等.vim與vi是兼容的,建議使用vim編輯器代替vi編輯器

用法格式

vim  [option] [file]
vim  選項(xiàng)      文件

vim分為三種模式:普通模式补君、編輯模式引几、命令模式,作用分別如下:

  1. 普通模式:用vim命令打開(kāi)文件后,默認(rèn)的狀態(tài)就是普通模式.在這個(gè)模式中,不能進(jìn)行編輯輸入操作,但可以按"上下左右"鍵來(lái)移動(dòng)光標(biāo),同時(shí)還可以執(zhí)行一些操作命令進(jìn)行如刪除、賦值挽铁、粘貼等工作.
  2. 編輯模式:在普通模式下不能進(jìn)行編輯輸入模式,只有按下"i,I,o,O,a,A,r,R,s,S"(其中"i"最常用)等字幕進(jìn)入編輯模式后才可以執(zhí)行錄入文字等編輯操作.確定文件是否處于編輯模式狀態(tài)有一個(gè)重要特征,那就是在窗口的左下角要有插入的標(biāo)記 "-- INSERT --"或"-- 插入 --"
  3. 命令模式:在普通模式下,輸入":"或"/"或"?"時(shí),光標(biāo)會(huì)自動(dòng)定位在那一行,在這個(gè)模式中可以執(zhí)行保存伟桅、退出、搜索屿储、替換贿讹、顯示行號(hào)等相關(guān)操作
image-20200108093711473.png
命令 說(shuō)明
普通模式:移動(dòng)光標(biāo)的操作
G 或 (shift+g) 將光標(biāo)移動(dòng)到文件的最后一行
gg 將光標(biāo)移動(dòng)到文件的第一行,等價(jià)于1gg或1G
0 數(shù)字0,將光標(biāo)從所在位置移動(dòng)到當(dāng)前行的開(kāi)頭
$ 從光標(biāo)所在位置將光標(biāo)移動(dòng)到當(dāng)前行的結(jié)尾
n<Enter> n為數(shù)字,<Enter>為回車鍵,將光標(biāo)從當(dāng)前位置向下移動(dòng)n行
ngg n為數(shù)字,移動(dòng)到文件的第n行,如11gg可移動(dòng)到第11行,配合":set nu"查看,如同nG
H 光標(biāo)移動(dòng)到當(dāng)前窗口最上方的那一行
M 光標(biāo)移動(dòng)到當(dāng)前窗口中間的那一行
L 光標(biāo)移動(dòng)到當(dāng)前窗口最下方的那一行
h 或 (←) 光標(biāo)向左移動(dòng)一個(gè)字符
j 或 (↓) 光標(biāo)向下移動(dòng)一個(gè)字符
k 或 (↑) 光標(biāo)向上移動(dòng)一個(gè)字符
l 或 (→) 光標(biāo)向右移動(dòng)一個(gè)字符
普通模式:搜索與替換操作
/old 從光標(biāo)位置開(kāi)始,向下尋找名為old的字符串
?old 從光標(biāo)位置開(kāi)始,向上尋找名為old的字符串
n 從光標(biāo)位置開(kāi)始,向下重復(fù)前一個(gè)搜索的動(dòng)作
N 從光標(biāo)位置開(kāi)始,向上重復(fù)前一個(gè)搜索的動(dòng)作
:g/A/s/B/g 將符合A的內(nèi)容全部替換為B,斜線為分隔符,可以用@渐逃、#等替代
:%s/A/B/g 將符合A的內(nèi)容全部替換為B,斜線為分隔符,可以用@够掠、#等替代
:n1,n2s/A/B/g n1、n2為數(shù)字,在n1行和n2行間尋找A,用B替換
普通模式:復(fù)制茄菊、粘貼疯潭、刪除等操作
yy 復(fù)制光標(biāo)所在的當(dāng)前行
nyy n為數(shù)字,復(fù)制光標(biāo)開(kāi)始向下共n行
p/P p將已復(fù)制的數(shù)據(jù)粘貼到光標(biāo)的下一行,P則為粘貼到光標(biāo)的上一行
dd 刪除(剪切)光標(biāo)所在行
ndd n為數(shù)字,刪除(剪切)從光標(biāo)開(kāi)始向下共n行
u 恢復(fù)(回滾)前一個(gè)執(zhí)行的操作
. 重復(fù)前一個(gè)執(zhí)行過(guò)的動(dòng)作
x 向后刪除字符
X 向前刪除字符
d1G 刪除當(dāng)前行至第一行
dG 刪除當(dāng)前行至最后一行
d0 刪除當(dāng)前光標(biāo)文本至行首
d$ 刪除當(dāng)前光標(biāo)文本至行尾
進(jìn)入編輯模式命令
i 在當(dāng)前光標(biāo)所在處插入文字
a 在當(dāng)前光標(biāo)所在處的下一字符處插入文字
I 在當(dāng)前光標(biāo)所在行的行首的第一個(gè)非空格符處插入文字,與A相反
A 在當(dāng)前光標(biāo)所在行的行尾的最后一個(gè)字符處插入文字,與I相反
O 在當(dāng)前所在行的上一行插入新的一行
o 在當(dāng)前所在行的下一行插入新的一行
Esc 退出編輯模式,回到命令模式
命令行模式
:wq 退出并保存
:wq! 退出并強(qiáng)制保存,"!"為強(qiáng)制的意思
:q! 強(qiáng)制退出,不保存
:n1,n2 w filename n1、n2為數(shù)字,將n1行到n2行的內(nèi)容保存成filename這個(gè)文件
:n1,n2 co n3 n1面殖、n2為數(shù)字,將n1行到n2行的內(nèi)容復(fù)制到n3位置下
:n1,n2 m n3 n1竖哩、n2為數(shù)字,將n1行到n2行的內(nèi)容挪到n3位置下
:!command 暫時(shí)離開(kāi)vi命令到命令行模式下執(zhí)行command的結(jié)果,例如:! ls /etc
:set nu 顯示行號(hào)
:set nonu 與set nu相反,取消行號(hào)
:vs filename 垂直分屏顯示,同時(shí)顯示當(dāng)前文件與filename對(duì)應(yīng)文件的內(nèi)容
:sp filename 水平分屏顯示,同時(shí)顯示當(dāng)前文件與filename對(duì)應(yīng)文件的內(nèi)容
I + # + Esc 在可視化模塊下(ctrl + v),一次性注釋多行,取消注釋可用"n1,n2s/#/ /gc",這里的操作是一個(gè)通用的方法,#號(hào)可以換成別的操作,例如tab鍵,這樣就成了批量縮進(jìn)
Del 在可視化模塊下(ctrl + v),一次性刪除所選內(nèi)容
r 在可視化模塊下(ctrl + v),一次性替換所選內(nèi)容

vim打開(kāi)文件的其他幾種方法

vim file 打開(kāi)/新建文件,光標(biāo)位于第一行行首,file為任意文件名
vim file +n 打開(kāi)文件,光標(biāo)置于第n行行首,n為自然數(shù)
vim file : 打開(kāi)文件,光標(biāo)置于最后1行行首
vim file +/pattern 將光標(biāo)置于與pattern匹配的第一個(gè)字符串處,pattern為任意字符串

echo*****:顯示輸出文本內(nèi)容

參數(shù)選項(xiàng) 解釋說(shuō)明
-n 不要自動(dòng)換行
-E 不解析轉(zhuǎn)義字符(默認(rèn)參數(shù))
-e 若字符串中出現(xiàn)以下字符,則需要進(jìn)行特別處理,而不會(huì)將它當(dāng)成一般文字輸出 \a:發(fā)出警告聲 \b:刪除前一個(gè)字符 \c:最后不加上換行符 \f:換行但光標(biāo)仍舊停留在原來(lái)的位置 \n:換行且光標(biāo)移至行首 \r:光標(biāo)移至行首,但不換行 \t:插入tab

可以使用;連接兩個(gè)echo命令

[root@grape tmp]# echo -e "\033[46;31mhello,world \033[0m" 打印彩色輸出,范圍是[40-47;30-37m

cat*****:合并文件或查看文件內(nèi)容

concatenate縮寫(xiě),功能是連接多個(gè)文件并且打印到屏幕輸出,或者重定向到指定文件中.此命令常用于顯示單個(gè)文件內(nèi)容,或者將幾個(gè)文件內(nèi)容連接起來(lái)一起顯示,還可以從標(biāo)準(zhǔn)輸入中讀取內(nèi)容并顯示,生產(chǎn)環(huán)境中,常與重定向或追加符配合使用.

序號(hào) cat命令常用功能 簡(jiǎn)要例子說(shuō)明
1 查看文件內(nèi)容 例如:cat file.txt
2 把多個(gè)文件合并成一個(gè) 例如:cat file1.txt file2.txt > newfile.txt
3 創(chuàng)建編輯新文件 例如:輸入cat > file1.txt,后面接要編輯的內(nèi)容,使用快捷鍵Ctrl + d 或Ctrl + c可結(jié)束編輯,了解即可
4 非交互式地編輯或追加內(nèi)容到文件尾部 生產(chǎn)環(huán)境最重要的應(yīng)用,命令格式 1.cat >>file1.txt<<EOF 2.hello,world 3.EOF
5 清空文件內(nèi)容 例如:使用cat /dev/null >file1.txt就可以將文件內(nèi)容清空,但是文件還存在
參數(shù)選項(xiàng) 解釋說(shuō)明
-n 從1開(kāi)始對(duì)所有輸出的內(nèi)容按行編號(hào)
-b 與-n選項(xiàng)功能類似,但忽略顯示空白行行號(hào)
-s 當(dāng)遇到有連續(xù)兩行以上的空白行,就替換為一行空白行
-E 在每一行的行尾顯示$
T 將Tab字符顯示為"^I"
-v 除了LFD和TAB之外,使用"^"和"M-"引用
-e 等價(jià)于-vE
-A 等價(jià)于-vET三個(gè)選項(xiàng)的功能之和
-t 等價(jià)于-vT

重定向符

名稱 文件描述簡(jiǎn)介
標(biāo)準(zhǔn)輸入(stdin) 代碼為0,配合"<"或"<<"使用 數(shù)據(jù)流從右向左
標(biāo)準(zhǔn)輸出(stdout) 代碼為1,配合">"或">>"使用 數(shù)據(jù)流從左向右
標(biāo)準(zhǔn)錯(cuò)誤輸出 代碼為2,配合">"或">>"使用 數(shù)據(jù)流從左向右
重定向符號(hào),數(shù)據(jù)流是箭頭方向
標(biāo)準(zhǔn)輸入重定向 "0<"或"<" 清空已有內(nèi)容,數(shù)據(jù)一般從文件流向處理命令
標(biāo)準(zhǔn)輸入追加重定向 "0<<"或"<<" 追加內(nèi)容到底部,數(shù)據(jù)一般從文件流向處理命令
標(biāo)準(zhǔn)輸出重定向 "1>"或">" 正常輸出重定向到文件,會(huì)清空已有內(nèi)容
標(biāo)準(zhǔn)輸出追加重定向 "1>>"或">>" 將內(nèi)容追加重定向到文件底部,不會(huì)清空已有內(nèi)容
標(biāo)準(zhǔn)錯(cuò)誤輸出重定向 "2>" 將標(biāo)準(zhǔn)錯(cuò)誤內(nèi)容重定向到文件,如果文件存在則清空
標(biāo)準(zhǔn)錯(cuò)誤輸出追加重定向 "2>>" 將標(biāo)準(zhǔn)錯(cuò)誤內(nèi)容重追加到文件底部,不會(huì)清空已有內(nèi)容
echo 123 1>a.txt 2>b.txt
# 此條命令如果執(zhí)行成功,則a文件會(huì)寫(xiě)入123.執(zhí)行失敗b文件會(huì)寫(xiě)入錯(cuò)誤提示.

more****:分頁(yè)顯示文件內(nèi)容

參數(shù)選項(xiàng) 解釋說(shuō)明
-num 指定屏幕大小為num行
+num 從行號(hào)num開(kāi)始顯示
-s 將連續(xù)的多個(gè)空行顯示為一行
-p 不滾屏,而是清除整個(gè)屏幕,然后顯示文本
-c 不滾屏,而是從每一屏的頂部開(kāi)始顯示文本,每顯示完一行,就清除這一行的剩余部分
子命令 解釋說(shuō)明
h 或 ? 查看幫助
空格鍵 向下滾動(dòng)一屏
z 向下滾動(dòng)一屏,與空格鍵功能相同
Enter 向下顯示1行
f 向下滾動(dòng)一屏,2倍的空格鍵
b 返回上一屏
= 輸出當(dāng)前行的行號(hào)
/ 查找指定文本
:f 輸出文件名和當(dāng)前行的行號(hào)
v 調(diào)用vi編輯器
!命令 調(diào)用shell,并執(zhí)行命令
q 退出more

less*****:分頁(yè)顯示文件內(nèi)容 高級(jí)的more命令

參數(shù)選項(xiàng) 命令說(shuō)明
-i 搜索時(shí)忽略大小寫(xiě)
-m 類似于more命令的進(jìn)度百分比
-N 顯示每行的行號(hào)
-s 將連續(xù)空行壓縮為一行顯示
-e 當(dāng)文件顯示到結(jié)尾時(shí)自動(dòng)退出文件,若不使用此選項(xiàng)則需要使用交互式命令q退出less
子命令 解釋說(shuō)明
b 向前翻一頁(yè)
空格鍵 向后翻一頁(yè)
u 向前翻半頁(yè)
d 向后翻半頁(yè)
y 向上滾動(dòng)一行
回車鍵 向下滾動(dòng)一行
向上滾動(dòng)一行
向下滾動(dòng)一行
page up 向前翻一頁(yè)
page down 向后翻一頁(yè)
/字符串 向下搜索"字符串"
?字符串 向上搜索"字符串"
n 向后查找下一個(gè)匹配的文本
N 向前查找上一個(gè)匹配的文本
v vi編輯界面
!命令 調(diào)用Shell,并執(zhí)行命令
G 移動(dòng)到最后一行
g 移動(dòng)到第一行
h 顯示幫助界面
q 退出less命令

head*****:顯示頭部信息

參數(shù)選項(xiàng) 解釋說(shuō)明
-n<行數(shù)> 指定顯示的行數(shù),默認(rèn)為10行
-c<字節(jié)> 指定顯示的字節(jié)數(shù)
-q 不顯示包含給定文件名的文件頭
-v 總是顯示包含給定文件名的文件頭

tail*****:顯示文件內(nèi)容尾部

參數(shù)選項(xiàng) 解釋說(shuō)明
-c<數(shù)目> 指定顯示的字節(jié)數(shù)
-n<行數(shù)> 指定顯示的行數(shù)
-f 實(shí)時(shí)輸出文件變化后追加的數(shù)據(jù)
-F 功能等同于-f --retry
--retry 不停嘗試打開(kāi)文件直到打開(kāi)為止,與-f參數(shù)合用
--pid=進(jìn)程號(hào) -f參數(shù)連用,在進(jìn)程結(jié)束后自動(dòng)退出tail命令
-s 秒數(shù)N 監(jiān)視文件變化的間隔秒數(shù)
-q 不顯示包含給定文件名的文件頭
-v 總是顯示包含給定文件名的文件頭
# 從第15行開(kāi)始顯示文件
tail -n +15 /etc/passwd   # 擴(kuò)展的用法,不常用

grep*****:文本過(guò)濾工具

參數(shù) 含義
-v 顯示不包含匹配文本的所有行,反轉(zhuǎn)
-n 顯示匹配的行及行號(hào)
-i 不區(qū)分大小寫(xiě)(只適用于單字符),默認(rèn)是區(qū)分大小寫(xiě)的
-c 只統(tǒng)計(jì)匹配的行數(shù)
-E 使用擴(kuò)展的egrep命令
--color=auto 為grep過(guò)濾的匹配字符串添加顏色
-w 以單詞為單位進(jìn)行過(guò)濾
-o 只輸出匹配的內(nèi)容
# 顯示所有行的行號(hào),"."代表匹配任意單個(gè)字符,即匹配了所有的內(nèi)容
grep -n '.' /etc/passwd

tr*****:替換或刪除字符

參數(shù)選項(xiàng) 解釋說(shuō)明
-d 刪除字符
-s 保留連續(xù)字符的第一個(gè)字符,刪除其他字符
-c 使用第一個(gè)字符串的(set1)的補(bǔ)集,取反
tr 'abc' 'xyz' < test.txt  # tr命令比較特殊,需要輸入重定向符<
凡是在文本中出現(xiàn)的a全部替換為x,b替換為y,c替換為z
支持正則匹配,例:
tr '[a-z]' '[A-Z]' > test.txt  # 小寫(xiě)轉(zhuǎn)大寫(xiě)

Linux文件類型及查找命令

Linux文件屬性概述

[root@grape tmp]# ll -ih
total 420K
 67194889 -rw-r--r--. 1 root root   18 Jan  9 11:36 -
   887635 drwxr-xr-x. 2 root root   37 Dec 30 11:31 12-27
 33554508 drwxr-xr-x. 2 root root   37 Jan  5 18:18 12-27.ori
 67193827 -rw-r--r--. 1 root root    0 Jan  9 09:31 123

{9IL_$RIFMU%X544F2Q1M8M.png

文件屬性詳解

第一列:Inode索引節(jié)點(diǎn)編號(hào)(相當(dāng)于人的身份證,是唯一的);系統(tǒng)讀取文件時(shí)首先通過(guò)文件名找到Inode號(hào)碼,然后才能讀取到文件內(nèi)容

第二列和第三列:文件類型及權(quán)限.這一列共包含11個(gè)字符,其中第一個(gè)字符為文件類型,隨后的9個(gè)字符為文件的對(duì)應(yīng)權(quán)限,最后一個(gè)字符點(diǎn)號(hào)"."是與SELinux有關(guān)的一個(gè)標(biāo)識(shí)

第四列:硬鏈接個(gè)數(shù)(參考ln命令).相當(dāng)于超市的多個(gè)入口,可以從不同的文件入口進(jìn)入文件,還可以互為備份.

第五列:文件或目錄所屬的用戶(屬主).在Linux系統(tǒng)中.文件和程序的存在必須要有用戶和組滿足相應(yīng)的存在需求

第六列:文件或目錄所屬的組(屬組)

第七列:文件或目錄的大小

第八列:文件或目錄的修改時(shí)間,默認(rèn)為月、日脊僚、時(shí)相叁、分

第九列:實(shí)際的文件名或目錄名.需要注意的是,文件名不算文件的屬性

Liunx文件類型及文件擴(kuò)展名

windows常見(jiàn)文件擴(kuò)展名 代表的意義
.docx word文件
.pptx PPT演示文件
.pdf PDF文件,更易讀且不易修改的文檔文件
.jpg JPEG圖像文件
.avi 視頻文件
.mp4 在線視頻文件
.gif GIF圖像文件
.rar 壓縮包文件
linux常見(jiàn)文件擴(kuò)展名 代表的意義
.rpm RedHat系統(tǒng)二進(jìn)制軟件包文件
.tar.gz 壓縮包文件(".tgz"、".tar"辽幌、".gz"也是壓縮包文件)
.sh Shell腳本文件,通過(guò)Shell語(yǔ)言開(kāi)發(fā)的程序
.conf 表示系統(tǒng)服務(wù)的配置文件
文件類型符號(hào) 代表的意義
- regular file,表示普通文件,包含純文本增淹、二進(jìn)制文件、數(shù)據(jù)文件等
d directory,代表目錄
l link,代表符號(hào)連接或者軟連接文件,類似于windows快捷方式,它指向的是文件的實(shí)體
c character,代表字符設(shè)備文件,例如,串口設(shè)備乌企、早起上網(wǎng)撥號(hào)用的貓
b block,代表塊設(shè)備,例如,硬盤(pán)虑润、光驅(qū)
s socket,代表套接字文件,進(jìn)程之間進(jìn)行通信時(shí)會(huì)用到
p named pipe,表示管道文件

?

文件及目錄查找命令

file****:顯示文件的類型

參數(shù)選項(xiàng) 解釋說(shuō)明
-b 輸出信息使用精簡(jiǎn)格式,不輸出文件名
[root@grape tmp]# file /tmp/test1.ext /tmp /dev/vhci /dev/sda /dev/log /dev/rtc 
/tmp/test1.ext: ASCII text
/tmp:           sticky directory
/dev/vhci:      character special
/dev/sda:       block special
/dev/log:       socket
/dev/rtc:       symbolic link to `rtc0'

which*****:顯示命令的全路徑

which命令查找的范圍是PATH環(huán)境變量的路徑

參數(shù)選項(xiàng) 解釋說(shuō)明
-a 默認(rèn)在PATH路徑中由前往后查找命令,如果能夠查找到,就停止匹配.使用-a選項(xiàng)將遍歷所有的PATH路徑,并輸出所有匹配項(xiàng)

whereis****:顯示命令及其相關(guān)文件全路徑

whereis命令用于定位指定命令的可執(zhí)行文件、源碼文件及man幫助文件

參數(shù)選項(xiàng) 解釋說(shuō)明
-b 查找可執(zhí)行文件
-m 查找man幫助文件
-s 查找源碼文件

locale****:快速定位文件路徑

在Linux系統(tǒng)有一個(gè)名為mlocate.db的數(shù)據(jù)庫(kù)文件,這個(gè)文件包含系統(tǒng)文件的文件名及對(duì)應(yīng)的路徑信息.所以,locate命令查找文件時(shí)不用遍歷磁盤(pán),而是直接查找mlocate.db文件,這樣就可以快速給出結(jié)果.使用locate命令時(shí)先updatedb更新下mlocate.db數(shù)據(jù)庫(kù)文件.當(dāng)然,mlocate.db還會(huì)由系統(tǒng)自帶的定時(shí)任務(wù)執(zhí)行updatedb命令定期更新

參數(shù)選項(xiàng) 解釋說(shuō)明
-c 不顯示匹配的內(nèi)容,只顯示匹配的行數(shù)
-i 匹配時(shí)忽略大小寫(xiě)
-r 支持基本正則表達(dá)式匹配
--regex 支持?jǐn)U展正則表達(dá)式匹配
  • /var/lib/mlocate/mlocate.db 查找的數(shù)據(jù)庫(kù)文件

  • /etc/cron.daily/mlocate.cron 系統(tǒng)自帶的定時(shí)任務(wù)腳本

  • /etc/cron.daily/mlocate 系統(tǒng)自帶的定時(shí)任務(wù)腳本

updatedb***:更新mlocate數(shù)據(jù)庫(kù)

創(chuàng)建或更新locate命令使用的數(shù)據(jù)庫(kù).updatedb命令會(huì)被定時(shí)任務(wù)(每天)執(zhí)行.

參數(shù)選項(xiàng) 解釋說(shuō)明
-U 更新指定目錄相關(guān)的數(shù)據(jù)庫(kù)信息.默認(rèn)是掃描整個(gè)系統(tǒng),耗時(shí)較長(zhǎng),因此可以使用這個(gè)參數(shù)
-v 顯示命令的執(zhí)行過(guò)程

find*****:查找目錄下的文件

參數(shù)選項(xiàng) 解釋說(shuō)明
pathname 命令所查找的目錄路徑,用"."來(lái)表示當(dāng)前目錄,"/"表示系統(tǒng)根目錄
Options模塊
-depth 從指定目錄下最深層的子目錄開(kāi)始查找
-maxdepth levels 查找的最大目錄級(jí)數(shù),levels為自然數(shù)
-regextype type 改變正則表達(dá)式的模式.默認(rèn)為emacs,還有posix-awk加酵、posix-basic拳喻、posix-egrep哭当、posix-extended
Tests模塊
-mtime[-n|n|+n] 按照文件的修改時(shí)間來(lái)查找文件(這個(gè)參數(shù)最常用),具體說(shuō)明如下:1.-n表示文件更改時(shí)間距現(xiàn)在n天以內(nèi);2.+n表示文件更改時(shí)間距現(xiàn)在n天以前;3.n表示距現(xiàn)在第n天
-atime[-n|n|+n] 按照文件的訪問(wèn)時(shí)間來(lái)查找文件,單位是天
-ctime[-n|n|+n] 按照文件的狀態(tài)改變時(shí)間來(lái)查找文件,單位是天
-amin 按照文件的訪問(wèn)時(shí)間來(lái)查找文件,單位是分鐘
-cmin 按照文件的狀態(tài)改變時(shí)間來(lái)查找文件,單位是分鐘
-mmin 按照文件的修改時(shí)間來(lái)查找文件,單位是分鐘
-group 按照文件所屬的組來(lái)查找文件
-name 按照文件名查找文件,只支持""、"?"冗澈、"[]"等特殊通配符*
-newer 查找更改時(shí)間比指定文件新的文件
-nogroup 查找沒(méi)有有效用戶組的文件,即該文件所屬的組在/etc/groups中不存在
-nouser 查找沒(méi)有有效屬主的文件,即該文件的屬主在/etc/passwd中不存在
-path pattern 指定路徑樣式,配合-prune參數(shù)排除指定目錄
-perm 按照文件權(quán)限來(lái)查找文件
-regex 接正則表達(dá)式
-iregex 接正則表達(dá)式,不區(qū)分大小寫(xiě)
-size n[cwbkMG] 查找文件長(zhǎng)度為n塊的文件,帶有cwbkMG時(shí)表示文件長(zhǎng)度以字節(jié)計(jì)
-user 按照文件的屬主來(lái)查找文件
-type 查找某一類型的文件,具體說(shuō)明為:1.b(塊設(shè)備文件) 2.c(字符設(shè)備文件) 3.d(目錄) 4.f(普通文件) 5.p(管道文件) 6.l(符號(hào)鏈接文件) 7.s(socket文件) 8.D(door)
Actions模塊
-delete 將查找出的文件刪除
-exec 對(duì)匹配的文件執(zhí)行該參數(shù)所給出的shell命令
-ok 與-exec作用相同,但在執(zhí)行每個(gè)命令前,都會(huì)讓用戶來(lái)確定是否執(zhí)行
-prune 使用這一選項(xiàng)可以使find命令不在當(dāng)前指定的目錄中查找
-print 將匹配的文件輸出到標(biāo)準(zhǔn)輸出(默認(rèn)功能,使用中可省略)
OPERATORS
! 取反
-a 取交集,全拼為and
-o 取并集,全拼為or
# 1.查找指定時(shí)間內(nèi)修改的文件
find . -atime -2  # 查找當(dāng)前目錄兩天內(nèi)被訪問(wèn)的文件

# 2.利用"!"進(jìn)行反向查找
find . ! -type d

# 3.按照目錄或文件的權(quán)限查找文件
find . -perm 755  # 755是權(quán)限的數(shù)字表示方式

# 4.按大小查找文件
find . -size +1000c  # 查找當(dāng)前目錄下文件大小大于1000字節(jié)的文件

# 5.查找文件時(shí)希望忽略某個(gè)目錄
find /data -path "/data/dir1" -purne -o -print  # 參數(shù)-path用于指定路徑樣式,配合-purne參數(shù)用于排除指定目錄
# -path "/data/dir1" -purne -o -print 是 -path "/data/dir1" -a -purne -o -print的簡(jiǎn)寫(xiě),-a和-o類似于shell中的"&&"和"||",當(dāng)-path "/data/dir1"為真時(shí)執(zhí)行-prune,為假時(shí)執(zhí)行-print

# 6.忽略多個(gè)目錄
find /data \(-path /data/dir1 -o -path /data/dir2 \) -purne -o -print
# 使用圓括號(hào)可以將多個(gè)表達(dá)式結(jié)合在一起,但是圓括號(hào)在命令行中另有特殊含義,所以在此處使用"\"進(jìn)行轉(zhuǎn)義,即告訴bash不對(duì)后面的字符"()"作解析,而是留給find命令處理

# 7.使用nouser和user
chown nobody:nobody file1.txt
find . -user nobody  # 查找用戶為nobody的文件

chown 555 file1.txt  # 修改為數(shù)字555
find . -nouser  # 查找數(shù)字屬主就要使用-nouser參數(shù),查找沒(méi)有任何用戶的文件

# 8.使用group和nogroup
find . -group nobody  # 查找用戶組為nobody的文件

chown .555 file1.txt
find . -nogroup

# 9.查找某個(gè)文件新或舊的文件
find . -newer file1.txt ! -newer file2.txt  # 查找更改時(shí)間比f(wàn)ile1新但比f(wàn)ile2舊的文件

# 10.邏輯操作符
find . -maxdepth 1 -type d  # 查找一級(jí)目錄,類似于tree -L 1
find . -maxdepth 1 -type d ! -name "." -o -name "ext" # 查找除"."意外的所有目錄或文件名為ext的文件

# 11.find正則表達(dá)式的用法
語(yǔ)法 find -regextype "type" -regex "pattern"

# 12.ls -l命令放在dind命令的-exec選項(xiàng)中執(zhí)行
find . -type f -exec ls -l {} \;  # 匹配當(dāng)前目錄下的所有普通文件,并在-exec選項(xiàng)中使用ls -l列出
詳細(xì)說(shuō)明:
-exec后面跟的是command命令,最后以分號(hào)(;)作為結(jié)束標(biāo)志,考慮到各個(gè)系統(tǒng)中分號(hào)會(huì)有不同的意義,所以前面要加反斜杠對(duì)分號(hào)進(jìn)行轉(zhuǎn)義
{}的作用:指代前面find命令查找到的文件或目錄
{}前后都要有空格

# 13.在目錄中查找更改時(shí)間在n天以前的文件,并刪除它們
find . -type f -mtime +n -exec rm {} \;

# 14.-exec的安全模式-ok
在刪除或其他操作之前給出提示,這樣操作會(huì)比較安全

# 15.對(duì)查找到的文件內(nèi)容顯示屬性信息
find . -type f|xargs ls -l  # xargs是一個(gè)命令,是向其他命令傳遞參數(shù)的一個(gè)過(guò)濾器

# 16.使用xargs執(zhí)行mv命令
find . -type f -name "*.txt"|xargs -i mv {} /tmp  # -xargs的-i參數(shù),使得{}代表find查找到的文件,將這些文件以參數(shù)的形式放在mv命令后面,作為移動(dòng)的源文件,移動(dòng)到/tmp目錄下

# 17.find結(jié)合x(chóng)args的-p選項(xiàng)的示例
find dir2 -name "file*"|xargs -p rm -f  # 使用xargs的-p參數(shù)會(huì)提示讓你確認(rèn)是否執(zhí)行后面的命令

# 18.技巧性范例
find /root/data -name "test.txt"|xargs rm -f
find /root/data -name "test.txt" -exec rm -f {} \;

# 19.在oldboy目錄及其子目錄下的所有以擴(kuò)展名".sh"結(jié)尾的文件中,將包含"./hostlists.txt"的字符串替換為"../idctest_iplist"
sed -i "s#./hostlists.txt#../idctest_iplist/g" 文件名
-i:將替換結(jié)果寫(xiě)入到文件
s:s是替換模式
g:global全局替換

find /oldboy -name "*.sh" -exec sed -i "s#./hostlists.txt#../idctest_iplist/g" {} \;
find /oldboy -name "*.sh"|xargs sed -i "s#./hostlists.txt#../idctest_iplist/g"
高效處理方法,優(yōu)先處理反引號(hào)中的命令
"s#./hostlists.txt#../idctest_iplist/g" `find /oldboy -name "*.sh"`

# 20.將etc下所有的普通文件打包成壓縮
find /etc -type f -exec tar zcvf test.tar.gz {} \;
find /etc -type f|xargs tar zcvf test.tar.gz
tar zcvf test.tar.gz `find /etc -type f`

# 21.刪除一個(gè)目錄下的所有文件名單保留一個(gè)文件
touch test{1..10}.txt
find . -type f ! -name "test10.txt"|xargs rm -f (推薦方法)
find . -type f ! -name "test10.txt"|-exec rm -f {} \; (文件多時(shí)效率低)
使用rsync
mkdir /null  # 建立一個(gè)空目錄用于rsync刪除文件使用
[root @mango xx]# rsync -az --delete --exclude "test10.txt" /null /xx

# 22.保留最近7天的訪問(wèn)日志
find /app/logs -type f -mtime +7 -name "*.log"|xargs rm -f
find /app/logs -type f -mtime +7 -name "*.log" -exec rm -f {} \;
find /app/logs -type f -mtime +7 -name "*.log" -delete
CustomLog "|/usr/local/sbin/cronlog /app/logs /access_www_%w.log" combined

find命令結(jié)合x(chóng)args與-exec的區(qū)別

區(qū)別 -exec xargs
區(qū)別一 該參數(shù)是將查找的結(jié)果文件名逐個(gè)傳遞給后面的命令來(lái)執(zhí)行,如果文件多時(shí)則執(zhí)行的效率低 該命令是將查找的結(jié)果一次性傳給后面的命令執(zhí)行,命令執(zhí)行效率高,可以使用-n參數(shù)控制一次傳遞文件的個(gè)數(shù)
區(qū)別二 文件若有空格等特殊字符也照常處理 處理特殊文件名(例如,文件名有空格)需要采用特殊方式(find . -name "*edu*" -print0|xargs -0 ls -lh)

xargs****:將標(biāo)準(zhǔn)輸入轉(zhuǎn)換成命令行參數(shù)

參數(shù)選項(xiàng) 解釋說(shuō)明
-n 指定每行最大參數(shù)量n,可以將標(biāo)準(zhǔn)輸入的文本劃分為多行,每行n個(gè)參數(shù),默認(rèn)空格符分隔
-d 自定義分隔符
-i 以{}代替前面的結(jié)果
-I 指定一個(gè)符號(hào)替代前面的結(jié)果,而不用-i參數(shù)默認(rèn)的{}
-p 提示讓用戶確認(rèn)是否執(zhí)行后面的命令
-0(數(shù)字0) 用null代替空格作為分隔符,配合find命令的-print0選項(xiàng)的輸出使用
xargs < test.txt # 將所有數(shù)字變成一行,注意xargs不能直接接文件,需要結(jié)合重定向符"<"
xargs -n 3 < test.txt  # 每行最多輸出3個(gè)

echo splitXsplitXsplitXsplitXsplitXsplitX -d X -n 2
split split
split split
split split

假如有個(gè)hello world.txt文件
find . -type f -name "*.txt"|xargs rm  # 報(bào)錯(cuò),xargs會(huì)誤認(rèn)為hello world.txt是兩個(gè)文件
正確語(yǔ)法
find . -type f -name "*.txt" -print0|xargs -0 rm  # 以字符null分隔輸出

tar*****:打包壓縮命令

參數(shù)選項(xiàng) 解釋說(shuō)明
z 通過(guò)gzip壓縮或解壓
c 創(chuàng)建新的tar包
v 顯示詳細(xì)的tar命令執(zhí)行過(guò)程
f 指定壓縮文件的名字
t 不解壓查看tar包的內(nèi)容
p 保持文件的原有屬性
P(大寫(xiě)) 以絕對(duì)路徑打包,危險(xiǎn)參數(shù)
j 通過(guò)bzip2命令壓縮或解壓
x 解開(kāi)tar包
C 指定解壓的目錄路徑
--exclude=PATTERN 打包時(shí)排除不需要處理的文件或目錄
-X 文件名 從指定文件讀取不需要處理的文件或目錄列表
-N 日期 僅打包比指定日期新的文件,可用于增量打包備份
-h 打包軟連接文件指向的真實(shí)源地址
--hard-dereference 打包硬鏈接文件
打包軟連接文件示例
tar zcf local.tar.gz /etc/rc.local  # 不指定h參數(shù)打包之后的文件將是個(gè)軟連接文件么不是rc.local實(shí)體內(nèi)容,查看文件內(nèi)容為空

tar zcfh local.tar.gz /etc/rc.local  # 指定h參數(shù)打包,得到rc.local的實(shí)體內(nèi)容

date*****:顯示與設(shè)置系統(tǒng)時(shí)間

參數(shù)選項(xiàng) 解釋說(shuō)明
OPTION參數(shù)選項(xiàng)
-d 時(shí)間字符串 顯示指定字符串所描述的事件,而非當(dāng)前時(shí)間
-f 時(shí)間文件 從日期文件中按行讀入時(shí)間描述
-r 文件 顯示指定文件的最后修改時(shí)間
-s 日期時(shí)間 設(shè)置系統(tǒng)時(shí)間
-u 顯示或設(shè)置UTC時(shí)間
FORMAT日期格式
%% 輸出字符%
%a 星期名縮寫(xiě)Sun
%A 星期名全稱Sunday
%b 月名縮寫(xiě)Jan
%B 月名全稱January
%c 日期和時(shí)間(Sun 12 Jan 2020 06:50:03 PM CST)
%C 世紀(jì)
%d 每月的第幾天
%D 等于%m/%d/%y
%e 每月的第幾天
%F 完整的日期格式,等價(jià)于%Y-%m-%d
%g 年份的最后兩位數(shù)字
%G 年份
%h 月名縮寫(xiě),等于%b
%H 24小時(shí)制
%I 12小時(shí)制
%j 一年的第幾天
%k 24小時(shí)制,格式與%H不同
%l 12小時(shí)制
%m 月份
%M
%n 換行
%N 納秒(000000000-999999999)
%p "上午"或"下午",未知時(shí)輸出為空(AM/PM)
%P 與%p類似,但是輸出的是小寫(xiě)字母(am/pm)
%r 當(dāng)下時(shí)區(qū)的12小時(shí)制
%R 24小時(shí)制的時(shí)和分,等價(jià)于%H:%M
%s 自UTC時(shí)間1970-01-01 00:00:00 以來(lái)所經(jīng)過(guò)的秒數(shù)
%S
%t 輸出制表符Tab
%T 時(shí)間,等于%H:%M:%S
%u 星期
%U 一年中的第幾周,以周日為每星期的第一天
%w 一星期中的第幾日,0代表周一
%W 一年中的第幾周,以周一為每星期的第一天
%x 日期(如01/12/2020)
%X 時(shí)間(如07:07:06 PM)
%y 年份的最后兩位
%Y 年份
date +%F -d "-2day"  # 前天
date +%F -d "+2day"  # 后天
+表示未來(lái),-表示過(guò)去,day表示日,year表示年,month表示月

時(shí)間格式轉(zhuǎn)換
date -d "Sun 12 Jan 2020 06:50:03 PM CST" "+%Y-%m-%d %H:%M:%S"

date -d "Sun Jan 12 11:17:02 UTC 2020" "+%Y-%m-%d %H:%M:%Sdate -s "20200523 07:18:54"

date -s "20200523 07:18:54"

Linux文件核心屬性知識(shí)

用戶和用戶組

用戶

  • UID(User Identify):用戶ID,相當(dāng)于身份證,在系統(tǒng)中是唯一的
  • GID(Group Identify):組ID,相當(dāng)于家庭住址
UID整數(shù)范圍 角色 具備該UID的用戶特性
0 超級(jí)用戶(皇帝) 當(dāng)用戶的UID為0時(shí),表示這個(gè)賬號(hào)為超級(jí)管理員賬號(hào),如果要增加一個(gè)系統(tǒng)管理員,則只需將該賬號(hào)的UID改為0即可.不建議這么做,建議用sudo替代
1~999 虛擬用戶(傀儡) 這是保留給系統(tǒng)使用的UID,為了防止人為建立賬戶的UID和系統(tǒng)UID之間發(fā)生沖突
1000~60000 普通用戶(老百姓) 使用useradd建立賬戶時(shí),默認(rèn)UID從1000開(kāi)始
  • 生產(chǎn)環(huán)境中,一般禁止root賬號(hào)通過(guò)SSH遠(yuǎn)程連接服務(wù)器,也會(huì)更改默認(rèn)的SSH端口.
  • 在企業(yè)工作中,應(yīng)該盡量在普通用戶下操作任務(wù).
  • 普通用戶僅具備操作自己家目錄中的文件及目錄的權(quán)限,可以進(jìn)入或?yàn)g覽相關(guān)目錄(/etc钦勘、/var/log),但是無(wú)法創(chuàng)建、修改和刪除任何文件
  • 虛擬用戶是系統(tǒng)正常運(yùn)行必不可少,主要是為了方便系統(tǒng)管理,滿足相應(yīng)的系統(tǒng)進(jìn)程對(duì)文件屬主的要求.例如,系統(tǒng)默認(rèn)的bin亚亲、adm个盆、nobody、mail用戶等

用戶組

  • 具有相同特征的用戶(user)集合
  • 將用戶分組是Linux系統(tǒng)中對(duì)用戶進(jìn)行管理及控制訪問(wèn)權(quán)限的一種手段

用戶和用戶組的對(duì)應(yīng)關(guān)系

  • 一對(duì)一:一個(gè)用戶可以存在一個(gè)組中,也可以是組中的唯一成員(root)
  • 一對(duì)多:一個(gè)用戶可以存在于多個(gè)用戶組中
  • 多對(duì)一:多個(gè)用戶可以存在于一個(gè)組中,這些用戶具有與組相同的權(quán)限
  • 多對(duì)多:多個(gè)用戶可以存在于多個(gè)組中,并且?guī)讉€(gè)用戶可以歸屬于相同的組

創(chuàng)建用戶及用戶組

useradd maomao  # 添加用戶maomao,會(huì)默認(rèn)創(chuàng)建一個(gè)maomao用戶組,默認(rèn)屬于與用戶同名的組

[root@grape ~]# id maomao  查看maomao用戶朵栖、組及ID信息
uid=1001(maomao) gid=1001(maomao) groups=1001(maomao)

[root@grape ~]# su - maomao  切換到maomao用戶
[maomao@grape ~]$  # 提示符變?yōu)榱?

[maomao@grape ~]$ pwd  # 當(dāng)前所在位置是在用戶家目錄
/home/maomao
[maomao@grape ~]$ touch test.txt  # 創(chuàng)建文件
[maomao@grape ~]$ ll
total 0
-rw-rw-r--. 1 maomao maomao 0 May 23 07:57 test.txt  # 目錄/文件默認(rèn)屬于創(chuàng)建它的用戶和組

文件生成一定是由用戶創(chuàng)建,因此文件也必須要屬于一個(gè)用戶及組,默認(rèn)就是屬于創(chuàng)建它的用戶和組

文件權(quán)限說(shuō)明

rwxr-xr-x root root test.txt  # 每3個(gè)字符分為一組
  • 屬主權(quán)限位:rwx

  • 屬組權(quán)限位:r-x

  • 其他用戶權(quán)限位:r-x

  • r颊亮、w、x陨溅、"-"的含義

    • r(read):可讀權(quán)限,對(duì)應(yīng)數(shù)字4
    • w(write):可寫(xiě)權(quán)限:對(duì)應(yīng)數(shù)字2
    • x(Execute):可執(zhí)行權(quán)限:對(duì)應(yīng)數(shù)字1
    • "-"沒(méi)有任何權(quán)限:對(duì)應(yīng)數(shù)字0
  • 還會(huì)有一些特殊的權(quán)限位t终惑、T、s门扇、S雹有、X、x臼寄、+

索引節(jié)點(diǎn)

Linux磁盤(pán)存儲(chǔ)數(shù)據(jù)的描述

  1. 磁盤(pán)要存儲(chǔ)數(shù)據(jù),相當(dāng)于蓋房子住人
  2. 磁盤(pán)要分區(qū)才能存儲(chǔ)數(shù)據(jù)
  3. 格式化磁盤(pán),創(chuàng)建文件系統(tǒng)存儲(chǔ)數(shù)據(jù)
  4. 掛載到指定目錄(掛載點(diǎn))存放數(shù)據(jù)

索引節(jié)點(diǎn)詳細(xì)說(shuō)明

  • 索引節(jié)點(diǎn)(Index node,Index)在每個(gè)Linux存儲(chǔ)設(shè)備(磁盤(pán)或硬盤(pán))或存儲(chǔ)設(shè)備的分區(qū)(此時(shí)的存儲(chǔ)設(shè)備可以是硬盤(pán)霸奕、軟盤(pán)、U盤(pán)等等)中被格式化為ext系列文件系統(tǒng)之后,都會(huì)生成兩部分內(nèi)容:第一部分是Inode(默認(rèn)大小為128或256字節(jié)),第二部分是block(默認(rèn)大小為1~4KB).由于磁盤(pán)或分區(qū)一般比較大,因此,Inode和Block都會(huì)存在很多個(gè),并且都可以存放數(shù)據(jù)信息

  • Inode本質(zhì)上是一小塊具備唯一數(shù)字編號(hào)的存儲(chǔ)空間,主要用來(lái)存放文件(目錄)屬性(例如ls -l的結(jié)果)的數(shù)據(jù)信息,注意,Inode里面唯獨(dú)不包含文件名本身(文件名不算文件的屬性)

  • Block成為磁盤(pán)塊,是用來(lái)存放實(shí)際數(shù)據(jù)的實(shí)體單元(ext文件系統(tǒng)一般最大為4KB),即用來(lái)存放真正的數(shù)據(jù),例如,照片吉拳、視頻等普通文件,單個(gè)的大文件需要占用多個(gè)Block塊來(lái)存儲(chǔ),特別小的單個(gè)文件如果不能占滿整個(gè)Block塊,那么剩余的空間也無(wú)法再利用

  • Inode存儲(chǔ)的屬性信息(即ls -l的結(jié)果),包括但不限于文件大小,屬主(用戶)质帅、歸屬的用戶組、文件權(quán)限留攒、文件類型煤惩、"修改"時(shí)間等,還包含指向文件的實(shí)體指針等(Block的位置,即Inode節(jié)點(diǎn)與Block的對(duì)應(yīng)關(guān)系)

Inode與Block的關(guān)系

  • Inode除了要記錄文件屬性的信息之外,還會(huì)為每個(gè)文件進(jìn)行信息索引,所以就有了Inode數(shù)值.操作系統(tǒng)根據(jù)指令,即可以通過(guò)Inode的值最快速地找到相對(duì)應(yīng)的文件實(shí)體

Inode與Block的特點(diǎn)

  1. Inode特點(diǎn)
    • ext3/ext4文件系統(tǒng)(CentOS5.x/6.x默認(rèn)的文件系統(tǒng))下,一個(gè)非空文件有且只有一個(gè)Inode和至少一個(gè)Block
    • Inode節(jié)點(diǎn)相同的文件,互為硬鏈接文件,可以認(rèn)為是一個(gè)文件的不同入口
    • Inode在某一文件系統(tǒng)(分區(qū))內(nèi)是唯一的
  2. Block特點(diǎn)
    • 磁盤(pán)讀取數(shù)據(jù)是以Block為單位進(jìn)行讀取的
    • 每讀取一個(gè)Block就會(huì)消耗一次磁盤(pán)I/O
    • 若文件比較大,那么一個(gè)文件可能占用多個(gè)Block
    • 若文件比較小,那么一個(gè)Block的剩余空間會(huì)被浪費(fèi),無(wú)論內(nèi)容有多小

查看Inode和Block

[root@grape tmp]# df -i
Filesystem                Inodes IUsed    IFree IUse% Mounted on
/dev/mapper/centos-root 26214400 84355 26130045    1% /
devtmpfs                  229861   392   229469    1% /dev
tmpfs                     232903     1   232902    1% /dev/shm
tmpfs                     232903   743   232160    1% /run
tmpfs                     232903    16   232887    1% /sys/fs/cgroup
/dev/sda1                 524288   327   523961    1% /boot
/dev/mapper/centos-home 24637440  5143 24632297    1% /home
tmpfs                     232903     1   232902    1% /run/user/0

[root@grape tmp]# df -h  # Block是存放數(shù)據(jù)的位置,數(shù)據(jù)實(shí)體
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G  2.2G   48G   5% /
devtmpfs                 898M     0  898M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M   18M  893M   2% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M  15% /boot
/dev/mapper/centos-home   47G  303M   47G   1% /home
tmpfs                    182M     0  182M   0% /run/user/0

磁盤(pán)空間滿了故障總結(jié)

  1. Block耗盡的情況:500G的磁盤(pán)存放400G+200G的視頻
    • 使用df -h查看Block使用信息
  2. Inode耗盡的情況:產(chǎn)生了大量的小文件(小于1kb)
    • 使用df -i查看Inode使用信息

硬鏈接及軟鏈接數(shù)

鏈接的概念

  • 在Linux系統(tǒng)中,鏈接可分為兩種:一種為硬鏈接(Hard Link),另一種為軟鏈接(Soft Link)或符號(hào)鏈接(Symbolic Link)
  • 默認(rèn)不帶參數(shù)的情況下,ln命令創(chuàng)建的鏈接式硬鏈接
    • ln 原始文件 目標(biāo)文件
  • 如果是ln -s創(chuàng)建的鏈接,則為軟鏈接,軟鏈接文件的文件類型為l
    • ln -s 原始文件 目標(biāo)文件(目標(biāo)文件不能事先存在)

硬鏈接

  • 硬鏈接是指通過(guò)索引節(jié)點(diǎn)(Inode)進(jìn)行的鏈接.在CentOS6及以前的Linux(ext2、ext3炼邀、ext4)默認(rèn)文件系統(tǒng)中,存在于磁盤(pán)分區(qū)中的文件都會(huì)分配一個(gè)唯一的編號(hào),這個(gè)標(biāo)號(hào)就稱為索引節(jié)點(diǎn)編號(hào)(Index Inode),在Linux同一文件系統(tǒng)中該編號(hào)是唯一的
  • Linux系統(tǒng)中,多個(gè)文件名指向同一個(gè)索引節(jié)點(diǎn)(Inode號(hào)相同)是正常且被允許的.這種情況下的兩個(gè)文件就稱作互為硬鏈接文件,本質(zhì)上就是相同文件的兩個(gè)名字.在同一個(gè)分區(qū)/文件系統(tǒng)中,Inode號(hào)相同的文件一定是硬鏈接文件
  • 硬鏈接文件相當(dāng)于是原始文件的另一個(gè)訪問(wèn)入口.作用之一是允許一個(gè)文件擁有多個(gè)有效的文件名(多個(gè)訪問(wèn)入口,類似超市的多個(gè)入口),這樣用戶就可以建立硬鏈接到重要文件上,為避免"誤刪"源數(shù)據(jù)加一份保險(xiǎn)(快照功能)
  • 文件系統(tǒng)(ext)的原理是,只要文件的索引節(jié)點(diǎn)(Inode Index)還有一個(gè)以上的硬鏈接,那么,只刪除其中的一個(gè)硬鏈接(即僅僅刪除了該文件的鏈接指向)并不會(huì)影響索引節(jié)點(diǎn)本身和其他的鏈接(即數(shù)據(jù)文件實(shí)體并未刪除),只有在文件的最后一個(gè)硬鏈接被刪除后,此時(shí)如果有新數(shù)據(jù)要存儲(chǔ)到硬盤(pán)上,或者系統(tǒng)通過(guò)類似的fsck做磁盤(pán)檢查的時(shí)候,被刪除文件的數(shù)據(jù)塊及目錄的鏈接才會(huì)被釋放,空間被新數(shù)據(jù)占用并覆蓋.數(shù)據(jù)也就無(wú)法被找回
  • 也就是說(shuō),在Linux系統(tǒng)中,刪除靜態(tài)文件(沒(méi)有進(jìn)程調(diào)用的文件)的條件是與之相關(guān)的所有硬鏈接文件均被刪除.一個(gè)靜態(tài)文件被徹底刪除的條件就是該文件的硬鏈接數(shù)量為0

小結(jié):

  • 具有相同Inode節(jié)點(diǎn)號(hào)的多個(gè)文件互為硬鏈接文件,本質(zhì)上是相同文件的不同文件名
  • 刪除硬鏈接文件或者源文件任意之一,文件實(shí)體并未被刪除
  • 只有刪除了源文件及源文件對(duì)應(yīng)的所有硬鏈接文件,文件實(shí)體才會(huì)被刪除
  • 待所有的硬鏈接文件及源文件均被刪除后,再存放新的數(shù)據(jù)時(shí),新數(shù)據(jù)會(huì)占用這個(gè)文件的空間.磁盤(pán)進(jìn)行fsck檢查的時(shí)候,刪除的數(shù)據(jù)就會(huì)被系統(tǒng)回收
  • 硬鏈接文件就是文件的另一個(gè)入口
  • 可以通過(guò)對(duì)文件設(shè)置硬鏈接文件,來(lái)防止重要文件被誤刪
  • 通過(guò)執(zhí)行命令"ln 源文件 硬鏈接文件",即可完成硬鏈接的創(chuàng)建
  • 硬鏈接就是普通文件
  • 對(duì)于靜態(tài)文件(沒(méi)有進(jìn)程正在調(diào)用的文件)來(lái)講,當(dāng)對(duì)應(yīng)的硬鏈接數(shù)為0(i_link)時(shí),文件就被刪除.查看方式為ls -lhi
  • 創(chuàng)建硬鏈接只能針對(duì)文件,不能是目錄
image-20200113092153032.png

軟鏈接

  • 軟鏈接(Soft Link)也稱為符號(hào)鏈接(Symbolic Link,symlink).Linux中的軟鏈接類似于windows系統(tǒng)中的快捷方式.軟鏈接文件實(shí)際是一個(gè)特殊的文件,文件類型用字母l表示.可以將它理解為一個(gè)文本文件,這個(gè)文件中包含有軟鏈接,其指向的是另一源文件的位置信息內(nèi)容,因此,訪問(wèn)這個(gè)"快捷方式"就可以迅速定位到軟鏈接所指向的源文件實(shí)體
  • 軟鏈接創(chuàng)建的方式為:ln -s 源文件 軟鏈接文件
  • 要想創(chuàng)建軟鏈接,那么目標(biāo)文件是不能存在的
  • 軟鏈接文件通過(guò)自身的Inode(存放原始文件路徑信息,而不是讀取Block),讀到了軟鏈接信息,并指向了原始文件,進(jìn)而讀到原始文件名,以及原始文件的Inode,再通過(guò)原始文件的Inode讀到原始文件的內(nèi)容(Block),這就是訪問(wèn)軟鏈接文件來(lái)讀取數(shù)據(jù)的原理
  • 早期的軟鏈接是讀取自己的Block以獲取原始文件的路徑信息,但是這樣的訪問(wèn)方式效率很低,對(duì)于Linux系統(tǒng)來(lái)說(shuō),有一種更好的方法,成為fastsymlinks,原理就是軟鏈接的Block不存放源文件位置了,而是直接將源文件位置存放在Inode里面,即省事又快捷
image-20200113091715319.png
[root@grape tmp]# ll -i
硬鏈接 67919040 -rw-r--r--. 2 root root    16 Jan 13 08:51 music_hard.txt
軟鏈接 67160667 lrwxrwxrwx. 1 root root     9 Jan 13 08:50 music_soft.txt -> music.txt
原始文件 67919040 -rw-r--r--. 2 root root    16 Jan 13 08:51 music.txt
 
軟鏈接文件的Inode和文件類型都是不同的,軟鏈接文件是單獨(dú)的文件
 
[root@grape tmp]# readlink music_soft.txt 查看軟鏈接文件的指向
music.txt

[root@grape tmp]# rm f music.txt  刪除原始文件
[root@grape tmp]# cat music_soft.txt 
cat: music_soft.txt: No such file or directory  直接報(bào)錯(cuò)

軟鏈接會(huì)出現(xiàn)底閃爍故障
67160667 lrwxrwxrwx. 1 root root     9 Jan 13 08:50 music_soft.txt -> music.txt

小結(jié):

  • ln命令不能對(duì)目錄創(chuàng)建硬鏈接,但可以對(duì)目錄創(chuàng)建軟鏈接
  • 軟鏈接類似于Windows的快捷方式(通過(guò)readlink查看其指向)
  • 軟鏈接類似于一個(gè)文本文件,里面存放的是源文件的路徑,指向源文件的實(shí)體
  • 刪除源文件,軟鏈接文件依然存在,但是無(wú)法訪問(wèn)指向源文件路徑的內(nèi)容
  • 失效的時(shí)候一般是紅底白字閃爍
  • 執(zhí)行命令"ln -s 源文件 軟鏈接文件",即可完成軟鏈接的創(chuàng)建(目標(biāo)不能存在)
  • 軟鏈接和源文件是不同類型的文件,也是不同的文件,Inode號(hào)也不相同
  • 軟鏈接文件的文件類型為字母(l)
  • 軟鏈接不僅針對(duì)文件,還可以針對(duì)目錄

軟鏈接與硬鏈接的區(qū)別

  1. 答分類:Linux系統(tǒng)中,鏈接可分為兩種,一種稱為硬鏈接(Hard Link),另一種稱為符號(hào)鏈接(Symbolic Link)或軟鏈接(Soft link)
  2. 答概念:硬鏈接與源文件的Inode節(jié)點(diǎn)號(hào)相同,而軟鏈接文件則相當(dāng)于Windows下的快捷方式(Inode節(jié)點(diǎn)號(hào)與源文件不同)
  3. 答創(chuàng)建:默認(rèn)不帶參數(shù)的情況下,ln命令創(chuàng)建的是硬鏈接,帶-s參數(shù)創(chuàng)建的是軟鏈接
  4. 答特點(diǎn):
    • 不能對(duì)目錄創(chuàng)建硬鏈接,但可以創(chuàng)建軟鏈接
    • 軟鏈接可以跨文件系統(tǒng),硬鏈接不能跨文件系統(tǒng)
    • 刪除軟鏈接文件,對(duì)源文件以及硬鏈接文件無(wú)任何影響
    • 刪除文件的硬鏈接文件,對(duì)源文件及軟鏈接文件無(wú)任何影響
    • 刪除鏈接文件的源文件,對(duì)硬鏈接文件無(wú)影響,會(huì)導(dǎo)致其軟鏈接失效(紅底白字閃爍)
    • 同時(shí)刪除源文件及其硬鏈接文件,整個(gè)文件才會(huì)被"真正"刪除
  5. 答案例:硬鏈接用處不多,可以用來(lái)對(duì)重要文件做快照以防誤刪,對(duì)目錄建立軟鏈接在工作中很常用

Linux系統(tǒng)文件刪除原理

1.從ext文件系統(tǒng)的角度

  • Linux系統(tǒng)上的文件名是存儲(chǔ)在父目錄的Block里面的,并指向了這個(gè)文件的Inode節(jié)點(diǎn),這個(gè)文件的Inode節(jié)點(diǎn)再標(biāo)記指向存放這個(gè)文件的Block的數(shù)據(jù)塊.在刪除一個(gè)文件時(shí),實(shí)際上并不會(huì)清除Inode節(jié)點(diǎn)和Block的數(shù)據(jù).只是在這個(gè)文件的父目錄中的Block里,刪除這個(gè)文件的名字,從而使這個(gè)文件消失,并且無(wú)法指向這個(gè)文件的Inode節(jié)點(diǎn).當(dāng)沒(méi)有文件名指向這個(gè)Inode節(jié)點(diǎn)的時(shí)候,釋放Inode節(jié)點(diǎn)和存放這個(gè)文件數(shù)據(jù)的Block塊會(huì)同時(shí)進(jìn)行,并且會(huì)更新Inode MAP和Block MAP,以便讓這些位置用于存放其他文件數(shù)據(jù)

2.從文件引用的角度

  • Linux系統(tǒng)是通過(guò)Link的數(shù)量來(lái)控制文件是否被刪除,只有當(dāng)一個(gè)文件不存在任何Link的時(shí)候,這個(gè)文件才會(huì)被刪除.一般來(lái)說(shuō),每個(gè)文件都有2個(gè)計(jì)數(shù)器,即i_count和i_nlink
  • i_nlink就是文件硬鏈接的數(shù)量,i_nlink可以理解為磁盤(pán)的引用計(jì)數(shù)器;i_count就是當(dāng)前文件使用者(例如,被進(jìn)程調(diào)用)的數(shù)量,i_count可以理解為內(nèi)存的引用計(jì)數(shù)器.當(dāng)為文件創(chuàng)建硬鏈接的時(shí)候,對(duì)應(yīng)的i_nlink的數(shù)量就會(huì)增加,而當(dāng)一個(gè)文件被某一個(gè)進(jìn)程調(diào)用時(shí),對(duì)應(yīng)i_count的數(shù)量就會(huì)增加
  • 通過(guò)rm刪除命令刪除文件,實(shí)際就是減少文件的磁盤(pán)引用計(jì)數(shù)i_nlink的數(shù)量
  • 在用戶執(zhí)行rm操作刪除文件之后,再執(zhí)行l(wèi)s或者其他文件管理命令,將會(huì)無(wú)法再找到這個(gè)文件,但是調(diào)用這個(gè)被刪除文件的進(jìn)程卻在繼續(xù)正常執(zhí)行,依然能夠從文件中正確地讀取及寫(xiě)入內(nèi)容
  • 這是因?yàn)閞m操作只是將文件的i_nlink數(shù)減少了,如果沒(méi)有其他的鏈接,i_nlink就位0;但是由于該文件依然在被進(jìn)程調(diào)用,因此,此時(shí)文件對(duì)應(yīng)的i_count并不為0,所以即使執(zhí)行了rm操作,但系統(tǒng)沒(méi)有真正刪除這個(gè)文件,因此該文件還會(huì)占用磁盤(pán)空間,只有當(dāng)i_nlink及i_count都為0的時(shí)候,這個(gè)文件才會(huì)真正被刪除.也就是說(shuō),還需要解除該進(jìn)程對(duì)該文件的調(diào)用,被刪除的文件才會(huì)真正被刪除
  • 當(dāng)文件沒(méi)有被進(jìn)程調(diào)用時(shí)進(jìn)行刪除,也可以找回文件數(shù)據(jù).先是將文件名到Inode的鏈接刪除了,此時(shí),并沒(méi)有刪除文件的實(shí)體即Block數(shù)據(jù)塊,如果及時(shí)停止機(jī)器工作,數(shù)據(jù)還是可以找回的,但如果此時(shí)繼續(xù)寫(xiě)入數(shù)據(jù),那么新的數(shù)據(jù)可能就會(huì)被分配到被刪除數(shù)據(jù)的Block數(shù)據(jù)塊了,此時(shí),文件就是被真正地回收了
image-20200113112251317.png

chattr***:改變文件的擴(kuò)展屬性

參數(shù)選項(xiàng) 解釋說(shuō)明
-R 遞歸更改目錄屬性
-V 顯示命令的執(zhí)行過(guò)程
mode
+ 增加參數(shù)
- 移除參數(shù)
= 更新為指定參數(shù)
A 告訴系統(tǒng)不要修改這個(gè)文件的最后訪問(wèn)時(shí)間
a 只能向文件中添加數(shù)據(jù),而不能刪除,多用于服務(wù)器日志文件安全
i 設(shè)定文件不能被刪除魄揉、改名、寫(xiě)入或新增內(nèi)容
chattr +a 文件名
chattr +i 文件名

lsattr***:查看文件擴(kuò)展屬性

參數(shù)選項(xiàng) 解釋說(shuō)明
-R 遞歸查看目錄擴(kuò)展屬性
-a 顯示所有文件包括隱藏文件的擴(kuò)展屬性
-d 顯示目錄的擴(kuò)展屬性

Linux通配符與特殊符號(hào)知識(shí)

通配符符號(hào)集合

符號(hào) 作用
* 匹配任意(0個(gè)或多個(gè))字符或字符串,包括空字符串
? 匹配任意一個(gè)字符,有且只有一個(gè)字符
字符集合
[abcd] 匹配abcd中任何一個(gè)字符,abcd也可以是其他任意不連續(xù)字符
[a-z] 匹配a到z之間的任意一個(gè)字符,字符前后要連續(xù),也可以用連續(xù)數(shù)字,[1-9]
[!abcd] 表示不匹配括號(hào)里面的任何一個(gè)字符,也可書(shū)寫(xiě)為[!a-d],這里的"!"可以用"^"替代,即[^abcd]

路徑和位置相關(guān)特殊符號(hào)

符號(hào) 作用
~ 用戶的家目錄,超級(jí)用戶為/root,普通用戶為/home
- 代表上一次(相對(duì)于當(dāng)前路徑)用戶所在路徑
. 代表當(dāng)前目錄
.. 代表上一級(jí)目錄

不同引號(hào)特殊符號(hào)

名稱 解釋
單引號(hào)('') 所見(jiàn)即所得,即輸出單引號(hào)內(nèi)容時(shí)會(huì)將單引號(hào)內(nèi)的所有內(nèi)容都原樣輸出,或者描述為單引號(hào)里面看到的是什么就會(huì)輸出什么,稱為強(qiáng)引用
雙引號(hào)("") 輸出雙引號(hào)內(nèi)的所有內(nèi)容時(shí),如果內(nèi)容中有命令(要反引一下)拭宁、變量洛退、特殊轉(zhuǎn)義符等,會(huì)先將變量、命令杰标、轉(zhuǎn)義字符解析出結(jié)果,然后再輸出最終內(nèi)容,稱弱引用.推薦使用弱引用
無(wú)引號(hào) 賦值時(shí),如果變量?jī)?nèi)容包含了空格則會(huì)使得賦值不完整.而在輸出內(nèi)容時(shí),也會(huì)將含有空格的字符串視為一個(gè)整體輸出;如果內(nèi)容中有命令(要反引下)兵怯、變量等,則會(huì)將變量、命令解析出結(jié)果,然后輸出最終內(nèi)容;如果字符串中帶有空格等特殊字符,則有可能無(wú)法完整的輸出,因此需要加雙引號(hào).一般連續(xù)的字符串在旱、數(shù)字摇零、路徑等可以不加任何引號(hào)賦值和輸出,不過(guò)無(wú)引號(hào)的情況最好使用雙引號(hào)替代,特別是對(duì)變量賦值時(shí)
反引號(hào)(``) 一般用于引用命令,執(zhí)行的時(shí)候命令會(huì)被執(zhí)行,相當(dāng)于"$()",賦值和輸出都要將命令用反引號(hào)``引起來(lái)

其他特殊符號(hào)

名稱 解釋
; 表示一個(gè)命令的結(jié)束,也是命令間的分隔符
# 1)表示是注釋內(nèi)容,是用來(lái)給管理員看的,系統(tǒng)不會(huì)執(zhí)行以'#'號(hào)開(kāi)頭的內(nèi)容 2)root用戶的命令提示符
| 表示管道,將一個(gè)命令處理后的中間內(nèi)容輸出給下一個(gè)命令繼續(xù)處理
$ 1)字符串前加"$"符號(hào),代表字符串變量?jī)?nèi)容 2)代表普通用戶的命令提示符
\ 逃脫符,即將含有特殊含義的字符(通配符或正則表達(dá)式)還原成字符本意
{} 1)生成序列 2)引用變量作為變量與普通字符的分隔

Bash中的邏輯操作符

名稱 解釋
&& 前一個(gè)命令執(zhí)行成功,再執(zhí)行后一個(gè)命令
|| 前一個(gè)命令執(zhí)行失敗,再執(zhí)行后一個(gè)命令
! 1)在Bash中表示取反 2)在vi/vim中表示強(qiáng)制 3)"!ls"表示找出最近一次以ls開(kāi)頭的命令并執(zhí)行

基本正則表達(dá)式集合

字符 作用
^ 尖角號(hào),用法為"^mango",表示以匹配mango單詞開(kāi)頭的行
$ 美元符,用法為"mango$",表示以匹配mango單詞結(jié)尾的行
^$ 組合符,表示空行,邏輯解釋就是以"^"結(jié)尾的行,或者以"$"開(kāi)頭的行
. 點(diǎn)號(hào),表示匹配任意一個(gè)且只有一個(gè)字符(不能匹配空行)
\ 轉(zhuǎn)義字符,讓有特殊含義的字符脫掉馬甲,現(xiàn)出原形,如"\."只表示小數(shù)點(diǎn)
* 匹配前一個(gè)字符(連續(xù)出現(xiàn))0次或1次以上. 注意,當(dāng)重復(fù)0次的時(shí)候,表示什么也沒(méi)有(空),即匹配所有內(nèi)容
.* 組合符,匹配所有內(nèi)容
^.* 組合符,匹配以任意多個(gè)字符開(kāi)頭的內(nèi)容
.*$ 組合符,匹配任意多個(gè)字符結(jié)尾的內(nèi)容
[abc] 匹配"[]"集合內(nèi)的任意一個(gè)字符a或b或c;也可寫(xiě)成[a-c]
[^abc] 匹配不包含""后的任意字符a或b或c,這里的""表示對(duì)[abc]的取反,此處的"^"不能用"!"替代

擴(kuò)展正則表達(dá)式

字符 作用
+ 匹配前一個(gè)字符1次或多次
[:/] 匹配括號(hào)內(nèi)的":"或"/"字符1次或多次
? 匹配前一個(gè)字符0次或1次
| 表示或者,即同時(shí)過(guò)濾多個(gè)字符串
() 分組過(guò)濾,被括起來(lái)的內(nèi)容表示一個(gè)整體,另外"()"的內(nèi)容可以被后面的"\n"引用,n為數(shù)字,表示引用第幾個(gè)括號(hào)的內(nèi)容
\n 引用前面"()"小括號(hào)里的內(nèi)容,例如,(aa)\1,匹配aaaa
a{n,m} 匹配前一個(gè)字符最少n次,最多m次
a{n,} 匹配前一個(gè)字符最少n次
a{n} 匹配前一個(gè)字符正好n次
a{,m} 匹配前一個(gè)字符最多m次

預(yù)定義特殊中括號(hào)

正則表達(dá)式 描述 示例
[:alnum:] 匹配任意一個(gè)字母或數(shù)字字符,相當(dāng)于[a-zA-Z0-9] [[:alnum:]]
[:alpha:] 匹配任意一個(gè)大小寫(xiě)字母字符,相當(dāng)于[a-zA-Z] [[:alpha:]]
[:blank:] 空格與制表符(橫向和縱向) [[:blank:]]
[:digit:] 匹配任意一個(gè)數(shù)字字符,相當(dāng)于[0-9] [[:digit:]]
[:lower:] 匹配小寫(xiě)字母,相當(dāng)于[a-z] [[:lower:]]
[:upper:] 匹配大寫(xiě)字母,相當(dāng)于[A-Z] [[:upper:]]
[:punct:] 匹配標(biāo)點(diǎn)符號(hào) [[:punct:]]
[:space:] 匹配一個(gè)包括換行符、回車等在內(nèi)的所有空白符 [[:space:]]
[:graph:] 匹配任何一個(gè)可以看得見(jiàn)的且可以打印的字符 [[:graph:]]
[:xdigit:] 任何一個(gè)十六進(jìn)制數(shù)(即0-9,a-f,A-F) [[:xdigit:]]
[:cntrl:] 任何一個(gè)控制字符(ASCII字符集中的前32個(gè)字符) [[:cntrl:]]
[:print:] 任何一個(gè)可以打印的字符 [[:print:]]

元字符表達(dá)式

表達(dá)式 描述
\b 匹配單詞邊界,例如\bmango\b只匹配mango單詞不匹配mango*
\B 匹配非單詞邊界,例如,mango\B匹配mango123中的mango,不匹配單獨(dú)的oldboy單詞
\w 匹配字母、數(shù)字與下劃線,等價(jià)于[_[:alnum:]]
\W 匹配字母驻仅、數(shù)字與下劃線以外的字符,等價(jià)于[^_[:alnum:]]
\d 匹配單個(gè)數(shù)字字符,注意,這個(gè)表達(dá)式需要使用grep -P參數(shù)才能識(shí)別
\D 匹配單個(gè)非數(shù)字字符,注意,這個(gè)表達(dá)式需要使用grep -P參數(shù)才能識(shí)別
\s 匹配1位空白字符,注意,這個(gè)表達(dá)式需要使用grep -P參數(shù)才能識(shí)別
\S 匹配1位非空白字符,注意,這個(gè)表達(dá)式需要使用grep -P參數(shù)才能識(shí)別

sed*****:流編輯器

常用參數(shù)選項(xiàng)

options[選項(xiàng)] 解釋說(shuō)明
-n 取消默認(rèn)sed的輸出,常與sed內(nèi)置命令的p連用
-i 直接修改文件內(nèi)容,而不是輸出到終端.如果不使用"-i"選項(xiàng)則sed只是修改存儲(chǔ)在內(nèi)存中的數(shù)據(jù),并不會(huì)影響磁盤(pán)上的文件
-e 允許多次編輯

常用內(nèi)置命令字符

sed內(nèi)置符 解釋說(shuō)明
a 全拼append,表示追加文本,在指定行后添加一行或多行文本
d 全拼delete,表示刪除匹配行的文本
i 全拼insert,表示插入文本,在指定行前添加一行或多行文本
p 全拼print,表示打印匹配行的內(nèi)容,通常p會(huì)與選項(xiàng)"-n"一起使用
s/regexp/replacement/g 匹配regexp部分內(nèi)容,用replacement替換regexp匹配的內(nèi)容,regexp部分可以使用正則表達(dá)式,在replacement部分可以使用特殊字符"&"和"\1-\9"等匹配regexp的部分內(nèi)容.s/regexp/replacement/g結(jié)尾常與g匹配做全局替換
# 示例
1.輸出文件的第2-3行內(nèi)容
sed -n '2,3p' 文件名

2.過(guò)濾出含有mango的字符
sed -n '/mango/p' 文件名  # 需要用雙斜線將需要過(guò)濾的字符串包含在中間

3.刪除含有mango字符串的行
sed '/mango/d' 文件名  # 如果需要修改文件,則要用-i參數(shù)

4.刪除指定的行
sed '3d' 文件名
sed '5,8d' 文件名  # 刪除第5~8行

5.將mango字符串全部替換為apple
sed -i 's#mango#apple#g' 文件名  # s表示替換模式,g表示全局替換

6.將mango字符串全部替換為apple,同時(shí)將1替換為2
sed -e 's#mango#apple#g' -e 's#1#2#g' 文件名

7.在文件的第二行追加文本
sed -i '2a hello,world' 文件名

8.在文件的第二行插入文本
sed -i '2i hello,world' 文件名

9.在文件的第二行插入兩行文本
sed -i '2i hello,world\nhow are u' 文件名

10.1讀取ifconfig中的第二行ip地址
ifconfig |sed -n '2s#^.*inet##gp'|sed -n 's#netm.*$##gp'  # '##'表示替換為空,然后輸出剩下的字符

10.2
ifconfig -ne '2s#^.*inet##gp' -ne 's#netm.*$##gp'

10.3
ifconfig |sed -rn '2s#^.*inet (.*) netm.*$#\1#gp'  # \r表示支持?jǐn)U展的正則表達(dá)式

awk*****:Linux最強(qiáng)大的文本處理工具

awk常用功能

序號(hào) awk命令常用參數(shù) 簡(jiǎn)要例子說(shuō)明
1 指定分隔符顯示某幾列 awk -F "GET|HTTP" '{print $2}' access.log直接獲取顯示出日志文件的url這一列
2 通過(guò)正則表達(dá)式取出想要獲取的內(nèi)容 awk '6~/Failed/{print11}' /var/log/secure分析生產(chǎn)環(huán)境中的日志找出誰(shuí)在破解用戶密碼
3 顯示某個(gè)范圍內(nèi)的內(nèi)容 awk 'NR==20,NR==30' filename顯示文件的20到30行
4 通過(guò)awk進(jìn)行統(tǒng)計(jì)計(jì)算 awk '{sum+=$0}END{print sum}' ett.txt進(jìn)行總計(jì)算(高級(jí)功能)
5 awk數(shù)組計(jì)算與去重 awk '{array[$1]++}END{for (key in array) print key,array[key]}' access.log 對(duì)日志進(jìn)行統(tǒng)計(jì)與計(jì)數(shù)(高級(jí)功能)

awk命令的參數(shù)

參數(shù)選項(xiàng) 解釋說(shuō)明
-F 指定字符分隔符
-v 定義或修改一個(gè)awk內(nèi)部的變量

awk常見(jiàn)變量及屬性

變量名 屬性
$0 當(dāng)前整行記錄
$n 當(dāng)前記錄的第n個(gè)列,字段間由FS或-F參數(shù)指定分隔符
NF 當(dāng)前記錄中列的個(gè)數(shù),也就是包含多少列
$(NF-n) 倒數(shù)第n+1列,n為數(shù)字
NR 已經(jīng)讀出的記錄數(shù),也就是行號(hào),從1開(kāi)始
1.1 取test.txt文件的第2行和第3行的內(nèi)容
awk "NR==2,NR==3" test.txt

1.2 
awk "NR>1&&NR<4" test.txt

2. 過(guò)濾出含有root字符串的行
awk '/root/' test.txt

3.刪除含有root字符串的行
awk '/^[^root]/' test.txt

4.取文件的第一列谅畅、第三列和最后一列的內(nèi)容,并打印行號(hào)
awk -F ":" '{print NR,$1,$3,$NF}' test.txt

5.取出linux中執(zhí)行ifconfig的對(duì)應(yīng)ip地址
ifconfig|awk 'NR==2{print $2}'  # CentOS7
ifconfig|awk -F "[: ]+" 'NR==2{print $4}'  # CentOS6
ifconfig|awk -F "(addr:)|  (Bcast:)" 'NR==2{print$2}' # CentOS6 以括號(hào)中的內(nèi)容做分隔,|表示匹配左邊或右邊.即將左邊"addr:"或右邊"  Bcast"做分隔符

6.過(guò)濾文件中第一列的內(nèi)容所匹配的root字符串,將符合條件的最后一列輸出
awk -F ":" '/root/ {print $NF}' test.txt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市噪服,隨后出現(xiàn)的幾起案子毡泻,更是在濱河造成了極大的恐慌,老刑警劉巖粘优,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇味,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡雹顺,警方通過(guò)查閱死者的電腦和手機(jī)丹墨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嬉愧,“玉大人贩挣,你說(shuō)我怎么就攤上這事∶缓ǎ” “怎么了王财?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)裕便。 經(jīng)常有香客問(wèn)我绒净,道長(zhǎng),這世上最難降的妖魔是什么偿衰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任挂疆,我火速辦了婚禮,結(jié)果婚禮上哎垦,老公的妹妹穿的比我還像新娘囱嫩。我一直安慰自己,他們只是感情好漏设,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著今妄,像睡著了一般郑口。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盾鳞,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天犬性,我揣著相機(jī)與錄音,去河邊找鬼腾仅。 笑死乒裆,一個(gè)胖子當(dāng)著我的面吹牛吕座,可吹牛的內(nèi)容都是我干的站欺。 我是一名探鬼主播曲梗,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼苟穆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了稿黄?” 一聲冷哼從身側(cè)響起喊衫,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杆怕,沒(méi)想到半個(gè)月后族购,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陵珍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年寝杖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片互纯。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朝墩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伟姐,到底是詐尸還是另有隱情收苏,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布愤兵,位于F島的核電站鹿霸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秆乳。R本人自食惡果不足惜懦鼠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屹堰。 院中可真熱鬧肛冶,春花似錦、人聲如沸扯键。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荣刑。三九已至馅笙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厉亏,已是汗流浹背董习。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爱只,地道東北人皿淋。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親窝趣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疯暑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容