命令指南
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覆蓋文件不提示的是否覆蓋的幾種方法
- which cp --> usr/bin/cp file1.txt file2.txt 使用cp命令的絕對(duì)路徑屏蔽別名
- \cp file1.txt file2.txt 使用
'\'
屏蔽別名
- alias取消別名 unalias cp 系統(tǒng)重啟失效
- 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分為三種模式:普通模式补君、編輯模式引几、命令模式,作用分別如下:
- 普通模式:用vim命令打開(kāi)文件后,默認(rèn)的狀態(tài)就是普通模式.在這個(gè)模式中,不能進(jìn)行編輯輸入操作,但可以按"上下左右"鍵來(lái)移動(dòng)光標(biāo),同時(shí)還可以執(zhí)行一些操作命令進(jìn)行如刪除、賦值挽铁、粘貼等工作.
- 編輯模式:在普通模式下不能進(jìn)行編輯輸入模式,只有按下"i,I,o,O,a,A,r,R,s,S"(其中"i"最常用)等字幕進(jìn)入編輯模式后才可以執(zhí)行錄入文字等編輯操作.確定文件是否處于編輯模式狀態(tài)有一個(gè)重要特征,那就是在窗口的左下角要有插入的標(biāo)記 "-- INSERT --"或"-- 插入 --"
- 命令模式:在普通模式下,輸入":"或"/"或"?"時(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è)字符分為一組
索引節(jié)點(diǎn)
Linux磁盤(pán)存儲(chǔ)數(shù)據(jù)的描述
- 磁盤(pán)要存儲(chǔ)數(shù)據(jù),相當(dāng)于蓋房子住人
- 磁盤(pán)要分區(qū)才能存儲(chǔ)數(shù)據(jù)
- 格式化磁盤(pán),創(chuàng)建文件系統(tǒng)存儲(chǔ)數(shù)據(jù)
- 掛載到指定目錄(掛載點(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)
- 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)是唯一的
- 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é)
- Block耗盡的情況:500G的磁盤(pán)存放400G+200G的視頻
- Inode耗盡的情況:產(chǎn)生了大量的小文件(小于1kb)
硬鏈接及軟鏈接數(shù)
鏈接的概念
- 在Linux系統(tǒng)中,鏈接可分為兩種:一種為硬鏈接(Hard Link),另一種為軟鏈接(Soft Link)或符號(hào)鏈接(Symbolic Link)
- 默認(rèn)不帶參數(shù)的情況下,ln命令創(chuàng)建的鏈接式硬鏈接
- 如果是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ū)別
- 答分類:Linux系統(tǒng)中,鏈接可分為兩種,一種稱為硬鏈接(Hard Link),另一種稱為符號(hào)鏈接(Symbolic Link)或軟鏈接(Soft link)
- 答概念:硬鏈接與源文件的Inode節(jié)點(diǎn)號(hào)相同,而軟鏈接文件則相當(dāng)于Windows下的快捷方式(Inode節(jié)點(diǎn)號(hào)與源文件不同)
- 答創(chuàng)建:默認(rèn)不帶參數(shù)的情況下,ln命令創(chuàng)建的是硬鏈接,帶-s參數(shù)創(chuàng)建的是軟鏈接
- 答特點(diǎn):
- 不能對(duì)目錄創(chuàng)建硬鏈接,但可以創(chuàng)建軟鏈接
- 軟鏈接可以跨文件系統(tǒng),硬鏈接不能跨文件系統(tǒng)
- 刪除軟鏈接文件,對(duì)源文件以及硬鏈接文件無(wú)任何影響
- 刪除文件的硬鏈接文件,對(duì)源文件及軟鏈接文件無(wú)任何影響
- 刪除鏈接文件的源文件,對(duì)硬鏈接文件無(wú)影響,會(huì)導(dǎo)致其軟鏈接失效(紅底白字閃爍)
- 同時(shí)刪除源文件及其硬鏈接文件,整個(gè)文件才會(huì)被"真正"刪除
- 答案例:硬鏈接用處不多,可以用來(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 '11}' /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