cat -s file           压缩file中的空白行

cat -T file           将file中的制表符替换成^

cat -n file           显示file中的行 类似vi 中的set nu

__________________________________________________________________________

2.记录终端的会话。script 能够将终端的 会话录制下来,利用scriptreplay就可以将录制的内容会放出来。好处在与所有的操作都能记录。

script -t 2 > timeing.log -a out.session

#commad1

#commad2

#exit  录制完成。

scriptreplay  time.log out.session

或者简单的  script -a out.log   -a 表示追加  默认是覆盖。

用cat  vi 等直接查看。

#!:默认情况 可以直接使用 script  他会自己生成一个默认的typescript文件,但是下次记录就会覆盖typescript文件。所以使用 -a 选项。

#!:记录会话的时候 不会记录不显示终端的输出,例如passwd root 的密码输入。

#!:录制过程中尽量不要是用vim 等全屏的操作,尽量使用set。

#!:录制过程中一些del backspace的键 会被录制成[k 等字符

#!:录制过程中 一些需要图像的 setup  net-config 不会被记录。

__________________________________________________________________________

3. 利用mkfifo 进行广播会话,类似win的NeetMeeting

#mkfifo使用指定的文件名创建FIFO(也称为"命名管道").


"FIFO"是一种特殊的文件类型,它允许独立的进程通讯. 一个进程打开FIFO文件进行写操作,而另一个进程对之进行读操作, 然后数据便可以如同在shell或者其它地方常见的的匿名管道一样流线执行.

默认情况下,创建的FIFO的模式为0666('a+rw')减去umask中设置的位.  

#mkfifo -m 777 testfifo  创建fifo文件权限是777 (终端-1)

# cat testfifo   (终端-2)

#script -f testfifo(终端-1)

#输入命令

#exit 完成

这个时候终端-2 就可以及时观看内容了。

__________________________________________________________________________

 find命令:查找

find /home -name xxx              查找 /home 下文件名为xxx的文件或文件夹

find /home -iname xxx             查找 /home 下文件名为xxx的文件(不区分大小写)

find  /home -name  "*.txt" -o -name "*.sh"   查找/home 下已txt扩展名结尾或者sh扩展名结尾的文件或文件夹

find /home -regex b*             查找 /home 下文件名为b*的文件或者文件夹

或者

-iregex (忽略大小写)

-name 与 -regex的区别:

-name, -iname最大的区别就在于 -regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象, 而不仅仅是结果的最后一部分, 举例
/tmp
目录下有且仅有 aaa, aa, 1, 2 这些文件
find -name "a*"可以找到
aaa和aa

find /tmp -regex "a*"就不行, 它一个都找不到, 因为找到的每个结果是这样的
/tmp/aaa
/tmp/aa
-name 是对结果中的"aaa"和"aa"这个部分进行匹配, 而-regex却是对完整的
"/tmp/aaa"和"/tmp/aa"进行匹配.
所以你要写作
find /tmp -regex ".*a.*"

在上面例子中最大区别就是  .* 来表示任意长度字符串. 


2. 注意上面的是.*而不是*
-name所能解释的是基于shell中file glob的匹配字符, 包括:
(1)*表示任意长度字符串
(2)?表示任意的单个字符
(3)[set] 表示一个可选字符集合
(4)[^set]或[!set]表示以ASCII为全集对[set] 求补集的一个集合
(5)brace expansion, 即把/tmp/{a,b,c}扩展为三个字串
/tmp/a /tmp/b 和/tmp/c
注意 shell的file globing机制往往不被认为是正则表达式.

-regex接受的是"正统"的正则表达式
这个说起来东西多了, 基本上它跟emacs文档里讲的regex是一样的, 因为find手册里regex的解释部分实际就是链接到emacs 中讲解regex的那个部分. 

find /home ! -name *.txt         查找 /home 下文件名除了xxx的文件或文件夹

find /home -maxdepth 1 -ame b.txt  查找/home 当前下的文件名为b.txt的文件或文件夹,-mandepth  指定查找的最大深度,默认情况下是搜索所有目录和子目录,1为当前目录。2为/home 下的2级目录,/home/dir/   3.4.5 依次类推各级别子目录。

find /home -mindepth 2  -name b.txt        查找/home/dir/dir 下文件名为b.txt的文件或文件夹。 -mindepth 指定最小深度,2表示距离/home 2个目录以后匹配的 文件。也就是 /home/dir1/dir/b.txt 

find指定查找类型:find -type 

-f  普通文件

-l  链接文件

-d  目录

-c  字符设备

-b  块设备

-s  套接字 socket

-p  fifo管道文件 

根据时间查找

atime  mtime ctime     访问时间      修改时间     元数据修改时间

find /home -type f -atime -7

查找/home 下前7天之内访问的文件

find /home -type f -atime 7

查找/home 下整好是前7天访问的文件

find /home -type f -atime +7

查找/home 下最后一次访问时间超过7天的文件

atime mtime ctime 的单位是天  对应的还有 amin mmin cmin 单位是分钟

find /home -type f -size 10k   基于文件类型的大小

-10K 小于  +10K  大于  10K 相等  

单位可以使  w  k  m  g

find /home -type l -perm 644  基于权限的查找

find /home -type c -user root  基于用户的查找

find与exec特性

find查找之后的结果可以利用exec进一步进行操作,与其他命令结合

find /home -type b ! -user root -maxdepth 2 -perm 700 -size -100k -exec chown root:root {} \;

/home 下2级目录以内类型为块设备权限为700大小小于100k的非root文件,执行root:root {} 表示每一个匹配文件

xargs 命令

有些命令只能接受命令行参数的形式,通过grep出来的stdin数据流不能别使用,xargs是一个擅长将标准输入转换成特定命令的命令参数,也可以将单行的数据流变成多行

cat bc.txt |xargs 

将多行变成一行 用空格分隔

cat bc.txt |xargs -n 3

将每行按照3个字符分隔 

cat bc.txt |xargs -d x 

已x字母为分隔符,默认是空格

-n 的分别取值功能

args.txt文件内容

1.ls

2.lh

3.vi

cat args.txt |xargs -n 1 /root/test.sh

等于分别执行 

ls /root/test.sh

lh /root/test.sh

vi /root/tet.sh

传递命令的时候 -n X 说明一次传递几个参数 1 就是1个 N就是N个,当列表取值不够的时候,余下几个就执行几个,例如一共3个 每次-n 2 个 第2次就只能执行一个

cat args.txt|xargs -I {} ./cat tt.txt -p {}

{}表示每一个匹配,分别执行一次。

等于cat tt.txt -p ls{lh}{vi}

_______________________________________________________________________

tr命令使用

tr可以对标准输出的字符或者各种标识符进行转换(translate)

tr [options] set1 set2 

将标准输入用 set2 转换 set1,如果set2 的长度小于set1,set2会不断重复最后一个字符知道与set1长度相等,如果set2的长度大于set1,那么超出部分字符会被忽略

echo "HI" |tr 'A-Z' 'a-z'

用集合的形式用小写字母替换大写字母

集合例子:ABD-}   aA.,  a-ce-x   a-c0-9

起始-终止,如果不是一个连续的字符序列,那么会被视为包含了3个元素的组合

cat a.txt |tr '\t' ' '

用空格替换制表符,就是tab

cat a.txt |tr -d ' '

-d指定出现在文本中的所有空格字符都删除

cat a.txt |tr -c '0-9'

-c指定补集,意思就是除了0-9(所有数字),其余的空格符换行符字母等等全部删除

cat a.txt|tr -s '\n'

将文本中的重复的换行符压缩成一个换行符

echo "i am   who         ti" |tr -s ' '  压缩重复的空格变成一个

输出  i am who ti

cat sum.txt

1

2

3

4

5

#cat sum.txt |echo $[ $(tr '\n' '+') 0 ] 

#15 

tr将\n 换行成+,因此得到1+2+3+4+5+,但是尾部多了一个+,于是追加了一个0,$[1+2+3+4+5+0]执行运算,于是等于15