命令 awk

命令 awk

awk 命令结构

awk -F "," '/^a/ {print $3}' f

-F 部分是参数

’ 内前面是范围,后面是操作

awk 语言的数组下标是从 1 开始的,0 表示整个原始字符串。

详细命令

比如 netstat 命令打印的网络状况如下:

阅读全文 →

dig 使用

dig 使用

dig 是 Domain information Groper 的缩写,是一个 DNS 查询工具,用于 DNS 的故障诊断。

常用用法

命令介绍

dig @server name type

server 是待查询服务器的名称或者 ip 地址,一般指定为 DNS 服务器
name 是将要查询的名称
type 显示所需要查询的类型,ANY,A,TXT,MX,SIG 等,不提供任何参数默认是对 A 记录的查询。

阅读全文 →

Git 批量删除分支

Git 批量删除分支

1. 批量删除本地分支

在平时的开发中,一言不和就会新建一个分支来开始新的工作,当工作完成后我们可能不会及时的删除掉建立的分支,久而久之,查看分支的时候就出现了类似下面的情况。

阅读全文 →

同一客户端使用多个 git 账号

同一客户端使用多个 git 账号

有时候我们希望自己的 github 使用一个私钥,公司的 git 账号使用另一个私钥。这样就需要在客户端上配置支持多个 git 账号。

清除 Git 的全局设置

git config --global --unset user.name
git config --global --unset user.email

生成新的 SSH keys

使用 ssh-keygen 生成新的秘钥对。注意这个时候需要输入文件名,使用默认的名字会覆盖已有的。比如这里使用名字 id_rsa_new

阅读全文 →

Docker 设置代理

配置代理

sudo mkdir -p /etc/systemd/system/docker.service.d
# 写入 /etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://bb.bb.com"
Environment="HTTPS_PROXY=http://bb.bb.com"
Environment="NO_PROXY=aa.bb.com"

然后

sudo systemctl daemon-reload
sudo systemctl restart docker

配置镜像仓库

更新:大部分已经不可用

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

阅读全文 →

Git 常用撤回操作

Git 常用撤销操作

1 没有 add 撤销

git checkout <file-path>

这样就可以把文件恢复到 git 版本里的样子。

2 add 后撤销

如果修改的文件已经 add 了,可以用下面的方法撤销 add。

git reset HEAD <file-name> # 撤销某个文件
git reset # 撤销所有文件

同样,另一个操作也可以达到一样的效果

阅读全文 →

Go channel 实现

整体结构

Channel 的操作对应在运行时里的方法(都在 $GORROT/src/runtime/chan.go 里)

Channel 操作 运行时方法
make(chan int, 4) makechan(int, 4)
make(chan int) makechan(int, 0)
ch <- v chansend1(ch, &v)
v <- ch chanrecv1(ch, &v)
close(ch) closechan(ch)

channel 的基本数据结构

makechan 返回的是一个叫做 hchan 的结构。所以 chan 本质上是用 hchan 表示的,它的传参与赋值始终都是指针形式,每个 hchan 对象代表着一个 chan。

阅读全文 →

go generate 使用

当运行 go generate 命令时,他会扫描当前包相关的源代码文件,找出所有包含有 //go:generate 的特殊注释,提取并执行注释后面的命令,命令为可执行程序,如同在 shell 下面执行。

需要注意的

  • 这个注释必须在 .go 源码文件中

阅读全文 →

go module 使用

1 背景

Go 在 1.11 版本上发布了 go module 版本管理方案,用于解决被人诟病已久的 Go 项目版本管理问题。这个方案最早来自 Go & Versioning。这个方案引入了一些新的概念,也抛弃了原有的 GOPATH,导致在使用思路上有一些区别。

阅读全文 →

go trace 使用

1 Go trace 介绍

go trace 在 go 1.5 版本加入,会在运行中收集以下事件的所有数据

  • 创建,启动和终止 goroutine

  • 阻塞/非阻塞 goroutines(syscalls, channels, locks)

  • 网络 io

  • Syscalls

  • gc

收集后不会做任何类型的聚合和抽样。

pprof 用来分析 CPU 和内存分别用在了哪里,trace 用来确定什么阻止了 goroutine 运行,goroutine 在 OS 线程上如何被调度。

阅读全文 →