收藏 | 15 個你非瞭解不可的 Linux 特殊字元,媽媽再也不用擔心我看不懂這些符號了!

来源:https://www.cnblogs.com/yychuyu/archive/2020/03/30/12601667.html
-Advertisement-
Play Games

不知道大家接觸 Linux 系統有多久了,可曾瞭解過 Linux 中有哪些特殊的字元呢?其實啊,那些特殊字元都大有用處呢,今天的文章就給大家簡單地科普一下 Linux 中你需要瞭解的 15 個特殊字元,想學或剛學 Linux 的小伙伴趕緊上車了為! ~ 主目錄 這個波浪號 ~ 指的是 主目錄 ,也就 ...


不知道大家接觸 Linux 系統有多久了,可曾瞭解過 Linux 中有哪些特殊的字元呢?其實啊,那些特殊字元都大有用處呢,今天的文章就給大家簡單地科普一下 Linux 中你需要瞭解的 15 個特殊字元,想學或剛學 Linux 的小伙伴趕緊上車了為!

~ 主目錄

這個波浪號 ~ 指的是主目錄,也就是我們用戶的個人目錄,無論你身在何方,輸入 cd ~ 它將帶你回家!

cd ~

更高端的玩法就是在它後面加上具體的路徑,直接定位到家目錄中的指定位置,是不是很方便呢?

cd ~/work/archive

. 當前目錄

英文句號 . 代表當前目錄,我們來看一下當前目錄下的全部文件:

ls -al

紅圈裡的 . 就是指當前目錄,不過這沒什麼意義,我們更多的是在命令中使用它,如下:

./script.sh

這樣做是在告訴 bash 只要在當前目錄中查找並執行 script.sh 文件就好了,不用在路徑中找了。

.. 父目錄

兩個英文句號 .. 代表父目錄,也就是當前目錄的上一級目錄。假設我們要回到上一級目錄:

cd ..

跟前面一樣,你可以在它後面加具體的目錄,這裡的意思就是定位到與當前目錄同級的其它目錄:

cd ../projects/

/ 路徑目錄分隔符

斜杠 "/" 指的是路徑目錄分隔符,這裡沒什麼好說的。

ls ~/work/tests/

但是,有意思的是,如果 / 路徑目錄分隔符前面沒有東西的話,是不是就是意味著這是最上級的目錄了?由於 Linux 系統的目錄樹均始於 / ,所以僅僅一個 / 代表了我們常說的系統根目錄

cd /

# 註釋

# 開頭,代表這句話是註釋

# This will be ignored by the Bash shell

雖然上面那段話就被忽略了,但它還是會添加到您的命令歷史記錄中。

更厲害的做法如下:

先定義一個變數並給它賦值字元串 “amazing alvin”

this_string="amazing alvin"

${this_string#amazing} 返回的是被註釋掉 amazing 的 this_string 字元串變數,可以 echo 輸出看下結果:

echo awsome ${this_string#amazing}

amazing 只是被註釋掉而已,它並未被刪除,去掉註釋它就回來了:

echo $this_string

? 單字元通配符

問號 "?",指的是單字元通配符Bash Shell 支持三種通配符

它代表文件名中任意一個字元的匹配,例如:

ls badge?.txt

註意,它與 badge.txt 是不匹配滴,因為 badge 後面沒有字元。

正因為 "?" 匹配單個字元,所以這裡有個看似很厲害的玩法,就是你想要的找的文件的文件名有多少個字元,你就輸入多少個 "?"

ls ?????.txt

看著挺厲害,不過我怎麼感覺這好彆扭?????

* 字元序列通配符

星號 * 代表的是任意字元序列匹配任意字元,包括空字元,以剛纔的 badge 為例:

ls badge*

可以看到,badge.txt 都匹配到了。

匹配任意類型的文件:

ls source.*

[] 字元集通配符

方括弧 "[]" 指的是字元集通配符,文件名中的相關字元必須與字元集中的至少一個字元匹配。通過例子來體會一下它的作用吧:

ls badge_0[246].txt

ls badge_[01][789].txt

ls badge_[23][1-5].txt

; 命令分隔符

這跟我們日常使用的 ";" 差不多,就不細說了,主要是用來分隔命令的。

ls > count.txt; wc -l count.txt; rm count.txt

這裡註意,用 ; 分隔命令時,即使第一個命令失敗,第二個命令也會運行,即使第二個命令失敗,第三個命令也會運行,依此類推。

如果要在一個命令失敗的情況下就停止,請使用 "&&" ,如下:

cd ./doesntexist && cp ~/Documents/reports/* .

& 後臺處理

有時候在終端正在運行一個命令時,例如 vim,你想運行另外一個命令怎麼辦?這裡有個小技巧就是在命令後面加一個 "&" 符號,將這個程式放在後臺啟動,這樣你就能在終端實現後臺多任務的效果了。

vim command_address.page &

上面顯示的是這個後臺進程的 ID 。

< 輸入重定向

許多 Linux 命令接受一個文件作為參數,並從該文件中獲取數據。這些命令中的大多數還可以從流中獲取輸入。要創建一個流,可以使用左尖括弧 "<" ,如下將文件重定向到命令中:

sort < words.txt

上面將 words.txt 文件的內容併進行了排序。

註意:它是不顯示數據來源文件的文件名的。

wc words.txt
wc < words.txt

> 輸出重定向

輸入和輸出是相反的,很好理解。用右尖括弧 ">" 將命令的輸出重定向,通常是重定向到文件中

ls > files.txt
cat files.txt

高端玩家還可以和數字一同使用:

wc doesntexist.txt 2> errors.txt
cat errors.txt

這裡的 2 是一個文件描述符,表示標準錯誤(stderr)

大家感興趣的可以去搜索下文件描述符 stdin,stdout,stderr 是什麼?

| 連接命令

我們可以將 " | " 看成將命令鏈接在一起的管道。它從一個命令獲取輸出,並將其作為輸入送入下一個命令。管道命令的數量是任意的。

cat words.txt | grep [cC] | sort -r

解釋下,上面先使用 cat 將 words.txt 文件的內容輸入 grep , 然後 grep 提取包含小寫或大寫(C/c)的任何行,接著 grep 將這些行傳遞給 sort ,最後 sort 進行 -r 反向排序。

! 邏輯非

這跟編程語言中的 " ! " 差不多,我們直接拿個例子來說吧:

[ ! -d ./backup ] && mkdir ./backup

第一個命令 -d 判斷當前目錄是否存在 backup 的目錄文件,外面加個邏輯非 ! 判斷,
第二個命令是創建 backup 目錄文件,
中間的 && 上面說過。
總的來說就是當 backup 目錄不存在時,創建 backup 目錄;當不存在時則不執行第二條命令。

不妨看下文件夾的備份狀態:

ls -l -d backup

" ! " 的另一個用法就是重新運行歷史命令:

!24
!!

" !! " 是重新運行上一條命令的意思。

$ 變數表達式

"$" 開頭通常表示變數,下麵是一些系統變數:

echo $USER
echo $HOME
echo $PATH

當然,你也可以自己定義變數然後輸出:

ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

我們還可以通過 "{}" 解鎖更高級的玩法:

先定義一個變數 MyString 並給它賦值 123456qwerty

MyString=123456qwerty

正常輸出

echo ${MyString}

加個 ":6" 返回從索引位置 6 開始的一直到最後的字元串

echo ${MyString:6}

顯示從索引位置從 0 開始往後 6 個字元的字元串

echo ${MyString:0:6}

顯示從索引位置從 4 開始往後 4 個字元的字元串

echo ${MyString:4:4}

引用特殊字元

說了那麼多,那麼就有個問題了,就是我只想在命令裡面將這些特殊字元作為一般的符號顯示怎麼辦?這種我們稱之為引用,Linux 中有三種引用方法。

用雙引號 "" 括起來,不過這對 "$" 無效。

echo "Today is $(date)"

用單引號 '' 括起來,停止所有特殊字元的功能

echo 'Today is $(date)'

反斜杠 \ 轉義,這在很多場合都有通用的。

echo "Today is \$(date)"

今天的科普文章有點長,大家慢慢消化哈。

看完的都是真愛,點個贊再走唄?您的「三連」就是良許持續創作的最大動力!

  1. 關註原創公眾號「良許Linux」,第一時間獲取最新Linux乾貨!
  2. 公眾號後臺回覆【資料】【面試】【簡歷】獲取精選一線大廠面試、自我提升、簡歷等資料。
  3. 關註我的博客:lxlinux.net

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

-Advertisement-
Play Games
更多相關文章
  • 在偶然一次調試某程式時,遇到提示: 無法載入程式集*****.XmlSerializers.dll,文件找不到(Could not load file or assembly ****.XmlSerializers.dll , FileNotFoundException...)。於是嘗試在項目屬性中 ...
  • 首先,好消息是Goole將於2020年2月份發佈Chrome 80版本。本次發佈將推進Google的“漸進改良Cookie”策略,打造一個更為安全和保障用戶隱私的網路環境。 壞消息是,本次更新可能導致瀏覽器無法向服務端發送Cookie。如果你有多個不同功能變數名稱的應用,部分用戶很有可能出現會話時常被打斷的 ...
  • TerminalMACS(Terminal Manager And Check System) 遠程終端管理和檢測系統 本文同步更新地址:https://dotnet9.com/11429.html 一、本系統可監控多種終端資源: 移動端 Android iOS PC端 Windows Linux ...
  • 一、引言 RabbitMQ是Rabbit Message Queue的簡寫,但不能僅僅理解其為消息隊列,消息代理更合適。RabbitMQ是一個由 Erlang 語言開發的AMQP(高級消息隊列協議)的開源實現,其內部結構如下: RabbitMQ作為一個消息代理,主要和消息打交道,負責接收並轉發消息。 ...
  • 本文主要是講解stopwatch對程式運行時間的準確測量 僅僅介紹裡面的StartNew()方法,Restart()方法和ElapsedMilliseconds { get;}屬性 public void StartNew():作用是對新的 System.Diagnostics.Stopwatch ...
  • 在上篇文章中我們已經知道了多線程是什麼了,那麼它到底可以幹嘛呢?這裡特別聲明一個前面的委托沒看的同學可以到上上上篇博文查看,因為多線程要經常使用到委托。源碼 一、非同步、同步 1.同步(在計算的理解總是要你措不及防,同步當線程做完一件事情之後,才會執行後續動作),同步方法慢,只有一個線程執行,非同步方法 ...
  • 文件類型說明: ls –l顯示文件詳細信息中: 說明:10個字元,第一個字元表示文件類型,後面9個字元表示文件許可權。 訪問許可權:可讀(r)、可寫(w)和可執行(x)。 用戶級別:文件擁有者(u)、所屬的用戶組(g)和系統中的其他用戶(o)。 第一個字元顯示文件的類型如下: “-”表示普通文件。 “d ...
  • (1) ls(list,列表) 作用:使用列表把當前文件夾下所有文件顯示出來 ls -a 顯示所有文件,包括隱藏文件(以“.”開頭的文件) ls -l 詳細信息顯示文件 ls -a -l ls -l -a ls -la (2) cd (change directory,更改目錄) 作用:用來切換目錄 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...