Ubuntu Linux
2020-03-31
全局
Win / Win + S 窗口概览
Win + A 程序搜索,或者 Win 双击
Win + D 显示桌面
Win + L 锁定窗口
Win + V / Win + M 打开日历和事件
Win + 数字 打开左侧菜单上的程序
Win + Left 将窗口移动到左侧
Win + Right 将窗口移动到右侧
Win + Up 最大化
Win + Down 还原
Win + Home 切换到第一个 Workspace
Win + PageUp 切换到上一个 Workspace
Win + PageDown 切换到上一个 Workspace
Alt + F2 运行一个命令
Alt + F4 关闭当前窗口
Alt + F6
Alt + F10 窗口最大化 / 还原
Ctrl + Alt + T 打开终端
Win + Space 切换输入法
Alt + Space 窗口菜单
Win + C 计算器 自定义
Win + F 文件浏览器 自定义
切换
Alt + Tab 切换窗口
Win + Tab 切换程序
Alt + ~ / Win + ~ 同一个程序的不通窗口切换
截图
屏幕截图并保存:PrntScr
加 Shift 选区截屏,加 Alt 窗口截屏,加 Ctrl 截屏到剪切板
PS:Ubuntu 22.04 之后,截图的逻辑调整了。
交互式截屏:PrntScr
加 Shift 屏幕截图并保存,同时复制到剪切板
加 Alt 窗口截屏并保存,同时复制到剪切板
加 Ctrl 没有任何效果
终端
Ctrl + Shift + N new window
Ctrl + Shift + Q quit window
Ctrl + Shift + T 打开新标签
Ctrl + Shift + W close tab
Ctrl + Shift + PageUp Tab 左移
Ctrl + Shift + PageDown Tab 右移
Ctrl + Shift + C 复制
Ctrl + Shift + V 粘贴
Ctrl + / 清空
其他
F9 打开 CopyQ 自定义
VSCode
2020-03-30
窗口
Ctrl + Shift + N 新建窗口
Tab
Ctrl + N 新建标签
Ctrl + W 关闭当前标签
Alt + PageUp, Alt + PageDown 切换 Tab
编辑
Ctrl + Shift + Up/Down 同时编辑多行
Ctrl + Shift + I 格式化代码
Ctrl + P 打开文件
Ctrl + T 工作区相关
Ctrl + , 设置
Ctrl + . 切换Section或文件
Ctrl + / 注释
Ctrl + I 建议
Ctrl + O 打开文件
Ctrl + K, Ctrl + O 打开目录
Ctrl + S 保存
Ctrl + ` 终端
Ctrl + K M 更改语言
Ctrl + K, Ctrl + S 显示键盘快捷方式
F1 OR Ctrl + Shift + P Show Command Palette
Alt + Up, Alt + Down 上下移动行
Alt + Left, Alt + Right 跳到上一处,跳到下一处
搜索和替换
Ctrl + F
Ctrl + H
Ctrl + Shift + F
Ctrl + Shift + H
WebFrontend
2020-03-29
通过标签的 ID
比如 https://ruanyifeng.com/blog/2011/03/url_hash.html 这个页面的源代码中有以下内容:
<h1 id="page-title" class="asset-name entry-title">URL的井号</h1>
我们可以通过 https://ruanyifeng.com/blog/2011/03/url_hash.html#page-title 定位到这个标题元素上。
通过文本
这个方式应该是 Google 今年弄出来的,从 2 月份的 Chrome 80 开始就支持了,名字叫做 Scroll To Text Fragment。
还是拿上面的例子,我们可以不用去看页面源码,直接通过内容 URL的井号
来链接:
https://ruanyifeng.com/blog/2011/03/url_hash.html#:~:text=URL的井号
#:~:text=内容
并且链接中指定的内容会高亮显示出来。
参考资料与拓展阅读
- URL的井号
- Highlight & Link to Text Fragment on a Webpage
- How to Directly Link to Text on a Web Page in Chrome
- WICG/scroll-to-text-fragment
工具 研发团队
2020-03-26
操作系统
通讯平台
- 微信,企业微信,钉钉
- RocketChat
- https://github.com/teamgram/teamgram-server
设计工具
文档工具
- Wiki
- Confluence
- DokuWiki
- Wiki.js
- dynalon/mdwiki
- Simiki
- 博客
- 笔记
- 问答(可以作为论坛的一部分)
IDE
客户端
- SSH:XShell,Putty
- HeidiSQL (MySQL 客户端)
- AnotherRedisDesktop (Redis 客户端)
- MongoDB Compass
开发
- 各种镜像
- 语言环境
- Java
- JRE/JDK
- Tomcat
- Nexus (Ma)
- Python
- PHP
- NodeJS
- 版本管理:Gogs / Gitea
- CodeReview
测试
- 用例管理
- BUG 追踪
- 禅道(ZenTao)开源版:任务,需求,BUG 追踪
- TAPD
- Redmine
发布
- Jenkins
行业标杆。
- Drone CI
新秀。被 Harness 收购之后,现在改名 Gitness 了,原代码在 drone 分支
- GoCD
来自 ThoughtWorks,中文名:思特沃克,IT 外包企业。
- Woodpecker CI
由于 Drone CI 的作妖,部分开发者自己维护了一个分支。
- Zadig
国产。带附加条款的 Apache 协议,不允许作为商业产品分发,不允许作为 SAAS 产品提供服务。
运维平台
文件服务
文件分享
- S3:MinIO
- FTP/FTPS/SFTP:MinIO
- SMB:Samba
- Seafile 文件同步服务
- NextCloud
其他
- 图床(内部)
- Web Server
- v𝟮ray
- OpenVPN
- 打印服务器
- 备份服务器:操作系统备份,重要服务数据定时备份
- APITable
- Webmin
- PXE Server
办公
- 导航
- OA:O2OA / 勾股 OA
- CRM:SuiteCRM
- https://github.com/MicroPyramid/Django-CRM
- https://github.com/krayin/laravel-crm
- monikahq.com
- 论坛
- Flarum (PHP) 非常简洁
- vanilla/vanilla (PHP)
- Apache Answer (Go)
- FlaskBB (Python)
- NodeBB (Node)
- OrangeHRM
- ERPNext (frappe)
- Frappe HR
- 协同文档 + 表格 + 演示
基础服务
- DB
- MQ
- Redis
-
Memcached
-
DNS
- NTP
- OpenLDAP
- SSO:Authelia
- 流程引擎
- DataExchange
- HttpPush (WebHook Outgoing)
- HttpCallback (WebHook Ingoing)
- HttpPull
- WebPush
- MobilePush
- Webhook.site HTTP 调试
- 定时任务 Cron
- 日志平台
- HAProxy
- Nginx
- 小工具
- iploc
- phone number 分析
- ua 分析
- email parser
- dns 查询
- 消息推送
- sms
- email
- wecom (企业微信)
- ding
- generate
- ifttt
- pastebin
DB MySQL
2020-03-25
MySQL 语句:
- DDL
- DML
- 事件和锁
- Replication
- Prepared
- Compound
- 数据库管理
- 工具
用户管理
角色 (用户模板)
create role stuff@localhost;
... 分配权限,修改属性
select host, user as role from mysql.user where authentication_string = '';
CREATE ROLE [IF NOT EXISTS] role [, role ] ...
锁定,密码为空
DROP ROLE
SET ROLE
SET DEFAULT ROLE
用户
select host, user, plugin, left(authentication_string, 5) as pass, account_locked from mysql.user;
select distinct user from mysql.user;
select current_user(), current_role();
CREATE USER
DROP USER
ALTER USER
RENAME USER
密码
权限
资源组管理
CREATE RESOURCE GROUP
DROP RESOURCE GROUP
ALTER RESOURCE GROUP
SET RESOURCE GROUP
表维护
ANALYZE TABLE
CHECK TABLE
CHECKSUM TABLE
OPTIMIZE TABLE
REPAIR TABLE
组件,插件,Loadable Function
CREATE FUNCTION
-
DROP FUNCTION
-
INSTALL COMPONENT
-
UNINSTALL COMPONENT
-
INSTALL PLUGIN
UNINSTALL PLUGIN
CLONE
SET
SET
设置变量
SET CHARACTER SET
SET NAMES
SHOW
SHOW BINARY LOGS
binlog
SHOW BINLOG EVENTS
binlog
SHOW CHARACTER SET
字符集
SHOW COLLATION
排序规则
SHOW COLUMNS
查看表结构
SHOW [EXTENDED] [FULL] {COLUMNS | FIELDS}
{FROM | IN} tbl_name
[{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
SHOW CREATE DATABASE
SHOW CREATE EVENT
SHOW CREATE FUNCTION
SHOW CREATE PROCEDURE
SHOW CREATE TABLE
SHOW CREATE TRIGGER
SHOW CREATE USER
-
SHOW CREATE VIEW
-
SHOW DATABASES
数据库
SHOW ENGINE
查看指定引擎的状态
部分引擎会提供一些状态信息,比如 INNODB, PERFORMANCE_SCHEMA
SHOW ENGINES
存储引擎
SHOW ERRORS
SHOW EVENTS
SHOW FUNCTION CODE
SHOW FUNCTION STATUS
SHOW GRANTS
用户权限
SHOW INDEX
查看指定表的索引
SHOW MASTER STATUS
SHOW OPEN TABLES
SHOW PLUGINS
插件
SHOW PRIVILEGES
SHOW PROCEDURE CODE
SHOW PROCEDURE STATUS
SHOW PROCESSLIST
SHOW PROFILE
SHOW PROFILES
SHOW RELAYLOG EVENTS
SHOW REPLICAS
SHOW SLAVE HOSTS | SHOW REPLICAS
SHOW REPLICA STATUS
SHOW SLAVE | REPLICA STATUS
SHOW STATUS
SHOW TABLE STATUS
SHOW TABLES
表
SHOW TRIGGERS
SHOW VARIABLES
SHOW WARNINGS
其他
BINLOG
CACHE INDEX
FLUSH
KILL
LOAD INDEX INTO CACHE
RESET
RESET PERSIST
RESTART
SHUTDOWN
Git Windows
2020-03-22
Git 在团队协作的情况下容易遇到很多小问题,有一类是由于跨平台的系统差异导致的。有人习惯 Windows 下开发,有人习惯 Linux 下开发。
最常见的是这么四个问题:
- 文件权限问题
- 基本上我还没有遇到有需要给仓库中的文件设置权限的情况,但是由于权限的变更导致提交进来没有内容更改的文件就完全没有必要
- 所以非常必要设置
core.filemode false
chmod 644 *.md
- 换行符问题
- Windows 新建的文件都是
\r\n
换行,Linux 则是 \n
core.autocrlf true
可以在 checkout 的时候根据系统自动转换换行符
- 但是我觉得这个可能放到 hook 里面,在提交检查的时候一起做更加合适
dos2unix *.md
-
软链接问题
-
Linux 下的软链接切到 Windows 下之后,变成了一个普通文本,内容是链接的路径
core.symlinks true
可以解决这个问题,这也是默认值,可是有些时候我们的环境中配置的就是 false
- 我的 Git for Windows 不知道为什么,system 配置就是设置成 false 了
- 有些情况下,项目配置似乎就默认是 false
- 如果已经成为现实了,软链是个文本,我们改配置,重新添加,然后 pull 到本地可以
core.symlinks
If false, symbolic links are checked out as small plain files that contain the link text. git-update-index
and git-add
will not change the recorded type to regular file. Useful on filesystems like FAT that do not support symbolic links.
The default is true, except git-clone
or git-init
will probe and set core.symlinks
false if appropriate when the repository is created.
- 文件名大小写问题
- Linux 大小写敏感,比如 Apple.txt 和 apple.txt 可以在同一个目录,Windows 环境克隆下来,只能看到一个文件 apple.txt
- 没什么好的办法,应该也是在提交的时候作为风格检查
$ git config --list --global | grep sym
$ git config --list --system | grep sym
core.symlinks=false
$ git config --list --local | grep sym
core.symlinks=false
关于链接的另一个办法
CSDN 博客上看到 《windows上使用git仓库的问题(换行符、文件权限、软链接)》,里面提出下面这个思路。
虽然代码不够严谨,但是思路应该是没有问题的。以后遇到问题可以参考(还没有验证):
- 找出链接文件
- 创建 Windows 链接
- 操作索引区,忽略这个变更
import os
def rindex(lst, value):
try:
return lst.rindex(value)
except ValueError:
return -1
# find symbol link files or dirs
fp = os.popen("git ls-files -s | awk '/120000/{print $4}'")
links = fp.read().strip().split("\n")
# get symbol links' parent dir
link_dir = set()
for link in links:
index = rindex(link, "/")
if (index != -1):
link_dir.add(link[:index])
else:
link_dir.add(".")
work_dir = os.getcwd()
# make link for every symbol link
for d in link_dir:
os.chdir("/".join([work_dir,d]))
fp = os.popen("ls -la")
items = fp.read().strip().split("\n")
for item in items:
if "->" in item:
tks = item.split("->")
src = tks[0].strip().split(" ")[-1]
dst = tks[1].strip().split("/")
if (len(dst) > 1):
dst = "\\\\".join(dst)
else:
dst = dst[0]
print ("link " + src + " -> " + dst)
os.popen("rm " + src)
if (os.path.isfile(dst)):
os.popen("cmd /c mklink /H " + src + " " + dst)
else:
os.popen("cmd /c mklink /j " + src + " " + dst)
# make links unchanged
os.popen("git update-index --assume-unchanged " + "/".join([os.getcwd(), src]))
参考资料与拓展阅读
Windows
2020-03-19
https://msdn.itellyou.cn/
Windows 10 Enterprise LTSC 2019
# x64
Windows 10 Enterprise LTSC 2019 (x64) - DVD (Chinese-Simplified)
文件名:cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso
SHA1:24b59706d5eded392423936c82ba5a83596b50cc
文件大小:4.17GB
发布时间:2019-03-15
ed2k://|file|cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso|4478906368|E7C526499308841A4A6D116C857DB669|/
# x86 (32 位)
Windows 10 Enterprise LTSC 2019 (x86) - DVD (Chinese-Simplified)
文件名:cn_windows_10_enterprise_ltsc_2019_x86_dvd_1814dbab.iso
SHA1:ba2169edd94f123211cd4aaca68352f1ab6195d9
文件大小:2.98GB
发布时间:2019-03-15
ed2k://|file|cn_windows_10_enterprise_ltsc_2019_x86_dvd_1814dbab.iso|3196803072|2D39C54A2E99BAC308191C74A15B3237|/
Windows 10 Enterprise LTSC 2021 (x64) - DVD (Chinese-Simplified)
文件:SW_DVD9_WIN_ENT_LTSC_2021_64BIT_ChnSimp_MLF_X22-84402.ISO
大小:4.7GB
MD5:2579B3865C0591EAD3A2B45AF3CABEEE
SHA1:C19D7DAFBAFEB26C36E31D97C465E87C7A6E8A4C
SHA256:C117C5DDBC51F315C739F9321D4907FA50090BA7B48E7E9A2D173D49EF2F73A3
ed2k://|file|SW_DVD9_WIN_ENT_LTSC_2021_64BIT_ChnSimp_MLF_X22-84402.ISO|5044211712|1555B7DCA052B5958EE68DB58A42408D|/
Windows 11
ed2k://|file|zh-cn_windows_11_business_editions_version_22h2_updated_nov_2022_x64_dvd_3623b3e1.iso|5567041536|B83E64D03E93B418840E5B270E164005|/
Linux
2020-03-14
我们一般使用 du 命令,不正是做这个用的么(Disk Usage)?
du -hsc # 当前目录占用空间大小
du -hsc *.log* # 查看文件大小
du -hsc a b c d # 查看指定几个目录的大小
TLS 信息安全 密码学
2020-03-13
名称
TLS, Transport Layer Security, 传输层安全性协议
SSL, Secure Sockets Layer, 安全套接层
历史
- 90 年代,WWW 先驱网景公司开发 SSL,用于提升 Web 安全性。
- 1996,SSL 开始由 IETF (The Internet Engineering Task Force, 互联网工程任务组) 标准化,最后在 1999 年成为 RFC 2246,名字改成了 TLS。
- TLS 1.0 约等于 SSL 3.0
- 微软 IE 也支持 TLS 1.0
- 现在,SSL 时期的三个版本,均已被彻底废弃。
- 由于历史原因,很多场合如果不严格区分版本,SSL 等于 TLS。
- TLS 1.2 在 2008 年成为 IETF 推荐的版本(2018 年被 TLS 1.3 淘汰)
- TLS 1.3 于 2018 年 8 月发表,它的突破性改进包括握手更快从而加快连接速度、简化支持的加密方式、速度和性能优于 TLS 1.2。
协议 |
发布时间 |
状态 |
说明 |
SSL 1.0 |
未公布 |
未公布 |
|
SSL 2.0 |
1995 年 |
2011 年弃用 |
|
SSL 3.0 |
1996 年 |
2015 年弃用 |
|
TLS 1.0 |
1999 年 |
2021 年弃用 |
RFC 2246 |
TLS 1.1 |
2006 年 |
2021 年弃用 |
RFC 4346 |
TLS 1.2 |
2008 年 |
|
RFC 5246 |
TLS 1.3 |
2018 年 |
|
RFC 8446 |
旧版本的废弃
- SSL 1.0 从未发布。
- 2011 年 3 月,RFC 6176 删除了对 SSL 的兼容,避免通过协商使用已经被废弃的 SSL 2.0 而出现安全问题。
- 2014 年 10 月,Google 发现 SSL 3.0 有设计缺陷,可以将 TLS 安全连接强行降级到过时且不安全的 SSL 3.0。之后,Google 在自己公司相关产品中陆续禁止回溯兼容,强制使用 TLS 协议。
- 2015 年,正式废弃 SSL 3.0。
- 微软、Google、苹果、Mozilla 四家浏览器厂商在 2020 年终止支持 TLS 1.0 及 1.1。
- 2021 年 3 月,RFC 8996 标准弃用了 TLS 1.0 和 TLS 1.1。
现在主流的是 TLS 1.2 和 TLS 1.3。
相比之下,TLS 1.3 安全性更好,性能也更好。
搜索一下 tls1.2 tls1.3 difference
或者 tls1.2 tls1.3 performance
就能看到很多相关比较。
作用
SSL/TLS 的本质就是非对称加密。
细节
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
该协议由两层组成:
- TLS 记录协议(TLS Record)
- TLS 握手协议(TLS Handshake)
握手协议(handshake protocol)
密钥规格变更协议(change cipher spec protocol)
应用数据协议(application data protocol)
警报协议(alert protocol)。
参考资料与拓展阅读
开发者
2020-03-10
- 编码:
- 遵守一个社区比较公认的编码规范和编程实践,不要试图自己搞一套。
尤其是命名风格保持统一。
- 拆分的思想:分服务,分模块,分文件,分函数,分层。
不同部分之间的依赖应该非常清晰,严禁无序调用。
- 代码复用:尽可能不要重复写类似的代码。
业务无关代码应该采用公共库,组织内复用,不要重复实现相同的逻辑
- 对于功能实现应该有一定的预留空间,对可能发生的调整有一定的包容性
- 函数简单:一个函数应该尽可能简单,代码行数少,逻辑清晰。
- Git:
- 分支管理
- 提交管理
- 每次代码提交应该有一个明确的目的,和这个目的无关的代码应该另外提交。
尽可能保证每次提交修改的量比较少。
- 提交的时候应该做代码风格检查,没有通过的拒绝接受
- 测试:
- 单元测试必须要有, 要比业务代码接受更严格的检查
- 我认为写单元测试的时间应该开发的时间差不多
- 覆盖率要求
- 为了保证测试的便利,可以对现有实现进行调整(开发时就应该考虑到测试流程)
- 集成测试,回归测试,功能测试,性能测试
- 自动化:
- 自动化测试
- 自动化部署
- 日志:
- 格式统一
重点是要能方便地定位到问题, 比如对于同一个请求的所有日志加上相同的标识
- 日志级别一定要分清楚,方便做异常监控
- 日志监控
- 对于请求响应类型的服务,建议分成以下日志文件:
main.log
/ app.log
主日志,INFO 级别, 保留 15 天
trace.log
调试日志,DEBUG 级别, 保留 3 天
error.log
异常日志,ERROR 级别, 保留 30 天, 可以考虑加上
monitor.log
监控日志
access.log
访问日志
api.log
API 调用日志
event.log
重要的时间点记录下来,比如 REQUEST_START, REQUEST_END 等, 保留 30 天
data.log
/ db.log
数据库操作(包含 Redis), 保留 30 天
message.log
/ mq.log
MQ 消息, 保留 30 天
- 对于有监控需求的日志应该加上特殊标识,比如
Monitor:Daily
, Monitor:5m
, Monitor:UpstreamError
这个根据监控策略来。
- 新开发的逻辑可以加入尽可能多的调试信息,日后根据实际情况调整。
- 设计:
- 需求评审之后,就要做设计评审(方案评审)
- 如果涉及数据库调整,应该由数据库团队参与评审
- 如果设计加购调整,应该由架构团队参与评审
- 对外接口调整需要谨慎
- 其他:
- 应当尽可能了解自己参与的项目,重要的数据应该能记住,比如重点客户信息,性能指标,流量等。