分类目录其它工具

WordPress 文章禁用自动保存、修订版本的两种方法

方法一、通过修改 WordPress 配置文件实现功能禁用

不得不说,WordPress 有非常多的隐藏功能都是可以通过 WordPress 安装根目录下的 wp-config.php 这个配置文件来实现功能的启用禁用等。

//禁用自动保存
define(‘AUTOSAVE_INTERVAL’, false);
//设置自动保存间隔/秒
define(‘AUTOSAVE_INTERVAL’, 120);
//禁用文章修订
define(‘WP_POST_REVISIONS’, false);
//设置修订版本最多允许几个
define(‘WP_POST_REVISIONS’, 3);

方法二、当前使用主题 functions.php 文件添加代码

  1. 禁用 WordPress 自动保存
//禁用自动保存(方法一)
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
//禁用自动保存(方法二)
add_action('wp_print_scripts', 'fanly_no_autosave');
function fanly_no_autosave() { wp_deregister_script('autosave'); }
  1. 禁用 WordPress 修订版本
//禁用所有文章类型的修订版本
add_filter( 'wp_revisions_to_keep', 'fanly_wp_revisions_to_keep', 10, 2 );
function fanly_wp_revisions_to_keep( $num, $post ) { return 0;}
//禁用某种文章类型的修订版本
add_filter( 'wp_revisions_to_keep', 'fanly_wp_revisions_to_keep', 10, 2 );
function fanly_wp_revisions_to_keep( $num, $post ) {
    if ( 'post_type' == $post->post_type ) { //引号中 post_type 改为你想禁用修订版本的文章类型
        return 0;
    }
    return $num;
}

常见 WordPress 常见默认有的文章类型有:

文章(Post Type: ‘post’)
页面(Post Type: ‘page’)
附件媒体(Post Type: ‘attachment’)
修订版本(Post Type: ‘revision’)
导航菜单(Post Type: ‘nav_menu_item’)

当然如果网站使用了自定义文章类型,那么就是自定义的名称了。

FRP

FRP 项目地址:https://github.com/fatedier/frp
https://www.cnblogs.com/sanduzxcvbnm/p/8508741.html

一键安装脚本项目地址:https://github.com/clangcn/onekey-install-shell/

下载一键部署脚本
$ wget –no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh

$ chmod 700 ./install-frps.sh 授权
这个一键部署脚本比较好用,为了提高国内用户下载安装包速度还提供了阿里云节点的安装源。整个脚本使用起来也比较简单,对一些常用的 FRP 服务端配置参数都做了交互式选择让用户可以方便的根据自己实际情况进行选择。脚本比较贴心的一点是对默认的公网地址进行了检测,省去了手动输入的麻烦。

install-frps.sh {install|uninstall|update|config}
配置 FRP $ ./install-frps.sh config
更新 FRP 服务端$ ./install-frps.sh update
卸载 FRP 服务端$ ./install-frps.sh uninstall

FRP 服务端安装完成后,一键部署脚本还提供了一个日常管理 FRP 服务端的管理脚本来进行日常的启动、重启、停止等操作,非常的方便。
frps status manage : frps {start|stop|restart|status|config|version}
新版可以直接使用不用以下配制

Usage: /etc/init.d/frps {start|stop|restart|status|config|version}

手动安装后配制成为服务启动 /etc/systemd/system# vi frps.service

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
# User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
# /root/frp_0.20.0_linux_amd64
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

#启动 frp 并设置开机启动
systemctl enable frpc
systemctl start frpc
systemctl status frpc

===

客户端下载 https://diannaobos.com/frp/
nohup ./frpc -c ./frpc.ini & 启用
jobs -l
ps -aux|grep frpc

2、修改配置文件    frpc.ini

[common]
server_addr = xxx.com
server_port = 5443

### console or real logFile path like ./frpc.log
log_file = ./frpc.log

### trace, debug, info, warn, error
log_level = info
log_max_days = 3

### for authentication
token = yourToken

### your proxy name will be changed to {user}.{proxy}
user = ser28

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 822

[http]
type = http
local_ip = 127.0.0.1
local_port = 80
subdomain = web28

[https]
type = https
local_ip = 127.0.0.1
local_port = 443
subdomain = web28

注意:访问服务端的80端口就相当于访问你本地的8080端口

3、启动

windows cmd里边进入frp客户端相应目录,启动frps.exe or frps.exe -c frpc.ini
注意保持与服务器版本一致和token的变化
# 0.17.0以前的版本 #privilege_token = yourToken
# 0.17.0以后的版本 token = yourToken
开启子域名,先设置*.xxx.com的解析,在frps.ini增加以下

subdomain_host = xxx.com

搭建ngrok服务器

apt-get install build-essential golang mercurial git     安装git 和Golang

git clone https://github.com/tutumcloud/ngrok.git ngrok

生成签名或申请SSL证书

cd ngrok

NGROK_DOMAIN=”ngrok.xxx.com”

openssl genrsa -out base.key 2048

openssl req -new -x509 -nodes -key base.key -days 10000 -subj “/CN=$NGROK_DOMAIN” -out base.pem

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj “/CN=$NGROK_DOMAIN” -out server.csr

openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

替换证书

cp base.pem assets/client/tls/ngrokroot.crt  

cp server.crt assets/server/tls/snakeoil.crt

cp server.key assets/server/tls/snakeoil.key

编译

make release-server release-client

编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序。

启动服务端

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=“ngrok.xxx.com” -httpAddr=“:880” -httpsAddr=“:8443”

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。

服务端配置

设置为系统程序,并后台运行,在/etc/systemd/system/目录下创建服务ngrok.service,内容为

[Unit]
Description=ngrok server
After=network.target

[Service]

Type=simple
ExecStart=/opt/ngrok/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain=”ngrok.xxx.com” -httpAddr=”:80″ -httpsAddr=”:443″ -log "/var/log/ngrokd.log"

Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl start ngrok.service启动服务

使用服务

sudo systemctl enable ngrokd
sudo systemctl start ngrokd
sudo systemctl status ngrokd

编译客户端

(1)windows

GOOS=windows GOARCH=amd64 make release-client

(2)mac

GOOS=darwin GOARCH=amd64 make release-client

#linux客户端
GOOS=linux GOARCH=amd64(386) make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server

客户端配置

执行对应的命令会在bin目录下生成相对应的windows、mac目录,ngrok.exe就存放在对应目录下。将对应的ngrok.exe下载到本地。

在同级目录下新建一个配置文件ngrok.cfg

server_addr: “ngrok.xxx.com:4443”

trust_host_root_certs: false

同级目录下新建一个启动脚本startup.bat

@echo on

cd %cd%

#ngrok -proto=tcp 22

#ngrok start web

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080

 

客户端服务添加到 systemd 自启动服务中,保存下面内容到文件 /lib/systemd/system/ngrok.service

[Unit]
Description=ngrok client
After=network.target

[Service]
Type=simple
ExecStart=/opt/ngrok/ngrok -config "/opt/ngrok/ngrok.yml" -log "/var/log/ngrok.log" start transmission ssh
Restart=on-failure

[Install]
WantedBy=multi-user.target

ExecStart 加载了配置文件 /opt/ngrok/ngrok.ym
server_addr: ngrok.xxx.com:4443
trust_host_root_certs: false
tunnels:
  transmission:
    remote_port: 9091
    proto:
      tcp: 9091
  ssh:
    remote_port: 23333
    proto:
      tcp: 22

FYI:

Can’t load /root/.rnd into RNG

cd /root
openssl rand -writerand .rnd

ping ngrok.xxx.com 提示找不到 host, 直接把域名和 IP 写到内服务器的 /etc/hosts 文件上

gitlab安装配置使用

Docker install

gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本

$ docker pull gitlab/gitlab-ce
docker pull twang2218/gitlab-ce-zh 汉化版

sudo docker run  --name gitlab \
  -itd \
  -p 443:443 -p 80:80 -p 222:22 \
  --privileged=true \
  -v /Users/sweet/gitlab/config:/etc/gitlab:Z \
  -v /Users/sweet/gitlab/logs:/var/log/gitlab:Z \
  -v /Users/sweet/gitlab/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce

 --restart always \

sudo docker exec -it gitlab /bin/bash
You can also just edit /etc/gitlab/gitlab.rb:
sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb

# gitlab.rb文件内容默认全是注释
$ vim /home/gitlab/config/gitlab.rb

# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.199.231'

# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.199.231'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
:wq #保存配置文件并退出
# 重启gitlab容器
$ docker restart gitlab

====================
sudo apt-get install -y curl openssh-server ca-certificates 依赖
sudo apt-get install -y postfix 发送邮件
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash 下载
sudo EXTERNAL_URL=“http://gitlab.example.com”apt-get install gitlab-ee 安装
首次访问时,您将被重定向到密码重置屏幕。提供初始管理员帐户的密码,您将被重定向回登录屏幕。使用默认帐户的用户名root登录

1)进入文件gitlab.rb,修改EXTERNAL_URL地址和端口号

sudo vim /etc/gir/gitlab.rb

sudo vim /etc/gitlab/gitlab.rb

EXTERNAL_URL 修改为本机服务地ip地址,并分配端口号(例如:4567)。

2)重新配置 sudo gitlab-ctl reconfigure

3)开启服务 service sshd start service postfix start

4)查看运行状态: sudo gitlab-ctl status 如果run正常,则成功
Git global setup

git config –global user.name “Administrator”
git config –global user.email “admin@example.com”

Create a new repository

git clone http://e132f243a5fe/shanpai/config.git
cd config
touch README.md
git add README.md
git commit -m “add README”
git push -u origin master

Push an existing folder

cd existing_folder
git init
git remote add origin http://e132f243a5fe/shanpai/config.git
git add .
git commit -m “Initial commit”
git push -u origin master

Push an existing Git repository

cd existing_repo
git remote rename origin old-origin
git remote add origin http://e132f243a5fe/shanpai/config.git
git push -u origin –all
git push -u origin –tags

ERROR

Url is blocked: Requests to the local network are not allowed
Admin area => Settings => Network ,然后点击 Outbound requests 右边 的“expand”按钮,选中Allow requests to the local network from web hooks and services

dockerfile指令说明

指令:FROM
功能描述:设置基础镜像
语法:FROM < image>[:< tag> | @< digest>]
提示:镜像都是从一个基础镜像(操作系统或其他镜像)生成,可以在一个Dockerfile中添加多条FROM指令,一次生成多个镜像
注意:如果忽略tag选项,会使用latest镜像

指令:MAINTAINER
功能描述:设置镜像作者
语法:MAINTAINER < name>

指令:RUN
功能描述:
语法:RUN < command>
RUN [“executable”,”param1”,”param2”]
提示:RUN指令会生成容器,在容器中执行脚本,容器使用当前镜像,脚本指令完成后,Docker Daemon会将该容器提交为一个中间镜像,供后面的指令使用
补充:RUN指令第一种方式为shell方式,使用/bin/sh -c < command>运行脚本,可以在其中使用\将脚本分为多行
RUN指令第二种方式为exec方式,镜像中没有/bin/sh或者要使用其他shell时使用该方式,其不会调用shell命令
例子:RUN source $HOME/.bashrc;\
echo $HOME

RUN [“/bin/bash”,”-c”,”echo hello”]

RUN [“sh”,”-c”,”echo”,”$HOME”] 使用第二种方式调用shell读取环境变量

指令:CMD
功能描述:设置容器的启动命令
语法:CMD [“executable”,”param1”,”param2”]
CMD [“param1”,”param2”]
CMD < command>
提示:CMD第一种、第三种方式和RUN类似,第二种方式为ENTRYPOINT参数方式,为entrypoint提供参数列表
注意:Dockerfile中只能有一条CMD命令,如果写了多条则最后一条生效

指令:LABEL
功能描述:设置镜像的标签
延伸:镜像标签可以通过docker inspect查看
格式:LABEL < key>=< value> < key>=< value> …
提示:不同标签之间通过空格隔开
注意:每条指令都会生成一个镜像层,Docker中镜像最多只能有127层,如果超出Docker Daemon就会报错,如LABEL ..=.. <假装这里有个换行> LABEL ..=..合在一起用空格分隔就可以减少镜像层数量,同样,可以使用连接符\将脚本分为多行
镜像会继承基础镜像中的标签,如果存在同名标签则会覆盖

指令:EXPOSE
功能描述:设置镜像暴露端口,记录容器启动时监听哪些端口
语法:EXPOSE < port> < port> …
延伸:镜像暴露端口可以通过docker inspect查看
提示:容器启动时,Docker Daemon会扫描镜像中暴露的端口,如果加入-P参数,Docker Daemon会把镜像中所有暴露端口导出,并为每个暴露端口分配一个随机的主机端口(暴露端口是容器监听端口,主机端口为外部访问容器的端口)
注意:EXPOSE只设置暴露端口并不导出端口,只有启动容器时使用-P/-p才导出端口,这个时候才能通过外部访问容器提供的服务

指令:ENV
功能描述:设置镜像中的环境变量
语法:ENV < key>=< value>…|< key> < value>
注意:环境变量在整个编译周期都有效,第一种方式可设置多个环境变量,第二种方式只设置一个环境变量
提示:通过${变量名}或者 $变量名使用变量,使用方式${变量名}时可以用${变量名:-default} ${变量名:+cover}设定默认值或者覆盖值
ENV设置的变量值在整个编译过程中总是保持不变的

指令:ADD
功能描述:复制文件到镜像中,不能用在 multistage 的场景下,ADD 命令可以完成 COPY 命令的所有功能,并且还可以完成两类超酷的功能:

  • 解压压缩文件并把它们添加到镜像中 ADD nickdir.tar.gz
  • 从 url 拷贝文件到镜像中,docker 官方建议我们当需要从远程复制文件时,最好使用 curl 或 wget 命令来代替 ADD 命令。原因是,当使用 ADD 命令时,会创建更多的镜像层,当然镜像的 size 也会更大

语法:ADD < src>… < dest>|[“< src>”,… “< dest>”]
注意:当路径中有空格时,需要使用第二种方式
当src为文件或目录时,Docker Daemon会从编译目录寻找这些文件或目录,而dest为镜像中的绝对路径或者相对于WORKDIR的路径
提示:src为目录时,复制目录中所有内容,包括文件系统的元数据,但不包括目录本身
src为压缩文件,并且压缩方式为gzip,bzip2或xz时,指令会将其解压为目录
如果src为文件,则复制文件和元数据
如果dest不存在,指令会自动创建dest和缺失的上级目录

***对于目录而言,COPY 和 ADD 命令具有相同的特点:只复制目录中的内容而不包含目录自身,如果要包含目录本身需要在目标路径中指定这个目录的名称

在使用 COPY 和 ADD 命令时,我们可以通过一些技巧来加速镜像的 build 过程。比如把那些最不容易发生变化的文件的拷贝操作放在较低的镜像层中,这样在重新 build 镜像时就会使用前面 build 产生的缓存。

指令:COPY
功能描述:复制文件到镜像中 仅仅是把本地的文件拷贝到容器镜像中,COPY 命令是最合适不过的,在 multistage 的用法中,可以使用 COPY 命令把前一阶段构建的产物拷贝到另一个镜像中
语法:COPY < src>… < dest>|[“< src>”,… “< dest>”]
提示:指令逻辑和ADD十分相似,同样Docker Daemon会从编译目录寻找文件或目录,dest为镜像中的绝对路径或者相对于WORKDIR的路径

指令:ENTRYPOINT
功能描述:设置容器的入口程序
语法:ENTRYPOINT [“executable”,”param1”,”param2”]
ENTRYPOINT command param1 param2(shell方式)
提示:入口程序是容器启动时执行的程序,docker run中最后的命令将作为参数传递给入口程序
入口程序有两种格式:exec、shell,其中shell使用/bin/sh -c运行入口程序,此时入口程序不能接收信号量
当Dockerfile有多条ENTRYPOINT时只有最后的ENTRYPOINT指令生效
如果使用脚本作为入口程序,需要保证脚本的最后一个程序能够接收信号量,可以在脚本最后使用exec或gosu启动传入脚本的命令
注意:通过shell方式启动入口程序时,会忽略CMD指令和docker run中的参数
为了保证容器能够接受docker stop发送的信号量,需要通过exec启动程序;如果没有加入exec命令,则在启动容器时容器会出现两个进程,并且使用docker stop命令容器无法正常退出(无法接受SIGTERM信号),超时后docker stop发送SIGKILL,强制停止容器
例子:FROM ubuntu <换行> ENTRYPOINT exec top -b

指令:VOLUME
功能描述:设置容器的挂载点
语法:VOLUME [“/data”]
VOLUME /data1 /data2
提示:启动容器时,Docker Daemon会新建挂载点,并用镜像中的数据初始化挂载点,可以将主机目录或数据卷容器挂载到这些挂载点

指令:USER
功能描述:设置RUN CMD ENTRYPOINT的用户名或UID
语法:USER < name>

指令:WORKDIR
功能描述:设置RUN CMD ENTRYPOINT ADD COPY指令的工作目录
语法:WORKDIR < Path>
提示:如果工作目录不存在,则Docker Daemon会自动创建
Dockerfile中多个地方都可以调用WORKDIR,如果后面跟的是相对位置,则会跟在上条WORKDIR指定路径后(如WORKDIR /A WORKDIR B WORKDIR C,最终路径为/A/B/C)

指令:ARG
功能描述:设置编译变量
语法:ARG < name>[=< defaultValue>]
注意:ARG从定义它的地方开始生效而不是调用的地方,在ARG之前调用编译变量总为空,在编译镜像时,可以通过docker build –build-arg < var>=< value>设置变量,如果var没有通过ARG定义则Daemon会报错
可以使用ENV或ARG设置RUN使用的变量,如果同名则ENV定义的值会覆盖ARG定义的值,与ENV不同,ARG的变量值在编译过程中是可变的,会对比使用编译缓存造成影响(ARG值不同则编译过程也不同)
例子:ARG CONT_IMAG_VER <换行> RUN echo $CONT_IMG_VER
ARG CONT_IMAG_VER <换行> RUN echo hello
当编译时给ARG变量赋值hello,则两个Dockerfile可以使用相同的中间镜像,如果不为hello,则不能使用同一个中间镜像

指令:ONBUILD
功能描述:设置自径想的编译钩子指令
语法:ONBUILD [INSTRUCTION]
提示:从该镜像生成子镜像,在子镜像的编译过程中,首先会执行父镜像中的ONBUILD指令,所有编译指令都可以成为钩子指令

指令:STOPSIGNAL
功能描述:设置容器退出时,Docker Daemon向容器发送的信号量
语法:STOPSIGNAL signal
提示:信号量可以是数字或者信号量的名字,如9或者SIGKILL,信号量的数字说明在Linux系统管理中有简单介绍

广告

常用简写

CPM:千次广告展示计费

CPT:按时间段计费广告

CPC:点击竞价广告

 

基本功能

投放,检索,监测,计费,报表

广告维度,用户画像,AI

ubuntu zip文件

1.功能作用:解压缩zip文件

2.位置:/usr/bin/unzip

3.格式用法:unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]

4.主要参数

-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-l 显示压缩文件内所包含的文件
-f 更新现有的文件
-t 检查压缩文件是否正确,但不解压
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中
-z 仅显示压缩文件的备注文字
-v 执行是时显示详细的信息。或查看压缩文件目录,但不解压
-T 将压缩文件内的所有文件的最新变动时间设为解压缩时候的时间
-x 指定不要处理.zip压缩文件中的哪些文件
-d 指定文件解压缩后所要存储的目录
-n 解压缩时不要覆盖原有的文件
-q 安静模式,执行时不显示任何信息
-o 不必先询问用户,unzip执行后覆盖原有文件
-a 对文本文件进行必要的字符转换
-j 不处理压缩文件中原有的目录路径
-aa 把所有的文件目录当作文本处理
-U use escapes for all non-ASCII Unicode
-UU 忽略Unicode编码字符
-C 压缩文件中的文件名称区分大小写
-L 将压缩文件中的全部文件名改为小写
-X 解压缩时同时回存文件原来的UID/GID
-V 保留VMS的文件版本信息
-K 保留文件的setuid/setgid/tacky属性
-M 将输出结果送到more程序处理
-O 指定字符编码为DOS,Windows和OS/2
-I 指定字符编码为UNIX

5.应用实例
1、把文件解压到当前目录下

unzip test.zip

2、如果要把文件解压到指定的目录下,需要用到-d参数。

unzip -d /temp test.zip

3、解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数

unzip -n test.zip
unzip -n -d /temp test.zip

4、只看一下zip压缩包中包含哪些文件,不进行解压缩

unzip -l test.zip

5、查看显示的文件列表还包含压缩比率

unzip -v test.zip

6、检查zip文件是否损坏

unzip -t test.zip

7、将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件

Git

官网地址

https://git-scm.com/downloads

安装

apt install git
git --version

git config --global user.name "sweet"
git config --global user.email "root@xxx.net"

使用

git config --list
git remote rm origin

开始一个工作区(参见:git help tutorial)
clone 克隆一个仓库到一个新目录
init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库

在当前变更上工作(参见:git help everyday)
add 添加文件内容至索引
mv 移动或重命名一个文件、目录或符号链接
reset 重置当前 HEAD 到指定状态
rm 从工作区和索引中删除文件

检查历史和状态(参见:git help revisions)
bisect 通过二分查找定位引入 bug 的提交
grep 输出和模式匹配的行
log 显示提交日志
show 显示各种类型的对象
status 显示工作区状态

扩展、标记和调校您的历史记录
branch 列出、创建或删除分支
checkout 切换分支或恢复工作区文件
commit 记录变更到仓库
diff 显示提交之间、提交和工作区之间等的差异
merge 合并两个或更多开发历史
rebase 在另一个分支上重新应用提交
tag 创建、列出、删除或校验一个 GPG 签名的标签对象

协同(参见:git help workflows)
fetch 从另外一个仓库下载对象和引用
pull 获取并整合另外的仓库或一个本地分支
push 更新远程引用和相关的对象

命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。
查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的帮助。

分支与合并

分支在本地完成,速度快。要创建一个新的分支,我们使用branch命令。
git branch test

branch命令不会将我们带入分支,只是创建一个新分支。所以我们使用checkout命令来更改分支。
git checkout test

第一个分支,或主分支,被称为"master"。
git checkout master

对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回master分支,然后使用合并。
git checkout master
git merge test

如果您想删除分支,我们使用-d标识。
git branch -d test

刚创建的github版本库,在push代码时遇到以上错误:

Updates were rejected because the tip of your current branch is behind

有如下几种解决方法:
1,push前先将远程repository修改pull下来
$ git pull origin master
$ git push -u origin master

2,使用强制push的方法:
$ git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

3,若不想merge远程和本地修改,可以先创建新的分支:
$ git branch [name] 创建新的分支
$ git push -u origin [name] 提交对分支

4.新版git
git pull origin master --allow-unrelated-histories
git push -u origin master

intellij idea 出现Push rejected的解决方法

这个问题主要是初次上传到远程仓库,远程仓库需要先拉下来跟本地合并,然后才能上传。
git pull
git pull origin master
git pull origin master –allow-unrelated-histories
查看状态信息
git status
检查远程仓库配置
git remote -v
如果远程仓库信息有误,则删除本地仓库配置,并且设置相关地址

git remote rm origin
git remote add origin XXXX

当执行git中的“git pull origin master –allow-unrelated-histories”命令时,会出现“ couldn’t find remote ref –allow-unrelated-histories”的错误,输入如下命令即可解决:
git pull –rebase origin master
强制覆盖已有的分支(可能会丢失改动)
git push -u origin master -f

如何从从detached HEAD状态解救出来

  • 基于本次提交创建临时分支
    输入 $git branch temp fef4501 使用git branch 分支名 操作ID 这句命令能够创建一个新的分支,但要注意此时我们还没有切换到这个分支上,这个分支上面代码跟我刚才提交完之后的一样.
  • 切换到工作分支并合并代码
    输入 $git checkout ask_11_16 意味着我已经切换到ask_11_16分支,这个分支是我之前想要提交的分支. 然后 $git merge temp 这行命令过后我们已经上次commit合并到ask_11_16上了,此时终端状态为 Your branch is ahead of ‘origin/ask_11_16’ by 1 commit. 我们只需要$git push即可把本次提交push到远程分支. 这时候检查代码,perfect!正式我们想要的状态.
  • 删除temp分支
    大功告成,至于temp分支已经没有了利用价值,本着过河拆桥的精神我不得不输入 $git branch -d temp 来删除temp分支.

分支管理与合并(merge与rebase)

gitee.com

创建 git 仓库:
mkdir eureka-client
cd eureka-client
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/xxx/eureka-client.git
git push -u origin master
已有仓库?
cd existing_git_repo
git remote add origin https://gitee.com/xxx/eureka-client.git
git pull origin master
git push -u origin master
git push -u origin master -f (强制上传会造成服务器的文件丟失,只适合初始化使用)

分支提交合并
在码云上先新建分支 test
git pull 本地获取同步服务器上的分支
git checkout test 切换支新的分支
git push  提交保存到新的分支
确认新功能开发完成后,切换回主分支,合并后再提交
git checkout master
git merge origin/test
git push

Gitlab Create a new repository

git clone http://xxx/root/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

Push an existing folder

cd existing_folder
git init
git remote add origin http://xxx/root/test.git
git add .
git commit -m "Initial commit"
git push -u origin master

Push an existing Git repository

cd existing_repo
git remote rename origin old-origin
git remote add origin http://xxx/root/test.git
git push -u origin --all
git push -u origin --tags

Docker

官网 https://www.docker.com/
安装 https://docs.docker.com/v17.09/engine/installation/linux/docker-ce/ubuntu/#docker-ee-customers
镜像市场 http://hub.docker.com
教程 https://www.runoob.com/docker/docker-tutorial.html
国内高速下载Docker 以及 docker-compose 地址
http://get.daocloud.io
https://blog.csdn.net/nklinsirui/article/details/80610058

Aliyun Ubuntu 14.04/16.04(使用 apt-get 进行安装)

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1ce-0ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages#   docker-ce | 17.03.0ce-0ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1ce-0ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.

#使用快速安装ubuntu 18
sudo apt install docker.io

增加配制:自己的仓库地址,镜像仓库地址X需更改,使用systemd与K8s同样配制

增加配制:3自己的仓库地址,镜像仓库地址X需更改,使用systemd与K8s同样配制 /etc/docker/daemon.json
{
 "insecure-registries":["harbor.com","192.168.88.128:5000"],
 "registry-mirrors":["https://cuzn52fX.mirror.aliyuncs.com","https://reg-mirror.qiniu.com","https://registry.docker-cn.com"],
 "exec-opts": ["native.cgroupdriver=systemd"],
 "storage-driver": "overlay2",
 "storage-opts": ["overlay2.override_kernel_check=true"],
 "log-driver": "json-file",
 "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
 "max-concurrent-downloads": 5,
  "max-concurrent-uploads": 5
}

# 将Docker加入开启启动
$ sudo systemctl enable docker
# 启动Docker
$ sudo systemctl start docker
systemctl daemon-reload 重新加载
systemctl restart docker 重启docker

建立Docker用户组
默认情况下,docker命令会使用Unix Socket与Docker引擎通信,只有root用户和docker组的用户才可以访问Docker引擎的Unix Socket。出于安全考虑,一般不会直接使用root用户,所以需要先建立docker组,并将当前用户添加到docker组中。
$ sudo groupadd docker
$ sudo usermod -aG docker $USER

docker info

docker version

docker ps -a

docker images

docker exec -it container-id /bin/bash       exit

docker logs -f container-id

docker stop -f container-id

docker rmi Image-file

docker rm container-id

docker login

bocker build -t coustName:tag .

bocker build -t coustName:tag -f path

docker tag mysql:5.6 myreg/mysql:1.0

docker push myreg/mysql:1.0

Dockerfile

常用其它镜像地址:

七牛 quay-mirror.qiniu.com

卸载旧版本:

sudo systemctl stop docker
sudo apt-get purge docker-ce

sudo apt-get remove docker docker-ce docker-io

Buffalo LS-WVL/E上安装git

所需工具

PuTTY.exe

acp_commander

一。改机root
1. 在盘位1装上一块全新硬盘(没分区的盘)。

2. 启动NAS,然后按下机器后面function,这会把机器还原为出厂设置并格式化硬盘(慎:这会清除硬盘上的所有数据,如果你的硬盘上有数据,要先备份)。过了几分钟,设置完成后NAS自动重启。打开浏览器,输入NAS的地址(默认是192.168.1.100),如果能打开设置界面,就表示NAS准备就绪了。

不能进入先需安装系统- NASNAVI
点击NASNAVI软件的REFRESH,刷新会提示找到带有EM字样的NAS图标,此时NAS会显示NAS获取到的IP,暂时还不能访问到NAS的页面。如果提示更改IP,请直接取消,因为NAS已经从路由器上获得了IP。确认IP为以前路由器分配的以后,进入下一步。

安装系统-上传系统进入解压好的固件目录内,运行LSUpdater.exe,上传(UPDATE)固件,稍等即可。此过程可能持续20分钟。直到提示升级成功。

安装系统-改LSUpdater.ini【可选,改了以后记得重新打开LSUPDATER.EXE】

  1. [Application]
  2. Title = BUFFALO LinkStation Series Updater Ver.1.70
  3. WaitReboot = 1200
  4. WaitFormat = 600
  5. WaitFileSend = 600
  6. WaitDiscover = 120
  7. [Target]
  8. ProductID = 0x00000011
  9. ProductID2 = 0x00000012
  10. ProductID3 = 0x00000013
  11. ProductID4 = 0x00000014
  12. ProductID5 = 0x00003006
  13. ProductID6 = 0x00003007
  14. ProductID7 = 0x00000015
  15. ProductID8 = 0x00000016
  16. ProductID9 = 0x00003008
  17. ProductID10 = 0x00004001
  18. ProductID11 = 0x00000017
  19. ProductID12 = 0x00000019
  20. ProductID13 = 0x00000020
  21. ProductID14 = 0x00003010
  22. Name = LinkStation
  23. [Flags]
  24. VersionCheck = 0
  25. NoFormatting = 0

复制代码

VersionCheck = 1————1表示检查版本、0表示不检查版本,0用于降级
NoFormatting = 1———–1表示不格式化硬盘、0表示格式化硬盘

3. 准备一台windows机器,关闭windows防火墙。安装jre,地址http://java.com/zh_CN/download/manual.jsp

4. 下载acp_commander.jar。打开windows命令行,切换到acp_commander.jar所在的目录,输入以下命令以测试机器能否破解

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “ls /”
注意-pw后的参数”password”是web设置界面admin用户的登录密码,默认就是password,如果成功的话就能看到输出的根目录列表了!

5. 把root密码改为123456,你也可以改成别的。

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “(echo sweetopen;echo sweetopen)|passwd”
6. 修改sshd设置以允许root用户登录

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “sed -i ‘s/PermitRootLogin no/PermitRootLogin yes/g’ /etc/sshd_config”
7. 修改sshd设置,关闭PAM

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “sed -i ‘s/UsePAM yes/UsePAM no/g’ /etc/sshd_config”
8. 重启ssh服务

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “/etc/init.d/sshd.sh restart”
现在你可以用ssh登录LS-WVL了。

(注:以上几条命令可能会出错,注意看屏幕输出。如果对还有什么疑问,可以参考这篇文章http://i.592.net/?post=360,或者google一下,网上有很多关于改机的文章。)

二。安装git软件
1. 用PuTTY登录LS-WVL/E(默认地址192.168.1.100),用户root,密码是你在第一部分的步骤5设置的。

2.输入以下命令:

mkdir /mnt/disk1/temp
cd /mnt/disk1/temp
wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable/ls-mvkw-bootstrap_1.2-7_arm.xsh
sh ./ls-mvkw-bootstrap_1.2-7_arm.xsh

做了阵列的

mkdir /mnt/array1/tmp
cd /mnt/array1/tmp/
wget http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/teraprov2-bootstrap_1.2-7_arm.xsh
sh ./teraprov2-bootstrap_1.2-7_arm.xsh

ipkg update
ipkg upgrade
ipkg install git
三。配置
这部分操作是创建并配置好一个用户,使其能通过ssh登录系统,专门用于进行git相关操作

1. 以root登录,创建git用户

groupadd git(创建组git)
useradd -g git -m git(创建用户git,属于组git,同时创建用户主目录/home/git)
passwd git(设置git用户密码)
然后根据提示输入两遍密码

2. 修改ssh服务器的配置文件/etc/sshd_config,输入

vi sshd_config
然后编辑如下参数设置

StrictModes no(如果.ssh目录及相关文件的权限和拥有人owner等都能严格正确设置,可以设为yes)

UsePrivilegeSeparation no(这是必须的,否则git用户无法登录)

PermitUserEnvironment yes(必须的,使ssh加载用户自定义的环境配置文件)

3. 配置git用户环境变量文件,设置PATH(如果不设置好用户的PATH,运行git命令将提示”command not found”)。

输入如下命令:

cd /home/git(进入用户git的主目录)
mkdir .ssh
echo PATH=/mnt/disk1/.optware/bin:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin >> .ssh/environment

echo PATH=/mnt//array1/.optware/bin:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin >> .ssh/environment
chown -R git.git .ssh(更改.ssh目录及其中文件的owner为用户git)
chmod 700 .ssh(更改.ssh目录的权限)
chmod 600 .ssh/environment
4. 创建git项目的存储目录。输入命令

mkdir -m 777 /mnt/disk1/gits(创建目录gits来存放所有的git项目,权限777)

mkdir -m 777 /mnt/array1/gits
5. 重启sshd(见第一部分步骤8),然后用PuTTY以git用户登录,应该就能登上了。

四。测试
1.通过ssh以用户git登录,创建一个git项目testproj。输入命令

mkdir /mnt/disk1/gits/testproj.git(创建项目的目录)
cd /mnt/disk1/gits/testproj.git
git init –bare(初始化git仓库)
2. 在windows客户机上安装tortoiseGit和mysisgit并设置好,你就可以从服务器上clone项目testproj了。(具体操作不在本文讨论范围,请自行google之)

如果客户机是linux或mac,并且安装好了git,你可以直接输入命令

git clone git@192.168.1.100:/mnt/disk1/gits/testproj.git
回车后输入用户git的密码,就把testproj项目给clone下来了

五。其它
一开始我按照网上的很多教程root后,发现只有root用户能够通过ssh登录,其它用户都不能登录。经过几天在网上苦苦的搜寻,终于找到了原因和解决办法:ssh服务器在底层使用了sftp这个工具,这个工具有一个配置文件/etc/sftponly_config,这个配置文件里禁止了用户(在Buffalo LS-WVL的Web配置页面能看到的所有用户和组)的ssh登录,而且这个配置文件每次ssh服务器启动时都会重新生成,所以你改这个配置文件也没有用。
解决办法有两个:
1. 既然在Web配置页面能看到的所有用户和组(默认有用户admin,guest,组包括admin,guest,hdusers)都不能ssh登录,那么Web配置页面里看不到的用户和组,不就不受这个限制了吗。所以解决方法就是通过ssh以root登录,新建一个组git,然后再创建一个用户git,使其属于这个新建的组(创建用户时如果不指定其所属的组,就默认属于hdusers组,这个是配置文件/etc/sftponly_config里面禁止ssh登录的),这样这个用户git就可以登录了。(具体操作见上文第三部分步骤1)
2. 第二个解决方法就是想办法修改这个配置文件/etc/sftponly_config。打开ssh服务器的启动脚本/etc/init.d/sshd.sh,你可以在启动ssh服务器的代码前找到这样一行“nas_configgen -c sftp”,就是这行代码重新生成了配置文件/etc/sftponly_config,只要在这一行后面再加一行代码,把sftponly_config改一改,把所有的”allowssh no”全部改成”allowssh yes”,问题不就解决了吗。
(事实上这是我最开始找到的办法,但是由于操作比较复杂,而且有一定的安全隐患,所以还是建议使用第一个解决方法)
用vi来编辑/etc/init.d/sshd.sh,输入以下命令

vi /etc/init.d/sshd.sh
移动光标,在sshd_start()方法中找到“nas_configgen -c sftp”这一行,将光标移至行末,按a键,然后在这行之后插入一行:

sed -i ‘s/allowssh no/allowssh yes/g’ /etc/sftponly_config
按ESC键,输入”:wq”(双引号中间的3个字母)然后回车,这就保存退出了。