Linux Shell Scripting Cookbook 读书笔记 2
cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自动化交互
1. cat的用法
压缩连续的空白行
cat -s file
也可以用tr,将连续'\n',压缩成一个'\n'
cat file | tr -s '\n'
显示制表符
cat -T file
显示行号
cat -n file
2. script命令
录制: script -t 2> time.log out.session
type commands;
exit退出录制
回放: scriptreplay time.log out.session
记录日志: script -aq out -c "pwd"
可以将-c里面执行命令的结果保存到out文件,达到记录日志的目的
3. find命令
多条件组合

注意括号需要转义,后面必须有空格
查找shell还有python文件

目录深度
find . -mindepth 2 -type f
find . -maxdepth 1 -type d
文件类型
find . -type d # d表示目录,f表示文件,l表示链接
文件时间,linux中没有文件创建时间概念
-atime,用户最近一次访问文件的时间; -mtime,文件内容最后一次被修改的时间; -ctime,文件元数据(metadata,例如权限或所有权)最后一次改变的时间
其中-表示小于,+表示大于
查找七天内被访问过的文件: find . -type f -atime -7; 恰好在七天前被访问的文件: find . -type f -atime 7; 超过七天被访问的文件: find -type f -atime +7
相似的有amin,mmin,cmin,以分钟为单位
文件大小
-size ( b,块 512字节; c,字节; w,字 2字节; k, 千字节; M,兆字节; G )
其中-表示小于,+表示大于
删除文件 -delete
删除当前目录下所有.swp文件: find . -type f -name "*.swp" -delete
所有权或用户查找
find . -type f -perm 644
find . -type f -user sryan
结合find执行命令,-exec
将当前目录下用户为root的文件改为sryan
find . -type f -user root -exec chown sryan {} \;
{}是find搜寻的结果,\转义分号,不让shell解释,意思该分号是给-exec使用
-exec只能接受单个命令,所以如果有多个命令,可以写成脚本,-exec ./comand.sh {} \;
find命令全部输出只是一个单数据流(stdin),只有当多个数据流被追加到文件时,才有必要用用>>
find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt #将当前目录下所有c程序文件拼接起来写入文件
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; #将大于10天的txt文件移动到OLD目录下
修剪,跳过指定目录
find dev/folder \( -name ".git" -prune \) -o \( -type f -print \) # 排除.git目录,打印所有文件的名称和路径
只查看目录下非隐藏的文件, 试了下,如果不加-o选项,则-prune不会起作用

4. xargs
有些命令无法接收stdin数据流,xargs能够将标准输入数据先格式化,转换成命令行参数
将多行转换成单行输出, xargs默认是按照“ ”空格来格式化的

-n 指定每行最大参数数量

-d 指定定界符,注意是区分大小写的

-I 选项指定一个替换字符串
cat args.txt | xargs -I {} ./test.sh -p {} -l
相当于 .test.sh -p arg1 -l
test.sh -p arg2 -l

与 -i 的区别


与find的结合
误区: find . -type f -name "*.txt" -print | xargs rm -f
无法预测find输出结果的定界符究竟是'\n'还是空格' ',很多文件名中含有空格
误删了hell文件,但是hell test.txt没删掉,因为xargs是以空格为定界符的

find . -type f -name "*.txt" -print0 | xargs -0 rm -f
xargs -0 将\0作为指定的定界符
统计每个txt文件的行数

5. tr
对来自标准输入的字符进行替换,删除以及压缩。无法通过命令行参数接收输入
tr后面的两个参数需要等长,如果前面短,则截断后面;如果前面长,则后面的用最后一个字符补齐
-d 删除

-s 压缩,可以用来去除多余空格


$[ ] 是执行算术运算
字符类替换

alnum: 字母和数字; alpha: 字母; cntrl: 控制字符
digit: 数字; graph: 图形字符; lower: 小写
upper: 大写; print: 可打印字符; punct: 标点符号
space: 空白字符; xdigit: 十六进制
6. 产生tmp文件

或者使用$RANDOM
或者temp_file=/tmp/var.$$,在脚本中,$$会被扩展成当前运行脚本的进程id
7. 生产固定大小的文件
dd if=/dev/zero bs=100k count=1 of=data.file
生成大小为100kb而文件内容全部是0
8. 字符串截取
${var%.*},删除位于%右侧的通配符(.*)所匹配的字符串,通配符从右向左匹配

贪婪模式

${var#.*},删除位于#左侧通配符(.*)所匹配的字符串,通配符从左向右匹配

9. 批量文件重命名
rename 'y/A-Z/a-z/' * #大写替换成小写,*匹配所有文件
find . -type f -exec rename 's/ /_/g' {} \; #将所有文件里的空格替换成_
10. 自动化交互
#!/bin/expect spawn kinit sryan
expect "Password*"
send "Mypassword\n"
expect eof # interact
spawn: 启动你要自动化的的进程
expect:需要等待的信息
send: 要发送的信息
expect eof: 指明命令交互结束
interact: 将交互状态保留给控制台,例如ssh进入后,如果不加这句,就会退出,而不是留在远程服务器上
Linux Shell Scripting Cookbook 读书笔记 2的更多相关文章
- Linux Shell Scripting Cookbook 读书笔记 1
本系列文章为<Linux Shell Scripting Cookbook>的读书笔记,只记录了我觉得工作中有用,而我还不是很熟练的命令 书是很好的书,有许多命令由于我比较熟悉,可能就没有 ...
- Linux Shell Scripting Cookbook 读书笔记 7
ping, du, ps, kill, 收集系统信息 判断网络中哪些主机是活动主机 #!/bin/bash for ip in 10.215.70.{1..255}; do ( ping $ip -c ...
- Linux Shell Scripting Cookbook 读书笔记 6
wget,curl, tar, rsync wget ftp://example.com/somefile.img -t 5 -O download.img -o log -t表示重试的次数 -O指定 ...
- Linux Shell Scripting Cookbook 读书笔记 5
sed,awk 1. sed (string editor) 使用-i可以将结果运用于原文件 sed 's/text1/text2/' file > newfile mv newfile fil ...
- Linux Shell Scripting Cookbook 读书笔记 4
正则, grep 1. 正则表达式 正则表达式 描述 示例 ^ 行起始标记 ^hell匹配以hell开头的行 $ 行尾标记 test$匹配以test结尾的行 . 匹配任意一个字符 hell ...
- Linux Shell Scripting Cookbook 读书笔记 3
patch, tree, head ,tail 1. 创建不可修改文件 chattr +i file chattr -i file 移除不可修改属性 2. 能够启动闪存或硬盘的混合ISO isohyb ...
- 《The Linux Command Line》 读书笔记02 关于命令的命令
<The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- 《Linux内核分析》读书笔记(四章)
<Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...
随机推荐
- How to add jdk8 in Eclipse Indigo
I just read How to have Eclipse use JDK8 to compile a project? What i added jdk8 to eclipse as, Fro ...
- HDU_5833_高斯消元
参考自:http://www.cnblogs.com/flipped/p/5771492.html 自己做的时候不知道如何求种数.看了题解,感觉思路灰常巧妙.同时也感觉这是一道好题. 精髓在于转化为线 ...
- sturts2 回顾
第一个简单的struts2例子: 1. 创建一个web project 2. 导入jar包 具体jar包在struts 的例子中的lib文件夹中copy
- 怎样批量删除PDF文件中的注释
日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释? 操作教程: ...
- react新版本生命周期
给componentWillMount componentWillReceiveProps componentWillUpdate生命周期加上UNSAFE_前缀,表明其不安全性,并将在未来版本将其移除 ...
- 【转】虚拟化(一):虚拟化及vmware产品介绍
由于公司最近在做虚拟化监控,因此就需要把虚拟化方面的知识给学习总结一下,对于虚拟化的概念,摘自百度百科,如下: 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- eas之EAS手工打包及快速部署工具
EAS手工打包及快速部署工具:jar包的命名是项目名就好了. 1. 在eas的工作空间下:E:\Easworkspace\Project_0 有classes和deployed_metas这两个文 ...
- 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk【贪心+背包】
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的.此 ...
- [bzoj3291] Alice与能源计划 (二分图最大匹配)
传送门 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验.为 了方便,我们可以将火星抽象成平面,并建立平面直角坐标系. ...