采用
#
趋向
#
本地(app) -> 线上(browser)
工具
#
资讯
课:腾讯视频
搜索: DEVONagent, WolframAlpha
渠道: pages, 知网, 博客, 知乎, 慕课, 网易公开课, 微信/qq, outlook
发散查找: 百度指数, DEVONSphere
存储
文件管理: DEVONthink, SiteSucker, FEFileExplorer, Documents
网盘: icloud, oneDrive x 2, 坚果云, 百度网盘, 阿里网盘
效率
浏览器: SwitchyOmega, tampermonkey, downthemall, fireshot, pushBullet, firefoxFocus, Alook
设备同步: synergy, pushbullet, sharemouse
人机: alfred, divvy, unclutter, workspaces, yoink, xscope, hazeOver, microSnitch
监视: istatistica, wifiExplorer
图: Flameshot
短链: shortMenu
远程:OpenVPN, Shadowrocket, TeamViewer, 向日葵, ToDesk, AnyDesk, Google远程桌面, Termius, 腾讯会议,钉钉
语言:欧路词典
制品
架构图: Visio, WPS, Office, OmniGraffle, PlantUML, Graphviz, VisualParadigm
甘特图: OmniPlan, GanttProject, MicrosoftProject
表: Excel, Xmind, MindNode, Ithoughts, Scapple
大纲: Drafts, Workflowy, 幕布
字: LaTeX, iAWriter
数学: MathStudio, PocketCAS,
画: Procreator, Realistic, MentalCanvas, ExplainEverything
代码: Jetbrains, VIM, Spacemacs, VsCode, Code[iPad], WorkingCopy[iPad]
表达式: Expressions
图片: touchRetouch, auroraHDR, lensFlare, reflectStudio, superDenoising, Logoist, polarrPhoto, priimeStyles, tonality, QRFactory, Faceu, 美图秀秀
音频: permute3
视频: quickTime, gifox, gif brewery, gif maker, Hype3
3d: RealityComposer, Aurora3DMaker, 3dScanner, JigSpace, MagicPlan
笔记
信息: Notion, hugobook, Goodnotes, Notability, Prodrafts, OneNote[oneDrive]
双链: LogSeq, Obsidian, Roam
图: MarginNote, LiquidText, ThinkSpace
GTD:Fantastical2, Trello, MicrosoftToDo, Things3
记账: DayOne, 支付宝, MoneyPro, FamilyTree
代码: Snipaste, Cacher[github], lepton[github], dash, snippetsLap, textastic
休闲:
iPad: Chameleon, Frax, CoStudy
Mac: noizio, relaxMelodiesSeasions, earth3D
政务财务
APP: 个人所得税, 微店, 贝壳, 住这儿, 热力集团, 网上国网
依赖
#
系统:
文件: tree, unrar, unzip, 7z, diff, du
系统: ntfs-3g, os-prober, network-manager, wireless-tools, systemctl, service
包: yaourt, yay, pkgfile, snap
wps-office, ttf-wps-fonts
界面: awesome, i3-wm, arandr, xscreensaver, tmux, synergy, ibus, synaptics, pepper-flash, virtualbox
网络: chromium, firefox, thunderbird
ops:
shell: ^z, bg, fg, jobs, nohup, expect,
系统: sysdig, sysstat包(sar, sadf, mpstat, iostat, pidstat), ifconfig, top, htop, ps, df
网络: wireshark, netstat, ss, ping, telnet, iptables, wget, git, openssh, nc, nmap, nslookup
vpn: openvpn, shadowsocks, polipo, v2ray
vm: docker, docker-compose
db: mysql, mariadb, postgresql, redis, mongodb, cassandra, neo4j
elasticsearch, elasticsearch-head, elasticsearch-analysis-hanlp, elasticsearch-ik, elasticsearch-pinyin
mq: nsq, rabbitmq, kafka,
容器: nginx, nginx-php
监控: zipkin,
应用: dokuwiki, tiddlywiki, wordpress,
服务: vsftpd, filezilla
分布式: ansible
程序:
基本: make, cmake, g++, gcc, lua, ruby,
java: openjdk8, jdk8, jdk12, maven, tomcat
go: go1.9.3, go1.12.6, go1.13.5, probobuf, protoc
python: python2.7, python3.8, pip2, pip3
php: php-cgi, php-fpm
js: node, mvn, babel-cli
分析: flame-graph
媒体: dia, convert, import, alsamixer, mplayer
ide: vscode, sublime, emacs, vim
jetbrains: webstorm, goland, intellijIdea, phpstorm, pycharm, mps, android studio
eclipse: eclipse-inst, eclipse-birt, eclipse-jee-neon
数据库: datagrip, neoclipse, robo3t, studio-3t
测试: postman
工作: snapcast, mosquitto, sox, snapcastrd, websockify
系统
#
windows
#
# 方案
附件 -> 系统工具 -> 字符映射表 -> 新宋体 中查看汉字的unicode编码
远程协助
端口:3389
1.系统属性 远程
2.附件:远程连接
# xp:单用户,远程操作时原用户无法操作
chm 不显示内容
右键 -> 常规 -> 解锁
# 命令
route print
route delete
route add 0.0.0.0 mask 0.0.0.0 10.0.2.2
nstsc # 运程桌面
# cmd
CMD 属性
cmd /c dir 是执行完dir命令后关闭命令窗口。
cmd /k dir 是执行完dir命令后不关闭命令窗口。
cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。
cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。
语法命令
| findstr asdf # 相当于grep
CMD命令
1. gpedit.msc-----组策略
2. sndrec32-------录音机
3. Nslookup-------IP地址侦测器
4. explorer-------打开资源管理器
5. logoff---------注销命令
6. tsshutdn-------60秒倒计时关机命令
7. lusrmgr.msc----本机用户和组
8. services.msc---本地服务设置
9. oobe/msoobe /a----检查XP是否激活
10. notepad--------打开记事本
11. cleanmgr-------垃圾整理
12. net start messenger----开始信使服务(或其它服务)
13. compmgmt.msc---计算机管理
14. net stop messenger-----停止信使服务(或其它服务)
15. conf-----------启动netmeeting
16. dvdplay--------DVD播放器
17. charmap--------启动字符映射表
18. diskmgmt.msc---磁盘管理实用程序
19. calc-----------启动计算器
20. dfrg.msc-------磁盘碎片整理程序
21. chkdsk.exe-----Chkdsk磁盘检查
22. devmgmt.msc--- 设备管理器
23. regsvr32 /u *.dll----停止dll文件运行
24. drwtsn32------ 系统医生
25. rononce -p ----15秒关机
26. dxdiag---------检查DirectX信息
27. regedt32-------注册表编辑器
28. Msconfig.exe---系统配置实用程序
29. rsop.msc-------组策略结果集
30. mem.exe--------显示内存使用情况
31. regedit.exe----注册表
32. winchat--------XP自带局域网聊天
33. progman--------程序管理器
34. winmsd---------系统信息
35. perfmon.msc----计算机性能监测程序
36. winver---------检查Windows版本
37. sfc /scannow-----扫描错误并复原
38. taskmgr-----任务管理器(2000/xp/2003
39. winver---------检查Windows版本
40. wmimgmt.msc----打开windows管理体系结构(WMI)
41. wupdmgr--------windows更新程序
42. wscript--------windows脚本宿主设置
43. write----------写字板
44. winmsd---------系统信息
45. wiaacmgr-------扫描仪和照相机向导
46. winchat--------XP自带局域网聊天
47. mem.exe--------显示内存使用情况
48. Msconfig.exe---系统配置实用程序
49. mplayer2-------简易widnows media player
50. mspaint--------画图板
51. mstsc----------远程桌面连接
52. mplayer2-------媒体播放机
53. magnify--------放大镜实用程序
54. mmc------------打开控制台
55. mobsync--------同步命令
56. dxdiag---------检查DirectX信息
57. drwtsn32------ 系统医生
58. devmgmt.msc--- 设备管理器
59. dfrg.msc-------磁盘碎片整理程序
60. diskmgmt.msc---磁盘管理实用程序
61. dcomcnfg-------打开系统组件服务
62. ddeshare-------打开DDE共享设置
63. dvdplay--------DVD播放器
64. net stop messenger-----停止信使服务
65. net start messenger----开始信使服务
66. notepad--------打开记事本
67. nslookup-------网络管理的工具向导
68. ntbackup-------系统备份和还原
69. narrator-------屏幕“讲述人”
70. ntmsmgr.msc----移动存储管理器
71. ntmsoprq.msc---移动存储管理员操作请求
72. netstat -an----(TC)命令检查接口
73. syncapp--------创建一个公文包
74. sysedit--------系统配置编辑器
75. sigverif-------文件签名验证程序
76. sndrec32-------录音机
77. shrpubw--------创建共享文件夹
78. secpol.msc-----本地安全策略
79. syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
80. services.msc---本地服务设置
81. Sndvol32-------音量控制程序
82. sfc.exe--------系统文件检查器
83. sfc /scannow---windows文件保护
84. tsshutdn-------60秒倒计时关机命令
84. tsshutdn-------60秒倒计时关机命令
85. tourstart------xp简介(安装完成后出现的漫游xp程序)
86. taskmgr--------任务管理器
87. eventvwr-------事件查看器
88. eudcedit-------造字程序
89. explorer-------打开资源管理器
90. packager-------对象包装程序
91. perfmon.msc----计算机性能监测程序
92. progman--------程序管理器
93. regedit.exe----注册表
94. rsop.msc-------组策略结果集
95. regedt32-------注册表编辑器
96. rononce -p ----15秒关机
97. regsvr32 /u *.dll----停止dll文件运行
98. regsvr32 /u zipfldr.dll------取消ZIP支持
99. cmd.exe--------CMD命令提示符
100. chkdsk.exe-----Chkdsk磁盘检查
101. certmgr.msc----证书管理实用程序
102. calc-----------启动计算器
103. charmap--------启动字符映射表
104. cliconfg-------SQL SERVER 客户端网络实用程序
105. Clipbrd--------剪贴板查看器
106. conf-----------启动netmeeting
107. compmgmt.msc---计算机管理
108. cleanmgr-------垃圾整理
109. ciadv.msc------索引服务程序
110. osk------------打开屏幕键盘
111. odbcad32-------ODBC数据源管理器
112. oobe/msoobe /a----检查XP是否激活
113. lusrmgr.msc----本机用户和组
114. logoff---------注销命令
115. iexpress-------木马捆绑工具,系统自带
116. Nslookup-------IP地址侦测器
117. fsmgmt.msc-----共享文件夹管理器
118. utilman--------辅助工具管理器
119. gpedit.msc-----组策略
120. explorer-------打开资源管理器
其它
arp -a # 显示当前局域网ip与物理地址
net view # 显示局域网用户
nbtstat # 详细局域网用户
sfc /scannow # windows 文件检查器(修复系统)
shutdonw # 关机等一系列指令
# 注册表
使用UTC时间(兼容linux)
cmd> Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
# 工具
端口映射器
远程vpn代理到ssh
everything
文件快速搜索工具
远程访问电脑文件的服务器
花生壳
动态域名软件,已申请域名,ip经常变换时使用
xmanager
ssh工具
端口映射
portmap
xshell
secureCRT
Xmanager # 可运行图形界面如vnc
teamViewer # 可图形界面
cmder # windows命令行工具
网络
#
teamviewer
#
# 远程桌面
wireshark
#
# 抓包
charlet
#
# 抓包
mitmproxy
#
# 抓包
命令
mitmdump
mitmproxy
mitmweb
Burp Suite
#
# 抓包
fiddler
#
# 抓包
whistle
#
# 抓包
tcpdump
#
# 抓包
anyproxy
#
# 代理http/https
proxychains
#
# 代理
chrome
#
介绍
webkit: chrome firefox safari的内核,来源于kde的khtml与kjs
快捷键
ctrl + f5 无缓存刷新
f12 调试模式
调试模式
js调试
sources-> js文件打断点调试
# “{}”按钮是格式化代码,右边按钮单步调试,依次为执行, 跳过进入方法,进入方法,跳出方法,开启/停止调试,暂停
//# sourceURL=base.js
console
可以查看js常量,如THREE.VERSION
设置页
about:about # 进入查看所有设置页
chrome:extensions
chrome:flags # 可以开启硬件加速解码
集成抓包工具
chrome://net-internals/#events
chrome://net-export 导出文件,netlog-viewer.appspot.com分析
插件
ARC Welder # android模拟器
firefox
#
代理设置
“编辑”→“首选项”→“高级”→“网络”→“设置”→“手动配置代理”
mozvr
介绍
mozilla vr 虚拟现实
购买Oculus Rift头盔来看它的网页
数据分析
#
paraview
#
# 数据可视化
finreport
#
# 数据可视化
设计
#
sketch
#
# mac下轻量ui设计工具
rose
#
# ibm uml工具
开发
#
vim
#
sublime
#
功能
显示风格好
缩略图
热加载(不改变原文件)
插件
多文件夹查找
多视窗
命令模糊搜索下拉菜单
柜形选择
V8插件,js运行控制台
js校验
vi 操作设置
修改配色方案
快捷键
批量修改
idle
#
# python tkinter开发的python ide
lighttable
#
# clojure
hbuilder
#
# h5
komodo edit
#
# 免费跨平台,多pl
vscode
#
source insight
#
gerrit
#
# 查看代码
keil
#
# 嵌入式
客户端
#
datastudio
#
# ibm数据库连接工具
plsql
#
oracle sql developer
#
navicat
#
# ios的数据库操作gui
robo3t
#
# 原robomongo, 免费
studio3t
#
# mongodb, 收费
字体
#
中文等宽
Sarasa Mono SC
https://github.com/be5invis/Sarasa-Gothic
Oct 11, 2018
方案
#
user library发布
项目右键 -> properties -> Deployment Assembly -> add -> javaBuild Path Entries中选择发布包
tomcat设置发布到外部
new server -> 直接finish
右键server -> open
修改server location -> use Tomcat installation
修改server location -> deploy path为webapps
修改TimeOuts ->所有时间为1200
java版本
window -> preferences -> java -> compiler
window -> preferences -> java -> installed JREs
编码
general -> workspace
Text file encoding
general -> content types
Text -> java source file
defalt encoding输入UTF-8并点击update
快捷键
general -> editors -> keys
content assist # 代码提示
word comletion # 代码补全
插件
#
market place
http://www.eclipse.org/mpc/
在线网页
http://www.eclipse.org/mpc/archive.php
在线安装(luna)
http://download.eclipse.org/mpc/releases/1.3.0/
yum
eclipse-mpc
subclipse
yum
eclipse-subclipse
jdt java8 support
help -> market place -> find: java 8
java 8 support for eclipse
在线安装(kepler)
http://download.eclipse.org/eclipse/updates/4.3-P-builds/
网站
http://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler
m2e
在线
http://download.eclipse.org/technology/m2e/releases
mvn项目
#
创建web 项目
maven project
catalog: internal
filter:webapp
org.apache.maven.archetypes
项目右键 - new -> source folder
src/main/java
src/main/resources
src/test/java
src/test/resources
# 可以在navigator中创建, 再:
## 项目右键 -> buildpath -> configure... -> source -> add folder添加以上4个source folder
修改 configure build path -> source 中2个source folder中的output folder
src/main/java target/classes
src/main/resources target/classes
src/test/java target/test-classes
src/test/resources target/test-classes
修改 configure build path -> libraries -> jre system library -> edit
右键 -> properties ->java compiler -> 1.8
项目右键 -> run as -> maven install #下载依赖包
右键 -> properties -> project facets -> convert to faceted from
选中 dynamic web module
选中 java
右边选择runtime
下面further configuration available
content directory: src/main/webapp
勾选generate web.xml
右键 -> properties -> deployment assembly中配置文件发布路径
去掉test的目录
添加发布包maven dependencies
方案
修改项目名
o-> 修改project名
o-> 修改包名与test包名
o-> 修改配置文件, 类中的常量, (workspace配置文件[maven项目没有这些文件]) # ctrl + h 全局搜索(替换)
o-> mvn clean
o-> mvn install
o-> preferences -> web project settings -> context root中修改项目名称
集成spring
pom.xml中添加spring依赖
myEclipse
#
假错误(problem view中删掉)
目录结构
/Common/中存储的是jar包与配置
plugins/存放插件
features/存放外观
/MyEclipse 10/中
dropins/配置自定义插件
调整format一行最大字符数 Java — Code Style — Formatter — Active profile — Edit — Line Wrapping — Maximum line width
修改,自定义alt + / 模板 包括@anthor 等等 Java — Editor — Templates
修改编码:window --> General --> Workspace
Myeclipse --> files and editors
忽略校验:右键 --> myeclipse --> exclude from validation
package Explor 中可以go into 和 up 缩小和扩大显示范围
鼠标右键 -->Run As --> Run Configuration --> Arguments --> Program Arguments 设置运行传入的参数
new 中可以生成测试文件
window --> preferences --> MyEclipse --> validation --> disableAll 取消验证
Package Explorer中什么也不显示(进入了已经关闭的包时) --> navigator --> open project
或者{workspaces}\.metadata\.plugins\org.eclipse.ui.workbench\workbench.xml文件中
搜索<input factoryID="org.eclipse.ui.internal.model.ResourceFactory",把path的值改为"/"
其它原因:window --> reset perspective
Package Explorer 上的倒三角中:deselect working set
struts2配置myeclipse编写xml文件时的提示
## 约束文件的相对路径:struts-2.3.15.1\src\core\src\main\resources\struts2.0.dtd
## xml文件中声明的url:http://struts.apache.org/dtds/struts-2.0.dtd
## myeclipse中:window --> Preferences --> MyEclipse --> XML --> XML Catalog --> XML Catalog Entries 选中User Specified Entries --> 点击add
## Location中关联源码路径,Key Type 选择 URI,Key中写xml文件中声明的url
改变Package Explorer Vier中包的为分层显示方式:
Package Explorer 视窗中 --> 点击倒三角 --> Package Presentation --> hierarchical :
导入war文件:
新建webPorject --> File===》import==》General中选择Archive File --> Form archive file中选择要导入的项目.war -> 导入
ctrl + shift + t 关联源码快捷键
设置字体:eclipse preference-->Colors and Fonts-->basic-->Text Font-->edit
导入dtd/xsd约束文件:window -> preferences -> XmlCatalog -> add
dtd直接导入文件就可以了,xsd要在添加时key的选项中补上文件名
自定义jar包library目录
项目 右键:building path -> addLiber->user liber配置userLibery右键:building path -> addLiber->user liber配置userLibery
只是作了外部的引用,workspace中没有包,但是别人导入时会搜索同名的userLibery自动进行配置
改javaee版本
1.修改项目中的javaee包
2.项目工程目录/settings/org.eclipse.wst.common.project.facet.core.xml/中修改javaee版本
在线安装svn
Help -> install from site(Myeclipse2013) -> add -> url=http://subclipse.tigris.org/update_1.6.x
不选择 Subclipse -> Subclipse Integration for Mylyn 3.x , 其它全选
在线安装mylyn
同上,url(Myeclipse2013):http://download.eclipse.org/mylyn/snapshots/weekly
插件
#
myeclipse 2013 安装svn
help -> Install from Site ->add
name : Svn
Location : http://subclipse.tigris.org/update_1.6.x
或
http://subclipse.tigris.org/update
下一步
不要选择Subclipse选项下的Subclipse Integration for Mylyn 3.x(Optional)
一直下一步
本地安装svn插件
快捷键
#
alt /
ctrl shift f
# 代码格式化
alt enter
# 补全提示
f3
# 跳转到声明
f2 显示类或方法的全限定名
ctrl + h 多文件搜索
alt shift s
alt shift z :surround with
ctrl /
ctrl shift /
F5 F6 F7
ctrl alt 上下
alt 上下
alt shift x j :运行
ctrl 1 显示错误红线的处理方法
ctrl t 显示继承关系
ctrl 左右 跳过单词
ctrl 上下滚屏
ctrl l 定位
输入时直接点分号就可以跳到最后
ctrl alt / 写过内容补全
字符串最后敲回车可以自动加入 + '\n' ""
ctrl shift T openType 查找类关系
ctrl shift R 查找资源文件
alt shift A 矩形操作
alt 左右 返回代码上一层,进入代码下一层
ctrl o 获得outline
// TODO 标签
alt + shift + R 重构中的重命名
ctrl + shift + o 全局导包
ctrl + shift + m 局部导包
ctrl + shift + X 改为大写
ctrl + shift + g 查看方法被谁调用
ctrl + shift + h 输入类名,查看类继承关系
命令补全:syso main alt + /
代码抽取: alt + shift + M
代码自动生成get set alt + shift +s
代码自动生成 — 重写equals hashCode alt + shift + s
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用
Alt+/来代替)
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没
有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变味小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反
之)
下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift
开头的了)
Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力
)
Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)
Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V 移动函数和变量(不怎么常用)
Alt+Shift+Z 重构的后悔药(Undo)
编辑
作用域 功能 快捷键
全局 查找并替换 Ctrl+F
文本编辑器 查找上一个 Ctrl+Shift+K
文本编辑器 查找下一个 Ctrl+K
全局 撤销 Ctrl+Z
全局 复制 Ctrl+C
全局 恢复上一个选择 Alt+Shift+↓
全局 剪切 Ctrl+X
全局 快速修正 Ctrl1+1
全局 内容辅助 Alt+/
全局 全部选中 Ctrl+A
全局 删除 Delete
全局 上下文信息 Alt+?
Alt+Shift+?
Ctrl+Shift+Space
java编辑器 显示工具提示描述 F2
java编辑器 选择封装元素 Alt+Shift+↑
java编辑器 选择上一个元素 Alt+Shift+←
java编辑器 选择下一个元素 Alt+Shift+→
文本编辑器 增量查找 Ctrl+J
文本编辑器 增量逆向查找 Ctrl+Shift+J
全局 粘贴 Ctrl+V
全局 重做 Ctrl+Y
查看
作用域 功能 快捷键
全局 放大 Ctrl+=
全局 缩小 Ctrl+-
窗口
作用域 功能 快捷键
全局 激活编辑器 F12
全局 切换编辑器 Ctrl+Shift+W
全局 上一个编辑器 Ctrl+Shift+F6
全局 上一个视图 Ctrl+Shift+F7
全局 上一个透视图 Ctrl+Shift+F8
全局 下一个编辑器 Ctrl+F6
全局 下一个视图 Ctrl+F7
全局 下一个透视图 Ctrl+F8
文本编辑器 显示标尺上下文菜单 Ctrl+W
全局 显示视图菜单 Ctrl+F10
全局 显示系统菜单 Alt+-
导航
作用域 功能 快捷键
java编辑器 打开结构 Ctrl+F3
全局 打开类型 Ctrl+Shift+T
全局 打开类型层次结构 F4
全局 打开外部javadoc Shift+F2
全局 打开资源 Ctrl+Shift+R
全局 后退历史记录 Alt+←
全局 前进历史记录 Alt+→
全局 上一个 Ctrl+,
全局 下一个 Ctrl+.
java编辑器 显示大纲 Ctrl+O
全局 在层次结构中打开类型 Ctrl+Shift+H
全局 转至匹配的括号 Ctrl+Shift+P
全局 转至上一个编辑位置 Ctrl+Q
java编辑器 转至上一个成员 Ctrl+Shift+↑
java编辑器 转至下一个成员 Ctrl+Shift+↓
文本编辑器 转至行 Ctrl+L
搜索
作用域 功能 快捷键
全局 出现在文件中 Ctrl+Shift+U
全局 打开搜索对话框 Ctrl+H
全局 工作区中的声明 Ctrl+G
全局 工作区中的引用 Ctrl+Shift+G
文本编辑
作用域 功能 快捷键
文本编辑器 改写切换 Insert
文本编辑器 上滚行 Ctrl+↑
文本编辑器 下滚行 Ctrl+↓
文件
作用域 功能 快捷键
全局 保存 Ctrl+X
Ctrl+S
全局 打印 Ctrl+P
全局 关闭 Ctrl+F4
全局 全部保存 Ctrl+Shift+S
全局 全部关闭 Ctrl+Shift+F4
全局 属性 Alt+Enter
全局 新建 Ctrl+N
项目
作用域 功能 快捷键
全局 全部构建 Ctrl+B
源代码
作用域 功能 快捷键
java编辑器 格式化 Ctrl+Shift+F
java编辑器 取消注释 Ctrl+\
java编辑器 注释 Ctrl+/
java编辑器 添加导入 Ctrl+Shift+M
java编辑器 组织导入 Ctrl+Shift+O
java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。
也可以使用Ctrl+1自动修正。
运行
作用域 功能 快捷键
全局 单步返回 F7
全局 单步跳过 F6
全局 单步跳入 F5
全局 单步跳入选择 Ctrl+F5
全局 调试上次启动 F11
全局 继续 F8
全局 使用过滤器单步执行 Shift+F5
全局 添加/去除断点 Ctrl+Shift+B
全局 显示 Ctrl+D
全局 运行上次启动 Ctrl+F11
全局 运行至行 Ctrl+R
全局 执行 Ctrl+U
重构
作用域 功能 快捷键
全局 撤销重构 Alt+Shift+Z
全局 抽取方法 Alt+Shift+M
全局 抽取局部变量 Alt+Shift+L
全局 内联 Alt+Shift+I
全局 移动 Alt+Shift+V
全局 重命名 Alt+Shift+R
全局 重做 Alt+Shift+Y
jrebel
#
介绍
热加载
使用:
myeclipse根目录下配置自定义 插件
window -> preferences -> JRebel中关联jar包,设定自动部署时间
window -> preferences -> services -> tomcat -> tomcat6(可以配置是否启用jrebel和打印jrebel的日志)->jdk 加上资源分配参数与tomcat要加载的jar包:
-noverify -javaagent:D:\(修改为自己的目录)\jrebel.jar -Xmx512M -Xms512M -XX:MaxPermSize=1024m
项目右键jrebel生成reble.xml,其中配置rebel要管理的项目在tomcat中的路径
Oct 10, 2018
持续集成(CI/CD)
#
# Continuous Integration(持续集成), Continuous Delivery(持续部署)
Jenkins
容器
#
docker
containerd
虚拟化
#
vagrant
# 自动化虚拟机配置
parallels desktop
# 苹果
xen
gnome boxes
hyper-v
# 微软
KVM
#
介绍
kernel-based virtual machine, 使用linux自身的调度器进行管理,所以代码较少
# 又叫qemu-system或qemu-kvm
虚拟化需要硬件支持(如 intel VT技术或AMD V技术),是基于硬件的完全虚拟化
原理
包含一个可加载的内核模块kvm.ko, 由于集成在linux内核中,比其他虚拟机软件高效
使用
检查系统是否支持硬件虚拟化
egrep '(vmx|svm)' --color=always /proc/cpuinfo
VMware
#
安装
安装后会创建两个虚拟网卡
设置
edit -> preferences -> Hot Keys 设置退出快捷键
网络连接方式
1.vm9自带的virtual network editor中选择桥接到有线网卡
2.vm -> setting -> network adapter选项设置
bridged(桥接):与主机平等,可以设置为同一个网段相互访问
nat:通过虚拟网卡连接主机,共享网络
host-only:单机模式
VirtualBox
#
网络连接
|
NAT |
Bridged Adapter |
Internal |
Host-only Adapter |
虚拟机->主机 |
√ |
√ |
× |
默认不能,需设置 |
主机->虚拟机 |
× |
√ |
× |
默认不能,需设置 |
虚拟机->其他主机 |
√ |
√ |
× |
默认不能,需设置 |
其他主机->虚拟机 |
× |
√ |
× |
默认不能,需设置 |
虚拟机间 |
× |
√ |
同网络可以 |
√ |
方案 |
|
|
|
|
linux安装增强iso |
|
|
|
|
iso位置 |
|
|
|
|
/usr/share/virtualbox |
|
|
|
|
编译环境 |
|
|
|
|
kernel-devel |
|
|
|
|
gcc |
|
|
|
|
共享剪切板与拖拽文件
虚拟机启动后devices下设置
共享文件夹
linux下挂载
mount -t vboxsf 共享名 /mnt/share
windows下挂载
我的电脑 右键 映射网络驱动器
clone
clone 时选择更新mac,并在虚拟机中网络连接设置中重写mac与ip
配置主机间ssh免登录,远程ssh与所有主机免登录
PaaS
#
OpenStack
DevOps
#
自动化运维
#
tty.js
# 浏览器运行命令
jenkins
# java实现的持续集成工具
saltstack
# 部署, 自动化运维
puppet
# 自动化运维
selenium
# 自动化运维
chef
Ansible
#
# python实现的自动化部署工具
模式
ad-hoc # 批量命令
playbook # 任务编排,执行yml文件
安装
pip install ansible
配置
优先级
export ANSIBLE_CONFIG=/etc/ansible.cfg
~/.ansible.cfg
/etc/ansible.cfg
ansible.cfg
inventory = /etc/ansible/hosts
library = /usr/share/ansible
forks = 5
sudo_user = root
remote_port = 22
host_key_checking = False
timeout = 60
log_path = /var/log/ansible.log
hosts
[mysql_test]
192.168.0.1
192.168.0.2
命令
ansible
通配符
10.1.1.113
'*'
all
-m
command # 执行命令
-a 'uptime'
file # 操作文件
-a "dest=/tmp/t.sh mode=755 owner=root group=root" # 改属性
-a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link" # 软链接
-a "path=/tmp/resolv.conf state=absent" # 删除软连接
copy
-a "src=/a.cfg dest=/tmp/a.cfg owner=root group=root mode=0644"
cron # 定时任务
-a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 172.16.254.139"'
group # 操作组
-a 'gid=2017 name=a' # 创建组
user # 操作用户
-a 'name=aaa groups=aaa state=present' # 创建用户
-a 'name=aaa groups=aaa remove=yes' # 删除用户
yum
-a "state=present name=httpd"
service
-a 'name=httpd state=started enabled=yes' # 开机启动
ping
script
-a '/root/test.sh'
shell
-a 'ps aux|grep zabbix'
raw # 同shell
get_url
-a 'url=http://10.1.1.116/a.ico dest=/tmp' # 下载
synchronize
-a 'src=/root/a dest=/tmp/ compress=yes' # 推送
o-> 例子
ansible '*' -m command -a 'uptime'
ansible-doc # 文档
ansible-galaxy # 上传/下载模块
ansible-playbook # 任务编排
ansible-pull # 拉配置
ansible-vault # 文件加密
ansible-console # REPL
资源管理
#
文档管理
#
Confluence
Git Wiki
版本
#
mercurial
# 简称hg,分布式版本控制系统,比git好
clearQuest
# IBM Rational提供的缺陷及变更管理工具。它对软件缺陷或功能特性等任务记录提供跟踪管理。提供了查询定制和多种图表报表。
clearcase
# 配置管理的工具,只是SCM管理工具其中的一种。是RATIONAL公司开发的配置管理工具
spm
# 构建sea.js项目
bower
# 构建前端
redmine
Gradle
#
介绍
基于dsl(Groovy)声明项目自动化构建
环境
命令
gradle
-q # --quiet, 只显示error
init
--type pom # 转换maven项目
wrapper # 生成可独立运行的打包脚本gradlew和gradlew.bat
配置
build.gradle
task hello {
doLast {
println 'Hello world!'
}
}
task hello << {
println 'Hello world!'
}
buildscript{}
allprojects{}
subprojects{}
settings.gradle
rootProject.name = 'choice-scm'
include 'choice-scm-dao'
gradle.properties
org.gradle.parallel=true # 开启并行编译
org.gradle.daemon=true # 守护线程,在第一次编译时开线程并保持
org.gradle.configureondemand=true # 用新的孵化模式,加快编译
org.gradle.caching=true # 启用缓存
org.gradle.warning.mode=none # 屏蔽warning
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Git
#
目录结构
.git
branches
config # 存放版本库git地址
规定
HEAD
# HEAD的版本号, HEAD^^ 表示HEAD之前两个的版本, HEAD~n 表示之前n个版本
buffered stage branch head
# buffered表示当前修改所在的版本,stage是buffered中文件add之后到的版本,branch是stage commit后到的分支(版本),head是远程仓库的最新版本
工作流程
fork + pull / merge request 更新代码
commit message, pr messsage 提交说明
pr是功能展示,前面加"WIP:"
user.name, user.email用公司的
pr必需有人review, assign到人, 推动review
pr不要大
命令
git [command] --help
git help submodule
设置
config
--global http.proxy 'http://127.0.0.1:8123'
仓库
clone
checkout # 切换到分支。检出原有文件替换
-b # 创建并切换到分支
branch # 创建并切换到分支
-r # 指定操作远程分支
-r origin/dev
-a # 本地远程所有分支
dev ef71 # 从ef71创建分支dev
dev
-d dev # 删除
-D dev # 强制删除
remote
remove origin
show # 显示仓库
prune origin # 删除远程没有而本地缓存的远程分支
add origin git@bitbucket.org:outrun/www2.git
# 设置仓库
set-url origin git@github.com:outrun/jeky
# 设置仓库url
fetch # pull加merge
pull origin master
--allow-unrelated-histories
# 本地有已存文件时,强行pull并检查冲突
merge dev # 合并dev到当前分支
--squash dev-bak # dev-bak改动写到stash
push origin master
-u origin master # 设定git push 默认参数
origin :dev
# origin +dev:dev
# 强制替换掉原来版本
commit # stage 提交到branch
-a # 提交删改,忽略增加
-m # 注释
--amend # 合并到上次commit
revert
git commit -am 'revert'
git revert revertid1 取消上次revert
# ideaIDE操作 - local history - revert
示例
revert -m 1 ea1 # 舍弃最近一次commit
rebase master # 相当于当前改动代码之前merge master
reset
--hard ea1 # 回退
stash # 暂存buffered
list # 显示stash
drop # 删除暂存
pop # 恢复并删除暂存
apply stash@{0} # 恢复暂存
tag
-a tag1 # 添加tag1
-m 'a' # 注释
-d tag1 # 删除tag1
示例
git tag -a v1.0.1 -m 'a' e67
show tag1 # 查看tag1的信息
文件
add
-A # 递归
mv a b # 重命名
rm # buffered和stage中都删除
--cached # 只删除git stage中文件, 不实际删
log # HEAD到指定版本号之前的log
--oneline # 每个记录显示一行
--stat # 文件名差异
-p # 细节差异
-2 # 文件最近2次差异
reflog # 包括reset前的版本号
diff master dev # 对比分支差异,可指定到文件。默认对比buffered和stage的差异
--cached # 对比stage和branch的差异
ls-files
-u # 显示冲突文件
-s # 显示标记为冲突已解决的文件
--stage # stage中的文件
submodule
init # 初始化本地配置文件
update
--init --recursive # 同步项目中的submodule
设置
.gitignore
.git/config
~/.gitconfig
[commit]
template=/t.txt
# 每次commit会打开模板
代理
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
git config --global --unset http.proxy
git config --global --unset https.proxy
子模块
.gitmodules
[submodule "a"]
path = a
url = ssh://a.git
git submodule update --init --recursive
方案
回退commit
git reset --hard ea1
# 进行回退
git push -f
# 强制提交
git clean -xdf
# 一般配合git reset使用, 清除已有的改动
补充commit
git commit --amend
git push origin +a:a
合并commit
git rebase -i cf7e875 # 合并Head到cf7e875 commit
修改rebase记录
pick xxxx
s yyyy
s zzzz
git status # 查看冲突
git add . # 解决冲突提交
git rebase --continue
修改commit记录
远程回退
git revert id
忽略文件
git add 逆操作
git rm --cached a
远程保留,忽略本地
git update-index --assume-unchanged a
恢复 git update-index --no-assume-unchanged a
远程删除,忽略本地
git rm --cached a
恢复 git add -A a
远程不论,忽略本地
.gitignore
删本地分支
git branch -D test
删除远程分支
git push origin --delete test
或
git branch -r -d origin/test
git push origin :test
恢复历史版本文件
git reset ba5798aff7778c95252b9e01e924dddb5811bcd7 courseModel.js
git checkout -- courseModel.js
git push origin +master:master # 提交回退版本到远程
查看修改的内容
git show
# 与上个commit 比较
git whatchanged
git log --stat --date=relative
删除历史
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch .idea' --prune-empty --tag-name-filter cat -- --all
git push origin main --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
合并commit历史
git branch test-bak
git reset --hard ea1
git merge --squash test-bak
git push origin test -f
git branch -D test-bak
打tag
git tag # git tag -l 'v1.*' 通配查找
git tag -a v1.0 -m "a" # git tag -a v1.0 ba1 给commit打标签
git tag -a v1.0 -m "a" ea1 # 指定commit
git show v1.0
git checkout v1.0
git push origin v1.0 # git push origin -tags 将本地所有标签提交
git tag -d v1.0
git push origin --delete tag v1.0
# git push origin :refs/tags/v1.0c
查tag的commit
git show 1.4.1
git log --pretty=oneline 1.4.0 1.4.1
fork跨网站git
git remote add upstream git@github.com:xuyuadmin/xxljob.git
git fetch upstream
git merge upstream/master --allow-unrelated-histories
文件损坏错误error object file is empty
find .git/objects/ -type f -empty | xargs rm
git fetch -p
git fsck --full
统计某人代码
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
统计所有人代码
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
共添加或修改行数
git log --stat|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/'
pr
介绍
fork与pull request
fork后本地
git clone git@github.com:chenduo/auth.git
git remote add upstream git@github.com:Meiqia/auth.git
git merge upstream/main
git push origin main
本地合并更新
git checkout master
git fetch upstream
# fetch远程仓库
git rebase upstream/master
# 合并远程master
git push
git checkout branch1
git rebase master
pr追加
git commit --amend
# 更新本地的本次commit,不产生新的commit
git push origin +branch1:branch1
# 使用本地的commit覆盖远程分支的有问题的commit
处理pr
git fetch origin
git checkout -b pr1 origin/pr1
git checkout master
git merge --no-ff pr1
git reset --hard
git revert -m 1 ea1
# 舍弃pr
git commit -am 'revert'
git revert revertid1 取消上次revert
# intellji - local history - revert
git push origin master
开发
提交
git pull eoecn dev
# 等于git fetch加git merge
git diff
# buffer与HEAD的差异(不包括新建文件)
git add -A .
# 添加到stage
git status
# stage与HEAD的差异
git diff --cached/--stage
# stage与HEAD的详细差异
git diff HEAD
# buffer, stage与HEAD的详细差异
git commit -am 'a'
git push origin dev
网站上点pull request
代码审查
git blame -L 60,60 [filename]
git blame -L 60,60 --reverse 5534e1b4b..HEAD [filename]
# 版本范围内某行代码提交记录
git show [commit id]
github
ssh -T git@github.com
# 检查github ssh是否设置成功
插件
octotree # 树形显示
SVN
#
linux下移植的版本控制器
默认端口: 3690
## 目录结构
conf:配置文件
db:数据库
hooks:勾子(自定义功能)
locks:文件锁
## 命令
### 服务器
svn --version
svnadmin create c:\svn # 创建仓库
## hooks勾子 locks锁 conf db
svnserve -h
svnserve -d -r c:\svn # 启动服务(-d是后台运行,windows不支持,需要创建服务)
## --listen-port 3691 指定监听端口
windows 下注册服务
sc create 服务名 binPath= "d:/suversion/bin/svnserve --service -r c:\svn" displayName= "显示名"
# 注意双引号前面要有空格
sc delete 服务名
使用多个仓库
svnadmin create d:\svn2 创建仓库以后
svnserve -d -r d:\svn2 --listen-port 3691 配置用另一个服务端口启动该仓库 # svn默认启动端口是3690
svn://192.168.10.3:3691 来访问该仓库
#### 客户端
添加项目
svn add test/
svn ci -m "first" # svn commit -m "fisrt"
## ci是checkin
检出
svn checkout svn://192.168.0.2/framework
显示所有分支(目录)
svn ls svn://192.168.0.2/fr --verbose
创建分支
svn copy svn://192.168.0.2/repo/trunk/ svn://192.168.0.2/repo/branches/try-sth -m 'make branch try-sth'
# 注意trunk后面要有/
更换本地分支
svn switch svn://192.168.0.2/repo/branches/try-sth
## 配置
conf/svnserve.conf
anon-access = read # 匿名用户权限
auth-access = write # 登录用户权限
# write权限包括read权限
# none没有验证无权限(匿名权限)
password-db = passwd # 加载conf/passwd文件(中的用户帐户)
authz-db = authz #开启权限控制
同目录authz文件中配置权限
[/] # 对根目录设置权限
* = r # 所有人都可读
outrun = rw # 配置所有版本库只读,outrun可读可写
@admin = rw # @组名 对组进行引用
realm = aa
# 认证域名称, 本svn路径为 svn://192.168.0.2/aa
conf/authz
conf/passwd
[groups]
admin = outrun
例子
authz
[groups]
admin = a1, a2
[/]
@admin = rw
a3 = rw
* = r
passwd
[users]
a1 = 123
a2 = 123
a3 = 123
svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = trunk
force-username-case = none
## 工具
tortoiseSVN
下载
右键 svn checkout 选择版本 下载 (show log 查看日志)
上传
第一次提交 右键 tor.../import
svn://192.168.10.188 # 输入用户名、密码登录
第二次提交 右键 commit
还原
右键 tor.../Revert 还原其中的文件
多人
右键 svn update ,更新另一个人提交的文件内容
新建文件的提交
tor../add 或 commit的时候选择该文件
tor./Repo-browser,浏览仓库
加锁文件 # 只有自己在不提交更改的前提下才可以解锁
tor../get lock # 不会改变版本
tor../release lock # 解锁,但是新下载的工程不可以再解锁,如果删除原工程则无法解锁
冲突
当前版本已经有人修改后commit的话提示版本已经过时
update:下载所有版本,右键 tor../edit conflicts -> mark as resolved确定解决
# 避免冲突:减少公共修改时间,重写前更新
使用经验
TortoiseSVN -> Setting -> Saved Data 可以清空自动登录
svn的myeclipse插件:
# eclipse6中不能用,eclipse7每次报错,能用,eclipse8报错一次,能用 eclipse10不报错
1.复制插件文件夹features与plugins到/myeclipse 10/dropins/文件夹中
2.创建目录/myeclipse 10/my_plugin/svn/
复制插件文件夹features与plugins到/myeclipse 10/my_plugin/svn/文件夹中
/myeclipse 10/dropins/添加svn.link文件 ,内容为:path=my_plugin\\svn # 这里写相对路径
3.使用:重启myeclipse,弹出确认窗口(也可以从window -> show view中找到svn的视图)
项目:右键->share project 上传项目到svn(bug 第一次只上传空文件夹,再右键Team/提交 时上传项目文件)
再右键就可以对该项目进行一系列的操作了
导入项目:file -> import -> svn
rapidsvn
Ant
#
功能
js压缩
自动发布
build.xml
示例
<?xml version="1.0" encoding="UTF-8"?>
<project default="execute">
<target name="compile">
<javac destdir="." srcdir="."/>
</target>
<target name="execute" depends="compile">
<java classpath="." classname="HelloWorld"/>
</target>
</project>
Maven
#
仓库
mvnrepository.com
依赖范围
compile # 默认,对编译、测试、运行有效
test # 对测试有效
runtime # 对测试和运行有效
provided # 编译和测试有效
system # 本地仓库
import
源
阿里云maven: https://maven.aliyun.com/mvn/view
mvn # 相当于mvn compile
全局
-version # 版本
-e # 错误详情
help:describe # help插件的describe
-Dplugin=help # 显示help插件的详情
-Dfull # 显示完整参数
help:effective-pom # 显示默认设置
生成
archetype:create # 创建java项目
-DgroupId=com.outrun
-DartifactId=erp
-Dversion=0.0.1-SNAPSHOT
-DarchetypeArtifactId=maven-archetype-webapp # 指定模板为webapp
archetype:generate # 向导创建项目
site # 产生html文档
source:jar # 源码打包
generate-sources # 生成源码, 如xdoclet
eclipse:eclipse # 生成或转化成eclipse工程
eclipse:clean # 清除eclipse设置
idea:idea # 生成idea项目
install # compile, package后, 保存到本地仓库
-X # 显示依赖
-Dmaven.test.skip=true # 跳过测试
-rf 模块名 # 从指定模块从新开始
执行
validate # 项目验证
verify # 验证包
compile # 编译
exec:java # 编译完成后,执行java main方法
test-compile # 编译测试代码
test # 运行测试
-skipping # 跳过
compile # 不编译
test-compile # 不编译测试
integration-test # 集成测试
package # 打包
-Dmaven.test.skip=true # 跳过单元测试,不编译
-DskipTests # 跳过单元测试,编译
clean # 清除编译
install-U # 强制更新
package # 编译成jar包
deploy # install后, 上传
jar:jar # 打jar包
插件
jetty:run # 引入jetty-plugin后, 运行jetty
tomcat:run
分析
dependency:list # 列出依赖
dependency:tree # 列出依赖树
dependency:analyze # 依赖分析, 未使用的做标记
dependency:resolve # 列出已解决的依赖
dependency:sources # 下载源码
dependency:copy-dependencies # 得到jar包
常用
分析包依赖
mvn dependency:tree -Dverbose -Dincludes=org.apache.commons:commons-lang3
清理打包文件
mvn clean package -DskipTests
idea工具
打包了带main方法的jar不能引用
在父项目运行mvn package, model中运行会找不到其它model
model运行前先mvn package
手动添加依赖
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar -Dfile=ojdbc7.jar
配置
<groupId> # 包名
<artifactId> # 项目名
<version>
<packaging> # 打包方式, war, jar
<parent> # 父模块
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
</properties>
<dependencies> # 子模块继承
<dependency>
<groupId>
<artifactId>
<version>
LATEST
${spring-cloud.version} #引用properties中定义的变量
<scope> # 何时使用
compile
provided # 类似compile
runtime
test
system
</dependency>
</dependencies>
<dependenciesManager> # 子模块不继承, 继承时需要声明
<dependencies>
</dependenciesManager>
<build>
<plugins>
<plugin>
<groupId>
<artifactId>
</plugin>
</plugins>
</build>
插件
介绍
按顺序执行,完成maven生命周期
无配置时调默认插件
生命周期(lifecycle)顺序
clean # 清除target目录
resources # 复制resources下文件到target/classes
complie # 包含resources, 编译java下文件到target/classes
testResources # 复制test/resources下文件到target/test-classes
testCompile # 包含testResources, 编译test/java下文件到target/test-classes
test # 包含resources, compile, testResources, testCompile, test
package
jar # 打包class文件, 配置文件, 不打包lib
install
maven-clean-plugin
maven-resources-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<resources>
<resource>
<directory>src/main/${deploy.env}/applicationContext.xml</directory>
<excludes>
<exclude>WEB-INF/*.*</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
<inherited></inherited>
</execution>
</executions>
</plugin>
maven-compiler-plugin
maven-surefire-plugin # 对应test, 单元测试
maven-dependency-plugin # 打包lib
maven-jar-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.xxx.xxxService</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin> # 单独打包lib
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven-assembly-plugin # 打包lib, 有bug缺失spring xds文件, 同级jar会冲突
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.xxx.xxxService</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven-shade-plugin # 打包lib, 同级jar会冲突, 提示SF,DSA,RSA冲突,排除META-INF相关文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.tooling</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.xxx.xxxInvoke</mainClass>
</transformer>
</transformers>
<minimizeJar>true</minimizeJar>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
</execution>
</executions>
</plugin>
maven-install-plugin
spring-boot-maven-plugin
gradle-maven-plugin
protobuf-maven-plugin
build-helper-maven-plugin # 用于指定自定义目录
dockerfile-maven-plugin # root用户直接打包到docker images
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<configuration>
<repository>${project.artifactId}</repository>
<contextDirectory>./</contextDirectory>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>mqtt/target/*.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
./Dockerfile
FROM primetoninc/jdk:1.8
#ADD mqtt/target/*.jar app.jar
ARG JAR_FILE
COPY ${JAR_FILE} /opt/app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
mvn package dockerfile:build
方案
新项目安装
mvn clean install -DskipTests
mvn install -rf :模块名 -DskipTests # 指定模块开始
ojdbc14本地加载
# oracle是收费的,所以不能直接下载到驱动
o-> mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=ojdbc14-10.2.0.4.0.jar
o-> 把ojdbc14-10.2.0.4.0.jar复制到目录下: /home/outrun/.m2/repository/com/oracle/ojdbc14/10.2.0.4.0/
o-> /home/outrun/.m2/repository/com/oracle/ojdbc14/下会产生maven-metadata-local.xml文件存放maven引入依赖
o-> 项目中引入本地依赖
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
代理
复制$M2_HOME/conf/settings.xml到.m2/
settings.xml
<proxies>
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>localhost</host>
<port>8123</port>
<!--
<username>admin</username>
<password>admin</password>
<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
-->
</proxy>
</proxies>
代码
#
github
bitBucket
gitee.com
# 码云
sentry
# 产品error tracing
gerrit
# code review 工具
coverallx
# github上项目的coverage测试覆盖率条目由它提供服务
circleCI
# github代码测试
travis-ci
# 利用github hook测试
fitness
# 自动单元测试
coverity
# 代码静态检查
www.webpagetest.org
# 测试网站性能
GitLab
#
仓库
#
Nexus
#
# maven, npm, go, docker, yum等
JFrog
#
# 全语言二进制仓库
CMDB
#
# configuration management database
Bt-Panel
#
# 宝塔面板,服务器运维面板
JumpServer
#
# 跳板机
功能
#
认证
#
SSH(Secure Shell)
#
特点
1.加密和压缩:http与ftp都是明文传输
2.ssh有很多子协议,实现不同功能:如sftp,scp
3.端口:22
配置
修改ip地址:
有虚拟机时:先设置虚拟机的连接方式是桥接
图形界面直接修改(或重启到root用户的图形界面修改)
命令修改
/etc/network/interfaces
auto eth0
iface eth0 inet static
address ip地址
netmask 子网掩码
gateway 网关
broadcast 广播地址
dns-nameservers DNS
重启网络服务:/etc/init.d/networking restart,
/etc/ssh/sshd_config
PasswordAuthentication no
# 关闭密码登录
PermitRootLogin no
# 关闭root登录
命令
ssh outrun@10.1.1.1
# -p 22 端口
# PubkeyAuthentication=no 不公钥登录
免登录
ssh-keygen -t rsa
# 一直回车,生成~/.ssh/id_rsa 与 id_rsa.pub两个文件
ssh-copy-id -i 192.168.56.11
# 这样就可以免登录访问192.168.56.11了
## ssh-copy-id -i localhost 免登录自己
或
把A机下的1中生成的id_rsa.pub的内容复制到B机下,在B机的.ssh/authorized_keys文件里,这样可以多个主机对B机进行免登录
sshpass
介绍
命令行密码登录
命令
sshpass -p zlycare@123 ssh zlycare@10.162.201.58
OpenVPN
#
安装
yum install openvpn easy-rsa lzo lzo-devel openssl openssl-devel -y
或编译安装openvpn
mkdir –p /usr/local/openvpn && cd /usr/local/openvpn/
./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
make
make install
生成证书
目标
服务器: ca.crt、server.key、server.crt、dh.pem
客户端: ca.crt、client.key、client.crt
查找模板
find / -name "vars.example" -type f # vars文件
find / -name "server.conf" -type f # server.conf文件
进入目录easy-rsa
cd /usr/local/openvpn/openvpn-2.0.9/easy-rsa/2.0/
cd /usr/share/easy-rsa/3.0.3/
设置vars
cp vars.example vars
vars文件
set_var KEY_COUNTRY="CN"
set_var KEY_PROVINCE="BJ"
set_var KEY_CITY="Beijing"
set_var KEY_ORG="linux"
set_var KEY_EMAIL="test@example.net"
# set_var EASYRSA_NS_SUPPORT "yes" # 客户端配置ns-cert-type server时配置
生成server文件
# 配置文件在/etc/easy-rsa或 .../openvpn/easy-rsa
rm -rf pki
./easyrsa init-pki # pki目录
./easyrsa build-ca nopass # 回车过, 生成ca.crt
./easyrsa gen-req vpnserver nopass # 回车过, 生成vpnserver.key, vpnserver.req(密钥对、证书请求文件)
./easyrsa sign server vpnserver # 生成vpnserver.crt(ca.crt与vpnserver.req签名)
./easyrsa gen-dh # 生成dh.pem(diffie hellman)
cp -r ../3.0.3/ ~
生成client文件
rm -rf pki
./easyrsa init-pki
./easyrsa gen-req client nopass # 回车过, 生成client.key, client.req
cp pki/reqs/client.req ~/3.0.3/pki/reqs/
cp pki/private/client.key ~/3.0.3/pki/private/
cd ~/3.0.3
./easyrsa sign client client # 生成client.crt(ca.crt与client.req签名)
移动server文件到openvpn配置目录
cp pki/{ca.crt,dh.pem} /etc/openvpn/server/
cp pki/private/vpnserver.key /etc/openvpn/server/
cp pki/issued/vpnserver.crt /etc/openvpn/server/
cp server.conf /etc/openvpn/server
下载client文件
pki/ca.crt
pki/private/client.key
pki/issued/client.crt
server.conf
cp -p ../../sample-config-files/server.conf /etc/openvpn
o-> server.conf
;local 172.21.223.196
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 192.168.200.0 255.255.255.0
ifconfig-pool-persist ipp.txt
;client-config-dir "C:\\Program Files\\OpenVPN\\ccd" # 支持TLS client
push "route 0.0.0.0 0.0.0.0"
keepalive 10 120
cipher AES-256-CBC
comp-lzo # 减少带宽
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
explicit-exit-notify 1 # 只能udp协议使用
sudo openvpn --config /etc/openvpn/server.conf --daemon
netstat -anulp | grep 1194
linux配置
iptables
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 # 开启路由转发
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j SNAT --to-source 45.55.56.16
firewall
firewall-cmd --add-service=openvpn --zone=public --permanent
firewall-cmd --reload
client配置
o-> client.ovpn
client
dev tun
proto udp
remote 45.55.56.16 1194
resolv-retry infinite
nobind
ca ca.crt
cert client.crt
key client.key
;ns-cert-type server
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
verb 3
mute 20
sudo openvpn --config client.ovpn
# --user outrun
# --auth-nocache
# askpass pass.txt 放密码到文件
o-> 免密码连接
#!/usr/bin/expect -f
spawn sudo openvpn --config /home/outrun/.openvpn/meiqia-vpn-ldap.ovpn
# match_max 100000
expect "*?assword*:*"
send -- "1234\n"
expect "*Username:*"
send -- "outrun\n"
expect "*Password:*"
expect "#"
案例
代理http上网 # tcp连接国内服务器会被reset
server.conf
dev tap
proto tcp
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 8.8.8.8"
client-to-client
;explicit-exit-notify 1
client.ovpn
dev tap
proto tcp
改成用户名密码认证
服务器
server.conf
auth-user-pass-verify /etc/openvpn/server/checkpsw.sh via-env
verify-client-cert none
username-as-common-name
tls-auth /etc/openvpn/server/ta.key 0
script-security 3
checkpsw.sh
#!/bin/sh
PASSFILE="/etc/openvpn/server/user/psw-file"
LOG_FILE="/etc/openvpn/server/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
chmod 645 checkpsw.sh
mkdir user
mkdir log
user/psw-file
outrun asdfasdf
openvpn --genkey --secret ta.key
客户端
下载ta.key
client.ovpn
;cert client.crt
;key client.key
auth-user-pass
tls-auth ta.key 1
Shadowsocks
#
安装
sudo yum -y install epel-release
sudo yum -y install python-pip
sudo pip install --upgrade pip
sudo pip install shadowsocks
服务器
server.json
{
"server":"0.0.0.0",
"server_port":443,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"asdfasdf",
"timeout":300,
"method":"aes-256-cfb",
"fast_open":false,
"workers":5
}
ssserver -c server.json -d start
中继代理
client.json
{
"server":"47.74.230.238",
"server_port":443,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"asdfasdf",
"timeout":300,
"method":"aes-256-cfb"
}
sslocal -c client.json
协议转换
安装polipo
/etc/polipo/config
logSyslog = false
logFile = "/var/log/polipo/polipo.log"
socksParentProxy = "127.0.0.1:1080"
socksProxyType = socks5
chunkHighMark = 50331648
objectHighMark = 16384
serverMaxSlots = 64
serverSlots = 16
serverSlots1 = 32
proxyAddress = "0.0.0.0"
proxyPort = 8123
polipo -c /etc/polipo/config
客户端
switchOmega
SOCKS5 127.0.0.1 1080
http 127.0.0.1 8123
环境变量
export http_proxy=http://127.0.0.1:8123
export https_proxy=http://127.0.0.1:8123
OpenDJ
#
介绍
open source directory services for the java platform
LDAPv3的认证系统
OpenSSL
#
使用
openssl genrsa -out server.key 1024
# 生成私钥
openssl rsa -in server.key -pubout -out server.pem
# 生成公钥
openssl req -new -key ca.key -out ca.csr
# 通过私钥生成csr(certificate signing request, 证书签名请求)文件
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
# 通过csr生成自签名ca证书,用来颁发证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
# 向自己的ca机构申请签名,需要ca.crt, ca.key, server.csr, 得到带有CA签名证书。用来给客户端验证公钥属于该域名
# 客户端发起安全连接前会获取服务器端的证书, 并通过ca证书验证服务器端证书的真伪,并对服务器名称, IP地址等进行验证
openssl s_client -connect 127.0.0.1:8000
# 测试证书是否正常
应用控制
#
Forever
#
openvpn --config openvpn.conf
# 连接
## --user outrun
## --auth-nocache
# askpass pass.txt 放密码到文件
Supervisor
#
介绍
监视重启
命令
supervisord
# 启动后台服务
supervisorctl
status # 查看所有
update # 重载配置
reload #
start
stop
restart
start all
stop all
restart all
配置
/etc/supervisor/supervisord.conf
[include]
files = /etc/supervisor/conf.d/*.conf
/etc/supervisor/conf.d/app.conf
[program:tri]
command=/data/apps/tri/bin/tri --config /data/apps/tri/conf/config.tri.toml
directory=/data/apps/tri
autostart=true
autorestart=true
startsecs=10
startretries=3
stdout_logfile=/data/logs/supervisor/tri/access.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=20
stderr_logfile=/data/logs/supervisor/tri/stderr.log
stderr_logfile_maxbytes=100MB
stderr_logfile_backups=2
environment=ASPNETCORE_ENVIRONMENT=Production # 环境变量
user=root # 执行的用户
PM2
#
介绍
带有负载均衡功能的node应用进程管理器
内建负载均衡(使用node cluster模块)
后台运行
热重载
停止不稳定进程,如无限循环
安装
npm install -g pm2
命令
pm2 start app.js
pm2 stop
pm2 restart
pm2 status
pm2 info 1
pm2 logs 1
个人操作
#
Ngrok
#
# 内网穿透
VSFTP
#
介绍
默认端口21
用户
匿名用户
默认为ftp或anonymous
目录在/var/ftp
只能下载不能上传
本地用户
用户名和密码与本地用户相同
目录为该用户的登录目录
虚拟用户
文件配置名字和密码
要生成认证文件
文件
/usr/sbin/vsftpd # 主程序
/etc
/rc.d/init.d/vsftpd # initd启动脚本
/vsftpd.conf # 主配置
/vsftpd.ftpusers # 用户黑名单, 一行一名字
/vsftpd.user_list # 用户黑/白名单, 一行一名字
/pam.d/vsftpd # pam认证文件
/var
/ftp # 匿名用户主目录
/ftp/pub # 匿名用户的下载目录
默认用户与组
用户
adduser -d /var/ftp -g ftp -s /sbin/nologin ftp
组
ftp
命令
systemctl start vsftpd
最小可用配置
/etc/vsftpd.conf
listen=YES
local_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
pam_service_name=vsftpd
seccomp_sandbox=NO
# Enable upload by local user.
write_enable=YES
# Enable read by anonymous user (without username and password).
secure_chroot_dir=/var/empty
anonymous_enable=YES
anon_root=/srv/ftp
no_anon_password=YES
使用
/etc/vsftpd.conf
anonymous_enable=YES # 允许匿名用户
local_enable=YES # linux用户可登录, 虚拟用户可登录
write_enable=YES # 可写
local_umask=022 # user文件权限, 默认077
dirmessage_enable=YES # 显示目录信息
xferlog_enable=NO # 记录上传/下载日志
connect_from_port_20=YES # 确保用20端口传输
ls_recurse_enable=NO # 允许ls -R
allow_writeable_chroot=NO
listen=NO
listen_ipv6=YES # 包含ipv4,和listen只能有一个YES
pam_service_name=vsftpd
local_root=/home/outrun/Downloads # linux用户默认目录。会先登录到用户目录,再切换到这里
ftp_username=ftp # 匿名用户名,默认ftp
tcp_wrappers=NO # 结合tcp_wrapper限制ip登录
/etc
/hosts.allow # 允许地址
/hosts.deny # 拒绝地址
useradd -d /home/ftp ftp
mkdir /home/ftp && chown ftp /home/ftp && chgrp ftp /home/ftp
systemctl restart vsftpd
打开tcp, udp端口21, 20
用户
匿名登录
/etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_root=/home/outrun/Downloads # 匿名用户默认目录
anon_upload_enable=YES # 匿名可写,要求write_enable=YES
anon_mkdir_write_enable=YES # 匿名创建文件夹
anon_other_write_enable=YES # 匿名可删除、重命名
anon_umask=000 # 如创建077文件,anon_umask=022时,则为055
chmod 777 dir1
本地用户登录
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
userlist_enable=YES
userlist_deny=YES # YES时user_list为黑名单
userlist_file=/etc/vsftpd/user_list
chroot_local_user=YES # 默认可以chroot到用户home。YES时, chroot_list_file指定黑名单
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_file # 名单用户只能访问自己home
allow_writeable_chroot=YES # 不限制chroot目录可写
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
注释root
虚拟用户
SimpleHTTPServer
#
pythom -m SimpleHTTPServer 8080
Pyshark
#
介绍
包嗅探
项目用工具
#
知识库
#
confluence
# 收费
NextCloud
# 私有网盘
tiddlyWiki
# 可在线定义目录树
github
# 用wiki页面
gitbook
mediaWiki
# 维基百科样式,只有单页目录树
dokuWiki
# 只有网站地图
xwiki
# 目录树, acl
语雀
hdwiki
# 百科, 已停更
notion
# 任务管理
minidoc
# 原smartWiki(php), 改成golang开发的minidoc
有道云笔记
幕布
石墨
etherpad.org
# 在线协作无缝编辑
dropbox
# 文档协作
坚果云
# 文档协作
网盘
#
google drive
百度云
沟通
#
Mattermost
# 开源
team
# 微软, 聊天
slack
# 聊天
hipChat
# Atlassian, 聊天
企业微信
钉钉
倍洽
飞书
瀑布IM
邮件
#
gmail
阿里云邮箱
腾讯企业邮
zoho
网易企业邮
原型
#
zeplin
# 设计和前端协同工具
蓝湖
# 免费
团队协作
#
jira
# 进度管理跟踪, 敏捷开发
microsoft Project
# 瀑布式开发
rational
# IBM, 进度管理
teambition
# 进度管理
basecamp
# 进度管理
testlink
# 测试收集, 进度管理
redmine
# 开源, ror开发, 项目管理, 把成员、任务、文档、讨论等资源整合在一起。支持git, svn, cvs等
youtrack
# jetbrains, 项目管理
禅道
# 项目管理, 开源
trac
# wiki, issue
tapd
# 腾讯项目管理
优势
打通企业微信
功能
worktile
# microsoft项目管理
notion
明道云
云之家
eteams
今目标
tower
masterlab
# 开源
openProject
# 开源
peerProject
# 开源
trello
# 进度管理
代码管理
#
github
gitee
coding
bitbucket
gitea
# 开源
gitlab
gogs
# 开源
测试
#
semaphore
codeClimate
文档
#
swagger
镜像
#
harbor
nexus
部署
#
drone
Travis-CI
CircleCI
GitLab-CI
集群
#
kuboard
prometheus
grafana
zabbix
日志
#
ElasticStack
Chrome
#
chrome://net-internals/#dns
基础
#
历史
40年代:汇编语言
60年代:汇编语言unux
70年代初:c语言、c语言unux、unux开源(美国反垄断法制裁AT&T)
70年代末:AT&T分裂,unix闭源
80年代:minix
90年代:linux # 80、90年代之间:gun计划
文件权限
drwxr-xr-x # d代表目录
lrwxrwxrwx # l代表软连接
drwxrwxrwt # 末尾的t代表粘滞位(sticky bit),用户只能删除自己建东西
## chmod 1777来设置
扩展名
.bin
# 二进制可执行文件,加上执行权限./执行即可
.tar.gz
# gzip压缩,tar打包的文件
.tar.tgz
# 同gzip
.tar.bz2
.tar.xz
环境变量
http_proxy=http://1.1.1.1:8082 # http代理
https_proxy=http://1.1.1.1:8082 # https代理
no_proxy='m.test.com,127.0.0.1' # 代理白名单
PATH # 命名查找路径
SHELL # shell命令位置
PWD # 当前用户目录
HOME # 同上
LOGNAME # 用户名
USER # 同上
LANG # 语言环境
_ # 查看环境变量的命令
文件位置
#
/var
/log
/boot.log # 启动日志
/proc
/[pid]
/status # 任务虚拟地址空间的大小 VmSize, 应用程序正在使用的物理内存的大小 VmRSS
/loadavg # 1分钟、5分钟、15分钟平均负载。运行队列进程数/进程总数。最后一个进程id
/etc
/etc/fstab
/dev/nvme0n1p5 /home ext4 defaults 0 2
/dev/nvme0n1p3 /home/outrun/nvme0n1p3 ntfs-3g defaults 0 0
# /dev/nvme0n1p6
UUID=b00fac49-46d7-43ef-aea7-256d82b862b2 / ext4 rw,relatime,data=ordered 0 1
# /dev/nvme0n1p1 LABEL=ESP
UUID=FE8F-730F /boot/EFI vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2
/sudoers
outrun ALL=(ALL) NOPASSWD:ALL
/passwd
/group
/resolv.conf # dns
nameserver 223.5.5.5
nameserver 223.6.6.6 # alidns
nameserver 114.114.114.114
/sysconfig
/network-scripts/ifcfg-eth0 # 永久修改网卡
DEVICE=eth0 # 设备别名
BOOTPROTO=static # 网卡获得ip地址的方式,默认dhcp
HWADDR=00:00:00:00:00:00 # mac
IPADDR=192.168.0.100 # ip
NETMASK=255.255.255.0 # netmask
ONBOOT=yes # 系统启动时是否激活此设备
/network # 修改网关
NETWORKING=yes # 系统是否使用网络
HOSTNAME=abc # 设置本机主机名, 要与/etc/hosts中设置的主机名相同
GATEWAY=192.168.0.1 # 网关ip
/selinux # 软连接到../selinux/config
SELINUX=disabled # 关闭selinux
/selinux/config # selinux
SELINUX=enforcing # disabled 为关闭
/systemd
/logind.conf # 电源管理配置
HandleLidSwitch=ignore # 关闭盖子不执行操
/system # units位置
/default.target # 启动级别
/docker.service.d/http-proxy.conf # docker代理
Environment="HTTP_PROXY=http://127.0.0.1:8123"
"HTTPS_PROXY=http://127.0.0.1:8123"
"NO_PROXY=192.168.1.1,localhost"
/security
/limits.conf # 设置系统限制,如文件句柄数
/X11
/xorg.conf.d/70-synaptics.conf # 触摸板设置
Section "InputClass"
Identifier "touchpad"
Driver "synaptics"
MatchIsTouchpad "on"
Option "TapButton1" "1"
Option "TapButton2" "3"
Option "TapButton3" "2"
Option "VertEdgeScroll" "on"
Option "VertTwoFingerScroll" "on"
Option "HorizEdgeScroll" "on"
Option "HorizTwoFingerScroll" "on"
Option "CircularScrolling" "on"
Option "CircScrollTrigger" "2"
Option "EmulateTwoFingerMinZ" "40"
Option "EmulateTwoFingerMinW" "8"
Option "FingerLow" "30"
Option "FingerHigh" "50"
Option "MaxTapTime" "125"
Option "VertScrollDelta" "-50"
Option "HorizScrollDelta" "-50"
EndSection
/issue # 发行版信息
/hosts # 修改localhost
/ld.so.conf # lib设置,加入so文件的配置路径如:/usr/local/lib
执行/sbin/ldconfig -v 更新
/profile # 用户登录时加载的环境变量
/inittab # 设置启动级别
id:3:initdefault:
/usr
/lib
/systemd
/system # units位置
/share
/applications # desktop文件
/run
/systemd
/system # units位置
/sys
/class
/backlight
/acpi_video0 # ati显卡是acpi_video0, intel显卡是intel_backlight
/brightness # 修改亮度
~
/.bash_profile
/.bash_login
/.profile # 在登录时执行一次, 先.bash_profile, 再bash_login, 再.profile
/.bashrc
/.bash_logout
/.local
/share
/applications # desktop文件
initd
/etc/rc.d/init.d/rc.local
chmod +x rc.local
ln -sf ../init.d/rc.local rc0.d/S999rc.local
ln -sf ../init.d/rc.local rc1.d/S999rc.local
ln -sf ../init.d/rc.local rc2.d/S999rc.local
ln -sf ../init.d/rc.local rc3.d/S999rc.local
ln -sf ../init.d/rc.local rc4.d/S999rc.local
ln -sf ../init.d/rc.local rc5.d/S999rc.local
ln -sf ../init.d/rc.local rc6.d/S999rc.local
# 文件名中S表示传递start参数(K表示stop), 999为启动级别
fstab
/dev/sda1 /home/outrun/sda1 ntfs-3g defaults 0 0
日志
access-log # http传输
acct和pacct # 用户命令
aculog # modem活动
btmp # 失败记录
lastlog # 最近成功登录、最后一次不成功登录
syslog # 系统日志
messages # syslog
sudolog # sudo记录
sulog # su记录
utmp # 当前登录用户
wtmp # 用户登录登出记录
xferlog # ftp会话
设置
#
lib设置
/etc/ld.so.conf加入so文件的配置路径如:/usr/local/lib
执行/sbin/ldconfig -v 更新
发行版
#
lfs
coreos
debian
gentoo
opensuse
mint
centos
#
包
dnf install @development-tools
yum install epel-release
安装VBoxAdditions
yum update kernel
yum install kernel-headers kernel-devel gcc
# 可能要加软连接 /usr/src/kernels/
mount /dev/cdrom /mnt
/mnt/VBoxLinuxAdditions.run
gcc升级
yum -y install centos-release-scl
yum -y install devtoolset-6-gcc devtoolset-6-gcc-c++ devtoolset-6-binutils
scl enable devtoolset-6 bash
echo "source /opt/rh/devtoolset-6/enable" >>/etc/profile
ubuntu
#
包
apt-cache madison xxx # 查看仓库中所有版本
apt-cache search xxx
apt-get -f -y --assume-yes install
aptitude
search
show
install
remove
purge # 删除包及配置
clean # 删除下载的包文件
autoclean # 仅删除过期
fedora
#
升级
fedup --network 21
或
fedora-upgrade
升级21
rpm --import https://fedoraproject.org/static/95A43F54.txt
yum update yum
yum clean all
yum --releasever=21 distro-sync --nogpgcheck
group
yum grouplist
yum groupinstall "X Window System"
yum groupinstall "GNOME Desktop Environment"
yum groupinstall "KDE"
gnome的快捷方式存放地址
安装unity
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/GNOME:/Ayatana/Fedora_17/GNOME:Ayatana.repo
yum install unity
arch
#
设置
ahci, secure boot, post behavious thorough
源
vim /etc/pacman.d/mirrorlist
pacman -Syy
依赖
base-devel
分区
# mount -t efivarfs efivarfs /sys/firmware/efi/efivars
# 判断efi
cfdisk
mkfs.vfat -F32 /dev/nvme0n1p1
# 或直接使用windows的uefi分区
mkfs.ext4 /dev/nvme0n1p2
mkswap /dev/nvme0n1p3
swapon /dev/nvme0n1p3
mount /dev/nvme0n1p2 /mnt
mkdir -p /mnt/boot/EFI
mount /dev/nvme0n1p1 /mnt/boot/EFI
配置
pacstrap -i /mnt base
genfstab -U -p /mnt >> /mnt/etc/fstab
arch-chroot /mnt /bin/bash
pacman -S dialog wpa_supplicant vim
vim /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
ls -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc --utc
echo outrun > /etc/hostname
grub
pacman -S dosfstools grub os-prober efibootmgr
# bios下 grub os-prober
grub-install --target=x86_64-efi --efi-directory=/boot/EFI --bootloader-id=grub
grub-mkconfig -o /boot/grub/grub.cfg
用户
passwd
groupadd outrun
useradd -m -g users -G outrun -s /usr/bin/bash outrun
passwd outrun
vim /etc/sudoers
退出
exit
umount -R /mnt
reboot
桌面
pacman -S xorg-server xorg-apps xorg xorg-xinit
pacman -S xf86-video-intel mesa xf86-input-synaptics
pacman -S gnome
echo exec gnome-session > .xinitrc
# systemctl enable gdm
/etc/modprobe.d/blacklist_nouveau.conf中写blacklist nouveau
/etc/modprobe.d/modprobe.conf中写blacklist nouveau
pacman -S ttf-dejavu wqy-microhei
network
pacman -S networkmanager-openvpn
systemctl enable NetworkManager
yaourt
vim /etc/pacman.conf
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
pacman -Sy base-devel yaourt
字体
wiki上找font configuration
AUR
git clone https://aur.archlinux.org/snapd.git
cd snapd
makepkg -si
sudo systemctl enable --now snapd.socket
基础
#
方法
TDD # Test-Driven Development
阶段
单元测试阶段
单元测试
集成测试阶段 # 出厂测试
冒烟测试 # 测主流程
功能测试
黑盒
灰盒 # 集成测试阶段,黑盒但关注程序内部
白盒
回归测试
系统测试阶段 # 第三方测试
验收测试阶段
性能测试 # PTS(Performance Testing Service)
压力测试 # 系统失效的负载点
常规模式 # 稳定并发
梯度模式 # 并发梯度递增
目标模式 # 并发梯度递增,达到预设指标(CPU、用户数、TPS、RT等)
负载测试 # 满足性能指标情况下,最大负载
疲劳强度测试 # 长时间执行最大工作量,保证持续业务量指标
基准测试 # 统计多少时间内执行了多少次某个方法
大数据量测试
独立测试 # 针对存储、传输、统计、查询测试
综合测试 # 大数据量下压测,负载,疲劳结合
全链路压测
灰度发布 # 金丝雀发布
A/B测试
蓝绿测试
前端测试
structure/behavior(数据结构/行为)问题
# 判断是否有此耦合,用一个测试验证: 是否为应用逻辑编写一个单元测试而不需要dom结构存在
## angular中没有这种问题,因为所有定位元素和处理事件的工作都是在angular内部完成的
## 在测试时创建dom,就增加了测试的复杂性。而且页面变化时有更多维护要做。访问dom的操作很慢,测试反馈时间长
数据库
#
sysbench
# mysql 压测
--db-driver=mysql --mysql-host=visitor-bench.ctysoosgzk4k.rds.cn-north-1.amazonaws.com.cn --mysql-user=root --mysql-password=12345678 --threads=512 --events=1000000 --time=0 --report-interval=15 ./bench_visit_page_insert.lua run
接口
#
jmeter
#
压测场景
HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
loadrunner
#
脚本参数
get
web_url("login",
"URL=http://192.168.0.14:9081/ryx-login/sso/login",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
EXTRARES,
"Url=../ycls/img/banner1.jpg", ENDITEM,
"Url=../ycls/img/banner2.jpg", ENDITEM,
"Url=../ycls/img/banner3.jpg", ENDITEM,
"Url=../ycls/img/userinput.png", ENDITEM,
"Url=../ycls/img/sawtooth.png", ENDITEM,
"Url=../ycls/img/tip2.png", ENDITEM,
"Url=../ycls/img/pwdinput.png", ENDITEM,
"Url=../ycls/img/login_back.png", ENDITEM,
"Url=../ycls/img/tip1.png", ENDITEM,
"Url=../ycls/img/codeinput.png", ENDITEM,
"Url=../ycls/img/loading-small2.gif", ENDITEM,
"Url=/favicon.ico", "Referer=", ENDITEM,
LAST);
post参数
web_submit_data("getActivityParameter",
"Action=http://192.168.0.14:9081/tobacco/retail/lottery/getActivityParameter?jsonp=jQuery19109862107675272699_1401335732777",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.0.14:9081/tobacco/retail/index;jsessionid=7BBAFC6DE481FBCB1CB88D738BD7EE71",
"Snapshot=t6.inf",
"Mode=HTML",
ITEMDATA,
"Name=requestType", "Value=ajax", ENDITEM,
LAST);
post直接传数据
web_custom_request("dataservice",
"URL=http://202.110.222.207:7080/rtserver/rest/resource/tobacco/dataservice",
"Method=POST",
"Resource=0",
"RecContentType=text/plain",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
"Body= {\"trans_code\":\"1006\",\"end_date\":\"20140701\",\"source\":\"appkey\",\"data\":\"eyJiZWdpbl9kYXRlIjoiMjAxNDA2MDEiLCJlbmRfZGF0ZSI6IjIwMTQwNzAxIiwicG9zX2lkIjoiODg1MDAzMTAiLCJzb3VyY2UiOiJhcHBrZXkiLCJjdXN0b21lcl9pZCI6IjM3MDExMjEwNzQ2NyIsImFjY2Vzc190b2tlbiI6IiJ9\",\"begin_date\":\"20140601\",\"mac\":\"123\",\"pos_id\":\"88500310\",\"customer_id\":\"370112107467\",\"access_token\":\"\"}",
LAST);
phoenix
#
介绍
web自动化测试工具
特点
分布式执行
无脚本模式执行
无人值守模式执行
自定模式执行
模块
数据维护模块
部署模式
server-client
仅windows下可用
socket通信
web部署
server与client放到tomcat或webLogic下部署
http通信
web页面控制与监控client端执行
wireshark
siege
siege -c 200 -r 100 http://www.google.com
# 200并发,发送100次请求
tcpcopy
# 基于tcp packets的请求复制工具, 在线流量导入到测试系统中
ab
内网测试, apache自带的压力测试工具, 安装apache后在bin目录中找到
ab -n1000 -c100 http://www.google.com/a.html
# 100并发, 发送1000次请求
locust
# 外网性能测试
http_load
# 压测
http_load -rate 5 -seconds 10 http://www.baidu.com
# -p 并发
# -f 总计访问数
# -r 每秒访问频率
# -s 总计访问时间
yslow
# firefox插件,网页性能测试工具
gatling
# dsl脚本, 生成报表
wrk
# 压测
wrk -R5000 -d10s "http://internal-rope-api-1875734411.cn-north-1.elb.amazonaws.com.cn/online_agents/1"
swagger
# 文档与测试用例
fortio
# istio压测工具
hey
# http压测
js
#
heapdump
# 堆内存快照
jslint
supertest
# 测http接口
sinon.js
# 非运行测试,延时测试等
vows
# asynchronous BDD(behaviour drven development) for Node
chai
# js断言
mock.js
# 模拟生成接口假数据
benchmark
#
介绍
测试代码执行性能
使用
var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;
var int1 = function(str){
return +str;
};
var int2 = function(str){
return parseInt(str, 10);
};
var int3 = function(str){
return Number(str);
};
// 开始测试
var number = '100';
suite
.add('+', function(){
int1(number);
});
.add('parseInt', function(){
int2(number);
});
.add('Number', function(){
int3(number);
});
.on('cycle', function(event){ // 每个测试跑完后输出信息
console.log(String(event.target));
})
.on('complete', function(){
console.log('Fastest is' + this.filter('fastest').pluck('name'));
})
.run({'async': true}); // 这里async与时间计算有关,默认为true
travis
#
介绍
项目node版本测试,在基本依赖下跑
使用
在travis上授权仓库,每当push代码到github, 会自动跑测试
配置根目录下的.travis.yml文件来配置测试内容,如
language: node_js
node_js:
-'0.8'
-'0.10'
-'0.11'
script: make test
services:
mongodb
# 一个使用了mongodb的nodejs应用,用0.8、0.10、0.11三个版本来跑,跑测试的命令是make test
travis测试的项目,可以得到一个图片地址,显示项目当前的测试通过状态,把这个图片添加到项目的README中
jasmine
#
介绍
编写单元测试
使用
describe("A suite", function(){
var foo;
beforeEach(function(){
foo = 0;
foo += 1;
});
afterEach(function(){
foo = 0;
});
it("contains spec with an expectation", function(){
expect(true).toBe(true);
});
});
should
#
介绍
兼容性测试
安装
npm install should --save-dev
使用
var should = require('should');
user.should.have.property('name', 'jack')
# should(user).have.property('name','jack');
user.should.have.property('pets').with.lengthOf(4);
# 判断数组
should.not.exist(err);
should.exist(result);
result.bar.should.equal(foo);
(5).should.be.exactly(5).and.be.a.Number();
user.should.be.an.instanceOf(Object).and.have.property('name', 'jack');
this.obj.should.have.property('id').which.is.a.Number();
memwatch
#
介绍
监控内存leak, stats,leak在连续5次垃圾回收后内存没释放时触发, stats事件在垃圾回收时触发
o-> 堆内存比较
var memwatch = require('memwatch')
var leakArray = []
var leak = function () {
leakArray.push('leak' + Math.random())
}
var hd = new memwatch.HeapDiff()
for (var i = 0; i < 10000; i++) {
leak()
}
var diff = hd.end()
console.log(JSON.stringify(diff, null, 2))
muk
#
var muk = require('muk')
before(function () {
muk(fs, 'readFileSync', function (path, encoding) {
throw new Error('mock readFileSync error')
})
muk(fs, 'readFile', function (path, encoding, callback) {
process.nextTick(function () {
# 模拟异步
callback(new Error('mock readFile error'))
})
})
})
after(function () {
muk.restore()
})
rewire
#
介绍
测试私有方法
o->
it('limit should return success', function () {
var lib = rewire('../lib/index.js')
var litmit = lib.__get__('limit')
litmit(10).should.be.equal(10)
})
mocha
#
介绍
单元测试框架
命令
mocha
# --reporters 查看所有报告样式, 默认dot, 常用spec, json, html-cov
# -R <reporter>采用某报告样式
# -t <ms>设置超时时间
使用
npm install -g mocha
// package.json
{
"scripts": {
"test": "mocha test"
"blanket": {
"pattern": "//^((?!(node_modules|test)).)*$/",
"data-cover-flags": {
"debug": false
}
}
}
}
mocha test
o-> bdd风格
describe('Array', function() {
before(function() {})
# 钩子函数还有after, beforeEach, afterEach
it('should return -1 when not present', function (done) {
[1,2,3].indexOf(4).should.equal(-1)
this.timeout(500)
# 500ms后超时
done()
# 用done来测试异步
})
})
o-> bdd风格
suite('Array', function() {
setup(function () {})
# 钩子函数还有teardown
suite('$indexOf()', function () {
test('should return -1 when not present', function() {
assert.equal(-1, [1,2,3].indexOf(4))
})
})
})
istanbul
#
介绍
名字是依斯坦布尔,用来白盒覆盖用例测试
支持的use cases有unit tests, browser tests, server side code embedding
使用
instanbul cover test.js
phantomjs
#
介绍
前端测试工具
webkit js测试工具,支持多web标准, dom, css, json, canvas和svg
o-> 使用1
npm install mocha-phantomjs
mocha-phantomjs index.html
o-> 使用2
phantomjs hello.js
// hello.js
console.log('Hello, world');
phantom.exit();
browserstack
#
介绍
前端测试工具
内建webdriver的api
使用
npm install browserstack-runner --save-dev
./node_modules/.bin/browserstack-runner init
// browserstack.json
"test_framework": "mocha",
"timeout": 60,
"test_path": "public/index.html"
https://www.browserstack.com/accounts/automate
得到username 和 access key
复制到browserstack.json中的username和key
browserstack-runner
https://www.browserstack.com/automate 查看结果
karma
#
介绍
是google Testacular的新名字,自动化完成单元测试
使用
npm install -g karma
karma start
karma init
# 初始化karma配置文件
npm install karma-jasmine
jscover
#
介绍
覆盖率测试
使用
npm install jscover -g
jscover lib lib-cov
# 把lib下的源码编译到lib-cov下,新代码在每一行加上了执行次数统计
index.js中
module.exports = process.env.LIB_COV ? require('./lib-cov/index') : require('./lib/index')
export LIB_COV=1
mocha -R html-cov > coverage.html
# 生成结果
blanket
#
介绍
比jscover更好的测试工具
使用
package.json中
"scripts": {
"blanket": {
"pattern": "eventproxy/lib"
# 要测试的源码目录
}
}
mocha --require blanket -R html-cov > coverage.html
python
#
nose
# 注解测试
selenium
# 自动化测试
go
#
gomock
# 官方mock库, 对接口mock
monkey
#
介绍
对函数mock
Patch()
Unpatch()
PatchInstanceMethod()
UnpatchInstanceMethod()
问题
内联函数不能mock
测试时禁止内联, go test -gcflags=all="-N -l"
java
#
hamcrest
#
# 自然语法
mockito
#
页面
#
jsperf
# js性能分析
jasmine
# js单元测试
移动
#
robotium
# android自动化测试