Vim 8.0横空出世
Unix/LinuxC技术 jackxiang 2016-9-25 22:40
RHEL/CentOS和Fedora
delete old vim rpm pkg:
yum remove vim* -y
异步任务
以前在 Vim 里面调用外部一个程序(比如编译,更新 tags,Grep ,检查错误,git/svn commit)等,只能傻等着外部程序结束才能返回 Vim ,这也是 Vim 最受 emacs 诟病的地方,限制了很多可能性,导致NeoVim当年发布时,最先引入的新功能就是异步机制。如今 8.0中,可以在后台启动各种长时间运行的任务,并把输出重定向到 VimScript 里面的某个 callback 函数,和 nodejs的子进程管理模块类似,使得你可以一边浏览/编辑文件,一遍运行各种长时间编译类任务可以同时运行,并且把输出同步到 Vim 里的某个窗口中。
时钟机制
可以在 VimScript 中创建时钟,比如每隔100ms调用一下某个 VimScript 里面的函数,这样方便你定时检查各种状态,比如某项工作是否做完,或者某个与服务器的通信如何了。有这个机制配合 Python 可以实现纯脚本的终端,或者实现网络交互,实时读取一些股票信息并且显示在右下角之类的,这给 Vim 插件开发带来了更多可能性。
网络机制
可以用纯 VimScript + socket + json 和外部支持json的服务器进行通信,比如通知远程服务器做一件什么事情,或者查询个什么东西,不过使用 Timer + python 也可以达到同样的效果。
delete old vim rpm pkg:
yum remove vim* -y
异步任务
以前在 Vim 里面调用外部一个程序(比如编译,更新 tags,Grep ,检查错误,git/svn commit)等,只能傻等着外部程序结束才能返回 Vim ,这也是 Vim 最受 emacs 诟病的地方,限制了很多可能性,导致NeoVim当年发布时,最先引入的新功能就是异步机制。如今 8.0中,可以在后台启动各种长时间运行的任务,并把输出重定向到 VimScript 里面的某个 callback 函数,和 nodejs的子进程管理模块类似,使得你可以一边浏览/编辑文件,一遍运行各种长时间编译类任务可以同时运行,并且把输出同步到 Vim 里的某个窗口中。
时钟机制
可以在 VimScript 中创建时钟,比如每隔100ms调用一下某个 VimScript 里面的函数,这样方便你定时检查各种状态,比如某项工作是否做完,或者某个与服务器的通信如何了。有这个机制配合 Python 可以实现纯脚本的终端,或者实现网络交互,实时读取一些股票信息并且显示在右下角之类的,这给 Vim 插件开发带来了更多可能性。
网络机制
可以用纯 VimScript + socket + json 和外部支持json的服务器进行通信,比如通知远程服务器做一件什么事情,或者查询个什么东西,不过使用 Timer + python 也可以达到同样的效果。
ansible连接时出现:Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
Unix/LinuxC技术 jackxiang 2016-9-23 11:48
背景:第一次连接ansible的host里的一堆机器时,会出标题里面的错,解决办法如下:
vi /home/xiangdong/ansible/ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
—————————————————————————————————————————
提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中:
本篇就结合一个示例对其进行下了解。我在对之前未连接的主机进行连结时报错如下:
[root@361way.com ~]# ansible test -a 'uptime'
10.212.52.14 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
10.212.52.16 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
从上面的输出提示上基本可以了解到由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中。
方法1:
了解到问题原因为,我们了解到进行ssh连接时,可以使用-o参数将StrictHostKeyChecking设置为no,使用ssh连接时避免首次连接时让输入yes/no部分的提示。通过查看ansible.cfg配置文件,发现如下行:
[ssh_connection]
# ssh arguments to use
# Leaving off ControlPersist will result in poor performance, so use
# paramiko on older platforms rather than removing it
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s
所以这里我们可以启用ssh_args 部分,使用下面的配置,避免上面出现的错误:
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no
方法2:
在ansible.cfg配置文件中,也会找到如下部分:
# uncomment this to disable SSH key host checking
host_key_checking = False
默认host_key_checking部分是注释的,通过找开该行的注释,同样也可以实现跳过 ssh 首次连接提示验证部分。由于配置文件中直接有该选项,所以推荐用方法2 。
来自:http://www.361way.com/ansible-cfg/4401.html
vi /home/xiangdong/ansible/ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
—————————————————————————————————————————
提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中:
本篇就结合一个示例对其进行下了解。我在对之前未连接的主机进行连结时报错如下:
[root@361way.com ~]# ansible test -a 'uptime'
10.212.52.14 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
10.212.52.16 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
从上面的输出提示上基本可以了解到由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中。
方法1:
了解到问题原因为,我们了解到进行ssh连接时,可以使用-o参数将StrictHostKeyChecking设置为no,使用ssh连接时避免首次连接时让输入yes/no部分的提示。通过查看ansible.cfg配置文件,发现如下行:
[ssh_connection]
# ssh arguments to use
# Leaving off ControlPersist will result in poor performance, so use
# paramiko on older platforms rather than removing it
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s
所以这里我们可以启用ssh_args 部分,使用下面的配置,避免上面出现的错误:
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no
方法2:
在ansible.cfg配置文件中,也会找到如下部分:
# uncomment this to disable SSH key host checking
host_key_checking = False
默认host_key_checking部分是注释的,通过找开该行的注释,同样也可以实现跳过 ssh 首次连接提示验证部分。由于配置文件中直接有该选项,所以推荐用方法2 。
来自:http://www.361way.com/ansible-cfg/4401.html
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
我尝试在fedora core 3中安装apache 2. 当我解压了apache 2.0.54后使用configure工具并且加入了 --enable-so 或者 --enable-modules=so (两个我都试过了)
去make并且make install了。我希望在/apache2/modules/目录里有各种模块,但是这个文件最后只包含了一个httpd.exp文件。 为什么?哪里出错了?
谢谢
Because you're just telling apache to enable the use of shared modules. You also need to tell it to MAKE the shared modules.
You can use these compile flags:
--enable-mods-shared='headers rewrite dav' (where you list the mods. you want)
--enable-mods-shared=most ( compiles "most" modules )
--enable-mods-shared=all ( compiles all modules )
因为你只告诉了apache可以使用共享模块。你还需要告诉它要MAKE共享模块
你可以使用如下的这些编译标志
--enable-mods-shared='headers rewrite dav' (凡是你想编译的模块都可以写到后边的引号里面,以空格分隔)
--enable-mods-shared=most (编译最多的模块)
--enable-mods-shared=all (编译所有模块)
动态编译还是静态编译的效率问题:http://jackxiang.com/post/4029/
来自:http://m.blog.csdn.net/article/details?id=6977466
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
我尝试在fedora core 3中安装apache 2. 当我解压了apache 2.0.54后使用configure工具并且加入了 --enable-so 或者 --enable-modules=so (两个我都试过了)
去make并且make install了。我希望在/apache2/modules/目录里有各种模块,但是这个文件最后只包含了一个httpd.exp文件。 为什么?哪里出错了?
谢谢
Because you're just telling apache to enable the use of shared modules. You also need to tell it to MAKE the shared modules.
You can use these compile flags:
--enable-mods-shared='headers rewrite dav' (where you list the mods. you want)
--enable-mods-shared=most ( compiles "most" modules )
--enable-mods-shared=all ( compiles all modules )
因为你只告诉了apache可以使用共享模块。你还需要告诉它要MAKE共享模块
你可以使用如下的这些编译标志
--enable-mods-shared='headers rewrite dav' (凡是你想编译的模块都可以写到后边的引号里面,以空格分隔)
--enable-mods-shared=most (编译最多的模块)
--enable-mods-shared=all (编译所有模块)
动态编译还是静态编译的效率问题:http://jackxiang.com/post/4029/
来自:http://m.blog.csdn.net/article/details?id=6977466
apache编译全部模块
Unix/LinuxC技术 jackxiang 2016-9-21 08:33
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
发现 3 个已存在的 RPM 数据库问题, 'yum check'
Unix/LinuxC技术 jackxiang 2016-9-20 19:56
在某个论坛里找到了解决方法。
package-cleanup --cleandupes
1
然后再
yum install openssh
1
就可以了
地址:
http://bbs.chinaunix.net/thread-4173797-1-1.html
更多:http://www.path8.net/tn/archives/5974
package-cleanup --cleandupes
1
然后再
yum install openssh
1
就可以了
地址:
http://bbs.chinaunix.net/thread-4173797-1-1.html
更多:http://www.path8.net/tn/archives/5974
使用redis加速ansible
Unix/LinuxC技术 jackxiang 2016-9-19 17:36
背景:这块儿说是加速,还真是不明白,先扔这儿。
使用redis加速ansible
我们知道,每次使用ansible时候都要收集系统信息,那一步占用挺多时间的,我们可以用redis把GATHERING的时间给省下来。
1. ansible.cfg
[defaults]
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
2. install redis
mac下面
brew install redis
vim /usr/local/etc/redis.conf
···
daemonize yes
···
/usr/local/bin/redis-server /usr/local/etc/redis.conf
3. install python driver
sudo easy_install pip
sudo pip install redis
如果redis端口不是6379,可以用fact_caching_connection限定:
fact_caching_connection = 127.0.0.1:6378
来自:http://blog.csdn.net/aca_jingru/article/details/46532063
使用redis加速ansible
我们知道,每次使用ansible时候都要收集系统信息,那一步占用挺多时间的,我们可以用redis把GATHERING的时间给省下来。
1. ansible.cfg
[defaults]
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
2. install redis
mac下面
brew install redis
vim /usr/local/etc/redis.conf
···
daemonize yes
···
/usr/local/bin/redis-server /usr/local/etc/redis.conf
3. install python driver
sudo easy_install pip
sudo pip install redis
如果redis端口不是6379,可以用fact_caching_connection限定:
fact_caching_connection = 127.0.0.1:6378
来自:http://blog.csdn.net/aca_jingru/article/details/46532063
[实践OK]linux进程io之哪个进程占用磁盘io较多,LINUX下找出哪个进程造成的IO等待很高的方法之iotop。
Unix/LinuxC技术 jackxiang 2016-9-18 12:01
安装一下iotop程序。
可以通过yum install iotop 安装:
通过rpm -qa |grep iotop 确认是否已经安装好, 直接通过io tab补全查看有这个命令
使用iotop命令: iotop -o 直接查看输出比较高的磁盘读写程序。
使用该命令有个条件,Linux内核要高于2.6.20的版本,版本过低则没有此命令:yum install iotop 安装,后:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
14453 be/4 mysql 3.87 K/s 603.68 K/s 0.00 % 10.13 % mysqld --basedir=/usr/local/mysql --data~.pid --socket=/tmp/mysql.sock --port=3306
1 be/4 root 1691.07 K/s 0.00 B/s 31.45 % 9.55 % systemd --switched-root --system --deserialize 21
14449 be/4 mysql 11.61 K/s 247.66 K/s 0.00 % 9.53 % mysqld --basedir=/usr/local/mysql --data~.pid --socket=/tmp/mysql.sock --port=3306
LINUX下找出哪个进程造成的IO等待很高的方法 :
在本机测试通过^^
抓哪个进程干坏事前要先停掉syslog
/etc/init.d/syslog stop
echo 1 > /proc/sys/vm/block_dump
dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head
1423 kjournald
1075 pdflush
209 indexer
3 cronolog
1 rnald
1 mysqld
不要忘记在抓完之后关掉block_dump和启动syslog
echo 0 > /proc/sys/vm/block_dump
/etc/init.d/syslog start
来自:http://blog.itpub.net/16978544/viewspace-696756/
可以通过yum install iotop 安装:
通过rpm -qa |grep iotop 确认是否已经安装好, 直接通过io tab补全查看有这个命令
使用iotop命令: iotop -o 直接查看输出比较高的磁盘读写程序。
使用该命令有个条件,Linux内核要高于2.6.20的版本,版本过低则没有此命令:yum install iotop 安装,后:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
14453 be/4 mysql 3.87 K/s 603.68 K/s 0.00 % 10.13 % mysqld --basedir=/usr/local/mysql --data~.pid --socket=/tmp/mysql.sock --port=3306
1 be/4 root 1691.07 K/s 0.00 B/s 31.45 % 9.55 % systemd --switched-root --system --deserialize 21
14449 be/4 mysql 11.61 K/s 247.66 K/s 0.00 % 9.53 % mysqld --basedir=/usr/local/mysql --data~.pid --socket=/tmp/mysql.sock --port=3306
LINUX下找出哪个进程造成的IO等待很高的方法 :
在本机测试通过^^
抓哪个进程干坏事前要先停掉syslog
/etc/init.d/syslog stop
echo 1 > /proc/sys/vm/block_dump
dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head
1423 kjournald
1075 pdflush
209 indexer
3 cronolog
1 rnald
1 mysqld
不要忘记在抓完之后关掉block_dump和启动syslog
echo 0 > /proc/sys/vm/block_dump
/etc/init.d/syslog start
来自:http://blog.itpub.net/16978544/viewspace-696756/
[实践OK]sublime text3主题安装及下载使用方法,包括显示空格。
Unix/LinuxC技术 jackxiang 2016-9-12 21:46
背景:一直想为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 输入中文,不能跟随,谁晓得如何处理??
问题?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 输入中文,不能跟随,谁晓得如何处理??
YUM 公钥认证及导入及CentOS Linux自建yum源自制公钥。
Unix/LinuxC技术 jackxiang 2016-9-11 17:40
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
来自: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
vi查看空格、制表符等特殊符号
Unix/LinuxC技术 jackxiang 2016-9-8 10:09
背景:在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
在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
[实践OK]指针数组和数组指针的理解。
Unix/LinuxC技术 jackxiang 2016-9-7 16:11
背景:在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、下面通过实例来说明数组指针与指针数组的区别:
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、下面通过实例来说明数组指针与指针数组的区别:
swoole的多端口监听
Unix/LinuxC技术 jackxiang 2016-9-6 09:12
背景:做物联网时候有时候咱不搞p2p通讯而用服务器中转,而中转时候有些变量想共享如手机端的温度值的websocket推送,和硬件传感器的网络上报温度基于tcp/ip,这个温度值经过swoole的多端口实时共享,那么这个需求在swoole1.8.0里面得到实现和满足。
https://linkeddestiny.gitbooks.io/easy-swoole/content/book/chapter02/port.html
https://linkeddestiny.gitbooks.io/easy-swoole/content/book/chapter02/port.html
[实践OK]linux 解压rpm包里面的文件到目录,实现提取动态链接库或查看核对。
Unix/LinuxC技术 jackxiang 2016-8-29 19:45
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
[root@iZ25z0ugwgtZ tmp]# rpm2cpio php-5.4.16-36.3.el7_2.x86_64.rpm |cpio -div
一般都要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
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
使用redis-trib.rb-官方推出的管理redis集群的工具。
Unix/LinuxC技术 jackxiang 2016-8-23 15:59
需要安装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
在开始搭建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
[实践OK]tcp/ip三次握手实践学习,自己截三次握手抓包图。
Unix/LinuxC技术 jackxiang 2016-8-23 09:35
一)过滤出三次握手的第一次:
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
阅读全文
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
阅读全文
Linux下/var/log/btmp文件
Unix/LinuxC技术 jackxiang 2016-8-22 15:36
今天查看了一下服务器,发现/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
通过此文件发现有几个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