linux下分析prn文件,linux专题一之文件描述符、重定向、管道符、tee命令
本節討論一下幾個問題:
1. 文件描述符。
2. 重定向。
3. 管道符
4. tee的用法。
1. 文件描述符。
在linux系統中一切皆文件。文件夾和設備都是文件。如何用來區別不同的文件呢?這里的區別不是我們在windows下看到的后綴名不同來區別。也不是我們在linux下用ls 命令看到的不同文件的列表。這里的文件描述符主要討論的是對文件操作的一個標識符。無操作就無標識符。?? 比如兩個進程同時在對同一個文件進行讀操作。
如何區分這兩個讀操作呢?這就需要文件文件描述符來區別了。每一次打開一個文件就形成了一個文件描述符,后打開的描述符一般都要比先打開的文件描述符大。
比如:我們可以man 一下 open函數。 看一下返回值:
[root@xiaolyu ~]# man open
也就是說文件描述符是一個整數。當然了,系統默認最大是1024. 我們不妨用ulimit -n 來查看一下。
我們也可以查看一下:man socket 一下 看一下效果:
也就是說文件描述符可以通過多種途徑來生成。記住:只要對文件進行操作,就會返回文件描述符。
然后我們來看看系統自帶的3個文件描述符。
這三個是最小的文件描述符,我們自己操作文件,返回的文件描述符最小都是從4開始的。
stdin? ?標準輸入 ?默認的設備是鍵盤 ? ?文件描述符為:0
命令將從標準輸入文件中?? 讀取?? 在執行過程中的 需要的? 輸入數據. ?-->數據來源于文件
stdout 標準輸出? 默認的設備是 顯示器? 文件描述符為:1
命令執行后的輸出結果,發送到標準輸出文件. ?-->結果輸出到文件
stderr 標準錯誤 ??默認的設備是顯示器? 文件描述符為:2
命令將執行期間的各種錯誤信息發送到標準錯誤文件 -->錯誤信息發送到文件
標準輸入,標準輸出和標準錯誤默認使用鍵盤和顯示器作為關聯設備與操作系統進行交互完成最基本的輸入,輸出操作.
我們不妨用man stdin 來看一下:[root@xiaolyu ~]# man stdin
以上便是關于文件描述符。
2. 重定向.
重定向包含:重定向輸出和重定向輸入:
重定向輸出:
將命令的正常輸出結果保存到指定的文件中,而不是直接顯示在顯示器的屏幕上
重定向輸出使用”>” “>>” 操作符號
> 覆蓋文件
>> 追加內容
若重定向的輸出的文件不存在,則會新建該文件
eg:查看當前主機的CPU的類型保存到kernel.txt文件中(而不是直接顯示到屏幕上)
uname -p查看cpu類型信息
將內核 的版本信息 和操作系統信息 追加到kernel.txt
重定向輸出就將結果輸出到文件中(覆蓋和追加兩種方式)
重定向輸入
將命令中接收輸入的途徑由默認的鍵盤改為其他文件.而不是等待從鍵盤輸入
從文件讀取數據
操作符: “
通過重定向輸入可以使一些交互式操作過程能夠通過讀取文件來完成
eg:使用passwd 設置密碼時.每次都根據提示輸入密碼比較煩瑣
改用重定向輸入將可以忽略交互式的過程.而自動完成密碼設置(結合—stdin 選項來識別標準的輸入)
使用非交互式的去執行設置密碼:
[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.
重定向輸入就是通過文件中的內容作為輸入的數據
錯誤重定向:
將命令執行過程中出現的錯誤信息 (選項或參數錯誤) 保存到指定的文件,而不是直接顯示到顯示器
錯誤信息保存到文件
操作符: 使用2>
2指的是錯誤文件的編號 (在使用標準的輸入和輸出省略了1 0 編號)
在實際應用中,錯誤重定向可以用來收集執行的錯誤信息.為排錯提供依據;
對于shell腳本還可以將無關緊要的錯誤信息重定向到空文件/dev/null中以保持腳本輸出的簡潔
eg: 使用tar命令進行備份的時候出新的錯誤信息保存到err.log文件中
把/dev/null看作"黑洞".?它非常等價于一個只寫文件. 所有寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什么也讀不到. 然而,?/dev/null對命令行和腳本都非常的有用.
echo $? ? 表示最近一次操作是否成功 。 0成功? 非零不成功
正確的寫到一個文件,錯誤的在寫到一個文件
[root@xiaolyu ~]#??ls /tmp/ /nginx? 1> a.txt 2>b.txt
保存到一張圖片比較清爽:
輸出到同一個文件中:
[root@xiaolyu ~]#ls ? /tmp/ ?/nginx/ ?1>a.txt ?2>&1
或者以下這種寫法 ,重定向到文件的1可以省略,因為默認就是1.
[root@xiaolyu ~]#??ls /tmp/ /nginx/ >a.txt 2>&1
&>混合輸出
不分正確的還是錯誤的
[root@xiaolyu ~]#?ls /opt/? /mysql &> a.txt
3. 管道符
這里只提管道符,關于管道有專門創建管道的函數,以及有名管道和無名管道,以及管道之間的通信,我放在IPC通信中闡述。
管道符,可以把兩條命令連起來,前面一條命令的輸出當成后面一條命令的輸入。
eg: 查看nginx的進程。
[root@xiaolyu ~]#?ps -aux | grep nginx
eg: 查看某個進程的端口:
4. tree命令。
功能:讀取標準輸入的數據,并將其內容輸出成文件。
語法:tee [-a][--help][--version][文件...]
tee指令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件。
參 數:
-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的結果輸出到who.out文件 ,同時在終端顯示:
eg2
[root@xiaolyu ~]# pwd
| tee -a who.out追加
要注意的是:在使用管道線時,前一個命令的標準錯誤輸出不會被tee讀取。
[root@xiaolyu ~]# ls -l yyy | tee -a who.out
把標準錯誤也被tee讀取
[root@xiaolyu ~]# ls -l yyy ? 2>&1 | tee -a who.out
linux內核中的文件描述符(二)--socket和文件描述符
http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux內核中的文件描述符(二)--socket和文件描述符 Kernel ve ...
[轉] linux系統文件流、文件描述符與進程間關系詳解
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)進程與文件的關系錯綜復雜,本教程試圖詳細的闡述這個問題. 包括: ??? ...
Linux中通過Socket文件描述符尋找連接狀態介紹
針對下文的總結:socket是一種文件描述符 進程的打開文件描述符表 Linux的三個系統調用:open,socket,pipe 返回的都是一個描述符.不同的進程中,他們返回的描述符可以相同.那么,在 ...
linux最大允許的文件描述符open files數nofile修改
open file resource limit 是linux中process可以打開的文件句柄數量.增加這個數值需要調整兩個配置: 第一步, 修改系統最大允許的文件描述符 查看當前的設置: $ ca ...
Linux最大文件句柄(文件描述符)限制和修改
轉自:http://jameswxx.iteye.com/blog/2096461 寫這個文章是為了以正視聽,網上的文章人云亦云到簡直令人發指.到底最大文件數被什么限制了?too many open ...
linux修改最大的文件描述符(max file descriptors)
用xshell登錄linux系統之后,用命令>ulimit -a 注意到系統模式是1024個 使用>ulimit -n 數量,可臨時更改,生效范圍為當前會話 永久修改的方法: > v ...
Linux Shell 文件描述符 及 stdin stdout stderr 重定向
Abstract: 1) Linux Shell 命令的標準輸入.標準輸出.標準錯誤,及其重定位: 2)Linux Shell 操作自定義文件描述符: 文件描述符是與文件相關聯的一些整數,他們保持與已 ...
Linux exec與文件描述符
看到好幾篇文章講述exec都是一知半解,所以我盡量說的清楚明白一些.本文首先講述Linux文件描述符,然后是exec,最后舉例說明exec I/O重定向及其用法. 概念:exec命令用于調用并執行指令 ...
Linux 文件描述符詳解
Overview 了解Linux怎樣處理輸入和輸出是非常重要的.一旦我們了解其原理以后,我們就可以正確熟練地使用腳本把內容輸出到正確的位置.同樣我們也可以更好地理解輸入重定向和輸出重定向. Linux ...
隨機推薦
【轉】ORACLE的REDO與UNDO
一.什么是redo?redo:oracle在在線或者歸檔重做日志文件中的記錄的信息,外以出現失敗時可以利用這些數據來"重放"事務.每個oracle數據都至少有二個在線重做日志組,每 ...
Debug 常見問題總結(持續更新)
2016-9-24 1.for循環變量做參數一定要小心,嵌套一個for變量不要用同一個. 2.字符串處理要打好下標的草稿,不然很容易搞混.(方法待討論). 3.整形比較比較容易忽略=的問題 ,> ...
Uwp Windows10獲取設備位置(經緯度)
先在Package.appxmanifest中配置位置權限 2. 創建LocationManager類 using System; using System.Collections.Generic; ...
Vue學習筆記1
目錄 前言 1.vue和avalon一樣,都不支持VM初始時不存在的屬性 2.input元素中屬性與v-model同時存在以屬性為優先 3.VM中的函數放到data屬性和methods屬性中的區別,以 ...
sql server 查詢數據庫所有的表名+字段
SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT? ??(case when a.colorder= ...
C - Point on Spira
Time Limit:2000MS?????Memory Limit:262144KB?????64bit IO Format:%I64d & %I64u Submit?Status?Pr ...
linux od命令
用戶通常使用od命令查看特殊格式的文件內容.通過指定該命令的不同選項可以以十進制.八進制.十六進制和ASCII碼來顯示文件.od命令系統默認的顯示方式是八進制,這也是該命令的名稱由來(Octal Du ...
Flex TextInput 動態推斷輸入內容
Flex TextInput 動態推斷輸入內容 xml version="1.0" encoding="utf-8"?>
Visual Studio 編輯器
如何擴展 Visual Studio 編輯器 在 Visual Studio 2010 的時代,擴展 Visual Studio 的途徑有很多,開發者可以選擇宏.Add-in.MEF 和 VSPack ...
Es6主要特征詳解
一.簡介 本文將對es6的最佳特性進行分享和講解.es6也稱ES6/ECMAScript2015,在2015年誕生,但是目前實際開發中還很多用的是ES5(2009年),原因就是很多的瀏覽器不支持新的語 ...
總結
以上是生活随笔為你收集整理的linux下分析prn文件,linux专题一之文件描述符、重定向、管道符、tee命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十四点游戏python_[求助]关于二
- 下一篇: linux网卡固件名,修改CentOS7