Linux基礎之檔案管理

smileleooo發表於2024-04-28

目錄
  • 檔案許可權
  • 檔案的三個時間戳
  • 建立檔案
  • 建立目錄
  • 刪除檔案
  • 檔案的移動與複製
  • 檔案檢視與編輯
  • 重定向
  • 檢視檔案詳細資訊
  • 查詢檔案
  • 檔案屬性的管理
  • 檔案的壓縮和解壓縮
  • 檔案的傳輸

“Linux下一切皆檔案!”

Everything is a file 是一個經典的概念。Linux系統將所有的東西都看作是檔案,包括將硬體裝置、程序、網路連線等均抽象為檔案。

這也就意味著,使用者可以使用同樣的命令和工具來操作硬體裝置和檔案。比如使用cat命令可以讀取一個普通檔案,也可以讀取鍵盤上輸入的字元。

檔案許可權

檔案許可權是透過一系列許可權位來管理的,這些許可權位決定了檔案對使用者、組和其他使用者的可讀、可寫和可執行許可權。每個檔案都有一個所有者和一個所屬組。

檔案許可權包括讀、寫和執行許可權:

  • 讀許可權(r):允許使用者讀取檔案的內容或列出目錄的內容

  • 寫許可權(w):允許使用者修改檔案的內容或在目錄中建立、刪除和重新命名檔案

  • 執行許可權(x):允許使用者執行檔案,或允許使用者進入目錄

檔案許可權共有九個位,分為三組,每組三個位,分別為:

  • 所有者許可權:指定檔案所有者的許可權

  • 所屬組許可權:指定檔案所屬組的許可權

  • 其他使用者許可權:指定除所有者和所屬組以外的其他使用者的許可權

舉個例子:

drwxr-xr-x. 2 root root 34 Jul 14 20:59 tmp

從左向右依次分析:

  • d 表示檔案型別為一個目錄,而不是普通檔案

  • drwxr-xr-x. 檔案許可權總共10個字元,r可讀,w可寫,x可執行,-沒有對應許可權

    第一組 rwx 檔案擁有者的許可權

    第二組 r-x 檔案所屬組的許可權

    第三組 r-x 以上兩者以外的使用者或者組的許可權

    . 檔案的擴充套件許可權,可以針對的對某些使用者或者使用者組設定許可權

  • 2 表示此目錄下的子項數量(包括 ./ 和 /..)

  • root 檔案的所屬使用者

  • root 檔案所屬的使用者組

  • 34:檔案大小(以位元組為單位)

  • Jul 14 20:59 檔案的最後修改時間

  • tmp 檔名

檔案的三個時間戳

在Linux系統中每個檔案都有三個時間戳,用於記錄不同的時間:

  • atime(access time):檔案最近一次被訪問或讀取的時間。當使用cat、less 或 more 來讀取檔案,訪問時間會更新。

  • mtime(modification time):檔案內容最後一次被修改的時間。當編輯檔案並儲存時,修改時間會更新。

  • ctime(change time):檔案的檔案後設資料被修改的時間。當檔案的所有者、許可權或其他後設資料發生變化時,檔案的更改時間會更新。

stat 命令可以檢視檔案的詳細資訊:

image

建立檔案

touch 命令可以用來建立空檔案,語法格式為:touch [OPTION]... FILE...

使用 touch 命令建立空檔案:

touch filename.txt

如果檔案已存在,還可以使用 touch 命令來更新檔案的時間戳:

touch -a # 修改檔案的訪問時間

touch -m # 修改檔案的 mtime

建立多個普通檔案:

touch file1.txt file2.txt file3.txt

其他命令包括 echo、cat、vim 等都可以建立新檔案。

建立目錄

mkdir 命令用來建立目錄, 語法格式為:[OPTION]... DIRECTORY...

  • -p 可快速建立目錄的同時建立必要的父目錄,對於已存在的目錄不會被覆蓋

  • -v 顯示建立目錄的詳細過程

mkdir -v directory

mkdir directory1 directory2 directory3 # 一次建立多個目錄

mkdir -p parent/child # 建立多級目錄

刪除檔案

rm 命令用來刪除檔案或目錄,語法格式為:[OPTION]... [FILE]...

刪除檔案:

rm filename.txt # 刪除單個檔案

rm file1.txt file2.txt file3.txt # 刪除多個檔案

刪除目錄及其內容:

如果要刪除一個目錄及其所有內容,可以使用 -r 引數來遞迴刪除。

rm -r directoryname

-f 表示強制刪除,檔案處於鎖定狀態或者你沒有足夠的許可權也會刪除。

檔案的移動與複製

mv 命令用來移動或重新命名檔案,語法格式為:mv [OPTION]... SOURCE... DIRECTORY

移動檔案到新位置:

mv sourcefile.txt /path/to/destination/

重新命名檔案:

當要移動的檔案移動路徑沒有發生變化,只有檔名發生了變化,那就相當於修改檔名。

mv oldfilename.txt newfilename.txt

當oldfilename.txt和newfilename.txt都是普通檔案時,並且newfilename.txt存在,那麼檔案newfilename.txt將會被oldfilename.txt替代。

當mv後面的引數多於2的時候,表示最後一個檔案之前的所有檔案都會被移動到最後一個檔案中,最後最後一個是資料夾那麼命令執行成功,如果最後一個檔案是普通檔案那麼失敗。

cp 命令,用來複制檔案或者目錄,語法格式為:cp [OPTION]... SOURCE... DIRECTORY

複製檔案到目標位置:

cp sourcefile.txt /path/to/destination/

在同一目錄下複製並重新命名檔案:

cp oldfile.txt newfile.txt

遞迴複製目錄及其內容:

cp -r sourcedirectory/ /path/to/destination/

使用 -r 引數來遞迴複製整個目錄 sourcedirectory 及其內容到 /path/to/destination/

檔案檢視與編輯

檢視檔案內容:

  • cat 顯示檔案的全部內容,適合看相對較短文件 -n 選項可以增添行號

  • tac 它是 cat 逆向顯示

  • head 檢視檔案的開頭幾行,-n 表示顯示多少內容 head n-m 表示區間顯示 n-m 行的內容

  • more 以逐頁方式檢視檔案內容,顯示讀取進度,當文件讀取完畢的時候自動退出

  • less 以互動式方式檢視檔案內容,如果要退出文件需要使用快捷鍵q

  • tail 檢視檔案的末尾幾行,常用於檢視更新頻繁的日誌等,-n 表示讀取尾部的行數 -f 表示實時更新

  • hexdump 對二進位制檔案或非文字檔案以十六進位制格式檢視,hexdump -C filename

編輯檔案:

  • echo 將文字重定向到檔案中:echo "Hello, world!" > filename.txt

  • printf 也可以將文字重定向到檔案中:printf "Hello, world!\n" > filename.txt

  • vim 一款強大的文字編輯器

VIM

在於 vim 編輯器中設定了三種模式:命令模式、末行模式、編輯模式

命令模式

按鍵 功能
↑ ↓ ← → 游標按單個字元上下左右移動
w 游標按照單詞向後跳轉
b 游標按照單詞向前跳轉
^ 游標跳轉至行首
$ 游標跳轉至行尾
gg 文件首行第一個字元
G 文件最後一行第一個字元
ngg/nG 跳轉到指定n行
yy 複製游標所在行
nyy 複製從游標處開始的n行
p 將緩衝區的內容貼上到游標所在行的下一行
P 將緩衝區的內容貼上到游標所在行的上一行
dd 刪除游標所在行
ndd 刪除從游標處開始的n行
d^ 刪除游標前至行首字元
d$ 刪除游標及之後的所有字元
u 撤銷操作

編輯模式

按鍵 功能
i 在游標前插入
I 在游標所在行行首第一個非空字元前插入
a 在游標後插入
A 在游標所在行末尾插入
o 在游標所在行下一行插入
O 在游標所在行上一行插入
s 刪除游標所在字元並進入插入模式
S 刪除當前行並進入插入模式

末行模式

按鍵 功能
:q 退出,未對檔案做任何編輯操作才可退出
:q! 強制退出,不儲存文件內容
:w 儲存檔案
:w /dir/file 將檔案另存為/dir/file
:wq 儲存檔案內容並退出
:wq! 強制儲存並退出
:/word 從上而下在檔案中查詢字串“word”(可按n鍵定位到下一個匹配的被查詢字串)
:r /dir/file 在當前檔案中讀入其他檔案內容
:g/word/d 查詢含有"word"的行並刪除
:set nu 顯示行號
:set nonu 關閉行號顯示
:n1,n2 d 刪除n1-n2行內容
:n1,n2 co n 複製n1-n2行到第n行後面

重定向

資料流

  • 標準輸入(standard input 簡稱stdin):預設情況下,標準輸入指從鍵盤獲取的輸入,程式碼為0
  • 標準輸出(standard output 簡稱stdout):預設情況下,命令執行所回傳正確的資訊會輸出到螢幕上,程式碼為1
  • 標準錯誤輸出(standard error output stderr):預設情況下,命令執行失敗後,所回傳的錯誤資訊會輸出到螢幕上,程式碼為2

重定向運算子

重定向運算子可以將命令輸入和輸出資料流從預設裝置重定向到其他位置。

  • 使用 > 或者 1> 可以將標準輸出的結果以覆蓋的方式寫入到指定檔案中

  • 使用 2> 可以將報錯資訊輸出的結果以覆蓋的方式寫入到指定檔案中

  • 使用 2>/dev/null 表示將錯誤資訊拋棄

  • 使用 &> 可以將stdin、stderr一起輸出的結果以覆蓋的方式寫入到指定檔案中

  • 使用 >> 將命令執行後的正確輸出資訊以追加的方式寫入到指定的檔案中,不覆蓋原檔案內容

  • 使用 < 使命令從指定的檔案中讀取資料作為輸入

  • 使用 << 結束標識字串,在命令列讀取資料作為輸入,直到遇到指定的結束標識字串

  • 管道符 | 將管道符左側命令結果以引數的形式給到右側命令

  • tee 指令會從標準輸入裝置讀取資料,將其內容輸出到標準輸出裝置,同時輸出到檔案。

檢視檔案詳細資訊

wc 命令檢視普通檔案詳情資訊,包括大小、有多少個單詞、有多少行

  • -l 表示檢視檔案有多少行

  • -w 表示檢視檔案中有多少個單詞

  • -c 表示檢視檔案有多少個字元

du 命令統計當前檔案中的空間佔用情況,會列出每一個資料夾中檔案/資料夾的佔用情況

  • -a 會遞迴的顯示資料夾下所有的檔案中佔用情況(包括子目錄)

  • -s 會將檔案的佔用情況彙總展示

查詢檔案

Whereis 命令用於查詢特定命令的二進位制檔案、原始碼檔案以及 man 手冊檔案的路徑。

which 命令用於確定在系統路徑中執行的特定命令的位置。

find 按照指定的條件在指定的路徑下遞迴搜尋檔案。

搜尋特定名稱的檔案:

find /path/to/search -name filename.txt

搜尋特定型別的檔案:

find /path/to/search -type f

搜尋特定大小的檔案:

# find 搜尋路徑 -size +10k/-10k

find /path/to/search -size +10M

搜尋特定許可權的檔案:

find /path/to/search -perm 644

執行其他操作,如刪除或執行命令:

find /path/to/search -name "*.tmp" -exec rm {} \;

根據所有者組屬性查詢:

#find 搜尋路徑 -uid -gid -user -group -nouse

find /path/to/search -uid 0

find /home -user smileleooo

檔案屬性的管理

檔案屬性修改

chattr (change Attribute),檔案屬性可以用來增強檔案的安全性和穩定性,以防止意外刪除或修改檔案。

常用的檔案屬性包括:

  • -a 只允許在檔案末尾新增內容,不允許修改或刪除已有內容

  • -i 讓檔案只有可讀屬性,防止檔案被刪除、重新命名、修改或連結

其中:+ - = 分別表示新增、移除、設定屬性。

例如:

chattr +i filename

# 讓檔案只有可讀屬性

使用chattr命令需要root許可權。若要檢視檔案的屬性,可以使用lsattr命令。

修改檔案的使用者和組

chown (change owner),改變檔案或目錄的所有者和使用者組。

  • 只改使用者:chown 新所有者 檔案或目錄

  • 使用者和組都改:chown 新所有者:新使用者組 檔案或目錄

例如:

sudo chown smileleooo:users filename

# 將檔案的所有者更改為smileleooo,使用者組更改為users,

檔案的壓縮和解壓縮

tar 是一個用於建立和提取歸檔檔案的命令列工具,通常用於將多個檔案和目錄組合成一個單一的歸檔檔案。

引數:

  • -c 建立新的歸檔檔案

  • -x 提取歸檔檔案中的內容

  • -t 檢視歸檔檔案中的內容

  • -v 詳細模式,顯示操作過程中的詳細資訊

  • -f 指定歸檔檔案的名稱

  • -z 使用 gzip 壓縮/解壓縮歸檔檔案

歸檔檔案

建立 tar 歸檔檔案:

# 將檔案 file1、file2 和目錄 directory 歸檔到一個名為 archive.tar 的檔案中

tar -cvf archive.tar file1 file2 directory

檢視 tar 歸檔檔案中的內容:

# 列出 archive.tar 中的所有檔案和目錄

tar -tvf archive.tar

提取 tar 歸檔檔案中的內容:

提取 archive.tar 中的所有檔案和目錄到當前目錄

tar -xvf archive.tar

壓縮和解壓縮

壓縮 tar 歸檔檔案為 gzip 格式:

tar -czvf archive.tar.gz file1 file2 directory

解壓縮 gzip 格式的 tar 歸檔檔案:

tar -xzvf archive.tar.gz

檔案的傳輸

SCP(Secure Copy Protocol),SCP 是一種基於 SSH 的安全檔案傳輸協議,可以用於在遠端主機之間傳輸檔案。

傳輸檔案到遠端主機:

# scp 本地檔案 使用者名稱@遠端主機:遠端目錄

scp file.txt user@remote_host:/home/user/

從遠端主機下載檔案:

# scp 使用者名稱@遠端主機:遠端檔案 本地目錄

scp user@remote_host:/home/user/file.txt .

包括還有其他的,比如rsync、ftp、sftp等。


若有錯誤,歡迎指正!o( ̄▽ ̄)ブ

相關文章