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. 焦点轮播图(tab轮播)

    主要有两部分:1.列表导航(小图片) 2.展示区(大图片) 页面布局: HTML部分:    <div class="s_conC">                  ...

  2. Cloudera: Start Impala service by cloudera manager in docker quickstart image

    How to start Impala service in docker quickstart image docker run --hostname=quickstart.cloudera --p ...

  3. AsyncTask函数化的封装,AsyncTask函数式的调用

    AsyncTask在本专栏已经做过详细的解析,但是AsyncTask函数式的调用这个概念对大多数人来说比较陌生.其实本质就是自己封装AsyncTask,让暴露的方法,看不到一点AsyncTask的身影 ...

  4. SceneKit一个3D场景角色的代码重构

    SuperSpaceMan3D是一个以SceneKit为基础的小游戏项目,作者展示了用SceneKit开发3D游戏的强大威力.不过在实际运行时会发现有一些小bug,这里我们依次尝试将其修复 首先,当s ...

  5. win 8.1 64位彻底删除王码98

    安全模式 C:\Windows\SysWOW64\ 删除:winwb98.IME和winwb98.MB 注册表: 找到王码五笔相关的项.一般在最下面的以字母E开头的文件夹.全部删除. HKEY_LOC ...

  6. 百度编辑器UEditor常用设置函数

    最近在研究UEditor的使用,下面是附上传送门: 这是API文档http://ueditor.baidu.com/doc/ 这是下载地址http://ueditor.baidu.com/websit ...

  7. RxJava(八)concat符操作处理多数据源

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51568562 本文出自:[余志强的博客] 一.concat操作符概述 ...

  8. Cocoa层粒子发射器动画添加多个cell的一种重构

    在iOS动画之旅第19章中最后的挑战中需要我们在雪花例子发生器中添加多个雪花贴图,也就是多个cell,因为我们不可能将每个cell的参数都重新写一遍,所以有必要写一个helper方法来做这件事: fu ...

  9. SQL Server 执行计划操作符详解(2)——串联(Concatenation )

    本文接上文:SQL Server 执行计划操作符详解(1)--断言(Assert) 前言: 根据计划,本文开始讲述另外一个操作符串联(Concatenation),读者可以根据这个词(中英文均可)先幻 ...

  10. 13 SQLiteOpenHelper SQLiteDatabase详解

    创建数据库: 1. 创建一个类继承SQLiteOpenHelper 2. 创建继承对象 new SQLiteOpenHelper() 3. 用创建的对象获取可写或者可读的SQLiteDatabase ...