宁武皇仁光九年锦文轩刻本《异闻录》载: 扶桑画师浅溪,居泰安,喜绘鲤。院前一方荷塘,锦鲤游曳,溪常与嬉戏。 其时正武德之乱,潘镇割据,战事频仍,魑魅魍魉,肆逆于道。兵戈逼泰安,街邻皆逃亡,独溪不舍锦鲤,未去。 是夜,院室倏火。有人入火护溪,言其本鲤中妖,欲取溪命,却生情愫,遂不忍为之。翌日天明,火势渐歇,人已不见。 溪始觉如梦,奔塘边,但见池水干涸,莲叶皆枯,塘中鲤亦不知所踪。 自始至终,未辨眉目,只记襟上层迭莲华,其色魅惑,似血着泪。 后有青岩居士闻之,叹曰:魑祟动情,必作灰飞。犹蛾之投火耳,非愚,乃命数也。 ————《锦鲤抄》

【linux】项目上用到的指令记录:端口占用,编辑文件,日志信息捕获,split拆分日志,查找文件,文件授权等

Linux

命令行指令
## 1、端口占用
# 查看被占用端口的进程信息,自带列名: COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
lsof -i:3306	
# 效果同上:对应最后一列 数字+字母 含义是进程号/程序名, pid/program name
netstat -antpl | grep 3306
# 查看pid 233 对应的应用是哪个,选择性kill掉此进程,kill -9 表示强制执行终止
ps -ef | grep 233
kill -9 233
# 关于ps -ef |grep 指令,可以在grep后输入pid 或者应用名查看对应的运行信息,比如查看jar包运行状态,redis启动状态等
ps -ef | grep hi-xxxxx.jar


## 2、编辑与备份文件
# 查看xml文件内容,可绝对路径也可相对路径,原理同cd
cat /cmcc/xxx/server.xml
# 进入vim编辑器
vim /cmcc/xxx/server.xml 
# 按i或者a 进入文本编辑状态
# 编辑完成后按esc退出编辑状态
# 输入:wq ,即write and quit 写入保存并退出vim编辑器命令行模式


## 3、前后端发版流程
# maven打包,上传到指定目录下,运行:(参数自行替换)
# 后端:
ps -ef|grep xxx.jar    查询进程端口
Kill -9 端口号pid	   停掉对应进程
# 启动参数为agentlib 时通常用于远程debug服务器程序,在idea的debug Configurations中新建一个配置,选择remote java application或者相似的remote程序,输入服务器ip:host,端口默认5005
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xms512m -Xmx1536m -Dspring.profiles.active=default -Dspring.datasource.password=123456_xxx -Dspring.redis.password=redis@2021_123456 xxx-service.jar > app.log  2>&1 &
# 正常启动方式如下,规定初始化堆内存大小,日志输出路径。
nohup java -Xms512M -Xmx1024M -jar /data/app/hzero/jar/xxxx-yyyyyy.jar > /data/app/hzero/jar/logs/xxxx-yyyyyy.log 2>&1 &
# 前端:
#前端拉取依赖,编译 后生成的dist文件压缩上传,放在指定路径下解压即可。
# war包对应的是后端位置是在tomcat的web下面,重新启动tomcat就会运行,无需手动启动war包
# jar包则放入nginx/html/下,解压对应压缩包,然后重启nginx(不修改前端配置文件理论上不需要重启nginx)
# 停止
# ./nginx -s stop
# 启动
# ./nginx 

# 特殊情况:批量停止jar服务
ps -ef | grep jar | grep -v grep | awk '{print "kill -9 "$2}'|sh


## 4、关于日志文件与压缩文件
# 查看log文件中的指定字段error所在上下五行并导出为error_message.txt 在当前路径下
cat logs/xxxx-yyyyyy.log |grep 'error' -C 5 > error_message.txt
ps:可以打回车刷新linux日志区域,-C 为内容的上下行范围,grep用于查找过滤文本内容, 'cat' 命令结合重定向符 (>)可用于创建一个新文件。
# 当日志文件太大,打不开,需要拆分
# 这个是按200行拆分一个文件
split -L 200 test.txt -d 	
# 这个是按照大小拆分,后缀为长度为3 的数字,每个80M,前缀为split_file,如split_file001
# -b是按byte大小,-a是定义后缀长度,-d表示文件用数据x01或自定义前缀名
split -b 80M date.file -d -a 3 split_file	 

# tar指令解压缩
tar -zxvf  xxxx.tar.gz   -C  /xxx.xs  解压缩tar.gz类型文件到指定目录
# unzip指令解压缩
unzip xxxx.zip
# 解压到指定文件夹test下
unzip -d /test  xx.zip	
# 添加SQL文件夹为SQL.zip压缩包
[root@iZbp1hwh629hd4xz80i1z0Z zoe]# zip -q -r SQL.zip /zoe/SQL


## 5、查找文件夹或特定文件
#查找mysql执行命令所在位置,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令
which mysql  
#查找文件夹或文件,路径 : sit
find / -iname "sit"   
#匹配/zoe 路径下的文件所在路径包括back的,模糊匹配			
find /zoe/ -path "*back*"	
#效果如下
[root@iZbp1hwh629hd4xz80i1z0Z zoe]# find /zoe/ -path "*back*"
/zoe/backup??
/zoe/backup
/zoe/backup/20220708
/zoe/backup/20220708/folder
/zoe/backup/20220708/text.txt
/zoe/backup/20220707
/zoe/backup/20220707/folder
/zoe/backup/20220707/source
/zoe/backup/20220707/source/folder
/zoe/backup/20220707/source/text.txt
/zoe/backup/20220707/text.txt
/zoe/backup/20220709
/zoe/backup/20220709/folder
/zoe/backup/20220709/text.txt
[root@iZbp1hwh629hd4xz80i1z0Z zoe]# 


## 6、关于shell(.sh)脚本命令
# 创建脚本(备份文件夹的demo)
##########
#!/bin/bash
 
#将备份时间写入log日志中
echo "----------------------------" >> log
echo "backup time:$(date +%Y%m%d)"  >> log  
echo "----------------------------" >> log
 
#1.备份文件夹
#需要被备份的路径
# AFILE=/mnt/hgfs/share/A
AFILE=/zoe/source
#需要备份的路径
# BFILE=/mnt/hgfs/share/B
BFILE=/zoe/backup
#现在时间
NOW_TIME=$(date +%Y%m%d)
#判断目录是否存在,不存在就创建
[ -d $BFILE ] || mkdir $BFILE
#将A目录拷贝到B目录下并以时间命名
cp -r $AFILE $BFILE/$NOW_TIME && echo " 备份完成! " || echo "备份失败,请检查错误!"
sleep 6s
echo "---------------------------------"
#2.删除文件夹
#转到备份目录下
cd /zoe/backup
#查找当前目录下文件夹个数
FILE_DATA=$(ls -l |grep "^d" |wc -l)
#判断备份目录下的文件夹个数是否超过7个,没超出就继续,超出就退出
[ $FILE_DATA -gt 7 ] && echo "备份目录下文件夹个数大于7!!!请检查代码。" && exit 
#当前日期的三周前
OLDW3_TIME=$(date -d -3week +%Y%m%d)
#当前日期的三周前天数
OLDW3_DAY=$(date -d -3week +%d)
 
#判断当前目录下文件夹个数是否达到7个,是的话说明已经有三个月前的文件夹,需要删除
[ $FILE_DATA -eq 7 ] && ls -rt|head -1|xargs rm -rf && echo "删除了三月前的文件夹!!!"
 
	
#判断是否有三周前的文件夹,再判断是不是月初的周
if [ -d "$OLDW3_TIME" ]; then
	if [ $OLDW3_DAY -gt 7 ]; then  #如果三周前的天数是大于7的,说明不是月初的第一个周,那么直接删除
		rm -rf $OLDW3_TIME
		echo "删除三周前的文件夹!!!"
	else  #如果小于等于7,则选择不删除
		echo "该文件夹为月初文件夹,不能删除!!!"
	fi
fi
##########
# 授权
chmod +755 backup.sh
# 手动执行sh脚本
sh backup.sh
# 设置定时 每天22点执行
crontab -e
 0 22 * * * /yyyy/xxx/backup.sh
# 如果执行sh脚本遇到 $‘\r‘: command not found,需要设置为unix的换行类型,而非windows的换行格式
vim xxx.sh
:set ff=unix
:wq


##7、关于VScoede
yarn install	#前端安装
yarn run build	#全模块编译
yarn run build xxx	#单模块编译
yarn run start	#本地运行前端
yarn run start xxx    #单独运行子模块,快速省时,适合单模块集成测试
ctrl+?                 #VScode多条注释

##8、关于 grep进程本身的问题
# 我现在查询一个服务的运行情况:
[root@192-168-17-129 jar]# ps -ef |grep  hi-report.jar 
root      59952      1  1 Apr15 ?        21:58:14 java -Xms512M -Xmx1024M -jar /data/app/hzero/jar/hi-report.jar
root     126563 123810  0 12:41 pts/8    00:00:00 grep --color=auto hi-report.jar

ps 和grep查询jar包的时候常常会发现有两个,这是因为grep会把自己的进程也查询出来,看这个进程启动时间也可以发现:12:41,短的这个时间就是当前时间。

这种后缀一般是:**grep --color=auto XXX**

有时候如果jar包名字输入错误,导致查询结果可能会只显示grep进程本身,所以如把这个当成服务去kill, kill -9 PID 时会提示进程号不存在。


## 9、关于CD等基础指令
cd /       #回到根目录
cd ../     #回到上一级目录
cd ./xxx   #相对路径访问

ls               #查看当前目录下的所有目录和文件
ls -a            #查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll      #列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)

##10、关于备份指令cp和删除指令rm (慎用),建议先备份文件
# 备份文件夹及其子文件
cp -r apple banana  #这样apple下的所有文件都会拷贝到banana这个文件夹下,如果该文件夹不存在会自动创建
# 拷贝某具体文件并重新命名,原理和上述相同
cp a.txt b_backup.txt
# 但是不能前面是文件,后面是路径,不管后面的CC文件夹是否存在,都会提示no such file or directory,必须要给被拷贝文件加上路径,即/zoe/BB/a.txt
[root@iZbp1hwh629hd4xz80i1z0Z zoe]# cp  ap-非计提.txt /zoe/CC
cp: cannot stat ‘ap-非计提.txt’: No such file or directory
[root@iZbp1hwh629hd4xz80i1z0Z zoe]# cp /zoe/BB/ap-非计提.txt /zoe/CC
[root@iZbp1hwh629hd4xz80i1z0Z zoe]# 
[root@iZbp1hwh629hd4xz80i1z0Z CC]# ls
ap-非计提.txt
# 正常删除文件
rm  -rf  xxx		#要删除的文件名或目录xxx
#模糊删除文件以及超量删除文件
先进入指定目录下,rm -rf xxx*,删掉xxx开头的日志文件,然后发现太多了提示 list too long,这时用find . -name "xxx*" | xargs rm -rf 'xxx'
注意  . 表示查找当前目录下文件,这样就可以批量删除垃圾文件了,千万别误删了。


##11、查看内存占用
#查看内存占用情况/内存溢出
#查询进程里面详细信息
jmap -heap 41843(你的jar服务对应进程号)

-Xmx3550m 堆最大容量(heap max size)

-Xms3550m 堆最小容量(heap min size)

-Xmn2g 年轻代大小(整个JVM内存大小=年轻代大小+年老代大小+持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小此值对系统性能影响较大,sun官方推荐配置为整个堆的3/8。)

-Xss256k 每个线程栈容量大小(stack size):

[root@192-168-17-129 jar]# jmap -heap 56923
Attaching to process ID 56923, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.281-b09

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 1073741824 (1024.0MB)
   NewSize                  = 178782208 (170.5MB)
   MaxNewSize               = 357564416 (341.0MB)
   OldSize                  = 358088704 (341.5MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 124256256 (118.5MB)
   used     = 124256256 (118.5MB)
   free     = 0 (0.0MB)
   100.0% used
From Space:
   capacity = 116391936 (111.0MB)
   used     = 0 (0.0MB)
   free     = 116391936 (111.0MB)
   0.0% used
To Space:
   capacity = 111673344 (106.5MB)
   used     = 0 (0.0MB)
   free     = 111673344 (106.5MB)
   0.0% used
PS Old Generation
   capacity = 716177408 (683.0MB)
   used     = 715918144 (682.7527465820312MB)
   free     = 259264 (0.24725341796875MB)
   99.9637989139138% used

56982 interned Strings occupying 6679040 bytes.
[root@192-168-17-129 jar]# 

#查看linux服务器内存情况
free -h


## 12、无权限时chmod和chown授权
# chmod是针对文件或文件夹进行属性授权,chown则是修改文件或路径所属用户,用户组的权限

#777即drwxrwxrwx  表示所有者,用户组合其他用户三者权限全开
sudo chmod -R 777 文件名
#适用情景:比如,当前解析失败permisson denied 无权访问等等,然后ll查看发现对应文件所属用户权限不对,进行授权:最后面是要授权的路径,当然也可以具体到某个文件或文件夹,这里就是直接对xxx/yyy下的文件和文件夹都修改了用户权限
chown  -R 用户名: 组名  
# 例子:cmcc账号 获得了/zoe/BB下的文件操作权限
chown -R cmcc: /zoe/BB
# ll:查看当前路径下文件权限信息
[root@iZbp1hwh629hd4xz80i1z0Z CC]# ll
total 4
-rwxr-xr-x 1 root root 1389 Jul 10 17:17 ap-非计提.txt
# 对应含义如下
# -rwxr-xr-x 1 root root 1389 Jul 10 17:17 ap-非计提.txt
# 所有者【可读,可写,可执行】,组权限【可读,可执行】,其他用户/组【可读,可执行】,该文件或目录的拥有者为root,所属组为root,1389byte为文件大小,然后是最后修改时间,最后一栏,第七栏为文件名
# 至于 -rwxr-xr-x 这个权限表示方法:通常用数字表示,比如这个是755
从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。
而具体的权限是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;
通过4、2、1的组合,得到以下几种权限:0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)


##12、其他指令

mkdir -p src/main/java        #在当前位置创建多级目录,这里-p用来区分多层次
pwd    #查看当前文件夹 绝对路径
sed -i 's/3306/3307/g' /etc/my3307.cnf		【不用进入vim,替换my3308.cnf里文本内容 :把3306换成3307 】
#抓包:例如 mysql
在服务上输入抓包命令:tcpdump port 3306
#source
当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用source命令,如:source /etc/profile

#登录sftp:
sftp sftpuser@ip地址
#telnet:
telent + ip + port端口




posted @ 2022-07-11 14:51  哒布溜  阅读(174)  评论(0编辑  收藏  举报