彻底掌握Linux文件与目录管理命令?进来看看硬核总结
1.目錄與路徑
???? ?? 從根目錄開始顯示當前目錄pwd
???? ?? 創建目錄mkdir
???? ?? 刪除目錄rmdir
???? ?? 關于執行文件路徑的變量:$PARH
2.文件與目錄管理
???? ?? 復制文件 cp
???? ?? 移動目錄mv
???? ?? 刪除文件和目錄rm
???? ?? 獲取路徑的文件名和路徑名
3.文件的查看
???? ?? cat,tac,nl查看文件
???? ?? more和less查看文件
???? ?? head和tail查看文件
???? ?? od查看文件
4.文件的其他操作
???? ?? touch修改文件時間和創建文件
???? ?? 文件的默認權限
???? ?? 文件的隱藏屬性
???? ?? 文件的特殊權限SUID,SGID,SBIT
???? ?? 觀察文件類型
5.命令與文件的查找
???? ?? 腳本文件的查找which
???? ?? 文件的查找whereis
???? ?? 文件的查找locate/updatedb
???? ?? 文件的查找find
6.文件的軟硬鏈接
1.目錄的相關操作
1.1從根目錄開始顯示當前目錄
命令:
pwd
1.2創建目錄
1.mkdir [目錄名]:創建一個目錄名
2.mkdir -p [目錄名/子目錄/孫子目錄]:遞歸創建目錄
3.mkdir -m [數字1數字2數字3] [目錄名] :在創建目錄的同時設置權限
4.mkdir {目錄1,目錄2}:這里的大括號也要帶上,表示在當前目錄下同時建立幾個目錄
例子 :我們創建一個文件擁有者的,所屬組,和其他人都能讀寫執行的a.txt文件
我們在a.txt下創建aa,bb,cc三個目錄
1.3刪除目錄
1.rmdir [目錄名]:刪除指定的目錄
2.rmdir [-p] [目錄名/子目錄/孫子目錄]:遞歸刪除目錄
注意:
rmdir刪除的只能是空的目錄
比如我們刪除多層目錄rmdir -p aa/bb/cc,如果aa目錄不僅有bb目錄還有一個文件,bb目錄里只有cc這一個目錄,cc是一個空目錄,那么只有bb和cc目錄,aa不會被刪除
1.4關于執行文件路徑的變量:$PARH
在linux中我們使用命令都要指定路徑,比如我們使用ls,指明路徑其實就是 /bin/ls
那么我們為啥用的時候直接輸入ls就行了呢,那是因為我們在沒指定命令所在路徑的時候,系統會在指定的默認路徑去找,找到了就執行,找不到就報錯
那么默認路徑是啥呢,可以用下面的指令查看:
echo $PATH
我們的echo是打印的意思,$代表后邊的是變量,PATH才是系統的默認的路徑變量,PATH不是只有一個路徑,是指多個路徑的和,路徑之間用:隔開
2.文件與目錄的管理
2.1復制文件
cp [需要復制的文件] [復制后文件的去向]
舉個例子: cp aa/bb cc/dd
這個指令分為兩種情況:
1.第一種情況是dd是一個目錄,那么這個命令的意思是把bb文件拷貝到目錄dd中
2.如果dd不存在那么我們把bb復制到cc目錄下并改名為dd,要是dd是一個已存在的文件,那么就把bb復制到cc目錄下改名并覆蓋原來的dd文件
注意這個命令我們只能拷貝文件,并不能拷貝目錄,Linux目錄也是文件
如果我們想拷貝一個目錄的話使用如下指令
cp -rf [需要復制的文件] [復制后文件的去向]
這里就牽扯到cp的參數選項
| -p | 連同文件的屬性(包括權限,創建時間等)一起拷貝過來 |
| -r | 遞歸拷貝(用于目錄) |
| -f | 表示強制性 |
| -i | 若目標文件已經存在那么系統會通過詢問來確定是否覆蓋 |
| -d | 若源文件為鏈接屬性那么拷貝的是鏈接文件,不是鏈接指定的文件(如果直接拷貝鏈接屬性的文件那么拷貝的是鏈接指定文件) |
| -a | 把所有的參數選項都加進去 |
2.2移動文件
mv [參數] 文件名1 文件名2
如果文件1是文本文件,文件2是一個目錄,且文件2下是有一個文本文件和文件1重名,那么移動的時候是覆蓋,如果文件2下的目錄名和要移動的文本文件名一樣那么會報錯,因為文本文件不能覆蓋目錄
參數
| -f | 強制執行,如果文件2已經存在那么不經過提示直接覆蓋 |
| -i | 若文件2已經存在那么系統會提示是否覆蓋 |
| -u | 若文件2已經存在且文件1比較新才會更新 |
mv還可以只用于重命名
mv [需要改名的文件] [新名字]
2.3刪除文件或者目錄
rm [-fir] 文件
| -f | 強制執行,忽略不存在的文件,不出現警告信息 |
| -i | 人機交互,詢問使用者是否進行該操作 |
| -r | 遞歸刪除 |
rm不能直接刪除目錄,我們可以使用-r刪除
我們將一個通配符*
rm a*:意思是把只有是以a開頭的文件全部刪除
2.4獲取路徑的文件名和路徑名
basename 一個路徑:獲得最后的文件名
dirname 一個路徑:獲得目錄
比如:
1.basename /etc/aa/bb:得到得是bb
2.dirname /etc/aa/bb:得到得是/etc/aa
3.查看文件
3.1cat,tac,nl查看文件
cat [文件名]
cat在如果文本內容很多的話,那么只會在終端顯示最后一部分終端最多所能顯示的內容,所以cat只能查看文本內容較少的文件
cat -n [文件名]:會在顯示文件內容的時候把每一行加上編號
tac和cat的查看順序相反tac是從尾到頭查看文件,其他的都一樣
1.tac [文件名]
2.tac -n [文件名]
nl就更簡單下面的命令和作用和cat -n [文件名] 一樣
nl [文件名]
3.2more和less查看文件
more [文件]:一頁一頁或一行一行的往后看
more搭配的按鍵
| 空格 | 代表翻頁 |
| 回車 | 代表下一行 |
| /+字符串 | 查找字符串 |
缺點:more是從前往后翻,不能從后往前翻
但是less就完美的解決了這個問題
less [文件]:回車和空格效果和more一樣,
less搭配的按鍵
| 空格 | 代表翻頁 |
| 回車 | 代表下一行 |
| /+字符串 | 查找字符串 |
| pageup | 向上翻頁 |
| pagedown | 向下翻頁 |
3.3head和tail查看文件
head [文件]:默認查看前十行
tail [文件]:默認查看尾十行
還可以
1.head -n 數字 [文件]
2.head -數字 [文件]
1.tail -n 數字 [文件]
2.tail -數字 [文件]
兩種都可以查看數字指定的行數,只不過head是從頭查看指定行數,tail是從尾部向頭查看指定行數
3.4od查看文件
od [-t TYPE] [文件] :查看二進制文件
TYPE的類型
| a | 默認的字符來輸出 |
| c | 使用ASCII字符來輸出 |
| d | 使用十進制輸出數據 |
| f | 利用浮點數值來輸出數值 |
| o | 利用八進制輸出數據 |
| x | 利用十六進制輸出數據 |
比如我們查看bin命令
4.文件的其他操作
4.1touch修改文件時間和創建文件
1.touch [文件名]:如果文件名所代表的文件不存在,那就創建出一個新的文件,如果存在那么修改文件的創建時間或者訪問時間為現在
2.touch -c [文件名]:參數c代表僅修改文件時間,如果文件不存在那么不創建新的文件
3.touch -t [YYYYMMDDhhm] [文件名]:-t代表直接按照格式修改文件的創建或者訪問時間
4.2文件的默認權限umask
我們創建一個新的文件的時候,它的權限是怎樣的呢?那么這個時候就與我們的默認權限有關,我們可以用umask來查看
1.umask:以數字的形式,默認的權限只與后三個數字有關
2.umask -S:以字母的形式詳細顯示所有人的默認權限
舉例:
但是我們創建文本文件和目錄的默認權限是不同的,用戶創建文本文件默認是文件創建者沒有可執行權限,即最多只能是rw-rw-rw-然而目錄默認的最大權限卻是rwxrwxrwx
再看umask命令后三個數字002,這個意思是在最大權限的基礎上文件擁有者權限減去0,那么還是rw,文件所屬組在最大權限的基礎上也減去0,還是,其他人對應得數字是2,那么就是在默認的最大權限的基礎上減去2那么就只有r了,我們舉個例子(ll=ls -l)
我們可以看到新創建的文本文件權限是rw-rw-r- - 當然我們創建目錄的默認權限將會是rwxrwxr-x
我們注意我們每一個人的umask不一定都一致,這個只是博主自己的默認權限
當然我們還可以設置默認權限
umask 數字1數字2數字3
舉例:
4.3文件的隱藏屬性
你可能會覺得臥槽還有隱藏屬性,然后你就想找設計者單挑
當然了,你還是要學的
chattr [+-=] [Aacdistu] 文件或目錄
參數與選項:
| + | 增加某一個特殊參數,其他原本存在參數則不動 |
| - | 移除某一個特殊參數,其他原本存在參數則不動 |
| = | 設定一個參數,且僅有后面接的參數 |
| A | 當設定了A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間atime 將不會被修改,可避免I/O 較慢的機器過度的存取磁盤。(目前建議使用檔案系統掛載參數處理這個項目) |
| a | 當設定a 之后,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root 才能設定這屬性 |
| c | 這個屬性設定之后,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮后再儲存(看來對于大檔案似乎蠻有用的!) |
| d | 當dump 程序被執行的時候,設定d 屬性將可使該檔案(或目錄)不會被dump 備份 |
| i | 這個i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連結也無法寫入或新增資料!』 對于系統安全性有相當大的助益!只有root 能設定此屬性 |
| s | 當檔案設定了s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬盤空間,所以如果誤刪了,完全無法救回來了喔! |
| u | 與s 相反的,當使用u 來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁盤中,可以使用來恢復該檔案喔! |
我們舉個例子:
我們可以看到
使用這個命令我們需要切換成root用戶,然后由于加了i隱藏權限所以即使輸入y也不會把他刪除
當然我們可以顯示文件隱藏屬性
lsattr [-adR] 文件或目錄
| -a | 隱藏文件的屬性也顯示出來(這個時候就不用加文件或者目錄名了) |
| -d | 如果接的是目錄,僅列出目錄本身的屬性而非目錄內的文件名 |
| -R | 連同子目錄一并列出來 |
我們拿上邊的aa舉例子
4.4文件的特殊權限SUID,SGID,SBIT
我們查看兩個文件的權限:
我們發現passwd里的文件擁有者里有一個s權限,我們把在文件擁有者里有s權限稱為SUID權限,那么它的功****能和限制如下
- 1.SUID 權限僅對二進制程序(binary program)有效;
- 2.執行者對于該程序具有x 的可執行權限;
- 3.本權限僅在執行該程序的過程中有效(run-time);
- 4.執行者將具有該程序擁有者(owner) 的權限。
其實有點不好懂,沒關系我們舉個例子:
我們查看兩個文件的權限一個是shadow另一個是passwd
shadow的文件擁有者是root,root作為萬能的神即使我們查看的shadow權限里文件擁有者沒有任何權限,但是root還是能對它進行讀寫執行的操作的,shadow里邊存的是我們的賬戶和密碼,那么我們能否以普通用戶的身份去更改shadow里邊的內容呢,我們知道passwd是是我們修改密碼的指令,那么普通用戶能否用passwd來更改我們的密碼呢,這里博主經過嘗試發現是可以的.臥槽這是nm什么操作
我們發現passwd里邊的擁有者是root,而且在文件擁有者的權限里有s,那么根據SUID的第四點功能來看,我們的普通用戶是執行者,這個時候有文件擁有者(root)的權限了,而且我們的普通用戶對passwd有可執行權限(SUID的第二點限制),那么也就是說此時的普通用戶在passwd的加持下在修該密碼的層面變成了萬能的神(root),所以就可以對里邊的內容進行更改。對比來看,我們普通用戶不能使用cat查看shadow,因為cat的文件擁有者不具有s這一權限,所以在cat的加持下,普通用戶依舊是一條咸魚
我們把在文件擁有組里有s權限稱為SGID權限,還有一點和SUID不同,那就是SUID只是對二進制程序有效而SGID對文件目錄都有用,對文件有用時SGID的功能是:
- 1.SGID對二進制有用
- 2.程序執行者對于該程序來說具備x權限
- 3.執行者在執行的過程中該程序用戶組的支持
同樣的我們舉一個例子:
分析一下,我們看得出來我們的普通用戶對locate是有執行權限的,此時locate的用戶所有組是有s權限的,那么我們的普通用戶就會取得loacte所有組(slocate)的支持,我們普通用戶(就是所謂的執行者)現在的權限相當于slocate,那么對于slocate來說是對mlocate.db是有可讀權限的,所以就能夠順利的讀出來
作用在目錄的時候功能為:
看下面一張圖:
我們可以看到aa的所屬組為root,博主在沒給aa的組賦予s權限的時候在aa下創建一個目錄bb,我們可以發現bb所屬的組為默認的當前用戶所屬的組也就是master,當博主給group賦予s權限后再建立權限的時候,再在aa下創建一個目錄cc發現所屬的組為root。其實當我們給一個目錄賦予s權限的時候,創建的子目錄或者文件所屬的組默認和這個目錄一樣,類似于繼承
上圖有特殊的t權限,被稱為SBIT,值得注意的是這個權限只針對目錄有效,而且只能是其他人上邊的權限
它的作用是,當一個目錄擁有該權限的時候,里邊的文件除了文件擁有者和root其他的都不能刪除,即使別人有權限刪除也不行
最后我們這里將講一下如何設置上面三種特殊的權限,我們只需要在我們正常設置權限的三個數字之前再加上對應的數字即可
| SUID | 4 |
| SGID | 2 |
| SBIT | 1 |
舉個例子;
當然上圖我們也可以:
chmod u+s aa
4.5觀察文件類型
file [文件名]
5.命令與文件的查找
5.1腳本文件的查找
whitch [-a] [查找執行文件]:加上-a時就是將PATH目錄下的所有可以找到的同名執行文件都列出來,否則只是顯示找到的第一個
我們注意which是默認在PATH路徑下尋找,比如history不在PATH中,所以which history查找不到,一定注意只能用來查找在PATH路徑下的指令
比如:
可以看到alias ls后邊跟的是ls的別名,也就是說我們平時執行的ls,系統就默認給我們執行它的別名
5.2文件的查找whereis
whereis [-bm] 文件或者目錄名
參數:
| -b | 只查找二進制文件 |
| -m | 只查找幫助文檔 |
我們不加參數的時候直接查找的是二進制文件和幫助文檔,whereis是在幾個特定的目錄下進行查找,可以用whereis -l來查看where會在那些目錄下查找
5.3文件的查找locate/updatedb
1.locate 文件:直接查找
2.locate -i 文件:忽略大小寫查找
locate是在已經創建的數據庫中查找,所以不用在硬盤里讀取數據,和上面兩個命令不同的是,它可以查找我們的普通文件
但是如果你要查找剛剛創建的文件的時候,有可能查找不到,這是因為我們剛剛創建的文件還沒更新到數據庫庫里邊,centos7默認是每天自動更新一次,所以要想手動更新數據庫需要輸入指令:
updatedb:必須在root權限下更新
5.4文件的查找find
find [目錄] [屬性] [值]
對指令各部分的解釋:
1.目錄:這里的目錄如果是我們指定的,那么就在我們指定的目錄下查找,否則就默認在當前目錄下查找
2.屬性:就是我們根據根據什么來查找,文件名或者文件大小或者文件的擁有者等等
3.屬性值:當我們屬性為文件大小時,屬性值可以是10M等,其他屬性以此類推
我們按文件名進行查找
find [查找的目錄] -name [查找的文件]
find [查找的目錄] -iname [查找的文件]:加上了-i意思是忽略大小寫
按文件擁有者或擁有組進行查找:
find [查找的目錄] -user [用戶名]
find [查找的目錄] -group [組名]
舉個特殊的例子,我們在當前目錄下查找文件擁有者為master,文件所屬組為root的文件:
find -user master -group root
我們如果查找文件擁有者為master或者為root的文件:
find -user master -or -user root
我們還可以根據文件大小查找:
find [查找的目錄] -size [+-][數字和單位]
例如:
find [查找的目錄] -size +10k( k小寫,兆是大寫M):查找大于10k的文件
find [查找的目錄 ] -size +10M -size -100M:查找大于10M小于100M的文件
根據時間來查找:
find [查找的目錄] -ctime [+-][數字]
這里有一點和按文件大小不同;
1.find -ctime +2:列出在本目錄下創建時間大于2天的文件
2…find -ctime -2:列出在本目錄下創建時間小于2天的文件
3…find -ctime 2:列出在本目錄下創建正好一天的文件
根據權限來查找
find [查找的目錄] -perm [+-][數字]
舉幾個例子
1.find -perm +222:意思是只要文件擁有者或文件所屬組或其他人只要有一個有w權限那么就匹配
2.find -perm -222:意思是文件擁有者或文件所屬組或其他人都有w權限才會匹配
3.find -perm 222:意思是文件擁有者或文件所屬組或其他人都必須只有w權限才會匹配
4…find -perm 2:意思是其他人必須只有w權限才會匹配
.find -perm 22:意思是文件所屬組和其他人必須只有w權限才會匹配
6.文件的軟硬鏈接
軟硬鏈接:軟鏈接相當于創建快捷方式,就是指向某一個文件,指向的目標文件如果被修改,那么指向這個文件的軟鏈文件(既然是指向)那么打開后還是會和目標文件一樣,而且還有一點那就是軟鏈接的默認權限是lrwxrwxrwx。硬鏈接相當于創建一個文件然后地址和傳入的文件指向同一塊內存。二者的區別:隨著源文件被刪除,由軟鏈接創建的文件此時沒有了指向自然就會失去作用,但是硬鏈接隨著源文件的刪除,還是指向那一塊地址,內容不變。當一個文件的硬鏈接全部被刪除那么這塊內存就會被linux認為是空閑內存,再創建新的文件就會覆蓋掉原有的數據
那么軟硬鏈接的創建方式:
1.ln -s [需要創建軟連接的文件] [文件的軟鏈接名]:相當于文件的快捷方式
2.ln [需要創建軟連接的文件] [文件的硬鏈接名]:相當C語言的指針,創建一個文件然后指向文件1的在磁盤上的位置
硬鏈接和軟鏈接的識別方式:
1.通過i結點
2.看是否能跨分區
3.能否針對目錄使用
對于i節點的解釋,我們的每一個目錄和文件都有一個特定的inode值,相當于每一個文件或者目錄的身份證,都是最獨一無二的,那么如何通過這個節點來區別呢?查看一個文件或者目錄的i節點的值可以用ls -i +文件名
cc文件是aa的硬鏈接,bb是cc的軟鏈接,我么分別查看他們三個的i節點:
我們可以看到軟鏈接的i節點值和aa不同,但是硬鏈接的結點值和aa相同
2.我們的源文件如果在一個某一個盤,那么硬鏈接必須也要在這一個盤,然而軟鏈接則不需要
3.不能給目錄創建軟鏈接,但是可以給目錄創建一個軟鏈接
總結
以上是生活随笔為你收集整理的彻底掌握Linux文件与目录管理命令?进来看看硬核总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何优雅而又不失内涵的在centos7下
- 下一篇: 一文搞定Vim/Vi编辑器