04 Linux.txt

UP 返回
查看文件: ls
查看文件内容:cat		less	more	...
编辑文件内容:vi		vim
查看shell版本(默认bash):echo $SHELL
查看本机器支持的shell版本:cat /etc/shells
切换shell指令:chsh -s [shell路径]					用于切换指定的shell(change shell)

查找特定文件:find path [options] params
				find -name "target.java"	在当前文件夹下递归查找target.java文件
				find / -name "target.java"	全局查找
				find ~ -name "target*"		在当前用户的home目录下,通配查找文件
				find / -iname "target*"		iname表示忽略大小写的查找

查看指令介绍:man find		如果linux采用的是最小安装的话,这里需要安装man:yum install man	(cenos6及以前目前都已停止维护,install可能会出错,修改方式参:高并发大型电商详情页系统的大型高性能与高可用缓存架构实战视频教程\01 1-100集 中73行附近)

检索文件内容:(Global Regular Expression Print)
				grep "haha" target*		在所有target开头的文件中查找haha所在的行并显示(只显示所在行的内容)
				grep "haha"				如果不指定文件名称,grep会等待标准输入,即控制台输入;如果随便输不会有反应,如果输入的含有haha字符串就会回应打印出这次输入
				grep 'partial\[true\]' bsc-plat.info.log		在文件中查找含有partial[true]字段的内容([]是特殊字符,需要加\)
				grep -o ‘engine\[[0-9a-z]*\]’				查找符合正则engine[0-9a-z]*的内容(o用于正则)
				grep -v 'grep'								过滤包含相关字符串的内容(v用于过滤)

管道组合命令:find ~|grep "target"		从用户的home目录下的所有文件中查找target字符串(即前一个命令的结果会作为后一个命令的参数。这里前一句是列出用户home目录下所有文件,后一个命令是在这些文件中查找字符串)
				只处理前一个命令的正确输出,不处理错误输出
				右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃
				常用的可以接收标准输入流的命令:sed awk grep cut head top less more wc join sort split ...

查找进程:ps -ef | grep tomcat			查找所有和tomcat有关的进程(这句命令也会将grep本条指令显示出来,如果想过滤掉,可以用:ps -ef | grep tomcat | grep -v "grep")

对文件内容做统计:awk [options] 'cmd' file		一次读取一行文本,按输入分隔符进行切片,切成多个组成部分;将切片直接保存在内建的变量中,$1,$2...($0表示行的全部);支持对单个切片的判断,支持循环判断,默认分隔符为空格
				cat netstat.txt			假文件内容如下(内容类似于表格很规范,则适宜用该命令处理数据):
					Proto	Recv-Q	Send-Q	Local Address	Foreign Address	State
					tcp	0	48	192.168.0.1	192.168.0.2	ESTABLISHED
					tcp	0	48	192.168.0.1	192.168.0.2	ESTABLISHED
					tcp	1	48	192.168.0.1	192.168.0.2	ESTABLISHED
					tcp	1	48	192.168.0.1	192.168.0.2	ESTABLISHED
					tcp	0	48	192.168.0.1	192.168.0.2	ESTABLISHED
					tcp	0	48	192.168.0.1	192.168.0.2	ESTABLISHED
				awk '{print $1,$4}' netstat.txt			打印第1,4列的内容
				awk '$1=="tcp" && $2==1{print $0}' netstat.txt		打印第1列为tcp,第2列值为1的行(这样不会打印出表头)
				awk '($1=="tcp" && $2==1) || NR==1 {print $0}' netstat.txt		同上,这样会打印出表头。NR为自带的内置变量,表示行数,即打印满足上述的条件,或者行数为1的行
				awk -F "," '{print $2}' test.txt			用F参数指定以,为分隔符,将test.txt文件中每行的第二列打印出来(默认的分隔符是空格)
				grep 'partial\[true\]' bsc-plat.info.log | grep -o 'engine\[[0-9a-z]*\]' | awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}'
								grep 'partial\[true\]' bsc-plat.info.log		查找bsc-plat.info.log文件中含有partial[true]字段的内容,将结果传入下一个命令
								grep -o 'engine\[[0-9a-z]*\]'				查找符合正则engine[0-9a-z]*的内容,将结果传入下一个命令		
								awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}'		定义一个数组enginearr来保存上述结果的第一列,遍历每一列,出现重复的值时则数字++,END表示遍历结束以后该做的事:对enginearr循环打印每一个内容(i),以及该内容出现的次数(enginearr[i])

批量修改文件内容:sed [option] 'sed command' filename		全名stream editor,流编辑器,适用于对文本行内容进行处理
				sed 's/^Str/String/' replace.java			[要对字符串的操作]/[被替换的字符串]/[替换的字符串]/			把文件中以Str开头(^表示以...开头)的字符串替换为String(默认情况下该命令只会将结果输出到终端,并不会改变文件)
				sed -i 's/^Str/String/' replace.java			-i才会将修改后的内容存入文件
				sed -i 's/\.$/\;/' replace.java				将以.结尾的.都替换成;($表示以...结尾,.和;是特殊字符都要加\)
				sed -i 's/Jack/me/' replace.java			将每行第一个Jack替换成me
				sed -i 's/Jack/me/g' replace.java			全文替换所有的Jack为me(在最后一个/处加一个g)
				sed -i '/^ *$/d' replace.java					删除文件中所有空行(d用来表示删除)
				sed -i '/Integer/d' replace.java				删除含有Integer内容的行
DOWN 返回