Linux文件和目錄管理
一、目錄相關命令:mkdir、rmdir、rm -r、cp -r、mv
mkdir:(make directory,創建目錄),如果文件已存在,則無法創建(一切皆文件)
-p選項:可以級聯的去創建 mkdir -p 123/234/345
-v選項:可視化的顯示
rmdir:(remove directory,刪除目錄),它只能刪除一個空目錄,非空不能刪(有限制,不常用)
-p選項:級聯的刪除目錄,但是有限制,比如說rmdir -p 123/234/345,如果最後一個目錄,就是345目錄如果是空目錄的話,可以級聯的刪掉全部
rm:既可以刪除文件,也可以刪除目錄
rm filename:刪除文件
rm -r:刪除目錄
-f選項:強制(force)刪除,不提示,刪除一個不存在的目錄也不會有任何提示
cp:複製文件
-r選項:複製目錄,如果拷貝的源目錄,在目標目錄已存在,那麼會覆蓋並且不會提示
mv:重命名或者移動
在同級目錄下,mv就是重命名
在不同的目錄,mv就是移動或者覆蓋
二、文件相關命令:cat、tac、more、less、head、tail
cat:查看文件內容
-A:查看同時顯示結尾符
tac:逆序查看,與tac相反
more、less:按頁查看文件內容,more只能向下翻,卻不能往回看,常用的還是less
more:空格,下一屏;b,上一屏
less 快捷鍵:
g:文件首
G:文件尾
j:下一行(鍵盤上鍵也行)
k:上一行(鍵盤下鍵也行)
b:上一屏(page up)
f:下一屏(page down)
當然less也可以查找字符,“/word”:然後按n就可以查看下一個查找的,“?word”按n會往上查看
head:默認查看前10行
-n 20:查看前20行,可以指定
tail:默認查看末尾10行
-f:可以動態的去查看文件,顯示文件最新追加的內容,用於查看一些日誌文件
三、文件或者目錄的屬性
ls -l命令可查看文件屬性與權限:
被分爲9位:
第一個被佔位表示意思:
-:普通文件
d:目錄
l:鏈接文件
b:塊設備文件
c:字符文件
p:管道文件
s:套接字文件
接下來每三位爲一段,分爲三段:第一段是文件的所有者(user)的權限,第二段是文件的所屬組(group)的權限,第三段是文件的其他用戶的權限。
r:表示可讀
w:表示可寫
x:表示可執行
但是rwx對於目錄和文件概念是不一樣的
r:對於文件來說是否可以查看這個文件內容,對於目錄來說是否可以看到這目錄下面的內容
w:對於文件來說是否可以修改這個文件內容,對於目錄來說是否可以創建以及刪除此目錄下的內容
x:對於文件來說是否可以執行這個文件,對於目錄來說是否可以進入到此目錄,就是是否可以cd命令過去
若用數字表示:r:4、w:2、x:1,目錄的最高權限是777,也就是drwxrwxrwx,而文件是666
四、更改權限、屬主、屬組
chmod:更改文件/目錄權限
可以使用數字來表示權限,或者用rwx來更改權限
chmod 755 file //意思是將文件的設置爲-rwxr-xr-x,這些數字分別是“r:4、w:2、x:1”
也可以使用符號的方式:chmod u=rwx,g=rx,o=rx -c file
chmod a=r file //這表示將u、g、o的權限都加上r的權限
-R:級聯的更改屬性
-c:更改權限後將會反饋信息,與-v選項類似
chown:更改目錄/文件所屬主和所屬組,中間用冒號隔開
chown user1:user2 file //將file的所屬主設置爲user1,將所屬組設置爲user2
chown user1 //設置所屬主
chown :user2 //設置所屬組
-R:級聯的更改
-c:更改後收到反饋信息
chgrp:更改文件或者目錄的所屬組,組名可以是用戶組ID,也可以是用戶組的組名,不過chown也可以完成,所有這個命令不常用
umask:用來限定新建目錄或者文件權限的掩碼,默認是0022
umask 後面跟數字:umask 001
作用:umask在每次進入系統時就被執行了,用來限定用戶在創建新文件時,有最初的限定掩碼來決定,比如說:umask 001,目錄的最大權限是777,文件是666
目錄: drwxrwxrwx 文件: -rw-rw-rw-
減去 ---------x 減去 ---------x
--------------------- -----------------------
drwxrwxrw- ==> 776 -rw-rw-rw- ==> 666
對於上面的文件可能有疑問,目錄777-001=776沒問題,文件666-001爲什麼還是666,那是因爲權限不能單純的用減法去對待,上面的文件本身就沒有x權限,減去有何意義?
umask的權限使用命令設置後只會在當前終端生效,永久生效修改配置文件/ect/profile。
chattr:更改文件的隱藏權限
-R:級聯
+<屬性>:開啓文件或目錄的該項屬性
-<屬性>:關閉文件或目錄的該項屬性
=<屬性>:指定文件或目錄的該項屬性
有兩個較爲常用的屬性:
a:只能增加數據,不能刪除數據,也不能修改數據,不能重命名
i:不能刪除、改名、寫數據,也不能重命名
lsattr:顯示文件的隱藏權限
-R:級聯
-a:顯示全部,包括隱藏文件
-d:查看目錄
特殊權限:SUID、SGID、SBIT
SUID:setgid,設置屬主標識符,設置此特殊權限後,允許執行者以文件所有者的身份來執行
1、僅對二進制文件有效
2、執行者必須有該文件的執行權限(x)【否則顯示的是大寫S,-rwSrwxrwx】,否則根本無意
義
命令:chmod u+s file
SGID:setgid,設置屬組標識符,設置此特殊權限後,允許執行者以文件所屬組的身份來執行
1、對目錄和二進制均有效
2、必須擁有該文件或者目錄的執行權限(x)
對目錄設置時:在該目錄下創建的子目錄,將繼承父目錄的所屬組的權限,對於該目錄下創建的文件也有效果
對二進制文件設置時:允許執行者以文件所屬組的身份來執行
命令:chmod g+s file
SBIT:sticky bit,粘滯位
1、僅對目錄有效
2、需要有該目錄的執行權限
作用:當用戶在該目錄下創建文件或者目錄後,只有文件的所有者或者root纔有權限刪除、更改
SUID、SUID、SBIT可以用數字表示權限,分別是4、2、1,也就是umask的第一位
chmod 4755 file //將file的權限改爲drwsr-xr-x
五、命令、文件的搜索
which:用於查找"命令"的位置,會在$PATH下的路徑查找,所以有侷限性
用法:which "COMMAND"
type:顯示一個命令的類型,判斷出是內置命令還是外部命令
類型有:alias,別名
bulitin,內置命令
function:函數,SHELL的函數
file:文件,磁盤文件,外部命令
keyword:關鍵字,SHELL保留字
unfound:未找到
type cd,會提示你這是一個bulitin,內置命令
whereis:它可以搜索到命令的二進制文件、源代碼文件和man幫助文檔等相關文件的路徑
顯示的信息比which命令更爲詳細,什麼選項也不加,則會顯示所有信息
-b:只搜索命令的二進制文件路徑
-m:只搜索命令的man文檔路徑
-s:只搜索命令的源代碼路徑
這個命令也比較侷限,因爲它會在固定的幾個目錄進行搜索:/bin、/sbin、/usr/bin、/usr/sbin、/usr/share/man/man1這幾個目錄搜索
locate:用來查找文件或者目錄,相當於find -name,但是比find效率更高,因爲locate搜索源是一個數據庫/var/lib/mlocate/mlocate.db,而不是硬盤,這個數據庫會含有本地的所有文件
默認centos沒有安裝:yum isntall -y mlocate,當這個命令安裝就會自動創建數據庫,首次使用這個數據庫文件爲空,需要使用命令來更新下,updatedb。
find:在指定目錄下查找文件
用法:find 路徑 表達式
表達式:
-type:類型搜索,f表示文件,d表示目錄,s表示套接字文件...
舉例:find .-type f //搜索當前目錄下的所有文件
-name:具體名稱搜索
-inum:以inode號來搜索
-size:以文件的大小來搜索
-atime/ctime/mtime:以時間戳來搜索
舉例:find . -atime +/-10
+10:表示10天以前被訪問過的文件
10:表示正好10天這一天的訪問的文件
-10:表示10天以內被訪問過的文件
-amin/cmin/mmim:單位爲分鐘,和上面類似
-uid、gid:以用戶識別碼、羣組識別碼的方式來搜索
-o:邏輯或
find命令的選項還有很多,很強大,具體有需求可以查找man幫助文檔
stat:查看文件的時間戳、inode號等信息
六、軟、硬鏈接
硬鏈接:
一般情況下,文件名和inode號碼是“一 一對應”關係,每個inode號碼對應一個文件名,但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼,這意味着,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有相同inode的文件;但是,刪除一個文件名,不影響另一個文件名的訪問,這種情況就被稱爲“硬鏈接”(hard link)
ln命令可以創建硬鏈接: ln 源文件 目標文件
當創建硬鏈接後,源文件與目標文件的inode號碼相同,都會指向同一個inode。inode信息中有一項叫做“鏈接數”,記錄指向該inode的文件名總數,這回就會增加1,反過來,刪除一個文件名,就會使得inode節點中的“鏈接數”減1。當這個值減到0時,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應的block區域。
這裏順便說一下目錄文件的“鏈接數”。創建目錄時,默認會生成兩個目錄項:'.'和'..' ,前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的”硬鏈接;後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的硬鏈接,所以,任何一個目錄的“硬鏈接”總數,總是等於2加上它的子目錄總數(含隱藏目錄),這裏的2是父目錄對其的“硬鏈接”和當前目錄下的“. 硬鏈接”。
軟鏈接:
除了硬鏈接以外,還有一種特殊情況。文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B,因此,無論打開哪一個文件,最終讀取的都是一個文件。這時,文件A就稱爲文件B的“軟鏈接”(soft link)或者“符號鏈接”(symbolic link)。
這就表示,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:“No such fule or directory”.這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode“鏈接數
不會因此發生變化。
ln -s 可以創建軟鏈接:ln -s 源文件或者源命令 目標文件或者目標目錄
總結 : 軟鏈接:對目錄和文件都有效,且支持跨分區(文件系統),源文件被刪除將會導致軟鏈接無法使用
硬鏈接:硬性規定不能對目錄進行硬鏈接,只對文件創建。不能跨文件系統,刪除源文件對硬鏈接無影響。