Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching

Oracle Engineered System


当前位置: 首页 » 技术文章 » Oracle

Unix I/O Redirection and stdin,stderr,stdout

常用FD有3个:0(stdin,标准输入,默认从键盘读取信息)、1(stdout,标准输出,默认将输出结果输出至终端)、2(stderr,标准错误输出,默认也会显示在终端)

可以通过查看/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 - oracle

A.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

通过这个命令我们可以看到输出和输入写入到一个文件

[oracle@db1 ~]$ cat 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

通过这个命令我们可以看到输出和输入写入到一个文件

[oracle@db1 ~]$ cat log
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 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
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 dup
DUP(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


关键词:linux 

相关文章

Install oracle products on docker
How to enable autologin on OEL6/7
Linux的分支有多少,你知道么?
Linux下配置vsftpd
如何配置HITACHI存储多路径软件
Exadata OS用户的密码策略
whats sosreport
Config xming+putty for X11 forwarding
在Linux中如何重置root密码,当你忘记时
在Oracle Enterprise Linux上使用nmon
如何在Windows和Linux上启用Large page
Linux性能优化方面的"神图"
Top