Struct Tags

结构体标签

在定义结构时,可以为struct定义一个标签,这个标签是作为结构体字段的一个附加属性,主要是反射包会使用到这个属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
	"fmt"
	"reflect"
)

func main() {
	type S struct {
		F string `species:"gopher" color:"blue"`
	}

	s := S{}
	st := reflect.TypeOf(s)
	field := st.Field(0)
	fmt.Println(field.Tag.Get("color"), field.Tag.Get("species"))

}

输出结果

1
blue gopher

结构体SF成员具有两个属性speciescolor,其属性的值分别为bluegopher。如果不使用反射去取这个属性,在定义时写不写属性都是无所谓的。

Read on →
go

你不知道的Go

Read on →
go

信任关系建立

建立host1到host2的信任关系

如果A的rsa文件不存在可以这样建立

首先在host1上:

create_rsa.sh
1
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

添加信任关系

host2上,将host1~/.ssh/id_rsa.pub文件内容追加host2authorized_keys文件中

避免第一次连接出现添加fingerprint的询问

host1上执行:

1
ssh-keyscan host2 >> ~/.ssh/known_hosts
Read on →

命令行参数

阅读docker源码第一个文件DOCKER/docker/docker.go,这是docker的主函数所在的地方。简单来说,这个文件的代码就做了一件事:解析命令行参数,然后根据命令行参数再分流到各种子过程的调用。

Read on →

Sort

sort排序常用参数

-n : 按照数值排序

-u : 过滤重复的行

-r : 降序排序,默认升序

-t : 指定分段符号

-k : 按照第几个字段(1…)排序

默认sort是按照字符排序的。

sort临时目录

默认情况下sort使用/tmp作为临时文件存放目录,如果根分区很小,可能造成分区磁盘飙升,为避免这种情况可以使用-T参数来指定sort的临时目录:

1
sort -T /path/to/tmp_directory

sort不为人知的一个深坑

默认情况下,sort将排序对象作为字符串进行排序,并且声称按照ANSII字母顺序进行排序,实际上,如果系统的LC_ALL环境变量为空的话,sort的排序并不一定是按字母顺序进行排序的,这会导致sort的下游依赖程序运行得不稳定,所以,如果要确保sort正确排序,需要正确设置环境变量:

1
export LC_ALL=C

为什么这样设置,可以man sort看一下它的warning部分的说明。

Server Load

先看几个处理器

1
grep -c 'model name' /proc/cpuinfo

比如结果是4

top查看系统整体情况

执行top命令查看系统负载情况: 1. 关注load average系统负载的当前,5分钟前,15分钟前负载,最好小于cpu个数 2. 第二行显示系统进程概况 3. 第四行us用户占用cpu,sy系统占用cpu,ni,id空闲比例,wa io等待,hi,si swap交换 4. 最后是内存情况和交换分区

iostat检查io情况

iostat -x,需要关注await即io等待时间,单位ms,一般要小于5ms; %util是io处理时间除以总时间,代表io繁忙度,大于70%需要注意。

Read on →

Linux下查看线程数

1. cat /proc/${pid}/status

### 2. ps -mp <PID>

Route

算是记录一个教训吧。

下午我的机器突然不能上外网,尝试内网和别的机器互访都没有问题,就是访问外网显示connect: Network is unreachablenslookup查看DNS解析也没有问题,就是没想到网络不能到达很有可能是没有路由信息,最后朋友指点发现没有默认网关(route -n),外网ip没得路由规则走,添加默认网关后ok:

1
route add default gw 10.46.148.1

提醒自己以后把学到的东西利用起来!

Read on →

Ls遍历空目录处理

先说说原因:for循环是利用空格做分隔符,所以可以这样打印句子中的单词:

centence="Linux is cool"
for word in $centence;do
	echo $word
done

有时用ls命令遍历目录会遇到空目录:

1
2
3
for d in $(ls);do
	echo "$d"
done

处理办法是:

1
2
3
4
ls -1 | while read d
do
	echo "$d"
done

Date命令

首先看看常用的格式字符串

 %Y 年
 %m 月
 %d 日
 %H 时
 %M 分
 %S 秒
 %s 时间戳(秒)

date命令常用操作

获取当前时间

date +%Y-%m-%d    # 2014-02-21
Read on →