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 脚本攻略学习20--awk命令入门详解

    awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...

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

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

  3. linux shell 脚本攻略学习19--sed命令详解

    sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...

  4. linux shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解

    文件权限详解 一.chmod命令详解 文件权限和所有权是Unix/Linux文件系统最显著的特征之一.linux中的每一个文件都与多种权限类型相关联,在这些权限中主要分类为3种: 用户(User)是文 ...

  5. linux shell 脚本攻略学习15--如何只列出目录,如何快速切换目录

    工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效的切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案: 一.如何只列出目录? 看似简单的任务,其实 ...

  6. linux shell 脚本攻略学习3

    1.Bash中的READ命令 #读取n个字符存入变量 read -n number_of_chars variable_name 示例: amosli@amosli-pc:~$ read -n var ...

  7. linux shell 脚本攻略学习2

    1.关于文件描述符和重定向: 文件描述符是与一个打开的文件或数据流相关联的整数.文件描述符0.1以及2是系统预留的. 0——stdin(标准输入) 1——stdout(标准输出) 2——stderr( ...

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

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

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

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

随机推荐

  1. Docker的Etcd项目

    etcd 是 CoreOS 团队发起的一个管理配置信息和服务发现(service discovery)的项目,在这一章里面,我们将介绍该项目的目标,安装和使用,以及实现的技术. Docker的etcd ...

  2. Android Studio精彩案例(二)《仿微信动态点击底部tab切换Fragment》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 现在很多的App要么顶部带有tab,要么就底部带有tab.用户通过点击tab从而切换不同的页面(大部分情况时去切换fragment). ...

  3. Ubuntu安装telent服务器时出现:apt-get:Package has no installation

    当我在终端敲下这条命令的时候,系统就提示telnetd:apt-get:Package has no installation sudo apt-get install xinetd telnetd ...

  4. Tomcat如何实现Comet

    Comet模式是一种服务器端推技术,它的核心思想提供一种能让当服务器端往客户端发送数据的方式.Comet模式为什么会出现?刚开始人们在客户端通过不断自动刷新整个页面来更新数据,后来觉得体验不好又使用了 ...

  5. 协议系列之IP协议

    1.协议 协议(protocol)的定义:为计算机网络中进行数据交换而建立的规则.标准或约定的集合.两个终端相互通信时双方达成的一种约定,规定了一套通信规则,双方通信必须遵守这些规则.这些规则规定了分 ...

  6. Makefile常用函数总结

    在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具 有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 数的返回值可以当做变量来使用. 一 ...

  7. 实现memmove函数

    分析:memmove函数是<string.h>的标准函数,其作用是把从source开始的num个字符拷贝到destination.最简单的方法是直接复制,但是由于它们可能存在内存的重叠区, ...

  8. JBOSS EAP 6 系列五 Managed domains 管理域最主要的功能是“统一部署,统一配置”

    摘要 本文首先介绍Managed Domain的概念,管理域最主要的功能是"统一部署,统一配置".接下来通过一个实例在"统一配置"部分实现一个双机配置起来的域, ...

  9. 集合框架之Collections静态工具类

    Collections类提供了一些列静态的方法,用以更方便地操作集合类 排序机制 一个List可以通过下面的方法进行排序: Collections.sort(list); 如果List包含的是字符串, ...

  10. Hibernate系列学习之(二) 多对一、一对一、一对多、多对多的配置方法

    这是近期做案件录入.java项目中体会的几点:项目理解很是深刻,和大家共勉! hihernate一对多关联映射(单向Classes----->Student) 一对多关联映射利用了多对一关联映射 ...