Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >:>/dev/null 2>&1 的作用

:>/dev/null 2>&1 的作用

作者头像
Java学习123
发布于 2018-05-16 06:37:43
发布于 2018-05-16 06:37:43
2.1K00
代码可运行
举报
文章被收录于专栏:Java学习123Java学习123
运行总次数:0
代码可运行

shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo "123" > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 2 表示stderr标准错误 & 表示等同于的意思,2>&1,表示2的输出重定向等同于1 那么本文标题的语句: 1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。 2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。 A. 1> /dev/null 表示将命令的标准输出重定向到 /dev/null2>/dev/null 表示将命令的错误输出重定向到 /dev/null1 - denotes stdout ( standard output )2 - denotes stderr  ( standard error )/dev/null就相当与windows里的回收站,只是进去了不能再出来了。>/dev/null 就是将标准输出和标准出错的信息屏蔽不显示 B.>/dev/null 2>&1   also can write  as  1>/dev/null 2>&1     - stdout redirect to /dev/null (no stdout) ,and redirect stderr to stdout  (stderr gone as well) . end up it turns both stderr and stdout off C.a little practice may help to undstand above .  #ls /usr  /nothing #ls /usr  /nothing  2>/dev/null #ls /usr  /nothing  >/dev/null 2>&1 我们经常会在UNIX系统下的一些脚本中看到类似”2>&1″这样的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具体含义是什么呢?   UNIX有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。”2>&1″的意思就是将stderr重定向至stdout,并一起在屏幕上显示出来。如果不加数字,那么默认的重定向动作是针对stdout(1)的,比如”ls -l > result”就等价于”ls -l 1 > result”。这样便于我们更普遍性的理解重定向过程。   下面举例说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#cat std.sh
 
#!/bin/sh
 
echo “stdout”
 
echo “stderr” >&2
 
#/bin/sh std.sh 2>&1 > /dev/null
 
stderr
 
#/bin/sh std.sh > /dev/null 2>&1

  第一条命令的输出结果是stderr,因为stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍将在屏幕中显示出来;第二条命令无输出,因为当stdout重定向至/dev/null后,stderr又重定向到了stdout,这样stderr也被输出到了/dev/null。 今天在做例行工作的时候,发现机器上的sendmail进程奇多无比,并且机器IO好像也很慢。后来发现在/var/spool/clientmqueue目录下ls几乎要死人 – 最少有10万个文件 ps|grep sendmail看这些sendmail进程里面都有/var/spool/clientmqueue cd过去随便打开了个文件看了下,发现是我crontab里面执行的程序的exception,估计是我的crontab每次执行,linux都试图发邮件给crontab的用户但是又没有配sendmail,所以东西就都被扔到/var/spool/clientmqueue下面了。然后我才明白为啥以前别人写的crontab要加上> /dev/null 2>&1,原来这样就不会每次执行crontab都把结果或者excetion发邮件了。 把这10万个文件删掉后,一切恢复正常 问题现象: linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件。 原因分析:系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件; 解决办法: 1、 将crontab里面的命令后面加上> /dev/null 2>&1 2、知识点: 2>:重定向错误。 2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到/dev/null,即抛弃,同时,把产生的错误也抛弃。 3、具体代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1)、# crontab -u cvsroot -l
 
01 01 * * * /opt/bak/backup
 
01 02 * * * /opt/bak/backup2
 
(2)、# vi /opt/bak/backup
 
#!/bin/sh
 
cd /
 
getfacl -R repository > /opt/bak/backup.acl
 
(3)、# vi /opt/bak/backup2
 
#!/bin/sh
 
week=`date +%w`
 
tar zcvfp /opt/bak/cvs$week/cvs.tar.gz /repository >/dev/null 2>&1
 
4、清除/var/spool/clientmqueue/目录下的文件:
 
# cd /var/spool/clientmqueue
 
# rm -rf *

如果文件太多,占用空间太大,用上面命令删除慢的话,就执行下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cd /var/spool/clientmqueue
 
# ls | xargs rm -f

在一個風和日麗的夜晚,我坐在家裡看著電視,後來手機一陣響起,結果是楊老師發現一台主機發生異常,伺服器的 /var/spool/mqueue 目錄被塞了一堆還沒有寄出的信件,而當時沒有把 /var/spool 另外分割出來,所以也影響到了系統 root (/) 區塊,只剩六百多 MB 可以使用,這時一想會有幾個可能. 這台 server 有幫學校的 PC 做寄送信件,所以可能是廣告信在寄出. 使用這台 server 做 mail 寄信的機器,可能是中毒,於是就不斷的送信出去. 一開始只有想到這兩個原因,但是可要把被吞掉的空間給吐出來,所以就打算把所有的 mail queue 都先砍了,當然,要先停掉 mail service. 在砍這些正在排隊的信件時,發現一件事,就是裡面的檔案太多了,使用 ls 命令就變得超級遲頓,沒有反應,使用 mailq 來看看到底是那些信被 queue 住也沒辦法,後來想想算了,只好全剖砍了,不要再玩下去,之後,很順手的下了 rm -rf * 這下子呢,發生了一件很離奇的事,居然檔案太多無法刪除,第一次聽到 rm 在 complain (我是聽到的,楊老師是實作者,所以他有看到 ^^). 那個 error 是: bash: /bin/rm: Argument list too long 雖然無法刪除,但是楊兄並不放棄,到主機面前,開啟了 X Window 之後使用那 Linuxer 最常使用的鸚鵡螺 (nautilus) 開啟到 /var/spool/mqueue. 喔 ~ 可以使用 X Window 來刪呢 ! 後來想說即然 X Window 有這麼大的本事,那麼就用它來刪了其它的 queue files 就好啦,於是掛上電話,放楊兄一個人努力的在機房刪著 ... 當然我也沒有閒著,電視劇剛好演完,於是開啟我的工作伙伴,再度當網路潛水艇 ... 游著游著,突然想到,何不使用 find 來刪除看看 ? 於是刪回歷史文件,發現一個命令就是 find ./ | xargs rm -rf 千萬別小看這小小的指令,因為在我看完之後不久,楊兄打進來,說已經刪到手軟,這時也是晚上十點了,於是我就推薦了這個這道指令,嗯,很好,全都刪了,還頗快的 ... 喔,還沒說為什麼會刪到手軟,是因為 nautilus 在 Load 目錄時,是分批的,不是一次全部讀,所以一次大約是幾千封在讀,刪了之後,沒想到又冒出了還有幾千封 ... 真是嚇死人,後來推論應該是分批的關係. 在下了 find ./ | xargs rm -rf 之後,還在訝異快速之餘,就發現時間不多了,學校也要關門,所以就先 say bye bye,在現場苦命的楊兄也回家休息了. 分析: rm 有最大一次刪除的數量,所以當一個目錄裡有太多的檔案或目錄時,就會出現錯誤,小弟試過應該是在二萬以下,而使用 find ./ | xargs rm -rf 的目的是先使用 find 列出檔案,再導向到 xargs,xargs 再喂給 rm,在這裡,xargs 會分批依照 rm 的最大數量餵給 rm,然後就可以順利刪除檔案了 。而真正的原因,有可能是 rm 的版本或是檔案系統的問題,我也不再繼續追就,反正能辦好事就好

下面提供當時小弟測試的一個小小 shell script 下載: mk-file.sh (這個 shell script 會有目錄下產生 20000 個檔案。) 接下來來做個小小測試: root # mkfile.sh root # 會產生 20000 個小檔案,名稱為 test-file-{1~19999} 直接使用 rm 去刪除: root # rm -rf test-file-* -bash: /bin/rm: Argument list too long (會回應引數過長的訊息) 改搭配 find 來刪除 root # find ./ -iname 'test-file-*' | xargs rm -rf root # ls mk-file.sh root # 這樣就順利被刪除了。 ---------------------------------
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#tool_action
 
45 4 * * * /bin/sh /data/stat/crontab/exec_tool_action_analysis_db.sh >> /data/stat/logs/exec_tool_action_analysis_db.sh.log > /dev/null 2>&1
 
45 5 * * * /bin/sh /data/stat/crontab/exec_tool_action_analysis_user.sh >> /data/stat/logs/exec_tool_action_analysis_user.sh.log > /dev/null 2>&1
 
否则在/var/spool/clientmqueue 下会产生以下文件:
 
-rw-rw---- 1 smmsp   smmsp  975 Jan 17 10:50 qfq0H2o4ei031197
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
爲了要協助處理這種現象,目前最流行的方法就是使用俗稱“檢索增強生成”的RAG(Retrieval-Augmented Generation)技術,爲手上的大語言模型助手提供補強或微調的功能。
GPUS Lady
2024/10/31
3040
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
怎样更新pip(怎么升级python的pip)
在 Python 的環境中,許多人都習慣使用 PIP 指令來管理模組的安裝、更新與移除的動作。但是最近我一直遇到一個問題,就是下完 PIP 指令執行完後都會在最後出現要求更新 PIP 版本的訊息,例如:
全栈程序员站长
2022/07/31
2.1K0
怎样更新pip(怎么升级python的pip)
【Rust日报】 2019-08-16:Rust 1.37.0 稳定版已发布
Rust 1.37.0 稳定版已发布 現在可以使用 type 製作別名 type ByteOption = Option<u8>; fn increment_or_zero(x: ByteOption) -> u8 { match x { ByteOption::Some(y) => y + 1, ByteOption::None => 0, } } 而在實作(实现)函數中 Self 可以當成目前結構的別名 impl Coin { fn value
MikeLoveRust
2019/08/19
5160
git指令集
Git 是分散式的版本控制系統, 從架設、簡易操作、設定, 此篇主要是整理 基本操作、遠端操作 等.
全栈程序员站长
2022/08/23
4790
【Rust日报】 2019-09-09:glint 用Rust編寫的commit 提示工具
然後再用 Linux perf 跑看看,發現分析結果與 cargo-profiler 相同
MikeLoveRust
2019/09/11
4630
【Rust日报】 2019-09-09:glint 用Rust編寫的commit 提示工具
Newsletter@8 | 職場管理學
職場管理學|管理比提問,領導比傾聽,3步驟當好一個管理者和領導者 《可複製的領導力》|生活CEO|馬克凡讀書觀點
Abalone
2022/09/08
2240
RESTful
HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的 3 位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。 除非另有说明,状态码是 HTTP / 1.1 标准(RFC 7231)的一部分。
Cell
2022/02/25
9330
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
在前面的大語言模型測試過程,一定會發現這些智能助手都存在一些“胡言亂語”、“答非所問”之類的狀況,其實可以將它視爲“不瞭解邊界”的小孩童一樣,因爲所有人工智能模型,都是再它的知識庫中,尋找“機率最高”的答案,很有可能這個答案的正確率還不到5%,但它不能回答“不知道”,必須找到一組以上的回覆(response),即便其正確率並不高。
GPUS Lady
2024/10/29
2650
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
基于 leancloud-storage 实现的无后端记账本
事情是這樣,年前和朋友一起合租了一個房子,然後捏,生活嘛,除了開心,當然是乾飯最大啦!
Cell
2022/02/25
9480
基于 leancloud-storage 实现的无后端记账本
【Rust日报】2019-09-06:文字RPG
作者之前寫過 MUDdy 像MUD的純文字互動遊戲,但只是單機的 Read more
MikeLoveRust
2019/09/09
7660
【Rust日报】2019-09-06:文字RPG
分析 WordPress 3.8.2 修復的cookie偽造漏洞
4月8日,wordpress發布了一個重要更新,在該次更新中,修復了一系列安全漏洞。其中最顯眼的就是cookie伪造漏洞(CVE -2014- 0166)。 我們來看修補的代碼: $key = wp_hash($username . $pass_frag . '|' . $expiration, $scheme); $hash = hash_hmac('md5', $username . '|' . $expiration, $key); - if ( $hmac != $hash ) { + if (
FB客服
2018/02/02
8900
分析 WordPress 3.8.2 修復的cookie偽造漏洞
解密特斯拉自動駕駛晶片背後的一號人物
源自:虎嗅網 作者:國仁 在自動駕駛領域,AI晶片其實並非新奇玩意。Mobileye的EyeQ系列晶片,就是較早應用於自動駕駛的AI晶片之一。 而在這個月早些時候,矽谷鋼鐵俠馬斯克,還宣佈了特斯拉正在研發用於自動駕駛的AI晶片,回顧馬斯克對自動駕駛晶片的各種動作,我們發現近來各種跳票“不靠譜”的他,其實對技術發展的趨勢,遠比看上去更理解。 馬斯克對特斯拉自行研發自動駕駛晶片的佈局,從兩年前就開始了。 一、從Mobileye到英偉達 特斯拉的自動駕駛焦慮症 2014年,特斯拉找上Mobileye,用上了它
企鹅号小编
2018/01/25
1K0
【Rust日报】 2019-10-25 例子學習:基於Autoref的穩定特化
然後再將其上傳到數據庫,並且要在/opt/docs-rs-prefix/documentations目錄中進行。
MikeLoveRust
2019/10/31
4620
在 Php 中把 Allow_url_fopen 打開的風險[通俗易懂]
最近老是在我的 /tmp 裡頭, 發現有個多出來的 /tmp/cmdtemp 檔案. 也在 apache 的 error_log 中發現一些訊息如下:
全栈程序员站长
2022/09/13
2.3K0
NVIDIA GPU 助信息安全厂商免除惡意程式攻擊
電腦和行動裝置上的惡意軟體程式日漸增加,對於信息安全業界造成嚴重問題,由於資料量過於龐大,現時有部份公司陸續開始利用 NVIDIA GPU 解決惡意軟體的問題,避免受惡意程式攻擊。 NVIDIA 指出與 CPU 相比,進行規則比對時 GPU 查詢的速度比 CPU 快上 22 倍、產生規則的速度快上 20 倍,而進行近鄰查詢的速度比快上 13 倍。 來自捷克的信息安全廠商 Avast Software 開始利用 GPU 來解決惡意軟體, Avast 增設了一個 GPU 加速資料庫,處理和分析數百萬個樣本,速度
GPUS Lady
2018/03/30
7860
linux 信号sigabrt,關於Linux中的SIGABRT信號
SIGABRT是中止一個程序,它可以被捕捉,但不能被阻塞。處理函數返回后,所有打開的文件描述符將會被關閉,流也會被flush。程序會結束,有可能的話還會core dump。 當程序調用abort(3)時,該進程會向自己發送SIGABRT信號。所以,SIGABRT一般用於信號中一些關鍵的處理,assert失敗時也會使用它。你不應該去捕捉SIGSEGV和SIGABRT信號,如果收到這種信號,說明進程處於一個不確定的狀態,很可能會直接掛起。
全栈程序员站长
2022/07/23
3.3K0
GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载
轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html
上帝
2019/10/28
3.5K0
Code Review 怎麼做?新手工程師如何提升「程式碼品質」
對一個入門的工程師來說,掌握程式語法與模仿範例實作是基本的能力。那有了這樣的基本能之後,要如何寫出更好的程式呢?怎樣才能夠成為一個「優秀」的新手工程師呢?事實上,寫出會動的程式不難,但想寫出好的程式其實是需要刻意練習的。大部分的人會建議要「多練習、多實作」,但我認為在大量練習之外,適時的「優化程式」也是提升「程式碼品質」重要的關鍵。而在「優化程式」可以分成兩個角度:
Cell
2022/02/25
2K0
使用curl指令模拟HTTP请求
curl 是很方便的Rest客戶端,可以很方便的完成許多Rest API測試的需求,甚至,如果是需要先登入或認證的rest api,也可以進行測試,利用curl指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改變 HTTP header來滿足使用REST API需要的特定條件。
大师级码师
2021/09/19
2.1K0
Using Automake and Autoconf「建议收藏」
Murray Cumming <murrayc@usa.net> Chen Chih-Chia <pigfoot@CDPA.nsysu.edu.tw>
全栈程序员站长
2022/07/25
5150
推荐阅读
相关推荐
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档