linux命令

linux grep命令使用
非开头,非结尾
grep '^[^|]' filename
grep -v '|$' filename
-w 精确匹配
-Fx 完全匹配
grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
grep -B 5 foo file 显示foo及前5行
grep -A 5 foo file 显示foo及后5行
grep -rn 'nihao' *   筛选nihao

grep [选项] [模式] [文件...]
常用参数
-i:忽略大小写
-v:反向匹配,输出不匹配的行
-n:显示匹配行的行号
-c:统计匹配行的数量
-l:只显示包含匹配项的文件名
-r或-R:递归搜索目录下的所有文件
-E:使用扩展正则表达式
-F:将模式视为固定字符串,而不是正则表达式
-w:匹配整个单词
-x:匹配整行
-A n:显示匹配行及其后n行
-B n:显示匹配行及其前n行
-C n:显示匹配行及其前后各n行
-h:输出时不显示文件名
-H:输出时总是显示文件名
-o:只输出匹配的部分
-q:静默模式,不输出任何结果
-s:不显示错误信息
-e:指定多个模式

linux vi命令使用
:1,$ s/str1/str2/g  用字符串str2替换正文中所有出现的字符串str1
使用 g 放在命令末尾,表示对搜索字符串的每次出现进行替换;
不加 g,表示只对搜索字符串的首次出现进行替换;
g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
:set nu(显示行数)
到下一个单词的开头	w
到当前单词的结尾	e
到前一个单词的开头	b
到行首	^或0
到前一个单词的结尾	ge
到行尾	$
向下查找<字符串>	\<字符串>	输入n继续查找下一个
向上查找<字符串>	? <字符串>	输入N继续查找下一个
撤销一次或n次操作	u{n}
剪切	dd
交换上下行	ddp
复制游标所在的整行	yy(3yy表示复制3行)
复制到行首,不含光标所在位置	y^或y0
复制到行尾,含光标所在字符	y$
复制一个单词	yw
复制两个单词	y2w
复制至文本末	yG
复制至文本开头	y1G
粘贴至光标后(下)	p(小写)
粘贴至光标亲(上)	P(大写)
删除当前字符	x或Delete
删除前一个字符	X
删除整行	dd
删除一个单词	dw或daw
删除至行尾	d$或D
删除至行首	d^
删除到文档末尾	dG
删除至文档首部	d1G
删除n行	ndd
删除n个连续字符	nx
删除n个单词	dnw

linux tar/uniq/sed命令使用合集
tar命令:
-c新建打包文件,同 -v一起使用 查看过程中打包文件名
-v压缩或解压过程中,显示过程
-f要操作的文件名
-r表示增加文件,把要增加的文件追加在压缩文件的末尾
-t表示查看文件,查看文件中的文件内容
-x解压文件
-z通过gzip方式压缩或解压,最后以.tar.gz 为后缀
-j通过bzip2方式压缩或解压,最后以.tar.br2 为后缀。压缩后大小小于.tar.gz
-u更新压缩文件中的内容
-p保留绝对路径,即允许备份数据中含有根目录
-P保留数据原来权限及属性

uniq命令:uniq [-icu。。。]
-c,在每行前加上表示相应行目出现次数的前缀编号
-d,只输出重复的行
-D,显示所有重复的行
-f,比较时跳过前N 列
-i,在比较的时候不区分大小写
-s,比较时跳过前N 个字符
-u,只显示唯一的行
-z,使用'\0'作为行结束符,而不是新换行
-w,对每行第N 个字符以后的内容不作对照

sed命令使用:
1. sed 's/$/ aischang/g'   abc.txt  >> test.txt
将文件abc.txt追加 aischang到每行末尾,写入到文件test.txt, $为末尾符号,$代表替换末尾为 aischang
2. sed 's/^/ aischang/g'   abc.txt  >> test.txt
将文件abc.txt追加 aischang到每行首,写入到文件test.txt, ^为行首符号,^代表替换为 aischang
3. sed -i '/^word/d' filename
删除以某个单词开头的行
4. sed -i 's/A/B/g' /etc/*
/etc/下所有文件,A替换为B


find

vi

du

df


top

Linux组合命令
1、杀进程
ps -ef | grep tipu | grep -v grep| xargs kill -9 
ps -aux | grep 'glusterfsd\|glustershd' | awk '{print $2}' | xargs kill
2、产生2G文件
dd if=/dev/zero of=/tmp/test bs=1M count=2048
3、awk拼接后sh执行
ls -all |awk '{print "klist -ke " $9}' |sh
4、$号拼接执行
sudo docker rm -v $(sudo docker ps -q -f status=exited)
5、筛选排序去重
cat ./hadoop-datanode.log | grep '^2024-01-12'|egrep -o "Slow.*?(took|cost)" | sort | uniq -c
6、统计匹配数量后判断
grep 'cmd=' hdfs-audit.log|awk '{print $1$2}'|awk -F ',' '{print $1}'| awk '{sum[$1]++}END{for(time in sum) print time, sum[time]}'|awk '{if($2>40000) print $1,$2}' |sort  >> aduit.log
7、多阶段grep租户筛选
ls -lrt -R * | grep -w Jan | grep ' 6 ' | grep -v 2024
8、保留原文件属性的前提下复制文件 
cp -a 
9、删除目录下所有exe文件
find . -name '*.exe' -type f -print -exec rm -rf {} ;
"." 表示从当前目录开始递归查找
-name '*.exe' 根据名称来查找,要查找所有以.exe结尾的文件夹或者文件
-type f 查找的类型为文件
-print 输出查找的文件目录名
最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号。
10、for循环批量执行命令
for i in `cat hosts`;do echo $i ;ssh $i "kill -9 $(ps -ef|grep -E 'itgent'|grep -v grep|awk '{print $2}');exit;";done

du -sh -G * | sort -n
find ./ -type f -name "*log" -mtime +1| wc -l
find ./ -type f -name "*log" -mtime +1| xargs rm -rf


排除jar包内类冲突问题
1、查看jar包里的类是否存在:
grep -rn com.hadoop.xxxxx  lzoxxx.jar
2、找到Integer.class所在的jar包
find . -name "*.jar"| awk '{print "jar -tf "$1}'| sh -x | grep -i "/Integer.class"
3、查看jar包里的类是否存在:
find . -name "hive-contrib-3.1.0.3.1.0.0-78.jar"| awk '{print "jar -tf "$1}'| sh -x | grep -i "/MultiDelimitSerDe.class"


nohup和&启动程序详解
1、&后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号,程序免疫
关闭session发送SIGHUP信号,程序关闭

2、nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号,程序关闭
关闭session发送SIGHUP信号,程序免疫

3、nohup和&配合来启动程序:
同时免疫SIGINT和SIGHUP信号
nohup command &
nohup ./script.sh >>logfile 2>&1 &

注:2>&1 表示不仅命令行正常的输出保存到app.log中,产生错误信息的输出也保存到app.log文件中


sort命令:
一、交集
sort a.txt b.txt | uniq -d
二、并集
sort a.txt b.txt | uniq
三、差集
a.txt-b.txt:
sort a.txt b.txt b.txt | uniq -u
b.txt - a.txt:
sort b.txt a.txt a.txt | uniq -u


cut命令:

split命令:
split -l 1171873 log.txt newlog

wc命令:

last命令:
作用是显示近期用户或终端的登录情况。通过last命令查看该程序的log,管理员可以获知谁曾经或者企图连接系统。
登陆用户统计
last| awk '{S[$3]++}{for(a in S) print S[a],a}' |sort|uniq|sort -h



Linux主机系统性能分析

系统性能分析工具:
vmstat、sar、iostat检测是否是CPU瓶颈
free、vmstat检测是否是内存瓶颈
iostat检测是否是磁盘I/O瓶颈
netstat检测是否是网络带宽瓶颈

查看主机磁盘:
lsblk/fdisk -l 命令列出磁盘信息
df 命令查看分区、大小和可用空间
fdisk 命令用于管理磁盘分区,提供添加、删除、转换分区功能
mkfs 命令用于在Linux系统中格式化磁盘
查看磁盘做raid情况:
大数据文件系统一般裸盘使用即可。
mdadm -D /dev/sd[a-z]
没有定义RAID: /dev/sdb does not appear to be an md device

查看网卡信息:
1.查看网卡:ifconfig  
eth0,eth1,eth2......代表网卡1、网卡2、网卡3、……
lo代表127.0.0.1,即localhost
bond0表示双网卡绑定
2.指定网卡查看带宽:iftop -i eth0  
3.指定网卡并显示IP端口:iftop -i eth0 -P -nN  
4.网卡信息:ethtool bond0

查看进程端口:
netstat -tln 命令是用来查看linux的端口使用情况,
netstat -tunap| grep 2181 某端口使用情况
netstat -a 查看所有的服务端口
netstat -an | grep 端口号  来检验下是不是已经打开了某某端口
ps –ef | grep ***
ps –aux |grep ***
lsof –i:8080
jps -lvm

查看CPU信息:
top –d 1
查看CPU信息:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
 8  Intel(R) Xeon(R) CPU  E5410   @ 2.33GHz  (看到有8个逻辑CPU, 也知道了CPU型号)
cat /proc/cpuinfo | grep physical | uniq -c
      4 physical id      : 0
      4 physical id      : 1 (说明实际上是两颗4核的CPU)
# getconf LONG_BIT
   32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
   8
(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

Linux系统基础命令:
uname -a   (Linux查看版本当前操作系统内核信息)
cat /proc/version (Linux查看当前操作系统版本信息)
cat /etc/issue或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)
cat /proc/cpuinfo (Linux查看cpu相关信息,包括型号、主频、内核信息等)
cat /proc/meminfo (查看内存信息)
dmidecode | grep "Product Name" (查看机器型号)
dmesg | grep -i eth (查看网卡信息)
free –m 或 free –g (查看磁盘使用)
CPU总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数 
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看逻辑CPU的个数 
cat /proc/cpuinfo| grep "processor"| wc -l
【逻辑CPU数量和型号】
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 
【物理CPU内核的个数】(1个物理CPU里面有几个物理内核)
cat /proc/cpuinfo | grep "cpu cores" | uniq  
【物理CPU中逻辑CPU的个数】(如果不使用超线程技术,则此值和物理CPU内核数量一致;不一致则为整倍数)
cat /proc/cpuinfo | grep 'siblings' | uniq
【超线程】(分别输出cpu cores和siblings数量,使用超线程则后者翻倍)
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq 



Linux进程掉线分析
1、trace进程无法捕捉到进程被kill掉,推测进程夯住自己退出。
nohup strace -T -tt -e trace=all -p 22658 > /datanode-trace.log &
2、通过aduit追踪,在日志/var/log/audit中grep进程id,发现进程掉之前很多XXX进程执行kill。
auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k test1
3、路由跟踪
traceroute -q 6 **
格式:route -n
格式:/sbin/route -n
用于打印路由表,加上-n参数就是在输出的信息中不打印主机名而直接打印ip地址。

Linux查找特定时间内文件
ls -l --time-style=long-iso .|grep -v $(date -d "1 minute ago" +"%H:%M")  #显示一分钟以前的文件
find . -mmin +1  #显示一分钟以前的文件
find . -mmin +1|awk -F "/" '{print $2}'|xargs -I {}  mv {} /tmp

find ./ -name “*data*” -mtime +1 当前目录下文件名包含data,而且修改时间在48小时以上的
find ./ -name “*date*” -mtime +2 当前目录下文件名包含data,而且修改时间在72小时以上的
find ./name “*data*” -mtime -1 当前目录下文件名包含data,而且修改时间在24小时以内的
find ./name “*data*” -mtime -2 当前目录下文件名包含data,而且修改时间在48小时以内的
find ./name “*data*” -mtine 1 当前目录下文件名包含data,而且修改时间在1天前当天的,也就是24小时以上,48小时以内

find ./ -mtime +7 |xargs ls
find ./ -mtime +7 |xargs rm -rf
find 对应目录 -mtime +7 -exec ls {} \;
find 对应目录 -mtime +7 -name “文件名” -exec ls {} \;
find 对应目录 -mtime +7 -name “文件名” -exec rm -rf {} \;


Linux进程分析详解
1、进程号查看:
ps -ef | grep hiveserver2

2、进程资源使用:
top -p 26916

3、进程数:
pstree -p 23327 |wc -l

4、根据进程查看进程相关信息占用的内存情况:
pmap  -x 26916 >> pmap.log	
cat pmap.log | grep anon |awk '{sum+=$4}END{print sum}'
ps -ef | grep hiveserver2| grep -v grep |awk -F ' ' '{print $2}' |xargs pmap -x |grep anon |awk '{sum+=$4}END{print sum}'

5、用jmap把进程内存使用情况dump到文件中:
jmap -dump:live,format=b,file=/tmp/dump.dat 21711  -------->进程id

6、用jhat分析查看:
jhat -port 10099 /tmp/dump.dat
运行在10099端口,然后浏览器访问

7、进程信息查看:
jstack -l PID >> 123.txt
分析locked回溯到哪个runableed的进程,加锁导致所有进程卡住。
在hs2日志里搜索 thread ID

8、本地文件查看:
cat  /proc/pid/status
/proc/$PID/task 目录下的目录数判断线程数量
du -s -h /proc/26916/task/*/* | grep mem

9、监控进程:
nohup strace -T -tt -e trace=all -p 22658 > /trace.log

10、查看占用cpu最高的进程:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 

11、使用auditctl命令可以对内核中的审计系统进行控制:
auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k test1
在日志/var/log/audit中grep进程id。

12、任务hs2堆内存GC配置查看:
jmap -heap  hs2进程号 
查看整个JVM内存状态 
jmap -heap [pid]  要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起
查看JVM堆中对象详细占用情况
jmap -histo [pid]
导出整个JVM 中内存信息
jmap -dump:format=b,file=文件名 [pid]

13、GC情况查看:
jstat -gcutil pid
jcmd 【pid】 VM.flags

14、定时打印一下GC 情况输出到文件里
jstat -gc <pid>   1800s

15、jvm参数查看
jinfo -flags <pid>


nmon使用:
-f  按标准格式输出文件: <hostname>_YYYYMMDD_HHMM.nmon
-N  include NFS sections
-m  切换到路径去保存日志文件
-s  每隔n秒抽样一次,这里为30
-c  取出多少抽样数量,这里为1200,即监控=1200*(30/60/60)=10小时。
./nmon -s1 -c600 -f -N -m /home/ocdp/nmon
./nmon -s1 -c60 -f -N -m .
nohup ./nmon -s 1 -c 7200 -f &
通过以下命令,将.nmon文件转化成.csv文件,在当前目录生成对应的.csv文件
sort localhost_170616_0138.nmon>localhost_170616_0138.csv


Crontab命令:
crontab -l  列出当前用户定时任务
crontab -r  删除当前用户定时任务
crontab -e  编辑当前用户定时任务
查看crontab是否开机启动:chkconfig --list crond
设置crontab开机自动启动: chkconfig --level 35 crond on
crontab 命令,最小的执行时间是一分钟。
*           *        *        *        *           command
分          时         天      月        星期       命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值