该软件是Mac下非常方便的Web调试工具与windows下的Fiddler一样,用过Fiddler的人应该都知道其功能对于web开发来说是多棒。 如果你不知道Fiddler可以看这里http://blog.thinkjs.net/archives/79

From:http://download.csdn.net/download/chuandeng99/4505164
一、记录CentOS 7与以往不同的地方
由于公司这一期的产品准备支持的环境有CentOS 7、MySql 5.6、Java 8、Tomcat 8等等,并且因为人员严重不足,我本月的开发任务在原有的基础上又加上了好多环境检证的工作。
  因为在这次环境检证过程中遇到了不少困难,特此记录一下。
  重点:记录CentOS 7与以往不同的地方
  1.取消ifconfig,使用ip addr 查看IP地址。  
  2.使用firewalld 取代 iptables。
  3.系统默认编码设置文件,由/etc/sysconfig/i18n  更改为 /etc/locale.conf
___________________________详细介绍使用感受__________________________
因为系统安装时网络连接设置的自动获取,先改成静态ip。配置方法如下:
  第一步,vi /etc/sysconfig/network-scripts/ifcfg-enp0s25;
  设置内容:
  
  解释:  
IPADDR0 --> ip
GATEWAY0 --> 网关
DNS1 -->DNS
  
  第二步,重启网络服务 -->service network restart(特别重要,千万不要忘记。)
  第三步.查看ip ip addr,再 ping 一下网络。这是网络配置基本就完成了。
  事情进展到这里貌似也没什么难过的坎,我开始配置防火墙。先使用 iptables status 查看防火墙状态,
  
  我去,什么鬼?我敲错了?有一次仔细核对了每一个字母,完全没错啊!!!不管怎么说,先看一下iptables脚本是否还存在吧。
  
  咦,iptables脚本不见了。不用多想一定是CentOS 7使用了新型的防火墙,立即百度。
  ※度娘解惑:CentOS 7使用firewalld 取代 iptables。使用命令行工具firewalld-cmd获取firewalld状态,$ firwall-cmd --state。
摘自:http://www.linuxidc.com/Linux/2015-01/111998.htm

————————————————————————————————————————————————————————————
二、修改开机启动顺序:
http://wenku.baidu.com/link?url=HXBiVyBOB_p1oAEN0Wunreof9Fff9dy4s6abRC_Zqq6Cm1ZbOvmgXrcQ3kC3OTLmDq-FwrjeK-Fw9zgoZ3yBGGyA_ikGSRtjvhjcS_dEaQu

————————————————————————————————————————————————————————————
三、 CentOS 7 巨大变动之 systemd 取代 SysV的Init
systemd是什么
首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序。
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
(1)以Ubuntu为代表的Linux发行版采用upstart。
(2)以7.0版本之前的CentOS为代表的System V init。
(3)CentOS7.0版本的systemd。
下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。
CentOS6.5采用的是systemV init
CentOS7 采用的是systemd:
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
(1)以Ubuntu为代表的Linux发行版采用upstart。
(2)以7.0版本之前的CentOS为代表的System V init。
(3)CentOS7.0版本的systemd。
下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。
CentOS6.5采用的是systemV init
CentOS7 采用的是systemd

摘自:http://blog.csdn.net/smstong/article/details/39317491

参考:https://blog.linuxeye.com/400.html
背景:多进程时用管道进行子进程间或子进程于线程之间通讯,出现父进程已经双close后还是出现了当有请求来时,子进程写入处理线程时管道阻塞住了,怎么办,管道调试试试看了,学习备忘下。

1)管道的调试
阅读全文
问题:
这个是一个进程,并且21263是21326的父进程,如果我知道某个子进程的ID号,如何找到他的父进程是哪个?
prod 21326 21263   0 02:04:41 ?           0:00 /p05/product/oracle10g/iAS/bin/httpd -d /p05/
最好是用:ps -ef --forest
-l,l long          u  user-oriented   --sort --tty --forest --version

\_ sshd: xiangdong [priv]
|   \_ sshd: xiangdong@pts/7,pts/17,pts/10,pts/14,pts/15
|       \_ -bash
|       |   \_ su -
|       |       \_ -bash
|       \_ -bash
|       |   \_ su -
|       |       \_ -bash
|       \_ -bash
|       |   \_ su -
|       |       \_ -bash
|       |           \_ ps aux --forest
|       \_ -bash
|       |   \_ su -
|       |       \_ -bash
|       \_ -bash
|           \_ su -
|               \_ -bash
|                   \_ [httpmut: master process] H?????5?"


如nginx和php-fpm:
root     32550     1  0  2014 ?        00:00:00 nginx: master process ../sbin/nginx
www        730 32550  0 Jan26 ?        00:00:01  \_ nginx: worker process
www        731 32550  0 Jan26 ?        00:00:00  \_ nginx: worker process
www        732 32550  0 Jan26 ?        00:00:01  \_ nginx: worker process

root      6482     1  0  2014 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)              
www       6483  6482  0  2014 ?        00:05:20  \_ php-fpm: pool www                                                      
www       6484  6482  0  2014 ?        00:05:26  \_ php-fpm: pool www                                                      
和ps aux|grep nginx一样的结果。

——————————————————————————————————————————————————

方法一:
lsof好像可以:


方法二:
ps -ef|awk '$2 ~ /pid/{print $2}'
pid :子进程ID
ps -ef|awk '$2 ~ /10555/{print $2}'

方法三:
ps -ef --forest
www      10555     1  0 15:08 pts/6    00:00:00 [httpmut: worker process] H????

摘处:http://bbs.chinaunix.net/thread-1810739-1-1.html
背景:sqllite这个小小的sql数据库,性能不错,尤其在Linux上的一些散型业务,完全可以用它,小巧、高效、无端口、单文件。
     最新发布的SQLite 3.8.7 alpha版(下载页面http://www.sqlite.org/download.html)比16个月前发布的3.7.17版快50%。这也就是说,在相同数量的CPU指令周期里,最新版的SQLite能多做50%的工作。

性能提升的幅度要比我们进行改进时预想的结果漂亮的多。我们在不断的寻找新的方法来执行查询语句操作,并把优秀的方法新增到查询引擎中。比如,在前一版中,我用新的方法改进了IN操作,新方法要比老方法速度快5倍,这个消息我们曾在邮件列表里公布过。

这50%的提升,并不是我们有了更好的查询策略。这50%是指我们在磁盘上移动字节的速度和b-trees搜索效率。我们进行成百上千的微优化后才获得了这样的成果。这每个微优化都能让性能提升一点,比如0.05%。如果我们能一次提升0.25%,这将被认为是一次巨大的成功。所有的这些优化中现实系统中都是无法测量到的,但我们不断的积累,较少成多。

最近的一次更新后我们又有了10%的提升。我们做了很多的修改。所有的测试都通过了,我们有100%的测试覆盖率,所以,我们相信,里面不会有太多的bug。但是,你们的试用是我们质量提升的重要一部分。请下载最新的alpha版试用,让我们知道你遇到的问题。谢谢。
找到一个进程正在使用的所有文件,比如日志
比如找叫ttserver的进程使用的文件
查看id
pidof ttserver
ls -la /proc/`pidof ttserver`/fd/



---------------------例子--------------------


来自:http://haoningabc.iteye.com/blog/1122862

如查mysql打开了哪些文件:
ps aux|grep mysql
PID: 3005
ls  -la  /proc/3005/fd/

Nginx:
ps aux|grep nginx
PID:  10906
查看它打开了哪些文件:
ls  -la  /proc/10906/fd/
l-wx------ 1 root root 64 1月  23 21:49 35 -> /usr/local/nginx/logs/access.log
l-wx------ 1 root root 64 1月  23 21:49 4 -> /usr/local/nginx/logs/error.log
l-wx------ 1 root root 64 1月  23 21:49 6 -> /data/logs/nginx/access_svn_boosh.log
l-wx------ 1 root root 64 1月  23 21:49 7 -> /data/logs/nginx/access_jiayuanmeng.log
背景:自己的虚拟机突然起不来了,ip没了,vmware的DHCP服务NAT服务在windows上都在,后来发现还是自己的windows下的vmware的dhcp没有启动起来,启动后好了。

问题描述:虚拟机使用wget命令上网,执行service network restart后出现如下错误

Determining IP information for eth0...failed

解决办法:

step1:修改/etc/sysconfig/network-scripts/ifcfg-eth0   BOOTROTO=dhcp

step2:向如下三个文件中添加如下代码



(1)/etc/sysconfig/network-scripts/ifcfg-eth0    
(2)/etc/sysconfig/networking/devices/ifcfg-eth0  
(3)/etc/sysconfig/networking/profiles/default/ifcfg-eth0
step3:设置PC为自动获取DNS,(也有其他方法)

step4:设置虚拟机自动获取ip

step5:重启系统!(注意:有时候执行service network restart等命令还是无用的)

摘自:http://blog.csdn.net/weiqing1981127/article/details/17955843
背景: 有的时候可能有网络访问链路异动也会导致我们的系统出现访问超时,延迟等情况。因为检测查看到达服务器的网络路由也是很有必要的。记的有一次国外系统访问国内服务器接口,由于机房运营商调整了网络链路,导致丢包严重,影响到系统的服务质量。
     mtr(my traceroute)命令相比ping和tracert及traceroute相比更加强大,而且以友好的格式化文本的形式方便我们查看到达任何一个网络节点或服务器的网络路由路径。

一个集合ping和traceroute功能并能直观显示结果的网络管理工具mtr;
官网地址
http://www.BitWizard.nl/mtr
下载地址
ftp://ftp.bitwizard.nl/mtr/
CentOS和Redhat可使用yum安装,一般系统默认已安装该工具;

实例: 查看本地服务器到baidu.com的路由路径情况:

mtr www.baidu.com


丢包率:Loss,已发送的包数:Snt,最后一个包的延时:Last,平均延时:Avg,最低延时:Best,最差延时:Wrst,方差(稳定性):StDev

local200-65.boyaa.com             Snt: 3     Loss%  Last   Avg  Best  Wrst StDev
192.168.200.1                                 0.0%   4.5   5.0   4.3   6.3   1.1
???                                          100.0   0.0   0.0   0.0   0.0   0.0
???                                          100.0   0.0   0.0   0.0   0.0   0.0
121.15.179.105                                0.0%   7.6   4.5   2.8   7.6   2.7
58.60.24.57                                  33.3%   2.6   3.9   2.6   5.1   1.7
119.145.45.245                                0.0%   2.1  10.2   1.8  26.8  14.3
202.97.64.61                                  0.0%  25.1  26.0  24.5  28.5   2.2
202.102.73.98                                 0.0%  33.1  31.2  28.7  33.1   2.3
???                                          100.0   0.0   0.0   0.0   0.0   0.0
180.97.32.10                                  0.0%  25.5  29.6  25.5  34.8   4.7
???                                          100.0   0.0   0.0   0.0   0.0   0.0
180.97.33.107                                 0.0%  24.4  25.4  24.4  27.5   1.8


摘自:http://blog.csdn.net/fableboy/article/details/38566635
参考:http://blog.sina.com.cn/s/blog_4d8a2c970100fy1x.html

mtr(a network diagnostic tool)是一个神奇的指令,能按要求对路由中所有节点进行批量测试。简单敲一个“mtr qq.com”将会有意外收获!

当需要进行产品级的网络测试时,可在服务器上运行一段时间的mtr测试形成报告。如下脚本:


脚本会对网址列表进行1万次遍历,打印每次的丢包率和平均延时时间。网址可以随意添加,生成csv文件用Excel处理生成图表。希望对你也有用!

来自:http://www.51testing.com/html/28/116228-808230.html
问题:
ping某台机器时,偶尔返回慢,如何检测到这块网络波动能认人直观看到?免得有人说网络没有问题。
建议用脚本做,不要用c实现:
ping -w 1 -c 1 $2>/dev/null
//调用ping函数,-w为超时时间;-c为ping的次数;
ping -w 1 -c 1 $2
从脚本所在机去ping之后pingcmd函数的第二个参数(本例为之后建立的serve1-7),超时1秒,执行1次

[root@emulMachine ping]# ping -c 2  baidu.com  
PING baidu.com (220.181.57.216) 56(84) bytes of data.
64 bytes from 220.181.57.216: icmp_seq=1 ttl=52 time=19.7 ms
64 bytes from 220.181.57.216: icmp_seq=2 ttl=52 time=2.52 ms

--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 2.520/11.141/19.763/8.622 ms
LINUX系统ping命令完整实现(带路由追踪参数):

http://download.csdn.net/download/sjgtongji/4421406

Windows:
ping -n 100 -r 9 -w 1000 10.70.56.88(发送100个数据包,最多记录9个路由,1000毫秒也就是1秒。)
C:\Users\admin>ping -n 100 -r 9 -w 1000 baidu.com   (发送100个数据包,最多记录9个路由,1000毫秒也就是1秒。)

正在 Ping baidu.com [123.125.114.144] 具有 32 字节的数据:
来自 123.125.114.144 的回复: 字节=32 时间=17ms TTL=56
    路由: 172.21.3.1 ->
           202.108.16.69 ->
           61.49.42.130 ->
           202.106.229.58 ->
           202.106.229.57 ->
           202.106.227.10 ->
           10.23.190.129 ->
           10.23.190.97 ->
           10.23.190.138
来自 123.125.114.144 的回复: 字节=32 时间=14ms TTL=56
    路由: 172.21.3.1 ->
           202.108.16.69 ->
           61.49.42.130 ->
           61.148.143.22 ->
           61.148.143.21 ->
           61.49.168.89 ->
           10.23.190.129 ->
           10.23.190.97 ->
           10.23.190.138
Linux:
ping -c 9  -w 1000 10.70.56.88 (发送9个数据包,最多记录9个路由,1000毫秒也就是1秒。)
[root@emulMachine vhost]# ping -c 9  -w 1000 10.70.56.88      
PING 10.70.56.88 (10.70.56.88) 56(84) bytes of data.
64 bytes from 10.70.56.88: icmp_seq=1 ttl=61 time=0.570 ms
64 bytes from 10.70.56.88: icmp_seq=2 ttl=61 time=0.545 ms
64 bytes from 10.70.56.88: icmp_seq=3 ttl=61 time=0.533 ms
64 bytes from 10.70.56.88: icmp_seq=4 ttl=61 time=0.545 ms
64 bytes from 10.70.56.88: icmp_seq=5 ttl=61 time=0.541 ms
64 bytes from 10.70.56.88: icmp_seq=6 ttl=61 time=0.552 ms
64 bytes from 10.70.56.88: icmp_seq=7 ttl=61 time=0.557 ms
64 bytes from 10.70.56.88: icmp_seq=8 ttl=61 time=0.558 ms
64 bytes from 10.70.56.88: icmp_seq=9 ttl=61 time=0.559 ms
____________________________________________________________________________________________________
C:\Users\admin>ping --help
Windows参数:
-n count       要发送的回显请求数。
-r count       记录计数跃点的路由(仅适用于 IPv4)。
-w timeout     等待每次回复的超时时间(毫秒)。

Linux下参数:
ping --help
[-w deadline]  :等待每次回复的超时时间(毫秒)。
[-c count]       :ping 多少次如:-c 2:表示ping两次。
linux下的ping没有像windows下的ping有一个-r的路由:
只能linux下用traceroute,windows下用:tracert baidu.com。
Linux下有一个mtr, mtr baidu.com icmp 这玩意不错可以试试不错,有丢包率。
____________________________________________________________________________________________________
Centos下的-w和-c测试如下:
[root@emulMachine ping]# ping -c 6 -w 1 baidu.com
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144: icmp_seq=1 ttl=52 time=29.9 ms

--- baidu.com ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1000ms
rtt min/avg/max/mdev = 29.930/29.930/29.930/0.000 ms
[root@emulMachine ping]# ping -c 6 -w 10 baidu.com
PING baidu.com (220.181.57.217) 56(84) bytes of data.
64 bytes from 220.181.57.217: icmp_seq=1 ttl=51 time=1.69 ms
64 bytes from 220.181.57.217: icmp_seq=2 ttl=51 time=80.2 ms
64 bytes from 220.181.57.217: icmp_seq=3 ttl=51 time=1.75 ms
64 bytes from 220.181.57.217: icmp_seq=4 ttl=51 time=1.90 ms
64 bytes from 220.181.57.217: icmp_seq=5 ttl=51 time=2.09 ms
64 bytes from 220.181.57.217: icmp_seq=6 ttl=51 time=1.62 ms

--- baidu.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5004ms
rtt min/avg/max/mdev = 1.622/14.889/80.268/29.238 ms


——————————————————————————————————————————————————————
给个ping 的-w:timeout详解
其实在命令提示符的帮助中已经说明了,
-w timeout     Timeout in milliseconds to wait for each reply.
意思是,按毫秒记每一个应答的超时时间。1000毫秒=1秒
假如,我的网络很差,延迟很大,我ping www.baidu.com,如果我将超时时间设置很短如10毫秒,那么如果发出一个数据包10毫秒内没有收到应答包的话,就给出请求超时的提示。但是如果我将超时时间设置为100000毫秒,就是100秒。那么我就有可能收到类似应答信息
Reply from 61.135.169.105: bytes=32 time=2952ms TTL=47
可以看到time是2952毫秒就是2秒钟,说明网络很差。如果你将超时时间设置为10毫秒,都可以收到应答信息,那么你的网络就非常好。
ping www.baidu.com -w 1000 是使用的方式

来自:http://zhidao.baidu.com/link?url=HjOEnYDQX6WLcfOJibiBLTO7hb66DEEtrtCwJPH7SDRBzu76Lkc_4EjIzqeWmgGrFYeO9NNQ9THl-EaDEk6Ujq

ping -r 的用法?
ping-r count Record route for count hops.
在“记录路由”字段中记录传出和返回数据包的路由。

在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由,如果想探测更多,可以通过其他命令实现,我将在以后的文章中给大家讲解。以下为示例:

C:\>ping -n 1 -r 9 202.96.105.101 (发送一个数据包,最多记录9个路由)

Pinging 202.96.105.101 with 32 bytes of data:

Reply from 202.96.105.101: bytes=32 time=10ms TTL=249
Route: 202.107.208.187 ->
202.107.210.214 ->
61.153.112.70 ->
61.153.112.89 ->
202.96.105.149 ->
202.96.105.97 ->
202.96.105.101 ->
202.96.105.150 ->
61.153.112.90

Ping statistics for 202.96.105.101:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 10ms, Average = 10ms

从上面我就可以知道从我的计算机到202.96.105.101一共通过了202.107.208.187 ,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97这几个路由。
来自:http://zhidao.baidu.com/link?url=PI0CZGLokQxxVEGzbrH_FrxRlAaI-vc3AzzX-Ta8K-fQFZmhF3oIcLd94poNvOONL4hI7iQRH6UTE9T6PWaViq

阅读全文
PHP-FPM的单进程单线程模型,用ps 命令,-L参数显示进程,并尽量显示其LWP(线程ID)和NLWP(线程的个数),如下:
[root@rh08 none]# ps -eLf | grep php-fpm
www      39154 22867 39154  2    1 10:38 ?        00:00:01 php-fpm: pool www                                                                                                            
www      39155 22867 39155  2    1 10:38 ?        00:00:01 php-fpm: pool www                                                                                                            
www      39156 22867 39156  2    1 10:38 ?        00:00:01 php-fpm: pool www                                                                                                            
www      39157 22867 39157  2    1 10:38 ?        00:00:01 php-fpm: pool www                                                                                                            
www      39158 22867 39158  2    1 10:38 ?        00:00:01 php-fpm: pool www
上面命令查询结果的第二列为PID,第三列为PPID,第四列为LWP,第六列为NLWP。

ps命令还可以查看线程在哪个CPU上运行:
[root@rh08 none]# ps -eo ruser,pid,ppid,lwp,psr,args -L | grep php
root     22867     1 22867   1 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)                                                                    
www      38929 22867 38929   0 php-fpm: pool www                                                                                                            
www      38930 22867 38930   0 php-fpm: pool www                                                                                                            
www      38934 22867 38934   0 php-fpm: pool www                                                                                                            
www      38935 22867 38935   0 php-fpm: pool www                                                                                                            
www      38936 22867 38936   0 php-fpm: pool www                                                                                                            
www      38937 22867 38937   1 php-fpm: pool www    
From:http://smilejay.com/2012/06/linux_view_threads/

Htop:
yum install htop  
Installed:
  htop.x86_64 0:1.0.3-1.el6
Display Options ,[V]Tree view  [V]show custom thread name ,勾选是空格键盘,上下键移动菜单条目,OK后,按<F10>退出设置,左斜杠搜索F2也是搜索,F3是Next,ESC推出。
一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。
要在htop中启用线程查看,请开启htop,然后按<F2>来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按<F10>退出设置。
From: http://www.codeceo.com/article/linux-find-thread.html

0.最常用 pstree:
[root@iZ25dcp92ckZ temp]# pstree -a|grep multe
  |       |   `-multepoolser
  |       |       `-multepoolser
  |       |           `-2*[{multepoolser}]

1. > top

可以显示所有系统进程

按u, 再输入相应的执行用户名称,比如Tom

可以看到Tom用户启动的所有进程和对应的pid

2. > pstack pid

可以看到此pid下,各线程的运行状态、

[root@test multepoolserver]# pstack  14944  (进程的PID号)
Thread 2 (Thread 0x41ed5940 (LWP 14945)):
#0  0x0000003c9ae0d5cb in read () from /lib64/libpthread.so.0
#1  0x00000000004017b6 in sync_additional_writing_worker ()
#2  0x0000003c9ae064a7 in start_thread () from /lib64/libpthread.so.0
#3  0x0000003c9a2d3c2d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x2b24b3094250 (LWP 14944)):
#0  0x0000003c9a2d4018 in epoll_wait () from /lib64/libc.so.6
#1  0x0000000000401d59 in Process ()
#2  0x00000000004029b8 in main ()

来自:http://blog.csdn.net/wind_324/article/details/6152912

方法一:
ps -ef f
用树形显示进程和线程
在Linux下面好像因为没有真正的线程,是用进程模拟的,有一个是辅助线程,所以真正程序开的线程应该只有一个。

方法二:
[root@apache dhj]# ps axm|grep httpd

方法三:
另外用pstree -c也可以达到相同的效果,但是没有线程号:
[root@apache dhj]# pstree -c|grep httpd

来自:http://blog.chinaunix.net/uid-346158-id-2131012.html
阅读全文
背景:Linux下的硬件有很多,如何看网卡是啥样的,声卡是啥样的有几个USB口及品牌。


该命令作用:将lspci的输出当做输入,从中找出包含Eth的行。在我的Fedora机器上运行结果为

[root@localhost etc]# lspci | grep Eth
00:04.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 PCI Fast Ethernet (rev 91)

lspci命令解说:该命令能列出机器中的PCI设备信息,如声卡,显卡,Modem,网卡等信息,主板集成设备的信息也能列出来,lspci读取的是hwdata数据库。

| 管道命令,之前的输出作为之后的输入

grep grep命令后设置指定过滤的字符串,任何没有包括指定字符串的行都不会显示。

来自:http://www.cnblogs.com/xiandedanteng/archive/2013/08/23/3277746.html
背景:当你在做一些多进程调试时,会出现一个问题,那就是子进程往往不太好调试,怎么办?如果子进程一直在while里飞快的运行着怎么办,这篇文章就是教会你进行双gdb调试,以实现了子进程的调试,这儿在没有调试时,其子进程是不断的打印,当然最好在while里加一个sleep,但第二个gdb进入后则会存在第一个gdb的打印变慢了,此时,可以在第二个gdb里打印相关变量,达到对子进程的调试目的,特别注意的是,第二个gdb一定要在那个子进程的行里break(这儿是31行)进行调试,而不是放在其它地方,否则是没法调试到子进程的。第三个是:进程中断点.然后用c(这里要用continue,因为attach的进程已经在运行了,不能用run)。最后,子进程死了父亲进程拉起,crack这块可能是return退出了,自己打印是crack,导致并不是真正的crack了,也就不是coredump了,特别注意这个问题。
     当你在程序中使用fork(),如果用gdb来调试.不管是你在子进程是否设置断点.你都只能在父进程单步调试,而没办法进入到子进程当中进行单步调试.因为gdb的所有处理(查看堆栈,内存,变量值)都是针对当前进程空间.

那么是否就没办法调试多进程程序的子进程代码呢?办法还是有的,一般的标准方法是再打开一个gdb用attach功能来调试子进程gdb attach 功能是不执行被调试程序,而是把gdb“挂”到一个已经运行的进程之上来进行调试,这挂载的动作称为attach.当然也包括挂载子进程。

注意两点:
0.当主gdb进来后进行断点后,子进程尽管断点了,但依然运行(为第二个gdb作暂停准备之用),而当第二个gdb对子进程进行attach后,其主gdb的子进程的打印动作也就暂停(为方便调试,可以在进程启动后,设定sleep一段时间,如30s,其实只要第二个gdb一attach到子进程,子进程就柱塞了。),此时子gdb再进行设置断点,按c运行,按n作next就行。
1.子进程的主gdb点和第二个gdb的break点要同一行?不必要,其主gdb只是起到在第二个gdb单独调该进程时起到暂停其主的子进程的作用罢了。
2.在子进程的gdb里,要用c来继续,(这里要用continue,因为attach的进程已经在运行了,不能用run!(也就是:主进程用r(先运行着,主进程不退出。),子进程用c,继续在原来那个停下来的点继续运行到后,再用n命令,即next一步一步查问题,n(next):显示的是即将运行这一行,也就是还没有运行。)
3.gdb调试epoll时遇到的Interrupted system call:
signal(SIGALRM,timer_handle);
最近写了个多线程数据处理的程序,其中用到sem_wait()在信号量为0的时候挂起程序. 程序全速执行的时候没有任何问题,但gdb单步调试的时候,因执行sem_wait()函数而挂起的线程经常出现Interrupted system call,不能正常执行.
    原因在于,gdb单步调试的时候会在断点处插入一条中断指令,当程序执行到该断点处的时候会发送一个SIGTRAP信号,程序转去执行中断相应,进而gdb让程序停下来进行调试. 对于sem_wait\wait\read等会阻塞的函数在调试时,如果阻塞,都可能会收到调试器发送的信号,而返回非0值.
    为了解决这个问题需要在代码中忽略由于接收调试信号而产生的"错误"返回:


到一篇文章《gdb常用命令及使用gdb调试多进程多线程程序》:http://www.cnblogs.com/33debug/p/7043437.html ,代码编译无法通过,代码调整如下,gdb_pthread.c:



关于GDB无法调试epoll的疑问?
这种交互式的网络程序最好不用gdb来调?
调试网络通讯程序最好别用GDB,epoll你可以用strace,gdb是用来调试 C数据结构逻辑之类的。
打日志是我的首选调试方法,如果程序崩溃就看core 文件,如果死锁就 attach上去,其他的错误我从不用GDB
不是epoll和gdb的问题,而是在gdb下epoll_wait 信号处理和正常运行有差异造成的,应该是这个。
摘自:http://bbs.chinaunix.net/thread-1551201-1-1.html

多进程调试如下所述即可,如下,特别是新的linux内核版本能支持到多进程了,相当好用:
在2.5.60版Linux内核及以后,GDB对使用fork/vfork创建子进程的程序提供了follow-fork-mode选项来支持多进程调试。
follow-fork-mode的用法为:
set follow-fork-mode [parent|child]
parent: fork之后继续调试父进程,子进程不受影响。
child: fork之后调试子进程,父进程不受影响。
因此如果需要调试子进程,在启动gdb后:
(gdb) set follow-fork-mode child

这块可以研究一下,新的内核及新的gdb有新功能很方便使用:
set follow-fork-mode child
//set detach-on-fork on //gdb控制父子进程,不让调试了: Can't attach LWP 24731: Operation not permitted,得打开:ON。
b 146 //main里的子进程行
b 192  //子进程调用的函数原型行
r //执行到子进程断点处
n //子进程单步执行

实践心得:一般情况下多线程的时候,由于是同时运行的,最好设置 set scheduler-locking on 这样的话,只调试当前线程 。
off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。
vi bp.list

gdb.sh

(一)这块在调试epoll时,在n单步执行卡后(c执行前先断点),得通过浏览器模拟socket请求才能过得去,否则会一直卡那儿,如下:


这块如果continue后,中间因为断点就一次是没法下次进入的,需要引入gdb判断(if {expression} else end条件判断语句, if 后面所带的表达式为一般的GDB表达式:http://blog.csdn.net/horkychen/article/details/9372039)及观察点,才能更加深入了解,下面是试图没有断点运行起来后实现ctrl+C退出,想继续n的尝试:
(二)再就是对c后一直卡那儿,可以按ctrl+C退出( SIGINT   :来自键盘的中断信号 ( ctrl + c ) .),SIGTERM:kill 命令发出 的信号.,继续n执行:
Program received signal SIGINT, Interrupt.
0x0000003c9a2d3fd3 in __epoll_wait_nocancel () from /lib64/libc.so.6
(gdb) n
Single stepping until exit from function __epoll_wait_nocancel,
which has no line number information.

这块不知怎么回事....需要进一步学习了解。

Process(listenFd); //运行至工作子进程的函数,;b 192进行单步执行。


学习参考:
http://blog.csdn.net/nyist327/article/details/40040011
http://blog.sina.cn/dpool/blog/s/blog_55d572ca0100v8e8.html

修改如下:


主gdb:
(gdb) b 167
Breakpoint 1 at 0x4025a1: file multipepollserver.cpp, line 167.
(gdb) b 147
Breakpoint 2 at 0x40250f: file multipepollserver.cpp, line 147.
(gdb) r
Starting program: /home/xiangdong/multepoolserver/multipepollserver
[Thread debugging using libthread_db enabled]
Detaching after fork from child process 27539.
[New Thread 0x2afb66031230 (LWP 27536)]

Breakpoint 1, main (argc=1, argv=0x7fff550003c8, envp=0x7fff550003d8) at multipepollserver.cpp:168
168    

辅助gdb:
(gdb) b 147
Breakpoint 1 at 0x40250f: file multipepollserver.cpp, line 147.
(gdb) c
Continuing.
n

以上代码来自,也就是上面的程序调试的整个代码放在:http://jackxiang.com/post/6937/  ,不完善进一步学习中。

来自:
    http://blog.sina.com.cn/s/blog_5cec1e1d0100guwf.html
    http://blog.csdn.net/qiaoliang328/article/details/7404032
    http://bbs.csdn.net/topics/380004392
首先我们看一个如下简单的多进程程序。
阅读全文
背景:配置仓库结合svn版本控制工具
saltstack的安装使用
centos6.3_x86_64
安装EPEL第三方软件源
wget -c http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
安装
yum install salt-master -y  //master
yum install salt-minion     //clients
chkconfig --list|grep salt   //master默认监听两个端口, 4505(publish_port)为salt的消息发布系统,4506(ret_port)为salt客户端与服务端通信的端口,所以确保客户端能跟服务端的这2个端口通信
salt-master     0:off   1:off   2:off   3:on    4:on    5:on    6:off
salt-syndic     0:off   1:off   2:off   3:on    4:on    5:on    6:off
chkconfig --list|grep salt   //clients   没有端口,只有进程
salt-minion     0:off   1:off   2:off   3:on    4:on    5:on    6:off
配置
/etc/init.d/salt-master start  //master直接启动,若也要作为clients,install salt-minino,修改master和id
vi /etc/salt/minion    //clients
master: 192.168.2.18   //冒号后面有空格
/etc/init.d/salt-minion start  
认证
salt-key -L //all list 详细可salt-key --help
实时管理
salt "localhost.localdomain" cmd.run "df -Th"
localhost.localdomain:
    Filesystem    Type    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root
                  ext4     19G  6.5G   11G  38% /
    tmpfs        tmpfs    244M     0  244M   0% /dev/shm
    /dev/sda1     ext4    485M   40M  420M   9% /boot
群发
salt "*" cmd.run "ls -al /opt/io.sh"
localhost.localdomain:
    -rwxr-xr-x 1 root root 396 Jun  8 18:22 /opt/io.sh
过滤匹配
salt '192.168.*' cmd.run 'echo hi'  
正常我们每台主机的HOSTS都是这样
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
为了区分开来并且MASTER也作为客户端
vi /etc/salt/minion
39 id: 192.168.2.18  //或者修改为自定义名称 比如 id: salt-master,修改id后客户端必须重启,salt-keys -L 才能认得到 然后加入-a 如果修改过ID,最好把旧的删掉 -d
salt-key -D      //删除所有KEY
salt-key -d key  //删除单个key
salt-key -A      //接受所有KEY
salt-key -a key  //接受单个key
[root@server1 salt]# salt-key -L
Accepted Keys:
Unaccepted Keys:
192.168.2.18
192.168.2.19
Rejected Keys:
[root@server1 salt]# salt-key -a 192.168.2.18
Key for minion 192.168.2.18 accepted.
[root@server1 salt]# salt-key -a 192.168.2.19
Key for minion 192.168.2.19 accepted.
[root@server1 salt]# salt-key -L
Accepted Keys:
192.168.2.18
192.168.2.19
Unaccepted Keys:
Rejected Keys:
测试服务端和客户端通讯
salt "192.168.2.19" test.ping     //单引号也可以
192.168.2.19:
    True
salt "*" salt.modules.disk    //salt.modules.disk  模块

服务端:
vi /etc/salt/master
nodegroups:
    mytest1: 'S@192.168.2.0/24'    
salt -N mytest1 test.ping
192.168.2.18:
    True
client1_2.19:
    True
KEYS名字  nodegroups:
    test1: 'L@192.168.2.18,client1_2.19' //多个
    test2: 'client1_2.19'   //单个

来自:http://www.2cto.com/os/201308/238485.html
背景:共享库,主版本升级,即接口发生变化。
Makefile有一句:
DYLIB_MAKE_CMD=$(CC) -shared -Wl,-soname,$(DYLIB_MINOR_NAME) -o $(DYLIBNAME) $(LDFLAGS)
编译下看看输出:
[hiredis]# make clean
rm -rf libhiredis.so libhiredis.a hiredis-test examples/hiredis-example* *.o *.gcda *.gcno *.gcov
[hiredis]# make
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  hiredis.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  sds.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  async.c
cc -shared -Wl,-soname,libhiredis.so.0.11 -o libhiredis.so  net.o hiredis.o sds.o async.o
静态编译:
ar rcs libhiredis.a net.o hiredis.o sds.o async.o
一)这个/home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/hiredis 目录下面也并没有:
ls libhiredis.so.0.11
ls: cannot access libhiredis.so.0.11: No such file or directory
readelf -d libhiredis.so
静态就是纯静态的:
ldd libhiredis.a
ldd: warning: you do not have execution permission for `./libhiredis.a'
        not a dynamic executable

Dynamic section at offset 0xa7f0 contains 21 entries:
  Tag        Type                         Name/Value
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
0x000000000000000e (SONAME)             Library soname: [libhiredis.so.0.11]   <===就是这个就是-soname,libhiredis.so.0.11编译进去的。

二)Nginx启动后,并找不到这个:
ldd /usr/local/nginx/sbin/nginx
        libhiredis.so.0.11 => not found
Starting nginx: /usr/local/nginx/sbin/nginx: error while loading shared libraries: libhiredis.so.0.11: cannot open shared object file: No such file or directory

=============================================================================================


怎么样实现把共享库的soname 提取出来,写在自己的共享库的头文件里面?
第二个是动态库的soname( Short for shared object name),依赖该shared library的应用程序中记录了它的soname,所以应用程序加载该shared library的时候,其寻找共享库用的soname文件名。其格式为

                           lib + math+.so + ( major version number)

它是一个指向名字为real name的shared library的软链接。

  当升级主版本时,共享库的soname 就会加1.比如libhello.so.0.0.0 变为 libhello.so.1.0.0. 这时候再运行ldconfig 文件,就会发现生成两个连接 文件。
    ln -s libhello.so.0---->libhello.so.0.0.0
    ln -s libhello.so.1----->libhello.so.1.0.0
尽管共享库升级,但是你的程序依旧用的是旧的共享库,并且两个之间不会相互影响。

    问题是如果更新的共享库只是增加一些接口,并没有修改已有的接口,也就是向前兼容。但是这时候它的主版本号却增加1. 如果你的应用程序想调用新的共享库,该怎么办? 简单,只要手工把soname 文件修改,使其指向新的版本就可以。(这时候ldconfig 文件不会帮你做这样的事,因为这时候soname 和real name 的版本号主板本号不一致,只能手动修改)。
  比如: ln -s libhello.so.0 ---> libhello.so.1.0.0
  但是有时候,主版本号增加,接口发生变化,可能向前不兼容。这时候再这样子修改,就会报错,“xx”方法找不到之类的错误。

这就是接下来要介绍的第三个共享库的名字,link name,顾名思义,就是在编译过程,link 阶段用的文件名。 其将soname 和real name 关联起来。
第三个名字,共享库的连接名(link name),是专门为build 阶段连接而用的名字。这个名字就是lib + math +.so ,比如libmath.so。其是不带任何版本信息的。在共享库编译过程中,连接(link) 阶段,编译器将生成一个共享库及real name,同时将共享库的soname,写在共享库文件里的文件头里面。可以用命令 readelf -d sharelibrary 去查看。

在应用程序引用共享库时,其会用到共享库的link name。在应用程序的link阶段,其通过link名字找到动态库,并且把共享库的soname 提取出来,写在自己的共享库的头文件里面。当应用程序加载时就会通过soname 去给定的路径下寻找该共享库。
参考:
http://blog.163.com/kefeng_1984/blog/static/166615272014714114141296/
http://blog.chinaunix.net/uid-23592843-id-223539.html

阅读全文
SQLite3是一个极轻型的独立的无服务器的SQL数据库引擎。

你不需要做任何的配置来使其工作。所有你需要的就是安装它并开始使用它。

既然是无服务器的,它被用在很多你所使用的著名的软件中,甚至你可能并不知道那些软件正在使用它。看看下面的例子所有的大公司正在使用SQLiete.PUP编程语言内嵌了SQLite数据库于其中。

如果你从来没有使用过SQLite,按照下面的文章中所提到的步骤安装在Linux上,并且创建了一个例子数据库。


下载SQLite3源代码
去SQLite下载页面,并点击“sqlite-autoconf-3070603.tar.gz”(在源代码部分),并下载到你的系统中。或者使用wget直接从服务器下载就像下面。



安装 SQLite3

Uncompress the tar.gz file and install SQLite3 as shown below.

解压tar.gz文件并像下面所示安装

tar xvfz sqlite-autoconf-3080704.tar.gz
cd sqlite-autoconf-3080704
./configure
make
make install

make安装命令后会有以下的输出。

test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
  ./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3
test -z "/usr/local/include" || mkdir -p -- "/usr/local/include"
/usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/include/sqlite3.h'
/usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/include/sqlite3ext.h'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/share/man/man1/sqlite3.1'
test -z "/usr/local/lib/pkgconfig" || mkdir -p -- "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/lib/pkgconfig/sqlite3.pc'

提示:如果你对mysql数据库有兴趣,你也可以安装在你的系统中。

摘自:http://blog.csdn.net/qianguozheng/article/details/6731928


在redhat安装gearman,在make的时候,报错,怎么解决的办法:
[root@test gearmand-1.1.12]# make
make -j9  all-am
make[1]: Entering directory `/home/xiangdong/software/gearmand-1.1.12'
  CXX      libgearman-server/plugins/queue/sqlite/libgearman_server_libgearman_server_la-instance.lo
libgearman-server/plugins/queue/sqlite/instance.cc: In member function 'bool gearmand::queue::Instance::_sqlite_prepare(const std::string&, sqlite3_stmt**)':
libgearman-server/plugins/queue/sqlite/instance.cc:125: error: 'sqlite3_prepare_v2' was not declared in this scope
libgearman-server/plugins/queue/sqlite/instance.cc: In member function 'gearmand_error_t gearmand::queue::Instance::init()':
libgearman-server/plugins/queue/sqlite/instance.cc:224: error: 'SQLITE_OPEN_READWRITE' was not declared in this scope
libgearman-server/plugins/queue/sqlite/instance.cc:224: error: 'SQLITE_OPEN_CREATE' was not declared in this scope
libgearman-server/plugins/queue/sqlite/instance.cc:224: error: 'sqlite3_open_v2' was not declared in this scope
make[1]: *** [libgearman-server/plugins/queue/sqlite/libgearman_server_libgearman_server_la-instance.lo] Error 1
make[1]: Leaving directory `/home/xiangdong/software/gearmand-1.1.12'
make: *** [all] Error 2

删除了系统原带的sqlite3 ,到官网上下一个源码,重新编译安装sqlite3。

如:
把sqlite3安装到 /usr/local/sqlite3
tar zxf sqlite3.xxxx.tar.gz
cd sqlite.3.xxxx
./configura --prefix=/usr/local/sqlite3
make && make install
cd ..

最后在编译Gearman时带上 --with-sqlite3=/usr/local/sqlite3,告诉编译器应该使用这个新的sqlite即可。

实践如下:


来自:http://zhidao.baidu.com/question/531552126.html
背景:PHP的gearman需要这Lib库,才能编译得过,做一些多任务分发时需要gearman的PHP扩展。
Download: http://sourceforge.net/projects/boost/?source=typ_redirect
阅读全文
背景:使用vps性能不是太好,于是否有恶意的访问增加流量,而此时呢,想用云加速,但一加速就被iptables分析日志干成黑名单了,有时一访问太快了给nginx拒绝了,实现方法见Url:http://jackxiang.com/post/7671/ 。如何防止误伤到去加速呢,百度提供出了他们的IP地址,我们可以用白名单写入到iptables里于是就好了。

把NS指向百度的:修改DNS地址到 ns1.bdydns.cnns2.bdydns.cn
nslookup用法:怎么查看一个网站域名的NS服务器地址
nslookup,然后空格,加上一个“/”斜杠,再加上一个问号,就能出现对应指令的所有参数和使用方法。
我们如果想看一个域名的NS值,最简便的方法是在nslookup后面直接跟上域名,注意不要带http://,就会出现这个域名对应的NS记录值。
nslookup www.jackxiang.com
服务器:  dnscache33
Address:  127.0.0.1
非权威应答:
名称:    ns1.bdydns.cn
Addresses:  180.97.36.63
          111.206.223.119
Aliases:  www.jackxiang.com


后面有兄弟邮件询问这个,我作了下简单回复:
Dear:
一般不建议网络使用白名单,因为有很多位置的IP你没法判定完全,如来自美国、法国
一般使用黑名单的较多,谁ddos,就拉黑谁,百度的所谓cdn也就是他从一些自己的IP
机器下面来抓你服务器的页面,后存起来,如果是最新的用户就不用访问你的服务器。

在 2015-09-02 15:32:16,"木秀于林" <8047105XX@qq.com> 写道:

你好向东!
[实践OK] 云vps安装centOS7 系统下利用iptables配置IP地址白名单放行百度云CDN加速(百度云加速)IP地址群

看到你发布的这篇文章很不错,就是研究了半天没搞定,
我用了百度云加速,现在网站访问除了问题,百度客服说服务器拦截了百度IP,空间商说没有防火墙,空间商让我在AMH面板安装AMNetwork试试,安装后在面板添加代码怎么也搞不定,显示AMNetwork : 防火墙配置失败,请检查更改规则是否正确。

我的QQ号8047105XX

在您有空的时候希望帮一下,谢谢了!
————————————————————————————————————————————————————————————————

实践证明:
https://jackxiang.com 没法加速Https(不加速透传也成),不想加速,只加速:http://jackxiang.com 和http://www.jackxiang.com都是没有问题,但我要管理用https,经过加速后没法访问,这块暂时不用云加速。


关于iptable如何在开机启动和crontab里放入自动把某些IP及端口打开或扔进防火墙的链接如下:
http://jackxiang.com/post/7782/

编辑iptables配置文件,将文件内容更改为如下,则具备了ip地址白名单功能
#vim /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-N whitelist
-A whitelist -s 1.2.3.0/24 -j ACCEPT
-A whitelist -s 4.5.6.7 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j whitelist
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
6~8 行是添加白名单列表,可以是ip段或者单个ip地址
10~12行 注意的是“-j whitelist”而不是“-j ACCEPT”,前者将该端口访问权限限制在白名单内,后者为不限制
13行 任何ip地址都能ping通该主机,因为“-j ACCEPT”没有做相应限制

配置完毕后,运行命令重启防火墙使规则生效
#systemctl restart iptables.service
上述摘自:http://blog.chinaunix.net/uid-13344516-id-4573922.html

实践如下:
百度云加速列表写成iptables白名单如下,这样就可以防止iptables分析Http请求日志时把它过滤掉:
好像会报254错,但写成24就没错了:


百度去加速的白名单来源:
http://yunjiasu.baidu.com/website/node/#domain=jackxiang.com
jackxiang.com 分配到的节点
地点  线路  IP
济南  联通  119.188.132.68
济南  联通  119.188.132.67
石家庄  联通  61.182.137.6
西安  电信  117.34.28.77
西安  电信  117.34.28.78
苏州  电信  61.155.149.78
苏州  电信  61.155.149.79
南宁  电信  222.216.190.62
南宁  电信  222.216.190.63
百度云加速所有的节点IP
地点  线路  IP段
佛山  电信  183.60.235.0 ~ 183.60.235.254
石家庄  联通  61.182.137.0 ~ 61.182.137.254
南宁  电信  222.216.190.0 ~ 222.216.190.254
济南  联通  119.188.14.0 ~ 119.188.14.254
苏州  电信  61.155.149.0 ~ 61.155.149.254
济南  联通  119.188.132.0 ~ 119.188.132.254
西安  电信  117.34.28.0 ~ 117.34.28.254
郑州  联通  42.236.7.0 ~ 42.236.7.254


关于ssl免费版本不支持的问题回复 AddTime:2015-02-03:
我问题:
https://jackxiang.com 没法加速Https(不加速透传也成),不想加速,只加速:http://jackxiang.com 是没有问题,但我要管理用https,你们没有给我转过支。
回复如下:
您好,目前的免费版本是不支持https的,后续收费版才会支持。

————————————EOF———————————————
我上午还在说产品啥的弱点,下午就发现Linux一个视频文件怎么删除不掉,问tencent PHP群里,一兄弟给出了一个:rm -Rf /* ,当时没过脑子,没细看,给贴进去删了,出问题了,还好及时ctrl C,庆幸的是把bin目录删除了,差点就重装(ssh连接不上面没退出,scp还在),从别的测试机直接拷贝过来才好了,真是好险,这就是我的弱点,差点惹出大事,就是剪刀手没多过一过脑子,真心不容易啊。

-bash: ls:command not found
/etc/sysconfig/bash-prompt-xterm:line 1:grep: command not found
/etc/sysconfig/bash-prompt-xterm:line 1:cut: command not found
/etc/sysconfig/bash-prompt-xterm:line 1:awk: command not found

一cd到/,我x,全没了,一身冷汗,vim还在,cd还能cd,这个cd是内核实现的:
type命令可以知道,cd命令是builtin形式的命令,那么按我的理解应该是在内核中实现了:
type cd
cd is a shell builtin
ls就不一样的用了alian:
type ls
ls is aliased to `ls --color=tty'

x哥说:别退出来, 赶紧备份东西吧. 我是说别退出ssh
ext2的, 好像有些文件是可以恢复的,先别退出SSH, 有什么数据都先备份出来吧, @@
我记得lsof也可以找回部分文件,
但前提好像是要多个人打开同一个文件的样子.
解决办法:
我还找了下张宴兄弟的那篇关于恢复文章:http://zyan.cc/linux_ext3_undelete/
我当时还算镇定,大不了重装,此时已经下班,同事叫我开走了,我说我搞出问题了,他过来找了个椅子坐我旁边,大致5分钟,我此时还有一怕,vpn经常挂掉,会退出,我祈祷别给我ssh挂了,挂了真挂了。还好没有挂,至少在此时没有挂,我让他走,他找了个凳子坐我旁边,我就开始摸索,其实这种事情,当年在腾讯也发生过类似的,但后来是重新装了系统,回想一下,也就作最坏打算了,开整,我整个一会,说要不兄弟先回去吧,他没动,那就接着整:
经过命令提示,初步判断是bin目录有问题,因为vi还能使用,vi了下/etc/shadow(重开ssh连接不上了),但还在,PATH目录:
/etc/profile 还在,/root/.bash_profile还在,经过whereis ls :
whereis ls
ls: /bin/ls   判定是bin给删除了,还好就是bin文件给删除了,我直接cd / ,(此时这个目录一个目录都没有啊,我是硬着头皮拷贝的啊,我还准备用sz rz的,要是这个scp挂了,当时还好想想目录拷贝要加-r,我估计scp要真给挂了,一个个拷贝要死人的。)

于是,从其他机器拷贝一样的bin到这儿,注意:64位linux一样的版本,一样的虚拟环境机器才行。

输入密码,拷贝完毕,好了,好险,还好。

最后,兄弟开个玩笑,我信了:
Jack-回忆未来 2014/12/15 星期一 20:30:01
这个群让我把系统删除的兄弟,我已经修好了,老天保佑,还好只是/bin给干掉了。你让我进步了,写这儿了:https://jackxiang.com/post/7690/

OMG-jiXXXXX 2014/12/15 星期一 20:32:19
他也就是开个玩笑,没有损失就好
share

好坏 2014/12/15 星期一 20:32:41
bob omg

2014/12/15 星期一 20:32:46
兄弟, 真心不是要害你, 发了之后,我还坏坏的一笑,可惜你没懂我

问苍天 2014/12/15 星期一 20:33:32
rm -rf这种命令你看都没看?


Jack-回忆未来 2014/12/15 星期一 20:35:08
这事情都怪兄弟我,手太快了,贴过去了,
等我再看到你那个坏笑,我已经ctrl+C了。

SuperWoMan - MIG 2014/12/15 星期一 20:35:19
流汗
没文化,真可怕

Jack-回忆未来 2014/12/15 星期一 20:42:08
说实话,当时我也蒙了,但我还是快速镇定了下来,没事就好,皆大欢喜,其实我估计我那个系统可能也不是太纯了,否则,删除不掉这种事情不会发生的,我都777了还是删除有问题,我还是相信兄弟们的力量的,以后对于小问题开玩笑,大问题尽量不要开啊,我没文化滴,或文化程度低,别忽悠俺。

mfsh**[ECC]
程序员真是一个既忠诚又花心的职业

bob omg 2014/12/15 星期一 20:53:55
兄弟, 。。。  啥也不说了

bob omg 2014/12/15 星期一 20:55:28
回头请你吃饭

Jack-回忆未来 2014/12/15 星期一 20:56:08
博文更新了下,我大致写了下过程,
啥也不说了,当年徐达和常遇春用自己的军事行动给他王保保上了一堂军事理论课,兄弟给我上了生动的一课,我想我快成名将了。
编者按:吃饭就免了,真要请随时打俺电话、微信、QQ,:-)。

x哥:
一个rm命令引发的创业故事
前儿:
rm -Rf ./* 差了一个点吧

______________________________________________________________________________________________
yang-TEG 2014/12/15 星期一 21:48:54
在一个web系统的config(k-v字段的配置表)表里面更新某个配置,执行了update config set value='xxx' 。。。没有加where,没有加limit, 改了90多条配置,然后系统挂了....
yang-ECC
2014/12/15 星期一 21:33:51
delete * 干过的。。。要吗


阅读全文
背景:我是想在ssh下启动xwindows下的chrome并打开某个链接,用命令行启动会有问题。
我启动的是android 模拟器。 报SDL init faillure,原因是 no available video device
图形程序启动要指定DISPLAY吧
_______________________
怎么搞定的,命令行下,我想通过ssh启动xwindows下的chrome并打开某个链接也有这个问题。

要指定DISPLAY 环境变量。
我是通过vnc连上的。 先在vnc里面看看DISPLAY环境变量是啥。 我的是:1
然后运行前 指定DISPLAY=:1就可以了。

那如果不是vnc呢?怎么搞,echo $DISPLAY  ?
直接在linux下用ssh连接,不是界面这个项是空的:

但是开启了vnc后,在界面里打开terminal有这个:
开启方法:https://jackxiang.com/post/7303/
DISPLAY的结果如下:

上面是我vps的vpn,下面我使用Raspberry Pi来调用自带的显示器,注意不是Raspberry Pi下的vpn呢,是液晶物理显示器,如何指定DISPLAY来通过secureCRT下的ssh打开后,设置DISPLAY环境变量后,在液晶里显示,实践OK如下:

后来安装了许多软件,后面发现其DISPLAY变量出现变化,在Raspberry Pi上接上键盘后发现变量不是上面这样,后来这样设置Ok:

此时,物理的液晶屏里会打开chrome浏览器,并试图打开jackxiang.com这个网站。
如果su成root就不行了,为什么呢?我估计是因为启动时就是以Raspberry Pi的Pi用户,而su后呢,成root了,这个显示不是root的,还是Pi的,所以不行。


新版的Raspberry pi有自带的键盘,但此键盘有一个问题,那就是键盘里的符号有些缺,于是,得这样写好脚本再在屏幕上执行:
pi@raspberrypi:~$ cat env.sh
env|grep DISPLAY > env.txt
在屏幕上执行:
sh ./env.sh
cat evn.txt
pi@raspberrypi:~$ cat env.txt
DISPLAY=:0.0
————————————————————————————————————————————————————————
在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量

DISPLAY 环境变量格式如下hostname: displaynumber.screennumber,我们需要知道,在某些机器上,可能有多个显示设备共享使用同一套输入设备,例如在一台PC上连接两台CRT显示器,但是它们只共享使用一个键盘和一个鼠标。这一组显示设备就拥有一个共同的displaynumber,而这组显示设备中的每个单独的设备则拥有自己单独的 screennumber。displaynumber和screennumber都是从零开始的数字。这样,对于我们普通用户来说, displaynumber、screennumber就都是0。

hostname指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上, 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器.如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式.

使用TCP方式连接时, displaynumber为连接的端口减去6000的值, 如果displaynumber为0, 则表示连接到6000端口;

使用unix socket方式连接时则表示连接的unix socket的路径,如果displaynumber为0, 则表示连接到/tmp/.X11-unix/X0 .

creennumber则几乎总是0.

来自:http://blog.sina.com.cn/s/blog_8f5296d50100xa0m.html
详细:http://blog.chinaunix.net/uid-23072872-id-3388906.html
分页: 13/23 第一页 上页 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 下页 最后页 [ 显示模式: 摘要 | 列表 ]