shell常用

1.Linux的体系结构

image-20211216174610105

2.Shell:命令解释器,可编程

没有图形文件之前,shell充当用户界面

常用指令(重要)

ls

cat 查看文件

less 查看文件

more 查看文件

tail 查看文件

vi 编辑文件

vim 编辑文件,更为流行

ps -ef

tail

查看占用的端口并删除(重要)

1.使用cmd查看占用端口进程,命令:netstat -ano | findstr 端口号

image-20211221154421121

2.使用命令关闭:taskkill -PID 进程号 -F

image-20211221154359034

3.查找特定文件?

find指令

在指定目录下查找文件
find -name "file.java"

全局搜索文件
find / -name "file.java"

查找所有以fil开头的文件  模糊查找文件
find ~ -name "fil*"				
	~ :就是进入home目录
	*:就是通配符的意思

同时忽略大小写,不区分大小写
find ~ -iname "fil*"		
	-:在-name中加上i,即iname

4.检索文件内容?

grep指令

grep:查找文件里符合条件的字符串

查找文件内容包含”AAA“以   BBB开头的文件
grep “AAA” 	BBB*

只会帅选出目标字符串所在的行

实战:

image-20211216180344160

管道操作符|

可将指令连接起来,前一个指令的输出作为后一个指令的输入

image-20211216180719932

find ~ | grep "target"
也就是先查找所有文件,然后在结果集中查找包含target的字段

注意:

1、只处理前一个命令正确输出,不处理错误输出

2、右边命令必须能够接受标准输入流,否则传递过程中数据会被摒弃

3、sed,awk,grep,cut,head,top,less,more,wc.join,sort,split等

find -dwdwwdw | grep “abc”  前一个命令错误,后面的grep就无效了!

查找日志文件中指定字符串

在bsc-data.info.log日志中查找包含 "partire[true]"字符串的日志记录
grep "partire\[true\]" bsc-data.info.log 

可以找到多个,但是每个日志打印的东西太多了,比如只想知道这次日志的用户openid是多少,一直用户的openid格式
是useropenid[dwu8u982289e28]   []里面是字符加数字,则可以用如下的方法来查找
-o 帅选出符合正则表达式的内容
grep "partire\[true\]" bsc-data.info.log | grep -o 'useropenid\[[0-9a-z]*\]'

查询某一个进程

比如查找tomcat进程

ps -ef | grep tomcat   这回把自己查询的进程也列出来
ps -ef | grep tomcat | grep -v "grep"  过滤包含grep字符串   这样就只找出tomcat的进程啦!
-v就是过滤相关字符串的内容

5.对文件内容做统计

awk

一次读取一行文本,按输入分隔符进行切片,切成多个组成部分!

将切片直接保存在内奸的变量中,$1$2...($0表示行的全部)

支持对单个切片的判断,支持循环判断,默认分隔符为空格

帅选出第一列和第四列的数据:

帅选出某些类的数据

image-20211216183007932

条件帅选出某些列的数据

帅选出第一列是tcp,第二列等于1的数据

image-20211216183147974

显示出表头

想要同时显示出表头 加上 NR==1

image-20211216183303833

自定义分隔符

awk默认使用【空格】将数据分开来识别的,但我们也可以使用别的

将逗号作为分隔符!

-F 表示以什么符号作为分隔符去分割行内容

image-20211216183610950

统计日志中对不同数据进行分组

image-20211216183847490

分析语句:

awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}'

end 之前表示一旦出现相同的值就++

end后表示扫描结束后做什么 遍历enginearr数组,遍历打印其值

6.批量替换文档内容

sed

流编辑器

适合用于对文本的行内容进行处理

将str改成string

image-20211216184832446

其中 ’s/Str/String/‘中的s表示字符串操作,表示以Str开头,String表示替换成的字符串

sed操作是将修改后的内容输出到终端,不会修改文件本身的内容,若果要修改,必须加上【-i】

将【.】结尾改成【;】

image-20211216185154318

其中【\】是转义的意思,因为【.】和【;】都是特殊字符串,需要转义,$表示以什么什么结尾

全文替换

g表示全部替换,没有 g就是只替换一次

image-20211216185447516

删除空行

image-20211216185849307

^表示开头,就是以空格开头,*是通配符,$就是结尾的意思,d表示删除

删除Integer字符串在的行

image-20211216190012707

原文地址:https://www.cnblogs.com/yslu/p/15699879.html