Linux Shell 脚本攻略学习--四
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
参数:
-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
这又是一个文件比较命令,熟练掌握会节省你很多工作。还记得comm命令吗?diff比他更加复杂,好用,不仅能比较文件,还能比较目录。 当一个文件有多个版本时候,或者更多复杂的文件,目录比较时,你会期望有一个比comm更有用的命令,diff正是为此而生。
全称:different file
实例:
文件1: v1.txt
hello world v1_echo v1_diff v1_comm shell is easy! |
hello world! v2_echo v1_diff easy shell! |
1.普通比较:
- $diff v1.txt v2.txt
1,2c1,2 < hello world < v1_echo --- > hello world! > v2_echo 4c4 < v1_comm --- > easy shell! |
列出比较的区别,数字为行数,c是compare
2.一体化输出:
- $diff -u v1.txt v2.txt > version.patch
-v1_echo +hello world! +v2_echo v1_diff -v1_comm +easy shell! shell is easy! |
"+"表示补充的行,"-"表示删去的行
3. 更新覆盖v1.txt,注意这里借用了patch
- $patch –p1 v1.txt< version.patch
4. 比较v1,v2文件,仅输出v2的变化
- $diff -e v1.txt v2.txt
4c easy shell! . 1,2c hello world! v2_echo . |
5.比较目录
借用书上一段解释:
-N 将所有确实的文件视为空文件
-a 将所有文件市委文件文本
-u 生成一体化输出
-r 遍历目录下的所有文件
比较两个目录下所有文本信息
- $diff –Naur directory1 directory2
除非你确定这两个目录基本相同,不然不推荐这么用。
6.工作疲劳后,尤其同时做很多事情的时候,会忘了有没有做过上传,或者修改某个目录下的文件。可以这样:
- $diff v1.txt /${dir}
直接比较同名文件,高强度下的工作者相信真有体会。
文本操作命令-wc
全称
wc是一个用于统计的工具,全拼为:Word Count(单词统计)
实例:
1. 统计行数
- $wc –l file
2. 统计单词数
- $wc –w file
3. 统计字符数
- $wc –c file
4. 统计流中的字符数
- $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 文件,无任何参数
顺序是 行数,单词,字符,字节,最大行长度
Linux Shell 脚本攻略学习--四相关推荐
- Linux Shell脚本攻略学习总结:一
终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...
- Linux Shell脚本攻略学习总结:三
根据扩展名切分文件名 首先,我们先来看两个例子: file_jpg="sample.jgp" name=${file_jpg%.*} echo File name is : $na ...
- Linux Shell脚本攻略学习总结:二
比较与测试 程序中的流程控制是由比较和测试语句来处理的. 我们可以用if,if else 以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项.另外,有一个test 命令也可以用来进行测试.让我们 ...
- linux shell 脚本攻略学习11--mkdir和touch命令详解
一.创建目录(mkdir命令详解) amosli@amosli-pc:~/learn$ mkdir dir amosli@amosli-pc:~/learn/dir$ mkdir folder amo ...
- linux shell 脚本攻略学习10--生成任意大小的文件和文本文件的交集与差集详解
一.生成任意大小的文件(dd命令): 举例: amosli@amosli-pc:~/learn/example$ dd if=/dev/zero of=test.zip bs=2M count=1; ...
- LINUX SHELL脚本攻略笔记[速查]
LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...
- Linux Shell脚本攻略 读书笔记
内容目录: 嗨,Echo一下 给终端来点颜色 shell的控制结构 算术比较 目录操作 网站下载 tar 归档工具 rsync 备份系统快照 ftp自动传输 磁盘管理 故障排查 使用syslog记录日 ...
- 《Linux Shell脚本攻略》学习笔记-第一章
1.1 简介 计算机可以从文本文件(称为shell脚本)中读取并执行命令. sehll脚本不仅节省了时间,而且清楚明白地表明了所执行的操作. bash shell变成了UNIX和Linux中既成事实的 ...
- linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
今天为大家带来的内容是:(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤 本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章 ...
最新文章
- linux卸载hadoop版本,centos6.5 安装hadoop1.2.1的教程详解【亲测版】
- web开发(二十一)之自定义拦截器的使用
- Centos下MongoDB的安装与配置
- Chrome 扩展 最近的历史 HistoryBar v1.1
- Linux入门学习(二)
- Elasticsearch Scale Out
- 银行有没有必要建立数据中台?看看这些架构师和技术总监怎么说
- Windows 关于Robocopy的使用详解
- Django使用livereload自动刷新页面
- sae nodejs mysql_通过新浪云部署NideShop微信小程序商城(基于Node.js+MySQL+ThinkJS)
- matlab人口增长线性回归拟合_Matlab线性回归(拟合)
- C++ 有理数运算符重载
- 495. Teemo Attacking(提莫攻击)
- 房屋租赁合同法律规定是怎样的
- MMD->Unity一站式解决方案
- python画出心形图
- 如何备份Linux系统磁盘
- Robust stochastic frontier analysis
- Java必会基础题,量不多,但每天进步一点也是好的
- Unity3D摄像机(Camera)跟随角色移动的代码控制和演示动画
热门文章
- node.js path
- 《关系营销2.0——社交网络时代的营销之道》一从单向沟通转向多方沟通
- 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
- cocos2dx对所有子节点设置透明度
- Nginx Rewrite详解
- 容器,你还只用Docker吗?(上)
- Go语言连接 zookeeper
- 企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理
- AliOS Things KV组件的写平衡特性
- 高级持续性威胁检测无法检测出自定义恶意软件?