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

 hello
 world v1_echo 
 v1_diff
 v1_comm 
shell is easy!
文件2: v2.txt
hello world! 
v2_echo
 v1_diff
 easy shell! 

 

1.普通比较:

  1. $diff v1.txt v2.txt
 1,2c1,2 
< hello world 
&lt; v1_echo 
--- 
> hello world! 
&gt; v2_echo 
4c4 
< v1_comm 
--- 
> easy shell!

列出比较的区别,数字为行数,c是compare

2.一体化输出: 

  1. $diff -u v1.txt v2.txt &gt; version.patch
-v1_echo 
+hello world! 
+v2_echo 
v1_diff 
-v1_comm 
+easy shell! 
shell is easy!

"+"表示补充的行,"-"表示删去的行

3. 更新覆盖v1.txt,注意这里借用了patch

  1. $patch –p1 v1.txt&lt; version.patch

 4. 比较v1,v2文件,仅输出v2的变化

  1. $diff -e v1.txt v2.txt
 4c 
easy shell! 

1,2c 
hello world! 
v2_echo 
.

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 文件,无任何参数

顺序是 行数,单词,字符,字节,最大行长度



以上内容转载自:http://yjplxq.blog.51cto.com/4081353/957701

Linux Shell 脚本攻略学习--四相关推荐

  1. Linux Shell脚本攻略学习总结:一

    终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...

  2. Linux Shell脚本攻略学习总结:三

    根据扩展名切分文件名 首先,我们先来看两个例子: file_jpg="sample.jgp" name=${file_jpg%.*} echo File name is : $na ...

  3. Linux Shell脚本攻略学习总结:二

    比较与测试 程序中的流程控制是由比较和测试语句来处理的. 我们可以用if,if else 以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项.另外,有一个test 命令也可以用来进行测试.让我们 ...

  4. linux shell 脚本攻略学习11--mkdir和touch命令详解

    一.创建目录(mkdir命令详解) amosli@amosli-pc:~/learn$ mkdir dir amosli@amosli-pc:~/learn/dir$ mkdir folder amo ...

  5. linux shell 脚本攻略学习10--生成任意大小的文件和文本文件的交集与差集详解

    一.生成任意大小的文件(dd命令): 举例: amosli@amosli-pc:~/learn/example$ dd if=/dev/zero of=test.zip bs=2M count=1; ...

  6. LINUX SHELL脚本攻略笔记[速查]

    LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...

  7. Linux Shell脚本攻略 读书笔记

    内容目录: 嗨,Echo一下 给终端来点颜色 shell的控制结构 算术比较 目录操作 网站下载 tar 归档工具 rsync 备份系统快照 ftp自动传输 磁盘管理 故障排查 使用syslog记录日 ...

  8. 《Linux Shell脚本攻略》学习笔记-第一章

    1.1 简介 计算机可以从文本文件(称为shell脚本)中读取并执行命令. sehll脚本不仅节省了时间,而且清楚明白地表明了所执行的操作. bash shell变成了UNIX和Linux中既成事实的 ...

  9. linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...

    今天为大家带来的内容是:(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤 本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章 ...

最新文章

  1. linux卸载hadoop版本,centos6.5 安装hadoop1.2.1的教程详解【亲测版】
  2. web开发(二十一)之自定义拦截器的使用
  3. Centos下MongoDB的安装与配置
  4. Chrome 扩展 最近的历史 HistoryBar v1.1
  5. Linux入门学习(二)
  6. Elasticsearch Scale Out
  7. 银行有没有必要建立数据中台?看看这些架构师和技术总监怎么说
  8. Windows 关于Robocopy的使用详解
  9. Django使用livereload自动刷新页面
  10. sae nodejs mysql_通过新浪云部署NideShop微信小程序商城(基于Node.js+MySQL+ThinkJS)
  11. matlab人口增长线性回归拟合_Matlab线性回归(拟合)
  12. C++ 有理数运算符重载
  13. 495. Teemo Attacking(提莫攻击)
  14. 房屋租赁合同法律规定是怎样的
  15. MMD->Unity一站式解决方案
  16. python画出心形图
  17. 如何备份Linux系统磁盘
  18. Robust stochastic frontier analysis
  19. Java必会基础题,量不多,但每天进步一点也是好的
  20. Unity3D摄像机(Camera)跟随角色移动的代码控制和演示动画

热门文章

  1. node.js path
  2. 《关系营销2.0——社交网络时代的营销之道》一从单向沟通转向多方沟通
  3. 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
  4. cocos2dx对所有子节点设置透明度
  5. Nginx Rewrite详解
  6. 容器,你还只用Docker吗?(上)
  7. Go语言连接 zookeeper
  8. 企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理
  9. AliOS Things KV组件的写平衡特性
  10. 高级持续性威胁检测无法检测出自定义恶意软件?