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. 自动化交互

  1. #!/bin/expect
  2.  
  3. spawn kinit sryan
  4. expect "Password*"
  5. send "Mypassword\n"
  6. expect eof # interact

spawn: 启动你要自动化的的进程

expect:需要等待的信息

send: 要发送的信息

expect eof: 指明命令交互结束

interact: 将交互状态保留给控制台,例如ssh进入后,如果不加这句,就会退出,而不是留在远程服务器上

Linux Shell Scripting Cookbook 读书笔记 2的更多相关文章

  1. Linux Shell Scripting Cookbook 读书笔记 1

    本系列文章为<Linux Shell Scripting Cookbook>的读书笔记,只记录了我觉得工作中有用,而我还不是很熟练的命令 书是很好的书,有许多命令由于我比较熟悉,可能就没有 ...

  2. Linux Shell Scripting Cookbook 读书笔记 7

    ping, du, ps, kill, 收集系统信息 判断网络中哪些主机是活动主机 #!/bin/bash for ip in 10.215.70.{1..255}; do ( ping $ip -c ...

  3. Linux Shell Scripting Cookbook 读书笔记 6

    wget,curl, tar, rsync wget ftp://example.com/somefile.img -t 5 -O download.img -o log -t表示重试的次数 -O指定 ...

  4. Linux Shell Scripting Cookbook 读书笔记 5

    sed,awk 1. sed (string editor) 使用-i可以将结果运用于原文件 sed 's/text1/text2/' file > newfile mv newfile fil ...

  5. Linux Shell Scripting Cookbook 读书笔记 4

    正则, grep 1. 正则表达式  正则表达式  描述  示例 ^ 行起始标记  ^hell匹配以hell开头的行 $ 行尾标记  test$匹配以test结尾的行 . 匹配任意一个字符  hell ...

  6. Linux Shell Scripting Cookbook 读书笔记 3

    patch, tree, head ,tail 1. 创建不可修改文件 chattr +i file chattr -i file 移除不可修改属性 2. 能够启动闪存或硬盘的混合ISO isohyb ...

  7. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

  8. 《The Linux Command Line》 读书笔记01 基本命令介绍

    <The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...

  9. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

随机推荐

  1. html5 web worker学习笔记(记一)

    (吐槽:浏览器js终于进入多线程时代!) 以前利用setTimeout.setInterval等方式的多线程,是伪多线程,本质上是一种在单线程中进行队列执行的方式.自从html5 web worker ...

  2. Embedded之Stack之二

    1 Function Programming languages make functions easy to maintain and write by giving each function i ...

  3. change project compliance and jre to 1.5

    这个主要检查一下几点 项目的jdk为1.7 java版本设置为1.7 java compiler 的页面设置为以下,并且去掉勾选java compiler 下面的 enableproject spec ...

  4. iOS安全策略之HTTPS

    1.HTTPS传输流程 2.常用加密算法 3.AFN证书校验策略及核心方法 4.SSL Pinning 5.CA证书申请流程 HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加 ...

  5. Unicode转换为UTF-8过程Demo

    碎碎念:这几天在学习Python对Unicode的支持 上学的时候,计算机基础课上总能听到老师讲什么字节,字符,Unicode,UTF-8吧啦吧啦一堆,反正我是只记住了名字,至于具体这些名字所表达的含 ...

  6. Python字典 day2

    一.字典 1.字典的特点: 一系列键-值对(key-value),字典用放在花括号{ }中的一系列键值对表示; 字典中有多个元素时需要用逗号,隔开: key不能重复: 字典是无序的. 字典的优点:字典 ...

  7. 设置快捷键用sublime直接打开浏览器

    1.安装sidebarenhancements插件 ctrl+shift+p —> Install Package —> 找到SideBarEnhancements 2.配置预览快捷键 / ...

  8. Java 实现线程安全的三种方式

    一个程序在运行起来的时候会转换成进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如显示生活中,银行取钱问题.火车 ...

  9. jquery怎样获取多个复选框的值?

    jquery的遍历方法可以获取复选框所欲的选中值 1 2 $("input:checkbox:checked").each(function(index,element));    ...

  10. UVALive Archive - 6196 - Party Games

    题目: You've been invited to a party. The host wants to divide the guests into 2 teams for party games ...