Linux Shell 中的 dash 符號 “-”

Shell中的-:小符號的大智慧

在Unix/Linux系統中,-符號是一個約定俗成的特殊標記,它表示命令應該使用標準輸入或標準輸出而非文件。這個看似簡單的短橫線,完美詮釋了Unix"一切皆文件"的設計哲學。

作為標準輸入/輸出的替身,-讓命令可以像處理文件一樣處理數據流。通過管道(|)連接的命令,借助-實現了無縫的數據傳遞。

-的智慧不止于此。它還常被用來:

  • 表示選項默認值
  • 標識特殊文件位置
  • 終止參數解析

這種設計體現了Unix的簡約哲學:用最簡單的符號,解決最復雜的問題。正如Unix創始人Ken Thompson所說:“簡潔就是美。”


一、表示標準輸入/輸出

這是-符號最常見的用法,代表標準輸入(stdin)或標準輸出(stdout)。

1. 歸檔壓縮工具

# tar: 打包到標準輸出
tar -cvf - directory | ssh user@host "tar -xvf - -C /target"# gzip: 壓縮到標準輸出
gzip -c file.txt > file.txt.gz# gunzip: 從標準輸入解壓
cat file.txt.gz | gunzip -c > file.txt

2. 文件處理

# cat: 合并標準輸入和文件
echo "Header" | cat - data.csv > combined.csv# diff: 比較標準輸入與文件
echo "new content" | diff - old_file.txt# patch: 從標準輸入打補丁
curl -s http://patch.site | patch -p1 -i -

3. 遠程操作

# ssh: 通過標準輸入執行腳本
cat script.sh | ssh user@host 'bash -s -- arg1 arg2'# scp/rsync替代方案
tar -cf - /local/dir | ssh user@host "tar -xf - -C /remote/dir"

二、表示選項的默認值

某些命令使用-來表示使用默認值或默認行為。

1. 壓縮工具

# bzip2: 使用默認壓縮級別
bzip2 -c - file.txt > file.txt.bz2

2. 文本處理

# sort: 使用默認排序規則
cat unsorted.txt | sort - > sorted.txt# uniq: 使用默認去重方式
sort file.txt | uniq - > unique.txt

3. 系統工具

# ls: 列出標準輸入中的文件
find . -name "*.txt" | ls -

三、表示特殊文件位置

1. 設備文件

# dd: 使用標準輸入/輸出作為設備
dd if=- of=/dev/sdc bs=4M  # 從stdin寫入設備
dd if=/dev/sdc of=- bs=4M  # 從設備讀取到stdout

2. 臨時文件

# mktemp: 創建臨時文件
TMPFILE=$(mktemp -)
echo "temp data" > $TMPFILE

四、表示命令行參數終止

在復雜命令中,--表示選項結束,后面的參數即使以-開頭也不作為選項解析。

# 刪除名為"-f"的文件
rm -- -f# grep搜索以"-"開頭的內容
echo "-test" | grep -- "-"

五、特殊命令中的用法

1. echo/printf

# 輸出到標準錯誤
echo "Error" >&2
printf "%s\n" - >&2

2. xargs

# 從標準輸入獲取參數
find . -name "*.tmp" | xargs rm -

六、使用建議與注意事項

  1. 兼容性檢查:不是所有命令都支持-,特別是非GNU工具

    man command | grep "\- "
    
  2. 明確替代方案:考慮使用/dev/stdin/dev/stdout提高可讀性

    cmd1 | cmd2 /dev/stdin
    
  3. 性能對比:對于大文件,臨時文件可能比管道更高效

    cmd1 > temp && cmd2 temp && rm temp
    
  4. 錯誤處理:管道中注意錯誤傳遞

    set -o pipefail
    cmd1 | cmd2 || echo "Pipeline failed"
    

七、實戰案例

數據庫備份傳輸

# MySQL直接備份到遠程服務器
mysqldump -u user -p dbname | gzip -c - | ssh user@host "gunzip -c - | mysql -u user -p dbname"

日志分析管道

# 多步驟日志處理
cat app.log | grep "ERROR" - | sort - -u | tee errors.txt | mail -s "Error report" admin@site.com

通過這種分類學習,你可以更系統地掌握-符號的各種用法,在實際工作中靈活選擇最適合的方案。記住,理解原理比死記硬背命令更重要!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84146.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84146.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84146.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JMeter 實現 MQTT 協議壓力測試 !

想象一下,你的智能家居系統連接了上千個設備,傳感器數據通過 MQTT 協議飛速傳輸,但突然服務器崩潰,燈光、空調全失控!如何確保你的 MQTT 經紀人能承受高負載?答案是 JMeter!通過安裝 MQTT 插件&…

CKA考試知識點分享(6)---PriorityClass

CKA 版本:1.32 第六套題是涉及PriorityClass相關。 注意:本文不是題目,只是為了學習相關知識點做的實驗。僅供參考 實驗目的 創建一套PriorityClass ,驗證PriorityClass的運作策略。 1 環境準備 創建2個pc,一個為高…

暴力破解篇補充-字典

在皮卡丘靶場的第二期,暴力破解模塊中,我相信大家短暫的接觸了字典這個概念,字典事實上就是包含了大量弱口令的txt文本文件 所以這篇文章用于分享一些字典:https://wwhc.lanzoue.com/ihdl12ybhbhi(弱口令字典&#xff…

關于VS2022中C++導入第三方庫的方式

首先,新建一個Cpp項目(控制臺項目即可,其他項目也無所謂),右鍵點擊項目名稱(Test1)選擇屬性或者在VS2022工具欄選擇調試標簽->屬性按鈕打開屬性頁。 注意點: 在開始其他操作前請注意先進行 配置和平臺選項框的選擇。配置選框選定了是配置…

C++中vector類型的介紹和使用

文章目錄 一、vector 類型的簡介1.1 基本介紹1.2 常見用法示例1.3 常見成員函數簡表 二、vector 數據的插入2.1 push_back() —— 在尾部插入一個元素2.2 emplace_back() —— 在尾部“就地”構造對象2.3 insert() —— 在任意位置插入一個或多個元素2.4 emplace() —— 在任意…

在Vue或React項目中使用Tailwind CSS實現暗黑模式切換:從系統適配到手動控制

在現代Web開發中,暗黑模式(Dark Mode)已成為提升用戶體驗的重要功能。本文將帶你使用Tailwind CSS在React項目(Vue項目類似)中實現兩種暗黑模式控制方式: 系統自動適配 - 根據用戶設備偏好自動切換手動切換 - 通過按鈕讓用戶自由選擇 一、項目準備 使…

Linux C語言網絡編程詳細入門教程:如何一步步實現TCP服務端與客戶端通信

文章目錄 Linux C語言網絡編程詳細入門教程:如何一步步實現TCP服務端與客戶端通信前言一、網絡通信基礎概念二、服務端與客戶端的完整流程圖解三、每一步的詳細講解和代碼示例1. 創建Socket(服務端和客戶端都要)2. 綁定本地地址和端口&#x…

Tomcat 安裝和配置

一、Tomcat官網 Apache Tomcat - Welcome! 選擇解壓到任意一個盤!! 二、Tomcat配置 1)在系統變量處新建一個變量CATALINA_HOME。CATALINA_HOME環境變量的值,設置為Tomcat的解壓安裝目錄 2)找到系統變量Path&#xff0…

動態規劃 熟悉30題 ---上

本來是要寫那個二維動態規劃嘛,但是我今天在問題時候,一個大佬就把他初一時候教練讓他練dp的30題發出來了(初一,啊雖然知道計算機這一專業,很多人從小就學了,但是我每次看到一些大佬從小學還是會很羨慕吧或…

基于stm32F10x 系列微控制器的智能電子琴(附完整項目源碼、詳細接線及講解視頻)

注:成品使用演示、項目源碼、項目文檔在文章末尾網盤鏈接中自取 所用硬件:STM32F103C8T6、無源蜂鳴器、44矩陣鍵盤、flash存儲模塊、OLED顯示屏、RGB三色燈、面包板、杜邦線、usb轉ttl串口 stm32f103c8t6 面包板 …

時間同步技術在電力系統中的應用

隨著電力自動化技術的發展,時間同步不僅可以為電力系統的事后故障分析提供支持,而且已經參與到電力系統的實時控制中來,其可靠性對電力系統的穩定運行影響越來越大。在電力系統中,時間同步技術廣泛應用于調度控制中心、發電廠、變…

XMLGregorianCalendar跟Date、localDateTime以及String有什么區別

1. java.util.Date(已過時,不推薦新代碼使用) 特點 表示時間戳:存儲自 1970-01-01 00:00:00 UTC(Unix 紀元) 以來的毫秒數。 問題: 不區分日期和時間,也沒有時區支持(依…

Python網頁自動化Selenium中文文檔

1. 安裝 1.1. 安裝 Selenium Python bindings 提供了一個簡單的API,讓你使用Selenium WebDriver來編寫功能/校驗測試。 通過Selenium Python的API,你可以非常直觀的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常簡潔方便的A…

玩轉抖音矩陣:核心玩法與高效運營規則

一、 抖音矩陣:流量協同的生態網絡 抖音矩陣,本質是運營一個相互關聯、互相支持的抖音賬號群。核心目標在于通過賬號間的深度協同(內容、流量、粉絲),打破單個賬號的流量天花板,實現11>2的效果。它不僅…

C++11 constexpr和字面類型:從入門到精通

文章目錄 引言一、constexpr的基本概念與使用1.1 constexpr的定義與作用1.2 constexpr變量1.3 constexpr函數1.4 constexpr在類構造函數中的應用1.5 constexpr的優勢 二、字面類型的基本概念與使用2.1 字面類型的定義與作用2.2 字面類型的應用場景2.2.1 常量定義2.2.2 模板參數…

用電腦通過USB總線連接控制keysight示波器

通過USB總線控制示波器的優勢 在上篇文章我介紹了如何通過網線遠程連接keysight示波器,如果連接的距離不是很遠,也可以通過USB線將示波器與電腦連接起來,實現對示波器的控制和截圖。 在KEYSIGHT示波器DSOX1204A的后端,除了有網口…

StarRocks 全面向量化執行引擎深度解析

StarRocks 全面向量化執行引擎深度解析 StarRocks 的向量化執行引擎是其高性能的核心設計,相比傳統行式處理引擎(如MySQL),性能可提升 5-10倍。以下是分層拆解: 1. 向量化 vs 傳統行式處理 維度行式處理向量化處理數…

02 Deep learning神經網絡的編程基礎 邏輯回歸--吳恩達

1.邏輯回歸 邏輯回歸是一種用于解決二分類任務(如預測是否是貓咪等)的統計學習方法。盡管名稱中包含“回歸”,但其本質是通過線性回歸的變體輸出概率值,并使用Sigmoid函數將線性結果映射到[0,1]區間。 以貓咪預測為例 假設單個…

UDP 與 TCP 的區別是什么?

UDP(用戶數據報協議)與TCP(傳輸控制協議)有以下區別: 連接方式 - UDP:無連接,發送數據前不需要建立連接,也不維護連接狀態,因此UDP的通信效率較高,適合對實時…

6.計算機網絡核心知識點精要手冊

計算機網絡核心知識點精要手冊 1.協議基礎篇 網絡協議三要素 語法:數據與控制信息的結構或格式,如同語言中的語法規則語義:控制信息的具體含義和響應方式,規定通信雙方"說什么"同步:事件執行的順序與時序…