Linux
命令行指令
#
# 查看被占用端口的进程信息,自带列名: 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
#
# 查看xml文件内容,可绝对路径也可相对路径,原理同cd
cat /cmcc/xxx/server.xml
# 进入vim编辑器
vim /cmcc/xxx/server.xml
# 按i或者a 进入文本编辑状态
# 编辑完成后按esc退出编辑状态
# 输入:wq ,即write and quit 写入保存并退出vim编辑器命令行模式
#
# 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
#
# 查看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
#
#查找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]#
#
# 创建脚本(备份文件夹的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
#
yarn install #前端安装
yarn run build #全模块编译
yarn run build xxx #单模块编译
yarn run start #本地运行前端
yarn run start xxx #单独运行子模块,快速省时,适合单模块集成测试
ctrl+? #VScode多条注释
#
# 我现在查询一个服务的运行情况:
[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 时会提示进程号不存在。
#
cd / #回到根目录
cd ../ #回到上一级目录
cd ./xxx #相对路径访问
ls #查看当前目录下的所有目录和文件
ls -a #查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll #列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
#
# 备份文件夹及其子文件
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'
注意 . 表示查找当前目录下文件,这样就可以批量删除垃圾文件了,千万别误删了。
#
#查看内存占用情况/内存溢出
#查询进程里面详细信息
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
#
# 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 | 读取+写入+执行)
#
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端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统