这两个命令通常也是重度使用的,但使用频率相对前面两个系列是有所不如的,因为这两个命令不具有信息收集的功能,通常用在安装软件,部署服务,脚本部署软件服务的时候使用(安装部署并不是常常需要的嘛)。下面对于这两个命令做详细介绍
一,mkdir命令
mkdir 是make directory的缩写,对于英文较好的同学,理解这个是毫无压力的,也就是说,这个命令是专门针对目录的,建立目录的。
那么,Linux中的目录是和Windows不同的,Linux的文件系统,不管是ext3,ext4,还是xfs等等格式的文件系统,都是从 / 也就是根目录开始的,也就是说,只要是绝对路径,必定是由 / 开始(绝对路径和相对路径在此不做深入讲解,毕竟过于基础啦)。
总的来说,文件系统的构成的起点一定是 / ,如果非要具化出来文件系统的话,那么就是树形结构,主枝干就是 / (这里要考的,请大家牢记,哈哈)。因此,有这么一个在Windows和Linux都有的十分形象的命令tree,当然,文件系统具体的构成,组织形状这些就在此不一一讲解了,要讲清楚就不是一两段话可以说清的了。
mkdir命令如果是用在手动部署安装阶段,是比较灵活的,比如,mkdir test 就表示在当前目录下建立一个名称为test的目录,这一写法是默认相对路径,也就是不指名相对路径,在当前目录下建立test文件夹还有第二种写法, mkdir ./test 此种写法是表明相对路径。
mkdir命令如果是用在自动化部署安装阶段,比如使用脚本部署安装,那么, 我们为了保证此命令遇到存在的目录仍然可以成功建立目录,需要加参数p ,也就是 mkdir -p 绝对路径/文件夹名称 ,例如,当前目录下有一个树形目录 a ,b,c,d 目录,我想在相对当前目录的第四层目录页就是d目录下建立e目录,那么,正确的命令应该是 (如果没有-p参数,会报错提示你 a ,b ,c ,d 目录已经存在无法建立。):
mkdir -p ./a/b/c/d/e
当然,mkdir也可以批量的建立具有一定层级关系的目录,这个在安装部署的时候尤其有用,也就是说mkdir支持shell的数组,例如,以下例子(opt下建立具有递归关系的30层目录,这里只需要记住,{}包裹的一定是一组同级目录,一个/ 代表一个层级,只要记住这个就可以啦):
[root@hdp-1 ~]# mkdir -p /opt/{a,b}/{c,d}/{a,b}/{a,b}
[root@hdp-1 ~]# tree /opt/
/opt/
├── a
│ ├── c
│ │ ├── a
│ │ │ ├── a
│ │ │ └── b
│ │ └── b
│ │ ├── a
│ │ └── b
│ └── d
│ ├── a
│ │ ├── a
│ │ └── b
│ └── b
│ ├── a
│ └── b
└── b
├── c
│ ├── a
│ │ ├── a
│ │ └── b
│ └── b
│ ├── a
│ └── b
└── d
├── a
│ ├── a
│ └── b
└── b
├── a
└── b
30 directories, 0 files
小结:
mkdir命令是建立文件夹的专属目录,由于文件系统的特性,如果,我们需要建立一个树形的目录,那么,应该使用-p参数保证目录能够建立成功而不报错。这一点在脚本内的应用尤其重要(脚本不报错是基本的要求嘛)。
二,touch命令
touch命令专为空白文本文件的建立,修改文件的建立日期,修改日期等熟悉而生。此命令的主要功能是快速建立空白文本文件,还一个是配合crack活动,修改文件的建立修改日期,从而防止crack活动被过早侦测到(比如,crack入侵了某个Linux系统,那么,把木马或者有破坏性的脚本文件修改其文件属性,把建立时间更改到入侵之前,可以起到迷惑宿主的作用----find / -type f -a 会找不到木马文件哦)。
例如(这个mariadb的安装包文件没有touch前的修改日期是2017年,touch后统一变成执行touch命令的时间啦,也就是不加参数,所有时间统一到执行命令的时间):
[root@hdp-1 mariadb]# stat mariadb-5.5.56-2.el7.x86_64.rpm
File: ‘mariadb-5.5.56-2.el7.x86_64.rpm’
Size: 9158636 Blocks: 17888 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 67668894 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-09-26 23:08:45.242994060 +0800
Modify: 2017-08-11 02:13:49.000000000 +0800
Change: 2021-09-26 23:08:45.242994060 +0800
Birth: -
[root@hdp-1 mariadb]# touch mariadb-5.5.56-2.el7.x86_64.rpm
[root@hdp-1 mariadb]# stat mariadb-5.5.56-2.el7.x86_64.rpm
File: ‘mariadb-5.5.56-2.el7.x86_64.rpm’
Size: 9158636 Blocks: 17888 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 67668894 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-09-26 23:09:41.928283412 +0800
Modify: 2021-09-26 23:09:41.928283412 +0800
Change: 2021-09-26 23:09:41.928283412 +0800
Birth: -
touch 命令比较常用的参数有:-a -m -t ,通常-a和-m 是与-t同时使用。
- 参数说明:
- a 改变档案的读取时间记录。
- m 改变档案的修改时间记录。
- c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
- f 不使用,是为了与其他 unix 系统的相容性而保留。
- r 使用参考档的时间记录,与 --file 的效果一样。
- d 设定时间与日期,可以使用各种不同的格式。
- t 设定档案的时间记录,格式与 date 指令相同。
- --no-create 不会建立新档案。
- --help 列出指令格式。
下面举例说明修改文件访问时间和修改文件改动时间:
修改文件访问时间为2011年1月11号11点11分:
[root@hdp-1 ~]# stat nginx.log
File: ‘nginx.log’
Size: 36578 Blocks: 72 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1283936 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-09-23 13:08:43.838174390 +0800
Modify: 2021-09-23 13:08:59.922032094 +0800
Change: 2021-09-23 13:08:59.922032094 +0800
Birth: -
[root@hdp-1 ~]# touch -a -t 201101111111 nginx.log
[root@hdp-1 ~]# stat nginx.log
File: ‘nginx.log’
Size: 36578 Blocks: 72 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1283936 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-01-11 11:11:00.000000000 +0800
Modify: 2021-09-23 13:08:59.922032094 +0800
Change: 2021-09-26 23:26:53.969917152 +0800
Birth: -
修改文件改动时间为2012年12月22日22点22分:
root@hdp-1 ~]# stat nginx.log
File: ‘nginx.log’
Size: 36578 Blocks: 72 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1283936 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-01-11 11:11:00.000000000 +0800
Modify: 2021-09-23 13:08:59.922032094 +0800
Change: 2021-09-26 23:26:53.969917152 +0800
Birth: -
[root@hdp-1 ~]# touch -m -t 201212222222 nginx.log
[root@hdp-1 ~]# stat nginx.log
File: ‘nginx.log’
Size: 36578 Blocks: 72 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1283936 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-01-11 11:11:00.000000000 +0800
Modify: 2012-12-22 22:22:00.000000000 +0800
Change: 2021-09-26 23:29:13.735356193 +0800
Birth: -