目錄
一、touch
1. 基本語法
2. 常用選項
二、which
1. 基本語法
2. 主要功能
3. 常用選項
三、find
1. 基本語法
2. 常用選項和表達式
四、more
1. 基本語法
2. 常用操作
3. 對比 more 和 less
五、grep
1. 基本語法
2. 常用選項
六、wc
1. 基本語法
2. 常用選項
七、管道符
1. 基本概念
2. 基本使用
3. 處理大文件
4. 結合awk和sed進行文本處理
5. 查找并實時監控日志文件
6. 注意事項
八、echo
1. 基本語法
2. 常用選項
3. 常見用法
九、tail
1. 基本語法
2. 常用選項
十、重定向符
1. 標準輸入、輸出和錯誤
2. 常見重定向符
一、touch
touch 主要用于創建空文件或更新現有文件的時間戳(包括訪問時間和修改時間)。它是一個簡單但功能強大的工具,廣泛應用于文件管理、腳本編寫和自動化任務中。
1. 基本語法
?touch [選項] 文件名...
如果指定的文件不存在,touch 會創建一個新的空文件。如果文件已存在,touch 默認會更新該文件的訪問時間和修改時間為當前系統時間。
2. 常用選項
-
無選項:創建新文件或更新現有文件的時間戳。
-
-a:僅改變文件的訪問時間。
-
-m:僅改變文件的修改時間。
-
-c 或 --no-create:不創建文件,如果文件不存在,則不進行任何操作。
touch -c non_existing_file.txt
-
-d 或 --date=字符串:使用指定的字符串設置文件的時間戳。
touch -d "2025-04-12 15:27:00" file.txt
-
-t:使用 [[CC]YY]MMDDhhmm[.ss] 格式的指定時間設置文件的時間戳。
touch -t 202504121527 file.txt
-
-r:使用另一個文件的時間戳來設置目標文件的時間戳。
?touch -r reference_file.txt target_file.txt
二、which
which
用于查找并顯示可執行文件的完整路徑。它通過搜索系統的 PATH
環境變量中定義的目錄,找到與指定命令對應的可執行文件的位置。which
命令的主要用途是幫助用戶快速確定某個命令的實際位置,尤其是在系統中可能存在多個同名命令時。
1. 基本語法
?which [選項] 命令名...
2. 主要功能
-
查找命令路徑:
which
會在PATH
環境變量中列出的所有目錄中搜索指定的命令,并返回第一個匹配的可執行文件的完整路徑。 -
驗證命令是否存在: 如果
which
找不到指定的命令,則說明該命令可能未安裝或不在PATH
中。
3. 常用選項
-a:顯示所有匹配的可執行文件路徑,而不僅僅是第一個。
?[itjiang@jasmine ~]$ which -a python/usr/bin/python
三、find
find 用于在文件系統中搜索文件和目錄。它可以根據多種條件(如文件名、類型、大小、修改時間等)進行搜索,并支持對找到的文件執行操作。find 命令非常靈活,適用于各種復雜的查找需求。
1. 基本語法
?find [路徑] [選項] [表達式]
-
路徑:指定搜索的起始目錄。例如 . 表示當前目錄,/ 表示根目錄。
-
選項:控制搜索行為的參數。
-
表達式:定義搜索條件和操作。
2. 常用選項和表達式
(1)按名稱查找
使用 -name 選項按文件名查找文件(區分大小寫)。要忽略大小寫,可以使用 -iname。
?[itjiang@jasmine ~]$ find /home/itjiang -name test.txt/home/itjiang/test.txt
使用 * 匹配任意文件名。* 是最常用的通配符,用于匹配任意長度的字符。
?[itjiang@jasmine ~]$ find ~ -name "test*.txt"/home/itjiang/test2.txt/home/itjiang/test1.txt/home/itjiang/test.txt
(2)按類型查找
使用 -type 選項按文件類型查找:
-
f:普通文件
-
d:目錄
-
l:符號鏈接
-
c:字符設備
-
b:塊設備
(3)按大小查找
使用 -size 選項按文件大小查找:
+n:大于 n 單位的文件
-n:小于 n 單位的文件
n:等于 n 單位的文件
單位:
-
c:字節
-
k:千字節
-
M:兆字節
-
G:千兆字節
示例:
?[itjiang@jasmine ~]$ find ~ -size +1M # 查找~目錄中大于1MB的文件/home/itjiang/.cache/tracker/meta.db/home/itjiang/.cache/tracker/meta.db-wal/home/itjiang/.cache/gnome-software/odrs/ratings.json
(4)按修改時間查找
使用 -mtime、-atime 或 -ctime 按時間查找文件:
-mtime n:文件內容最后修改時間為 n 天前。 -atime n:文件最后訪問時間為 n 天前。 -ctime n:文件狀態最后改變時間為 n 天前。 +n:超過 n 天 -n:少于 n 天
?[itjiang@jasmine ~]$ find ~ -mtime -1 # 查找最近1天內修改過的文件/home/itjiang/home/itjiang/.cache/gdm/home/itjiang/.cache/gdm/session.log.old/home/itjiang/.cache/gdm/session.log
(5)按權限查找
使用 -perm 按文件權限查找。
?[itjiang@jasmine ~]$ find ~ -perm 644 # 查找權限為 644 的文件/home/itjiang/.bash_logout/home/itjiang/.bash_profile
(6)按所有者或組查找
使用 -user 和 -group 按文件的所有者或組查找。
find /path/to/search -user username # 查找屬于某個用戶的文件
find /path/to/search -group groupname # 查找屬于某個組的文件
(7)刪除文件
使用 -delete 直接刪除找到的文件。
find /path/to/search -name "*.log" -delete
四、more
more 用于分頁查看文本文件內容。與 less 類似,more 也允許用戶逐屏瀏覽文件內容,但它提供的功能較少,且不支持向后滾動。盡管如此,對于簡單的文件瀏覽任務,more 仍然是一個實用的工具。
1. 基本語法
more [選項] 文件名...
當我們使用 more 打開一個文件時,它會顯示文件的前幾行,之后可以通過簡單的命令進行翻頁或搜索等操作。
2. 常用操作
當文件內容超過一屏時,more 會暫停并顯示當前屏幕的內容。此時可以使用以下按鍵進行導航:
-
空格鍵:向下翻一頁。
-
回車鍵:向下滾動一行。
-
/:后面跟上關鍵詞,然后按回車鍵可以在文件中向前搜索指定的文本。
-
b:僅在某些實現中有效,嘗試向后翻頁(回到之前的內容),但請注意,由于 more 的限制,這可能并不總是可用或工作如預期。
-
q:退出 more 查看器,返回到命令行提示符。
3. 對比 more 和 less
盡管 more 和 less 都用于分頁查看文件內容,它們之間存在一些關鍵差異:
-
向前和向后滾動:more 主要設計為向前瀏覽文件,雖然有些版本支持向后翻頁(b),但不如 less 方便和可靠。less 支持完全的前后移動。
-
搜索功能:兩者都支持搜索,但 less 提供更強大的搜索選項,比如區分大小寫的搜索、反向搜索等。
-
打開大文件:less 更加高效,因為它不會一次性讀取整個文件,而 more 可能在處理特別大的文件時表現不佳。
因此,雖然 more 對于簡單的需求已經足夠,但在更多高級場景下,推薦使用 less 來替代 more。然而,由于 more 的廣泛可用性和簡單性,了解其基本用法仍然很有價值。
五、grep
grep (全稱:Global Regular Expression Print)是一個強大的文本搜索工具,廣泛用于 Linux 和 Unix 系統中。它通過正則表達式(regular expressions, regex)來搜索文件中的匹配行,并輸出這些行或統計相關信息。grep 的名字來源于全球替換命令 g/re/p,意思是全局搜索正則表達式并打印出來。
1. 基本語法
grep [選項] 模式 [文件名...]
-
模式:要搜索的字符串或正則表達式。
-
文件名:要搜索的一個或多個文件。如果未指定文件名,則從標準輸入讀取數據。
2. 常用選項
-
無選項:在一個或多個文件中搜索指定模式,并顯示包含該模式的所有行。
-
-i:忽略大小寫差異進行搜索。
-
-v:反轉匹配,即顯示不包含匹配項的行。
-
-n:顯示匹配行及其所在的行號。
-
-r 或 -R:遞歸地在目錄及其子目錄中搜索文件。
-
-l:僅列出包含匹配內容的文件名,而不是具體行。
-
-c:統計每個文件中匹配的行數。
-
-E:使用擴展正則表達式(ERE)。允許使用更復雜的正則表達式功能,如 |(或)、+(一次或多次)等。
-
-w:匹配整個單詞,而非僅僅是子串。
-
-A n、-B n、-C n:分別表示顯示匹配行后 n 行、前 n 行以及前后各 n 行的內容。
六、wc
wc(word count的縮寫)用于統計文件中的字節數、字符數、單詞數和行數。它是一個非常實用的工具,常用于文本分析、腳本編寫以及日志文件處理等場景。
1. 基本語法
wc [選項] [文件名...]
如果不指定文件名,wc 將從標準輸入讀取數據。
2. 常用選項
-
無選項:默認情況下,wc 會輸出文件的行數、單詞數和字節數。輸出格式為:行數 單詞數 字節數 文件名
-
-l 或 --lines:統計文件的行數。
-
-w 或 --words:統計文件的單詞數。
-
-c 或 --bytes:統計文件的字節數。對于純文本文件,這通常等于字符數;但對于包含多字節字符的文件,則可能不同。
-
-m 或 --chars:統計文件的字符數。這對于理解文件中實際的字符數量特別有用,特別是在處理包含非ASCII字符的文件時。
-
-L 或 --max-line-length:打印最長行的長度。
七、管道符
在 Linux 和 Unix 系統中,管道符(|)是一個非常強大且常用的工具,用于將一個命令的輸出作為另一個命令的輸入。通過這種方式,用戶可以將多個命令串聯起來,以實現復雜的數據處理任務。這種機制極大地增強了命令行工具的功能性和靈活性。
1. 基本概念
管道符允許我們將前一個命令的標準輸出(stdout)直接連接到下一個命令的標準輸入(stdin)。其基本語法如下:
command1 | command2 | command3 ...
在這個例子中,command1 的輸出會成為 command2 的輸入,command2 的輸出又會成為 command3 的輸入,依此類推。
2. 基本使用
假設我們想查找某個目錄下所有包含特定關鍵字的文件,并統計有多少個這樣的文件。可以結合 grep 和 wc 來完成這個任務:
?grep -rl "search_term" /path/to/search/ | wc -l
-
grep -rl "search_term" /path/to/search/:遞歸地在指定目錄中搜索包含 "search_term" 的文件,并打印這些文件的路徑。
-
wc -l:計算由前面的 grep 命令生成的文件列表中的行數,即找到的文件數量。
3. 處理大文件
如果我們有一個很大的日志文件,并希望查看其中最常見的錯誤信息,可以結合 cat、grep、sort 和 uniq 命令來完成:
?cat large_log_file.log | grep "ERROR" | sort | uniq -c | sort -nr
-
cat large_log_file.log:讀取日志文件的內容。
-
grep "ERROR":過濾出包含 "ERROR" 的行。
-
sort:對結果進行排序。
-
uniq -c:統計每個唯一錯誤信息出現的次數(-c 選項會在每行開頭加上計數)。
-
sort -nr:按數字逆序排列結果(-n 表示按數值排序,-r 表示逆序)。
4. 結合awk和sed進行文本處理
假設我們有一個 CSV 文件,并希望提取第二列的數據,同時替換某些特定字符:
?cat data.csv | awk -F',' '{print $2}' | sed 's/old/new/g'
-
cat data.csv:讀取 CSV 文件內容。
-
awk -F',' '{print $2}':設置字段分隔符為逗號,并打印第二列的數據。
-
sed 's/old/new/g':將上一步輸出中的 "old" 替換為 "new"。
5. 查找并實時監控日志文件
如果我們想實時監控一個日志文件,并只顯示包含特定關鍵詞的新添加的行,可以使用 tail 和 grep:
tail -f logfile.log | grep "keyword"
-
tail -f logfile.log:實時顯示 logfile.log 中追加的數據。
-
grep "keyword":從實時流中篩選出包含 "keyword" 的行。
6. 注意事項
考慮效率:管道連接的命令序列應該盡可能簡潔高效,因為數據需要經過多次傳遞。如果處理的數據量非常大,可能需要考慮優化或使用更高效的方法(如使用專門的工具或腳本)。
標準錯誤處理:默認情況下,只有標準輸出可以通過管道傳輸,而標準錯誤(stderr)不會被傳遞。如果需要處理標準錯誤,可以將其重定向到標準輸出再通過管道傳輸:
command 2>&1 | other_command
緩沖問題:某些命令可能會對輸出進行緩沖,這可能導致管道鏈中的延遲或行為不符合預期。在這種情況下,可以嘗試使用 stdbuf 或者相應命令的選項來調整緩沖行為。
八、echo
echo
用于在終端中輸出文本或變量的值。它常用于腳本編寫、調試以及生成文件內容等任務。盡管功能簡單,但它是日常操作和自動化任務中非常實用的工具。
1. 基本語法
echo [選項] [字符串]
-
字符串:要輸出的文本或變量。
-
選項:控制輸出格式的參數。
-
``:反引號包圍的內容會作為命令執行,而不是普通的字符串。
2. 常用選項
-
無選項: 默認情況下,
echo
會輸出指定的字符串,并在末尾添加一個換行符。
-
-n
: 不輸出末尾的換行符。
-
-e
: 啟用轉義字符解釋(如\n
換行、\t
制表符等)。
-
-E
(默認行為): 禁用轉義字符解釋。
3. 常見用法
輸出普通文本:直接輸出一段文本:
輸出變量值:結合變量使用,輸出變量的內容:
?name="Tom"echo "Hello, $name!"# 輸出:Hello, Tom!
使用轉義字符:啟用 -e
選項后,可以使用以下常見的轉義字符:
-
\n
:換行 -
\t
:制表符 -
\\
:反斜杠 -
\"
:雙引號
九、tail
tail 主要用于查看文件的尾部內容。它特別適用于實時監控日志文件或查看大文件的最后幾行,因為直接打開大型文件可能會消耗大量資源或者不方便瀏覽最新的信息。tail 命令可以顯示文件的末尾部分,并支持動態跟蹤文件的更新。
1. 基本語法
tail [選項] 文件名...
如果不指定文件名,tail 將從標準輸入讀取數據。
2. 常用選項
-
無選項:默認情況下,tail 顯示文件的最后 10 行。
-
-n 或 --lines=:指定要顯示的行數。例如,顯示文件的最后 20 行。
tail -n 20 filename.txt
-
-c 或 --bytes=:顯示文件的最后 N 個字節的內容。
-
-f 或 --follow:實時輸出文件新增加的內容(常用于監視日志文件的變化)。當文件被追加內容時,tail 會持續顯示這些新內容。
tail -f logfile.log
-
-q 或 --quiet 或 --silent:不顯示文件名頭信息,當同時查看多個文件時有用。
tail -q -n 10 file1.txt file2.txt
-
-v 或 --verbose:對每個文件都顯示其文件名頭信息。
十、重定向符
重定向符(Redirection Operators)用于改變命令的標準輸入、標準輸出和標準錯誤的默認行為。通常情況下,程序的標準輸入來自鍵盤,標準輸出和標準錯誤則顯示在終端屏幕上。通過使用重定向符,用戶可以將這些數據流重定向到文件或其他設備。
1. 標準輸入、輸出和錯誤
-
標準輸入(stdin):文件描述符為 0,默認來自鍵盤。
-
標準輸出(stdout):文件描述符為 1,默認輸出到終端。
-
標準錯誤(stderr):文件描述符為 2,默認輸出到終端。
重定向符允許我們改變這些默認行為。
2. 常見重定向符
(1) 輸出重定向 (> 和 >>)
>
:將標準輸出重定向到文件。如果文件已存在,則覆蓋其內容;如果文件不存在,則創建新文件。
?echo "Hello, World!" > output.txt
將字符串 "Hello, World!" 寫入 output.txt 文件中。
>>
:將標準輸出追加到文件末尾。如果文件不存在,則創建新文件。
?echo "Another line" >> output.txt
將字符串 "Another line" 追加到 output.txt 的末尾。
(2) 輸入重定向 (<)
<
:將文件內容作為命令的標準輸入。
?wc -l < input.txt
統計 input.txt 文件中的行數。
(3) 錯誤重定向 (2> 和 2>>)
2>
:將標準錯誤重定向到文件。如果文件已存在,則覆蓋其內容。
?ls /nonexistent_directory 2> error.log
如果 /nonexistent_directory 不存在,則錯誤信息會被寫入 error.log 文件。
2>>
:將標準錯誤追加到文件末尾。
?ls /another_nonexistent_directory 2>> error.log
將新的錯誤信息追加到 error.log 文件中。