《LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令》要點(diǎn):
本文介紹了LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
本節(jié)討論一下幾個(gè)問(wèn)題:
1. 文件描述符.
2. 重定向.
3. 管道符
4. tee的用法.
在Linux系統(tǒng)中一切皆文件.文件夾和設(shè)備都是文件.如何用來(lái)區(qū)別不同的文件呢?這里的區(qū)別不是我們?cè)赪indows下看到的后綴名不同來(lái)區(qū)別.也不是我們?cè)贚inux下用ls 命令看到的不同文件的列表.這里的文件描述符主要討論的是對(duì)文件操作的一個(gè)標(biāo)識(shí)符.無(wú)操作就無(wú)標(biāo)識(shí)符.?? 好比兩個(gè)進(jìn)程同時(shí)在對(duì)同一個(gè)文件進(jìn)行讀操作.
如何區(qū)分這兩個(gè)讀操作呢?這就必要文件文件描述符來(lái)區(qū)別了.每一次打開一個(gè)文件就形成了一個(gè)文件描述符,后打開的描述符一般都要比先打開的文件描述符大.
好比:我們可以man 一下 open函數(shù). 看一下返回值:
? [root@xiaolyu ~]# man open
也便是說(shuō)文件描述符是一個(gè)整數(shù).當(dāng)然了,系統(tǒng)默認(rèn)最大是1024. 我們不妨用ulimit -n 來(lái)查看一下.
我們也可以查看一下:man socket 一下 看一下效果:
?也便是說(shuō)文件描述符可以通過(guò)多種途徑來(lái)生成.記住:只要對(duì)文件進(jìn)行操作,就會(huì)返回文件描述符.
然后我們來(lái)看看系統(tǒng)自帶的3個(gè)文件描述符.
這三個(gè)是最小的文件描述符,我們本身操作文件,返回的文件描述符最小都是從4開始的.
stdin? ?尺度輸入 ?默認(rèn)的設(shè)備是鍵盤 ? ?文件描述符為:0?
命令將從標(biāo)準(zhǔn)輸入文件中? 讀取? 在執(zhí)行過(guò)程中的 必要的? 輸入數(shù)據(jù). ?-->數(shù)據(jù)來(lái)源于文件
stdout 尺度輸出? 默認(rèn)的設(shè)備是 顯示器? 文件描述符為:1
命令執(zhí)行后的輸出結(jié)果,發(fā)送到尺度輸出文件. ?-->結(jié)果輸出到文件
stderr 尺度錯(cuò)誤 ? 默認(rèn)的設(shè)備是顯示器? 文件描述符為:2
?命令將執(zhí)行期間的各種錯(cuò)誤信息發(fā)送到尺度錯(cuò)誤文件 -->錯(cuò)誤信息發(fā)送到文件
尺度輸入,尺度輸出和尺度錯(cuò)誤默認(rèn)使用鍵盤和顯示器作為關(guān)聯(lián)設(shè)備與操作系統(tǒng)進(jìn)行交互完成最基本的輸入,輸出操作.
我們不妨用man stdin 來(lái)看一下:[root@xiaolyu ~]# man stdin?
?以上就是關(guān)于文件描述符.
?重定向包括:重定向輸出和重定向輸入:
?重定向輸出: ?
? ? 將命令的正常輸出結(jié)果保留到指定的文件中,而不是直接顯示在顯示器的屏幕上
? ? 重定向輸出使用”>” “>>” 操作符號(hào)
? ?> 覆蓋文件
? ?>> 追加內(nèi)容
? 若重定向的輸出的文件不存在,則會(huì)新建該文件
eg: ?查看當(dāng)前主機(jī)的CPU的類型保留到kernel.txt文件中(而不是直接顯示到屏幕上)
? ? uname -p 查看cpu類型信息?
? ?
?將內(nèi)核 的版本信息 和操作系統(tǒng)信息 追加到kernel.txt
? ?
? ?重定向輸出就將結(jié)果輸出到文件中(覆蓋和追加兩種方式)
?
重定向輸入?
? ?將命令中接收輸入的途徑由默認(rèn)的鍵盤改為其他文件.而不是等待從鍵盤輸入
? ?從文件讀取數(shù)據(jù)
? ?操作符: “<”
? ?通過(guò)重定向輸入可以使一些交互式操作過(guò)程能夠通過(guò)讀取文件來(lái)完成
?
? eg:使用passwd 設(shè)置暗碼時(shí).每次都根據(jù)提示輸入暗碼比較煩瑣
? ? 改用重定向輸入將可以忽略交互式的過(guò)程.而自動(dòng)完成暗碼設(shè)置 ?(結(jié)合—stdin 選項(xiàng)來(lái)識(shí)別標(biāo)準(zhǔn)的輸入)
? ?使用非交互式的去執(zhí)行設(shè)置暗碼:
?
?
[root@xiaolyu ~]# touch passwd.txt
[root@xiaolyu ~]# vim passwd.txt
[root@xiaolyu ~]# useradd zhangsan
useradd: user 'zhangsan' already exists
[root@xiaolyu ~]# useradd lisi
[root@xiaolyu ~]# passwd --stdin lisi < passwd.txt
Changing password for user lisi.
passwd: all authentication tokens updated successfully.
? 重定向輸入便是通過(guò)文件中的內(nèi)容作為輸入的數(shù)據(jù)
錯(cuò)誤重定向:
? ?將命令執(zhí)行過(guò)程中出現(xiàn)的錯(cuò)誤信息 (選項(xiàng)或參數(shù)錯(cuò)誤) 保留到指定的文件,而不是直接顯示到顯示器
? ?錯(cuò)誤信息保留到文件
? ?操作符: 使用2>
? ?2指的是錯(cuò)誤文件的編號(hào) (在使用尺度的輸入和輸出省略了1 0 編號(hào))
在實(shí)際應(yīng)用中,錯(cuò)誤重定向可以用來(lái)收集執(zhí)行的錯(cuò)誤信息.為排錯(cuò)提供依據(jù);
?對(duì)于shell腳本還可以將無(wú)關(guān)緊要的錯(cuò)誤信息重定向到空文件/dev/null中?以堅(jiān)持腳本輸出的簡(jiǎn)潔
eg: 使用tar命令進(jìn)行備份的時(shí)候出新的錯(cuò)誤信息保留到err.log文件中
?
?把/dev/null看作"黑洞".?它非常等價(jià)于一個(gè)只寫文件. 所有寫入它的內(nèi)容都會(huì)永遠(yuǎn)丟失. 而嘗試從它那兒讀取內(nèi)容則什么也讀不到. 然而,?/dev/null對(duì)命令行和腳本都非常的有用.
?
?echo $? ? 表示最近一次操作是否成功 . 0 成功? 非零不成功
?正確的寫到一個(gè)文件,錯(cuò)誤的在寫到一個(gè)文件
[root@xiaolyu ~]#? ls /tmp/ /nginx? 1> a.txt 2>b.txt
保留到一張圖片比較清爽:
輸出到同一個(gè)文件中:
[root@xiaolyu ~]#? ls ? /tmp/ ?/nginx/ ?1>a.txt ?2>&1?
?
?
或者以下這種寫法 ,重定向到文件的1可以省略,因?yàn)槟J(rèn)便是1.
[root@xiaolyu ~]#? ls /tmp/ /nginx/ >a.txt 2>&1
?
&> 混合輸出
不分正確的還是錯(cuò)誤的
[root@xiaolyu ~]#?ls /opt/? /mysql &> a.txt
?
? eg: 查看nginx的進(jìn)程.
[root@xiaolyu ~]#?ps -aux | grep nginx?
? eg: 查看某個(gè)進(jìn)程的端口:
功能:讀取標(biāo)準(zhǔn)輸入的數(shù)據(jù),并將其內(nèi)容輸出成文件.
語(yǔ)法:tee [-a][--help][--version][文件...]
tee指令會(huì)從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),將其內(nèi)容輸出到標(biāo)準(zhǔn)輸出設(shè)備,同時(shí)保存成文件.
參 數(shù):
-a或? --append 追加
--help 在線贊助.
--version 顯示版本信息
eg1
[root@xiaolyu ~]# who? 查看用戶登錄信息
root :0 2016-08-13 07:58 (:0)
root pts/0 2016-08-13 11:21 (:0)
[root@xiaolyu ~]# who | tee who.out
?將who的結(jié)果輸出到who.out文件 ,同時(shí)在終端顯示:
?
eg2
[root@xiaolyu ~]# pwd | tee -a who.out? ? 追加
[root@xiaolyu ~]# ls -l yyy | tee -a who.out?
本文永久更新鏈接地址:
維易PHP培訓(xùn)學(xué)院每天發(fā)布《LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/10562.html