UNIX文件系統命令

UNIX文件系統命令簡要指南

我寫此手冊的目的是使它易於學習,記住和參考主要的UNIX文件系統實用程序。實際上,macOS和GNU / Linux都是UNIX系統。 macOS是基於BSD UNIX的認證UNIX,而GNU / Linux是類UNIX或UNIX派生產品。

在介紹了文件系統及其工作原理之後,我將介紹以下命令的詳細信息:

使用文件夾和文件

  • mkdir
  • cd
  • pwd
  • rmdir
  • ls
  • touch
  • mv
  • cp
  • ln

權限

  • chmod
  • chown
  • chgrp

文件內容

  • cat
  • less
  • find
  • cpio
  • dd
  • wc

文件系統如何工作

每個現代計算機系統都依賴於文件系統來存儲和檢索程序。並非所有內容都可以保留在內存中,這是一種寶貴且有限的資源,因此我們需要一個安全的地方來在計算機重新啟動或關閉時存儲數據。只要磁盤結構是永久性的,只要計算機重新啟動,內存就會被完全擦除。

在本指南中,我將特別研究UNIX文件系統,該文件系統可在macOS和GNU / Linux計算機上找到。 Windows文件系統有所不同,儘管Windows 10帶有適用於Linux的Windows子系統已安裝允許您使用我在此描述的相同實用程序。

文件系統從/。這是承載第一級目錄的根節點。

在UNIX系統中可以找到的常用目錄是

  • /bin包含主要係統命令
  • /etc包含系統配置
  • /dev包含系統設備
  • /usr包含用戶文件
  • /tmp包含臨時文件

…還有更多,但您明白了。

多少取決於所使用的系統類型。 Linux使用Linux Standard Base努力對文件夾進行了標準化,並且您通常具有:

  • /bin主要係統命令
  • /boot用於引導計算機的文件(在macOS上不存在)
  • /dev系統設備
  • /etc系統配置文件
  • /etc/opt用戶程序配置文件
  • /home用戶的主目錄(/ macOS中的/ Users)
  • /lib系統庫(在macOS上不存在)
  • /mnt掛載的文件系統
  • /opt用戶程序
  • /proc用戶按內核和進程(在macOS上不存在)
  • /root根用戶的主文件夾(在macOS上不存在)
  • /run(在macOS上不存在)
  • /sbin系統二進製文件用戶,用於引導系統
  • /tmp臨時文件
  • /usr擁有用戶軟件,庫和工具
  • /usr/bin用戶二進制
  • /usr/include用戶頭文件
  • /usr/lib用戶庫
  • /usr/local用戶軟件用於存儲安裝,例如macOS上的Homebrew
  • /usr/sbin系統二進製文件
  • /usr/share包含與體系結構無關的數據。它可以容納許多其他內容,包括文檔和手冊頁
  • /usr/src包含已安裝軟件包的源代碼(macOS中不存在)
  • /var包含臨時文件,日誌等

macOS具有各種不同的文件夾,包括

  • /Applications存儲用戶應用程序
  • /Library保留系統用戶全局使用的庫(設置和資源)
  • /System存放系統文件
  • /private存放系統文件,日誌等

每個文件夾包含文件和目錄,而文件和目錄又可以包含其他文件和目錄,依此類推。

所有文件和文件夾都有一個名稱。

什麼叫有效名稱?長度可以是1到255個字符,並且必須由任何字母數字字符組成(a-z/A-Z/0-9),下劃線字符(_),點(.)和逗號(,) 人物。

您也可以使用空間,儘管通常不建議這樣做,因為每次必須引用文件/文件夾時,都需要使用反斜杠來轉義空間。

根據系統的不同,文件系統可能區分大小寫。在macOS上,文件系統為不是默認情況下區分大小寫,因此您不能擁有名為test另一個叫做Test。他們是一樣的東西。

我現在將介紹各種實用程序命令。這些是在shell上下文中執行的,例如Bash,Fish或Zsh。啟動外殼程序時,您將位於主目錄中。在macOS中,可以在/Users/<yourname>/小路。

如果更改了所使用的Shell,則這些命令不會更改,因為它們是UNIX的基本基礎命令。除非計算世界發生某些革命(並且確實發生了,但是那些服務器端的事物通常運行緩慢),否則您可能會使用這些命令數十年。為了給您一些視角,mkdir您現在將看到的命令是80年代初期在UNIX AT&T版本1中引入的。

使用文件夾和文件

mkdir

您使用創建文件夾mkdir命令:

mkdir fruits

您可以使用一個命令創建多個文件夾:

mkdir dogs cars

您還可以通過添加以下內容來創建多個嵌套文件夾-p選項:

mkdir -p fruits/apples

UNIX命令中的選項通常採用這種形式。您在命令名稱後立即添加它們,它們會更改命令的行為。您通常也可以組合多個選項。

您可以通過鍵入以下內容找到命令支持的選項man <commandname>。現在嘗試man mkdir例如(按q退出手冊頁的關鍵)。手冊頁是UNIX的出色內置幫助。

cd

創建文件夾後,您可以使用cd命令。cd方法C焊割d挑釁。您調用它指定要移動到的文件夾。您可以指定文件夾名稱或整個路徑。

例子:

mkdir fruits
cd fruits

現在您進入了fruits文件夾。

您可以使用..指示父文件夾的特殊路徑:

cd .. #back to the home folder

#字符表示註釋的開始,在找到之後將持續整行。

您可以使用它來形成路徑:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

還有另一個特殊的路徑指示器是.,並指示當前的文件夾。

您還可以使用從根文件夾開始的絕對路徑/

cd /etc

pwd

每當您在文件系統中感到迷茫時,請致電pwd知道你在哪裡的命令:

pwd

它將打印當前文件夾路徑。

rmdir

就像您可以使用創建文件夾一樣mkdir,您可以使用刪除文件夾rmdir

mkdir fruits
rmdir fruits

您也可以一次刪除多個文件夾:

mkdir fruits cars
rmdir fruits cars

您刪除的文件夾必須為空。

要刪除其中包含文件的文件夾,我們將使用更通用的rm使用以下命令刪除文件和文件夾的命令-rf選項:

rm -rf fruits cars

請小心,因為此命令不會要求您確認,它會立即刪除您要刪除的所有內容。

沒有箱子從命令行刪除文件時,恢復丟失的文件可能很困難。

ls

在文件夾內,您可以使用列出文件夾中包含的所有文件。ls命令:

ls

如果添加文件夾名稱或路徑,它將打印該文件夾內容:

ls /bin

ls接受很多選擇。我最喜歡的選項組合之一是-al。試試吧:

ls -al /bin

與平原相比ls,這將返回更多信息。

您具有從左到右的位置:

  • 文件權限(如果您的系統支持ACL,則也會獲得ACL標誌)
  • 指向該文件的鏈接數
  • 文件的所有者
  • 文件組
  • 文件大小(以字節為單位)
  • 文件修改的日期時間
  • 文件名

這組數據是由l選項。這a相反,該選項還顯示隱藏的文件。

隱藏文件是指以點(.)。

touch

您可以使用touch命令:

touch apple

如果文件已經存在,它將以寫入模式打開文件,並且文件的時間戳將更新。

mv

擁有文件後,您可以使用mv命令。您指定文件的當前路徑及其新路徑:

touch test
mv pear new_pear

pear文件現在移到new_pear。這就是你改名文件和文件夾。

如果最後一個參數是文件夾,則位於第一個參數路徑的文件將被移到該文件夾中。在這種情況下,您可以指定文件列表,它們都將在最後一個參數標識的文件夾路徑中移動:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder

cp

您可以使用cp命令:

touch test
cp apple another_apple

要復製文件夾,您需要添加-r遞歸複製整個文件夾內容的選項:

mkdir fruits
cp -r fruits cars

ln

現在讓我們介紹鏈接的概念。鏈接是指向另一個文件的文件。我們在所有主要操作系統中都有這些。

我們可以創建兩種類型的鏈接:硬鏈接和符號(軟)鏈接。我們無法創建指向目錄的硬鏈接,但可以創建一個符號鏈接。因此,符號鏈接(也稱為符號鏈接)更為常見。

我們使用以下語法創建符號鏈接:ln -s original linkname。例子:

mkdir fruits
ln -s fruits newfruits

請注意我是如何使用ll命令。這不是標準命令,而是別名為了ls -al。在外殼程序中,您可以定義別名,這些別名是常見命令和參數組合的快捷方式。

權限

在介紹權限時,我曾簡要提到過權限ls -al命令。

您在每個文件行上看到的怪異字符串,例如drwxr-xr-x,定義文件或文件夾的權限。

讓我們對其進行剖析。

第一個字母表示文件的類型:

  • -表示它是普通文件
  • d表示它是一個目錄
  • l表示這是一個鏈接

然後,您有3組值:

  • 第一組代表所有者文件的
  • 第二組代表成員的權限團體該文件與
  • 第三組代表其他所有人

這些集合由3個值組成。rwx表示具體角色具有讀取,寫入和執行訪問權限。刪除的所有內容都將與-,可讓您形成值和相對權限的各種組合:rw-r--r-x, 等等。

您可以使用chmod命令。

chmod可以以2種方式使用。第一個使用符號參數,第二個使用數字參數。讓我們先從符號開始,這更加直觀。

您輸入chmod後面跟一個空格和一個字母:

  • a代表全部
  • u代表用戶
  • g代表團體
  • o代表其他

然後您輸入+或者-添加或刪除權限。然後,您輸入一個或多個權限符號(rwx)。

全部後跟文件或文件夾名稱。

這裡有些例子:

chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file

您可以將相同的權限應用於多個角色,方法是在該角色之前添加多個字母+/-

chmod og-r filename #other and group can't read any more

如果您正在編輯文件夾,則可以使用-r(遞歸)標誌。

數字參數速度更快,但是當您每天不使用它們時,我很難記住它們。您使用一個數字代表角色的權限。此數字值最多可以為7,它是通過以下方式計算的:

  • 1是否具有執行權限
  • 2如果有寫權限
  • 4如果具有閱讀權限

這給了我們4種組合:

  • 0沒有權限
  • 1可以執行
  • 2可以寫
  • 3可以編寫,執行
  • 4可以閱讀
  • 5可以閱讀,執行
  • 6可以讀,寫
  • 7可以讀取,寫入和執行

我們以3對為一組使用它們,以設置所有3個組的權限:

chmod 777 filename
chmod 755 filename
chmod 644 filename

所有者和組

您可以使用以下命令更改文件的所有者chown命令:

chown <username> <filename>

您可以使用chgrp命令:

chgrp <group> <filename>

管理文件內容

less

less命令是我經常使用的命令。它通過一個不錯的交互式UI向您顯示文件中存儲的內容。

用法:less <filename>

一旦你進入less會話中,您可以通過按退出q

您可以使用updown鍵,或使用space barb逐頁瀏覽。您也可以按以下按鈕跳到文件末尾G然後跳回到開始按g

您可以按來搜索文件內的內容/並輸入要搜索的單詞。此搜尋向前。您可以使用?符號並輸入一個單詞。

此命令僅可視化文件的內容。您可以通過按直接打開編輯器v。它將使用系統編輯器,在大多數情況下,vim

按下F密鑰輸入跟隨模式, 或者觀看模式。當文件被其他人更改時(例如從另一個程序更改),您將看到更改居住。默認情況下不會發生這種情況,並且您僅在打開文件時看到文件版本。你需要按ctrl-C退出此模式。在這種情況下,行為類似於運行tail -f <filename>命令。

您可以打開多個文件,並使用:n(轉到下一個文件)並:p(轉到上一個)。

tail

我剛才提到tail在上一個命令中,所以讓我們利用這個機會來解釋它的作用。

我認為,最好的用例是使用-f選項。它將在最後打開文件,並監視文件更改。每當文件中有新內容時,它就會打印在窗口中。這非常適合查看日誌文件,例如:

tail -f /var/log/system.log

要退出,請按ctrl-C

您可以打印文件中的最後10行:

tail -n 10 <filename>

您可以使用以下命令從特定行開始打印整個文件內容:+行號之前:

tail -n +10 <filename>

tail可以做更多的事情,一如既往,我的建議是檢查man tail

cat

如同tail以某種方式,我們有cat。除了cat還可以將內容添加到文件,這使它超級強大。

在最簡單的用法中,cat將文件的內容打印到標準輸出中:

cat file

您可以打印多個文件的內容:

cat file1 file2

並使用輸出重定向運算符>您可以將多個文件的內容串聯到一個新文件中:

cat file1 file2 > file3

使用>>您可以將多個文件的內容附加到一個新文件中,如果不存在則創建一個新文件:

cat file1 file2 >> file3

在查看源代碼文件時,很高興看到行號,並且您可以cat使用-n選項:

cat -n file1

您只能使用-b,或者您也可以使用刪除所有多個空行-s

cat通常與管道操作員結合使用|將文件內容作為另一個命令的輸入:cat file1 | anothercommand

wc

wc方法字數。這是最常見的用法:

  • wc -l file1數線
  • wc -w file1數詞
  • wc -c file1數字符
  • wc -m file1計算具有多字節支持的字符(即表情符號計數為1,而不是多個字符)

你可以跑wc提供多個文件,在這種情況下,它將分別對每個文件進行計算,然後打印摘要:

find

find命令可用於查找與特定搜索模式匹配的文件或文件夾。它遞歸搜索。

讓我們通過示例來學習它。

查找當前樹下所有具有以下內容的文件:.js擴展名並打印每個匹配文件的相對路徑:

find . -name '*.js'

在特殊字符(例如)周圍使用引號很重要*避免shell解釋它們。

在當前樹下找到與名稱“ src”匹配的目錄:

find . -type d -name src

使用-type f僅搜索文件,或-type l僅搜索符號鏈接。

-name區分大小寫。使用-iname執行不區分大小寫的搜索。

您可以在多個根樹下搜索:

find folder1 folder2 -name filename.txt

在當前樹下查找與名稱“ node_modules”或“ public”匹配的目錄:

find . -type d -name node_modules -or -name public

您還可以使用以下方法排除路徑-not -path

find . -type d -name '*.md' -not -path 'node_modules/*'

您可以搜索其中包含超過100個字符(字節)的文件:

find . -type f -size +100c

搜索大於100KB但小於1MB的文件:

find . -type f -size +100k -size -1M

搜索文件已在3天前進行了修改

find . -type f -mtime +3

搜索最近24小時內編輯的文件

find . -type f -mtime -1

您可以通過添加以下內容來刪除所有與搜索匹配的文件:-delete選項。這將刪除最近24小時內編輯的所有文件:

find . -type f -mtime -1 -delete

您可以對每個搜索結果執行命令。在此示例中,我們運行cat打印文件內容:

find . -type f -exec cat {} \;

注意終止\;{}在執行時用文件名填充。

免費下載我的Linux命令手冊


更多cli教程: