文档章节

第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)

henni_719
 henni_719
发布于 2017/04/22 17:23
字数 1412
阅读 27
收藏 0

4.6 使用临时文件

         Linux系统保留了一个特殊的目录位置,以供临时文件使用。Linux使用/tmp目录处理不需要永久保存的文件。大部分Linux发行版的系统配置都是在启动时自动删除/tmp目录中的任何文件。

         系统上的任何用户账户都有读取和写入/tmp目录中的文件的权限。该特性可以帮助用户轻松创建临时文件,而无需担心它们的清理问题。创建临时文件:mktemp命令可以轻松在/tmp文件夹中创建一个唯一的临时文件。shell创建该文件但是不使用默认的umask值。相反,它仅向文件所有者分配读取和写入权限,并使用户成为文件的所有者。创建文件之后,可以脚本对文件进行完整权限的读取和写入,但其他人都不能访问它。

4.6.1 创建本地临时文件

         默认情况下,mktemp在本地目录创建文件。要使用mktemp命令在本地目录中创建临时文件,只需要指定一个文件名即可。模块包括文本文件以及附加到文件名后的6个XXXXXX。mktemp命令使用一个6字符代码替换6个XXXXXX,以确保文件名在目录中的唯一性

        

         可以创建多个临时文件,每个文件确保是唯一的。可以看出,mktemp命令的输出是它们创建的文件的名称。在脚本中使用mktemp命令时,需要使用一个变量保存该文件名,以便稍后再脚本中引用。        

#!/bin/bash
#创建临时文件,然后对临时文件进行读写
tempfile=`mktemp test.XXXXXX`
#创建文件输出描述符号
exec 3>$tempfile
echo "对临时文件$tempfile进行写操作"
#对临时文件进行写操作
echo  "      《静夜诗》" >&3
echo  "            李白" >&3
echo "床前明月光,疑是地上霜。" >&3
echo "举头望明月,低头思故乡!" >&3
#关闭文件输出描述符
exec 3>&-
echo "临时文件的内容"
#创建文件输出描述符号
exec 3<$tempfile
count=1
#对临时文件进行读操作
while read line <&3
do
    echo "第$count行:$line"
    count=$[ $count +1 ]
done
#关闭文件输出描述符
exec 3<&-
echo "删除临时文件:$tempfile,禁止错误信息的输出!"
rm -rf $tempfile 2>/dev/null

         该脚本使用mktemp命令创建一个临时文件,并将文件名分配给$tempfile变量。然后使用临时文件作为文件描述符3的输出重定向文件。然后关闭临时文件输出描述符。然后创建临时文件输入描述符3,对临时文件进行读取。读取完成然后关闭文件输入描述符。最后,使用rm命令删除创建的临时文件并禁止错误信息输出!

4.6.2 在/temp中创建临时文件

         -t选项强迫mktemp在系统的/temp文件夹中创建临时文件。但使用该选项时,mktemp命令返回用于创建临时文件的完整路径名,而不是文件名。由于mktemp命令返回完整路径名,因此可以从Linux系统的任何目录引用临时文件,无论系统将临时目录放在哪个位置。   

#!/bin/bash
#在/tmp路径下创建一个临时文件
tempfile=`mktemp -t tmp.XXXXXX`
#向临时文件中写入数据
echo "This is a tmp file">$tempfile
#向临时文件追加数据,不覆盖原有数据
for (( i=1;i<=9;i++ ))
do
  for(( j=1;j<=9;j++))
   do
	[ $j -le $i ]  && echo -n "$i * $j= $[ $i * $j ] "
   done
   echo " "
done >>$tempfile

echo "临时文件$tempfile位于:$tempfile"
filename=`basename $tempfile`
echo $filename
echo "显示临时文件中的内容"
cat $tempfile
rm -rf $tempfile 2>/dev/null
      

4.6.3 创建临时目录

         -d选项让mktemp命令创建一个临时目录而不是一个文件。 

4.6.4 记录消息

         有时候有必要将输出同时发送到监视器和日志文件。这种情况下不需要使用两次重定向,只需要使用特殊命令tee命令即可。

         tee命令就像管道的T型接头。它将STDIN的数据同时发送到两个目的地一个是STDOUT,另一个是tee命令指定的文件名tee filename。

         由于tee重定向来自STDIN的数据,因此可以与管道命令配置使用重定向任何命令的输出。默认情况下,tee命令每次使用时都会覆盖输出文件。如果希望向文件添加数据,必须使用-a选项。使用这种技术,可以将数据保存在文件中,同时将数据显示在监视器上供用户查看。tee命令参数:

        

         tee操作实例:        

#!/bin/bash
#创建一个临时文件
tempfile=`mktemp  tmp.XXXXXX`

#在显示屏上输出信息,同时把信息输出到临时文件
echo "This is a tmp file"| tee $tempfile

#在显示屏上输出信息,同时把信息输出到临时文件
#且不覆盖原有的数据
echo "Hello ,ewang!" | tee -a $tempfile
echo "What can I do for you?" | tee -a $tempfile
echo "临时文件名:$tempfile"

#显示临时文件中的内容
echo "显示临时文件中的内容"
cat $tempfile
#删除临时文件并不输出错误信息
rm -rf $tempfile 2>/dev/null

         即可以永久保存输出副本的同时,也能将输出结果显示给用户。

本文转载自:http://blog.csdn.net/henni_719/article/details/53642916

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
Linux标准输入输出及文件描述符

1.标准文件描述符0,1,2 1.1 STDIN标准输入 对终端界面来说,标准输入时键盘;也可以使用重定向符号<,用重定向指定的文件来代替标准输入文件描述符。 1.2 STDOUT标准输出 在终端界面上,标准...

Caishu
2016/05/16
944
0
12.12 &12.13 基础命令练习一

12.12 &12.13 基础命令练习一 内容: 1. mkdir ls pwd cd touch vi/vim echo cat 2. 输出/出入重定向 3. EOF 起止符 往文件中写入多行内容 4. xargs -n 分组显示 5. cp rm mv 6. man帮助手册...

千古东风
2017/12/21
0
0
SQLite学习手册(临时文件)

一、简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发...

涩女郎
2015/08/26
37
0
ORACLE临时表空间总结

临时表空间概念 临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sortareasize大小不够时,将会把数据放入临时表空...

Zero零_度
2016/10/27
17
0
python 临时文件夹 的 tempfile模块学习

python的临时文件夹的tempfile模块学习 应用程序经常要保存一些临时的信息,这些信息不是特别重要,没有必要写在配置文件 里,但又不能没有,这时候就可以把这些信息写到临时文件里。其实很 ...

木头r
2011/09/25
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
38分钟前
4
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部