分类目录归档:tools

mobaxterm

一、安装程序,太方便,在windows中完全模拟linux风格

[Administrator.WINDOWS-LGJ801D] ➤ apt-get install tcl
Trying to download file setup.ini
wget: read error: Connection reset by peer
Trying to download file setup.ini
Downloading /home/mobaxterm/.aptcyg/mobasetup.32.ini using Windows internet settings
Updated setup.ini
Found package tcl

Installing tcl
Downloading tcl-8.6.8-1.tar.xz...
Downloading /home/mobaxterm/.aptcyg/release/tcl/tcl-8.6.8-1.tar.xz using Windows internet settings
Unpacking tcl-8.6.8-1.tar.xz...
Extracting dependencies for usr/bin/libtcl8.6.dll...
Extracting dependencies for usr/bin/tclsh8.6.exe...
Package tcl requires the following packages, installing cygwin libgcc1 tzdata zlib0
Package cygwin is already installed, skipping
Found package libgcc1
Package libgcc1 is already installed, skipping
Found package tzdata
Package tzdata is already installed, skipping
Found package zlib0
Package zlib0 is already installed, skipping
Package tcl installed.
Rebasing new libraries

[2020-09-06 08:33.27]  ~
[Administrator.WINDOWS-LGJ801D] ➤ apt-get install expect
Found package expect

Installing expect
Downloading expect-5.45-3.tar.xz...
Unpacking expect-5.45-3.tar.xz...
Extracting dependencies for usr/bin/expect.exe...
Extracting dependencies for usr/bin/libexpect5.45.dll...
Package expect requires the following packages, installing cygwin tcl
Package cygwin is already installed, skipping
Found package tcl
Package tcl is already installed, skipping
Package expect installed.

Rebasing new libraries

jenkins

[TOC]

一、安装

1、采用系统命令

如对于 centos:
    sudo yum -y install jenkins
其它系统各有自带命令,如 wget install ...

2、采用jar包启动

(nohup java -jar jenkins.jar --httpPort=8080 &)

二、插件安装

1、插件下载好地方一

如果没有插件,则无法充分发挥 jenkins 的威力。
但是公司电脑设置代理又不方便,只能自己逐个离线下载插件,再手工安装
逐个下载太累,更累的是资源不好找,最终找到一个插件聚集地:
http://updates.jenkins-ci.org/download/plugins/

2、插件下载好地方2

https://plugins.jenkins.io/

三、让 jenkins 输出彩色字符串

1、安装

jenkins 输出黑白界面,找关键字实在太累。
于是今天就折腾了一下,花了好久才搞定。
其实就是装一个插件 AnsiColor 及其依赖包。

2、配置

https://blog.csdn.net/wc1695040842/article/details/104972146/

需要重新配置工程

3、示例代码

#!/bin/bash
#定义颜色变量
BLACK='\e[1;30m'
RED='\e[1;31m'
GREEN='\e[1;32m'
YELLOW='\e[1;33m'
BLUE='\e[1;34m'
PURPLE='\e[1;35m'
PINK='\e[1;36m'
WHITE='\e[1;37m'
END='\e[0m'

#需要使用echo -e
echo -e  "${BLACK}##########黑色##########${END}"
echo -e  "${RED}##########红色##########${END}"
echo -e  "${GREEN}##########绿色##########${END}"
echo -e  "${YELLOW}##########黄色##########${END}"
echo -e  "${BLUE}##########蓝色##########${END}"
echo -e  "${PURPLE}##########紫色##########${END}"
echo -e  "${PINK}##########粉色##########${END}"
echo -e  "${WHITE}##########白色##########${END}"
echo "--------------------------------------------"

#写成函数,直接调用
SETCOLOR_SUCCESS() { echo

四、jenkins对错误的处理

问题:当jenkins调用的脚本失败时,jenkins会立即退出,并报错。
当某条语句执行返回失败是,同样立即退出,如执行语句: grep 过滤为空是,立即退出

解决办法,调用本地脚本,脚本始终返回0,表示成功,真正的成功失败用字符串返回。
如:monitor_server.tcl:
package require Tcl
package require Expect

if {} {
   puts "ret_succ"
   exit 0
} else {
   puts "ret_error"
   exit 0
}

jenkins中,脚本这样写:
result=`tclsh monitor_server.tcl`
keyFlag=`(echo ${result} | grep -o ret_succ) || (echo ${result} | grep -o ret_error)`
if [ "keyFlag" == "ret_succ" ];then
    SETCOLOR_SUCCESS success message!
    ret=0
else
    SETCOLOR_SUCCESS success message!
    ret=1
fi
exit ${ret}

五、看板

1、walldisplay

费了好多力气,最后虽然安装成功,但是点击后,全屏显示空白

2、dashboard

由于不能一键安装,逐个下载挺辛苦。但最后还是安装好了。
使用很漂亮,完全可以取代walldisplay。它的定制选项很多。
默认的显示风格和 my views 一样,但下面还有 grid 配置。
我将上面的列表取消,完全采用表格(grid)显示,这不就是walldisplay!

六、jenkins 定时触发,定时规则语法

字段              *       *       *       *       *
含义              分钟  小时  日期  月份  星期
取值范围            0-59    0-23    1-31    1-12    0-7

示例
每隔15分钟执行一次  H/15    *   *   *   *
每隔2个小时执行一次  H   H/2 *   *   *
每隔3天执行一次        H   H   H/3 *   *
每隔3天执行一次(每月的1-15号)H     H   1-15/3  *   *
每周1,3,5执行一次 H   H   *   *   1,3,5

规则
指定时间范围  a-b
指定时间间隔  /
指定变量取值  a,b,c

定时触发
(一、Jenkins 定时任务触发时间表达式 )
Jenkins采用了著名的UNIX任务调度工具CRON所使用的配置方式。用5个字段代表5个不同的时间单位(中间用空格隔开):

分 时 日 月 星期几

0 2 * * *    表示每天凌晨2点
*/10 * * * *   每隔10分钟一次
45 10 * * 1-5    每星期的星期一到星期五的10:45分执行
· M-N 指定范围值
· M-N/X 或 */X 在指定范围或整个有效范围内按 X 间隔的步骤
· A,B,...,Z 列举了多个值

    每天凌晨2:00跑一次 
    H 2  * * *
    每隔5分钟构建一次
    H/5 * * * *
    每两小时构建一次
    H H/2 * * *

    每天中午12点定时构建一次
    H 12 * * *   或0 12 * * *(0这种写法也被H替代了)

    每天下午18点前定时构建一次
    H 18 * * *

    每15分钟构建一次
    H/15 * * * *   或*/5 * * * *(这种方式已经被第一种替代了,jenkins也不推荐这种写法了)

    周六到周日,18点-23点,三小时构建一次
    H 18-23/3 * * 6-7
    ---------------------

(二、Cron表达式 )

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year或 
Seconds Minutes Hours DayofMonth Month DayofWeek

每一个域可出现的字符如下:
Seconds:可出现", - * /"四个字符,有效范围为0-59的整数
Minutes:可出现", - * /"四个字符,有效范围为0-59的整数
Hours:可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year:可出现", - * /"四个字符,有效范围为1970-2099年

每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:
(1)*:表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。

(2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。

(3)-:表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次

(4)/:表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.

(5),:表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。

(6)L:表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。

(7)W:表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份

(8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。

(9)#:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。

举几个例子:
0 0 2 1 * ? * 表示在每月的1日的凌晨2点调度任务
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
0 15 10 ? * 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作


一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
按顺序依次为
秒(0~59) 
分钟(0~59) 
小时(0~23) 
天(月)(0~31,但是你需要考虑你月的天数) 
月(0~11) 
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 
年份(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 
0 0 12 ? * WED 表示每个星期三中午12点 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

有些子表达式能包含一些范围或列表

例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字符代表所有可能的值

因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天


“/”字符用来指定数值的增量 
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样


“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”

“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写 
但是它在两个子表达式里的含义是不同的。 
在天(月)子表达式中,“L”表示一个月的最后一天 
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT

如果在“L”前有具体的内容,它就具有其他的含义了

例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五 
注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题

字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * /

\e[1;32m'"$@"

四、jenkins对错误的处理

五、看板

1、walldisplay

2、dashboard

guake

一、缘起

公司切换到linux云桌面。抛弃原来在win7下使用的系列工具。
    第一个工具就是终端,尽管系统自带terminal也能总凑和。但是总感觉有些不爽。度娘推荐了guake,试用一下,果然十分满意。

   但是linux下只有一款终端,是不够的,想多开几个窗口,不能只用这一种终端。
   于是继续搜索,发现有人推荐了一系列终端,先记下:https://www.cnblogs.com/jpfss/p/11106318.html
分别是:tilda / Yakuake / Guake / Sjterm / Terminator /
 ROXTerm / Eterm / Rxvt / Aterm / Wterm / TermkKit(基于webkit) / Terminology
  我又试用了 Terminology,感觉十分轻快舒适

二、找到 guake,试用效果很满意

1、安装

一键安装 :sudo yum -y instal guake

2、遇到问题

打开后,发现前缀很长,很丑。
修改 ~/.vimrc

在最后添加一行:
unset PROMPT_COMMAND

重新启动,果然没有了之前的乱码,777...,但是界面仍然不漂亮,
稍微定制一下,在unset上面加一句:
PS1="[Mr.Zhou \w]# "

3、terminology 试用,效果还行

首先是小巧,明显感觉到轻盈快速。
其次是每次启动时可以指定背景图片:
  terminology -b=pic.jpg
但是字体不配置的话,仍然是美中不足

其它同类产品

1、 tilda 也很好

当开启第一个 tilda 窗口时,可以用F1 调出/隐藏。
当开启第二个 tilda 窗口时,可以用F2 调出/隐藏
...

2、roxterm 感觉不错

感觉很朴实,实用,舒服

git

一、svn info 和 git 什么命令相对应

$git remote -v
origin https://github.com/Studio3T/robomogo.git (fetch)
origin https://github.com/Studio3T/robomogo.git (push)

$ git  log -1(是数字1,不是小L)
显示最后一次的入库详情

二、git切换到新分支

1、切换到基础分支,如主干

git checkout master

2、创建并切换分支

git checkout -b newBranch<br />git branch 命令此时可以看到,已经切换到了新分支 newBranch

3、更新分支代码并提交

git add *
git commit
git push  origin newBranch
git 强推
在android上搭建一个git 服务器,从笔记本强推:
git push --mirror ssh://wishcell@192.168.43.153:2222/fakegithub.git

另一种强推方式,向samba强推:
在windows访问samba的正确方式: \\192.168.1.99\user\data\prj.git

可是,当windows打开 git bash 时,却不能用这个路径强推,需要换个写法:
git push --mirror //192.168.1.99/user/data/prj.git
追加一句,强推之前,肯定需要在服务器先建立一个空的git 库: git init prj.git --bare
强推多个分支,因为一般git都有多个分支,首先用命令:
git branch -a 看看,有哪几个。
无意中发现竟然还有一个 all
$ git branch -a
*all
 master
 prjRelease
 plantFromSomeone

首先切换到all分支上,然后强推,推送过程会逐一打印 :
*[new branch] all->all
*[new branch] master->master
*[new branch] prjRelease->prjRelease
*[new branch] plantFromSomeone->plantFromSomeone

三、最基础应用,创建仓库,上传代码

git --bare init gitBack
vim .git/config
最后面,添加两行,否则 git push 报错:
[receive]
    denyCurrentBranch=ignore

ftp

一、ftp数据一键传输

1、第一种办法

curl -u -uUser:Pwd 192.168.1.2/* -O

open 192.168.1.2
User
Pwd
mget *
quit
----------------------oneKeyScript.sh------------
用法:ftp -i -s:oneKeyScript.sh
缺陷:
1、此方法在windows下可以工作,但是在linux终端报错,不知道什么原因
2、遇到乱码时,报错退出

2、第二种办法,关掉交互提示

ftp> prompt off
interactive mode off
ftp> ls -lrt
ftp> mget *

似乎没有遇到什么缺陷,在 linux 下可以将全部文件拉到本地,
尽管有一部分乱码

二、FTP数据传输中乱码问题

1、根本原因

从服务器下载大量文件。
发现一部分数据是 GBK/GB2312中文编码,在windows下可以正常显示,但是在编码为 zh_CN.UTF-8 的窗口下,显示为乱码。

另一部分编码为utf-8的文件,显示效果相反

可以临时改变终端的编码格式:
export LANG=zh_CN.UTF-8 ==>>
export LANG=zh_CN.GB18030
GB18030包含了GBK和GB2312

2、意外收获解决办法

利用mobaxterm,竟然可以将终端中正常显示,而windows窗口显示乱码的文件,拉取到windows中然后自动转换格式,拉完之后还是可以正常显示

everything

一、同类文档管理

1、step-1,准备好文件,必须按规则命名

15900@DESKTOP-CGPRCF3 MINGW64 /d/tmp/工作安排
    $ ls -l | awk '{print $NF}'
    员工1_项目1_来源A_开始20240102_状态完成.xls
    员工1_项目2_来源A_开始20240102_状态进行中.xls

2、step-2,准备好文件,必须按规则命名

打开everything.
输入:员工1,查看结果
没有结果...
搜索- 高级搜索 - 必含单词(第一个) - 全子匹配 - 去掉勾选 - 确定
回到搜索界面,看到员工1所有文档。
删除条件,改为:员工1  完成
搜索结果再次为空。
搜索- 高级搜索 - 必含单词(第一个) - 全子匹配 - 去掉勾选 - 确定
回到搜索界面。看到员工1状态完成的一个文档