1.echo 'Text through stdin' | cat - 123.txt 会显示字符串和123.txt的内容。若去掉“-”,则只
会输出123.txt的内容
cat -s 123.txt 输出时可以将文本中的连续的多行空格压缩到一行空格,实际不改变文本的内容。
cat 123.txt | tr -s '\n' 则在输出时去掉文本之间的空格行,但是最开始的空行仍然是压缩为一行
。
2.有时需要将某个操作录制下来重新看,可以使用
script -t 2> timing.log -a output.session (系统会提示Script started, file is
output.session)
。。。。(输入你要录制的命令)
exit (提示Script done, file is output.session)
scriptreplay timing.log output.session (运行这个就能看到效果了。timing.log存储每条命令运行
的时间,output.session存储命令输出,)
3.同步你的操作到另一个shell中
(主shell)$:mkfifo scriptfifo (从shell)$:cat scriptfifo
(主shell)$:script -f script fifo
(主shell)$:commands (从shell)$:显示主shell中的操作
4.find命令
find . -print 打印当前目录下(\n作为文件与文件之间的分隔符)
find . -print0 同上,分隔符改为空格 (..则表示上一层目录)
find . -iname "*.sh" 根据名字查找某个文件,忽略大小写
find . \( -name "*.txt" -o -name "debug.sh" \) 注意括号必须使用转义字符,且括号后面都要有空
格,不然都会报错
find /home/users/ -path “*Linux*” 根据文件名或者文件路径来搜索
find /home/users/ -regex “*Linux*” 同上,但使用正则表达式来搜索
find . -regex ".*\(\.py\|\.sh\)$" 这个后面的$符不知道是干什么的,我去掉发现也没什么影响
find . ! -name "*.txt" -print 根据文件名找到所有不是指定后缀的文件名
find . -maxdepth 1 -type f -print 限定搜索的最大层数为1
find . -mindepth 2 -type f -print 限定搜索的最小层数为2
文件类型搜索其中 -type后可以跟的符号:
regular file f
Symbolic link l
Directory d
Character special device c
Block device b
Socket s
Fifo p
时间搜索:
-amin 、-mmin、-cmin与下面三个的区别在于时间单位为每分钟
Access time(-atime):最后一次打开这个文件
Modification time(-mtime):最后一次修改这个文件
Change time(-ctime):元数据(权限或所有权)最后一次修改
find . -type f -atime -7 -print 打印所有在这个时间过去7天内的文件
find . -type f -atime 7 -print 打印所有在这个时间正好7天的文件
find . -type f -atime +7 -print 打印所有在这个时间过去大于7天的文件
find . type f -newer file.txt -print 打印所有比file修改更新的文件
-size 通过大小来找
b 512 byte; c bytes;w 2 byte words; k kilobyte; M Megabyte; G Gigabyte
-delete 找到后删掉这个文件
find . \( -name ".git" -prune \) 从当前路径排除.git这条路径
5.xargs默认是将多行输出合并到一行输出,如果在后面加参数“-n no”,则是no个数为一行的输出数据
,默认的分隔符是空格,可以修改,在后面加参数 “-d char”,则指定char为分隔符。
cecho.sh里面就一句:echo $*'#'
cat args.txt | xargs -I {} ./cecho.sh -p {} -l
用{}(只是一个符号,可替换成任意字符)来代替从stdin中读到的数据,-I代表循环执行,这里的
args.txt里面有三个数据,故有三次循环。然后再把"-p {} -l"打印出来。({}里面有每次从stdin中读
出的数据,-p、-l没有特殊含义在这里)
6 find . -type f -name "*.txt" -print0 | xargs -0 rm -f
-print0产生输出时用空格作为分隔符,-0 interprets that the delimiting character is \0.
7.tr {options} set1 set2
当集合2的长度小于集合1的长度时,就会重复集合2的最后一个字符自动补成集合1的长度;当集合2的长
度大于集合1的长度时,就会忽略2中多的部分的内容
例如:
echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
如果是连续的集合可以用“开始字符-结束字符”,按顺序一一对应,可用于简单的加密解密
tr -d sets 命令可从stdin中剔除掉sets中的内容
echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
stdin中的内容除去后面那个集合中间的内容,其他的都删掉
tr -s sets 命令可将stdin中内容出现重复的sets中出现的元素压缩到一个
8.md5sum file1 file2 file3 .... > file1_sum.md5 file2_sum.md5 file3_sum.md5命令可以生成各自
文件对应的checksum
md5sum -c file_sum.md5 命令可以检查文件的checksum是否正确,正确会提示OK
还有一种是针对路径的,意味着该路径下所有的文件都要检查。
md5deep -rl directory_path >directory.md5
-r代表递归, -l代表使用相对路径
9.sort file1 file2 file3 ... >sort.txt
将排序的结果重定向到sort.txt中
sort -n sort.txt 按文件内容数量排列
sort -r sort.txt 按反转的方式排列
sort -C sort.txt 检查是否排序,若排过,则返回值为0
sort -m sort1.txt sort2.txt 将两个排列过的文件合并
uniq命令总是和sort命令一起使用 去掉重复的项
10.dd if=/dev/zero bs=100k count=1 of=data.file
直接磁盘(区块)复制,输入设备时/dev/zero,输出设备是data.file,复制大小为100k,复制一次,dd
出来的是块设备,一般用来测试磁盘读取性能。
------------------------
Unit size code |
------------------------
Byre(1B) c |
Word(2B) w |
Block(512B) b |
kilo Byte(1024B) k |
Mega Byre(1024KB) M |
Giga Byre(1024MB) G |
------------------------
11.用%提取文件的名字,用#提取文件的后缀
例如:
file_sh="test.sh"
name=${file_sh%.*}
extension=${file_sh#*.}
echo File name is:$name ,Extention is:$extension
结果:File name is:test,Extention is:sh
%是一个懒惰模式的操作符,它从右到左找到最小的匹配,而%%则相反,它总是从右到左找最大的匹配,
例如:
var=hack.fun.book.txt
echo ${var%.*} 结果:hack.fun.book
echo ${var%%.*} 结果:hack
# 和## 和上面的是一一对应的,只不过匹配的方式是从左到右
echo ${var#*.} 结果: fun.book.txt
echo ${var##*.} 结果: txt
12.在字典中查询某个单词看是否存在的方法:
1).look word filepath 当不加路径时,默认路径为/usr/share/dict/words
2).grep "^word$" filepath
3).aspell list 但有该单词不返回任何值,若不存在则返回输出文字
13.交互式读取标准输入
1)read -p "enter number:" no;
2).echo -e "2\nhello\n" > input.data
cat input.data
14.comm A.txt B.txt
结果会出现3栏,第一栏是A.txt中含有的,第二栏是B.txt中含有的,第三栏则是二者共存的。若在该命
令后加参数“-i”(i=1,2,3),则会去掉第i列的输出
comm A.txt B.txt -3 | sed 's/^\t//'则会去掉输出结果中的tab。s代表substitute,"/^\t\"代表\t