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 |
|
来自: 风雪夜归人_95 > 《Linuxshell》