Linux 標準輸入 標準輸出 標準錯誤

目錄

  • 一. 簡介
  • 二. 常見用法
    • 2.1 輸出重定向
    • 2.2 錯誤重定向
    • 2.3 同時重定向標準輸出 + 錯誤
    • 2.4 輸入重定向
    • 2.5 特殊設備
  • 三. 這樣設計的好處
    • 3.1 區分正常信息和錯誤信息
    • 3.2 方便調用方腳本處理
    • 3.3 與管道結合時更清晰
  • 四. 案例
    • 4.1 if判斷
    • 4.2 ls查詢


一. 簡介

?在 Linux/Unix 中,一切都是文件(文件、目錄、設備、管道、網絡套接字等)。
當進程打開一個文件(或設備、socket 等),內核會返回一個 整數編號 來代表它,這個編號就是 FD
File Descriptor(文件描述符)的簡寫。

進程之后對這個文件的所有操作(讀、寫、關閉等)都是通過FD文件描述符來完成的。

FD名稱說明默認指向
0stdin標準輸入鍵盤
1stdout標準輸出終端屏幕
2stderr標準錯誤終端屏幕

二. 常見用法

2.1 輸出重定向

寫法含義
command > file標準輸出寫入文件,覆蓋
command >> file標準輸出追加到文件
command 1> file等同于 > file,指定 stdout

2.2 錯誤重定向

寫法含義
command 2> file標準錯誤寫入文件
command 2>> file標準錯誤追加到文件
command 2>&1stderr 重定向到 stdout 的位置

2.3 同時重定向標準輸出 + 錯誤

寫法含義
command > file 2>&1stdout 和 stderr 都寫入 file
command &> fileBash專用簡寫,stdout+stderr 一起寫入 file
command &>> filestdout+stderr 一起追加到 file

2.4 輸入重定向

寫法含義
command < file把文件作為標準輸入
command 0< file等同于 < file

2.5 特殊設備

寫法含義
>/dev/null丟棄 stdout
2>/dev/null丟棄 stderr
&>/dev/null丟棄 stdout + stderr(Bash常用,不兼容sh)
💥>/dev/null 2>&1丟棄 stdout + stderr(兼容所有shell)

三. 這樣設計的好處

3.1 區分正常信息和錯誤信息

  • stdout 通常表示程序的正常結果(比如命令執行的輸出)。
  • stderr 用來提示警告、錯誤、用戶輸入異常等情況。
echo "正常結果"      # 發到 stdout
echo "出錯了!" >&2  # 發到 stderr

3.2 方便調用方腳本處理

  • 上層腳本或調用者可以分別捕獲 stdout 和 stderr。
./myscript.sh >output.log 2>error.log

3.3 與管道結合時更清晰

  • 管道| 只會傳遞 stdoutstderr 會被分開。
  • 如果 command1 里錯誤信息走 stderr,它就不會影響后面的數據處理邏輯。
command1 | command2

四. 案例

4.1 if判斷

?判斷指定的環境變量是否存在

  • >/dev/null 2>&1:用于將printenv USERNAME的標準輸出和錯誤全部丟棄
# 兼容所有shell的寫法
if printenv USERNAME >/dev/null 2>&1; thenecho "環境變量 USERNAME 存在"
elseecho "環境變量 USERNAME 不存在"
fi# bash專用的寫法
if printenv USERNAME &>/dev/null; thenecho "環境變量 USERNAME 存在"
elseecho "環境變量 USERNAME 不存在"
fi

?判斷指定的命令是否存在

if ! command -v keytool >/dev/null 2>&1; thenecho "【keytool】命令并沒有被安裝, 請確認!"exit 1
fi

4.2 ls查詢

  • 有2個文件夾,其中0915的文件夾只有root用戶才能讀取其中的文件
  • 直接ls -l 09*查看時,會提示權限不足
  • 2>/dev/null將標準錯誤丟棄之后,屏幕上不會顯示錯誤提示
apluser@FengYeHong-HP:work$ ls -ld 09*
drwx------ 2 root    root    4096 Sep 15 18:58 0915
drwxr-xr-x 2 apluser apluser 4096 Sep 15 19:00 0915_01
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ ls -l 09*
ls: cannot open directory '0915': Permission denied
0915_01:
total 0
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ ls -l 09* 2>/dev/null
0915_01:
total 0
  • ls 09* >out.txt 2>err.txt:stdout 到 out.txt,stderr 到 err.txt
apluser@FengYeHong-HP:work$ ls 09*
ls: cannot open directory '0915': Permission denied
0915_01:
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ ls 09* >out.txt 2>err.txt
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ cat out.txt
0915_01:
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ cat err.txt
ls: cannot open directory '0915': Permission denied
  • ls 09* >all_info.txt 2>&1:stdout 和 stderr 都輸出到 all.txt
apluser@FengYeHong-HP:work$ ls 09* >all_info.txt 2>&1
apluser@FengYeHong-HP:work$
apluser@FengYeHong-HP:work$ cat all_info.txt
ls: cannot open directory '0915': Permission denied
0915_01:

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

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

相關文章

零基礎新手小白快速了解掌握服務集群與自動化運維(二)Linux Journalctl命令、Journalctl日志持久化存儲

Linux提供了一個強大的日志系統&#xff0c;它可以跟蹤和記錄系統的各種活動。在這個系統中&#xff0c;journalctl是一個非常重要的工具&#xff0c;用于查詢和操作由systemd進程管理的日志。 本文將深入探討journalctl命令&#xff0c;介紹其基本使用、高級選項及示例等內容…

【學習】【js】棧數據結構

棧 棧是一種遵從后進先出&#xff08;LIFO&#xff09;原則的有序集合。新添加或待刪除的元素都保存在棧的同一端&#xff0c;稱作棧頂&#xff0c;另一端就叫棧底。在棧里&#xff0c;新元素都靠近棧頂&#xff0c;舊元素都接近棧底。 基于數組的棧 時間復雜度O(n),占用較多的…

【Linux】基本指令 · 下

alias 指令起別名為什么 ls -l 指令等價于 ll 指令呢&#xff1f;指令就是可執行程序&#xff0c;和我們自己寫的代碼編譯好的程序&#xff0c;沒有本質區別&#xff01; 指令在系統的某一個位置存在&#xff01; 執行指令前&#xff0c;現在系統中查找對應的指令指令在根目錄下…

計算機視覺(opencv)實戰二十二——指紋圖像中提取特征點,計算兩兩指紋之間的相似度

指紋識別原理與代碼實現詳解指紋識別是一種常見的生物特征識別技術&#xff0c;廣泛應用于門禁系統、手機解鎖、考勤打卡、身份認證等場景。其核心思想是&#xff1a;從指紋圖像中提取特征點&#xff0c;計算兩幅指紋之間的相似度&#xff0c;并根據相似度判斷是否為同一人。本…

Linux基礎之部署mysql數據庫

文章目錄一、環境準備二、源碼解壓與依賴三、CMake 編譯配置四、配置 MySQL權限管理修改配置文件 /etc/my.cnf五、環境變量設置六、數據庫初始化七、服務管理八、賬號密碼管理一、環境準備 yum -y install gcc gcc-c ncurses ncurses-devel bison cmakegcc / gcc-c&#xff1a…

代碼審計-PHP專題原生開發文件上傳刪除包含文件操作監控Zend源碼解密1day分析

快速分析脆弱&#xff1a;1、看文件路徑2、看代碼里面的變量&#xff08;可控&#xff09;3、看變量前后的過濾文件安全挖掘點&#xff1a;1、腳本文件名2、應用功能點3、操作關鍵字文件上傳&#xff0c;文件下載(讀取)&#xff0c;文件包含&#xff0c;文件刪除等emlog-文件上…

零基礎搭建 Hexo 博客:從本地到 GitHub Pages 全流程指南

零基礎搭建 Hexo 博客&#xff1a;從本地到 GitHub Pages 全流程指南 Hexo 是一個快速、簡潔且高效的博客框架&#xff0c;支持使用 Markdown 來編寫文章&#xff0c;并能快速生成靜態網頁&#xff0c;非常適合想要搭建個人博客的同學。本文將帶你從零開始&#xff0c;本地搭建…

Git 簡介

Git 是目前全球最流行的分布式版本控制系統&#xff08;Distributed Version Control System, DVCS&#xff09;&#xff0c;核心作用是追蹤文件修改歷史、支持多人協同開發&#xff0c;并能高效管理代碼&#xff08;或任何文本類文件&#xff09;的版本迭代。它由 Linux 內核創…

后端Web實戰-Spring原理

目錄 1. 配置優先級 2. Bean管理 2.1 獲取Bean 2.2 Bean作用域 面試題&#xff1a;Lazy是如何解決循環依賴問題的&#xff1f; 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依賴 3.2 自動配置 3.2.1 概述 3.2.2 自動配置的原理及常見方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二創 IDE 里用 VS Code Remote-SSH 的“曲線連接”實戰

目標&#xff1a;讓你在 Qoder 等在線/AI 輔助 IDE 中&#xff0c;也能像本地 VS Code 一樣通過 Remote-SSH 連接到自己的遠程服務器進行開發。 前提&#xff1a;只在你擁有或被授權的服務器上使用&#xff0c;遵守所用平臺的條款與限制。兩句話說清楚 先用本地 VS Code 正常連…

python發送請求SSL驗證設置

這個錯誤通常是由于SSL/TLS握手失敗導致的&#xff0c;可能原因包括證書驗證問題、不兼容的加密協議或網絡連接中斷。以下是幾種解決方案&#xff0c;按推薦順序排列&#xff1a; 方案一&#xff1a;臨時禁用SSL驗證&#xff08;快速測試&#xff09; response requests.get(u…

工廠自動化正從 “人工堆疊” 向 “設備替代” 快速轉變

?人工進行零件排列&#xff0c;雖在操作靈活性上有一定表現&#xff0c;但實際應用中存在明顯短板&#xff0c;對工廠自動化轉型形成制約。從成本來看&#xff0c;一名工人日均工資約數百元&#xff0c;若需 5-6 名工人協同作業&#xff0c;月均人力成本易突破萬元&#xff0c…

中標麒麟7.4部署gitlab-runner

1. 部署環境 本次部署環境完全斷網。需要離線下載gitlab-runner及其依賴。 本次部署環境為中標麒麟7.4。目前機器上部署了gitlab&#xff0c;安裝了maven。 2. 部署步驟 2.1 在外部下載好依賴 我首先在騰訊云上布置了一個centos7.9的虛擬機&#xff0c;沒有安裝任何東西。 …

在 IDEA 2024 創建 Vue 項目(保姆級)

目錄 一、 前后端分離 1. 簡介 2. 實現前后端分離的常用前端框架 3. 前后端分離和動靜分離 3.1 前后端分離: 3.2 動靜分離: 二、 Vue.js概述 1. 簡介 2. SPA介紹 2.1 優點 2.2 缺點 3. MVVM介紹 3.1 示例 三、 名詞解釋 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源碼分析-資源庫-創建知識庫-后端源碼-應用/領域/數據訪問

3. 應用服務層 3.1 知識庫應用服務 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 轉換文檔類型d…

Shopify指紋手機矩陣:無限擴店,橫掃FB/GG廣告封號風險

一、 為什么需要為Shopify使用指紋手機&#xff1f;雖然Shopify不會因為你多開店而封號&#xff0c;但以下場景需要隔離環境&#xff1a;規避廣告平臺關聯&#xff1a;這是最核心的用途。你會用Facebook、Google、TikTok等廣告平臺為你的Shopify店鋪引流。這些廣告平臺嚴格禁止…

【Python】家庭用電數據分析Prophet預測

數據集&#xff1a;Household Electricity Consumption | Kaggle 目錄 數據集簡介 探索性分析 Prophet預測 Prophet模型 Prophet理念 Prophet優點 數據集簡介 240000-household-electricity-consumption-records數據集包含了一個家庭6個月的用電數據&#xff0c;收集于2…

信息系統運維管理

運行維護服務指的是采用信息技術手段及方法&#xff0c;依據客戶提出的服務要求&#xff0c;為其在使用信息系統過程中提出的需求提供的綜合服務是信息技術服務中的一種主要類型。運行維護服務對象是指信息系統工程建設項目交付的內容&#xff0c;包括機房基礎設施&#xff0c;…

系統編程完結整理以及補充

Shell&#xff08;命令與腳本語法&#xff09; 系統編程&#xff08;一&#xff09;shell的學習-CSDN博客 功能/概念語法/關鍵字參數/用法說明返回值/效果難易點注意事項示例/實驗提示定義函數func_name() { commands; }無參數或通過 $1 $2 ... 傳參函數執行參數傳遞、全局變…

第十四屆藍橋杯青少組C++選拔賽[2022.12.18]第二部分編程題(2、字符翻轉)

參考程序&#xff1a;#include <bits/stdc.h> using namespace std;int main() {string s;cin >> s; // 讀取輸入字符串&#xff0c;若無輸入則結束for (int i 0; i < (int)s.size(); i) {// i 從 0 開始&#xff0c;位置是 i1&#xff1b;如果 i 是奇數&#…