`
hongtoushizi
  • 浏览: 379050 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Shell: /dev/null 2>&1详解

阅读更多

以前 shell的标准输出和标准错误输入一直都有疑惑,看了这篇文章后,顿时清楚了。

转载自: http://justcoding.iteye.com/blog/1944237

 

1,可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.
用处:
禁止标准输出.    1 cat $filename >/dev/null   # 文件内容丢失,而不会输出到标准输出.
禁止标准错误.    2>/dev/null 这样错误信息[标准错误]就被丢到太平洋去了.

2, 1>/dev/null 2>&1的含义

> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么本文标题的语句:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

3,/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。

下面使用dd命令将从zero设备中创建一个10K大小(bs决定每次读写1024字节,count定义读写次数为10次),但内容全为0的文件。
dd if=/dev/zero of=file count=10 bs=1024

 

shell中可能经常能看到:>/dev/null 2>&1

命令的结果可以通过%>的形式来定义输出

分解这个组合:“>/dev/null 2>&1” 为五部分。

1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”

那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

最常用的方式有:
    
command > file 2>file  与command > file 2>&1

它们有什么不同的地方吗?
      首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
      而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
      从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。

分享到:
评论

相关推荐

    详解nohup /dev/null 2>&1 含义的使用

    在 `nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &` 这个例子中,`>/dev/null` 表示将标准输出(文件描述符 1)重定向到 `/dev/null`,这是一个特殊的设备文件,任何写入它的数据都会被丢弃,相当于“黑洞”。`2>&1` ...

    详解shell中>/dev/null 2>&1到底是什么

    在Shell脚本中,我们经常会遇到`>/dev/null 2>&1`这样的重定向操作,它是用来处理命令的输出和错误的。接下来,我们将详细解释这个命令的含义和作用。 首先,`>/dev/null`是将标准输出(标准输出的文件描述符为1)...

    详解shell中/dev/null 2&1到底是什么

    相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段...

    linux-shell编程

    /bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log /bin/gzip /backup/$1.$DATE.tar if [ $? -eq 0 ] then echo "$1 $DATE backup successfully" >> /backup/$1.bak.log else echo "ERROR...

    daemontools控制脚本

    ps -ef | grep qmail | grep tcpserver | awk '{print $2}' | xargs kill > /dev/null 2>&1 killall qmail-send > /dev/null 2>&1 ``` 最后删除Qmail服务的锁文件。 ```sh if [-f /var/lock/subsys/qmail]; then ...

    Linux——shell编程基础

    - 示例:`find / -name test > /dev/null 2>&1` 的含义是搜索根目录下的名为 "test" 的文件,并将输出重定向到空设备文件 `/dev/null`,同时将错误输出也重定向到同一位置。 #### 五、Shell 变量管理 - **变量...

    Linux Shell常用技巧

    ### Linux Shell 常用技巧详解 在 Linux 系统中,Shell 是用户与操作系统交互的主要方式之一。本文将深入探讨几个常用的 Shell 技巧及其应用场景。 #### 1. 使用 `/dev/null` 和 `/dev/tty` 在 Linux 系统中,`/...

    Linux自动清理日志文件方法

    上述Cron表达式的含义是:每天凌晨1点执行`/opt/soft/bin/auto-del-30-days-ago-log.sh`脚本,其中`> /dev/null 2>&1`用于忽略脚本执行时产生的任何输出信息,确保不会发送邮件提醒。 通过这种方式,我们可以轻松...

    DD-WRT移动随e行WLAN自动登录脚本

    wget http://hi.baidu.com/myeyre/blog/item/bb5470cfa42c2637f9dc613b.html -O /dev/null > /tmp/root/keepalive.log 2>&1 &` - **自动重新登录任务**:每隔6小时执行一次,以确保连接有效。 - 命令格式:`0 */6...

    LINUX_SHELL

    ### Linux Shell 编程知识点详解 #### 综述篇 **Shell是什么** - **定义**:Shell 是一种特殊的程序,充当用户与 Linux 或 Unix 操作系统内核之间的接口。它接收用户的输入,并将这些指令传递给操作系统的核心...

    Shell执行/调用Java/Jar程序例子的实例详解

    if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "${PRG}"`/"$link" fi done BASEDIR=`dirname ${PRG}` BASEDIR=`cd ${BASEDIR}/..;pwd` if test -z ${JAVA_HOME}; then JAVA_BIN...

    linux shell循环:for、while、until用法详解

    ping -c 1 -W 1 10.1.250.$host &> /dev/null && { echo "10.1.250.$host is online" let online++ } || { let offline++ } done echo "Online hosts number : $online" echo "Offline hosts number : $...

    Linux在批量服务器管理中实用的PS1命令提示符格式实现方法

    echo $eth1_IP | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo 'eth1_IP is empty!' exit 1 fi # 设置PS1 echo "export PS1='\[\e[32m\][\u@$eth1_IP...

    详解linux下nohup日志输出过大问题解决方案

    2. 清空日志文件:在分割日志后,可以使用`cat /dev/null > nohup.out`清空`nohup.out`文件,以便新的日志继续写入。 3. 管理旧日志:为了防止日志文件无限制地积累,可以设置一个定期删除旧日志的脚本,只保留最近...

    实用Linux命令行技巧

    - 示例:`11:07:16~/rails server 2>&1 > /dev/null &` - 启动Rails服务器,并将标准错误和标准输出合并后重定向到`/dev/null`,即丢弃输出。 3. **后台运行**: - 示例:`11:07:16~/rails server &>/dev/...

    linux下根文件系统的制作.ppt

    - `mknod -m 666 rootfs/dev/null c 1 3` 4. **安装共享库**: - 使用包管理工具安装共享库,例如: - `apt-get install -y --target-directory=rootfs libgcc1` 5. **安装`init`文件、Shell和基本命令**: - ...

    shell学习笔记.docx

    - 示例:`ls /nonexistent/directory > /dev/null` **脚本包含:** - 使用 `. filename` 或 `source filename` 命令可以在当前Shell脚本中包含另一个Shell脚本。 - 示例:`. /path/to/another_script.sh` #### ...

    pyenv安装的使用例子

    if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" fi ``` 保存并关闭文件,然后运行`source ~/.bash_profile`或`source ~/.zshrc`使更改生效。 在Windows中,`pyenv-win`会在安装过程中自动...

    oracle10g笔记DBA

    19 20 * * * /bin/sh /app/prepay/cai.sh > /dev/null 2>&1 & ``` - 该脚本通过 crontab 在每天 20:19 分执行。 #### 八、总结 本文详细介绍了 Oracle 10g DBA 中的一些关键知识点,包括服务与启动命令、用户...

Global site tag (gtag.js) - Google Analytics