Linux基礎之文件管理

来源:https://www.cnblogs.com/smileleooo/p/18162167
-Advertisement-
Play Games

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 命令可以查看文件的詳細信息:

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( ̄▽ ̄)ブ


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 在Linux文件系統中,每一個文件都有三個時間屬性,它們分別是atime,mtime,ctime,一般來說,atime比較好理解,但是很多時候,我們往往會混淆mtime和ctime這兩個時間屬性,或者搞不清楚兩者的區別。在展開介紹之前,我們先來看看如何查看文件的atime,mtime,ctime屬性 ...
  • 樹(tree) [一] 基本概念: ​ 日常生活中,很多數據的組織形式本質上是一棵樹。比如一個公司中的職員層級關係、一個學校中的院系層級關係、淘汰賽中的各次比賽隊伍、一個家族中的族譜成員關係等都是樹狀邏輯結構。由於樹狀結構表現出來都是具有層次的,因此也被稱為層次結構。 樹是一種非線性結構(一對多), ...
  • 數據結構 二叉樹 筆試題: 解題思路: 1.判斷是否為空樹,若為空樹,則返回0; 2.定義兩個指針備份根結點地址,定義兩個整型變數a,b並初始化為0,記錄左右子樹的深度;先對根結點的左子樹進行遍歷,若根結點的左結點不為NULL,則a++,把根結點的左結點賦值為新的根結點,再進行上述操作,若根結點的左 ...
  • 目錄通用許可權的管理擴展許可權的管理特殊許可權的管理許可權掩碼 在Linux中,許可權管理是通過文件系統中的許可權位來實現的。 通用許可權的管理 每個文件或目錄都有一個所有者、一個用戶組和其他用戶的許可權設置。主要的許可權包括讀取、寫入和執行。 文件許可權包括讀、寫和執行許可權: 讀許可權(r):允許用戶讀取文件的內容或列 ...
  • 在開始主題之前,先介紹一個刷固件工具。這個工具在 idf 中是集成的,不過,樂鑫也單獨發佈了這個工具—— esptool。下載鏈接:Releases · espressif/esptool · GitHub。這貨是用 Python 寫的,只是封裝成了 exe,方便直接運行罷了。 在使用時,需要 -p ...
  • 哈嘍大家好,我是鹹魚。(博客網址: https://xxxsalted.github.io/) 在搭建了博客並換了主題之後,發現有許多細節方面的東西還需要完善和定製化一下,比如說行距和引用的樣式我不是很喜歡,以及沒有評論功能。 於是決定自己動手,說乾就乾。 PS:下文的修改操作僅限於博客主題(Kli ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...