收藏 | 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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...