1. 程式人生 > >Linux 之 2>&1

Linux 之 2>&1

我們在Linux下經常會碰到nohup command>/dev/null 2>&1 &這樣形式的命令。首先我們把這條命令大概分解下首先就是一個nohup表示當前使用者和系統的回話下的進城忽略響應HUP訊息。&是把該命令以後臺的job的形式執行。那麼就剩下command>/dev/null 2>&1,command>/dev/null較好理解,/dev/null表示一個空裝置,就是說吧command的執行結果重定向到空裝置中,說白了就是不顯示任何資訊。那麼2>&1又是什麼含義?

2>&1

幾個基本符號及其含義

  • /dev/null 表示空裝置檔案
  • 0 表示stdin標準輸入
  • 1 表示stdout標準輸出
  • 2 表示stderr標準錯誤

從command>/dev/null說起

其實這條命令是一個縮寫版,對於一個重定向命令,肯定是a > b這種形式,那麼command > /dev/null難道是command充當a的角色,/dev/null充當b的角色。這樣看起來比較合理,其實一條命令肯定是充當不了a,肯定是command執行產生的輸出來充當a,其實就是標準輸出stdout。所以command > /dev/null相當於執行了command 1 > /dev/null。執行command產生了標準輸出stdout(用1表示),重定向到/dev/null的裝置檔案中。

說說2>&1

通過上面command > /dev/null等價於command 1 > /dev/null,那麼對於2>&1也就好理解了,2就是標準錯誤,1是標準輸出,那麼這條命令不就是相當於把標準錯誤重定向到標準輸出麼。等等是&1而不是1,這裡&是什麼?這裡&相當於等效於標準輸出。這裡有點不好理解,先看下面。

command>a 2>a 與 command>a 2>&1的區別

通過上面的分析,對於command>a 2>&1這條命令,等價於command 1>a 2>&1

可以理解為執行command產生的標準輸入重定向到檔案a中,標準錯誤也重定向到檔案a中。那麼是否就說command 1>a 2>&1等價於command 1>a 2>a呢。其實不是,command 1>a 2>&1command 1>a 2>a還是有區別的,區別就在於前者只打開一次檔案a,後者會開啟檔案兩次,並導致stdout被stderr覆蓋。&1的含義就可以理解為用標準輸出的引用,引用的就是重定向標準輸出產生開啟的a。從IO效率上來講,command 1>a 2>&1command 1>a 2>a的效率更高。

舉個栗子

來個shell

//test.sh
#!/bin/sh
t
date

chmod +x test.sh為test.sh增加執行許可權。這裡我們弄了兩條命令,其中t指令並不存在,執行會報錯,會輸出到stderr。date能正常執行,執行會輸出當前時間,會輸出到stdout。

執行./test.sh > res1.log結果為

我們發現stderr並沒有被重定向到res1.log中,stderr被列印到了螢幕上。這也進一步證明了上面說的./test.sh > res1.log等價於./test.sh 1>res1.log

執行./test.sh>res2.log 2>&1結果為

這次我們發現stdout和stderr都被重定向到了res2.log中了。上面我們未對stderr也就是2說明如何輸出,stderr就輸出到了屏 幕上,這裡我們不僅對stdout進行說明,重定向到res2.log中,對標準錯誤也進行了說明,讓其重定向到res2.log的引用即 res2.log的檔案描述符中。

再思考一下

為何2>&1要寫在command>1的後面,直接用2可以麼。比如ls 2>a。其實這種用法也是可以的,ls命令列出當前的目錄,用stdout(1)表示,由於這個時候沒有stderr(2),這個時候執行ls 2>a也會正常產生一個a的檔案,但是a的檔案中是空的,因為這時候執行ls並沒有產生stderr(2)。

相關推薦

Linux 2>&1

我們在Linux下經常會碰到nohup command>/dev/null 2>&1 &這樣形式的命令。首先我們把這條命令大概分解下首先就是一個nohup表示當前使用者和系統的回話下的進城忽略響應HUP訊息。&是把該命令以後臺的job的形式執行。那麼就剩下command&g

linux2>&1

決心 分頁 fin 進行 .html 因此 普通用戶 以及 div 轉載自:http://blog.sina.com.cn/s/blog_5842daa30101enz5.html 經常關註linux腳本的人,一定看到過 2>&1 這樣的用法,最初一定不明白其

我的linux路(1)

一個 重啟 指正 station tex 推薦 網絡 圖文教程 cto 我的Linux之路(1)一 :準備工作(1)系統版本: Centos 6.9(Final) 下載鏈接 :http://centos.ustc.edu.cn/centos/6.9/isos/x8

Linux溫故知新1

1.touch命令的使用 2.使用(cd -)可以在上次使用的目錄來回切換 3.ls萬用字元的使用*代表任意字元和任意個字元, ?代表任意一個字元, [12345]中的任意一個字元, [1-5]中的任意一個字元. 1 [email protected]:~/Desktop$ touch

Linux旅-1】VMware虛擬機器中的Centos和windows共享資料夾

一、開啟虛擬機器,進入安裝好的centos系統,點選VM頂部導航欄中的“虛擬機器”按鈕,進入子選單選擇“安裝VMware Tools”,如下圖(我的已安裝過,因此顯示的是重新安裝) 二、在cent

Linux bpf 2.1、bcc的實現

bcc全稱為(BPF Compiler Collection),它是模仿gcc(GNU Compiler Collection)的命名風格。 BPF是執行在核心態的一種虛擬機器語言,我們在使用者態可以通過Clang+LLVM把c語言編譯成BPF目標碼,然後通過載

ubuntu12.04下編譯Linux tina 2.1/android經驗

  用的是osboxes下的vdi。 編譯Linux 1. 不能在root使用者下操作 2. 執行 make kernel_menuconfig 報錯,需要 apt-get install zlib1g zlib1g-dev -yapt-get -y install libncu

java用JBarcode元件生成條形碼(支援自定義字型及顏色),圖文詳解2-1

前言: JBarcode入門教程我就不寫了,可以參考:點選開啟連結 我的這篇教程和上篇部落格的不同之處: 1 上篇部落格直接生成二維碼圖片放到d盤的某個資料夾下,我的二維碼生成二維碼後直接用Base64編碼然後返回到前臺頁面。 2 上篇部落格只介紹了生成商品條形碼,其他二維

CareerCup2.1無序連結串列刪除重複元素

【題目】 原文: 2.1 Write code to remove duplicates from an unsorted linked list. FOLLOW UP How would you solve this problem if a temporary

菜鳥的Linux1->egrep及其正則表示式

 正則表示式(REGEXP:Regular Expression)正則表示式分為兩類:    1,基本的正則表示式。Basic REGEXP    2,擴充套件的正則表示式。Extened REGEXP基本的正則表示式:    字元匹配    . 匹配任意單個字元    []

1.1 學習1.2 約定 1.3 認識Linux 1.4 安裝虛擬機 1.5 安裝centos

2018-03-181,安裝好虛擬機後,文件---新建虛擬機--然後就下一步--,2下一步選如下:3.如下圖4.下一步直到如下圖5.下一步直到如下圖:6.下一步:7.下一步 直到完成即可。8.下面開始配置:編輯虛擬機:9.配置網絡:10.然後開始點 開啟此虛擬機--然後按上下左右箭頭按鍵--選擇第一個In

Linux使用haproxy搭建web群集(1)

duyuheng linux haproxyLinux之使用haproxy搭建web群集(1)Haproxy是目前比較流行的一種集群調度工具,同類的調度工具有很多,如LVS和Nginx。相比較而言,LVS性能最好,但是搭建相對復雜,Nginx和upstream模塊支持集群功能,但是對集群節點的健康檢查功能不強

Linux使用haproxy搭建web群集(2)

linux duyuheng keepalived Linux之使用haproxy搭建web群集(2) 案例二:一、 實驗拓撲圖 二、 實驗目標:使用keepalived+haproxy實現雙機熱備和負載均衡。三、 實驗環境:各虛擬機防火墻Iptables 與 NetworkManager 關閉四

謝煙客---------LinuxBash基礎特性(2

linux總結Linux之哲學思想 一切皆文件 避免交互,實現Bash編程 文本編程命令實現配置 組合小程序完成復雜任務總結 過程式編程 解釋執行 字符和數值存儲的區別 shebang -> cpu ->解釋器 數據類型 變量類型

一個Linux小白的血淚路-1

center usb 事情 quest 毛桃 小白 question 安裝windows 方法 一、安裝 終於拿到了大一時用過的舊電腦 想著終於能開始啃linux了 萬萬沒想到 第一步,在舊電腦上安裝linux系統(版本為centos7)就已經快讓我郁悶無比,痛不欲生了。

nagios客戶端nrpe3.2.1安裝

init nagios插件 源碼 load 啟動 files plugin ubunt tar.gz 1、刪除dpkg安裝的nrpedpkg -l | grep nrpedkpg -P nagios-nrpe-server 2、ubuntu下nrpe3.2.1安裝 下載nr

大數據Hadoop學習搭建Hadoop平臺(2.1

穩定版 發的 log tar sshd scheduler 文件夾 三種 rest    關於大數據,一看就懂,一懂就懵。 一、簡介   Hadoop的平臺搭建,設置為三種搭建方式,第一種是“單節點安裝”,這種安裝方式最為簡單,但是並沒有展示出Hadoop的技術優勢,適

SSH客戶端,FinalShell服務器管理,遠程桌面加速軟件,支持Windows,Mac OS X,Linux,版本2.6.3.1,時間2017.12.10

ati transform wid 優化 文本文 搜索 web 由器 isp FinalShell是一體化的的服務器,網絡管理軟件,不僅是ssh客戶端,還是功能強大的開發,運維工具,充分滿足開發,運維需求.用戶QQ群 342045988Windows版下載地址:http:/

SSH客戶端,FinalShell服務器管理,遠程桌面加速軟件,支持Windows,Mac OS X,Linux,版本2.6.3.1

由器 技術分享 ima manage 界面 eight 客戶端 自動提示 編輯器 FinalShell是一體化的的服務器,網絡管理軟件,不僅是ssh客戶端,還是功能強大的開發,運維工具,充分滿足開發,運維需求.用戶QQ群 342045988Windows版下載地址:http

L-1-13 Linuxvim編輯器

通過 str 文件 string noi earch 強制退出 set oai [vi]****************vi編輯器的命令*******************vi <filename> 創建/編輯filename的文件按i進入插入模式,對文件