@TOC


📝前言

本文將介紹Linux系統中的常用命令:mv、cat、echo、重定向、head和tail,主要用於文件管理和數據處理。重點講解mv命令和重定向的示例,最後演示如何用head和tail快速提取大型文件中的指定行。

🌠 mv指令(重要):

mv命令是move的縮寫,可以用來移動文件或者將文件改名(move (rename) files),是Linux系統下常用的命 令,經常用來備份文件或者目錄。

語法: mv [選項] 源文件或目錄 目標文件或目錄 功能:

  1. 視mv命令中第二個參數類型的不同(是目標文件還是目標目錄),mv命令將文件重命名或將其移至一個新的 目錄中。
  2. 當第二個參數類型是文件時,mv命令完成文件重命名,此時,源文件只能有一個(也可以是源目錄名),它 將所給的源文件或目錄重命名為給定的目標文件名。
  3. 當第二個參數是已存在的目錄名稱時,源文件或目錄參數可以有多個,mv命令將各參數指定的源文件均移至 目標目錄中。

功能圖示總結:

Linux管理文件與處理數據_標準輸出

Linux管理文件與處理數據_文件描述符_02

Linux管理文件與處理數據_文件描述符_03

常用選項: -fforce 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋 -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 命令你已經完成了輸入,它會退出輸入模式。

Linux管理文件與處理數據_文件描述符_04

  1. 合併多個文件內容:
cat file1.txt file2.txt file3.txt > combined.txt

這將把 file1.txtfile2.txtfile3.txt 的內容合併到 combined.txt 文件中。

  1. 創建新文件:
cat > new_file.txt

-> 輸入數據+回車

這將在終端中創建一個新文件 `new_file.txt`,並將輸入的內容寫入其中。按 `Ctrl+D` 結束輸入。
帶行號查看文件內容:如果打印顯示需要行號,則輸入`cat -n new_file.txt`,其他同理。
![在這裏插入圖片描述](https://i-blog.csdnimg.cn/direct/466a3373df4f40638ad4d98a405bd3f7.png)
# 🌠less
`tac` 命令與 `cat` 命令類似,但它是以相反的順序顯示文件內容。

基本語法:

```powershell

使用示例:

  1. 查看文件內容,以相反順序顯示:
    tac file.txt
    這將以從下到上的順序顯示 file.txt 文件的內容。
  2. 合併多個文件內容,並以相反順序顯示:
    tac file1.txt file2.txt file3.txt
    這將先顯示 file3.txt 的內容,然後是 file2.txt,最後是 file1.txt
  3. 創建新文件:
tac > new_file.txt
   -> 輸入數據+回車

這將創建一個新文件 new_file.txt,並將輸入的內容以相反順序寫入其中。按 Ctrl+D 結束輸入。

cat 命令相比, tac 命令主要的區別就是它會以相反的順序顯示或寫入文件內容。除此之外,它們的用法基本相同。

Linux管理文件與處理數據_重定向_05

🌠linux文件

Linux下一切皆文件。 鍵盤,顯示器---文件來看待---- printf/cout---我們向顯示器進行打印----向顯示器文件進行寫入scanf/cin -+-鍵盤讀取數據---從鍵盤文件中讀取數據

在Linux中,"一切皆文件"的理念確實很有趣。拓展閲讀了解:

  1. 鍵盤和顯示器作為文件
  • 鍵盤:在Linux中,鍵盤輸入通常通過特殊的設備文件來處理。例如,/dev/tty/dev/ttyS0(串口設備)、/dev/input/event0(輸入事件)等設備文件對應着不同的輸入設備。程序可以通過讀取這些文件來獲取來自鍵盤的輸入數據。
  • 顯示器:顯示器也是通過設備文件進行操作的。例如,/dev/tty/dev/console文件可以用來向終端顯示內容。此外,圖形顯示器的操作通常涉及到更復雜的圖形系統(如X Window系統),但底層的圖形設備還是通過設備文件來管理的。
  1. 標準輸入輸出
  • printf/cout:在C/C++程序中,printfcout用於向標準輸出(通常是顯示器)寫入數據。這實際上是向標準輸出設備文件(如/dev/tty)寫入數據。操作系統會將這些數據渲染到顯示器上。
  • scanf/cin:同樣,scanfcin用於從標準輸入(通常是鍵盤)讀取數據。程序通過讀取標準輸入設備文件(如/dev/tty)來獲取用户的輸入數據。
  1. 文件描述符
  • 在Linux中,標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)分別對應文件描述符0、1和2。這些文件描述符指向相應的設備文件,操作這些文件描述符就是在進行設備操作。例如,printf操作的是標準輸出的文件描述符1,而scanf操作的是標準輸入的文件描述符0。

這個設計使得程序可以用一致的方式處理各種輸入和輸出設備,不需要特別為每種設備編寫代碼。無論是與文件、網絡還是設備交互,程序員都可以通過類似的接口進行操作。這種設計理念極大地提高了系統的靈活性和可擴展性。

🌉echo 與 >

echo 命令是一個非常常見和基本的 Linux/Unix 命令,它用於在終端或控制枱上輸出文本或變量的值。

基本語法:

echo [選項] [字符串]

常用選項:

  • -n: 不輸出結尾的換行符
  • -e: 啓用轉義字符解釋

使用示例:

  1. 向顯示器文件進行寫入
echo "Hello, world!"

輸出:

Linux管理文件與處理數據_文件描述符_06

  1. 輸出變量值:
NAME="Linux"
 echo "My name is $NAME"

輸出:

Linux管理文件與處理數據_文件描述符_07

  1. 使用選項:
echo -n "Enter your name: "
read name
echo -e "Hello, $name!\n"

輸出:

Enter your name: Linux
Hello, Linux!
  1. 將輸出重定向到文件:
echo "This is a test." > test.txt

這將把 "This is a test." 寫入到 test.txt 文件中。

Linux管理文件與處理數據_標準輸出_08

🌠Linux的重定向技術

Linux的重定向技術允許你將輸入輸出流重新指向文件或其他設備,而不是使用默認的標準輸入(stdin)、標準輸出(stdout)或標準錯誤(stderr)。

  1. 輸出重定向

將命令的輸出發送到文件而不是顯示器上。

  • 基本輸出重定向
command > file.txt
  • 這會將 command 的標準輸出重定向到 file.txt 文件。如果文件已存在,它會被覆蓋。
  • 追加輸出重定向
command >> file.txt
  • 這會將 command 的標準輸出追加到 file.txt 文件末尾,而不會覆蓋原有內容。
  1. 輸入重定向

將命令的輸入從文件讀取,而不是從鍵盤讀取。

  • 基本輸入重定向
command < file.txt

輸入重定向,本來應該默認從鍵盤文件來,<∶更改成為從指定文件中讀取數據

Linux管理文件與處理數據_文件描述符_09

  1. 錯誤重定向

將命令的標準錯誤輸出重定向到文件。

  • 標準錯誤重定向
command 2> error.txt

這會將 command 的標準錯誤(文件描述符2)重定向到 error.txt 文件。

  • 追加標準錯誤重定向
command 2>> error.txt

這會將 command 的標準錯誤追加到 error.txt 文件末尾。

  1. 同時重定向標準輸出和標準錯誤
  • 將標準輸出和標準錯誤重定向到同一文件
command > all_output.txt 2>&1
  • 這會將 command 的標準輸出和標準錯誤都重定向到 all_output.txt 文件。2>&1 的意思是將標準錯誤(文件描述符2)重定向到標準輸出(文件描述符1)。
  1. 管道

管道將一個命令的輸出直接傳遞給另一個命令作為輸入。

  • 基本管道用法
command1 | command2
  • 這會將 command1 的標準輸出作為 command2 的標準輸入進行處理。例如:
ls | grep "txt"
  • 這會列出當前目錄中的所有文件,然後用 grep 過濾出包含 "txt" 的文件名。
文章下面使用tailhead時有清晰的認識:

Linux管理文件與處理數據_重定向_10

  1. 使用 tee 命令

tee 命令可以將標準輸出同時寫入文件和終端。

  • 基本用法
command | tee file.txt

這會將 command 的輸出同時寫入 file.txt 文件和終端顯示器上。

  • 追加用法
command | tee -a file.txt

這會將 command 的輸出追加到 file.txt 文件末尾,同時也輸出到終端。

  1. 文件描述符

在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 文件中。

Linux管理文件與處理數據_標準輸出_11

分析:

  1. cnt=1 將變量 cnt 初始化為 1。
  2. while [ $cnt -le 10000 ]; do ... done 開始一個 while 循環,只要 $cnt 小於等於 10000,就執行循環體中的命令。
  3. echo "hello $cnt" 在每次循環中輸出 "hello" 後跟當前 $cnt 的值。
  4. let cnt++((cnt++)) 遞增 cnt 變量的值。這兩種寫法都可以實現讓 cnt 變量自增 1。
  5. > log.txt 將循環過程中輸出的所有內容重定向到 log.txt 文件中。

🌉head指令

headtail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾

語法:

head [參數]... [文件]...

功能:head 用來顯示檔案的開頭至標準輸出中,默認head命令打印其相應文件的開頭10行。
選項:

-n<行數> 顯示的行數

舉個例子:

head -5020 log.txt

Linux管理文件與處理數據_重定向_12

Linux管理文件與處理數據_重定向_13

🌉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

Linux管理文件與處理數據_文件描述符_14

當然這個方法需要兩步,有些繁瑣,我們可以使用管道 | 一步搞定:

Linux管理文件與處理數據_標準輸出_15

管道還可以多重利用,然後進行加工:

head -5020 log.txt | tail -21 | cat | tac | wc -l     //末尾這個是l不是管道|,也不是數字1

這裏的wc -l:計算行數

Linux管理文件與處理數據_重定向_16

管道圖解:

Linux管理文件與處理數據_文件描述符_17


🚩總結

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