linux中(chattr)创建不可修改文件的方法
在常见的linux扩展文件系统中(如ext2、ext3、ext4等),可以将文件设置为不可修改(immutable)。某些文件属性可帮助我们将文件设置不可修改。一旦文件被设置为不可修改,任何用户包括超级用户都不能删除该文件,除非其不可修改的属性被移除。
通过查看/etc/mtab文件,很容易找出所有挂载分区的文件系统类型。这个文件的第一列指定了分区设备路径(如/dev/sda5),第三列指定了文件系统类型(如ext3)。
接下来让我们看看如何将文件设置为不可修改吧。
可以用chattr将文件设置为不可修改。
不过chattr能够更改的扩展属性可不止这些。
不可修改属性是保护文件不被修改的安全手段之一。最有代表性的例子就是 /etc/shadow文件。该文件由当前系统中所有用户的加密密码组成。我们通过密码才能登录系统。用户通常用passwd命令修改自己的密码。执行passwd时,它实际上就修改了 /etc/shadow文件。我们可以将shadow文件设置为不可修改,这样就再没有用户能够修改密码了。
让我们来看看具体是如何实现的。
可以按照下面的方式将一个文件设置为不可修改:
chattr +i file
或者:
$ sudo chattr +i file
这样文件file就变为了不可修改。
来试试下面的这条命令:
rm file
rm: cannot remove `file`: Operation not permitted
如果需要使文件重新可写,移除其不可修改的属性即可:
chattr -i file
touch命令
touch命令改变文件的时间信息。
参数:
-a : 仅修改access time。
-c : 仅修改时间,而不建立文件。
-m : 仅修改mtime。
-r : 参照某个文件的时间记录。
-t : 后面可以接时间,格式为 [[CC]YY]MMDDhhmm[.SS] 如198408250310.20
如果不指定任何选项,则把文件最近使用时间和最近变更时间改成系统当前时间。如果不存在指定的文件,就生成一个大小为0的空文件。
#ll file1 --无文件
file1 not found
#touch file1 --生成一个空文件
#ll file1 --大小为0,时间为系统当前时间
-rw-r--r-- 1 root sys 0 Nov 9 17:10 file1
#date --过了1分钟,系统时间发生变化
Wed Nov 9 17:11:01 MST 2011
#touch file1 --变更文件的时间记录
#ll file1 --文件的时间改为当前时间
-rw-r--r-- 1 root sys 0 Nov 9 17:11 file1
#touch -t 09100111 file1 --MMDDhhmm,9月10日1点11分
#ll file1
-rw-r--r-- 1 root sys 0 Sep 10 01:11 file1
#touch file2
#ll file1 file2 --新生成file2文件
-rw-r--r-- 1 root sys 0 Sep 10 01:11 file1
-rw-r--r-- 1 root sys 0 Nov 9 17:15 file2
#touch -r file1 file2 --参照file1的时间记录,改写file2的时间信息
#ll file1 file2
-rw-r--r-- 1 root sys 0 Sep 10 01:11 file1
-rw-r--r-- 1 root sys 0 Sep 10 01:11 file2
diff命令
这又是一个文件比较命令,熟练掌握会节省你很多工作。还记得comm命令吗?diff比他更加复杂,好用,不仅能比较文件,还能比较目录。 当一个文件有多个版本时候,或者更多复杂的文件,目录比较时,你会期望有一个比comm更有用的命令,diff正是为此而生。
全称:different file
实例:
文件1: v1.txt
|
文件2: v2.txt
|
1.普通比较:
- $diff v1.txt v2.txt
|
列出比较的区别,数字为行数,c是compare
2.一体化输出:
- $diff -u v1.txt v2.txt > version.patch
|
"+"表示补充的行,"-"表示删去的行
3. 更新覆盖v1.txt,注意这里借用了patch
- $patch –p1 v1.txt< version.patch
4. 比较v1,v2文件,仅输出v2的变化
- $diff -e v1.txt v2.txt
|
5.比较目录
借用书上一段解释:
-N 将所有确实的文件视为空文件
-a 将所有文件市委文件文本
-u 生成一体化输出
-r 遍历目录下的所有文件
比较两个目录下所有文本信息
1. $diff –Naur directory1 directory2
除非你确定这两个目录基本相同,不然不推荐这么用。
6.工作疲劳后,尤其同时做很多事情的时候,会忘了有没有做过上传,或者修改某个目录下的文件。可以这样:
1. $diff v1.txt /${dir}
直接比较同名文件,高强度下的工作者相信真有体会。
文本操作命令-wc
全称
wc是一个用于统计的工具,全拼为:Word Count(单词统计)
实例:
1. 统计行数
1. $wc –l file
2. 统计单词数
1. $wc –w file
3. 统计字符数
1. $wc –c file
4. 统计流中的字符数
1. $echo –n 1234 | wc –c
输出:4
解读--help
用法:wc [选项]... [文件]... 或:wc [选项]... --files0-from=F 打印每行的换行符,单词,字节的数量,如果多于一个文件,则打印每个总行数。如果没有文件,或者文件位置用“-”表示,则读取标准流。 一个单词是由空白符分隔的非零长的字符序列 下面的操作可能用于选择某种类型数量的打印,通常顺序是 换行符,单词,字符,字节,最大行的长度 -c, --bytes 打印字节数 -m, --chars 打印字符数 -l, --lines 打印换行符,即总行数 --files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被 指定为"-"则从标准输入读文件名 -L, --max-line-length 显示最长行的长度 -w, --words 显示单词计数 --help 显示此帮助信息并退出 --version 显示版本信息并退出 |
解读:
1. 多于一个文件
$wc file1 file2
打印两个文件的分别的统计行数
2. –L
打印最长的行数的字符数,即长度
3. 直接wc 文件,无任何参数
顺序是 行数,单词,字符,字节,最大行长度