1. 使用touch 更新修改时间
使用touch 命令更新修改时间,如下:
[root@local~]#touch some-file
使用touch 建立空文件: 它们的存在与时间戮是有意义的,但它们的内容则否。最常见的例子是用于锁定文件,以指出程序已在执行中,不应启动第二个实例(instance) 。
使用touch 记录文件的时间戳,供日后与其他文件对照用。
1.1. touch 命令
1.2.1 . 语法与参数
语法
touch [OPTION]... FILE...
touch [-acm] MMDDhhmm[YY] FILE... (obsolescent)
用途
该命令可以同时或单独变更档案的两种时间纪录,读取时间(access time) 以及修改时间(modification time) 。
主要选项
- a 更改文件的读取时间(access time)
-c, --no-create 不建立任何新档案不建立任何新档案
-m 更改文件的修改时间(modification time)
-t STAMP 设定" 特定时间" 来代替" 目前时间" ,格式 [[CC]YY]MMDDhhmm[.ss] 。
-r 复制参照文件的时间戳
1.2.2 例子
1. 建立空档案
[root@local~]# touch file-touch1
[root@local~]# ls -l
total 0
-rw-r--r-- 1 root root 0 7 月 9 13:53 file-touch1
2. 如果不想建立空档案,就是用-c 选项
[root@local~]# touch -c file-touch2
touch: setting times of `file-touch2': 没有此一档案或目录
3. 复制参照文件的时间戳
[root@local~]#touch -r US-bicentennial birthday
[root@local~]#1s -1 birthday
-rw-rrr-r-- 1 Jones devel 0 Jul 4 1976 birthday
4. 打算将档案时间变更为 2002 年 7 月 1 日 8 点 00 分 01 秒
[root@local~]#touch -t 200207010800.01 tcsh
[root@local~]#ls --full-time
total 288
-rwxr-xr-x 1 root root 288604 周一 7 月 01 08:00:01 2002 tcsh
5. 单独变更" 读取时间"
[root@local~]#touch -at 200207022300 tcsh
[root@local~]#ls -lu
total 288
-rwxr-xr-x 1 root root 288604 7 月 2 23:00 tcsh
6. 单独变更" 修改时间"
[root@local~]#touch -mt 200206302300 tcsh
[root@local~]#ls -l
total 288
-rwxr-xr-x 1 root root 288604 6 月 30 23:00 tcsh
2. $$ 变量
共享的目录或同一程序的多个执行实例,都可能造成文件名冲突。在 Shell 脚本里的传统做法是使用进程 ID ,可以在 Shell 变量事 $$ 中取得 ,构建成临时性文件的一部分。要解决完整临时性文件名发生此问题的可能性,可使用环境变量覆盖目录称,通常是 TMPDIR 。另外,你应该使用 trap 命令,要求在工作完成时删除临时性件。因此,常见的 5he11 脚本起始如下 :
umask 077 # 删除用户以外其他人的所有访问权
TMPFILE=${TMPDIR-/tmp}/myprog.$$ # 产生临时性文件名
trap ' rm-f $TMPFILE' EXTT # 完成时删除临时性文件
3. 比较文件
3.1. c mp 命令
3.1.1 . 语法与参数
语法
cmp [-clsv][-i < 字符数目 >] [ 第一个文件 ][ 第二个文件 ]
用途
比较两个文件是否有差异。
主要选项
-c 除了标明差异处的十进制字码外,一并显示该字符所对应字符。
-i< 字符数目 > 指定一个数目。
-l 或 --verbose 标示出所有不一样的地方。
-s 或 --quiet 或 --silent 不显示错误信息。
补充说明:
当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为 "-" ,则 cmp 指令会从标准输入设备读取数据。
3.1.2 . 例子
比较两个不同的文件
[root@local~]# cmp /bin/cp /bin/ls
/bin/cp /bin/ls differ: char 27, line 1 # 输出结果指出第一个不同处的位置
3.2. diff 命令
3.2.1 . 语法与参数
语法
diff [ 选项 ] 源文件 目标文件
用途
找出两个文件的不同点。
主要选项
-a 所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件。
-b| -w 忽略空格引起的变化。
-B 忽略插入删除空行引起的变化。
-d 改变算法也许发现变化的一个更小的集合。这会使 diff 变慢 ( 有时更慢) 。
--expand-tabs 在输出时扩展 tab 为空格,保护输入文件的 tab 对齐方式。
-i| --ignore-case 忽略大小写。 。
-N --new-file 在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件。
-P 在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件。
--paginate 产生通过 pr 编码的输出。
-q 仅报告文件是否相异 , 不报告详细的差异。
-r | --recursive 当比较目录时,递归比较任何找到的子目录。
-t 在输出时扩展 tab 为空格,保护输入文件的 tab 对齐方式
-u 使用统一的输出格式。
3.2.2 . 例子
[root@local~]# echo test 1 > test.l
[root@local~]# echo test 2 > test.l
[root@local~]# diff test.1 test.2
1c 1
<test 1
---
>test 2
注意:使用 diff 的惯例是 : 将旧文件作为第一个参数。不同的行会以前置左角括号的方式,对应到左边的 ( 第一个 ) 文件,而前置右角括号则指的是右边的 ( 第二个 ) 文件。最前面的 lcl 为输入文件行编号的简洁表示方式,指出不同之处以及需要编辑的操作 : 在这里, C 表示改变 (change) 。在大一点的例子下,你还可能发现 a 是增加 (add) ,与 d 是删除 (delete) 之意。
3.3. pacth 命令
patch 工具程序可利用 diff 的输出,结合原始文件,以重建另一个文件。
3.3.1 . 语法与参数
语法
patch [options][option <value] [-p < 剥离层级>] < [ 修补文件]
用途
patch 指令让用户利用设置修补文件的方式,修改,更新原始文件。
主要选项
-p|--strip=< 剥离层级> 设置欲剥离几层路径名称。
3.3.2 . 例子
1. 更新文件
[root@local~]# diff -c test.1 test.2.> test.dif # 将相异处的相关内文,存储到 test.dif
[root@local~]# patch< test.dif # 应用不同之处
patching file test.1
[root@local~]# cat test.l # 显示修补后 (patched) 的 test.1
test 2
2. 更新目录
[root@local~]# mkdir /tmp/old; cp /etc/passwd /tmp/old
[root@local~]# mkdir /tmp/new; cp /tmp/test/passwd /tmp/new
[root@local~]# cd /tmp; diff –Naur old/ new/ > test.patch
[root@local~]# cd /tmp/old
[root@local~]# patch –p1 < /tmp/ test.patch
patching file passwd
注意:使用 head –n 1 //tmp/ test.patch 查看第一行内容如下:
diff –Naur old/passwd new/passwd
而我们升级所在的目录是 old ,所以必须减去一层目录。