Linux运维部署常用命令

一、进程管理

1.查看进程信息

复制代码
jps -l    --jdk查看java进程信息
jps -lv    --jdk查看java进程信息(额外显示jvm启动参数)
ps -ef | grep java    --查看java进程信息
ps -aux |grep -v grep|grep 28990    --根据PID查进程信息
cd /proc/28990    --直接进入PID目录
netstat -nlp|grep 80    --根据端口号查进程信息

2.查看正在运行的jar包情况

复制代码
ps -ef|grep forwarding-client-0.0.1-SNAPSHOT.jar  --查询进程信息

ps -aux|grep forwarding-client-0.0.1-SNAPSHOT.jar  --显示进程所有状态(CPU/内存)

ps aux --sort -rss | grep forwarding-consumer    --根据内存使用情况降序显示进程信息

3.启动jar包

复制代码
-- 启动jar命令
java -jar forwarding-client-0.0.1-SNAPSHOT.jar -Dspring.profiles.active=test -Dspring.config.location=/opt/TestPlatform/application.properties

-- 后台运行JAR包,并输出日志文件
java -jar forwarding-client-0.0.1-SNAPSHOT.jar > log.file 2>&1 &

-- 永久后台运行jar
nohup /opt/jdk1.8.0_131/bin/java -jar -Dspring.config.location=/opt/TestPlatform/application.properties /opt/TestPlatform/TestPlatform.jar --server.port=8080 

-- 永久后台运行jar,并输入日志文件
nohup java -jar rocketmq-console-ng-1.0.1.jar > log.file 2>&1 &

-- 永久后台运行jar,并按日期格式输入日志文件
nohup java -jar rocketmq-console-ng-1.0.1.jar > logs/$(date +%Y-%m-%d).log 2>&1 &

-- docker运行MQ容器
docker run --name mq -d -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.200.197:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -v /etc/localtime:/etc/localtime -p 8088:8080 -t styletang/rocketmq-console-ng 

-- maven加密方式构建
mvn clean package -Dmaven.test.skip=true -Dxjar.password=123456

5.执行shell脚本

复制代码
./run.sh    --需要权限允许
sh run.sh    --不需要权限允许

6.查看启动jar日志信息

复制代码
tail -f ~/logs/rocketmqlogs/namesrv.log    --实时查看进程日志信息
tail -n 5 info.log  --查询进程日志末尾5行
cat log.file    --查看所有日志信息

7.停止进程

复制代码
kill -9 32473   --强制终止
kill -15    --终止

二、网络管理

1.查看程序端口占用情况

复制代码
netstat -ano | grep 9876    #查询系统中端口网络连接/监听状态

netstat -anp    #显示系统中所有网络连接,并标注每个连接对应的进程名/PID。

netstat -ntpl    #查询系统中正在监听的TCP端口,

netstat -anp|grep 10000 -c    #统计系统中端口相关的网络连接总数

netstat -ano | grep 10000 | grep ESTABLISHED > conectionInfo.txt #查找端口已建立连接数并导出文件

watch -n 1 'netstat  -ano | grep 10000 | grep ESTABLISHED -c'    #实时监控统计端口下已建立的连接数量

watch -n 1 'netstat  -ano | grep 192.168.1.1 | grep ESTABLISHED -c'    #实时监控统计IP地址已建立的连接数量

netstat -anp |  grep 25723 | grep LISTEN  --查看进程启动的所有端口

netstat -anp | grep 5821 | grep LISTEN -c    --查看进程启动的所有端口数量

netstat -anp | grep 8490 pid/port     --根据pid或端口查进程

netstat -naop | grep 8490 pid/port     --根据pid或端口查进程

lsof -i:9876    --查看端口

nc -l port  --临时监听TCP端口
nc -lk port --永久监听TCP端口

tcping 127.0.0.1 8080  --测试IP和端口是否正常

2.网络SSH

复制代码
downlod(远程--->本地)
scp -r -P 26399 root@127.0.0.1:/home/default/admin/test.sql  ~/Dowload

upload(本地-->远程)
scp -P 26399 ~/Dowload/test.sql root@127.0.0.1:/home/default/admin/

upload(本地-->远程),r表test目录递归所有子文件
scp -r -P 2201 test root@192.168.200.146:/share

upload(本地-->远程),排除logs目录
rsync -avz -e 'ssh -p 26399' --exclude='logs' 

跨服务器传输(本地不中转)
scp -P 26399 root@192.168.1.1:/file.sql root@192.168.1.2:/tmp

3.查看IP

复制代码
ip a 
ip addr
curl ip.me    --Linux查看公网IP
telnet cip.cc    --查询你的公网IP地址

4.TCP抓包

bash 复制代码
-- 抓取指定一个IP地址数据包,输出内容到文件
tcpdump -i any host 192.198.1.1  -w /tmp/csp.cap

-- 抓取指定两个IP地址数据包,输出内容到文件
tcpdump -i any host 192.198.1.0 or host 192.198.1.1  -w /home/egg/360-0721.cap

--抓取eth0网卡上指定端口所有数据包
tcpdump -nn -i eth0 port 21101 -w 21101.cap

--抓取eth0网卡上指定IP和端口所有数据包
tcpdump -nn -i eth0 net 221.122.121.92 and port 21101 -w 21101.cap

-- 抓取所有UDP数据包:
sudo tcpdump udp 

-- 抓取指定端口的UDP数据包
sudo tcpdump udp port 53 

-- 抓取指定端口的UDP数据包,并输出内容到文件
sudo tcpdump udp port 53 > dns.pcap 

-- 抓取指定源IP的UDP数据包
sudo tcpdump udp src host 192.168.1.100 

-- 抓取指定目标IP的UDP数据包
sudo tcpdump udp dst host 192.168.1.200 

-- 抓取指定源IP和目标IP的UDP数据包
sudo tcpdump udp host 192.168.1.100 and 192.168.1.200 

-- 抓取指定网卡上的UDP数据包
sudo tcpdump udp -i eth0 

--当源IP是192.168.100.10,目的IP是192.168.100.20,访问的目的端口是9522的TCP数据包到达时,将其目的地址+端口修改为192.168.100.30:8890
-A PREROUTING -s 192.168.100.10/32 -d 192.168.100.20/32 -p tcp -m tcp --dport 9522 -j DNAT --to-destination 192.168.100.30:8890 

当源IP是192.168.100.10,目的IP是192.168.100.30,访问的目的端口是8890的TCP数据包即将离开本机时,将其源地址修改为192.168.100.20
-A POSTROUTING -s 192.168.100.10/32 -d 192.168.100.30/32 -p tcp -m tcp --dport 8890 -j SNAT --to-source 192.168.100.20

traceroute 218.65.240.252    --网络追踪

5.HTTP请求

bash 复制代码
curl -X POST -H "application/x-www-form-urlencoded" -i -k https://uat-test.com.cn/receiveMsg -d 'report=2918d6b3-229d-4581-ad9f-cf7dfbd0c214%2C17602129153%2CDELIVRD%2C2023-10-20+13%3A35%3A13%2C1%2C4884%2C101873306144337480178245%2C583181778731143170&name=test&account=test'

 curl -X POST \
  https://api.123.com/test \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: ec1c438c-c98e-4d6b-87bd-e37467421485' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F appId=LPvsdekq \
  -F appKey=uOafqd2 \
  -F orderNo=12345987

6.wireshark

bash 复制代码
ip.addr == 192.168.3.77
ip.src == 192.168.124.8 && ip.dst == 192.168.57.66
tcp.port == 80                  
tcp.srcport==80           
tcp.dstport == 80        
http.request and tcp.port == 7777

三、目录及文件

1.查找服务安装的目录

bash 复制代码
--首先查看进程ID
ps -ef|grep redis

--然后通过进程ID查找目录
ls -l /proc/进程ID/cwd

2.查找文件或目录

bash 复制代码
--查找文件
find / -name 'test.jar'

--查找文件夹(目录)
find / -name 'xxl*' -type d

3.grep查找内容

bash 复制代码
find . | xargs grep -ri 'content'

--grep查找同时满足多个条件 (与)
-c count统计,统计配结果的行数
-l 打印每个输入文件的名字
-n 提供输入行的行号
-i 忽略表达式中字母大小写。

grep SYYY fine2021335.csv    --过滤文件指定内容
grep 'fail' a.txt | grep 'error'    --查找文件中同时包含fail和error信息 
grep  -E 'pattern1.*pattern2'    --实现AND操作
grep -ni 'channelActive' test.log > test2.log     --查看关键字并生成文件


--grep 查找满足多个条件中的一个(或),-E正则表达式实现OR操作
tail -f logs/test.log | grep -E '28010|13404'    
tail -f logs/test.log | grep '28010\|13404' --或 
tail -f  /share/server/bin/logs/test.log | grep 'response'
tail -f /share/server/bin/logs/all.log | grep -w 'CN'   
tail -f logs/all.log | grep 'CN-1878' | grep 'RESP_G'    --与
cat all.log|grep -a CN| grep -a 123
cat all.log | grep -a '1988' | grep -a 'RPT' | wc -1  --按行字数统计
cat all.log | grep -a 'CN' |  grep -a '10:27:08' | 'RPT' | wc -l
tail -f logs/all.log | grep -E 'CN|850' | grep -a 'RESP' > RESP.txt


cat bb.txt | sort | uniq -c | sort -r | awk '{print $2,$1}'   --分组统计数量
grep 'resp=' logs/all.log | grep -a 'CN'| awk -F'resp=' '{if ($2+0 > 500) print $0}'  -- 过滤resp大于100的日志
grep -a '9rf.cn/1Uh?WTL6n0' logs/api.log.2024-08-*   --查询一个月所有日志

grep使用正则匹配跨行数据
grep -Pzo 'java\.util\.concurrent\.RejectedExecutionException: event executor terminated(\n|.)*?(?=\n\S)' logs/gw-all.log.2024-07-23 | less

pcregrep查询多行匹配
pcregrep -M 'java\.util\.concurrent\.RejectedExecutionException: event executor terminated(\n|.)*?(?=\n\S)' logs/gw-all.log.2024-07-23
 
awk匹配包含多行日志
awk '/java.util.concurrent.RejectedExecutionException: event executor terminated/ {p=1} 
p {print} 
/\S/ && !/java.util.concurrent.RejectedExecutionException: event executor terminated/ {p=0}' logs/gw-all.error.log.2024-07-23

日志截取时间查询
grep "2020-02-19 14:1[0-5]" elastic-job.log > log.tx  --查询2020-02-19 14:10到2020-02-19 14:15区间的日志
grep "2020-02-19 1[0-1] " elastic-job.log  --查询当天10点到11点的日志
grep -A 10000 '\[2024-08-01 02:08:56\]' logs/application.log  --  -A表示匹配后数量行数

sed命令(推荐使用) 
sed -n '/2023-03-18 12:50:00/,/2023-03-18 13:10:58/p' logs/api.log |     grep -a 'gjdw03'


awk命令 
awk '$2>"14:10:10" && $2<"14:12:59"' dubbo-elastic-job.log  --注意参数$1和$2的取值,我这里$1是指年月日,$2是指时分秒
awk '$1 >= "17:13:00.000" && $1 <= "17:16:00.000"' logs/sys-info.2024-06-26.log
awk '$0 >= "[2024-08-01 02:08:56]"' logs/application.log | less  --less 命令的导航功能方便地查看过滤后的日志内容

4.less查找内容

bash 复制代码
-g  只标志最后搜索的关键词
-i  忽略搜索时的大小写

ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏
j - 向前移动一行
k - 向后移动一行
G - 移动到最后一行
g - 移动到第一行

/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
Q  退出less 命令

5.权限设置

bash 复制代码
chmod 761 demo    
chmod +x test.sh    --赋予执行权限
chmod u+x test.sh    --赋予执行权限
      
root用户权限赋予egg用户
chown -R egg:egg /share/monitorLog

6.VIM编辑

bash 复制代码
-- 替换文本 
:s/foo/bar/:在当前行中,将第一个出现的字符串 foo 替换为 bar。
:s/foo/bar/g:在当前行中,将所有出现的字符串 foo 替换为 bar。
:%s/foo/bar/:在整个文件中,将每行第一个出现的字符串 foo 替换为 bar。
:%s/foo/bar/g:在整个文件中,将所有出现的字符串 foo 替换为 bar。
:%s/foo/bar/gc:在整个文件中,将所有出现的字符串 foo 替换为 bar,末尾加c表示每次替换时确认

7.查看文件目录大小

bash 复制代码
du -h  --max-depth=1    -- 当前目录下各个子目录所使用的空间
du -h test        --查看当前目录及下级目录使用空间
du -h -s test    --查看当前目录使用总空间
du -ah test     --文件和目录都显示
du|sort -nr|more    --按照空间大小排序
du -h  --max-depth=1 |sort -nr| more   --当前目录按照空间大小排序
du -ah --time --max-depth=1 ./ | sort -hr  --查看当前目录下所有目录及文件,按空间大小排序
du -ah --time --max-depth=1 /usr/* | sort -hr | head -n10   #按空间大小排序,查看前10行
du -ah --time --max-depth=1 /usr/* | sort -hr | tail -n10   #按空间大小排序,查看后10行
du -h0
du -hs *

8.ll列出文件列表

bash 复制代码
ll -Sh     --按大小排序
ll -rt     --按时间升序
ll -t     --按时间降序

9.压缩

bash 复制代码
tar -cvf test.tar test/   --将目录打成tar包
zcat api.log.2022-12-05.gz    --不解压缩文件的情况下,显示压缩包中文件的内容

10. 复制文件夹

bash 复制代码
rsync -av --exclude='logs/' /source/path/ /destination/path/

11.上传、下载文件

bash 复制代码
rz    --上传文件
sz    --下载文件

12.搜索命令

bash 复制代码
which  --安装路径
whereis --安装文件详细
locate  --类似find搜索目录及文件

四、系统

1.性能分析工具

bash 复制代码
top命令
Ctrl+M排序
s - 改变画面更新频率,如:s 60,表示每隔一分钟刷新一次屏幕;
N - 以 PID 的大小的顺序排列表示进程列表
P - 以 CPU 占用率大小的顺序排列进程列表
M - 以内存占用率大小的顺序排列进程列表
h - 显示帮助
n - 设置在进程列表所显示进程的数量
q - 退出 top

命令:top [-] [d delay] [q] [c] [S] [s] [i] [n]
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出top

htop -d 10  -10s刷新

2.防火墙

bash 复制代码
--开放端口
firewall-cmd --zone=public --add-port=10911/tcp --permanent 
--查询端口是否放行
firewall-cmd --zone=public --query-port=9876/tcp    
--删除端口规则
firewall-cmd --zone=public --remove-port=9876/tcp --permanent
--查看已放行的所有端口
firewall-cmd --zone=public --list-ports
--创建自定义区域
firewall-cmd --permanent --new-zone=cloud_mq
--向自定义区域添加源IP
firewall-cmd --permanent --zone=cloud_mq --add-source=117.78.48.20
--重新加载防火墙规则
firewall-cmd --reload

--查看防火墙状态
systemctl status firewalld
--启动防火墙
systemctl start firewalld
--停止防火墙
systemctl stop firewalld
--开机自启
systemctl enable firewalld
--禁止开机自启
systemctl disable firewalld

--iptables规则查询
iptables-save | grep 123.125.99.60

3.系统时间同步

3.1 阿里云时间同步

bash 复制代码
date -R    --查看当前服务器时间
yum install ntpdate    --安装ntpdate服务
ntpdate ntp1.aliyun.com    --同步上海时间

4.crontab定时任务

bash 复制代码
crontab -e    --执行文字编辑器来设定时程表
crontab -l    --列出目前的时程表
crontab -r    --删除目前的时程表
cat /etc/crontab    --查看脚本
vim /etc/crontab    --编辑脚本
grep CRON /var/log/cron    --查看cron任务调度情况

5.Linux连接数

bash 复制代码
ulimit -n    --默认的Socket最大连接数为1024

6.history不记录历史

bash 复制代码
set +o history  --不记录历史,当前连接有效
set -o history  --记录历史
history -d [num]    --删除历史记录
sed -i '150,$d' .bash_history   --保留前150行记录
chattr +ai ~/.bash_history  --不写入历史记录
chattr -ai ~/.bash_history  --写入历史记录

7.系统监控

bash 复制代码
lscpu    --查看CPU
vmstat    --虚拟内存统计
uptime    --查看机器负载
iostat    --磁盘性能
iftop -nP --端口流量监控
nload     --网卡流量监控
/proc/sys/vm/drop_caches  --释放缓存

五、常用软件

1.nginx

bash 复制代码
sudo /sbin/service openresty start
sudo /sbin/service openresty stop
sudo /sbin/service openresty status

2.java

bash 复制代码
jstat -gc 3477   #统计gc信息
jstat -gcutil -h5  212548 5000  #5s统计一次GC信息

3.mysql

bash 复制代码
SHOW MASTER STATUS;    --查看主服务状态
SHOW SLAVE STATUS;    --查看从服务状态

4.python

bash 复制代码
-- 后台永久运行python脚本,输出日志文件
nohup python3 myscript.py > myscript.log 2>&1 & 
-- 查看python安装路径
which python3

六、阿里云终端Alpine Linux

bash 复制代码
1.查看系统版本信息
cat /etc/os-release

2.更新软件包列表
apk update

3.安装crul
apk add curl

4.安装telnet
apk add busybox-extras

5.验证安装
which telent
相关推荐
PursuitK9 个月前
Linux 基本命令
linux·服务器·linux常用命令
python_chai1 年前
Linux从入门到精通:全面掌握基础命令与高效操作实战指南
linux·运维·服务器·linux常用命令
恩爸编程1 年前
Linux 常用操作命令及示例全解
linux·运维·服务器·linux命令·linux常用命令·linux常用操作命令·linux常用操作命令有哪些
小明学C++2 年前
Linux命令分享 三 (ubuntu 16.04)
linux·服务器·管道·重定向·linux常用命令·linux打包解包压缩解压文件·linux查看进程
川峰2 年前
【操作系统笔记十二】Linux常用基础命令
linux常用命令·linux常用快捷键
小曾同学.com2 年前
【Linux操作系统教程】用户管理与权限管理你真的懂了吗(三)
运维开发·linux常用命令·chmod·chown·测试开发必备