Linux操作
Linux操作之目錄和文件管理
Linux文件類型
在Linux系統中,基本上所有的目錄和設備都是以文件的形式存在的。
1. 普通文件
純文本文件、二進制文件、數據格式的文件、壓縮文件都是此類,第一個屬性爲【-】
2. 目錄文件
類似於windows中的目錄,能用cd命令進入,第一個屬性爲【d]
3. 設備文件
a.塊設備文件,即存儲數據以供系統存取的接口設備,第一個屬性爲【b】
b,字符設備文件,即串行端口的接口設備,第一個屬性爲【c]
4. 管道文件
特殊文件類型,主要是用來解決多個程序同時存取一個文件所造成的錯誤,第一個屬性爲【p】
5. 鏈接文件
a.軟鏈接文件,類似於windows下的快捷方式
b.硬鏈接文件
Linux目錄結構
Linux系統都有根文件系統,它包含系統引導和使其他文件系統得以掛載所必要的文件。Linux系統的目錄是分層的樹狀結構,都是掛載在根文件系統"/"下
目錄 | 描述 |
---|---|
/home | 包含Linux系統中各用戶的主目錄,子目錄默認以該用戶命名 |
/root | 是root用戶的主目錄 |
/bin | 包含常用的命令文件,不能包含子目錄 |
/sbin | 包含系統管理員和root用戶所使用的命令文件 |
/dev | 包含大部分的設備文件,比如磁盤、光驅等 |
/lib | 包含Linux系統的共享文件和內核模塊文件。/lib/modules目錄存放核心可加載模塊 |
/lib64 | 包含64版本Linux系統的共享文件和內核模塊文件 |
/tmp | 包含一些臨時文件 |
/mnt | 手動爲某些設備(比如硬盤)掛載提供掛載目錄 |
/boot | 包含Linux系統的內核文件和引導裝載程序的文件 |
/opt | 包含某些第三方應用程序的安裝設備 |
/media | 由系統自動爲某些設備(一般爲光盤、U盤等設備)掛載提供掛載目錄 |
/var | 該目錄存放不經常變化的數據,如系統日誌、打印隊列、DNS數據庫文件等 |
/etc | 包含Linux系統上大部分的配置文件,建議修改配置文件之前先備份 |
/usr | 包含可以供所有用戶使用的數據和程序 |
/srv | 存儲一些服務啓動之後所需要取用的資料目錄 |
/run | 一個臨時文件系統,一些程序或服務啓動之後,會將它們的PID放置在該目錄中 |
/sys | 在Linux系統提供熱插拔能力的同時,該目錄包含所檢測到的硬件設置,它們會被轉換成/dev目錄中的設備文件 |
/proc | 是一個虛擬的文件系統,它不存在磁盤中,而是由內核在內存中產生的,用於提供系統的相關信息。 /proc/cpuinfo :該文件保存計算機CPU信息。 /proc/filesystems:該文件保存Linux文件系統信息 /proc/ioports:該文件保存計算機I/O端口號信息 /proc./version:該文件保存Linux系統版本信息 /proc/meminfo :該文件保存計算機內存信息 |
文件和目錄操作
1. pwd
用於顯示工作目錄,執行該指令可立刻得知你目前所在工作目錄的絕對路徑名稱
2. cd
用於更改用戶的工作目錄路徑。工作路徑可以使用絕對路徑或相對路徑,絕對路徑從/(根)開始,然後循序到所需的目錄下,相對路徑從當前目錄開始。"~“也表示home目錄的意思,”.“則是表示目前所在的目錄,”…"則表示目前目錄位置的上一層目錄。
cd 具體路徑
cd ./
cd ../
cd ~
cd
3. ls
顯示指定工作目錄下的內容,對於目錄而言將列出其中的所有子目錄和文件信息;對於文件而言,將輸出其文件名以及所要求的其他信息。
ls [選項][文件名]
相關選項 | 功能 |
---|---|
-a | 顯示全部的文件,包含隱藏文件(開頭爲.的文件)也一起羅列出來,這是最常用的選項之一 |
-A | 顯示全部的文件,連同隱藏文件,但不包括.與…這兩個目錄 |
-d | 僅列出目錄本身,而不是列出目錄內的文件與數據 |
-f | ls會默認以文件名排序,使用-f選項會直接列出結果,而不進行排序 |
-F | 在文件或目錄後加上文件類型的指示符號 |
-h | 以人們易讀的方式顯示文件或目錄大小 |
-i | 顯示inode節點信息 |
-l | 使用長格式列出文件或目錄信息 |
-n | 以UID或GID分別代替文件用戶名和羣組名顯示出來 |
-r | 將排序結果反向輸出 |
-R | 連同子目錄內容一起列出來,等於將該目錄下的所有文件都顯示出來 |
-S | 以文件容量大小排序,而不是以文件名排序 |
-t | 以時間排序,而不是以文件名排序 |
–color=never | 不依據文件特性給予顏色顯示 |
–color=always | 顯示顏色,是默認方式 |
–color=auto | 表示讓系統自行依據配置來判斷是否給予顏色 |
–full-time | 以完整時間模式(包含年、月、日、時、分)輸出 |
–time=(atime,ctime) | 輸出acess時間或改變權限事件,而不是內容變更時間 |
PS:常用的不常用的全在上面,先一個個試試唄,常用的就看看,不常用的用的時候百度一下即可。
PS:root模式下,一樣的,就不用放圖了。
4. touch
該指令用於創建空文件以及更改文件的時間。
touch [選項] [文件] #語法
touch --help #個人覺得這個最有用
PS:基本操作-a和-m,我不會用,自己練習也沒有成功過。。。
5. mkdir
該指令可在Linux系統中創建目錄
mkdir [-p] dirname #語法,-P確保了目錄實際存在,不存在的就建一個
PS:大致就是這樣,但查詢創建的目錄,我還沒有學習到
6. rmdir
用於刪除空目錄
rmdir [-p] dirname #語法,-P是當子目錄被刪除後使它也成爲空目錄的話,則順便一併刪除
PS:很清晰的可以看到當目錄非空時,無法刪除該目錄,只能先將該子目錄刪掉之後再來刪除該目錄。
7. rm
用於刪除系統中的文件或目錄
rm [選項][文件|目錄]
rm -i #刪除前逐一詢問確認
rm -f #即使原檔案屬性設爲只讀,也直接刪除,無需一一確認
rm -r #將目錄及以下的檔案逐一刪除
PS:這裏rm -r奏效,我去試試root模式下的情況
8. cp
複製文件和目錄到其他文件中。如果指定兩個以上的文件或目錄,且最後的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄複製到該新目錄中。若同時指定多個文件或目錄,且最後的目的地並非是一個已存在的目錄,則會出現錯誤信息。
cp [選項][源文件|目錄][目標文件|目錄]
相關選項 | 功能 |
---|---|
-a | 此選項通常在複製目錄時使用,它保留鏈接、文件屬性,並複製目錄下的所有內容 |
-d | 複製時保留鏈接 |
-f | 覆蓋已經保存的目標文件而不給出提示 |
-i | 在覆蓋文件之前給出提示,要求用戶確認是否覆蓋,回答”y“時目標文件將被覆蓋 |
-p | 除複製文件的內容外,還把修改時間和訪問權限也複製到新文件中 |
-r | 若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件 |
-l | 不復制文件,只是生成鏈接文件。 |
9. mv
對文件和目錄更改名稱以及移動文件和目錄的路徑
mv [選項][源文件|目錄][目標文件|目錄]
相關選項 | 功能 |
---|---|
-i | 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件 |
-f | 在mv操作要覆蓋某已有的目標文件時不給任何提示 |
10. locate
用於查找符合條件的文件,不搜索具體目錄,而是搜索一個數據庫(/var/lib/located),這個數據庫中含有所有本地所有文件信息。Linux系統自動創建這個數據庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。爲了避免這種情況,可以在使用該命令之前,先使用updatedb命令,手動更新數據庫。
locate [option] filename
相關選項 | 功能 |
---|---|
-r | 使用正則表達式作爲搜索條件 |
-i | 忽略大小寫 |
-c | 顯示查找到的條目數 |
-d | 用DBPATH替代默認的數據庫 |
11. find
在目錄結構中搜獲文件,並執行指定的操作。從指定的目錄開始,遞歸地搜索其各個子目錄,查找滿足尋找條件我文件,可以指定文件的名稱、類別、時間、大小以及權限等不同信息的組合,只有完成相符的文件纔會被列出來。
find [路徑][選項]
相關選項 | 功能 |
---|---|
-name | 查找名爲filename的文件 |
-perm | 按執行權限來查找 |
-user username | 按文件屬主來查找 |
-group groupname | 按組來查找 |
-mtime -n +n | 按文件更改時間來查找文件,-n指n天之內,+n指n天之前 |
-atime -n +n | 按文件訪問時間來查GIN:Opx |
-ctime -n +n | 按文件創建時間來查找文件,-n指n天之內,+n指n天之前 |
-nogroup | 查無有效屬組的文件 |
-nouser | 查無效屬主的文件 |
-newer f1 !f2 | 查更改時間比f1新但比f2舊的文件 |
-type b/d/c/p/l/f | 查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件 |
-size n[c] | 查長度爲n或n字節的文件 |
-depth | 使查找在進入子目錄前先行查找完本目錄 |
-fstype | 查位於某一類型文件系統中的文件 |
- mount | 查文件時不跨越文件系統mount點 |
-follow | 如果遇到符號鏈接文件,就跟蹤鏈接所指的文件 |
-cpio % | 查位於某一類型文件系統中的文件 |
-cpio] | 對匹配的文件使用cpio命令,將他們備份到磁帶設備中 |
-prune | 忽略某個目錄 |
-amin | 查找在系統中最後N分鐘訪問的文件 |
- mmiin | 查找在系統中最後N分鐘裏修改過的文件 |
按照文件名檢索
find -name #按照文件名搜索
find -iname #按照文件名搜索,不區分文件名大小
find -inum #按照inode號搜索
PS:進來root模式下進行該指令,這樣應該有足夠的權限查詢
根據文件類型檢索
find -type f #在當前工作目錄下查找所有普通文件
find -type d #在當前工作目錄下查找所有目錄文件
find /dev -type c #從dev目錄下查找所有字符設備文件
find /dev -type b #從dev目錄下查找所有塊設備文件
find /dev -type b -iname '*sd*' #從dev目錄下查找塊設備和文件名包含sd
根據所有者和所屬組搜索
find -user root #在當前目錄下查找所有者是root的文件
find -user 用戶名 #在當前目錄下查找所有者是對應用戶名的文件
find / -group root #在根目錄下查找所屬組爲root文件
find / -nouser #在根目錄下查找所有無主文件
find / -nogroup #在根目錄下查找所有沒有所屬組的文件
PS:個人建議,第二個查找用戶名對應的指令,別輕易嘗試,有點多
根據文件搜索大小搜索
find / -size +50M
find / -size -50M
find / -size +50M -size -50M
find / -nouser
find . -empty
PS:前面三個沒有成功,原因在於後面那個是大寫的m,empty儘量別試
根據時間查找文件和目錄(天爲單位)
find / -mtime -5 #查找第五天之內修改過的文件
find / -mtime 5 #查找第五天修改過的文件
find / -mtime +5 #查找五天以前修改過的文件
find / -mtime 0 #查找24小時修改過的文件
PS:我昨天才重裝的虛擬機,我也不知道會有這麼多修改的文件
根據時間查找文件和目錄(分鐘爲單位)
find / -mmin -5 #查找五分鐘之內修改過的文件
find / -mmin 5 #查找第五分鐘修改過的文件
find / -mmin +5 #查找五分鐘以前修改過的文件
find / -mmin 1 #查找一分鐘修改過的文件
PS:我也不知道,幾分鐘之內,我修改的文件有這麼多,多半是自動記錄或者修改的吧,我不背鍋。。。
按照權限搜索
相關選項 | 功能 |
---|---|
-perm 權限模式 | 查找文件權限剛好等於“權限模式”的文件 |
-perm -權限模式 | 查找文件權限剛好全部包含“權限模式”的文件 |
-perm +權限模式 | 查找文件權限剛好包含“權限模式”的任意一個權限的文件 |
邏輯運算符
相關選項 | 功能 |
---|---|
-a | and邏輯與 |
-o | or邏輯或 |
-not | not邏輯非 |
對查找出來的文件執行其他命令
- exec cpmmand {}\; #command代表要執行的命令,{}代表前面find查找出來的文件名,;exec語句結束符號,必須要,不能省略
12. whereis
用於查找文件,只能用於查找二進制文件、源代碼文件和man手冊頁。
whereis [option] filename
相關選項 | 功能 |
---|---|
-b | 只查找 |
-B<目錄> | 只在設置的目錄下查找二進制文件 |
-f | 不顯示文件名前的路徑名稱 |
-m | 只查找說明文件 |
-M<目錄> | 只在設置的目錄下查找說明文件 |
-s | 只查找原始代碼文件 |
-S<目錄> | 只在設置的目錄下查找原始代碼文件 |
-u | 查找不包含指定類型的文件 |
13. which
在PATH變量指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果。即使用該命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。
which [option] filename
相關選項 | 功能 |
---|---|
-n | 指定文件名長度,指定的長度必須大於或等於所有文件中最長的文件名 |
-p | 與-n參數相同,但此外包括了文件的路徑 |
-w | 指定輸出時欄位的寬度 |
-V | 顯示版本信息舉例 |
鏈接文件
EXIT 4 文件系統
該系統會把分區主要分爲兩大部分,小部分用於保存文件的inode(i節點)信息;剩餘的大部分用於保存block信息。
每個文件都獨自佔用一個inode,文件內容由inode的記錄來指向;如果想要讀取文件的內容,就必須藉助目錄中的記錄文件名找到該文件的inode,才能成功找到文件內容所在的block塊。
inode
默認大小爲128Byte,用來記錄文件的權限、文件的所有者和屬組、文件的大小、文件的狀態改變時間、文件的最近一次讀取時間、文件的最後一次修改時間、**文件的數據真正保存的block編號。**每個文件需要佔用一個inode。
block
大小可以爲1KB,2KB,4KB,默認爲最後一個。用於實際的數據存儲。
分類
一般可分爲軟鏈接和硬鏈接。
軟鏈接
軟鏈接可以鏈接目錄。
軟鏈接可以跨分區。
軟鏈接會新建自己的inode信息和block,只是在block中不存儲實際文件數據,而存儲的是源文件的文件名和inode好。
不論是修改源文件,還是修改鏈接文件,另一個文件中的數據都會發生改變。
刪除軟鏈接文件,源文件不受影響。
刪除源文件,軟鏈接文件將找不到實際的數據,從而顯示文件不存在。
硬鏈接
硬鏈接不能跨文件系統(分區)建立,因爲在不同的文件系統中,inode號是重新計算的。
硬鏈接不能鏈接目錄。因爲如果給目錄建立鏈接,那麼不僅目錄本身需要重新建立,目錄下所有的子文件,包括子目錄中的所有子文件都需要建立硬鏈接,這對當前的Linux來講過於複雜。
硬鏈接不會建立新的inode信息,也不會更改inode的總數。
不論是修改源文件,還是修改硬鏈接文件,另一個文件中的數據都會發生改變。
不論是刪除源文件,還是刪除硬鏈接文件,只要還有一個文件存在,這個文件都可以被訪問。
相關命令
ln命令用於給文件創建鏈接。
ln [選項]源文件(實實在在的文件)目標文件(鏈接文件)
相關選項 | 功能 |
---|---|
-s | 建立軟鏈接文件。如果不加該選項,則建立硬鏈接文件 |
-f | 強制,如果目標文件已經存在,則刪除目標文件後再建立鏈接文件 |
一般舉例
硬鏈接舉例
軟鏈接舉例