netstat -s | egrep "listen|LISTEN"
Fri May  5 15:39:59 CST 2017
1641906 times the listen queue of a socket overflowed
1641906 SYNs to LISTEN sockets ignored


ss -lnt
State       Recv-Q Send-Q                              Local Address:Port                                             Peer Address:Port              
LISTEN      0      300                                             *:3307                                                        *:*                  
LISTEN      0      511                                             *:80                                                          *:*        


ss -lnt
Recv-Q Send-Q Local Address:Port  Peer Address:Port
0        50               *:3306             *:*
上面看到的第二列Send-Q 表示第三列的listen端口上的全连接队列最大为50,第一列Recv-Q为全连接队列当前使用了多少

全连接队列的大小取决于:min(backlog, somaxconn) . backlog是在socket创建的时候传入的,somaxconn是一个os级别的系统参数

半连接队列的大小取决于:max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog)。 不同版本的os会有些差异


来自:https://blog.csdn.net/Tanswer_/article/details/78375317
AirServer投屏pc之iPhone和win10同一个wifi可以通过iphone把内容投递上去:
https://bbs.feng.com/forum.php?mobile=2&mod=viewthread&page=1&tid=11567782

AirServer投屏pc:
https://jingyan.baidu.com/article/495ba841c6491238b30edeba.html
用户文件是一个底层且常用的需求。
阅读全文
背景:出现没有OOM,但是stress子进程反复重启,于是系统负载到118,死机,让机房重启,需要验证为何没有OOM?

container_memory_cache,我们会发现使用的缓存量继续增加,直到container_memory_usage_bytes达到限制,然后开始减少。container_memory_usage_bytes确实考虑了一些正在缓存的文件系统页面。我们还可以看到OOMKiller正在跟踪container_memory_working_set_bytes。这是有道理的,因为共享文件系统缓存页面可以随时从内存中逐出。

也就是说:container_memory_cache ((思考文件系统缓存))平时是不动它的一个值,但是当container_memory_usage_bytes伴随container_memory_usage_bytes的增长而增长,container_memory_usage_bytes增长到设定的limit 200M后,发现container_memory_usage_bytes还继续增长,那么它会把container_memory_cache的内存给用掉。

来自:https://medium.com/faun/how-much-is-too-much-the-linux-oomkiller-and-used-memory-d32186f29c9d


kubectl get pod memory-demo-2 --namespace=mem-example
这时候,容器可能会运行,也可能会被杀掉。如果容器还没被杀掉,重复之前的命令直至 你看到这个容器被杀掉:

NAME            READY     STATUS      RESTARTS   AGE
memory-demo-2   0/1       OOMKilled   1          24s


来自:https://www.cnblogs.com/weifeng1463/p/10174432.html


相关测试的yaml:https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/
并发与并行是两个既相似而又不相同的概念
并发性,又称共行性,是指能处理多个同时性活动的能力
并行是指同时发生的两个并发事件,具有并发的含义
而并发则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
并行性指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。
所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候执行。
TimeWait过多时,两个方面做处理:
1)打开:
cat /etc/sysctl.conf|grep  -Eri "reuse|timestamps|local_port_range"
net.ipv4.ip_local_port_range = 2000 65000   #CS模型的C端端口范围增大到65000
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_reuse  = 1   #这个是重用客户端的四元里的二元,这个容易和tcp_tw_recycle 记混,下面这个tcp_tw_recycle这个项最好关掉,容易出现并引发疑难问题。
如果是安全可控制,可以复用处于TIME_WAIT的套接字为新的连接所用。1)只适用于连接发起方。 也就是CS模型的客户端。2)对应TIME_WAIT状态的连接创建超过1秒才可以被复用。所以,上面这个net.ipv4.tcp_timestamps = 1 ,也就是是打开对TCP时间戳的支持,默认即为1秒。

net.ipv4.ip_local_port_range = 1024 65535   #调大

2)关闭:
不要开启:net.ipv4.tcp_tw_recycle = 1   #不关容易出现并引发疑难问题
cat /etc/sysctl.conf|grep  -Eri "tcp_tw_recycle"                    
net.ipv4.tcp_tw_recycle = 1

=======================================================================
出现在redis在PHP里主动关闭高并发时候,redis在php-fpm请求完关了,可能是php主动关了,被动方认为有错误发生。
taimwait主要是把本地发起请求的端口范围给占满了,出现client不可用新端口client到server。

假设发起主动关闭的一方(client)最后发送的ACK在网络中丢失,由于TCP协议的重传机制,执行被动关闭的一方(server)将会重发其FIN,在该FIN到达client之前,client必须维护这条连接状态,也就说这条TCP连接所对应的资源(client方的local_ip,local_port)不能被立即释放或重新分配,直到另一方重发的FIN达到之后,client重发ACK后,经过2MSL时间周期没有再收到另一方的FIN之后,该TCP连接才能恢复初始的CLOSED状态。如果主动关闭一方不维护这样一个TIME_WAIT状态,那么当被动关闭一方重发的FIN到达时,主动关闭一方的TCP传输层会用RST包响应对方,这会被对方认为是有错误发生,然而这事实上只是正常的关闭连接过程,并非异常。

摘自:https://blog.csdn.net/huangyimo/article/details/81505558


参数调整:
CentOS 大量的TIME_WAIT解决方法:
TIME_WAIT状态的连接,通过调整内核参数解决,

vi /etc/sysctl.conf 编辑文件,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30 然后执行

/sbin/sysctl -p让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

修改之后,再用

netstat -n -p -t发现大量的TIME_WAIT 已不存在,网站访问正常!


来自:https://www.bbsmax.com/A/ZOJPgOYyzv/
有一个n位数,它的各位数字翻转以后组成新的n位数,原来的n位数是新n位数的n倍,求所有可能的n位数。
如:
8712/4 = 2,178


鸟哥的代码:

#make calcnumber
cc     calcnumber.c   -o calcnumber

#./calcnumber
0 = 0 / 1
1 = 1 / 1
2 = 2 / 1
3 = 3 / 1
4 = 4 / 1
5 = 5 / 1
6 = 6 / 1
7 = 7 / 1
8 = 8 / 1
9 = 9 / 1
2178 = 8712 / 4
108901089 = 980109801 / 9
109999989 = 989999901 / 9


http://live.aulddays.com/tech/11/linux-shell-too-great-base-error.htm


我用shell写了一个:
#cat *.sh
#!/bin/bash
for i in {1000..9999} ;do
    rev=$(echo $i | rev)
    div=$(echo "$rev/4" | bc)
    if [[ "10#$i" -eq "10#$div" ]];then
      echo "result="$i;
    fi
done

sh calcnumber.sh
result=1997  #这个是小数四舍五入后相等的,shell在处理小数这方面有些弱,得靠BC。
result=2178
xargs的作用在于,大多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。
echo "one two three" | xargs mkdir
上面的代码等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。

一)xrags删文件提示确认:
使用xargs命令以后,由于存在转换参数过程,有时需要确认一下到底执行的是什么命令。
-p参数打印出要执行的命令,询问用户是否要执行。

echo 'one two three' | xargs -p rm -rf
rm -rf one two three ?...y
上面的命令执行以后,会打印出最终要执行的命令,让用户确认。用户输入y以后(大小写皆可),才会真正执行。

-t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认。
echo 'one two three' | xargs -t rm -rf



二)文本里的多行目录名建立成文件夹:
如果xargs要将命令行参数传给多个命令,可以使用-I参数。

-I指定每一项命令行参数的替代字符串。
$ cat foo.txt
one
two
three

$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three

$ ls
one two three
上面代码中,foo.txt是一个三行的文本文件。我们希望对每一项命令行参数,执行两个命令(echo和mkdir),使用-I file表示file是命令行参数的替代字符串。执行命令时,具体的参数会替代掉echo file; mkdir file里面的两个file。


来自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html
1、要在桌面上创建新文件夹,请单击桌面并按[shift + cmmand + n]。

2、按下步骤一所示的按钮后,桌面此时会创建个未命名文件夹。如果不小心按多了,创建了多个文件夹,要撤消,请按cmmand + z。


来自:https://zhidao.baidu.com/question/1239552110247618779.html
利用 Redis 事务特征
redis 事务是原子操作,可以保证订单处理的过程中数据没有被其它并发的进程修改。
示例代码:

使用 ab 测试
$ ab -t 20 -c 10 http://192.168.1.104:9509/

经测试结果对比,redis 事务方式优于文件排他锁方式,而文件排他锁方式中,非阻塞模式优于阻塞模式。

更多,来自:https://199508.com/post/2054
chrome://settings/content/notifications
尽管置位已禁止:
已禁止【V】
禁止:

允许:
【V】URL #这个打开了,还是会推送的,得删掉这些URL就正常了。当时以为上面禁止就全禁止了,实则不然。
command+shift+k删除整行代码

正则替换注意后现在括号才能用$1引用:([0-9]) ==》 $1': '  :
    '10.71.1.63 my.cntv.cn  ==》    '10.71.1.63': ' my.cntv.cn

查看快捷键列表:command+k,command+s

切换同一编辑器不同的标签页:control+tab

跳转一个单词:option+←,option+→

Mac的Shell快捷键: Contro+Command+t
vscode mac 怎么打开终端,vscode怎么打开终端:control+ESC下面那个键(.~`) (esc下边那个)  ,control+`  (ESC按键下面那个`)
附:VS Code 的终端字体的方法 https://jackxiang.com/post/10027/

选择左上角Code ,选择【首选项】选择 【设置】搜索 终端 选择【终端】在右侧下翻,找到如下位置Terminal › Integrated: Font Family,修改红色方框中的值即可修改终端字体大小。Terminal › Integrated: Font Size字号设置大一些就好了。monospace 字体。 终端里的Iterm符号显示不出来,换字体:https://yq.aliyun.com/articles/691268  VS Code 内置的终端就能正确显示 Zsh 主题的箭头:https://www.jianshu.com/p/6837eaa4f4aa


通过匹配文本打开文件:Mac: command + T

切换标签:control + option + 左剪头或右剪头。

一次搜索所有文件的文本:Mac: Command + Shift + F

鼠标列选择:option  + 左键单击,选列块是 option + shift + 左键单击,尾不一样长度如何到尾部:shift+command+→ 。(五颗星,想直接到列的行尾,可列选择后再command+→到列尾再反向前面列选择)

鼠标多光标:option+在需要创建多光标的地方点鼠标左键

选中相同内容列编辑: 选中空格后,command+ d #这个用来进行快捷替换IP之间空格为竖线很有用,192.168.1 192.168.2 192.168.3 =》192.168.1|192.168.2|192.168.3

前提是先选中多行shift + 鼠标左键,再在所选中列的末尾进行列编辑: shift+option+i

多光标列编辑之批量替换当前文件中所有匹配的文本:Mac: command + F2。

多光标列编辑之复制光标向上或者向上批量添加内容:Mac: Control + Option +向上箭头,向下则是:Shift+Control + Option +向上箭头。

多光标列选择之单词左选择:shift+option+command+向左键

多光标列选择之单词右选择:shift+option+command+向右键

多光标选择查找匹配的所有匹配项: option+enter  
在选定内容中查找:option+command+shift+l(大写的L) ,选中后再替换:Optio+command+f

多光标的使用
技巧1:按住 「Option」键(windows 用户是按住「Alt」键) ,然后在页面中希望中现光标的位置点击鼠标。

技巧2:选中某个文本,然后反复按住快捷键「 Cmd + D 」键(windows 用户是按住「Ctrl + D」键), 即可将全文中与光标当前所在位置的词相同的词逐一加入选择。

技巧3:选中一堆文本后,按住「Option + Shift + i」键(windows 用户是按住「Alt + Shift + I」键),既可在每一行的末尾都创建一个光标。


将选择添加到下一个查找匹配,依次找出文中所有的当前选中的单词: command + d
一次性找出文所有的当前选中的单词: contorl + shift + l
切换侧栏可见:command+b

光标到行首:command+向左键
光标到行尾:command+向右键

Vscode从文本过滤所有IP并粘贴到新文档的步骤:
1)command + option + F 替换
2)([0-9]{1,3}[\.]){3}[0-9]{1,3}
3)点选上后面的*
4)option + enter 选中所有匹配项。
(一次性正则选中所有匹配到的代码:option + enter 选中所有匹配项。)
5)command + c 复制所有所选择IP。

VS Code 匹配中文: [\u4e00-\u9fa5]

Mac下的Vscode鼠标选择列:
Shift+Option+鼠标左键

移至文件的开头/结尾:
Mac: command + Home键开头,Mac: command + End键结尾。(Home/End分别是向左和向右键)

向上/向下移动一行:Mac: option+ 向下箭头,Mac: option向上箭头。

重复的行之向上向下复制一行:
option+shift+向上键/option+shift+向下键

插入一行: Shift + enter

删除一行:Mac: command + Shift + K。

删除上一个单词:Mac: option + delete。

逐个选择文本
Mac: option + Shift +右箭头
Mac: option + Shift +左箭头

选择左侧/右侧的所有内容:
Mac: command + Shift + Home/End
苹果笔记本没home键,可以用组合键实现

tab标签选项卡选择
option+commad+左/右

右侧滚动条上下移动长文阅读:
control+option+上/下

查看正在运行插件
打开命令面板(Ctrl + Shift + P)并输入Show running extensions来查看所有你安装的正在运行的插件。

vscode删空行: ^\s*$\n

vscode 字符串尾加换行符:
option+command+F替换
正则:$
换成:\n

删除光标所在行尾多余空格:
command + K command + X

附:
左方向键是HOME
右方向键是END
上方向键是page up
下方向键是page down

来自:https://blog.csdn.net/d_lds/article/details/63683624
更多:https://www.2cto.com/kf/201904/804824.html
背景:在CentOS里修改错了,怎么办呢?于是用下面的方法实现了重新还原,再修改,这种情况修改后最后新开终端,否则发现错了再也进不去root后,无法修改,还好有这个办法可行。

通过 pkexec visudo 修改了 /etc/sudoers 文件,文件格式错误,结果无法使用 sudo,无法修改回去了,咋办?

在网上搜索半天,找到一个风骚的解决办法:

假设你是通过 ssh 连接服务器,那就创建两个连接会话。
在第一个会话中,使用这个命令获取进程 PID:
echo $$
在第二个会话中,用下面的命令启动授权代理:
pkttyagent --process [PID]
回到第一个会话,运行命令:
pkexec visudo
再回到第二个会话,输入当前用户的密码。
回到第一个会话,发现已经可以编辑 /etc/sudoers 了!!!
谁能告诉我这里的授权机制是什么?原文链接在这里:
https://askubuntu.com/a/1053617/297291
背景:发现Nginx启动时都会去创建/usr/lcoal/nginx/logs下面的文件,且越写越大,而能不能去掉或不写入日志,乃至放别的非nginx 的安装目录呢,说是不能,也有说能的。
禁用错误日志的语法是可以的,但是文档声明在读取配置之前使用默认日志文件。(这似乎是合理的,因为它会如何告诉你你的配置有错误)
mkdir /usr/local/nginx/logs/  #先让它启动起来,但是经过下面配置后不会再写入日志了。
nginx.conf里:
user www;                  
worker_processes 3;

worker_rlimit_nofile 51200;
error_log /dev/null crit;
http {
      access_log off;
}

结果:
du -sh /usr/local/nginx/logs/*
4.0K    /usr/local/nginx/logs/access.log
4.0K    /usr/local/nginx/logs/error.log

来自:https://cloud.tencent.com/developer/ask/54829


我在启动nginx时使用-p参数解决了这个问题,例如:

/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /data/logs/nginx
这将在配置中指定的任何日志路径前面加上前缀目录。

这个能指向别的目录,但是Nginx会加个 logs/error.log 这样的log,如:
/data/logs/nginx/logs/error.log

来自:https://cloud.tencent.com/developer/ask/54829
FreeBSD 上的成功步骤:


来自:https://mp.weixin.qq.com/s?__biz=MzU3NTgyODQ1Nw==&mid=2247486217&idx=1&sn=0bc9d610e69a32f0a8f230a554cd8489&chksm=fd1c738fca6bfa9994751642ed544f5a4db957ee58a816b57c10c3da2d26d5be5e108a27b322&scene=27#wechat_redirect


个人电脑macbook上部署:
source ~/.zshrc
source ~/.config/up/up.sh

/Users/jackXiang/.config/up.sh
对于SNAT这种转换,肯定是跨网段了,怎么个意思呢?
对于家里网想访问公网,肯定会把家里电脑的如:192.168.1.100转为申请的公网出口IP地址。
而对于武哥讲到的:

tcpdump -q -tttt  -nn 'tcp and dst 10.73.234.1** and dst port 8080' -P in -i eth0
参数解释:
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。

tcpdump -q -tttt  -nn 'tcp and dst 10.10.0.45 and dst port 9500' -P in -i enp0s3
Warning: -P switch is not compatible with the upstream version. You should use -Q instead.
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
2021-07-29 10:00:14.149878 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 0
2021-07-29 10:00:14.157827 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 0
2021-07-29 10:00:14.158114 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 522
2021-07-29 10:00:14.165897 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 0

10.10.2.1 指公网XX云VPN虚拟地址。

更多:SLB健康检测的IP和VIP不是同一个IP,且NAT模式VIP下在的机器访问自己的VIP肯定出现1/N的访问不到的情况,于是淘宝采用了FullNat模型,其本质是通过会话查表规避出现源和目的一样的情况。Tcpdump查检测IP方法:https://jackxiang.com/post/10128/

也就是说LVS的浮动IP向内转到里面的Jenkins某一台服务器时,其源IP和LVS浮动IP不一样且有可能是俩IP(主A备B),也就是同一台客户机发起请求,居然有可能是从A过来,也可能是从B过来,此时在Jenkins(10.73.234.180)配置的防火墙上面配置的IP可能只有A,而没有B,那么从B过来的包被拦截后,也就无法通过外包服务器触发里面的这台Jenkins进行部署代码,起码有一半的概率。
同理:对于GitLab里也出现类似问题,探测IP在探测后端机时,也是因为有俩IP,IPtable里面只写了一个,导致探测出现认为后端两机器都活着,在用户作SSH里连接Gitlab(10.73.234.179)时,出现LVS发现后端另一台也活着,Git Client在SSH 时会时而连接另外一台,在另一台日志出现被攻击的提示,且要修改/home/xiangdong/.ssh/known_hosts 的IP地址,因为另一个SNAT的IP过来连接了,会认为不安全,得删掉。



对于同一个SLB下的服务器N台访问自己的VIP,会出现1/N的的概率访问不通的解释:
S-->SLB-->D
16.1.1.1 -> 18.1.1.1->出现在SLB里访问的口当SLB的VIP向自己进行回包时,查路由表时,发现源地址一样,导致SLB不再转包,原因是源的目的地址都一样:
X@eth10 IP 18.1.1.1 > 18.1.1.1: S 4229408411:4229408411(0) win 64240 cmss  #这俩地址一样了于是不再转发,于是发的包没有回收到,于是出现业务上卡住了。



防火墙经过地址转换抓包详解:
https://blog.csdn.net/shiyuqi_blog/article/details/90230186
防火墙DNAT与SNAT详谈:
https://blog.51cto.com/luosea/1686022

R表示收到,X表示发出,R@eth1是从eth1口收到数据包。X@eth2是从2口发出数据包
16.1.1.1>18.1.1.2 表示IP 16.1.1.1发给IP 18.1.1.2
Seq后面的数是序列号 request和reply的号一致就是一个数据包

抓包过程详解:
防火墙eth1口收到16.1.1.1发给18.1.1.2的request数据包
接着从eth2口这个request数据包转发出去
然后防火墙eth2口收到18.1.1.2发给16.1.1.1的reply数据包
防火墙再从eth1口转发这个reply给16.1.1.1
---------------------
作者:一只认真的鱼
来源:CSDN
原文:https://blog.csdn.net/shiyuqi_blog/article/details/90230186
版权声明:本文为博主原创文章,转载请附上博文链接!



echo strrpos("jack.txt",".");
4

如果你有一个文件名,你需要从PHP中删除扩展名(extension),有很多方法可以做到这一点。这里有三种方法。


substr(strrchr($file, '.'), 1);

https://www.cnblogs.com/justdoityangbo/p/11113579.html

使用pathinfo()函数

pathinfo()函数返回一个包含dirname,basename,extension和filename的数组。或者,您可以传递一个PATHINFO_常量,并返回完整文件名的那一部分:

$filename ='filename.html';
$without_extension = pathinfo($filename, PATHINFO_FILENAME);
如果文件名包含完整路径,则仅返回不带扩展名的文件名。


使用basename()函数

如果扩展名是已知的并且对于所有文件名是相同的,则可以将第二个可选参数传递给basename()以告诉它从文件名中删除该扩展名:

$filename ='filename.html';
$without_extension = basename($filename,'.html');
如果文件名包含完整路径,则仅返回不带扩展名的文件名。

使用substr和strrpos

$filename ='filename.html';
$without_extension = substr($filename, 0, strrpos($filename, "."));
如果文件名包含完整路径,则返回没有扩展名的完整路径和文件名。您可以使用basename()来删除路径,例如:

basename(substr($filename, 0, strrpos($filename, ".")));
尽管它比使用pathinfo慢。

速度比较

使用PHP 5.4在Mac上以10,000,000次循环运行其中的每一个:

pathinfo:10.13秒
basename:7.87秒
substr / strrpos:6.05秒
basename(substr / strrpos):11.98秒
如果文件名不包含完整路径,或者如果它不重要,那么substr / strrpos选项似乎是最快的。

如果文件名包含路径并且您不想要路径但确实知道要删除的扩展名是什么,那么basename似乎是最快的。

如果文件名包含路径,则不需要路径,也不知道扩展名是什么,那么使用pathinfo()选项。

结论

还有很多其他方法可以做到这一点,有些可能会更快。在很多情况下,速度可能并不那么重要(运行pathinfo的10秒钟毕竟是10万次)。这篇文章的目的是展示一些用PHP从文件名中删除扩展名的方法。


来自:http://www.webkaka.com/tutorial/php/2019/050857/
分页: 10/272 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]