Skip to main content

vim 常用命令

· 2 min read

需求场景

当ssh远程登录linux服务器时,修改文件是最常见的需求了。一开始学了点vim的基础操作,简单的修改文件中的几个值不是问题。后来慢慢的需要修改的东西变多了(大概是折腾的更深入了吧),这时简单的修改已经不太好使了。后来了解到vscode的远程编辑文件,这是真的香啊。以为再也不需要学vim这么复杂的东西了。直到后来,vscode远程编辑经常断线重连,吃服务器内存很高,cpu负载爆高,而且时不时总有终端访问服务器的需求。才发现,vscode远程编辑不是银弹啊,还是老老实实学点vim的基本操作吧,孰能生巧嘛。

显示

set nu显示行号

查找

/ 向下查找(配合n使用)
? 向上查找(配合n使用)

移动

:n 移动到n行
g^ 移动到行首
g$ 移动到行尾
gg 移动到文件开头
G 移动到文件结尾

编辑

y   v进入可视模式,光标选择复制
yy 复制一行
y^ 复制当前到行头的内容;
y$ 复制当前到行尾的内容;
ygg 复制文件开头
yG 复制到文件结尾
d 删除(命令同复制)
p 粘贴
u 撤销

git本地多帐号管理(You do not have permission to pull the repository)

· 2 min read

需求场景

一般开发人员会有2个以上的git账户,一个公司账户A,一个个人账户B。这就涉及一个问题,如果本机使用的A账户,当克隆B账户的项目时,可能会出现You do not have permission to pull the repository的提示。这是由于本机记住了A的帐号密码,每次操作都使用A的账户密码。所以操作B时会提示没有权限。产生这样的错误一般是采用https方式clone才会出现,所以本地多帐号可以通过ssh方式解决。通过配置多个ssh密钥可以解决这个问题,配置ssh是最安全的方式,不过缺点就是配置麻烦。如果希望通过https克隆而两个帐号又不冲突要怎么办呢?

解决方案

  1. 清空global和system的credential.helper
  2. 对每一个本地仓库,设置一下url和local的credential.helper

步骤一:清空本地全局credential.helper

git config --list | grep credential命令可以查看本地帐号密码存储的位置。mac显示的是credential.helper=osxkeychain,也就是存在本机的钥匙串中,打开钥匙串,搜索git,删除帐号密码。
删除本地的全局帐号密码后,这时候克隆B项目就不会提示错误了,提示需要输入帐号密码

步骤二:针对每个本地仓库设置credential.helper

树莓派4b安装docker

· One min read

系统环境

raspbian buster

步骤一:卸载老版本

sudo apt-get remove docker docker-engine docker.io containerd runc

步骤二:shell安装

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh –mirror Aliyun

后续说明

树莓派4b安装docker,官方建议shell脚本安装方式,参考官方文档,由于是国内环境,默认安装方式比较慢,需要加上
mirror参数,使用Aliyun源下载。

在ajax中出现net :: ERR_BLOCKED_BY_CLIENT错误?

· One min read

需求场景

最近在联调接口中,突然发现某个接口报错,然而后台并没有请求,打开控制台显示ERR_BLOCKED_BY_CLIENT

出现原因

是因为我本地浏览器开启了AdBlock Plus插件,该插件会过滤'ad'等内容,之前知道会过滤含ad字眼的图片,没想到连ajax请求也能过滤,强大强大。

解决方案

关闭AdBlock Plus或者给接口api重命名吧。

alfred无法准确搜索app?

· One min read

需求场景

最近不知怎么回事,alfred总是无法准确搜到app,部分app能搜得到,然而部分app又搜不到。

解决方案

打开alfred搜索栏输入reload,会出现reload alfred cache,点击即可恢复。具体描述参见help

linux目录结构详解(思维导图)

· One min read

前沿

说来惭愧,用了这么久的 linux 服务器,对 linux 各个目录的作用并不清楚,有时候需要新增配置文件,日志,或者程序时往往不知道放哪里比较合适。查找配置文件,日志时也不知道到会被储存在哪些可能的地方。总的来说,对文件的管理没有做的很好。所以,找了下面这张 linux 目录的思维导图,方便自己查阅。

systemctl设置开机启动,管理service

· 2 min read

需求场景

有时候需要将go项目或其他项目加入service,并且实现开机自启动。

配置文件

systemd有两处可以配置,一处为系统配置文件位于/etc/systemd/system/,一处为用户配置文件/user/lib/systemd/system/,一般新增的开机启动service建议放在系统配置文件下。

步骤一:新增service文件

在/etc/systemd/system/目录下新增一个配置文件,如prometheus.service

[Unit]
Description=Prometheus
After=network-online.target

[Service]
ExecStart=/home/go-projects/prometheus-2.19.2.linux-amd64/prometheus.sh
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

步骤二:执行systemctl命令

#刷新配置
sudo systemctl daemon-reload
#设置开机启动
sudo systemctl enable prometheus
#启动服务
sudo systemctl start prometheus

service文件参数说明

service文件分为[Unit],[Service],[Install]三部分

  • [Unit]

Description:描述
Documentation:文档
Before:定义启动顺序
After:定义启动顺序

  • [Service]

Type=服务类型
User=用户名
Group=用户组
ExecStart: 执行启动脚本
Restart:当服务进程 正常退出、异常退出、被杀死、超时的时候, 是否重新启动该服务
RestartSec:设置在重启服务(Restart=)前暂停多长时间

  • [Install]

Alias:服务别名
WangtedBy: 多用户模式下需要的

详细文档

service中文文档
service英文文档

关闭charles后无法正常上网?

· 2 min read

问题描述

一般情况下,无论 charles 开启还是关闭,都是能访问网络的。可是有时候不知道怎么回事,关闭 charles 就不能正常上网了,打开 charles 又可以上网了,所以可以判定是代理那边出了问题,可是实际上也没有手贱点到哪里啊???

首先排除

这里的无法上网是指电脑无法上网,手机无法上网可能是网络还走的电脑的代理端口,而电脑端的 charles 已经关闭,这时只需将手机网络的代理改为无即可

解决方案

  • 步骤一
    打开网络偏好设置

  • 步骤二
    打开当前连接无线网络的高级

  • 步骤三
    打开代理,这里可以看到,http 和 https 代理那块走了我们在 charles 中配置的端口。将所有勾选项全部取消即可。

  • 步骤四
    点击网络偏好设置中的应用,之后就会发现正常了。

异常出现原因

只出现过一次,目前原因不详。可能是不小心点到哪里了吧。

前端异常日志监控sentry的部署

· 3 min read

需求场景

前端产生bug的情况也一样是很多的,可能是书写上的疏忽,可能是接口的异常,可能是用户端的网络异常,也可能是用户的手机设备问题。当一个项目的用户体量大的时候,线上监控就显得很有必要。现在国内也有一些线上前端日志监控的工具,不过大多需要收费,而且出于安全考虑,用户日志放在第三方也不是很放心的。所以能基于开源工具自行搭建一个是最好不过了。

sentry简介

sentry是一个开源的日志异常监控工具,国内部分知名公司的一些团队也在使用,如滴滴,有赞等。由于sentry是国外团队开发的,并不支持小程序,不过有赞团队已经基于sentry的客户端sdk修改了一个版本增加了对微信小程序的异常监控的支持。

环境要求

这个项目还是有点吃内存的,服务器内存最少2G,所以一般需要购买最少3G的服务器。服务器需安装docker,compose环境

一键部署

sentry团队已经为我们做了一键安装包onpremise,如果服务器docker,compose环境已经部署好了,一套下来只需5分钟。

开始部署

git clone https://github.com/getsentry/onpremise
cd onpremise
./install.sh

这个安装过程会比较长,请耐心等待,等到安装完成后,使用docker-compose启动即可通过http://[服务器ip]:9000访问。

docker-compose up -d  

后续版本更新

cd onpremise
git pull
./install.sh

Issue:Nginx转发9000端口无法获得真实ip

修改onpremise/nginx/ngin.conf配置文件,并重启容器。docker-compose restart

# Remove the Connection header if the client sends it,
# it could be "close" to close a keepalive connection
proxy_set_header Connection '';
proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Request-Id $request_id;
proxy_read_timeout 30s;
proxy_send_timeout 5s;

pm2启动后找不到node

· One min read

场景描述

当本地通过nvm等node版本管理工具安装过多个版本的node时,启动pm2时可能会出现找不到指定版本的node,而这个版本的node可能已被卸载,导致pm2启动时找不到node而报错.

解决方案

pm2 update