linux下分析prn文件,linux专题一之文件描述符、重定向、管道符、tee命令

本节讨论一下几个问题:

1. 文件描述符。

2. 重定向。

3. 管道符

4. tee的用法。

1. 文件描述符。

在linux系统中一切皆文件。文件夹和设备都是文件。如何用来区别不同的文件呢?这里的区别不是我们在windows下看到的后缀名不同来区别。也不是我们在linux下用ls 命令看到的不同文件的列表。这里的文件描述符主要讨论的是对文件操作的一个标识符。无操作就无标识符。   比如两个进程同时在对同一个文件进行读操作。

如何区分这两个读操作呢?这就需要文件文件描述符来区别了。每一次打开一个文件就形成了一个文件描述符,后打开的描述符一般都要比先打开的文件描述符大。

比如:我们可以man 一下 open函数。 看一下返回值:

[root@xiaolyu ~]# man open

94001300213c158aa49dc4c6d7fd0db2.png

也就是说文件描述符是一个整数。当然了,系统默认最大是1024. 我们不妨用ulimit -n 来查看一下。

51d406968bde4cfaf9693683a7f8cc06.png

我们也可以查看一下:man socket 一下 看一下效果:

8610d755c570f01e4f49840ea02ee464.png

也就是说文件描述符可以通过多种途径来生成。记住:只要对文件进行操作,就会返回文件描述符。

然后我们来看看系统自带的3个文件描述符。

71806c123769463e9332658df97e50ee.png

这三个是最小的文件描述符,我们自己操作文件,返回的文件描述符最小都是从4开始的。

stdin   标准输入  默认的设备是键盘    文件描述符为:0

命令将从标准输入文件中   读取   在执行过程中的 需要的  输入数据.  -->数据来源于文件

stdout 标准输出  默认的设备是 显示器  文件描述符为:1

命令执行后的输出结果,发送到标准输出文件.  -->结果输出到文件

stderr 标准错误   默认的设备是显示器  文件描述符为:2

命令将执行期间的各种错误信息发送到标准错误文件 -->错误信息发送到文件

标准输入,标准输出和标准错误默认使用键盘和显示器作为关联设备与操作系统进行交互完成最基本的输入,输出操作.

我们不妨用man stdin 来看一下:[root@xiaolyu ~]# man stdin

ac64d4f9442d0e29fdfaa8cf5e5773e8.png

以上便是关于文件描述符。

2. 重定向.

重定向包含:重定向输出和重定向输入:

重定向输出:

将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上

重定向输出使用”>” “>>” 操作符号

>  覆盖文件

>> 追加内容

若重定向的输出的文件不存在,则会新建该文件

eg:查看当前主机的CPU的类型保存到kernel.txt文件中(而不是直接显示到屏幕上)

uname -p查看cpu类型信息

b58e76ac3fa086c16349adb0e71255fc.png

将内核 的版本信息 和操作系统信息 追加到kernel.txt

9590ffa6fc0e3344e4364a25b3df93b5.png

重定向输出就将结果输出到文件中(覆盖和追加两种方式)

重定向输入

将命令中接收输入的途径由默认的键盘改为其他文件.而不是等待从键盘输入

从文件读取数据

操作符: “

通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成

eg:使用passwd 设置密码时.每次都根据提示输入密码比较烦琐

改用重定向输入将可以忽略交互式的过程.而自动完成密码设置(结合—stdin 选项来识别标准的输入)

使用非交互式的去执行设置密码:

fa611aefa8f8e204c670d41c4ca4e457.png

[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文件中

03f8a48e8558983186c2f8271094604d.png

把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.

a7c604a67a45f22a5493ce7e2febf8a8.png

echo $?   表示最近一次操作是否成功 。 0成功  非零不成功

正确的写到一个文件,错误的在写到一个文件

[root@xiaolyu ~]#  ls /tmp/ /nginx  1> a.txt 2>b.txt

19cd248bad2716f45b764b4c51c2e5ba.png

f0fe4271fb76c3db885af1c4524b58b1.png

保存到一张图片比较清爽:

2763a84576d71f829deda027ecdf89e9.png

输出到同一个文件中:

[root@xiaolyu ~]#ls   /tmp/  /nginx/  1>a.txt  2>&1

44f0759e4a62a8a6d3f9fc49877b753a.png

或者以下这种写法 ,重定向到文件的1可以省略,因为默认就是1.

[root@xiaolyu ~]#  ls /tmp/ /nginx/ >a.txt 2>&1

a3eb5e0d16032cd2287ecdac1ae25d34.png

&>混合输出

不分正确的还是错误的

[root@xiaolyu ~]# ls /opt/  /mysql &> a.txt

b01d82edc9ca7309386ffc37cf70820c.png

3. 管道符

这里只提管道符,关于管道有专门创建管道的函数,以及有名管道和无名管道,以及管道之间的通信,我放在IPC通信中阐述。

管道符,可以把两条命令连起来,前面一条命令的输出当成后面一条命令的输入。

eg: 查看nginx的进程。

[root@xiaolyu ~]# ps -aux | grep nginx

eecf2f4330969e8791ae1d7c0fc82983.png

eg: 查看某个进程的端口:

6d5c20a4ca7008b0238bc14f81b8b7f0.png

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文件 ,同时在终端显示:

ad1619c14452cafe01e5317813388652.png

eg2

[root@xiaolyu ~]# pwd

| tee -a who.out追加

e931ccd9f9741e2520818bc316cf4666.png

要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取。

[root@xiaolyu ~]# ls -l yyy | tee -a who.out

5a238a99e046ae166623b21e1512ed2d.png

把标准错误也被tee读取

[root@xiaolyu ~]# ls -l yyy   2>&1 | tee -a who.out

3548f9b103bd2c7d9f7262562a56d68d.png

linux内核中的文件描述符&lpar;二&rpar;--socket和文件描述符

http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...

&lbrack;转&rsqb; 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 查询数据库所有的表名&plus;字段

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年),原因就是很多的浏览器不支持新的语 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值