java程序员的linux常用命令

Java程序员必须会一些基础的运维知识,包括部署项目,排查线上问题、安装常用软件等。这些都是由新手进阶到高级程序员的必备知识,可以说如果不具备这些运维知识就没有独当一面的能力。

Linux命令

压缩解压

jar -xvf xxx.war 解压war包
tar -zcvf 压缩后的文件名 要压缩的文件

防火墙

  • systemctl stop firewalld.service #停止firewall
  • systemctl restart firewalld.service #重启mysql
  • systemctl disable firewalld.service #禁止firewall开机启动
  • firewall-cmd –state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
  • firewall-cmd –list-all #查看防火墙规则
  • firewall-cmd –permanent –add-port=9527/tcp #添加规则
  • firewall-cmd –permanent –remove-port=80/tcp #删除规则

网络

查询8080口占用情况
netstat -anp | grep 8080

进程

  • 批量杀死进程:
    ps -ef|grep 关键字|grep -v grep|cut -c 9-15|xargs kill -9

  • 杀死指定进程:
    ps -ef|grep 关键字|awk '{print $2}'|xargs kill -9

性能

查看占用内存最大的10个进程
ps -aux | sort -k4nr | head -n 10

获取本机ip地址

/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 172.|grep -v inet6|awk '{print $2}'|tr -d "addr:|地址"

用户相关

  • 修改密码
    passwd root
  • 禁止除root用户登录
    touch /etc/nologin
  • 查看用户
    cat /etc/passwd

硬盘内存占用情况

  • du -ah --max-depth=1 /
  • du -bsh /

查看已经被删除但是还占用内存的资源

lsof | grep deleted

线上问题排查

排查内存占用

jmap -dump:live,format=b,file=heap.bin PID

排查cpu占用

jstack -l PID

  • 步骤1:ps -mp PID -o THREAD,tid,time 获取有问题进程的所有线程
  • 步骤2:找到占用cpu最高的线程,然后将他转成16进制
  • 步骤3:jstack pid |grep tid -A 30

arthas

排除GC问题

jstat -gc PID 5000 每5秒一次显示进程号为PID的java进成的GC情况,其中最后五项,分别是

  • young gc的次数
  • young gc的时间
  • full gc的次数
  • full gc的时间
  • gc的总时间。

docker看日志

docker logs <ID> --tail=1000 -f

java业务异常

  • 安装arthas
    1
    2
    curl -O https://alibaba.github.io/arthas/arthas-boot.jar
    java -jar arthas-boot.jar
  • 异常未明显抛出,想知道具体异常的堆栈信息
    1
    watch 类地址 方法名 "{params,throwExp}" -e -x 5

软件安装和配置

安装mysql5.7

docker run --name mysql57 -v /mydata/mysql/data:/var/lib/mysql -p 13307:3306 -e MYSQL_ROOT_PASSWORD=wobeidaohao -d mysql:5.7

安装redis,要找对应版本的redis.conf

docker run -v /etc/redis.conf:/usr/local/etc/redis/redis.conf -p 16380:6379 --name redis5 -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

安装wordpress

1
2
3
4
5
6
7
8
9
10
docker run \
--name car-wordpress \
-e WORDPRESS_DB_HOST=127.0.0.1:13307 \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=wobeidaohao \
-e WORDPRESS_DB_NAME=car_wordpress \
-e WORDPRESS_TABLE_PREFIX=car \
-v /mydata/wordpress/car:/var/www/html/wp-content \
-p 8080:80 \
-d wordpress

安装rabbitmq

1
2
docker pull rabbitmq:3.7.7-management
docker run -d --name rabbitmq3.7.7 -p 35673:5672 -p 25673:15672 -v /mydata/rabbitmq/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=BrM5YrgB7xDNp2L 2888deb59dfc

Redis

redis批量删除

redis-cli keys "s*" | xargs redis-cli del

Kafka

github: https://github.com/wurstmeister/kafka-docker

tutorial: http://wurstmeister.github.io/kafka-docker/

进入shell

start-kafka-shell.sh <ZK_HOST:ZK_PORT>
如:start-kafka-shell.sh 192.168.10.208 192.168.10.208:2181

创建topic

$KAFKA_HOME/bin/kafka-topics.sh –create –topic test_origin_topic –partitions 1 –zookeeper $ZK –replication-factor 1

发送消息

$KAFKA_HOME/bin/kafka-console-producer.sh –topic=test_origin_topic –broker-list=broker-list.sh

消费消息

$KAFKA_HOME/bin/kafka-console-consumer.sh –topic=test_target_topic –bootstrap-server broker-list.sh

其他工具

screen

参考:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

  • screen -S yourname -> 新建一个叫yourname的session
  • screen -ls -> 列出当前所有的session
  • screen -r yourname -> 回到yourname这个session
  • screen -d yourname -> 远程detach某个session(另外一个终端开了这个screen)
  • screen -d -r yourname -> 结束当前session并回到yourname这个session
  • 按住 contrle+A+D 暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行
  • 按住 contrle+A+K -> kill window,强行关闭当前的 window

开启一个简易的http服务器

  • python3: python -m http.server
  • python2: python -m SimpleHTTPServer
  • nodejs: http-server

原文链接:https://www.jdkdownload.com/linux_cmd.html