天天看點

/dev/tty /dev/ttyS0 /dev/tty0,/dev/null差別

1./dev/tty表示控制終端

如果目前程序有控制終端(Controlling Terminal)的話,那麼/dev/tty就是目前程序的控制終端的裝置特殊檔案。可以使用指令”ps –ax”來檢視程序與哪個控制終端相連。對于你登入的shell,/dev/tty就是你使用的終端,裝置号是(5,0)。使用指令”tty”可以檢視它具體對應哪個實際終端裝置。 

root@iZ23onhpqvwZ:/dev# echo "test" > /dev/tty

test (輸出了test)

控制終端可以是Xwindows模式下的僞終端(/dev/pts/*),也可以是控制台虛拟終端(/dev/tty*)

  1. if (device == MKDEV(5, 0)) {
  2.         tty = get_current_tty();
  3.         if (!tty) {
  4.             mutex_unlock(&tty_mutex);
  5.             return -ENXIO;
  6.         }
  7.         driver = tty_driver_kref_get(tty->driver);
  8.         index = tty->index;
  9.         filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
  10.         /* noctty = 1; */
  11.         /* FIXME: Should we take a driver reference ? */
  12.         tty_kref_put(tty);
  13.         goto got_driver;
  14.     }

"driver"對應到驅動,“index"對應到具體的裝置,我們從中也可以看出/dev/tty有些類似于到實際所使用終端裝置的一個連結。

2./dev/tty0則是目前所使用虛拟終端的一個别名

  1. # tty(檢視目前TTY)
  2. /dev/tty1
  3. #echo "test tty0" > /dev/tty0
  4. test tty0

核心實作如下:

  1. if (device == MKDEV(4, 0)) {
  2.         extern struct tty_driver *console_driver;
  3.         driver = tty_driver_kref_get(console_driver);
  4.         index = fg_console;
  5.         noctty = 1;

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

指令的結果可以通過%>的形式來定義輸出

/dev/null 代表空裝置檔案

那麼本文标題的語句:

1>/dev/null 首先表示标準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。

2>&1 接着,标準錯誤輸出重定向等同于 标準輸出,因為之前标準輸出已經重定向到了空裝置檔案,是以标準錯誤輸出也重定向到空裝置檔案。