学习笔记:CentOS 7学习之十一:文件的重定向
1、文件描述符定义
文件描述符:是内核为了高效管理已被而打开的文件所创建的缩影,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符:文件描述符是一个简单的非负整数,用于标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的文件是0,第二个是1,以此类推。可以理解为是一个文件的身份ID。
用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标,显示器)也是一个文件
Number | Channel | Description | Default connection | Usage | 描述 |
---|---|---|---|---|---|
0 | stdin | standard input | keyboard | read only | 默认设备:键盘,文件编号0 |
1 | stdout | standard output | Terminal | write only | 默认设备:显示器,文件编号1,可重新定向到文件 |
2 | stuerr | standard error | Terminal | write only | 默认设备:显示器,文件编号2,可重新定向到文件 |
3+ | filename | other files | none | read and/or write |
举例:
1)查看一个进程打开了那些文件
ll /proc/进程ID/fd
如下所示:
vim /etc/passwd新开终端
[root@linuxprobe ~]# ps -aux|grep passwd
root 6705 0.1 0.1 151664 5364 pts/2S+ 10:54 0:00 vim /etc/passwd
root 6707 0.0 0.0 112720 968 pts/0R+ 10:54 0:00 grep --color=auto passwd新开终端
[root@linuxprobe ~]# ll /proc/6705/fd
总用量 0
lrwx------. 1 root root 64 4月 30 10:54 0 -> /dev/pts/2
lrwx------. 1 root root 64 4月 30 10:54 1 -> /dev/pts/2
lrwx------. 1 root root 64 4月 30 10:54 2 -> /dev/pts/2
lrwx------. 1 root root 64 4月 30 10:54 4 -> /etc/.passwd.swp
- 注释:这些 0、1、2就是文件的描述符。一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理。这3个文件分别对应文件描述符为0、1和2也就是宏替换STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。/proc/进程ID/fs /#这个fd目录下,专门存放文件描述符。对文件描述符的操作就是对文件本身的操作。可以通过修改文件描述符来修改文件。
2)查看和临时设置一个进程最多可以打开几个文件
即:一个进程可以打开的文件描述符的限制:
查看文件限制:
[root@linuxprobe ~]# ulimit -n
1024临时修改文件限制:
[root@linuxprobe ~]# ulimit -n 2048
[root@linuxprobe ~]# ulimit -n
2048
2.重定向的含义
2.1 输出重定向
定义:将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器上
重定向输出使用“>”,">>" 操作符号
语法:“> 文件名” #表示将标准输出的内容,写到后面的文件中,如果此文件名已经存在,将会覆盖原文件中的内容。
“>> 文件名” #表示将标准输出的内容,追加到后面的文件中。若重定向的输出文件不存在,则会新建文件。
例1:查看当前主机的CPU类型保存到cpu.txt文件中(而不是直接显示到屏幕上):
cat /proc/cpuinfo > cpu.txt
例2:将当前内核的信息追加到cpu.txt文件中
uname -a >> cpu.txt
例3:清空一个文件:
>cpu.txt
2.2 输入重定向
“ < 文件名”, 输入重定向,将命令的输入由标准输入改为文件名。
例1:将命令中接受输出的途径由默认的键盘改为其他文件,而不是等待从键盘输入
grep root < /etc/passwd[root@linuxprobe ~]# grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
例2:mysql中数据导入
mysql -u root - p 123456 < 123.sql 将123.sql导入mysql数据库中
2.3 EOF
EOF本意是指End Of File,表明到了文件末尾。“EOF”通常与“<<”结合使用,“<<EOF”表示后续的输入作为子命令或者子shell的输入,直到遇到“EOF”,然后再次返回到主调shell,可以理解为分界符(delimiter)。既然是分解符,那么形式自然不是固定的,这里可以将"EOF"进行自定义,但是前后的“EOF”必须成对出现且不能和shell命令冲突。
举例:
1)在a.txt中持续输入字符,使用eof作为分解符
[root@linuxprobe ~]# cat > b.txt << efo
> asfdasfl
> asdfasdg
> 1231245
> 4566733
> 988081
> efo
[root@linuxprobe ~]# cat b.txt
asfdasfl
asdfasdg
1231245
4566733
988081
2)在a.txt中持续输入字符,使用自定义如ccc(不与shell命令冲突)作为分解符
[root@linuxprobe ~]# cat > c.txt <<ccc
> 1235
> 7erdrdsf
> erqtqtzxdg
> asfqwerqet
> afddfaf
> eof
> eof
> ccc
[root@linuxprobe ~]# cat c.txt
1235
7erdrdsf
erqtqtzxdg
asfqwerqet
afddfaf
eof
eof
3)在脚本中可以通过输入重定向来打印消息菜单
[root@linuxprobe ~]# vim p.sh#!/bin/bashcat << efo=======================1.mysql
2.oracle
3.httpd=======================
efo[root@linuxprobe ~]# chmod +x p.sh
[root@linuxprobe ~]# ./p.sh
=======================1.mysql
2.oracle
3.httpd=======================
2.4 错误重定向
将命令执行过程中出现的错误消息(消息或者参数错误)保存到指定的文件,而不是直接显示到显示器
作用:将错误信息保存到文件
操作符:标准错误重定向符号: “2>”;标准舒服:1<或者简写<;标准输出:0>或者>;
在实际应用中,错误重定向可以用来收集执行的错误信息,为排错提供依据;对于shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null中,用于保持脚本输出的简洁
举例
1)将错误显示的内容和正确显示的类容分开,将错误信息舒服到error.txt
[root@linuxprobe ~]# ll /etc/passwd helloworldls: 无法访问helloworld: 没有那个文件或目录
-rw-r--r--. 1 root root 3379 4月 30 10:58 /etc/passwd[root@linuxprobe ~]# ll /etc/passwd helloworld 2>error.txt-rw-r--r--. 1 root root 3379 4月 30 10:58 /etc/passwd[root@linuxprobe ~]# cat error.txt ls: 无法访问helloworld: 没有那个文件或目录
2.5 null黑洞和zero空文件
1). 把/dev/null看作“黑洞”,所有写入它的内容都会永远丢失,而尝试从它哪儿读取内容则什么都读不到。然而/dev/null对命令行和脚本都非常有用
2). /dev/zero在类unix操作系统中,/dev/zero是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL,ASCII NUL,0x00)。典型用法是用它来产生一个特定大小的空白文件。
例:使用dd命令产生一个50M的文件
参数 | 说明 |
---|---|
if | 代表输入文件。如果不指定if,默认就会从stdin中读取输入 |
of | 代表输出文件。如果不指定of,默认就将会stdout作为默认输出 |
bs | 代表字节为单位的块大小 |
count | 代表被复制的块数 |
[root@linuxprobe ~]# dd if=/dev/zero of=b.txt bs=1M count=50
记录了50+0 的读入
记录了50+0 的写出
52428800字节(52 MB)已复制,0.058321 秒,899 MB/秒
2.6 &>和>&符号
&表示等同于的意思
举例:
1)把正确和错误的消息输入到相同的位置
1>&2 把标准输出重新定向到标准错误;
2>&1 把标准错误重新定向到标准输出;
等同于把正确和错误的信息放到同一个文件
[root@linuxprobe ~]# ll /tmp xxx >1.txt 2>&1
[root@linuxprobe ~]# ll /tmp xxx 2>2.txt 1>&2
2)工作中shell脚本中的>/dev/null 2>&1是什么意思?
[root@linuxprobe ~]# cat /etc/passwd >/dev/null 2>&1
注:将标准输出和标准错误输出都重新定向到/dev/null,既将产生的所有信息丢弃;
11.3 管道|的使用
语法:
command -a|command -b|command -c|......
注意:
管道命令只处理前一个命令的正确输出,不处理错误输出;
管道右边的命令,必须能够接受标准输入的数据流命令才行;
管道符可以把两条命令连起来,它可以连接多个命令使用
11.4 tee命令
功能:读取标准输入的数据,并将内容输出成文件。
语法:tee 【-a】【--help】【--version】【文件...】
参数:-a, --append 内容追加到给定的文件而非覆盖
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件;
举例:
查询磁盘信息,同时将磁盘信息写入到file.txt
df -h|tee -a file.txt
---end
---2019-5-3 17:07:19
转载于:https://www.cnblogs.com/yj411511/p/10805707.html
学习笔记:CentOS 7学习之十一:文件的重定向相关推荐
- Python 学习笔记(3)对txt文件的读与写操作(下)
上一章节我们讨论了如何对txt文本文件进行读写操作,这一张将讨论如何进行二进制文件的写与读.<Python 学习笔记(3)对txt文件的读与写操作(上)>的链接如下https://blog ...
- FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程
FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...
- oracle 怎么看监听文件,【学习笔记】Oracle11G关于监听文件位置与监听文件大小限制...
[学习笔记]Oracle11G关于监听文件位置与监听文件大小限制 时间:2016-11-07 21:21 来源:Oracle研究中心 作者:HTZ 点击: 次 天萃荷净 Oracle研究中 ...
- Ubuntu学习笔记:VMware 导入虚拟机 .ova 文件
Ubuntu学习笔记:VMware 导入虚拟机 .ova 文件 首先要有一个需要导入的虚拟化格式程序包,(.ova:开放虚拟化格式分发程序包) 打开VMware,文件→打开,选择需要的导入的包后,为虚 ...
- VBA学习笔记1:将同个文件夹中的工作簿汇总为一个工作簿,并建立目录超链接
VBA学习笔记1:将同个文件夹中的工作簿汇总为一个工作簿,并建立目录超链接 1.将文件夹中的xlsx文件名复制到新工作簿: 2.将文件夹中的xlsx数据簿中的sheet复制到新表并重命名: 3.插入超 ...
- Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- Linux学习笔记(一):关于文件和目录权限的一小点内容
我的Linux学习笔记(一):关于文件和目录权限的一小点内容 前言: 之前说踏上了一条真正的程序员之路,实在是打脸,才三个月不到,就更换了工作,跑到单位上班来了.一是因为之前上班那家公司实在让我很恶心 ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- Python学习笔记(二):标准流与重定向
Python学习笔记(二):标准流与重定向 - SamWei - 博客园 Python学习笔记(二):标准流与重定向 Posted on 2012-02-19 22:36 SamWei 阅读(176) ...
- 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...
最新文章
- QIIME 2用户文档. 10元数据Metadata(2018.11)
- 深度学习:Neural Network Layers Understanding
- 【Rsync + inotify】 实时同步远程服务器目录文件
- DM368开发 -- 常用指令演示
- 机器学习之 weka学习(五)示例用法
- python写前端图形界面_如何Tkinter模块编写Python图形界面
- python 定时任务系统_Python定时任务,实现自动化的方法
- 整理一下网上看到的几个巧妙小电路
- Echarts数据可视化series-graph关系图,开发全解+完美注释
- java.exe 不是有效的win32_WinXP提示不是有效的Win32应用程序怎么办?
- 解决Apex英雄下载慢、origin平台下载打开的究极3种方法
- ROS入门之创建节点
- 抖音开展大规模打击刷粉、刷量,账号广告导流行动
- 全网最详细!vue中使用flv.js 播放直播监控视频流
- Redis 设置密码登录
- 转载的ctf练习链接
- CC00033.bigdatajava——|Java方法封装.V15|——|Java.v15|费氏数列.v01|递归实现|
- RobotStudio仿真—Smart组件创建动态夹具
- ATF 安全启动过程
- matlab中omg什么意思,英文聊天中omg,jk,lol,Lmao是什么意思
热门文章
- python学习方向-Python学习者的发展方向
- python使用界面-如何使用python图形化界面wxPython
- python安装教程windows-Python for windows 安装教程
- python基本语法语句-python基本语句有哪些
- python语言入门编程猫-编程猫推出海龟编程器,打造Python教育产品矩阵
- 快速排序 python菜鸟教程-Python菜鸟文本处理4种方法
- python3爬虫实例-python3爬虫实例(采集淘宝商品数据)
- python 如何查看模块所有方法-Python 查看模块的帮助文档,方法和帮助信息
- python def是什么意思-python中def是什么
- python主要就业方向-四种Python高薪就业方向