服务常用命令汇总

Linux

centos7以systemctl管理守护进程,如查看nginx状态

1
2
3
4
5
centos6:
service nginx status
centos7:
systemctl status nginx.service

以下以centos6为例

1.tar打包

打包, 将/usr/share/nginx/tempweb目录下的文件与子目录打包成一个文件库/usr/share/temp.tar

1
tar -cvf /usr/share/temp.tar /usr/share/nginx/tempweb

解包, 若以相对路径打包,解包时,以相对路径存放展开的文件;以绝对路径打包,解包时,以绝对路径存放展开的文件。
若指定展开的文件名,须注意文件的目录路径。

1
tar -xvf /usr/share/temp.tar

参考链接

2.防火墙路由

centos6
参考链接

1
2
3
4
5
6
7
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
service iptables restart
iptables -vL -t filter

centos7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查看版本
firewall-cmd --version
# 查看状态
systemctl status firewalld
# 或
firewall-cmd --state
# 启动
systemctl start firewalld
# 禁用
systemctl disable firewalld
# 停止
systemctl stop firewalld
# 列出所有规则
firewall-cmd --list-all
# 添加规则
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent
# 重新载入
firewall-cmd --reload
# 查看规则
firewall-cmd --zone=public --query-port=80/tcp
# 删除规则
firewall-cmd --zone=public --remove-port=80/tcp --permanent

3.vim

搜索字符串,命令行模式下输入

1
/

查看及设置字符编码,命令行模式下输入

1
2
sef ff
set ff=unix

删除光标所在行,命令行模式输入

1
dd

参考链接

其他

1.查看系统版本:参考链接

1
cat /etc/redhat-release

2.whereis、which等查找总结:参考链接

1
whereis nginx

3.重启网络

1
service network restart

4.查看某个服务进程号

1
ps aux | grep servicebus | awk '{print $2}'

行处理器awk, 基本语法, 参考链接1, 参考链接2

1
awk [options] 'Pattern { Action }' File

5.查看使用目录的进程

1
lsof +D $dri_path

6.查看某个端口的进程号

1
netstat -anptu | grep $port


1
2
3
4
lsof -i: $port
若无lsof,则安装
yum install lsof

7.时区设置

1
tzselect

8.查看磁盘占用

1
2
du -sh
df

9.查看进程cpu及内存使用

1
ps -p $pid_num -o rss -o vsz -o %CPU

10.nginx路径备注

1
2
3
nginx访问日志路劲:/var/log/nginx/access.log
nginx配置文件路径:/etc/nginx/conf.d
nginx静态资源路径:/usr/share/nginx

11.重置root密码
参考链接
12.shadowsockets
官网
安装pip
服务端配置
13.安装中文字体

1
2
yum -y install fontconfig
fc-list

参考链接
14.查看环境变量

1
export

参考链接
15.更改权限

1
chmod 777 $file

16.并发测试
安装apache ab
windows安装
centos安装

1
ab -kc 100 -n 1000 https://www.google.com/

17.慢连接攻击

1
slowhttptest -H -c 10 -l 100 -k 5 -p 10 -g -u http://www.google.com/

参考链接
18.安装jdk1.8

1
2
3
yum install -y java-1.8.0-openjdk
# 若安装java后无法使用javac
yum install java-devel

19.编辑配置立即生效,如

1
source /etc/profile

20.创建软链接,类似windows下的快捷方式

1
ln -s 源文件 目标文件

21.生成1-10数字到文件

1
seq 10 > 1.txt

22.查看是否开启了SELinux(Security Enhanced Linux, 是MAC(Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等))

1
getenforce

23.查看test.log文件中, 包含testSearch的统计; wc(word count)命令,-c或—bytes或—chars为显示Bytes数; -l或—lines 为显示行数; -w或—words为显示字数

1
cat test.log | grep testSearch | wc -l -w -c

24.连续执行多个命令用分号隔开

1
cd /home ; ls -al

25.对某个关键词的次数进行统计并显示前几位,如统计ip出现次数最多的前5位。
grep用于文本搜索,-E为使用正则匹配,-o为只显示匹配部分,-i为忽略大小写;
uniq用于去重,-c为显示重复次数;
sort用于排序,-n为数值排序,-r为倒序;
head为显示前n行。

1
grep -i -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test.log | uniq -c | sort -n -r | head -5

26.dmesg(display message):辅助诊断系统故障,如使用如下命令查看是否有因内存溢出

1
dmesg | grep 'out of memory'

Mysql

1.查看所有账户

1
select * from mysql.user;

可看到账户名及密码,密码是md5散列处理后的。

2.授权

grant用于给用户增加和创建权限,revoke用于删除用户权限

1
2
3
4
5
6
7
create user admin;
grant all privileges on *.* to 'admin'@'%' identified by '123456' with grant option;
flush privileges;
show grants for admin;

以上命令为增加具有所有权限的用户admin,密码为123456。
on*.* 表示作用于所有数据库、所有表。
with grant option表示新账户admin具有grant权限,可给其他用户授权。
参考链接

3.查看数据库的所有表

进入数据库查询

1
2
3
show databases;
use test_db;
show tables'

通过information_schema数据库查询,information_schema存储的是数据库元数据。如以test_db为例,查看表数量及表名称。

1
2
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'test_db';
SELECT table_schema, table_name FROM information_schema.TABLES WHERE table_schema = 'test_db';

4.查看sql执行计划

常用于优化sql执行速度

1
2
3
4
explain
select br.child_id, ifnull(account.id, 0) as id from bind_relation br
left join account on account.uk_account_id = br.child_id
where parent_id = 1234567;

参考连接

5.导入sql及导出数据

导入sql

1
mysql -uroot -proot --default-character-set=utf8mb4 temp_db < /home/tmp/init.sql

导出数据

1
mysql -h 127.0.0.1 -uroot -proot -e "select * from temp_db.temp_table" > /home/tmp/test.xls

6.加解密

以加解密test_record表的id字段为例,密钥设为hello-world

1
2
3
4
5
6
7
8
加密
HEX(AES_ENCRYPT(id, 'hello-world'))
解密
AES_DECRYPT(UNHEX(id), 'hello-world')
验证
select AES_DECRYPT(UNHEX(HEX(AES_ENCRYPT(id, 'hello-world'))), 'hello-world') from test_record order by create_time desc limit 1;

7.存储过程

以循环插入数据为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
drop procedure if exists test_insert;
DELIMITER //
create procedure test_insert()
begin
declare test_str varchar(50) default '1234tmp';
declare i int;
set i = 1000;
while i<1050 do
insert into temp_db(id,data1,data2) values(i,concat("test",i),concat(test_str,i));
set i = i+1;
end while;
end //
DELIMITER ;
call test_insert();

参考链接

8.随机取数据

随机取20条

1
select C.id as id, C.b_name as b_name, C.a_id as a_id, A.a_name as a_name from A right join (select * from B order by rand() limit 20) as C on C.a_id = A.id;

解决order by rand性能问题

1
select C.id as id, C.b_name as b_name, C.a_id as a_id, A.a_name as a_name from A right join (select B.id as id, B.b_name as b_name, B.a_id as a_id from B join (select max(id) as id from B) as X on B.id <= floor(X.id * rand()) limit 20) as C on C.a_id = A.id;

9.其他

1.查看版本号

1
2
3
select version();
mysql -V

2.查看表结构

1
desc test_table;

3.查看表的创建语句

1
show create table test_table;

4.查看字符编码

1
show variables like '%char%';

5.查看及更改最大连接数

1
2
3
show variables like 'max_connections';
set GLOBAL max_connections = 200;

6.查看存储过程
所有

1
show procedure status;

某个存储过程创建语句

1
show create procedure $ProcedureName;

7.查看当前连接及移除某个连接

1
2
3
show full processlist;
kill $id;

8.查看线程值或全局值

1
2
3
show session variables;
show global variables;

9.查看线程或全局的事务隔离级别

1
2
3
select @@tx_isolation;
select @@global.tx_isolation;

10.字符串替换
test_data字段中包含下划线的值,首个下换线后面的字符串替换为字段id的值

1
select if(locate('_', test_data) > 0, CONCAT(SUBSTRING_INDEX(test_data, '_', 1), '_', id), test_data) from test_record;

11.更改数据库或表的编码

1
2
3
ALTER DATABASE test_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

12.数据备份

1
mysqldump -uroot -proot test_db > test.dump

参考链接
13.查运行状态

1
show global status;

若仅查立即获得表的锁次数情况,则

1
show status like 'Table%';

其中table_locks_immediate为立即获得表的锁的次数;
table_locks_waited为不能立即获得表的锁的次数,有锁表操作。如果该值较高,可能有性能问题,应优化查询或拆分表。

Redis

示例

1
2
3
4
5
6
7
8
9
10
# 延时检测
redis-cli --latency -h $address -p $port
# 如
redis-cli --latency -h 127.0.0.1 -p 6379
# 查看从属关系
info replication
# 查看所有连接客户端的信息
client list

常用命令参考

Docker

1.docker非https的私库地址配置

1
--insecure-registry $domain:$port

2.docker registry 配置文件路径

1
2
3
centos6:/etc/sysconfig/docker
centos7: /etc/docker/daemon.json
docker-machine:/var/lib/boot2docker/profile

3.windows下docker machine登录及重启

1
2
docker-machine ssh defalut
docker-machine restart default

4.centos下安装

1
2
3
4
5
6
7
8
9
10
11
安装
yum install docker
启动
service docker start
停止
service docker stop
查看运行状态
service docker status

5.Dockerfile
示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#基础镜像
FROM centos6:v1
#作者, 无实际作用,可有可无
MAINTAINER develop
#env开头的命令为环境变量,声明后,可在docker容器或sh命令中直接使用.如:$TEST_ENV
ENV TEST_ENV test
ENV TEST_DOCKER_NAME docker_test
ENV SERVICE_DIR=test_dir
#把当前目录(与Dockerfile平级)下的文件夹拷贝到容器内
COPY lib/$SERVICE_DIR /tmp/$SERVICE_DIR
COPY lib/start.sh /root/start.sh
#添加文件的可执行权限
RUN chmod +x /root/start.sh
#镜像入口命令 启动容器后,从此开始执行
CMD ["/bin/bash","/root/start.sh"]
#声明容器对外暴露的端口号
EXPOSE 22
EXPOSE 8060

6.构建镜像

1
2
3
docker build -t test_image:v1.0.0 $Dockerfile_path
$Dockerfile_path为Dockerfile的地址,如果在当前目录执行,则为"."

7.上传镜像

1
2
3
4
5
打标签
docker tag $origin_docker_name $new_tag
上传
docker push $new_tag

8.容器运行

1
docker run -t -i -d -e "REDIS_TYPE=MASTER" -p7022:22 -p7000:7000 -v /etc/localtime:/etc/localtime:ro redis:v1.1

9.进入容器

1
docker exec -ti 容器id /bin/bash

10.查看容器

1
docker ps

11.查看本地镜像

1
docker images

12.停止容器

1
docker stop 容器Id或容器名

13.移除容器及镜像

1
2
docker rm 容器Id
docker rmi 镜像Id

docker api 参考
解决时间不一致

Kubernetes

示例

1
2
3
节点信息及节点状态
sudo kubectl get nodes
sudo kubectl describe node 127.0.0.1

常用命令

MongoDB

示例

1
db.users.save({name: ‘test', age: 24, sex: true});

常用命令
下载说明

Infludb

示例

1
2
查看序列
SHOW series from cpu_load_short

常用命令

其他

1.Excel

excel函数使用,以单元格内容有9/6/2017转2017/6/9为例

1
=CONCAT(RIGHT(A1,4),"/",MID(A1,FIND("/",A1,1)+1,FIND("/",A1,4)-FIND("/",A1,1)-1),"/",LEFT(A1,FIND("/",A1,1)-1))

将一列数据转为逗号分隔的一行, 以数据所在单元格为A1:A100为例

1
2
3
4
5
1.若数据为文本格式,直接跳转到步骤3,若是数值格式,则需转为文本格式(PHONETIC函数不支持数值类型)
2.选中待处理列,点击数据(菜单栏)->分列,在分列向导中最后一步(前几步为默认)选中列数据类型为文本,点击完成
3.在待处理列的数据后一列添加,
4.任意空白单元格输入 = PHONETIC($A1:$B100)
5.复制结果,在另一空白行右键->选择性粘贴->仅粘贴值和数字格式

2.Git

命令示例
1.分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查看分支
git branch -a
# 创建分支
git checkout -b $branch_name
# 等同于两条命令合并
git branch $branch_name
git checkout $branch_name
# 删除本地分支
git branch -d $branch_name
# 删除远程分支
git push origin --delete $branch_name
git push origin :$branch_name
# 精简分支,本地的远程分支与远程保持一致
git remote prune origin

2.标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看本地tag, 参数-l可省略
git tag -l
# 查看远程tag
git show-ref --tag
# 查看某个tag信息
git show $tag_name
# 创建tag, -a参数指定tag名, -m为tag提交说明, $commit_version为指定某次提交版本
git tag -a $tag_name -m "commit note" $commit_version
# 若在当前分支最新提交打tag, 可简化如下
git tag $tag_name
# 删除本地tag
git tag -d $tag_name
# 删除远程tag
git push origin :refs/tags/$tag_name
# 批量删除tag, 利用文本处理辅助查找, 如grep(global search regular expression and print out the line), awk(三个创始人名字的缩写); xargs(execute arguments)指令作用为从标准输入中读取内容, 并将此内容传递给它要协助的命令, 并作为那个命令的参数来执行
# 批量删除本地tag
git tag | grep $search_content | xargs git tag -d
# 批量删除远程tag
git show-ref --tag | grep $search_content | awk '{print $2}' | xargs git push origin --delete

3.撤销修改

1
2
3
4
5
6
7
8
# 撤销工作区修改
git checkout .
# 撤销暂存区
git reset .
# 版本回退
git reset --hard $commit_id

4.查看提交记录, 如单行查看近两次提交且仅显示SHA-1版本的前几个字符

1
git log --pretty=oneline --abbrev-commit -2

5.暂存

1
2
3
4
5
6
7
8
9
10
11
# 备份当前工作区的内容,保存到git栈中
git stash
# 从git栈中获取到最近一次stash进去的内容,恢复工作区(获取之后,会删除栈中对应的stash)
git stash pop
# 显示git栈中的所有工作区内容的备份
git stash list
# 清空git栈
git stash clear

6.获取特定提交,合并

1
2
3
4
5
# 摘取其他分支的某次提交,合并到当前分支
git cherry-pick $commit_id
# 批量操作,摘取连续的多个commit, 不包含first, 左开右闭,即($commit_id_first..$commit_id_end]
git cherry-pick $commit_id_first..$commit_id_end

命令参考链接1
命令参考链接2
git工作流实践1
git工作流实践2

3.maven

内置属性:参考链接; 参考书籍:《Maven实战》
如Maven的优化依赖:
Maven会自动解析所有项目的直接依赖和传递依赖,同一依赖的版本号不一致会导致依赖冲突(依赖的不确定性),maven对冲突进行调节,保证任一构件只有唯一的版本号,最后得到的依赖被称为已解析依赖。
maven解决冲突的原则:选择就近于根路径的依赖; 路径在同一层级,则选择声明在前的。

1
2
3
4
5
6
7
8
9
路径最短者优先。如:
第一种依赖路径:A -> B -> C -> D(1.0)
第二种依赖路径:A -> B -> D(1.1)
此时以第二种依赖路径(D1.1)为准
声明最先者优先,即谁先声明就依赖谁。如:
第一种依赖路径:A -> B -> C(1.0)
第二种依赖路径:A -> B -> C(1.1)
此时以第一种依赖路径(C1.0)为准

命令如下

1
2
3
4
5
6
7
8
9
# 当前项目目录下执行
# 解析依赖列表,包含直接依赖和可传递依赖
mvn dependency:list
# 查看当前项目依赖树,清晰看出依赖情况
mvn dependency:tree
# 分析项目依赖的使用情况
mvn dependency:analyze

4.tomcat参数

acceptCount、maxConnections、maxThreads
参考链接

5.JVM性能分析

1
/usr/bin/jmap -dump:format=b,file=/tmp/test.dmp $pid

参考链接

6.运行jar包

java -jar 与 -cp参数不能同时使用
前台运行

1
2
3
java -jar test.jar
java -cp ../dist/*:../lib/*:../resource org.springframework.boot.loader.JarLauncher

后台运行

1
2
3
4
nohup java -jar test.jar --spring.profiles.active=dev &
nohup java -cp ../dist/*:../lib/*:../resource
org.springframework.boot.loader.JarLauncher >/dev/null 2>&1 &

远程调试, idea配置远程debug

1
2
3
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8096 -jar test.jar --spring.profiles.active=prod &
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8096 -cp ../dist/*:../lib/*:../resource org.springframework.boot.loader.JarLauncher >/dev/null 2>&1 &

7.Jenkins pipeline

参考链接

8.mac常用命令

brew是mac系统下一个包管理工具, 作用同centos的yum, 可以方便的管理(安装/卸载/更新)各种软件包。
mac自带ruby环境, 输入如下命令安装Homebrew(官网):

1
2
# 先用shell命令curl, 将文件下载到本地, 文件名为install; 然后执行ruby -e安装
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew命令基本用法, 以nginx为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 安装(默认下载最新稳定包)
brew install nginx
# 更新
brew upgrade nginx
# 卸载
brew remove nginx
# 列出当前安装的软件
brew list
# 查询与nginx相关的可用软件
brew search nginx
# 查询nginx的安装信息
brew info nginx
# 查看nginx的安装选项
brew options nginx
# 启动nginx
brew services start nginx
# 停止nginx
brew services stop nginx
# 重启nginx
brew services restart nginx
# 列出当前状态
brew services list
# 清除已卸载应用的无用配置
brew services cleanup
# 打开文件或文件夹, 如下为查看nginx配置
open /usr/local/etc/nginx/servers/

除了使用brew services 启动和关闭nginx, 也可用如下, 注意:启动和关闭是成对的命令,若启动用brew, 关闭也需通过brew

1
2
3
4
5
6
7
8
# 启动nginx
nginx
# 关闭nginx(pkill是ps命令和kill命令的结合,通过进程名杀死指定进程)
pkill nginx
# 查看nginx是否运行
ps aux|grep nginx

软件安装的路径

1
2
3
4
5
6
7
8
# 默认(约定俗称)配置路径
/usr/local/etc/
# 默认日志路径
/usr/local/var/log
# nginx静态资源路径
/usr/local/var/www

配置java运行环境
1.官网下载jre包, 选择后缀为dmg的文件, 提示要求输入oracle用户名及密码, 可无需注册, 随意搜一个填上即可。
2.配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
# 终端中输入
vim ~/.bash_profile
# 添加如下, 保存并关闭
export JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
export PATH=${JAVA_HOME}/bin:$PATH
# 当前环境下载入配置文件,使配置立即生效
source ~/.bash_profile
# 查看配置是否成功
java -version

注:
dmg文件格式:mac上的压缩镜像文件,相当于Windows上的iso文件。dmg文件在mac上可直接运行加载,在Windows上可以通过命令行软件dmg2iso.exe将dmg文件转换成iso文件。

9.idea快捷键

idea使用参考: 跳转
常用示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 生成构造器/getter/setter等
Alt + Insert
# 导入包
Alt + Enter
# 重构一切
Ctrl + Alt + Shift + T
# 查看方法参数
Ctrl + P
# 生成测试类
Ctrl + Shift + T
# 查看接口实现
Ctrl + Alt + B
# 查看当前类的结构
Alt + 7
# 查看类的继承层级
Ctrl + H
# 查看方法的调用链
Ctrl + Alt + H
# 返回上次浏览的位置
Ctrl + Alt + Left/Right
# 最近的文件
Ctrl + E
# 快速选择
Ctrl + W
# 选中特定
Shift + Home/End,选中当前行,配合方向键可选中多行
# 智能提示,补全
Ctrl + Shift + Space
# 智能切换
Ctrl + Tab
# 编辑器已打开文件切换
Alt + Left/Right
# 同一类的方法之间快速切换
Alt + Up/Down
# 撤销
Ctrl + Z
# 撤回撤销
Ctrl + Shift + Z
# 删除选中行/光标所在行
Ctrl + Y
# 剪切
Ctrl + X
# 复制当前行
Ctrl + C
# 粘贴
Ctrl + V
# duplicate, 复制并粘贴光标所在行
Ctrl + D
# 选择剪贴板内容插入
Ctrl + Shift + Insert
# 搜索当前文件
Ctrl + F
# 根据名称快速打开类
Ctrl + N
# 项目的所有目录查找,更多条件搜索查看Edit/Find
双击Shift
# 替换内容
Ctrl + R
# 修改变量名
Shift + F6
# 修改变量类型
Ctrl + Shift + F6
# 格式化代码
Ctrl + Alt + L
# 查看/切换书签
F11
# 查询文档
Ctrl + Q
# 多行编辑(菜单栏Edit->Column Selection Mode)
Alt + Shift + Insert
# 多行缩回(选中多行后)
Shift + Tab