1、打开【开始菜单】进入设置后,进入2的系统(显示、通知、应用、电源)。
2、进入【系统设置】
3、点击”系统选项“
4、选择【通知和操作】
5、选择在任务栏上显示哪些图标
6、控制显示的应用图标【开关】
7、设置成功,任务栏显示应用图标。

摘自 :http://zhidao.baidu.com/link?url=sm3gwUbd7RkQUlspvGUNpzipEaR7fTxXmcw_D0UqAEHT0pb_ThhEkJhdTfJ8OpdMWUj48gb8PR7jQ6d-NsFqyX_NRY2GDD97CBgrkkSujn7
背景:发现gitlab经nginx代理后,有一天访问突然发现出现409错误,[15/Sep/2016:12:40:13 +0800] "GET /dashboard/projects HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",502 Whoops, GitLab is taking too much time to respond. Try refreshing the page, or going back and attempting the action again.Please contact your GitLab administrator if this problem persists。


我的Web服务器在用的Linx + Mysql + PHP +nginx,今天被DDOS攻击了,观察日志中发现大量的499 Status Code这个错误。GOOGLE了一把才明白这个499的意思:
日志如下:

222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.012 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.015 ut="-" cs=-
222.215.105.135 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.015 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.002 ut="-" cs=-
119.147.86.178 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
61.219.178.101 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.002 ut="-" cs=-
58.49.59.142 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
202.201.252.2 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
202.201.252.2 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
119.147.86.178 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
58.221.37.82 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.039 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.001 ut="-" cs=-
58.49.59.142 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
58.49.59.142 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.045 ut="-" cs=-
119.147.86.178 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.036 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.037 ut="-" cs=-
222.215.105.135 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-

222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.012 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.015 ut="-" cs=-
222.215.105.135 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.015 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.002 ut="-" cs=-
119.147.86.178 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
61.219.178.101 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.002 ut="-" cs=-
58.49.59.142 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
202.201.252.2 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
202.201.252.2 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
119.147.86.178 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
58.221.37.82 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.039 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.001 ut="-" cs=-
58.49.59.142 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
58.49.59.142 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.045 ut="-" cs=-
119.147.86.178 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.036 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-
222.189.237.18 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.037 ut="-" cs=-
222.215.105.135 - - [06/Nov/2011:12:23:27 +0800] "GET / HTTP/1.1" 499 0 "-" "-" "-" rt=0.000 ut="-" cs=-

400~500间的错误码仅定义到了417,所以499应该是nginx自己定义的。

读读nginx代码,看一下注释,找到src/http/ngx_http_special_response.c 这个文件328行,里面定义了不少http错误码以及相应的返回。注意到有下面这样的注释:


    ngx_string(ngx_http_error_494_page), /* 494, request header too large */
    ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
    ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
    ngx_string(ngx_http_error_497_page), /* 497, http to https */
    ngx_string(ngx_http_error_404_page), /* 498, canceled */
    ngx_null_string,                     /* 499, client has closed connection */

    ngx_string(ngx_http_error_494_page), /* 494, request header too large */
    ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
    ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
    ngx_string(ngx_http_error_497_page), /* 497, http to https */
    ngx_string(ngx_http_error_404_page), /* 498, canceled */
    ngx_null_string,                     /* 499, client has closed connection */
可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。要解决此问题,就需要在程序上面做些优化了。

除了499,nginx还定义了495/496/497/498 这几个Status Codes,相应的意义也在上面的注释中可以看到。开源的东西,可以随时翻看源码,这一点很棒。


来自:http://blog.hexu.org/archives/1085.shtml
背景:一直想为sublime找一个好点的主题,一个是背景字体好看、二是简单、三是上面tab在哪儿要明显,这三个点在下面这个兄弟的博客里得到了体现,不错。
问题?sublime text3主题安装及下载使用方法

安装方法:首先下载https://github.com/kenwheeler/brogrammer-theme/archive/master.zip。解压后将文件夹改名成Theme - Brogrammer。然后打开sublime text3,找到里面的首选项->浏览程序包(Preferences -> Browse Packages),将改名后的文件夹copy到弹出的文件夹中,然后首选项->设置用户(Preferences -> setting uer),将下列代码拷进去:

{
  "theme": "Brogrammer.sublime-theme",
  "color_scheme": "Packages/Theme - Brogrammer/brogrammer.tmTheme"
}
如果不成功,则改成:
{
  "color_scheme": "Packages/User/SublimeLinter/brogrammer (SL).tmTheme",
  "font_size": 14,
  "ignored_packages":
  [
    "Vintage"
  ],
  "show_encoding": true,
  "theme": "Brogrammer.sublime-theme"
}

文档下载:点击打开链接
来自:http://blog.csdn.net/mr_li13/article/details/50821812

推荐一个sublime text3 的主题 material-theme,超级漂亮:
https://tennc.github.io/2016/03/26/%E8%B6%85%E7%BA%A7%E6%BC%82%E4%BA%AE%E7%9A%84%E4%B8%BB%E9%A2%98/
废话不多说,安装方式:
ctrl+shift+p 搜索 material theme 进行安装


github下载主题后,复制到 Packages\User\ 目录下
之后就是启用那个主题,重新启动sublime text就好了~~
不知道谁还用sublime text3,在win10 64bit 情况下~ sublime text3 输入中文,不能跟随,谁晓得如何处理??
病情分析:
      你好,常从事繁琐的日常家务活动,手指、腕部须反复劳作,故而容易罹患腱鞘炎。但是,手腕腱鞘炎是可以治疗好的。但是想要养好腱鞘炎,日常护理可不能忽视。
      指导意见:
      1、改掉不良习惯,如打响指等。 
      2、避免长时间持抱小孩、拧洗衣物等。  
      3、连续工作时间不宜过长。  
      4、患本病后要注意避免冷水刺激。  
      5、采用正确的工作姿势,尽量让双手平衡,手腕能触及实物,不要悬空。  
      6、手腕关节做360度的旋转,或将手掌用力握拳再放松,来回多做几次。
      7、面向桌子或窗台站立,双手掌撑住桌面,指尖指向自己,并保持肘关节伸直。
      8、将身体前倾,感觉腕关节背侧有牵拉感。
      9、练习时,每天3组,每组3次,每次坚持15-30秒。
      以上事项做到,再配合外敷药物治疗,基本上是可以治好手腕腱鞘炎的。


病情分析:
      你好,由于反复过度摩擦,引起肌腱及腱鞘发生炎症、水肿、纤维鞘壁增厚形成狭窄环,肌腱的纤维化和增粗造成肌腱在鞘管内滑动困难,就是腱鞘炎。可以是受伤、过份劳损(尤其见于手及手指)、骨关节炎、一些免疫疾病,甚至是感染也有可能引起。
      指导意见:
      治可以行中医小针刀闭合性松解,切开狭窄部分腱鞘,效果也很好。防治;家务劳动时,要注意手指、手腕的正确姿势,不要过度弯曲或后伸;提拿物品不要过重;手指、手腕用力不要过大;连续工作时间不宜过长,工作结束后,要揉搓揉搓手指和手腕,再用热水泡泡手。建议可以在於患处作热敷,此外,减少用拇指做推、擦的动作,多食蔬菜,如油菜、青菜、芹菜等,多食富含蛋白质及钙质食物和瘦肉、鸡肉、蛋、豆浆等。


来自:http://www.120ask.com/question/63884350.htm
CentOS Linux自建yum源,在后面贴上文字:
来自:http://www.live-in.org/archives/1410.html

rpm -qa gpg-pubkey*
rpm包来源合法性及完整性检验:
  前提:在当前系统上导入包的制作者的公钥
   导入:
    rpm --import /path/to/key_file
    # rpm -qa gpg-pubkey*
    显示所有已经导入的gpg格式的公钥
    # rpm -qi gpg-pubkey-NAME
    显示密钥的详细信息
   检查包:安装过程中会自动执行
   手动检查:
    rpm -K /path/to/package_file
    rpm --checksig /path/to/package_file
     不检查包完整性:
      rpm -K --nodigest
     不检查来源合法性:
      rpm -K --nosignature

来自:http://1983939925.blog.51cto.com/8400375/1529663

======================================
平时使用yum方式安装更新软件,可以自建一个yum源,同步官方更新源,这样如果本地有机器要升级的话就可以直接使用本地的更新源了。这里系统为CentOS 6.2。

一、服务端
1、安装需要的环境
自建yum本地更新源可以使用http服务或ftp服务,由于ftp服务器要考虑防火墙配置,主动、被动连接模式,这里使用http服务。

安装apache:

yum install httpd

配置apache过程略过。

2、安装createrepo软件包

yum install createrepo

3、建立存放软件包目录

mkdir -p /home/yum/centos/6/
chown -R apache:apache /home/yum/

4、apache创建虚拟目录

vim /etc/httpd/conf/httpd.conf

在最后加入:

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /home/yum
ServerName XXX.XXX.XXX #填写绑定的域名
<Directory "/home/yum">
Options Indexes FollowSymlinks
</Directory>
</VirtualHost>

5、将rpm软件包放入/home/yum/centos/6/目录

6、执行createrepo

createrepo /home/yum/centos/6

在/home/yum/centos/6目录下会自动生成repodata目录,repodata目录里是一个数据库,其中的文件主要是XML格式,描述了一个rpm包的详细信息,如依赖关系,包含文件,校验码信息。

二、客户端
1、创建yum客户端repo文件

vim /etc/yum.repos.d/test.repo

以.repo为后缀,这里名字为test。

添加:

[test]
name=yum test
baseurl=http://XXX.XXX.XXX/centos/6
enabled=1
gpgcheck=1
gpgkey=http://XXX.XXX.XXX/centos/RPM-GPG-KEY-TESTREPO

说明:
[test]:是repo id。
name:仓库的描述。
baseurl:仓库的位置。
enabled:是否启用这个仓库,1为起用,0为禁用。
gpgcheck:是否检查gpg签名,1为检查,0为不检查。
(XXX.XXX.XXX是绑定的域名)

PS:如果是内部使用,gpgcheck可以设置为0(同时gpgkey也不用设置),如果更新源放在公网上的话还是需要检查gpg签名,保证客户端得到来源的可靠性。

2、查看yum更新源列表

yum repolist

是否有名为yum test的源出现。

三、(可选)服务端使用gpg key对rpm软件包进行签名
1、创建gpg key
gpg key也是基于非对称加密算法,产生公钥和私钥。

执行:

cd ~
gpg --gen-key

创建过程:

选择加密算法、加密强度、是否设置有效期

设置名称和邮箱


输入保护密码


在/root/.gnupg目录下生成公钥和私钥文件。据观察pubring.gpg是公钥,secring.gpg是私钥。

2、查看公钥

gpg --list-key

显示如下:

/root/.gnupg/pubring.gpg
------------------------
pub   2048R/EF9632F2 2012-07-21
uid                  test repo <testrepo@example.com>
sub   2048R/C17A35BC 2012-07-21

3、在家目录建立.rpmmacros文件

cd ~
vim .rpmmacros

添加:

%_signature gpg
%_gpg_name test repo <testrepo@example.com>

%_gpg_name后面要填写gpg --list-key命令显示的uid,指定这一组key进行签名。

4、对rpm软件包签名
以mtree-2.7-1.el6.rf.i686.rpm软件包为例。

cd /home/yum/centos/6
rpm --resign mtree-2.7-1.el6.rf.i686.rpm

随后需要输入保护密码。

5、导出公钥到文本文件

cd ~
gpg --export -a "test repo <testrepo@example.com>" >RPM-GPG-KEY-TESTREPO

6、验证是否签名成功
查看rpm数据库中的公钥:

rpm -q gpg-pubkey

gpg-pubkey-c105b9de-4e0fd3a3

导入公钥:

rpm --import RPM-GPG-KEY-TESTREPO


rpm -q gpg-pubkey

gpg-pubkey-c105b9de-4e0fd3a3
gpg-pubkey-ef9632f2-500a6e55

已经添加了一组公钥。

检验rpm软件包:

cd /home/yum/centos/6
rpm -K mtree-2.7-1.el6.rf.i686.rpm

mtree-2.7-1.el6.rf.i686.rpm: rsa sha1 (md5) pgp md5 OK

7、将公钥放到web服务器上

cp ~/RPM-GPG-KEY-TESTREPO /home/yum/centos/

8、服务端更新仓库信息

createrepo --update /home/yum/centos/6

主要是更新repodata目录中的数据。

四、(可选)客户端导入公钥

rpm --import http://XXX.XXX.XXX/centos/RPM-GPG-KEY-TESTREPO

(XXX.XXX.XXX是绑定的域名)

测试安装:

yum install mtree

参考资料:
http://jianlee.ylinux.org/Computer/Linux发行版开发/createrepo.html
http://zhumeng8337797.blog.163.com/blog/static/100768914201231852812921/
http://ramblings.narrabilis.com/creating-a-yum-repository-repo-and-creating-a-yum-group-to-install-kickstart
背景:在vim中看比如最近流行的SSDB,听说想替代redis,里面有一个配置文件叫:/usr/local/ssdb/ssdb.conf ,写道:# MUST indent by TAB!
在vim里看不到tab,或你已经修改一个tab不是它默认的tab了(一个tab修改为4个空格),如何看tab成问题,有时你还想分是不是tab还是空格?
在VI中,也有类似功能,可以查看TAB及行尾空格。
如下设置,第一行运行时看起来比较不顺眼(^I填充TAB),再运行第二行(TAB会被显示成 ">---" ("-" 的个数不定) 而行尾多余的空白字符显示成 "-"。
看起来好多了):


set list是设置显示TAB,默认是用^I填充TAB。
listchars选项用来设置TAB和行尾空格的显示。
详见vi帮助:VIEWING TABS




参考:http://www.361way.com/vi-char/362.html
参考:http://blog.csdn.net/jq0123/article/details/5600426
背景:在Linux下的c也好windows下的c也好,这两者不太好理解,再研究一下,指针数组就是像数组下标一样获取一个数组里面的值,不过前面有括号(*b)[N],N {1,N}。

1、指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针;数组指针:a pointer to an array,即指向数组的指针。
int* a[4]     指针数组    
                  表示:数组a中的元素都为int型指针    
                  元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*
int (*a)[4]  数组指针    
                  表示:指向数组a的指针
                  元素表示:(*a)[i]  

2、下面通过实例来说明数组指针与指针数组的区别:  


背景:做物联网时候有时候咱不搞p2p通讯而用服务器中转,而中转时候有些变量想共享如手机端的温度值的websocket推送,和硬件传感器的网络上报温度基于tcp/ip,这个温度值经过swoole的多端口实时共享,那么这个需求在swoole1.8.0里面得到实现和满足。

https://linkeddestiny.gitbooks.io/easy-swoole/content/book/chapter02/port.html
linxu平台解压rpm包的方法可以输入命令 rpm2cpio xxx.rpm | cpio -divRPM包括是使用cpio格式打包的,所以可以先转cpio然后解压示例例如:[root@localhost oracle]# rpm2cpio mentohust-0.3.4-1.el5.i386.rpm  | cpio -div来自:http://jingyan.baidu.com/album/73c3ce28e9c996e50343d9c0.html?stepindex=6&st=5&os=1&bd_page_type=1&net_type=4&ssid=&from=

[root@iZ25z0ugwgtZ tmp]# rpm2cpio php-5.4.16-36.3.el7_2.x86_64.rpm |cpio -div
背景:看PHP的慢日志一般来讲主要是看网络接口上的问题,有时间一台服务器会调用api接口,而该接口呢在另一吧机器上,而有人恶意透过这个接口频繁调用,飙高带宽,进而导致一堆TIME_WAIT,nginx出现白页,此时,这是现象,如何由现象看到本质,那就打开php-fpm的slow的日志吧,如何打开,接着向下看吧。
——————————————————————————————————————————————————————————————————————
众所周知,mysql有slow query log,根据慢查询日志,我们可以知道那些sql语句有性能问题。作为mysql的好搭档,php也有这样的功能。如果你使用php-fpm来管理php的话,你可以通过如下选项开启。
PHP 5.3.3 之前设置如下:
<value name="request_slowlog_timeout">5s</value>
<value name="slowlog">logs/php-fpm-slowlog.log</value>

说明:
request_slowlog_timeout 是脚本超过多长时间 就可以记录到日志文件
slowlog 是日志文件的路径

开启后,如果有脚本执行超过指定的时间,就会在指定的日志文件中写入类似如下的信息:


[19-Dec-2013 16:54:49] [pool www] pid 18575
script_filename = /home/web/htdocs/sandbox_canglong/test/tt.php
[0x0000000003a00dc8] curl_exec() /home/web/htdocs/sandbox_canglong/test/tt.php:2
[0x0000000003a00cd0] exfilter_curl_get() /home/web/htdocs/sandbox_canglong/test/tt.php:6
日志说明:
script_filename 是入口文件
curl_exec() : 说明是执行这个方法的时候超过执行时间的。
exfilter_curl_get() :说明调用curl_exec()的方法是exfilter_curl_get() 。
每行冒号后面的数字是行号。

开启后,在错误日志文件中也有相关记录。如下:





参考:http://www.bo56.com/%E5%96%84%E7%94%A8php-fpm%E7%9A%84%E6%85%A2%E6%89%A7%E8%A1%8C%E6%97%A5%E5%BF%97slow-log%EF%BC%8C%E5%88%86%E6%9E%90php%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98/
一般都要sort排序一下后再比对为好:
sort eee.txt > eeee.txt
sort fff.txt > ffff.txt
diff -c eeee.txt ffff.txt
——————————————————

抄来抄去,直接看这篇文章得了:
http://blog.chinaunix.net/uid-26000296-id-3507646.html

这儿注意大于小于的含义:
diff  cccc.txt dddd.txt
19a20
> 999 备注:大于是指左边文件没有右边有。
而用-c提示相比上面这种方法更直观一些:
diff -c  cccc.txt dddd.txt
*** cccc.txt    2016-12-02 16:00:25.378913370 +0800
--- dddd.txt    2016-12-02 16:00:58.528306679 +0800
***************
*** 17,19 ****
--- 17,20 ----
  10.71.182.93
  10.71.182.96
  10.71.182.99
+ 999


注意:改变位置会在其前面三行和后面三行,因此一共显示7行。
文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。
=====================================

假设有两个文件:

//file1.txt

I need to buy apples.

I need to run the laundry.

I need to wash the dog.

I need to get the car detailed.

//file2.txt

I need to buy apples.

I need to do the laundry.

I need to wash the car.

I need to get the dog detailed.

我们使用diff比较他们的不同:diff file1.txt file2.txt


2,4c2,4 前面的数字2,4表示第一个文件中的行,中间有一个字母c表示需要在第一个文件上做的操作(a=add,c=change,d=delete),后面的数字2,4表示第二个文件中的行。

2,4c2,4 的含义是:第一个文件中的第[2,4]行(注意这是一个闭合区间,包括第2行和第4行)需要做出修改才能与第二个文件中的[2,4]行相匹配。接下来的内容则告诉我们需要修改的地方,前面带 < 的部分表示左边文件的第[2,4]行的内容,而带> 的部分表示右边文件的第[2,4]行的内容,中间的 --- 则是两个文件内容的分隔符号。

打patch的比较最常用:
-e 将比较的结果保存成一个ed脚本,之后ed程序可以执行该脚本文件,从而将file1修改成与file2一样的文字内容:
[root@iZ25dcp92ckZ diff]# diff -e 1.txt 2.txt > script.txt
diff: 1.txt: 没有那个文件或目录
diff: 2.txt: 没有那个文件或目录
[root@iZ25dcp92ckZ diff]# diff -e file1.txt file2.txt > script.txt
[root@iZ25dcp92ckZ diff]# cat script.txt
7c
I need to get the dog detailed.
.
5c
I need to wash the car.
.
3c
I need to do the laundry.
.
1c
need to buy apples.
.
[root@iZ25dcp92ckZ diff]#

这样就是生成了一个ed可以执行的脚本文件script.txt,生成脚本文件之后我们还需要做一个操作, 在脚本文件末尾添加ed的write指令,只需要执行 echo "w" >>script.txt 将w指令附加到脚本文件的最后一行即可。

那么如何应用该脚本文件呢,可以这样使用:

ed - file1.txt < script.txt

注意中间的 – 符号表示从标准输入中读取,而 < script.txt 则重定向script.txt的内容到标准输入。这样执行之后1.txt的内容将与2.txt完全相同。

[root@iZ25dcp92ckZ ~]# cd /tmp/diff
[root@iZ25dcp92ckZ diff]#  echo "w" >>script.txt
[root@iZ25dcp92ckZ diff]# ed - file1.txt < script.txt
[root@iZ25dcp92ckZ diff]# diff file1.txt file2.txt
[root@iZ25dcp92ckZ diff]#

比对发现一样,得证。
来自:
【diff详解,读懂diff结果】
http://m.pstatp.com/group/6321440713972171010/?iid=5181229840&app=news_article&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share

需要安装ruby
在开始搭建redis之前,你需要确保你本地有ruby(2.0以上),且该ruby 中有redis 扩展包。

需要有ruby redis包
//验证是否安装好ruby redis扩展包:[这里查看ruby 扩展包有更好的办法请告诉我,我对ruby完全不熟悉]//如果没有安装好ruby redis,请看"2.1 安装ruby redis 扩展包",//如果已经安装好,直接看"二 实施阶段"# find / -name "redis"/Library/Ruby/Gems/2.3.1/gems/redis-3.0.6/lib/redis


安装ruby redis 扩展包
//查看你本地是否有gem,如果没有安装,请看"2.2 安装gem",否则请看下面内容$ gem -v2.0.14#gem install redis -v 3.0.6//因为gems官网的镜像在国外,所以国内网络经常断连。你需要链接一个国内镜像,我用的是https://ruby.taobao.org//查看现在镜像的来源地址$ gem sources -l*** CURRENT SOURCES ***https://rubygems.org//** * 增加https://ruby.taobao.org为镜像,并且移除官网的https://rubygems.org/镜像*/$ gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org///查看现在镜像的来源地址$ gem sources -l*** CURRENT SOURCES ***https://ruby.taobao.org//安装ruby redis 3.0.6包[这个包需要与你本地的redis包的版本一致哦]#gem install redis -v 3.0.6//验证是否安装好redis扩展包:[这里查看ruby 扩展包有更好的办法请告诉我,我对ruby完全不熟悉]# find / -name "redis"/Library/Ruby/Gems/2.3.1/gems/redis-3.0.6/lib/redis


安装gem
rubygems官网下载地址
下载后就按照正常的安装步骤安装即可
//"./configure" 该步骤可以配置安装路径,以及其他参数,请查看帮助$ ./configure$ make$ sudo make install$ gem -v2.0.14


你需要了解redis的架构
redis架构相关 http://blog.csdn.net/naixiyi/article/details/51335059

认识redis.conf文件关于redis集群(redis cluster)的配置
要使redis以集群方式启动,而不是普通单例方式启动,需要更改redis.conf文件以下字段.保存为demo_redis.conf

//这里的port 随意你定,你只要保证该端口7000以及(7000+10000)端口是空闲的即可。前者是用于服务client的端口。后者是用于各个实例相互通信的bus port,默认为服务client端口加10000port 7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes



.认识redis-trib.rb脚本
该脚本的位置在./../redis-3.0.6/src/redis-trib.rb。你可以查看有的各个命令

$ ./../redis-3.0.6/src/redis-trib.rb Usage: redis-trib <command> <options> <arguments ...>  create          host1:port1 ... hostN:portN                  --replicas <arg>  check           host:port  info            host:port  fix             host:port                  --timeout <arg>  reshard         host:port                  --from <arg>                  --to <arg>                  --slots <arg>                  --yes                  --timeout <arg>                  --pipeline <arg>  rebalance       host:port                  --weight <arg>                  --auto-weights                  --threshold <arg>                  --use-empty-masters                  --timeout <arg>                  --simulate                  --pipeline <arg>  add-node        new_host:new_port existing_host:existing_port                  --slave                  --master-id <arg>  del-node        host:port node_id  set-timeout     host:port milliseconds  call            host:port command arg arg .. arg  import          host:port                  --from <arg>                  --copy                  --replace  help            (show this help)

摘自 :http://www.th7.cn/Program/Ruby/201605/853077.shtml
更多: http://blog.csdn.net/huwei2003/article/details/50973967
一)过滤出三次握手的第一次:
tcp.flags.syn == 1  //YN置1就表示这是一个连接请求或连接接受报文。首先由Client发出请求连接即 SYN=1 ACK=0  (请看头字段的介绍), TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=0
二)跟踪一个IP和另一个IP的数据包:
(ip.addr eq 123.130.127.180 and ip.addr eq 172.20.156.35) and (tcp.port eq 80 and tcp.port eq 16616)

ip.addr == 123.130.127.180 and ip.addr == 172.20.156.35 //注意,一是两个等号,二是ip不用双引或单引号想起来,否则属于错误语句。
(ip.addr == 123.130.127.180 and ip.addr == 172.20.156.35) and (tcp.port == 80 and tcp.port == 16616)

ip.addr==123.130.127.180 and ip.addr==172.20.156.35
阅读全文
今天查看了一下服务器,发现/var/log/btmp日志文件比较大(38M     /var/log/btmp),搜索一下,此文件是记录错误登录的日志,就是说有很多人试图使用密码字典登录ssh服务,此日志需要使用lastb程序打开。
通过此文件发现有几个ip总是试图登录,可以使用防火墙把它屏蔽掉。
命令如下:
iptables -A INPUT -i eth0 -s *.*.*.0/24 -j DROP
查看恶意ip试图登录次数:
lastb | awk ‘{ print $3}’ | sort | uniq -c | sort -n
删除这个日志:
rm -rf /var/log/btmp
touch /var/log/btmp

来自:http://blog.chinaunix.net/uid-20329764-id-5016539.html
背景:想把sublime改成vim,但是对于列模式可视块这种需要ctrl+v这种变成粘贴了,而产生冲突,最后还是修改回去了。
本文部分摘自:http://www.cnblogs.com/zuike/p/4402022.html
启用 Vim 模式

      在菜单栏中: Preferences -> Setting - User ,即可打开配置文件进行编辑,将 ignored_packages 项的[]里面内容清空:

"ignored_packages":
 [
 ]

  这样就启用了 Vim 模式,按 Esc 退出编辑模式,即进入了 Vim 模式。

     vim 模式快捷键说明请查看 http://feliving.github.io/Sublime-Text-3-Documentation/vintage.html

我的实践:
{
  "color_scheme": "Packages/User/SublimeLinter/Solarized (Dark) (SL).tmTheme",
  "font_size": 14,
  "ignored_packages":
  [
    "Markdown Preview",
    "Vintage"
  ],
  "show_encoding": true,
  "theme": "Soda Light 3.sublime-theme"
}

删除掉:

    "Markdown Preview",
    "Vintage"







启用 Ctrl 功能键及自定义功能键

  Preference->Setting User 添加如下内容:

  

"vintage_ctrl_keys": true
   这样就支持以下命令了:  

Ctrl+[ : Esc键的别名
Ctrl+R : Redo
Ctrl+Y : 向下滚动一行
Ctrl+E : 向上滚动一行
Ctrl+F : 下一页
Ctrl+B : 上一页
  如果觉得以上按键太复杂,可以自定义按键,找到 Vintage.sublime-package这个文件,其实是一个压缩包,改名zip后缀后解压得出文件,使用记事本打开 Default.sublime-keymap 文件,找到需要修改的快捷键进行修改即可。

  例如我需要将 ctrl+f 下一页修改成 f+f 下一页:

  搜索 “ctrl+f”,找到以下代码:

  

{ "keys": ["ctrl+f"], "command": "set_motion", "args": {
"motion": "move",
"motion_args": {"by": "pages", "forward": true, "extend": true }},
"context": [{"key": "setting.command_mode"}, {"key": "setting.vintage_ctrl_keys"}]
},



修改成

{ "keys": ["f","f"], "command": "set_motion", "args": {
"motion": "move",
"motion_args": {"by": "pages", "forward": true, "extend": true }},
"context": [{"key": "setting.command_mode"}, {"key": "setting.vintage_ctrl_keys"}]
},

这样,你 按esc退出编辑模式,按两下f键,即可实现向下翻页了,大家可以尝试下将 ctrl+b 向上翻页修改成 b+b 。
杨永(杨永) 08-19 15:14:56
tcpdump -vnn host  要挂载服务器的IP
杨永(杨永) 08-19 15:15:07
tcpdump -vnn host 192.168.151.201
杨永(杨永) 08-19 15:17:01
看情况得开下4046端口
杨永(杨永) 08-19 15:17:12
发给张腾让他开下
杨永(杨永) 08-19 15:18:02
10.71.182.97.55818 > 192.168.151.201.4046
卡在这了
杨永(杨永) 08-19 15:18:09
访问4046端口没权限 (ength 0)
    10.71.182.97.37218 > 192.168.151.201.4046: Flags [S], cksum 0xf506 (correct), seq 2144183597, win 14600, options [mss 1460,sackOK,TS val 1372580057 ecr 0,nop,wscale 9], length 0
——————————————————————————————————————————————
   10.71.182.97.48860 > 192.168.151.201.111: Flags [F.], cksum 0x0a06 (correct), seq 61, ack 33, win 29, options [nop,nop,TS val 1372580057 ecr 798553157], length 0
15:16:24.794577 IP (tos 0x0, ttl 64, id 19956, offset 0, flags [DF], proto TCP (6), length 60)
    10.71.182.97.37218 > 192.168.151.201.4046: Flags [S], cksum 0xf506 (correct), seq 2144183597, win 14600, options [mss 1460,sackOK,TS val 1372580057 ecr 0,nop,wscale 9], length 0
15:16:24.795999 IP (tos 0x0, ttl 57, id 8451, offset 0, flags [DF], proto TCP (6), length 52)
    192.168.151.201.111 > 10.71.182.97.48860: Flags [.], cksum 0xe7ea (correct), ack 62, win 8760, options [nop,nop,TS val 798553157 ecr 1372580057], length 0
15:16:24.796009 IP (tos 0x0, ttl 57, id 8707, offset 0, flags [DF], proto TCP (6), length 52)
    192.168.151.201.111 > 10.71.182.97.48860: Flags [F.], cksum 0xe7e9 (correct), seq 33, ack 62, win 8760, options [nop,nop,TS val 798553157 ecr 1372580057], length 0
15:16:24.796014 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    10.71.182.97.48860 > 192.168.151.201.111: Flags [.], cksum 0x0a04 (correct), ack 34, win 29, options [nop,nop,TS val 1372580058 ecr 798553157], length 0
15:16:25.794390 IP (tos 0x0, ttl 64, id 19957, offset 0, flags [DF], proto TCP (6), length 60)
    10.71.182.97.37218 > 192.168.151.201.4046: Flags [S], cksum 0xf11e (correct), seq 2144183597, win 14600, options [mss 1460,sackOK,TS val 1372581057 ecr 0,nop,wscale 9], length 0
15:16:27.794397 IP (tos 0x0, ttl 64, id 19958, offset 0, flags [DF], proto TCP (6), length 60)
    10.71.182.97.37218 > 192.168.151.201.4046: Flags [S], cksum 0xe94e (correct), seq 2144183597, win 14600, options [mss 1460,sackOK,TS val 1372583057 ecr 0,nop,wscale 9], length 0
背景:问个技术问题:  如果代码中数据库连接使用域名,域名解析切换的时候,PHP是立即生效,还是会有DNS缓存?我知道CURL有缓存,数据库连接不太清楚,hosts绑定也 不靠谱,也会出现缓存。还是会有DNS缓存的,这块我遇到过好几次,最好restart php-fpm,甚至重启,有一个哥们大致总结了一下,特转之。

1、Linux修改本机别名/etc/hosts的hostName后经常不生效解决
Linux修改本机别名/etc/hosts的hostName后经常不生效,

比如我们/etc/hosts的内容如下:

#192.68.1.10 message.xxx.com

192.68.1.11 message.xxx.com


但是ping

message.xxx.com还是指向192.68.1.10。


一般2种解决方案:


1). 重启,这是最直接最可靠稳定的一种方法,如果有些时候不方便重启,则可以使用第二种方法。

2). 修改/etc/sysconfig/network文件,将HOSTNAME修改成对应的别名,如下:



NETWORKING=yes

HOSTNAME=host1
修改后重启网络服务
service network restart
(本质是/etc/init.d/network)


3).
如果重启服务器后,还是不起作用,应该是本机的dns缓存引起的。



查看nscd是否启用:
ps -ef|grep nscd

直接关闭Linux nscd 缓存服务:

/etc/init.d/nscd stop

2、Linux的DNS

     linux本身是没有dns缓存的,想使用dns缓存的话需要自己安装一个服务程序NSCD(name service cache daemon).

    nscd缓存三种服务passwd group hosts,所以它会记录三个库,分别对应源/etc/passwd, /etc/hosts 和 /etc/resolv.conf每个库保存两份缓存,一份是找到记录的,一份是没有找到记录的。每一种缓存都保存有生存时间(TTL).

     安装:

  yum install nscd

    修改配置文件/etc/nscd.conf,开启dns缓存,修改这一行

  enable-cache hosts yes。

如果启用了nscd 服务,才有dns 缓存,否则是没有dns缓存的。




     开启 、停止、 重启服务
     service nscd start | stop | restart

nscd的配置:

通过编辑/etc/nscd.conf文件,在其中增加如下一行可以开启本地DNS cache:

enable-cache hosts yes

阿里云主机上的配置如下:

[plain] view plain copy print?
[root@iZ2571ykq ~]# cat /etc/nscd.conf  
#logfile        /var/log/nscd.log  
threads         6  
max-threads     128  
server-user     nscd  
debug-level     5  
paranoia        no  
enable-cache    passwd      no  
enable-cache    group       no  
enable-cache    hosts       yes  
positive-time-to-live   hosts   5  
negative-time-to-live   hosts       20  
suggested-size  hosts       211  
check-files     hosts       yes  
persistent      hosts       yes  
shared          hosts       yes  
max-db-size     hosts       33554432  
相关参数的解释如下:

logfile debug-file-name:指定调试信息写入的文件名。

debug-level value:设置希望的调试级别。

threads number:这是启动的等待请求的线程数。最少将创建5个线程。

server-user user:如果设置了该选项,nscd将作为该用户运行,而不是作为root。如果每个用户都使用一个单独的缓存(-S参数),将忽略该选项

enable-cache service <yes|no>:启用或禁用制定的 服务 缓存。

positive-time-to-live service value:设置 service 在指定缓存中正的项目(成功的请求)的TTL(存活时间)。 Value 以秒为单位。较大的值将增加缓存命中率从而减低平均响应时间,但是将增加缓存的一致性问题。

negative-time-to-live service value:设置 service 在指定缓存中负的项目(失败的请求)的TTL(存活时间)。 Value 以秒为单位。如果存在由不在系统数据库中的uid(用户ID)(例如在以root身份解包linux 内核源代码时)所拥有的文件将明显改善性能;应该维持较小的值以降低缓存一致性问题。

suggested-size service value:这是内部散列表的大小, value 应该保持一个素数以达到优化效果。

check-files service <yes|no>:启用或禁用检查属于指定 服务 的文件的改变。这些文件是 /etc/passwd, /etc/group, 以及/etc/hosts。







nscd的查看和清除




nscd缓存DB文件在/var/db/nscd下。
nscd -g  查看统计信息

清除 nscd缓存:
nscd -i passwd
nscd -i group
nscd -i hosts
当然也先删除缓存库或者停掉nscd服务:
rm -f /var/db/nscd/hosts

service nscd restart

或者是直接停止nscd 服务
service nscd stop。

  


来自:http://blog.csdn.net/hguisu/article/details/49278355
虾米直播间下线,我都说听不到那夜微风的湖畔的直播间的歌曲了呢,小众产品说下线就下线。超不爽~

http://www.xiami.com/g/thread-12822606?spm=a1z1s.6843761.226669202.12.cmSDQT
摘录:
直播间最重要的功能是跟听。
直播间并不是你说的主播,听人家放个歌楼主就低俗了,就能撸管了?真TM智障。
现在直播间取消,还好移动端还可以跟听。所以还有人留在这里。
第一步:
在sublimetext的tools中developer下面的new plugin输入,保存为copyfile.py:
import sublime, sublime_plugin, os  
class FilenametoclipboardCommand(sublime_plugin.TextCommand):  
   def run(self, edit):  
      sublime.set_clipboard(os.path.basename(self.view.file_name()))  
      print(os.path.basename(self.view.file_name()))  

第二步:
保存到pakages/user/filenametoclipboard.py
class ListOpenFilesCommand(sublime_plugin.TextCommand):  
    def run(self, edit):  
        window = sublime.active_window()  
        views = window.views()  
        fileNames = ''  
        for view in views:  
            if view and view.file_name():  
                fileNames += os.path.basename(view.file_name())+'\n'  
        window.new_file().insert(edit, 0, "List of open files:\n\n"+fileNames)

第三步:preferences下面的key-bindings-user下面添加:
然后取key-bindings下加如
{ "keys": ["ctrl+alt+c"], "command": "filenametoclipboard" },
{ "keys": ["ctrl+alt+l"], "command": "list_open_files" }
保存,重启sublitext,即可,简单吧,呵呵

来自:http://blog.csdn.net/zhuboyan123/article/details/41249685
背景:想搭建一个Gitlab的两台机器进行都访问NAS网盘作为数据共享,而这样的好处是网盘内容是一致的,达到高可用,而同时对这个NAS网盘进行Git命令备份,防止网盘挂了,也能恢复,也是代码数据的高可用。
在阿里云上也申请了一个类似的NFS磁盘,但是挂载时是ROOT权限,我那个/home/git/.ssh想是git权限,于是提起工单:




售后工程师 :    您好,这样不支持,mount后的目录权限有ans服务端决定,目前不支持修改。  
2017-07-06 23:42:54
售后工程师 :    您好,技术反馈这个是nas服务端决定的,目前我方设置的权限是777 root:root  

经实践:
mkdir -p /home/git/mnt
ll  -d /home/git/mnt/
drwxr-xr-x 2 root root 4096 Jul  8 23:52 /home/git/mnt/  #Linux root用户id号是0
挂载NFS:
mount -t nfs -o vers=3,tcp 10.71.15.98:/Vol-01/backup /home/git/mnt
ll  -d /home/git/mnt/
drwxr-xr-x 11 1000 1000 114688 Jun 11 20:04 /home/git/mnt/
变成1000了,这个值是NFS服务端设置的,但是阿里云是0,也就不是Git账户的ID了。它是0,root用户id号是0,不敢该RootID值为非0值。

推测其配置如下:
打开/etc/exports文件,在末尾加入:
/home/kevin *(rw,sync,no_root_squash)
注:nfs允许挂载的目录及权限,在文件/etc/exports中进行定义,各字段含义如下:
/home/kevin:要共享的目录
* :允许所有的网段访问
rw :读写权限
sync:资料同步写入内在和硬盘
no_root_squash:nfs客户端共享目录使用者权限


nfs中exports中no_root_squash的意义:
no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。

增加no_root_squash可以轻松获得NFS主机共享目录读写权限.
=================================================================================
在文章后面有讲如何搭建NFS服务器:http://jackxiang.com/post/8299/
阅读全文
现在的夏天已经开启烧烤模式,好多车主都抱怨油耗增加的问题!那么如何控制节节攀升的油耗呢?今天为您带来夏季节油小妙招,只需掌握几个小诀窍,就能轻松省下一大笔银子呢!

开车出门,没有空调就是生不如死,但是开了空调又太耗油。那么怎么才能既省油又清凉?

第一步

准备一个喷雾,里面装上纯净水,上车后按3-4下,然后按下空调A/C键,快速降低车内温度。

阅读全文
软件无法启动
常见原因1: 未获得管理员权限
解决方法:右 键点击图标,选择以管理员身份运行。如果觉得每次这样操作很麻烦,可以直接在“我的电脑”点击右键选择管理。打开界面后,选择本地用户和组,单击用户,选 择administrator账户即可。打开administrator账户之后,把帐户已禁用选项关闭,重启电脑后即可获得管理员最高权限。
点击在新窗口中浏览此图片

摘自:http://tech.china.com/news/11146420/20160811/23265628.html
分页: 11/247 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]