可以通过查看/dev下的信息,这样看着更明了,就不会搞错了
[root@db1 dev]# ls -l /dev/std*lrwxrwxrwx 1 root root 15 Jun 27 14:30 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Jun 27 14:30 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Jun 27 14:30 /dev/stdout -> /proc/self/fd/1 [root@db1 dev]#
下面是我们比较常见常用的命令
cmd > log 把输出(stdout)重定向到log文件中cmd >> log 把输出(stdout)追加重定向到到log文件中
cmd > log 2>&1 把stdout和stderr一起重定向到log文件
cmd >> log 2>&1 把stdout和stderr一起重定向到log文件
下面通过在oracle用户下通过不同的命令查看sysctl.conf来做测试
su - oracleA.find /etc -name sysctl.conf
[oracle@db1 ~]$ find /etc -name sysctl.conf
通过这个命令我们可以看到输出和错误输出都显示在屏幕上
find: `/etc/cups/ssl': Permission denied find: `/etc/sudoers.d': Permission denied find: `/etc/dhcp': Permission denied find: `/etc/mail/spamassassin/sa-update-keys': Permission denied /etc/sysctl.conf find: `/etc/sssd': Permission denied find: `/etc/lvm/backup': Permission denied find: `/etc/lvm/archive': Permission denied find: `/etc/lvm/cache': Permission denied find: `/etc/ntp/crypto': Permission denied find: `/etc/pki/CA/private': Permission denied find: `/etc/pki/rsyslog': Permission denied find: `/etc/audisp': Permission denied find: `/etc/polkit-1/localauthority': Permission denied find: `/etc/audit': Permission denied find: `/etc/selinux/targeted/modules/active': Permission denied find: `/etc/ipsec.d': Permission denied [oracle@db1 ~]$
B.find /etc -name sysctl.conf 1>find.out 2>find.err
[oracle@db1 ~]$ find /etc -name sysctl.conf 1>find.out 2>find.err
通过这个命令我们可以看到输出输入分别写入到不同的文件
[oracle@db1 ~]$ cat find.out /etc/sysctl.conf [oracle@db1 ~]$ cat find.err find: `/etc/cups/ssl': Permission denied find: `/etc/sudoers.d': Permission denied find: `/etc/dhcp': Permission denied find: `/etc/mail/spamassassin/sa-update-keys': Permission denied find: `/etc/sssd': Permission denied find: `/etc/lvm/backup': Permission denied find: `/etc/lvm/archive': Permission denied find: `/etc/lvm/cache': Permission denied find: `/etc/ntp/crypto': Permission denied find: `/etc/pki/CA/private': Permission denied find: `/etc/pki/rsyslog': Permission denied find: `/etc/audisp': Permission denied find: `/etc/polkit-1/localauthority': Permission denied find: `/etc/audit': Permission denied find: `/etc/selinux/targeted/modules/active': Permission denied find: `/etc/ipsec.d': Permission denied [oracle@db1 ~]$
C.find /etc -name sysctl.conf &>err
[oracle@db1 ~]$ find /etc -name sysctl.conf &>err
通过这个命令我们可以看到输出和输入写入到一个文件
find: `/etc/cups/ssl': Permission denied find: `/etc/sudoers.d': Permission denied find: `/etc/dhcp': Permission denied find: `/etc/mail/spamassassin/sa-update-keys': Permission denied /etc/sysctl.conf find: `/etc/sssd': Permission denied find: `/etc/lvm/backup': Permission denied find: `/etc/lvm/archive': Permission denied find: `/etc/lvm/cache': Permission denied find: `/etc/ntp/crypto': Permission denied find: `/etc/pki/CA/private': Permission denied find: `/etc/pki/rsyslog': Permission denied find: `/etc/audisp': Permission denied find: `/etc/polkit-1/localauthority': Permission denied find: `/etc/audit': Permission denied find: `/etc/selinux/targeted/modules/active': Permission denied find: `/etc/ipsec.d': Permission denied [oracle@db1 ~]$
D.find /etc -name sysctl.conf >log 2>&1
[oracle@db1 ~]$ find /etc -name sysctl.conf >log 2>&1
通过这个命令我们可以看到输出和输入写入到一个文件
find: `/etc/cups/ssl': Permission denied find: `/etc/sudoers.d': Permission denied find: `/etc/dhcp': Permission denied find: `/etc/mail/spamassassin/sa-update-keys': Permission denied /etc/sysctl.conf find: `/etc/sssd': Permission denied find: `/etc/lvm/backup': Permission denied find: `/etc/lvm/archive': Permission denied find: `/etc/lvm/cache': Permission denied find: `/etc/ntp/crypto': Permission denied find: `/etc/pki/CA/private': Permission denied find: `/etc/pki/rsyslog': Permission denied find: `/etc/audisp': Permission denied find: `/etc/polkit-1/localauthority': Permission denied find: `/etc/audit': Permission denied find: `/etc/selinux/targeted/modules/active': Permission denied find: `/etc/ipsec.d': Permission denied [oracle@db1 ~]$
E.find /etc -name sysctl.conf >log 2>1
[oracle@db1 ~]$ find /etc -name sysctl.conf >log 2>1
注意这个是错误的写法,这个会把错误输出写到文件1中
[oracle@db1 ~]$ cat 1find: `/etc/cups/ssl': Permission denied find: `/etc/sudoers.d': Permission denied find: `/etc/dhcp': Permission denied find: `/etc/mail/spamassassin/sa-update-keys': Permission denied find: `/etc/sssd': Permission denied find: `/etc/lvm/backup': Permission denied find: `/etc/lvm/archive': Permission denied find: `/etc/lvm/cache': Permission denied find: `/etc/ntp/crypto': Permission denied find: `/etc/pki/CA/private': Permission denied find: `/etc/pki/rsyslog': Permission denied find: `/etc/audisp': Permission denied find: `/etc/polkit-1/localauthority': Permission denied find: `/etc/audit': Permission denied find: `/etc/selinux/targeted/modules/active': Permission denied find: `/etc/ipsec.d': Permission denied[oracle@db1 ~]$
[oracle@db1 ~]$ cat log
/etc/sysctl.conf [oracle@db1 ~]$
>&n 使用系统调用dup2复制文件描述符n并把结果用作标准输出
[oracle@db1 ~]$ man dupDUP(2) Linux Programmer’s Manual DUP(2)
NAME
dup, dup2, dup3 - duplicate a file descriptor
SYNOPSIS
#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
#define _GNU_SOURCE
#include <unistd.h>
int dup3(int oldfd, int newfd, int flags);
DESCRIPTION
These system calls create a copy of the file descriptor oldfd.
dup() uses the lowest-numbered unused descriptor for the new descriptor.
dup2() makes newfd be the copy of oldfd, closing newfd first if necessary, but note the following:
* If oldfd is not a valid file descriptor, then the call fails, and newfd is not closed.
* If oldfd is a valid file descriptor, and newfd has the same value as oldfd, then dup2() does nothing, and returns newfd.
After a successful return from one of these system calls, the old and new file descriptors may be used interchangeably. They refer to
the same open file description (see open(2)) and thus share file offset and file status flags; for example, if the file offset is modi-
fied by using lseek(2) on one of the descriptors, the offset is also changed for the other.
The two descriptors do not share file descriptor flags (the close-on-exec flag). The close-on-exec flag (FD_CLOEXEC; see fcntl(2)) for
the duplicate descriptor is off.
Reference
http://www.tldp.org/LDP/abs/html/io-redirection.html
http://baike.baidu.com/view/2173319.htm
http://baike.baidu.com/view/1303430.htm