cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自动化交互python
1. cat的用法linux
压缩连续的空白行git
cat -s fileshell
也能够用tr,将连续'\n',压缩成一个'\n'bash
cat file | tr -s '\n'服务器
显示制表符session
cat -T filessh
显示行号spa
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进入后,若是不加这句,就会退出,而不是留在远程服务器上