excel vlookup index match 等常用表达式备忘

计算当月天数 DAY

在任意单元格输入公式:

=DAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1)-1)

可以计算计算机系统时间为准的当月天数。

计算每月天数 EOMONTH

A1单元格是一个任意日期,B1单元格输入公式:

=DAY(EOMONTH(A1,0))

即可求出2月份天数。

excel每月天数

计算天数差 DATEDIF

在A1单元格输入前面的日期,比如2019-10-10

在A2单元格输入后面的日期,如2020-6-7

在A3单元格,输入公式

=DATEDIF(A1,A2,"d")

即可得出两者的天数差 “241”。

vlookup

Excel 要掌握 “4+1”:

  • 4个核心函数:vlookup、if、sum、sumif
  • 1个核心功能:数据透视表

抱歉,我还不会用= =,占个坑,等我以后需要了再研究研究。

preview

index

index 和 vlookup函数很像,但它不需要源数据的严格对齐,也不需要查找值必须在首列,更为灵活一些。

留个空,最近都没用到,先不看了,囧。

参考链接

SUMIF

参考链接

简单求和

=SUMIF(C3:D7,"女",D3:D7)

img

统计前3名成绩之和

=SUMIF(D3:D7,">"&LARGE(D3:D7,4))

函数LARGE(RANGE,K)的作用是返回数组中地K个最大值。如LARGE(D3:D7,4)返回的值为90,现在就不难理解公式:=SUMIF(D3:D7,”>”&LARGE(D3:D7,4))。

img

模糊求和

=SUMIF(B3:B7,"李*",D3:D7)

img

参考资料


安装桌面版的 Linux 备忘

  1. driver for wifi, 如果是笔记本的话,一般都要装。

  2. git 配置代理,国内经常拉不了github, 影响后续软件安装。

  3. 升级内核,免得后面出什么幺蛾子。

  4. 安装zsh、docker等重型工具。

  5. 安装synergy,从笔记本直接连接过去,不需要额外的键盘和鼠标。

    1. 系统启动自动运行
    2. 设置默认用户自动登录。settings->Users->automatic login
  6. 增加sudoer,免密。

  7. 安装wireguard,组成集群。

  8. 修改terminal界面

    1. terminal->edit->preferences
    2. 修改theme为dark
    3. 修改profile的默认command,打开窗口后运行 sudo su -
    4. 修改系统快捷键,我习惯用 Win + 空格 快速启动命令行。
    5. 取消关闭窗口的警告。
    6. 透明化
  9. 取消锁屏,settings->Power,

  10. 设置桌面壁纸,settings->Background

  11. 安装拼音

  12. 安装安装代理, chrome, typora, telegram, smartgit(有时需要单独源码安装git) ,wps, 等工具。

  13. 修改 Chrome 默认的标准字体为 liberation Mono

    image-20210804170138210

  14. 始终显示dock

  15. 安装idea (我现在不用idea了,用vscode online)

  16. gnome-tweak-tool 桌面配置

    1. alt + F2,运行命令gnome-tweak-tool,如果没有这个命令则安装。apt-get install gnome-tweak-tool.
    2. 恢复最大化最小化图标,或者记住快捷键 Win + ↑ Win + ↓

    3. alternatetab/
  17. 制作一部分桌面图标,参考文章——《debian 安装 IntelliJ Idea ,并增加应用图标》

    1. 参考系统已有的图标,gnome的图标路径一般在下面三个地方:
      1. /usr/share/applications
      2. /usr/local/share/applications
      3. ~/.local/share/applications

linux 配置 privoxy 实现系统全局/自动代理

用 Privoxy 可以将 socks5 代理转成 http 代理,并根据要访问的地址使用不同的代理,在桌面环境下是个非常有用的软件。对于开发人员来说更为重要,比如根据不同的域名指向不同的开发环境和测试环境。这篇记录使用的过程。

1. 安装并启动

apt-get install privoxy
systemctl enable privoxy
systemctl restart privoxy

2. 配置 privoxy

privoxy 的配置目录在文件夹 /etc/privoxy下。

进入目录 /etc/privoxy,可以看到目录结构大致为:

  • config 配置文件,这个文件很长。。
  • *.action 代理规则文件
  • *.filter 过滤规则文件

privoxy 的 filter (过滤)功能,可以用来实现广告拦截。不过这里只希望实现自动代理,在配置文件中把下面的 actionsfile 和 filterfile 内容注释掉:

actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action   # Main actions file
actionsfile user.action      # User customizations

filterfile default.filter
filterfile user.filter      # User customizations

然后加上自己的配置文件

actionsfile kelu.action

image-20201130180636552

当然,如果我们想全部代理也可以:

{+forward-override{forward-socks5 127.0.0.1:31080 .}}
.
/

可以指定转换后的 HTTP 代理地址,也可以使用默认端口 8118

listen-address  127.0.0.1:8118
listen-address  [::1]:8118

另一种写法的配置文件示例:


default	= +forward-override{forward .} 
pac 	= +forward-override{forward 127.0.0.1:8080}
 
{default}
/
 
{pac}
.baidu.com
.qq.com

3. 自动生成配置文件

使用 gfwlist2privoxy 自动生成配置文件。

apt-get intall python-pip
pip install gfwlist2privoxy

wget https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
gfwlist2privoxy -i gfwlist.txt -f /etc/privoxy/gfwlist.action -p 127.0.0.1:31080 -t socks5

运行后便生成一个 gfwlist.action,在 privoxy 里将其配置进去即可。

actionsfile gfwlist.action

说明:

-i/--input 输入,本地 gfwlist 文件或文件 URL。这里使用上面的 gfwlist
-f/ --file 输出,即生成的 action 文件的目录。这里输出到 /etc/privoxy/gfwlist.action
-p/ --proxy 代理地址,生成后可以修改。这里是 127.0.0.1:1081
-t/ --type 代理类型,生成后也可以修改。这里是 socks5
--user-rule 用户自定义规则文件,这个文件中的规则会被追加到 gfwlist 生成的规则后面

linux 安装拼音

虽然网上有了不少安装拼音的步骤,但是还是没法使用。这篇记录自己的使用过程。

1. 安装中文环境

dpkg-reconfigure locales

选中中文包: zh_CN.UTF-8

2. 安装拼音

在系统的软件中心,搜索pinyin安装。

image-20210127165720081

或者安装:

apt-get install ibus-libpinyin

3. 系统配置

搜索ibus首选项

image-20210127165824268

在区域与语言中增加输入法 chinease intelligent Pinyin,一定要注意,是ibus-libpinyinChinese(Intelligent Pinyin)

4. 重启系统

重启系统后就可以看到拼音输入法了。

必须要重启系统。我在这里栽了很多次跟头了。


linux gnome3 截屏工具 gnome-screenshot

  1. 捕捉整个屏幕

    $ gnome-screenshot
    
  2. -w 参数捕捉当前 Shell 窗口

    $ gnome-screenshot -w
    
  3. -a 参数捕捉指定区域

    $ gnome-screenshot -a
    
  4. -B 参数去除窗口的边框

    $ gnome-screenshot -w -B
    
  5. -d 参数来延迟截取功能从而截取其他活动窗口

    $ gnome-screenshot -d 5
    
  6. -e 参数给截图添加效果

    -e 参数后面根据需要添加“border”或者“shadow

    $ gnome-screenshot -wB -e border
    

    为了方便使用,可以在系统中配置快捷键: 全部配置-> 键盘:

参考资料


linux gnome 在 x 环境下设置软件自动启动

在服务器中,开机自动运行我们一般是通过 /etc/rc.local 进行自动启动。然而很多桌面端的软件基于x环境的,在 rc.local 里写无法运行的。通过 gnome-tweak工具,直接使用它自带的开机启动功能。

安装 gnome-tweak-tool

apt-get install gnome-tweak-tool

搜索gnome-tweak-tool,点击运行。

image-20201214162603510

添加软件即可:

image-20201214162652343

如果找不到对应的应用图标,就制作图标,移动到文件夹/usr/share/applications 下,再进行添加。


kubernetes 中的 iptables 规则探究草稿

这篇文章是我草稿,方便未来copy,也没有什么结论。

集群网络相关组件使用 iptables,calico。集群信息如下:

image-20201022155522956

image-20201022155556767

常用命令:

iptables -S -t filter 
iptables -nvL -t filter 

具体kube-proxy使用了何种模式,可以通过开头的日志中确定。

 kubectl logs -n kube-system kube-proxy-xxxx
 
 
 
1 I1013 02:49:50.053115       1 node.go:135] Successfully retrieved node IP: 10.19.0.56
2 I1013 02:49:50.053178       1 server_others.go:172] Using ipvs Proxier.
3 W1013 02:49:50.053393       1 proxier.go:420] IPVS scheduler not specified, use rr by default
4 I1013 02:49:50.053601       1 server.go:571] Version: v1.17.2

filter

链条:

-N KUBE-FIREWALL
-N KUBE-FORWARD

-N cali-FORWARD
-N cali-INPUT
-N cali-OUTPUT
-N cali-failsafe-in
-N cali-failsafe-out
-N cali-forward-check
-N cali-forward-endpoint-mark
-N cali-from-endpoint-mark
-N cali-from-hep-forward
-N cali-from-host-endpoint
-N cali-from-wl-dispatch
-N cali-from-wl-dispatch-0

-N cali-fw-cali01b67da5b30
-N cali-fw-cali01f05402926
-N cali-fw-cali07f2c47454d
-N cali-fw-cali09a918145b4
-N cali-fw-cali20c7068a020
-N cali-fw-calie74a6684a50

-N cali-pri-_b689sAm1phz5c-Iq03
-N cali-pri-_hNSGmJYNT8uLIzxesP
-N cali-pri-_mel_KhKBhu1g7PDmvg
-N cali-pri-_rXtG25Noohen7RWUxB

-N cali-pri-kns.default
-N cali-pri-kns.kube-system
-N cali-pri-kns.monitor
-N cali-pri-ksa.default.default
-N cali-pri-ksa.monitor.default

-N cali-pro-_b689sAm1phz5c-Iq03
-N cali-pro-_hNSGmJYNT8uLIzxesP
-N cali-pro-_mel_KhKBhu1g7PDmvg
-N cali-pro-_rXtG25Noohen7RWUxB
-N cali-pro-kns.default
-N cali-pro-kns.kube-system
-N cali-pro-kns.monitor
-N cali-pro-ksa.default.default
-N cali-pro-ksa.monitor.default

-N cali-set-endpoint-mark
-N cali-set-endpoint-mark-0

-N cali-sm-cali01b67da5b30
-N cali-sm-cali01f05402926
-N cali-sm-cali07f2c47454d
-N cali-sm-cali09a918145b4
-N cali-sm-cali20c7068a020
-N cali-sm-calie74a6684a50
-N cali-to-hep-forward
-N cali-to-host-endpoint
-N cali-to-wl-dispatch

nat

三个链条

PREROUTING:
  KUBE-FIREWALL:
    KUBE-MARK-DROP
 
OUTPUT: 
  KUBE-SERVICES:
    KUBE-MARK-MASQ:
    	-A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000
    KUBE-NODE-PORT
   
POSTROUTING:
  KUBE-POSTROUTING:
    -A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x4000/0x4000 -j MASQUERADE
    -A KUBE-POSTROUTING -m comment --comment "Kubernetes endpoints dst ip:port, source ip for solving hairpin purpose" -m set --match-set KUBE-LOOP-BACK dst,dst,src -j MASQUERADE
  
其它:
  KUBE-LOAD-BALANCER:(无引用)
	KUBE-MARK-MASQ

创建一个deployment和service:

iptables -S -t filter > sfilter
iptables -nvL -t filter > filter
iptables -S -t nat > snat
iptables -nvL -t nat > nat

kubectl create ns kelu
kubectl run cka2 --image=nginx --port=80 --expose=true -n kelu

iptables -S -t filter > sfilter2
iptables -nvL -t filter > filter2
iptables -S -t nat > snat2
iptables -nvL -t nat > nat2

从文件分析可知,新增的内容在 iptables 中主要体现在主机 rqkubedev02 上的 filter表,nat 表和其它机器上的nat+filter表没有变化:

vimdiff sfilter sfilter2

image-20201022163759124

image-20201022163811566

image-20201022163821372

主要多了这些内容:

-N cali-fw-calida47883c356
-N cali-pri-kns.kelu
-N cali-pri-ksa.kelu.default
-N cali-pro-kns.kelu
-N cali-pro-ksa.kelu.default
-N cali-sm-calida47883c356
-N cali-tw-calida47883c356

image-20201022165103760

这里出现了几个关键字

image-20201022165441068

在主机的interface中也可以找到这张网卡:

calida47883c356

1062: calida47883c356@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link
       valid_lft forever preferred_lft forever

通过注释和关联关系,可以猜出来应该是用来做policy相关的注释。

查看此台主机上的nginx容器:

docker ps | grep nginx

cbe00452d31e        nginx                                    "/docker-entrypoint.…"   22 minutes ago      Up 22 minutes                                k8s_cka2_cka2-75dbf7c54-gd27w_kelu_7f813a95-6359-4e7d-9d88-d216c8a39457_0

偶尔运行/保存iptables一下看看:

iptables -S -t filter > sfilter3
iptables -nvL -t filter > filter3
iptables -S -t nat > snat3
iptables -nvL -t nat > nat3

iptables -S -t raw > sraw3
iptables -nvL -t raw > raw3
iptables -S -t mangle > smangle3
iptables -nvL -t mangle > mangle3

iptables -S -t filter > sfilter4
iptables -nvL -t filter > filter4
iptables -S -t nat > snat4
iptables -nvL -t nat > nat4

iptables -S -t raw > sraw4
iptables -nvL -t raw > raw4
iptables -S -t mangle > smangle4
iptables -nvL -t mangle > mangle4

vimdiff sfilter3 sfilter4
vimdiff snat3 snat4

vimdiff sraw3 sraw4
vimdiff smangle3 smangle4

创建calico global network policy

cat global_network_policy.yaml
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: deny-cka
spec:
  selector: run  == 'cka2'
  types:
  - Ingress
  - Egress
  ingress:
  egress:

对filter、raw和mangle有改变,如下:

-N cali-pi-default.deny-cka
-N cali-po-default.deny-cka

image-20201022211048011

image-20201022211145325

image-20201022202141173

image-20201022202204640

往里面添数据看看:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: deny-cka
spec:
  selector: run  == 'cka2'
  types:
  - Ingress
#  - Egress
  ingress:
  - action: Allow
    protocol: TCP
    source:
      selector: color == 'blue'
    destination:
      ports:
        - 80
#  egress:

iptables:

iptables -S -t filter > sfilter5
iptables -nvL -t filter > filter5
iptables -S -t nat > snat5
iptables -nvL -t nat > nat5

iptables -S -t raw > sraw5
iptables -nvL -t raw > raw5
iptables -S -t mangle > smangle5
iptables -nvL -t mangle > mangle5

vimdiff sfilter5 sfilter4
vimdiff snat5 snat4

vimdiff sraw5 sraw4
vimdiff smangle5 smangle4

删除了 egress,对filter、raw和mangle有改变,如下:

filter少了egress相关的filter,多了ingress的内容。

image-20201022212057202

image-20201022203243556

image-20201022203929480

此时从外部和内部都已经没办法访问pod了。

运行新的deployment,打上标签 color == ‘blue’ 。

iptables -S -t filter > sfilter6
iptables -nvL -t filter > filter6
iptables -S -t nat > snat6
iptables -nvL -t nat > nat6

iptables -S -t raw > sraw6
iptables -nvL -t raw > raw6
iptables -S -t mangle > smangle6
iptables -nvL -t mangle > mangle6

vimdiff sfilter5 sfilter6
vimdiff snat5 snat6

vimdiff sraw5 sraw6
vimdiff smangle5 smangle6

只改变了 filter 表:

image-20201022213541332

image-20201022213629665

image-20201022213654436

image-20201022213708641