- 数据检索
- 数据排序
- 数据去重
- 重定向
一、数据检索
1、常和管道协作的命令——grep
1.1rep是什么
#grep: 用于搜索模式参数指定的内容,并将匹配的行输出到屏幕或者重定向文件中,常和管道协作的命令 – grep。 #egrep和fgrep两个命令。 egrep可以使用扩展的正则表达式 fgrep没有元字符与普通字符的区别
1.2grep命令语法
#命令语法 grep [OPTIONS] PATTERN [FILE...] 命令选项 -r 递归 -v 反取 -i 忽略大小写 -n 显示行号 -c 计数 -w 匹配一个词 -l 只给出匹配的文件名 -L 列出不匹配的文件名 -o 只列出匹配的内容 -E 支持扩展的正则表达式 -q 在标准输出中不输出任何内容,即静默模式 PATTERN 匹配字符串 example #对文件夹的操作 grep -r "root" /etc 递归检索/etc下所有文件中包含root的文件 grep -l -r "root" /etc 列出包含 root字符串的文件名 grep -L -r "root" /etc 列出不包含root字符串的文件名 #对文件的操作 grep "root" /etc/passwd 找出文件中包含字符串root的行 grep -v "root" /etc/passwd 找出文件中不包含字符串root的行 grep -n "root" /etc/passwd 找出文件中包含字符串root的行,并显示行号 grep -c "root" /etc/passwd 统计文件中包含字符串root的行数 grep -w "root" /etc/passwd 匹配的字符串必须是一个完整单词 而不是包含 grep -o "root" /etc/passwd 只显示匹配的内容 grep -q "root" /etc/passwd 只匹配不输出 可以使用$?来监测结果,一般脚本中使用较多 [root@www ~]# grep -q "root" /etc/passwd [root@www ~]# echo $? 0 [root@www ~]# grep -q "root1" /etc/passwd [root@www ~]# echo $?
1.3管道
#管道 | 上一个命令的输出作为下一个命令的输入 #单独受用grep [root@pdun ~]# touch file1 [root@pdun ~]# vim file1 [root@pdun ~]# grep you file1 thank you hou are you #管道和grep一起使用 [root@pdun ~]# cat file1 | grep -w you thank you hou are you
二、数据排序
-n 按数字排序 (如果有2,111 这类情况,按数字大小排,而不是按首数字) -r 反序排序 -o 结果输出到文件 -t 分隔符 sort -n -t: -k3 /etc/passwd -k 关键字 (按照指定列来排序) example: ps -a -o comm,vsz,rss,pmem |sort -nr -k 3
#把进程中占资源最多的前5项找出来 [root@pdun ~]# ps aux > xx #把进程重定向到xx中 [root@pdun ~]# tail -n +1 xx |sort -nr -k3|head -5 root 8264 0.2 0.0 0 0 ? S 19:29 0:02 [kworker/0:0] root 6779 0.2 0.6 300720 6324 ? Ssl 19:00 0:05 /usr/bin/vmtoolsd root 1777 0.1 0.0 0 0 ? S 19:00 0:03 [kworker/u256:2] USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 92 0.0 0.0 0 0 ? S 19:00 0:00 [kauditd] tail -n +1 去掉第一行, -nr按数字排序,倒叙 K3取第列
三、数据去重
uniq -c 每行出现的次数 -d 仅显示重复行 -u 仅显示不重复行 -i 忽略大小写 -f N 跳过前面N个部分 (空格分开) -s N 跳过前面N个字符 (一般字符)
四、重定向
#> 重定向输入 #>> 重定向追加 #< 重定向输出 #<< 重定向追加输出
#linux中使用 0 代表标准输入 stdin 1 代表标准输出 stdout 2 代表标准错误输出 stderr #把输入输出和重定向混合使用。 2>把标准错误流重定向到文件中。 2>&1或>&把标准错误流与标准输出流结合在一起。 2>>把标准错误追加到文件 2>&1的意思是,“把标准错误传送到标准输出要去的任何位置”。
-------文件查找---------
- 精确查找
- 模糊查找
#find查找方式: 按文件属性查找 按文件类型查找 按文件大小查找 按时间查找 #语法 find path -option 动作 #动作在后边解释
按文件属性查找
按文件属性查找 -name 按文件名查找,区分大小写 -iname 按文件名查找,不区分大小写 -empty 查找空文件或目录 -maxdepth 查找最大深度 /第一级 /var/tmp/ 就是三级 / var tmp -mindepth 从哪个深度开始查找 /var 第二级 -perm 文件权限 比如4777 -user 文件或文件夹所有者 -uid 文件或文件夹所有者UID #可通过vipw查看用户uid,vipw类似vim -group 文件或文件夹属组 -gid 文件或文件夹数组GID -nouser 没有所有者的文件或文件夹 比用用户被删了 -nogroup 没有属组的文件或文件夹 -links 文件或文件夹硬链接数量
按文件类型查找
f 普通文件
d 目录文件
l 符号链接文件
b 块设备 文件
c 字符设备文件
p 管道文件
s 套接字文件
#example find / -type p find / -typr d
按文件大小查找
c 字节
k KB
M MB
G GB
find / -size +100M
按时间的查找
#按时间(天) mtime修改时间 atime 访问时间 ctime 创建时间 #按时间(分钟) -mmin 修改时间 -amin 访问时间
[root@pdun ~]# find -mtime -1 找出一天内修改过的 [root@pdun ~]# find -mtime +1 -type f 找出一天前修改过的文件 [root@pdun ~]# find -atime +1 -type f 找出一天前访问过的文件
动作
-print 打印输出 -ls 详细列出查找文件信息 类似于ls -l -delete 删除找到的文件 -fls /PATH/file 把查找到的所有文件的长格式信息保存至指定文件中; -ok COMMAND {} ; 对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认; -exec COMMAND {} ; 对查找到的每个文件执行由COMMAND表示的命令;
[root@pdun ~]# find / -name passwd -type l [root@pdun ~]# find / -name passwd -type l -print [root@pdun ~]# find / -name passwd -type l -ls [root@pdun ~]# find / -name passwd -type l -delete [root@pdun ~]# [root@pdun ~]# find / -name passwd -fls /etc/file1 #把找到的内容存到指定的/etc/file1文件中
模糊查询
locate模糊匹配 locate:模糊查找命令,查找的是linux系统每天特点时间自动索引备份到系统数据库中的文件。 命令语法:locate [OPTION]… PATTERN… -i 不区分大小写 #优点:查找文件速度快 locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。 #缺点:查找到的结果不是实时结果(必要时,可手动执行updatedb命令索引文件到数据库,但是相当耗时。) 为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
[root@pdun ~]# echo 'my name is pdun' > file1 [root@pdun ~]# [root@pdun ~]# echo 'my name is pdun' >> file2 [root@pdun ~]# [root@pdun ~]# diff file1 file2 #diff比较两个文件的不同处 0a1 > hello word ------------------------------------------ [root@pdun ~]# wc file1 #wc统计 ,这里有1行 ,4个单词,16字节 1 4 16 file1 [root@pdun ~]# [root@pdun ~]# wc -l file1 1 file1 [root@pdun ~]# wc -l < file1 1
压缩与解压
- tar包管理
- zip包管理
- 单文件压缩
tar
#tar 压缩或解压时根据其后面所跟的名令选项决定 #命令语法 tar 压缩或者解压 gz、bz2、xz格式包 tar [OPTION...] [FILE]... #命令选项 c建立压缩包 v 显示过程 x 解压压缩包 f 必选项 归档文件名 t 查看压缩包内容 j 二次压缩使用bz2格式 z 二次压缩使用gz格式 J 二次压缩使用xz格式
tar -cvzf etc.tar.gz /etc #把/etc下所有压缩到etc.tar.gz (命名要规范,方便解压) tar -xvzf etc.tar.gz #解压 #查看文件大小 du -h etc.tar.gz (文件名) #查看一个文件夹文件的总和 du -sh /etc(文件名) tar -cvjf etc.tar.bz2 /etc #压缩成bz2格式 tar -xvjf etc.tar.bz2 #解压 tar -cvJf etc.tar.xz /etc #xz格式 tar -xvJf etc.tar.xz tar cvd etc.tar -etc #tar格式 tar xvf etc.tar #查看压缩包内容,不解压 tar tf file #tar tf etc.tar.xz #比较几种压缩格式压缩包的大小 [root@pdun ~]# du -h etc.tar 28M etc.tar [root@pdun ~]# du -h etc.tar.xz 7.0M etc.tar.xz [root@pdun ~]# du -h etc.tar.bz2 8.7M etc.tar.bz2 [root@pdun ~]# du -h rtc.tar.gz 9.8M rtc.tar.gz
zip格式
#安装压缩与解压命令 yum -y install zip unzip zip - package and compress (archive) files 压缩文件或文件夹 #压缩 -r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件 zip -r etc.zip /etc #解压 unzip - list, test and extract compressed files in a ZIP archive 显示、测试、解压ZIP包 -v 显示压缩目录内容,但是不解压 unzip -v etc.zip -t 检查压缩文件是否正确、完整,但是不解压 unzip -t etc.zip -l 列出压缩文件内容,但是不解压 unzip -l etc.zip
压缩文件
[root@pdun ~]# mkdir opt [root@pdun ~]# [root@pdun ~]# cd opt [root@pdun opt]# [root@pdun opt]# ll total 0 [root@pdun opt]# [root@pdun opt]# cp passwd ./ 有以上可知,passwd是文件 #bzip2 bzip2 passwd #压缩passwd文件 bzcat passwd.bz2 #查看压缩文件内容 bunzip2 passwd.bz2 #解压文件 #gzip gzip passwd #压缩 zcat passwd #查看压缩包内容 gunzip passwd #解压 #zip zip passwd unzip passwd