@TOC
📝前言
本文將介紹Linux系統中的常用命令:mv、cat、echo、重定向、head和tail,主要用於文件管理和數據處理。重點講解mv命令和重定向的示例,最後演示如何用head和tail快速提取大型文件中的指定行。
🌠 mv指令(重要):
mv命令是move的縮寫,可以用來移動文件或者將文件改名(move (rename) files),是Linux系統下常用的命 令,經常用來備份文件或者目錄。
語法: mv [選項] 源文件或目錄 目標文件或目錄 功能:
- 視mv命令中第二個參數類型的不同(是目標文件還是目標目錄),mv命令將文件重命名或將其移至一個新的 目錄中。
- 當第二個參數類型是文件時,mv命令完成文件重命名,此時,源文件只能有一個(也可以是源目錄名),它 將所給的源文件或目錄重命名為給定的目標文件名。
- 當第二個參數是已存在的目錄名稱時,源文件或目錄參數可以有多個,mv命令將各參數指定的源文件均移至 目標目錄中。
功能圖示總結:
常用選項: -
f:force強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋 -i:若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
舉例:
將rm改造成mv
vim ~/.bashrc #修改這個文件
mkdir -p ~/.trash
alias rm=trash
alias ur=undelfile
undelfile() {
mv -i ~/.trash/\$@ ./
}
trash() {
mv $@ ~/.trash/
}
🌉cat
語法:cat [選項][文件] 功能: 查看目標文件的內容 常用選項:
b對非空輸出行編號n對輸出的所有行編號s不輸出多行空行
普通的輸入cat,在顯示器上輸入什麼,回車就打印什麼。要退出這種普通輸入模式,你可以按下 Ctrl+D 組合鍵。這樣會告訴 cat 命令你已經完成了輸入,它會退出輸入模式。
- 合併多個文件內容:
cat file1.txt file2.txt file3.txt > combined.txt
這將把 file1.txt、file2.txt 和 file3.txt 的內容合併到 combined.txt 文件中。
- 創建新文件:
cat > new_file.txt
-> 輸入數據+回車
這將在終端中創建一個新文件 `new_file.txt`,並將輸入的內容寫入其中。按 `Ctrl+D` 結束輸入。
帶行號查看文件內容:如果打印顯示需要行號,則輸入`cat -n new_file.txt`,其他同理。

# 🌠less
`tac` 命令與 `cat` 命令類似,但它是以相反的順序顯示文件內容。
基本語法:
```powershell
使用示例:
- 查看文件內容,以相反順序顯示:
tac file.txt
這將以從下到上的順序顯示file.txt文件的內容。 - 合併多個文件內容,並以相反順序顯示:
tac file1.txt file2.txt file3.txt
這將先顯示file3.txt的內容,然後是file2.txt,最後是file1.txt。 - 創建新文件:
tac > new_file.txt
-> 輸入數據+回車
這將創建一個新文件 new_file.txt,並將輸入的內容以相反順序寫入其中。按 Ctrl+D 結束輸入。
與 cat 命令相比, tac 命令主要的區別就是它會以相反的順序顯示或寫入文件內容。除此之外,它們的用法基本相同。
🌠linux文件
Linux下一切皆文件。 鍵盤,顯示器---文件來看待---- printf/cout---我們向顯示器進行打印----向顯示器文件進行寫入scanf/cin -+-鍵盤讀取數據---從鍵盤文件中讀取數據
在Linux中,"一切皆文件"的理念確實很有趣。拓展閲讀了解:
- 鍵盤和顯示器作為文件:
- 鍵盤:在Linux中,鍵盤輸入通常通過特殊的設備文件來處理。例如,
/dev/tty、/dev/ttyS0(串口設備)、/dev/input/event0(輸入事件)等設備文件對應着不同的輸入設備。程序可以通過讀取這些文件來獲取來自鍵盤的輸入數據。 - 顯示器:顯示器也是通過設備文件進行操作的。例如,
/dev/tty或/dev/console文件可以用來向終端顯示內容。此外,圖形顯示器的操作通常涉及到更復雜的圖形系統(如X Window系統),但底層的圖形設備還是通過設備文件來管理的。
- 標準輸入輸出:
printf/cout:在C/C++程序中,printf和cout用於向標準輸出(通常是顯示器)寫入數據。這實際上是向標準輸出設備文件(如/dev/tty)寫入數據。操作系統會將這些數據渲染到顯示器上。scanf/cin:同樣,scanf和cin用於從標準輸入(通常是鍵盤)讀取數據。程序通過讀取標準輸入設備文件(如/dev/tty)來獲取用户的輸入數據。
- 文件描述符:
- 在Linux中,標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)分別對應文件描述符0、1和2。這些文件描述符指向相應的設備文件,操作這些文件描述符就是在進行設備操作。例如,
printf操作的是標準輸出的文件描述符1,而scanf操作的是標準輸入的文件描述符0。
這個設計使得程序可以用一致的方式處理各種輸入和輸出設備,不需要特別為每種設備編寫代碼。無論是與文件、網絡還是設備交互,程序員都可以通過類似的接口進行操作。這種設計理念極大地提高了系統的靈活性和可擴展性。
🌉echo 與 >
echo 命令是一個非常常見和基本的 Linux/Unix 命令,它用於在終端或控制枱上輸出文本或變量的值。
基本語法:
echo [選項] [字符串]
常用選項:
-n: 不輸出結尾的換行符-e: 啓用轉義字符解釋
使用示例:
- 向顯示器文件進行寫入
echo "Hello, world!"
輸出:
- 輸出變量值:
NAME="Linux"
echo "My name is $NAME"
輸出:
- 使用選項:
echo -n "Enter your name: "
read name
echo -e "Hello, $name!\n"
輸出:
Enter your name: Linux
Hello, Linux!
- 將輸出重定向到文件:
echo "This is a test." > test.txt
這將把 "This is a test." 寫入到 test.txt 文件中。
🌠Linux的重定向技術
Linux的重定向技術允許你將輸入輸出流重新指向文件或其他設備,而不是使用默認的標準輸入(stdin)、標準輸出(stdout)或標準錯誤(stderr)。
- 輸出重定向
將命令的輸出發送到文件而不是顯示器上。
- 基本輸出重定向:
command > file.txt
- 這會將
command的標準輸出重定向到file.txt文件。如果文件已存在,它會被覆蓋。 - 追加輸出重定向:
command >> file.txt
- 這會將
command的標準輸出追加到file.txt文件末尾,而不會覆蓋原有內容。
- 輸入重定向
將命令的輸入從文件讀取,而不是從鍵盤讀取。
- 基本輸入重定向:
command < file.txt
輸入重定向,本來應該默認從鍵盤文件來,<∶更改成為從指定文件中讀取數據
- 錯誤重定向
將命令的標準錯誤輸出重定向到文件。
- 標準錯誤重定向:
command 2> error.txt
這會將 command 的標準錯誤(文件描述符2)重定向到 error.txt 文件。
- 追加標準錯誤重定向:
command 2>> error.txt
這會將 command 的標準錯誤追加到 error.txt 文件末尾。
- 同時重定向標準輸出和標準錯誤
- 將標準輸出和標準錯誤重定向到同一文件:
command > all_output.txt 2>&1
- 這會將
command的標準輸出和標準錯誤都重定向到all_output.txt文件。2>&1的意思是將標準錯誤(文件描述符2)重定向到標準輸出(文件描述符1)。
- 管道
管道將一個命令的輸出直接傳遞給另一個命令作為輸入。
- 基本管道用法:
command1 | command2
- 這會將
command1的標準輸出作為command2的標準輸入進行處理。例如:
ls | grep "txt"
- 這會列出當前目錄中的所有文件,然後用
grep過濾出包含 "txt" 的文件名。
文章下面使用tail與head時有清晰的認識:
- 使用
tee命令
tee 命令可以將標準輸出同時寫入文件和終端。
- 基本用法:
command | tee file.txt
這會將 command 的輸出同時寫入 file.txt 文件和終端顯示器上。
- 追加用法:
command | tee -a file.txt
這會將 command 的輸出追加到 file.txt 文件末尾,同時也輸出到終端。
- 文件描述符
在Linux中,除了標準輸入(0)、標準輸出(1)和標準錯誤(2)之外,你還可以使用其他文件描述符進行重定向。你可以自定義文件描述符進行高級操作。
- 示例:
exec 3> file.txt
echo "Hello, World!" >&3
exec 3>&-
- 這會將 "Hello, World!" 寫入
file.txt,使用了文件描述符3。
🌠準備指令
我們先往文件寫點內容,往下舉例子用到:
[root@hcss-ecs-ab43 ~]# cnt=1; while [ $cnt -le 10000 ]; do echo "hello $cnt"; let cnt++; done > log.txt
[root@hcss-ecs-ab43 ~]# ll
total 108
-rw-r--r-- 1 root root 108894 Aug 10 15:28 log.txt
這個命令會輸出 10000 行 "hello 1", "hello 2", ... "hello 10000",並將這些輸出重定向保存到 log.txt 文件中。
分析:
cnt=1將變量cnt初始化為 1。while [ $cnt -le 10000 ]; do ... done開始一個while循環,只要$cnt小於等於 10000,就執行循環體中的命令。echo "hello $cnt"在每次循環中輸出 "hello" 後跟當前$cnt的值。let cnt++或((cnt++))遞增cnt變量的值。這兩種寫法都可以實現讓cnt變量自增 1。> log.txt將循環過程中輸出的所有內容重定向到log.txt文件中。
🌉head指令
head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾
語法:
head [參數]... [文件]...
功能:head 用來顯示檔案的開頭至標準輸出中,默認head命令打印其相應文件的開頭10行。
選項:
-n<行數> 顯示的行數
舉個例子:
head -5020 log.txt
🌉tail指令
tail 命令從指定點開始將文件寫到標準輸出.使用tail命令的-f選項可以方便的查閲正在改變的日誌文件,tail -f filename會把filename裏最尾部的內容顯示在屏幕上,並且不但刷新,使你看到最新的文件內容.
語法: tail[必要參數][選擇參數][文件]
功能: 用於顯示指定文件末尾內容,不指定文件時,作為輸入信息進行處理。常用查看日誌文件。 選項: -f 循環讀取-n<行數> 顯示行數
舉個例子:如果我們要把一個log.txt數據中[5000,5020]行拿出來,怎麼做呢?我先把log.txt的前5020行放到new.txt中,然後再取尾部21行。
[root@hcss-ecs-ab43 ~]# head -5020 log.txt >new.txt
[root@hcss-ecs-ab43 ~]# tail -21 new.txt
當然這個方法需要兩步,有些繁瑣,我們可以使用管道 | 一步搞定:
管道還可以多重利用,然後進行加工:
head -5020 log.txt | tail -21 | cat | tac | wc -l //末尾這個是l不是管道|,也不是數字1
這裏的wc -l:計算行數
管道圖解:
🚩總結
mv指令(重要):- 用於移動或重命名文件和目錄mv src[文件、目錄]dst[路徑、文件] 1.剪切文件、目錄 mv src文件-->重命名mv hello.txt world.txt ->hello.txt->wor1d.txt 2.重命名 mv src路徑-->剪切mvmv world.txt dir1/test/
cat 命令:功能: 查看目標文件的內容
echo 與 >
echo用於在終端中輸出文本。- 用於將輸出重定向到文件。
Linux的重定向技術
- 介紹了 Linux 的重定向概念,包括輸入重定向
<、輸出重定向>、追加重定向>>等。head指令
- 用於顯示文件的前幾行內容。tail指令
- 用於顯示文件的後幾行內容。小例子:head -5020 log.txt | tail -21 | cat | tac | wc -l