Linux常用指令(三)

常用linux指令-杂项(三)

文件夹管理

1
2
3
4
5
6
7
cd              //显示当前目录名或改变当前目录。
md //创建目录。
rd //删除一个目录。
dir //显示目录中的文件和子目录列表。
tree //以图形显示驱动器或路径的文件夹结构。
path //为可执行文件显示或设置一个搜索路径。
xcopy //复制文件和目录树

文件管理

1
2
3
4
5
6
7
8
9
type                    //显示文本文件的内容。
copy //将一份或多份文件复制到另一个位置。
del //删除一个或数个文件。
move //移动文件并重命名文件和目录。(Windows XP Home Edition 中没有)
ren //重命名文件。
replace //替换文件。
attrib //显示或更改文件属性。
find //搜索字符串。
fc //比较两个文件或两个文件集并显示它们之间的不同

网络命令

1
2
3
4
5
6
7
ping                    //进行网络连接测试、名称解析
ftp //文件传输
net //网络命令集及用户管理
telnet //远程登陆
ipconfig //显示、修改 TCP/IP 设置
msg //给用户发送消息
arp //显示、修改局域网的 IP 地址 - 物理地址映射列表

系统管理

1
2
3
4
5
6
7
8
at                      //安排在特定日期和时间运行命令和程序
shutdown //立即或定时关机或重启
tskill //结束进程
taskkill //结束进程(比 tskill 高级,但 WinXPHome 版中无该命令)
tasklist //显示进程列表(Windows XP Home Edition 中没有)
sc //系统服务设置与控制
reg //注册表控制台工具
powercfg //控制系统上的电源设置

杂项

1
2
3
4
5
//将文件按从新到旧排列,取第一个。
ls -t ws* | head -1

//将文件按从旧到新排列,取最后一个。
ls -rt ws* | tail -1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ctrl+q                  //打开查询窗口
ctrl+/ //注释sql语句
ctrl+shift +/ //解除注释
ctrl+r //运行查询窗口的sql语句
ctrl+shift+r //只运行选中的sql语句
F6 //打开一个mysql命令行窗口
ctrl+d (1): //查看表结构详情,包括索引 触发器,存储过程,外键,唯一键;(2):复制一行
ctrl+l //删除一行
ctrl+n //打开一个新的查询窗口
ctrl+w //关闭一个查询窗口
ctrl+tab //多窗口切换

sql_mode 引发的执行sql文件 或者update / insert报错
查看mysql 字符集 show variables like '%character%'

批处理常用Dos命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//删除n天前的文件
//:: IIS日志文件目录
set log_dir="C:\inetpub\logs\LogFiles"

//:: 保留日志天数
set bak_dat=15

//:: 删除日志文件
forfiles /p "f:\heroes\server_shipping\bin\serverlog" /s /m *.* /d -1 /c "cmd /c del @path"
forfiles /p %log_dir% /S /M *.log /D -%bak_dat% /C "cmd /c echo 正在删除@relpath 文件… & echo. & del @file"


//首先,在Windows中,系统日期由以下参数获得:
%date%
//系统时间则由以下参数获得:
%time%

echo %date%
xshell 的删除粘贴指令 ctrl + insert 和 shift + insert
关闭mysql操作 net stop mysql
重启mysql操作 net restart mysql

hero-server部分端口状态

netstat

ps:netstat 命令可以看服务器的进程间连接情况

netstat
参数:

1
2
3
4
5
6
-a              //(all)显示所有选项,默认不显示LISTEN相关
-p //显示建立相关链接的程序名
-n //拒绝显示别名,能显示数字的全部转化成数字。
-l //仅列出有在 Listen (监听) 的服务状态
-t //(tcp)仅显示tcp相关选项
-u //(udp)仅显示udp相关选项

连接情况

netstat -t 配合 cygwin cat text.txt | grep cs -B 1
就可查看cs 进程 与其他进程的连接情况

场外:定位某玩家时指令

1
find . -name "ws*" | xargs grep "1582180542,288096256"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
项目主要由 7 个进程组成 分别为
master 主服务器:所有服务器进程启动之后都会与master建立连接,由master来分配对应服务器之间的连接关系
fep 消息分发服务器: 服务器内部走的是socket 消息包通信,服务器与客户端走的是protobuf 协议通信,客户端与服务器之间的分发消息统一由fep来做中转
gate 门服务器:所有客户端首先与gate连接,同时比对版本对应与否(欸,这个比对版本的功能是我写的=.=),版本一致之后建立通信连接
ls 登录服务器:主要负责用户的注册登录
ws 世界服务器:主要管控用户在进入战斗场景前的数据,匹配,社交,购买等持久化操作的服务器
match 匹配服务器:顾名思义,玩家之间相互匹配的服务器
cs 战斗服务器:一盘吃鸡游戏,所有玩家的操作,游戏流程都在这里,一盘游戏所有相应的数据都存在内存中.

涉及线程:
从最简单的开始
gate: gate进程 有4个建立的连接
另外两个 一个连接 fep ,一个连接 master
相互建立连接的端口号不知道在干嘛 0 0*/
TCP 127.0.0.1:9000 DESKTOP-16CKEN1:29088(fep) ESTABLISHED
[gate.exe]
TCP 127.0.0.1:29085 DESKTOP-16CKEN1:29086 ESTABLISHED
[gate.exe]
TCP 127.0.0.1:29086 DESKTOP-16CKEN1:29085 ESTABLISHED
[gate.exe]
TCP 127.0.0.1:29087 DESKTOP-16CKEN1:8000(master) ESTABLISHED
[gate.exe]

fep:
TCP 127.0.0.1:2100 DESKTOP-16CKEN1:29106(ls) ESTABLISHED
[fep.exe]
TCP 127.0.0.1:2100 DESKTOP-16CKEN1:29112(cs) ESTABLISHED
[fep.exe]
TCP 127.0.0.1:29082 DESKTOP-16CKEN1:29083 ESTABLISHED
[fep.exe]
TCP 127.0.0.1:29083 DESKTOP-16CKEN1:29082 ESTABLISHED
[fep.exe]
TCP 127.0.0.1:29084 DESKTOP-16CKEN1:8000(master) ESTABLISHED
[fep.exe]
TCP 127.0.0.1:29088 DESKTOP-16CKEN1:9000(gate) ESTABLISHED
[fep.exe]
TCP 127.0.0.1:29101 DESKTOP-16CKEN1:1000(ws) ESTABLISHED
[fep.exe]

ls:
TCP 127.0.0.1:29067 DESKTOP-16CKEN1:3306(db) ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29068 DESKTOP-16CKEN1:3306 ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29073 DESKTOP-16CKEN1:3306 ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29074 DESKTOP-16CKEN1:3306 ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29079 DESKTOP-16CKEN1:3306 ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29080 DESKTOP-16CKEN1:3306 ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29103 DESKTOP-16CKEN1:29104(ls) ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29104 DESKTOP-16CKEN1:29103(ls) ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29105 DESKTOP-16CKEN1:8000(master) ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29106 DESKTOP-16CKEN1:2100(fep) ESTABLISHED
[ls.exe]
TCP 127.0.0.1:29107 DESKTOP-16CKEN1:1000(ws) ESTABLISHED
[ls.exe]

mater:
TCP 127.0.0.1:8000 DESKTOP-16CKEN1:29084(fep) ESTABLISHED
[master.exe]
TCP 127.0.0.1:8000 DESKTOP-16CKEN1:29087(gate) ESTABLISHED
[master.exe]
TCP 127.0.0.1:8000 DESKTOP-16CKEN1:29091(match) ESTABLISHED
[master.exe]
TCP 127.0.0.1:8000 DESKTOP-16CKEN1:29098(ws) ESTABLISHED
[master.exe]
TCP 127.0.0.1:8000 DESKTOP-16CKEN1:29105(ls) ESTABLISHED
[master.exe]
TCP 127.0.0.1:8000 DESKTOP-16CKEN1:29111(cs) ESTABLISHED
[master.exe]
TCP 127.0.0.1:29056 DESKTOP-16CKEN1:29057 ESTABLISHED
[master.exe]
TCP 127.0.0.1:29057 DESKTOP-16CKEN1:29056 ESTABLISHED
[master.exe]

match:
TCP 127.0.0.1:7111 DESKTOP-16CKEN1:29102(ws) ESTABLISHED
[match.exe]
TCP 127.0.0.1:7111 DESKTOP-16CKEN1:29114(cs) ESTABLISHED
[match.exe]
TCP 127.0.0.1:29063 DESKTOP-16CKEN1:3306 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29066 DESKTOP-16CKEN1:3306 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29070 DESKTOP-16CKEN1:3306 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29072 DESKTOP-16CKEN1:3306 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29076 DESKTOP-16CKEN1:3306 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29078 DESKTOP-16CKEN1:3306 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29089 DESKTOP-16CKEN1:29090 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29090 DESKTOP-16CKEN1:29089 ESTABLISHED
[match.exe]
TCP 127.0.0.1:29091 DESKTOP-16CKEN1:8000(master) ESTABLISHED
[match.exe]

ws:
TCP 127.0.0.1:1000 DESKTOP-16CKEN1:29101(fep) ESTABLISHED
[ws.exe]
TCP 127.0.0.1:1000 DESKTOP-16CKEN1:29107(ls) ESTABLISHED
[ws.exe]
TCP 127.0.0.1:1000 DESKTOP-16CKEN1:29113(cs) ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29064 DESKTOP-16CKEN1:3306 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29065 DESKTOP-16CKEN1:3306 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29069 DESKTOP-16CKEN1:3306 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29071 DESKTOP-16CKEN1:3306 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29075 DESKTOP-16CKEN1:3306 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29077 DESKTOP-16CKEN1:3306 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29096 DESKTOP-16CKEN1:29097 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29097 DESKTOP-16CKEN1:29096 ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29098 DESKTOP-16CKEN1:8000(master) ESTABLISHED
[ws.exe]
TCP 127.0.0.1:29102 DESKTOP-16CKEN1:7111(match) ESTABLISHED //控制台上输出的connect to 7111 OK
[ws.exe]


TCP 127.0.0.1:29109 DESKTOP-16CKEN1:29110 ESTABLISHED
[cs.exe]
TCP 127.0.0.1:29110 DESKTOP-16CKEN1:29109 ESTABLISHED
[cs.exe]
TCP 127.0.0.1:29111 DESKTOP-16CKEN1:8000(maste) ESTABLISHED
[cs.exe]
TCP 127.0.0.1:29112 DESKTOP-16CKEN1:2100(fep) ESTABLISHED
[cs.exe]
TCP 127.0.0.1:29113 DESKTOP-16CKEN1:1000(ws) ESTABLISHED
[cs.exe]
TCP 127.0.0.1:29114 DESKTOP-16CKEN1:7111(match) ESTABLISHED
[cs.exe]

多线程程序杂项

涉及多线程程序涉及的时候经常会出现一些令人难以思议的事情,用堆和栈分配一个变量可能在以后的执行中产生意想不到的结果,而这个结果的表现就是内存的非法被访问,导致内存的内容被更改。

理解这个现象的两个基本概念是:在一个进程的线程共享堆区,而进程中的线程各自维持自己堆栈。
在 windows 等平台上,不同线程缺省使用同一个堆,所以用 C 的 malloc (或者 windows 的 GlobalAlloc)分配内存的时候是使用了同步保护的。
如果没有同步保护,在两个线程同时执行内存操作的时候会产生竞争条件,可能导致堆内内存管理混乱。
比如两个线程分配了统一块内存地址,空闲链表指针错误等。

Symbian 的线程一般使用独立的堆空间。
这样每个线程可以直接在自己的堆里分配和释放,可以减少同步所引入的开销。
当线程退出的时候,系统直接回收线程的堆空间,线程内没有释放的内存空间也不会造成进程内的内存泄漏。

但是两个线程使用共用堆的时候,就必须用 critical section 或者 mutex 进行同步保护。
否则程序崩溃时早晚的事。
如果你的线程需要在共用堆上无规则的分配和释放任何数量和类型的对象,可以定制一个自己的 allcator,在 allocator 内部使用同步保护。
线程直接使用这个 allocator 分配内存就可以了。
这相当于实现自己的 malloc,free。
但是更建议你重新审查一下自己的系统,因为这种情况大多数是不必要的。
经过良好的设计,线程的本地堆应该能够满足大多数对象的需求。
如果有某一类对象需要在共享堆上创建和共享,这种需求是比较合理的,可以在这个类的 new 和 delete 上实现共享保护。

------ 本文结束 ------