关于SQL中join的各种用法总结 技术文章

首先声明:文章来源于国外的 codeproject 我这里只是由于复习SQL的时候需要就Google搜索[可以用我个人搭建的Google搜索供大家搜索文章学习使用]了一下,找到这篇文章,再次做个简单的记录同时也方便以后的有缘人,如有侵权的地方还请来信注明,感谢原文的作者的勤劳付出,留下如此详细全面的关于SQL的join的用法。

codeproject是国外一个免费的可以公开自己写的代码与程序的优秀网站有点类似于GitHub只不过是社区版,在这个网站所有用户都可以发布自己写过的代码,程序,或者是详细的文档说明。比国内的cnblog、csdn都要好,如果要说缺点的话,就是全英文的,当然大部分还是比较容易理解的。但是codeproject也有中文区: https://www.codeproject.com/Forums/1580230/General-Chinese-Topics.aspx ,感兴趣的可以去注册玩。

我们先用一张图来看一下 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 等七种 join 相关的用法:

Visual_SQL_JOINS_orig.jpg

下面分开说明这七种用法,先说第一种:

1.INNER JOIN(内连接)

INNER_JOIN.png



这是最简单,最容易理解的Join,也是最常见的。此查询将返回左表(表A)中右表(表B)中都具有匹配记录的所有记录(共同拥有的相同的部分)。此Join用法的代码大致如下:

SELECT <select_list> 
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key

2.LEFT JOIN(左连接)

LEFT_JOIN.png

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。此Join用法的代码大致如下:

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

3.RIGHT JOIN(右连接)

RIGHT_JOIN.png 

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。此Join用法的代码大致如下:

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key

4.OUTER JOIN(外连接)

FULL_OUTER_JOIN.png 

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。此Join用法的代码大致如下:

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key

5.LEFT JOIN EXCLUDING INNER JOIN(左连接-内连接)

LEFT_EXCLUDING_JOIN.png 

此查询将返回左表(表A)中与右表(表B)中的任何记录都不匹配的所有记录。此Join的编写如下:

SELECT <select_list> 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL

6.RIGHT JOIN EXCLUDING INNER JOIN(右连接-内连接)

RIGHT_EXCLUDING_JOIN.png 

此查询将返回右表(表B)中与左表(表A)中的任何记录都不匹配的所有记录。此Join的编写如下:

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL

7.OUTER JOIN EXCLUDING INNER JOIN(外连接-内连接)

OUTER_EXCLUDING_JOIN.png 



此查询将返回左表(表A)中的所有记录以及右表(表B)中都不匹配的所有记录。我还没有需要使用这种类型的Join,但是其他的类型,我经常使用。此Join的编写如下:

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL

下面举一些例子:

假设我们有两个表,Table_A和Table_B。这些表中的数据如下所示:
TABLE_A
  PK Value
---- ----------
   1 FOX
   2 COP
   3 TAXI
   6 WASHINGTON
   7 DELL
   5 ARIZONA
   4 LINCOLN
  10 LUCENT

TABLE_B
  PK Value
---- ----------
   1 TROT
   2 CAR
   3 CAB
   6 MONUMENT
   7 PC
   8 MICROSOFT
   9 APPLE
  11 SCOTCH
这七种连接方式的结果如下所示:
-- INNER JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
       B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
INNER JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7

(5 row(s) affected)
-- LEFT JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   4 LINCOLN    NULL       NULL
   5 ARIZONA    NULL       NULL
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
  10 LUCENT     NULL       NULL

(8 row(s) affected)
-- RIGHT JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11

(8 row(s) affected)
-- OUTER JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL

(11 row(s) affected)
-- LEFT EXCLUDING JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK
WHERE B.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   4 LINCOLN    NULL       NULL
   5 ARIZONA    NULL       NULL
  10 LUCENT     NULL       NULL
(3 row(s) affected)
-- RIGHT EXCLUDING JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11

(3 row(s) affected)
-- OUTER EXCLUDING JOIN
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL
OR B.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL

(6 row(s) affected)
注:原文连接:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

admin 发布于  2019-4-17 20:58 

MySQL 在 SELECT 的同时 UPDATE 同一张表 技术文章

MySQL 不允许 SELECT FROM 后面指向用作 UPDATE 的表,有时候让人纠结。当然,有比创建无休止的临时表更好的办法。本文解释如何 UPDATE 一张表,同时在查询子句中使用 SELECT.

问题描述

假设我要 UPDATE 的表跟查询子句是同一张表,这样做有许多种原因,例如用统计数据更新表的字段(此时需要用 group 子句返回统计值),从某一条记录的字段 update 另一条记录,而不必使用非标准的语句,等等。举个例子:

create table apples(variety char(10) primary key, price int);

insert into apples values('fuji', 5), ('gala', 6);

update apples
    set price = (select price from apples where variety = 'gala')
    where variety = 'fuji';



错误提示是:ERROR 1093 (HY000): You can't specify target table'apples' for update in FROM clause. MySQL 手册 UPDATE documentation 这下面有说明 : “Currently, you cannot update a table and select from the same table in a subquery.”

在这个例子中,要解决问题也十分简单,但有时候不得不通过查询子句来 update 目标。好在我们有办法。


解决办法

既然 MySQL 是通过临时表来实现 FROM 子句里面的嵌套查询,那么把嵌套查询装进另外一个嵌套查询里,可使 FROM 子句查询和保存都是在临时表里进行,然后间接地在外围查询被引用。下面的语句是正确的:

update apples
   set price = (
      select price from (
         select * from apples
      ) as x
      where variety = 'gala')
   where variety = 'fuji';



如果你想了解更多其中的机制,请阅读 MySQL Internals Manual 相关章节。


没有解决的问题

一个常见的问题是,IN() 子句优化废品,被重写成相关的嵌套查询,有时(往往?)造成性能低下。把嵌套查询装进另外一个嵌套查询里并不能阻止它重写成相关嵌套,除非我下狠招。这种情况下,最好用 JOIN 重构查询(rewrite such a query as a join)。
另一个没解决的问题是临时表被引用多次。“装进嵌套查询” 的技巧无法解决这些问题,因为它们在编译时被创建,而上面讨论的 update 问题是在运行时。(译者注:个人认为跟文章讨论的主题没几毛钱关系)
原文地址:http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

标签: 分享 SQL MySQL

admin 发布于  2019-4-15 22:54 

MySQL 如何查找并删除重复行? 技术文章

如何查找重复行

        第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。
本文要用到的数据样本


create table test(id int not null primary key, day date not null);

insert into test(id, day) values(1, '2006-10-08');
insert into test(id, day) values(2, '2006-10-08');
insert into test(id, day) values(3, '2006-10-09');

select * from test;
+----+------------+
| id | day        |
+----+------------+
|  1 | 2006-10-08 |
|  2 | 2006-10-08 |
|  3 | 2006-10-09 |
+----+------------+





        前面两行在day字段具有相同的值,因此如何我将他们当做重复行,这里有一查询语句可以查找。查询语句使用GROUP BY子句把具有相同字段值的行归为一组,然后计算组的大小。



select day, count(*) from test GROUP BY day;
+------------+----------+
| day        | count(*) |
+------------+----------+
| 2006-10-08 |        2 |
| 2006-10-09 |        1 |
+------------+----------+



        重复行的组大小大于1。如何希望只显示重复行,必须使用HAVING子句,比如


select day, count(*) from test group by day HAVING count(*) > 1;
+------------+----------+
| day        | count(*) |
+------------+----------+
| 2006-10-08 |        2 |
+------------+----------+


        这是基本的技巧:根据具有相同值的字段分组,然后知显示大小大于1的组。

为什么不能使用WHERE子句?

        因为WHERE子句过滤的是分组之前的行,HAVING子句过滤的是分组之后的行。

如何删除重复行

        一个相关的问题是如何删除重复行。一个常见的任务是,重复行只保留一行,其他删除,然后你可以创建适当的索引,防止以后再有重复的行写入数据库。
同样,首先是弄清楚重复行的定义。你要保留的是哪一行呢?第一行,或者某个字段具有最大值的行?本文中,假设要保留的是第一行——id字段具有最小值的行,意味着你要删除其他的行。
        也许最简单的方法是通过临时表。尤其对于MYSQL,有些限制是不能在一个查询语句中select的同时update一个表。在我的另一篇文章中 MySQL 在 SELECT 的同时 UPDATE 同一张表(How to select from an update target in MySQL), 讲述了如何绕过这些限制。简单起见,这里只用到了临时表的方法。
我们的任务是:删除所有重复行,除了分组中id字段具有最小值的行。因此,需要找出大小大于1的分组,以及希望保留的行。你可以使用MIN()函数。这里的语句是创建临时表,以及查找需要用DELETE删除的行。


create temporary table to_delete (day date not null, min_id int not null);

insert into to_delete(day, min_id)
   select day, MIN(id) from test group by day having count(*) > 1;

select * from to_delete;
+------------+--------+
| day        | min_id |
+------------+--------+
| 2006-10-08 |      1 |
+------------+--------+



        有了这些数据,你可以开始删除“脏数据”行了。可以有几种方法,各有优劣(详见我的文章many-to-one problems in SQL),但这里不做详细比较,只是说明在支持查询子句的关系数据库中,使用的标准方法。

delete from test
   where exists(
      select * from to_delete
      where to_delete.day = test.day and to_delete.min_id <> test.id
   )


如何查找多列上的重复行

        有人最近问到这样的问题:
我的一个表上有两个字段b和c,分别关联到其他两个表的b和c字段。我想要找出在b字段或者c字段上具有重复值的行。
        咋看很难明白,通过对话后我理解了:他想要对b和c分别创建unique索引。如上所述,查找在某一字段上具有重复值的行很简单,只要用group分组,然后计算组的大小。并且查找全部字段重复的行也很简单,只要把所有字段放到group子句。但如果是判断b字段重复或者c字段重复,问题困难得多。这里提问者用到的样本数据


create table a_b_c(
   a int not null primary key auto_increment,
   b int,
   c int
);

insert into a_b_c(b,c) values (1, 1);
insert into a_b_c(b,c) values (1, 2);
insert into a_b_c(b,c) values (1, 3);
insert into a_b_c(b,c) values (2, 1);
insert into a_b_c(b,c) values (2, 2);
insert into a_b_c(b,c) values (2, 3);
insert into a_b_c(b,c) values (3, 1);
insert into a_b_c(b,c) values (3, 2);
insert into a_b_c(b,c) values (3, 3);



        现在,你可以轻易看到表里面有一些重复的行,但找不到两行具有相同的二元组{b, c}。这就是为什么问题会变得困难了。


错误的查询语句

        如果把两列放在一起分组,你会得到不同的结果,具体看如何分组和计算大小。提问者恰恰是困在了这里。有时候查询语句找到一些重复行却漏了其他的。这是他用到了查询     


select b, c, count(*) from a_b_c
group by b, c
having count(distinct b > 1)
   or count(distinct c > 1);



        结果返回所有的行,因为CONT(*)总是1.为什么?因为 >1 写在COUNT()里面。这个错误很容易被忽略,事实上等效于



select b, c, count(*) from a_b_c
group by b, c
having count(1)
   or count(1);

为什么?因为 (b> 1) 是一个布尔值,根本不是你想要的结果。你要的是:

    select b, c, count(*) from a_b_c
    group by b, c
    having count(distinct b) > 1
       or count(distinct c) > 1;
   



        返回空结果。很显然,因为没有重复的{b,c}。这人试了很多其他的OR和AND的组合,用来分组的是一个字段,计算大小的是另一个字段,像这样


select b, count(*) from a_b_c group by b having count(distinct c) > 1;
+------+----------+
| b    | count(*) |
+------+----------+
|    1 |        3 |
|    2 |        3 |
|    3 |        3 |
+------+----------+


        没有一个能够找出全部的重复行。而且最令人沮丧的是,对于某些情况,这种语句是有效的,如果错误地以为就是这么写法,然而对于另外的情况,很可能得到错误结果。

        事实上,单纯用GROUP BY 是不可行的。为什么?因为当你对某一字段使用group by时,就会把另一字段的值分散到不同的分组里。对这些字段排序可以看到这些效果,正如分组做的那样。首先,对b字段排序,看看它是如何分组的

a b c
7 1 1
8 1 2
9 1 3
10 2 1
11 2 2
12 2 3
13 3 1
14 3 2
15 3 3

        当你对b字段排序(分组),相同值的c被分到不同的组,因此不能用COUNT(DISTINCT c)来计算大小。COUNT()之类的内部函数只作用于同一个分组,对于不同分组的行就无能为力了。类似,如果排序的是c字段,相同值的b也会分到不同的组,无论如何是不能达到我们的目的的。

几种正确的方法

        也许最简单的方法是分别对某个字段查找重复行,然后用UNION拼在一起,像这样:

 select b as value, count(*) as cnt, 'b' as what_col
 from a_b_c group by b having count(*) > 1
 union
 select c as value, count(*) as cnt, 'c' as what_col
 from a_b_c group by c having count(*) > 1;
+-------+-----+----------+
| value | cnt | what_col |
+-------+-----+----------+
|     1 |   3 | b        |
|     2 |   3 | b        |
|     3 |   3 | b        |
|     1 |   3 | c        |
|     2 |   3 | c        |
|     3 |   3 | c        |
+-------+-----+----------+


        输出what_col字段为了提示重复的是哪个字段。另一个办法是使用嵌套查询:

select a, b, c from a_b_c
    where b in (select b from a_b_c group by b having count(*) > 1)
        or c in (select c from a_b_c group by c having count(*) > 1);
+----+------+------+
| a  | b    | c    |
+----+------+------+
|  7 |    1 |    1 |
|  8 |    1 |    2 |
|  9 |    1 |    3 |
| 10 |    2 |    1 |
| 11 |    2 |    2 |
| 12 |    2 |    3 |
| 13 |    3 |    1 |
| 14 |    3 |    2 |
| 15 |    3 |    3 |
+----+------+------+


        这种方法的效率要比使用UNION低许多,并且显示每一重复的行,而不是重复的字段值。还有一种方法,将自己跟group的嵌套查询结果联表查询。写法比较复杂,但对于复杂的数据或者对效率有较高要求的情况,是很有必要的。

    select a, a_b_c.b, a_b_c.c
    from a_b_c
       left outer join (
          select b from a_b_c group by b having count(*) > 1
       ) as b on a_b_c.b = b.b
       left outer join (
          select c from a_b_c group by c having count(*) > 1
       ) as c on a_b_c.c = c.c
    where b.b is not null or c.c is not null

 

以上方法可行,我敢肯定还有其他的方法。如果UNION能用,我想会是最简单不过的了。

原文地址:https://www.xaprb.com/blog/2006/10/09/how-to-find-duplicate-rows-with-sql/

标签: 分享 SQL MySQL

admin 发布于  2019-4-15 22:50 

写个了油猴脚本-freebuf文章图片去除!small 技术文章

写这个脚本的原因就是我发现freebuf的文章里的图片后缀都会跟一个 !small 后缀,我想网站初心可能是为了对付爬虫吧,恶意爬虫爬去文章文字和图片,但是对于我这种懒虫,不喜欢点击一下放大去看图,而是比较喜欢文章的图片就是页面最佳尺寸,简单的研究了一下,发现去掉文章里的图片的 !small 后缀后,文章图片默认就会显示最佳尺寸了!简直Nice啊!但是每次这么去手动修改太麻烦了,如果文章图片太多,那岂不是要累死?于是这个脚本就出来了!效果如下的动图演示:
去除 freebuf 文章!small 演示动图

使用:前提是在油猴脚本支持的浏览器(比如chrome,Firefox这些现代浏览器),在油猴插件里面自己粘贴我发布在GitHub仓库的代码或者是从Greasy Fork 在线下载安装 (强烈推荐)


admin 发布于  2019-4-14 22:38 

BurpSuite Pro破解版[BurpSuite Cracked version]+汉化脚本(windows)+常用插件(sqlmap.jar,bypasswaf.jar等)分享 安全工具

来博客除草了,上一篇博文都是去年12月的了,因为从去年9月开始就上班,期间还有其他的杂七杂八的事情....编不下去了,就是懒!大写的!哈哈哈,生活就是如此,你得到一些的同时就会失去一些,吾等凡人逃不过类似这样的定律,只能在此基础上尽可能的活得好一点,仅此而已,朋友加油!
今天是来分享一下渗透测试中人人熟知(如果你不知道,就不是这类人?)的BurpSuite——以下介绍来自维基百科:
Burp 或 Burp Suite(饱嗝套装)是一个用于测试 Web 应用程序安全性的图形化工具。该工具使用Java编写,由PortSwigger Web Security开发。该工具有三个版本。可以免费下载的社区版、专业版和试用后可以购买的企业版。社区版大大减少了功能。它是为Web应用程序安全检查提供全面解决方案而开发的。除了代理服务器、Scanner 和Intruder等基本功能外,该工具还包含更高级的选项,如Spider、Repeater、Decoder、Comparer、Extender和Sequencer。PortSwigger由Web安全领域的领先专家Dafydd Stuttard于2004年创建。[凑字数结束-_-]
    今天分享的是BurpSuite Pro破解版(BurpSuite Cracked version)v1.7.37,其实也可以用于2.0版本的破解,详细的使用破解教程可以参考这里:BurpSuite 1.7.32 Cracked 破解版[注册机]下载【无后门版】,不过前阵子在先知上有朋友发了一个汉化的教程,但是需要手动输入这些命令而且还容易出错,故,我在此基础上写了个一键自动生成桌面快捷方式加上汉化启动。先上图各位看看效果:BurpSuite破解版汉化脚本.gif


说一下包里的几个插件:

plugins.png

burp-vulners-scanner-1.2.jar --- burp 根据Vulners.com提供的漏洞库扫描通过burp的请求是否存在漏洞 

地址:https://github.com/vulnersCom/burp-vulners-scanner

bypasswaf.jar 就如其名bypass 一些waf

地址:https://www.codewatch.org/blog/?p=408

chunked-coding-converter.0.2.1.jar 国人c0ny1最新版 burp分块输出,也是对抗waf的插件

地址:https://github.com/c0ny1/chunked-coding-converter

sqlmap.jar 联合本地sqlmap 进行注入测试,当然burp插件商店上还有一款 sqli-py(地址:https://github.com/portswigger/sqli-py)可以直接安装就不叙述了

所有插件以及脚本下载地址:https://github.com/Mr-xn/BurpSuite-collections

当然了,以上的这些我的这个项目也都有搜集,如果你有好的burp插件或者相关文章都可以push过来,大家一起力量才是最大。

有能力请购买正版!

致敬所有开源的项目作者!

注意:禁止使用本项目所有软件及其文章等资源进行非法测试!


参考如下链接及其文章:
SQLiPy: A SQLMap Plugin for Burp :https://www.codewatch.org/blog/?p=402
Burp Suite Pro Loader&Keygen By surferxyz(更新新版,附带v1.7.37原版): https://www.52pojie.cn/thread-691448-1-1.html
BurpSuite 1.6~2.x版本汉化版工具: https://xz.aliyun.com/t/3846
burpsuite扩展集成sqlmap插件: https://www.cnblogs.com/tdcqma/p/6145469.html

相关教程书籍:
Burp Suite 实战指南 :https://t0data.gitbooks.io/burpsuite/content/
Burp Suite新手指南 https://www.freebuf.com/articles/web/100377.html



admin 发布于  2019-3-28 22:10 

【实用reg文件分享】设置cmd为utf-8&在此处打开CMD&让 Windows 时钟显示精确到秒 技术文章

【实用reg文件分享】设置cmd为utf-8&在此处打开CMD&让 Windows 时钟显示精确到秒

在实际使用中,我们经常需要使用cmd处理一些小东西,比如解密脚本啊等:cmd默认的编码方式不支持utf-8的,会乱码:

shotpic_2018-10-30_20-57-05.jpg

这时候如果我们使用命令:chcp 65001 即可让cmd命令行支持utf-8的编码格式,就不会乱码了:

shotpic_2018-10-30_20-56-12.jpg

在我解决这个问题之前,Google了好久,结果是有很多文章看得我是云里雾里。。。不知所云。最后还是找到了一些零散的信息,最终通过实践验证,加上Google查资料,于是就自己写了个注册表文件导入后就可以安心食用了。下载文件我放在最后,代码也会贴出来。

还有另外两个注册表文件,一个是【在此处打开CMD】另一个是【让 Windows 时钟显示精确到“秒”】。

在此处打开CMD】 主要是方便我们直接在某个文件夹直接打开cmd并且不用去cd切换路径。效果如下:

addcmdhere.gif

【让 Windows 时钟显示精确到“秒”】顾名思义:让Windows的时钟显示秒数。效果如下:

seconds.gif




下面就是代码:

Windows Registry Editor Version 5.00

;# -*- coding: utf-8 -*-
;# @Author: Mrxn
;# @Blog: https://mrxn.net/
;# @DateTime: 2018-10-30 20:25:51 Tuesday
;# @Description: this is the default description for Mrxn
;#
;
; 下载【cmd-utf-8_seconds.zip】
;【解压!】【解压!】【解压!】重要的事说三遍!
; 解压后,进入 【cmd-utf-8_seconds】文件夹,双击 【设置cmd为utf-8.reg】弹出的对话框按次序选择 【是】【是】【确定】即可。
; 打开你的cmd.exe 输入 chcp 回车 看到如下类似的信息就表明成功了,以后每次打开cmd就都支持utf-8编码了
; Active code page: 65001
; C:\WINDOWS\system32>chcp
; Active code page: 65001
; C:\WINDOWS\system32>
; 注意:作者在Windows10 1803 中测试没问题。

;第一个是设置chcp 65001(十六进制),but,貌似没用啥作用
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:0000fde9
"FaceName"="Lucida Console"

;真正起作用的
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"autorun"="chcp 65001"

;设置字体的,不喜欢的可以删除或者是修改成自己喜欢的字体(前提是你的电脑里面有这个字体)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]
"936"="*Lucida Console"

;小伙砸,看你骨骼精奇,都看到这里了没来我博客逛逛啊 --->https://mrxn.net<

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere]
@="在此处打开命令提示符"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd "%V""

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere]
@="在此处打开命令窗口"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere\command]
@="cmd.exe /s /k pushd \"%V\""

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"ShowSecondsInSystemClock"=dword:00000001

[HKEY_CURRENT_USER\Control Panel\International]
"sLongDate"="yyyy '年' M '月' d '日' dddd"
"sShortDate"="yyyy '年' M '月' d '日' dddd"
"sTimeFormat"="HH:mm:ss"
"sShortTime"="HH:mm:ss"
"sYearMonth"="yyyy '年' M '月'"

附件下载:cmd-utf-8_seconds.7z



PS:这周就会更新 kms脚本宝塔面板开启域名SSL登录脚本,感谢发邮件反馈bug的朋友。


admin 发布于  2018-10-30 22:10 

搭建了一个Jetbrains系列软件激活服务端--欢迎测试 神器荟萃

因为自己使用pycharm写写python代码,需要激活软件,之前是下载到本地,每次打开软件都需要手动运行激活服务端很是不方便,今天抽空把Jetbrains系列软件激活服务端放到自己的小鸡上了,欢迎测试。在此感谢lanyu 的付出与分享。

使用方法很简单,打开你的软件,比如我使用的pycharm,然后选择激活服务器---License server ,地址填写:https://idea.mrxn.net,然后点击Activate即可激活。

shotpic_2018-06-08_13-29-59.png 

一般来说,如果是可以激活的,一两秒钟就可以看到激活成功了。

shotpic_2018-06-08_13-25-34.png

 update:2020/02/12,激活服务端对于新版不行了,但是激活码更新在这里可以的:

CZ15DZPZYY-eyJsaWNlbnNlSWQiOiJDWjE1RFpQWllZIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IGlkZWEubWVkZW1pbmcuY29tIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMDgifSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAyMC0wMy0wOCJ9LHsiY29kZSI6IkRQTiIsInBhaWRVcFRvIjoiMjAyMC0wMy0wOCJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDIwLTAzLTA4In0seyJjb2RlIjoiR08iLCJwYWlkVXBUbyI6IjIwMjAtMDMtMDgifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAyMC0wMy0wOCJ9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDIwLTAzLTA4In0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDIwLTAzLTA4In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMDgifSx7ImNvZGUiOiJSRCIsInBhaWRVcFRvIjoiMjAyMC0wMy0wOCJ9LHsiY29kZSI6IlBDIiwicGFpZFVwVG8iOiIyMDIwLTAzLTA4In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMjAtMDMtMDgifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAyMC0wMy0wOCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDIwLTAzLTA4In0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMDgifSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMDgifV0sImhhc2giOiIxNjYzMTgyNS8wIiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-mWKj5dwt4IvUVO1h86HZiC3+KJxoTK9CEZyb+ev/+q5s+8UYpPFlP3+4hLqww5iraavb1Xx1qHy/snUDcerPye5vy9l81h6y2TGnhIhASYNkOpX2vRPFVAgwOz+ACDwvRlokiCcDJ+S4g8ok5D/S2CLlspb23IyArixz1s/Q+/P7o4Rzn5DLHEdRtfbW7CPBWbXK+ipMXQxlpokqhk8UzTOZgNkFnYjpJdfYHr6gHTrcH2QC/BL0peg8Y9+wXEde8Ks+ogrpNTAZrQmdQ81D+SdoZN3MxxWypxSU4Wo5YTIPX2fQAp56SpcO33iZbdrmoRM9PJjuDyIvY6kuphQ4VQ==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==



admin 发布于  2018-6-8 13:42 

Supervisor重新加载配置&启动新的进程 技术文章

一、添加好配置文件后。一般是在:/etc/supervisor/目录下,当然,我推荐大家在安装supervisor的时候呢,将主配置文件和其他需要守护的应用程序的配置文件分开,以便于管理和区别,这里把我的主配置文集贴出来,仅供参考:

[unix_http_server]
;file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 会使用
file=/home/supervisor/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; socket 文件的 mode,默认是 0700
;chown=nobody:nogroup ; socket 文件的 owner,格式: uid:gid
;[inet_http_server] ; HTTP 服务器,提供 web 管理界面
;port=127.0.0.1:9001 ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性
;username=usersuper ; 登录管理后台的用户名
;password=yourpasswd.. ; 登录管理后台的密码
[supervisord]
;logfile=/tmp/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log
logfile=/var/log/supervisor/supervisord.log ;日志文件,修改为专门设置的目录
logfile_maxbytes=50MB ; 日志文件大小,超出会 rotate,默认 50MB
logfile_backups=10 ; 日志文件保留备份数量默认 10
loglevel=info ; 日志级别,默认 info,其它: debug,warn,trace
;pidfile=/tmp/supervisord.pid ; pid 文件
pidfile=/home/supervisor/supervisord.pid ;
nodaemon=false ; 是否在前台启动,默认是 false,即以 daemon 的方式启动
minfds=1024 ; 可以打开的文件描述符的最小值,默认 1024
minprocs=200 ; 可以打开的进程数的最小值,默认 200
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord,路径与 unix_http_server 部分的 file 一致
serverurl=unix:///home/supervisor/supervisor.sock ;
;serverurl=http://127.0.0.1:9001 ; 通过 HTTP 的方式连接 supervisord
; 包含其他的配置文件
[include]
files = /etc/supervisor/*.conf ; 可以是 *.conf 或 *.ini

二、更新新的配置到supervisord

supervisorctl update

三、重新启动配置中的所有程序

supervisorctl reload 

四、启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name

五、查看正在守候的进程

supervisorctl

六、停止某一进程 (program_name=你配置中写的程序名称)

pervisorctl stop program_name

七、重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name 

八、停止全部进程

supervisorctl stop all 

注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。


admin 发布于  2018-5-28 15:56 

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】 Linux

首先看一下这张CPU的近一周的波动统计图,可以知道从2月28日开始一路飙升,并且后来时不时的自动停止,这个起伏真的是 因吹丝挺啊!(小声嘀咕:QNMLGB!

shotpic_2018-03-04_14-41-03.png

我那两天忙,没时间看,这几天空了上去一看傻眼了。。。CPU爆表啊,.X1-lock占用CPU98% ,在Top命令下 C查看进程一看是Xorg,我擦,难道中马了(一种不祥的预感,事实是的-_-|| >悲伤<):

shotpic_2018-03-02_14-17-56.png

shotpic_2018-03-02_14-18-39.png

我就想起了前段时间折腾nextcloud,装了各种插件,而其中ocdownloader需要aria2c,我就去Google搜索啊,结果我也忘了借鉴了谁的,估计装到了个假的aria2c,于是乎就中马了。。。

shotpic_2018-03-02_15-59-39.png

好吧,删除了aria2c以及nextcloud,终止那个wget 进程 并删掉残留//瞬间清静了。。。但是,我后来发现了,这个木马其实占用的CPU并不高(并不一定 =_= 无奈自己太菜不知道如何确定 )<< 从上图得出的结果。

后来Google搜索啊,询问了大佬以及网友的记录,大致如下:

Xorg这个进程多半是是由 vncserver 产生的,所以由此可以推定因为 VNC 服务导致了 CPU 占用超高。连接 VNC 需要请求 GUI 资源,如果机器配置和网络条件不够好,那么资源占用高是必然的了。如果无法升级硬件配置,那么可以考虑调整 VNC 设置,将所需的 GUI 要求降低,如减少分辨率、颜色位深等。

但是我在自己的服务器上找了半天,都没有找到神马vncserver,于是乎,只能自己先写个脚本监控它(因为这个进程的名字不变,如果进程的名字会改变,稍微修改一下我的脚本也可以使用的),如果一出现就直接FUCK kill它。脚本结果运行截图如下:

shotpic_2018-03-04_15-28-13.png

注:脚本可以写进crontab 定时执行,监控,暂时就这么个暴力解决的办法。脚本地址:https://github.com/Mr-xn/server-bash-script/blob/master/freecpu.sh 

后来找了好久,终于找到方法了。。。卸载所有X11相关的包以及Xorg的包,然后查找系统里面的X11相关路径文件和文件夹,全部删除掉。。。OK了!几个小时都没有再出现 .X1-lock 被杀的记录了。卸载相关参考命令我会给出链接,至于查找嘛,很简单,whereis X11 ,apt-get --purge remove 'x11-*'

root@xxxx:~# whereis X11
X11: /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11

root@xxxx:~# rm -rf /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11

终止掉 .X1-lock 进程在进行这些删除操作就好了。

root@xxxx:~# find / -name 'xorg'
/usr/share/X11/xkb/rules/xorg
root@xxxx:~# ls -lgth /usr/share/X11/xkb/rules/xorg
lrwxrwxrwx 1 root 4 Jun 6 2014 /usr/share/X11/xkb/rules/xorg -> base

至于这个xorg 的内容我贴在这里了,你们有看的,可以去查看:https://pastebin.com/WCxn3Bux

删完后 你继续查找 如果像下面这个就表示删干净了。

root@xxxx:~# whereis xorg
xorg:
root@xxxx:~# whereis X11
X11:
root@xxxx:~# 

 相关参考链接:

https://www.howtoinstall.co/en/debian/jessie/x11-common?action=remove

http://www.pc-freak.net/blog/debian-linux-remove-xorg-gnome-gdm-graphical-environment-packages-serverr/

https://www.wikihow.com/Configure-X11-in-Linux

https://raspberrypi.stackexchange.com/questions/5258/how-can-i-remove-the-gui-from-raspbian-debian (这个里面比较详细)

下面是写shell 的一些笔记,生人勿看。

linux shell中 if else以及大于、小于、等于逻辑表达式介绍:

比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

注意:这里的空格很重要。要确保方括号的空格。我就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。

if ....; then
....
elif ....; then
....
else
....
fi


[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
基本的if条件命令选项有:

eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在 


几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。

 

shell 的 if 条件判断中有多个条件:

-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score = 5 ]||[ $score = 3 ];then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score -gt 5 ]||[ $score -lt 3 ];then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score -gt 15 ]||([ $score -lt 8 ]&&[ $score -ne 5 ]);then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
或:

#!/bin/bash

count="$1"

if [ $count -gt 15 -o $count -lt 5 ];then

   echo right

fi
 
且:

#!/bin/bash

count="$1"

if [ $count -gt 5 -a $count -lt 15 ];then

   echo right

fi
-------------------------------------------------------
score=$1
if [[ $score -gt 15 || $score -lt 8 && $score -ne 5 ]];then
    echo right
else
    echo wrong
fi

记住必须加两个中括号!!!
 

linux shell脚本 截取字符串时执行错误:bad substitution :

 
比如脚本cutstr.sh的作用时截取www:
 
#/bin/bash
mm="www.baidu.com"
echo ${mm:0:3}
 
执行脚本方式不同出现的结果不同:

方式1、sh cutstr.sh

结果:Bad substitution

方式2、bash cutstr.sh

结果:www

方式3、

chmod 777 cutstr.sh

./cutstr.sh

结果:www

结论:

在执行脚本时要注意的是执行环境的shell,Ubuntu 中执行最好使用上面的方式二或者方式三,注意使用方式一时有时会报错。
 
下面这个脚本执行就会出错:Bad substitution
<span style="color:#FF0000;"><strong>#!/bin/sh</strong></span>

test=asdfghjkl
echo ${test:1}
 
修改#!/bin/sh 为 #!/bin/bash 即可!至于这两者的区别,自行搜索查看有详细的官方讲解。
 
参考链接:
 

admin 发布于  2018-3-4 14:30 

微信小程序游戏跳一跳刷分利器 资源分享

不废话,玩这个的前提是你的微信升级到了最新版。

刷了二十几分钟就一千三百多分了。。。

PS:此文需要一定的电脑基础知识的人员,没有基础的请关闭本页,避免不适。

20171230144747.jpg

20171230120142.jpg

相关工具下载:

https://developer.android.com/studio/run/win-usb.html 或者:https://pan.lanzou.com/b135032/ 密码:150x

记得在你你手机的开发者选项里面打开USB调试。具体方法不累述,各个机型自行搜索。下面说一下,如果你在安装了ADB驱动后,在ADB程序的文件夹里面,使用adb命令提示:

'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。

请自行将adb.exe添加到系统环境变量里面。

如果出现如下错误:

A:\Android\sdk\platform-tools>adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
could not read ok from ADB Server
* failed to start daemon
error: cannot connect to daemon

请使用命令结束掉占用5037端口的程序后,再次运行adb devices 如果你的设备出现了就OK:

A:\Android\sdk\platform-tools>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 127.0.0.1:53509 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53518 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53519 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53520 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53521 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53522 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53523 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53524 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53525 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53555 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53557 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53558 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53559 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53560 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53561 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53562 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:53563 TIME_WAIT 0
TCP 127.0.0.1:53509 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53518 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53519 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53521 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53523 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53525 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53555 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53556 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53557 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53559 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53561 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53563 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:53706 127.0.0.1:5037 SYN_SENT 8004

A:\Android\sdk\platform-tools>taskkill -f -pid 8004
成功: 已终止 PID 为 8004 的进程。

A:\Android\sdk\platform-tools>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

A:\Android\sdk\platform-tools>adb devices
List of devices attached
ca0afa99 device

然后使用 adb kill-server 杀死adb进程后,重新启动adb进程:adb start-server

然后打开jumpAI-windows-amd64.exe 输出你的跃点数,主要根据你的屏幕分辨率来设置,具体的请看这里:https://github.com/faceair/youjumpijump 

标签: 分享 微信

admin 发布于  2017-12-30 20:52