shell脚本命令:mktemp和install

目录

一、mktemp命令

1、mktemp命令用法和格式

2、mktemp命令的实现原理

3、相关操作

3.1 创建临时文件或目录

3.2 指定临时文件名或目录名的后缀字符位数

3.3 指定临时文件或目录的父目录

3.4 指定临时文件或目录的后缀

 4、实现文件独立的目录垃圾箱

二、install命令

1、install命令用法和格式

2、相关操作


一、mktemp命令

1、mktemp命令用法和格式

用于创建临时文件或目录,并返回其名称

使用mktemp命令时,它会根据指定的模板在临时目录(默认为/tmp)中创建一个唯一的临时文件或目录,并返回该文件或目录的完整路径。临时文件或目录的名称会基于模板生成,并且会添加一些随机字符以确保唯一性

需要注意的是,mktemp命令只会创建临时文件或目录,并不会自动删除它们。如果不再需要这些临时文件或目录,应该手动删除以释放系统资源

mktemp命令在编写脚本或需要创建临时文件或目录的场景中非常有用,可以确保生成的临时名称是唯一的,避免命名冲突

mktemp [OPTION]... [TEMPLATE]
说明:TEMPLATE: filenameXXXX,X至少要出现三个
选项说明
-d创建一个临时目录而不是临时文件
-p指定临时文件或目录的父目录
-t在生成的文件名或目录名中添加指定的后缀
-u仅显示将要创建的临时文件或目录名,而不实际创建
-q不显示任何输出

注:

① 模板参数:mktemp 命令的最后一个参数是模板参数,用于指定临时文件或目录的命名规则。模板参数必须包含至少6个连续的X字符,这些字符将被替换为随机生成的字符。例如,/tmp/tmp.XXXXXX是一个有效的模板参数

② 临时文件和目录:默认情况下,mktemp 命令会创建临时文件。如果想要创建临时目录,可以使用 -d 选项。例如,mktemp -d 会创建一个临时目录

③ 父目录:如果想要指定临时文件或目录的父目录,可以使用 -p 选项

例如,mktemp -p /tmp  会在/tmp目录下创建临时文件或目录

④ 后缀:可以使用 -t 选项来指定生成的临时文件或目录的后缀

例如,mktemp -t .txt   会在临时文件名或目录名的末尾添加 .txt 后缀

⑤ 预览模式:使用 -u 选项可以进入预览模式,只显示将要创建的临时文件或目录名,而不实际创建。这对于调试和测试非常有用

⑥ 错误处理:如果 mktemp 命令无法创建临时文件或目录,会显示错误信息并退出。因此,在使用 mktemp 命令之前,确保目标目录存在且可写

⑦ 安全性:mktemp 命令会生成随机的临时文件或目录名,以避免命名冲突。这可以防止其他用户或恶意程序对临时文件进行操作。因此,使用 mktemp 命令可以提高系统的安全性

2、mktemp命令的实现原理

在 Linux Shell 中,mktemp 命令的底层实现是通过调用C库函数来完成的。具体来说,mktemp 命令使用了一个叫做 mkstemp 的C函数。

mkstemp 函数是一个系统调用,用于创建一个唯一的临时文件。它的实现过程如下:

①首先,mkstemp 函数会根据传入的模板参数创建一个临时文件。模板参数必须包含至少6个连续的X字符,这些字符将被替换为随机生成的字符。例如,/tmp/tmp.XXXXXX 是一个有效的模板参数

②接下来,mkstemp 函数会尝试打开临时文件,并返回一个文件描述符。如果打开文件成功,文件描述符将用于后续的读写操作

③在打开文件后,mkstemp 函数会将临时文件的权限设置为安全模式,以确保只有当前用户可以访问该文件

④最后,mkstemp 函数会返回临时文件的文件描述符,供调用者使用。调用者可以使用该文件描述符进行读写操作,完成临时文件的使用

⑤需要注意的是,mkstemp 函数创建的临时文件是唯一的,它的文件名是随机生成的,以避免命名冲突。这可以提高系统的安全性,防止其他用户或恶意程序对临时文件进行操作

总之,Linux Shell 的 mktemp 命令底层通过调用C库函数 mkstemp 来创建唯一的临时文件,并返回文件描述符供调用者使用。这种实现方式确保了临时文件的安全性和唯一性

3、相关操作

3.1 创建临时文件或目录

#创建一个临时文件
[root@localhost tmp]#mktemp#创建一个临时目录
[root@localhost tmp]#mktemp -d

3.2 指定临时文件名或目录名的后缀字符位数

#创建一个临时文件,想要文件名的后缀有几个随机字符,就添加几个X
[root@localhost tmp]#mktemp dhtemp.XXXXXXX#创建一个临时目录,想要目录名的后缀有几个随机字符,就添加几个X
[root@localhost tmp]#mktemp -d dhtemp.XXXXXXX

3.3 指定临时文件或目录的父目录

#创建一个临时文件,并指定临时文件的父目录
[root@localhost tmp]#mktemp -p /tmp dhtemp.XXXXXXX#创建一个临时目录,并指定目录的父目录
[root@localhost tmp]#mktemp -d -p /tmp dhtemp.XXXXXXX

3.4 指定临时文件或目录的后缀

#创建一个临时文件,并指定临时文件的后缀名
[root@localhost tmp]#mktemp XXXXXXX.tmp#创建一个临时目录,并指定目录的后缀名
[root@localhost tmp]#mktemp -d XXXXXXX.tmp

 4、实现文件独立的目录垃圾箱

#/bin/bashDIR=`mktemp -d /tmp/trash-$(date +%F_%H-%M-%S)XXXXXX`
mv $* $DIR
echo $* is move to $DIRfunction rm () {
local trash=`mktemp -d /tmp/trashXXXX`;mv $*
$trash;
}

二、install命令

1、install命令用法和格式

install 功能相当于cp,chmod,chown,chgrp ,mkdir 等相关工具的集合,主要用于安装文件或目录

install  [OPTION]...  SOURCE  DEST
#OPTION是选项,SOURCE是要安装的文件或目录的路径,DEST是安装后的目标路径
选项说明
-b创建备份文件
-c比较源文件和目标文件,如果不同则更新目标文件
-d创建目录
-g设置文件的组
-m设置文件的权限
-o设置文件的所有者
-s设置文件的大小
-t设置文件的修改时间
-v显示详细的安装过程

2、相关操作

#复制/etc/passwd文件到/opt目录下,并指定权限为644、文件的所有者为dh用户、文件的所属组为dh
[root@localhost opt]#install /etc/passwd -m 644 -o dh -g dh /opt

拓展

假设由于操作失误导致chmod命令无法使用,如何使用install命令解决?

(1)模拟操作失误导致chmod命令无法使用

[root@localhost ~]#chmod 000 /usr/bin/chmod
[root@localhost ~]#chmod 644 /opt/passwd

(2)使用install命令解决问题

#使用install命令将/usr/bin/chmod复制到/opt下,并为之修改权限为755
[root@localhost ~]#install /usr/bin/chmod -m 755 /opt
[root@localhost ~]#ll /opt/chmod
#将权限正常的/opt/chmod覆盖至/usr/bin/chmod
[root@localhost ~]#mv /opt/chmod /usr/bin/chmod
#验证chmod命令是否可用
[root@localhost ~]#chmod 655 /opt/passwd
[root@localhost ~]#ll /opt/passwd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 入门

一、三个窗口的区别 QMainWindow:包含菜单栏、工具栏、状态栏 QWidget:一个普通窗口,不包含菜单栏、状态栏 QDialog:对话框,常用来做登入窗口、弹出窗口 二、vs qt 与QtCreator项目相互转换 在vs端先安装Qt VS Tools…

MySQL数据库基础(四):图形化开发工具DataGrip

文章目录 图形化开发工具DataGrip 一、DataGrip介绍 二、DataGrip安装 三、创建工程 四、连接数据库 五、选择要使用的数据库 六、DataGrip软件设置 1、设置字体大小 2、设置关键字大写 3、自动排版 图形化开发工具DataGrip 一、DataGrip介绍 DataGrip是JetBrains公…

[word] word 2010宏已被禁用警告关闭方法 #媒体#学习方法

word 2010宏已被禁用警告关闭方法 Word2010宏已被禁用警告关闭方法:在「信任中心设置」选项的宏设置中选择「禁用所有宏,并且不通知」即可。 每次打开Word 2010,都会提示「完全警告:宏已被禁用」提示。自从Word 2010安装完毕&am…

Java线程与进程

线程 概念 Java中,线程是程序执行的最小单位,它是进程的一个执行流,也是CPU调度和分配的基本单位。每个进程都可以运行多个线程,这些线程共享进程的内存块,但每个线程都有自己的堆栈和局部变量。 Java中的线程有两种…

Mysql运维篇(四) Xtarbackup--备份与恢复练习

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 前言 xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有…

Compose自定义动画API指南

很多动画API都可以自定义其参数达到不同的效果,Compose也提供了相应的API供开发者进行自定义动画规范。 AnimationSpec 主要用存储动画规格,可以自定义动画的行为,在animate*AsState和updateTransition函数中,此函数默认参数为s…

【防网盘在线解压】Peazip 豌豆压缩 v9.7.0

软件介绍 Peazip 是一个免费的文件归档应用程序, 支持跨平台,是和WinRar、WinZip类似软件的开源免费替代品;支持压缩/ 存档到 7Z, ARC、Brotli BR、BZip2、GZip、 PAQ、PEA、RAR、自解压档案、TAR、WIM、XZ、Zstandard ZST、打开…

数据检索:倒排索引加速、top-k和k最邻近

之前在https://www.yuque.com/treblez/qksu6c/wbaggl2t24wxwqb8?singleDoc# 《Elasticsearch: 非结构化的数据搜索》我们看了ES的设计,主要侧重于它分布式的设计以及LSM-Tree,今天我们来关注算法部分:如何进行检索算法的设计以及如何加速倒排…

挑战杯 wifi指纹室内定位系统

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity,在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…

【数据结构】LRU Cache

文章目录 LRUCache LRUCache 1. LRUCache是一种缓存的替换技术,在CPU和main memory之间根据计算机的局部性原理,往往会采用SRAM技术来构建CPU和主存之间的高速缓存,DRAM(dynamic random access memory)用于构建主存,LRUCache这种…

命令行参数和环境变量

命令行参数 命令行参数是在用户在命令行中输入命令时,跟随命令一起输入的一些附加信息。这些参数可以用来配置命令的行为或传递一些数据给命令。 让同样的程序在不同的命令行参数下运行出不同的结果! 将这些命令和参数可以传给 main 函数生&#xff0…

【教程】MySQL数据库学习笔记(一)——认识与环境搭建(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、认…

图像识别基础之模板匹配

principle 图像匹配 本质:图像的相似度很高(矩阵的相似度很高) code /*\brief 我的图像匹配函数,获取差方和均值最小的矩阵作为结果\param srcPicFile:用以匹配的图像文件\param templatePicFile:模板图像文件\param destPicFile:输出的检测结果文件…

汇报工作时,你的工作会让领导满意吗?

当前你正在做的事 众所周知,跟领导汇报,第一件事需着重汇报你正在做的事,否则领导会感觉你无所事事。 举个例子: 完成了某某项目,在这项目中我负责:协调不同科室之间的纠纷,并把问题集中上报给…

阿里云幻兽帕鲁服务器配置4核16G10M带宽够8个人玩吗?玩起来流畅度怎么样?

阿里云幻兽帕鲁服务器配置4核16G10M带宽这个,个人实测下来,五六个人玩是比较流畅的,不过8个人的话,估计会有点卡。如果是8个人的话,我建议选择8核32G那个配置,更加适合一些。 阿里云一键部署幻兽帕鲁详细教…

分布式锁redisson

文章目录 1. 分布式锁1.1 基本原理和实现方式对比synchronized锁在集群模式下的问题多jvm使用同一个锁监视器分布式锁概念分布式锁须满足的条件分布式锁的实现 1.2 基于Redis的分布式锁获取锁&释放锁操作示例 基于Redis实现分布式锁初级版本ILock接口SimpleRedisLock使用示…

原型模式-Prototype Pattern

原文地址:https://jaune162.blog/design-pattern/prototype-pattern/ 引言 在Java中如果我们想要拷贝一个对象应该怎么做?第一种方法是使用 getter和setter方法一个字段一个字段设置。或者使用 BeanUtils.copyProperties() 方法。这种方式不仅能实现相同类型之间对象的拷贝,…

CMake进行C/C++与汇编混合编程

1. 前提 这篇文章记录一下怎么用CMake进行项目管理, 并用C/C和汇编进行混合编程, 为了使用这项技术, 必须在VS的环境中安装好cmake组件 由于大部分人不会使用C/C与汇编进行混合编程的情况。所以这篇文章并不适用于绝大部分人不会对其中具体细节进行过多叙述。只是做一些简单的…

正确看待OpenAI大模型Sora

2月16日凌晨,OpenAI发布了文生视频模型Sora。官方是这样描述的:Sora is an AI model that can create realistic and imaginative scenes from text instructions.Sora一个人工智能模型,它可以根据文本指令创建逼真和富有想象力的场景。Sora…

网络安全防御保护 Day5

今天的任务如下 要求一的解决方法: 前面这些都是在防火墙FW1上的配置。 首先创建电信的NAT策略 这里新建转换后的地址池 移动同理,不过地址池不一样 要求二的解决方法: 切换至服务器映射选项,点击新建,配置外网通过…