临时性文件的建立与使用

虽然使用管道可以省去建立临时性文件的需求,不过有时临时性文件还是派得上用场的.linux不同于其他的操作系统的地方就是:他没有那种将不再需要的文件设法删除的做法.反倒是提供了两个特殊目录:/tmp与/var/tmp(旧系统是/usr/tmp),这些文件可入场被存储,当他们未被清理干净时也不会弄乱一般的目录.大部分系统上的/tmp都会在系统开机时清理,不过/var/tmp下的在重启时仍需存在,因为有些文字编辑程序,会将他们的备份文件放在这里,从而系统损毁后可以用来恢复数据.

因为/tmp使用频繁,有些系统就会将他们放在常驻内存型的文件系统里,以便快速访问

$df /tmp

Filesystem     1K-blocks   Used Available Use% Mounted on

/dev/sda3        1032088 262608    717052  27% /

将文件系统放在替换空间(swap)区域里,表示它存在与内存中,直到内存资源被使用得剩很少时,部分信息才会写入替换空间.

为确保临时性文件会在任务完成时删除,编译语言的程序员可以先开启文件,再下达unlink()系统调用.

$$变量

使用$$变量可以获取shell本身的PID.

案例:

$echo $$

1736

使用$$变量构建临时性文件名的一部分.要解决完整临时性文件名发生此问题的可能性,可使用环境变量覆盖目录名称,通常是TMPDIR.另外,应该使用trap命令,要求在工作完成时删除临时性文件.因此,常见的shell脚本起始如下:

umask 077                   #删除用户以外其他人的所有访问权

TMPFILE=$(TMPDIR-/tmp)/myprog.$$    #产生临时文件

trap ‘rm -f $TMPFILE’ EXIT #完成删除临时性文件

mktemp程序

因为使用/tmp/myprog.$$这样的文件名太好猜了,所以就有了mktemp命令.

在进行shell脚本程序设计时,经常需要生成临时文件,使用mktemp命令即可满足这样的要求,且保证了文件的安全性.

语法:

mktemp [-qu] [文件名参数]

有的系统是没有mktemp命令的,这时我们需要给mktemp打补丁,以使它包含tempfile包:

patch -Np1 -i ../mktemp-1.5-add_tempfile-2.patch

编译mktemp:

./configure --prefix=/usr --with-libc

配置选项的含义:

--with-libc

这个使得mktemp程序从系统的C库中使用mkstep和mkdtemp的功能.

编译软件包:

make

安装软件包:

make install

make install-tempfile

主要参数

参数

作用

-q

执行时若发生错误,不会显示任何信息

-u

暂存文件会在mktemp结束前先行删除

-V

显示版本信息

案例:

$mktemp tmp.XXX

tmp.DSH

$ mktemp tmp.XXX

tmp.hEc

$ mktemp tmp.XXX

tmp.7yi

分析:点号后面的三个大写字母XXX代表了三个随机数.

$ ll

-rw------- 1 root root    0 7月  12 18:43 tmp.7yi

-rw------- 1 root root    0 7月  12 18:43 tmp.DSH

-rw------- 1 root root    0 7月  12 18:43 tmp.hEc

/dev/random与/dev/urandom特殊文件

这两个文件都是用来产生随机数的.他们产生随机数的原理是利用当前系统的熵池来计算出一定数量的随机比特,然后将这些比特作为字节流返回.熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用,文件的使用量,不同类型的进程数量等等.如果当前环境噪音变得不是很剧烈或者当前环境噪音很少,日过刚开机的时候,而当前需要大量的随机比特,这时产生的随机数的随机数效果就不是很好了.

这就是为什么会有/dev/urandom和/dev/random这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会(ublock),当然产生的随机数效果就不太好了,这对加密解密这样的应用来说不是一种很好的选择./dev/random会阻塞当前的程序,知道根据熵池产生新的随机字节之后才返回,所以使用/dev/random比使用/dev/urandom产生大量随机数的速度要慢.案例:

$dd if=/dev/random of=random.dat bs=1024b count=1

记录了0+1 的读入

记录了0+1 的写出

128字节(128 B)已复制,0.000356299 秒,359 kB/秒

$ dd if=/dev/urandom of=random.dat bs=1024b count=1

记录了1+0 的读入

记录了1+0 的写出

524288字节(524 kB)已复制,0.226209 秒,2.3 MB/秒

分析:/dev/random产生随机数的速度要慢,而且产生的量有限,但是产生随机数的质量好.

shell学习四十三天----临时性文件的建立与使用相关推荐

  1. Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)

    1. Linux的安全性 Linux 安全系统的核心是用户账户.每个能进入 Linux 系统的用户都会被分配唯一的用户账户.用户对系统中各种对象的访问权限取决于他们登录系统时用的账户. 用户权限是通过 ...

  2. Linux shell 学习笔记(1)— 文件和目录(查看、创建、复制、软硬链接、重命名及删除操作)

    1. 启动 shell /etc/passwd 文件包含了所有系统用户账户列表以及每个用户的基本配置信息: christine:x:501:501:Christine Bresnahan:/home/ ...

  3. Qt学习(四):qt读写文件

    知识点 QFile读写文件 QFileInfo获取文件信息 QDataStream读写文件 QTextStream读写文件 内存文件QBuffer读写文件 结果演示 widget.h #ifndef ...

  4. linux shell学习四

    Shell分支语句 case 值 in 模式1)command1command2command3;; 模式2)command1command2command3;; *)command1command2 ...

  5. springMVC3学习(四)--訪问静态文件如js,jpg,css

    假设你的DispatcherServlet拦截的是*.do这种URL.就不存在訪问不到静态资源的问题 假设你的DispatcherServlet拦截了"/"全部的请求,那同一时候对 ...

  6. Java多线程学习四十三:

    本课时我们主要讲解 final 的三种用法. final 的作用 final 是 Java 中的一个关键字,简而言之,final 的作用意味着"这是无法改变的".不过由于 fina ...

  7. shell学习之查找当前目录下文件以及文件夹大小-'du'命令和'df'命令

    经过前几天的磁盘写满的事件之后,发现自己对du这个命令完全不知道,所以下决心要学习一番. 我就当一盘搬运工吧,外网找到一个教程 'du'就是查找文件夹的大小 du Typing the above a ...

  8. opencv学习(四十三)之图像的矩moments()

    1.概述 图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(数据描述量)来描述整个图像,这组数据月简单越有代表性越好.良好的特征不受光线.噪点.几何形变的干扰,图像识别技术的发展中 ...

  9. Linux学习(四)

    Linux学习(四) 用户身份与文件权限 用户身份与能力 linux系统中的管理员就是root,这是错误的,linux系统的管理员之所以是root,并非是他的名字叫root,而是因为该用户的身份号码即 ...

最新文章

  1. Linux 背后的思想
  2. oracle 参数=gt;,解析gt参数
  3. html超链接到index,HTML基础___超链接 第四天
  4. 你是否能判断电机损毁风险?
  5. 织梦二次开发写php,PHP教程—DedeCMS二次开发(二)
  6. 图片碎片化mask动画
  7. JavaScript 读取CSV文件并转为js对象
  8. MyBatis 缓存详解-二级缓存介绍
  9. 关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建
  10. c语言指针用法有哪些
  11. 华中师范大学邮箱matlab,18春[华中师范大学]华师《Matlab基础与应用》在线作业1(100分)...
  12. C#GridViewExport帮助类,美化导出
  13. js layui跳转页面_【WEB前端开辟】layui的iframe跳转链接与页面按钮跳转相干引见...
  14. 快速排序 与 归并排序
  15. 一文弄懂LogSumExp技巧
  16. centos服务器 常用命令
  17. android UI之去掉状态栏
  18. 华硕笔记本linux触摸板驱动,华硕触摸板驱动,手把手教你如何在华硕官网触控板驱动...
  19. 市场上常见饮用水种类
  20. linux hd4000显卡驱动,AMD Radeon HD 2000/HD 3000/HD 4000系列显卡驱动怎么样

热门文章

  1. day03_《谷粒商城》的完整流程(详细版二)
  2. TLC2543和TLV5614的STM32程序
  3. 如何修改C:\Windows\System32\drivers\etc\hosts文件
  4. 2022-2028年全球及中国倍频器行业投资前景分析
  5. 微信小程序背景图片全屏显示
  6. css实现网页对联广告
  7. [NOIP2022] 喵了个喵 题解
  8. Elasticsearch 跨机房灾备方案实战(一) —— 消息队列实现双写
  9. Fortran基本知识
  10. 眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列