Everything is a file 是一個經典的概念。Linux系統將所有的東西都看作是文件,包括將硬體設備、進程、網路連接等均抽象為文件。 ...
目錄
“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
命令可以查看文件的詳細信息:
創建文件
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( ̄▽ ̄)ブ