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. 含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解

    版权声明:本文为博主原创文章,博客地址:,欢迎大家相互转载交流. 使用R语言做逻辑回归的时候,当自变量中有分类变量(大于两个)的时候,对于回归模型的结果有一点困惑,搜索相关知识发现不少人也有相同的疑问 ...

  2. Bootstrap3 代码-程序输出

    通过 <samp> 标签来标记程序输出的内容. This text is meant to be treated as sample output from a computer prog ...

  3. YAML 在Python中的配置应用

    环境搭建 YAML语法 语法规则 数据结构 列表数组 原子量 YAML应用 案例 load dump 总结 YAML是一个堪比XML,JSON数据格式的更加方便,简洁的,易于人眼阅读的序列化数据格式. ...

  4. Docker学习笔记3:CentOS7下安装Docker-Compose

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ...

  5. Appium移动自动化测试(三)--安装Android模拟器(建议直接连手机,跳过此步)

    转自虫师,亲测有效,留备后用. 本文中如果直接安装时不出现错误,则可以忽略(一.二.三.四.五),我安装的是5.1.1,直接成功,就是有点慢,要有耐心. 如果到最后一步,启动不起来,报错: emula ...

  6. ActiveMQ + NodeJS + Stomp 极简入门

    前提 安装ActiveMQ和Nodejs 测试步骤 1.执行bin\win32\activemq.bat启动MQ服务 2. 打开http://localhost:8161/admin/topics.j ...

  7. BeanUtils Exception 之 FastHashMap

    这里仅仅是为了记录一件十分奇怪的事情,在使用BeanUtils的过程中,所有的依赖包都添加了, common logging common collections ··· 在为boolean 这种基本 ...

  8. require.js使用步骤

    以superagent为例 1.设置lib目录 requirejs.config({ baseUrl: 'libs' }); 2. 使用SuperAgent require(['superagent' ...

  9. 3.关于QT中的MainWindow窗口,MenuBar,ToolBar,QuickTip等方面的知识点

     1 新建一个空Qt项目 编写12MainWindow.pro HEADERS += \ MyMainWindow.h \ MyView.h SOURCES += \ MyMainWindow.c ...

  10. FFmpeg源代码简单分析:avcodec_encode_video()

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...