Fork me on GitHub
Suzf  Blog

Archive Linux

Anaible 执行远程脚本

ansible 执行远程脚本 首先创建一个shell脚本

cat > /tmp/test.sh << EOF
#!/bin/bash
echo \`date\`
EOF

然后把该脚本分发到各个机器上

ansible -i .ansible.hosts alpha -m copy  -u lucy -k -a 'src=/tmp/test.sh dest=/tmp/test.sh mode=0755'
# ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"

最后是批量执行该shell脚本

ansible -i .ansible.hosts alpha -m shell -u lucy -k -a 'bash /tmp/test.sh'
# ansible testhost -m shell -a "/tmp/test.sh"

shell模块,还支持远程执行命令并且带管道

ansible -i .ansible.hosts alpha -m shell -u lucy -k -a 'cat /etc/passwd | wc -l'
# ansible testhost -m shell -a "cat /etc/passwd|wc -l "

 

Linux 下 僵尸进程与D进程

 1 . 关于ZOMBIE进程

这些进程已经死亡,但没有释放系统资源,包括内存和一些一些系统表等, 如果这样的进程很多,会引发系统问题。用ps -el看出的进程状态如果是Z,就是僵尸进程。

Z 之所以杀不死,是因为它已经死了,否则怎么叫 Zombie(僵尸)呢?冤魂不散,自然是生前有结未解之故。在UNIX/Linux中,每个进程都有一个父进程,进程号叫PID(Process ID),相应地,父进程号就叫PPID(Parent PID)。当进程死亡时,它会自动关闭已打开的文件,舍弃已占用的内存、交换空间等等系统资源,然后向其父进程返回一个退出状态值,报告死讯。如果程序有 bug,就会在这最后一步出问题。儿子说我死了,老子却没听见,没有及时收棺入殓,儿子便成了僵尸。在UNIX/Linux中消灭僵尸的手段比较残忍,执 行 ps axjf 找出僵尸进程的父进程号(PPID,第一列),先杀其父,然后再由进程天子 init(其PID为1,PPID为0)来一起收拾父子僵尸,超度亡魂,往生极乐。注意,子进程变成僵尸只是碍眼而已,并不碍事,如果僵尸的父进程当前有 要务在身,则千万不可贸然杀之。

ZooKeeper 概述

1. ZooKeeper概述

hadoop的一个子项目,是对Google分布式同步系统 chubby 的开源实现。
针对大型分布式系统的可靠协调系统。包括 配置维护,名字服务,分布式同步,组服务 等在内的功能。
目标: 封装复杂,易出错的关键服务,将简单的易用的接口和性能高效,稳定的协同工作系统提供给用户。

[译] How to create/restore a slave using GTID replication in MySQL 5.6

在 Mysql 5.6 中,里面有许多新的特性;我个人认为其中最有用的是在复制中支持 全局事务ID(Global Transaction ID)。
这篇文章不是用来介绍什么是GTID,关于它的工作原理这里有很多文章介绍:
http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html

这里值得一提的是,如果你想GTID支持log_slave_updates,需要启用从服务器和考虑到性能的影响。

还有,这篇文章更趋向于实用,我们将要看到如何使用 GTID 创建/恢复 新的slaves 从 master上。

Debian Fedora常用命令管理包

对大家推荐很好使用的Debian Fedora命令系统,像让大家对Debian Fedora命令系统有所了解,然后对Debian Fedora命令统全面讲解介绍,Debian Fedora 的包管理命令。

=== Debian Fedora 中dpkg命令 ===
dpkg -i --install* dpkg --install w3m_0.5.2-2+b1_i386.deb 
dpkg -r --remove* dpkg --remove w3m
dpkg -P --purge* dpkg --purge w3m
dpkg -l --list* 列出当前系统里安装好的包名
dpkg -L --listfiles* 列出已经安装好的包的文件* dpkg -L w3m
dpkg -s --status* 包的状态表示* dpkg --status w3m
dpkg -S --search* 查看一个系统文件归属于哪个包* dpkg --search /etc/ucf.conf
dpkg -c --contents* 显示包里内容* dpkg -c w3m_0.5.2-2+b1_i386.deb
dpkg --unpack* 解压包
dpkg --configure* 配置包
dpkg -R --recursive* 递归处理文件夹内的内容

=== Debian Fedora 中apt-get命令 ===
apt-get install * 安装一个包
apt-get remove * 删除一个包
apt-get update* 更新APT-GET数据库
apt-get dist-upgrade* 从APT-GET数据库里,所有组件更新到最新状态
apt-get upgrade* 更新一个包

=== Debian Fedora 中apt-cache命令 ===
apt-cache show* 显示一个包的信息
apt-cache showpkg* 显示一个包的详细信息
apt-cache depends* 显示当前包的依赖信息
apt-cache search* 通过一个关键字,去查询含有这个关键字的包

=== Debian Fedora 中aptitude命令 ===
这是一个CUI工具,可以人机交互的操作.
所以,没有具体的参数,选项.
里面还有扫雷游戏,真的很好玩.

===Debian Fedora 中 rpm命令 ===rpm -i --install w3m_aa.rpm* 安装一个RPM包
rpm -F --freshen w3m_aa.rpm* 如果已经安装过的包,进行更新
rpm -U --upgrade w3m_aa.rpm* 如果没安装,就安装;如果已经安装,就更新;这个比较常用
rpm -e w3m* 删除一个已经安装的包
rpm -h* 显示安装进度条, 一般和其它安装选项一起使用
rpm -v * 显示详细信息
rpm --nodeps* 无视依赖,强制安装/删除
rpm --force* 强制执行安装,更新
rpm -qa* 显示所有已经安装的包名
rpm -qi w3m* 显示已经安装好的包的信息
rpm -ql w3m* 显示已经安装好的包的所有文件
rpm -qc w3m* 显示已经安装好的包的设定文件; 这个比较有用
rpm -qd w3m* 显示已经安装好的包的相关文档 就是/usr/share/doc下有哪些相关文件
rpm -q --changelog w3m* 显示包的版本变化履历,注意,-q --changelog 这是一个命令, 不是同义词.
rpm -qpi w3m_aa.rpm * 显示rpm包的信息
rpm -qpl w3m_aa.rpm* 显示rpm包里所包含的文件
rpm2cpio w3m_aa.rpm | cpio -id* 把RPM里的文件释放到当前文件夹下面
rpm -V w3m* 对于已经安装好的包的系统文件,进行更新检查.如有变化,会有提示
S:大小变化了.
5:MD5检查,就是内容变化了.
M:Permitt,变化了
U:User变了
G:Group变了
T:更改时间有变化

=== Debian Fedora 中yum 命令===
/etc/yum.conf
/etc/yum.repos.d/
yumdownloader --source w3m* 下载包的源代码
yum check-update* 查看系统里所有可更新的包
yum update* 所有可更新的包进行更新
yum clean all* clean : 清除CACHE里的数据,参数 all 表示所有种别的cache全部删除
yum insatll w3m* 安装包
yum update w3m* 在线更新包,如果原来没有安装的话,不会安装.
yum remove w3m* 删除包w3m
yum list* 列出所有包的安装与否信息及已经安装的版本
yum list w3m* 列出指定包的安装与否及版本信息
yum info w3m* 打出指定的包的相关信息
yum groupinstall prg-group* 安装一组程序,比如 "Chinese Support"
yum grouplist* 显示可用的 程序组
yum gorupinfo prg-group* 显示程序组的信息,并显示里面包含的所有包名
yum search keyword* 显示包含keyword 的包名

 

Debian 快速参考手册

http://qref.sourceforge.net/Debian/quick-reference/index.zh-cn.html#contents

 

The Debian GNU/Linux FAQ

https://www.debian.org/doc/manuals/debian-faq/index.zh-cn.html#contents

 

How-to rechange debian system root password

Debian Linux 系统忘记密码怎么办?
看到很多人老在论坛里面问这个问题,有的人给的答案也不多。特拿出来,随便当笔记用。

对于一些版本的OS(如RedHat)来说,编辑grub,在后面加上“single”即可进入单用户模式。
但是对于debian来说,这种方式是无效的,因为debian进入单用户模式也需要你输入root用户的密码。

1.在grub选项菜单’Debian GNU/Linux,…(recovery mode)’,按e进入编辑模式

2.编辑kernel那行最后面的 ro single 改成 rw single init=/bin/bash,按 b / F10 执行重启

3.进入后执行下列命令

如果有 lvm , 可将卷组 激活后在挂载
#  lvscan                           #查看卷组激活状态,及卷组中有哪些逻辑卷。
ACTIVE            '/dev/vol1/opt' [16.50 GiB] inherit
ACTIVE            '/dev/vol1/usr' [1.91 GiB] inherit
... ...
#  vgchange -ay /dev/vol1           # 激活卷组

... ...

root@(none)# mount -a

root@(none)# passwd root

root@(none)# reboot

 

Linux commands curl and wget

1、curl(文件传输工具)

常用参数如下:

-c,--cookie-jar:将cookie写入到文件

-b,--cookie:从文件中读取cookie

-C,--continue-at:断点续传

-d,--data:http post方式传送数据

-D,--dump-header:把header信息写入到文件

-F,--from:模拟http表达提交数据

-s,--slient:减少输出信息

-o,--output:将信息输出到文件

-O,--remote-name:按照服务器上的文件名,存在本地

--l,--head:仅返回头部信息

-u,--user[user:pass]:设置http认证用户和密码

-T,--upload-file:上传文件

-e,--referer:指定引用地址

-x,--proxy:指定代理服务器地址和端口

-w,--write-out:输出指定格式内容

--retry:重试次数

--connect-timeout:指定尝试连接的最大时间/s

使用示例:

例1:抓取页面到指定文件,如果有乱码可以使用iconv转码

# curl -o baidu.html www.baidu.com

# curl –s –o baidu.html www.baidu.com |iconv -f utf-8  #减少输出信息

例2:模拟浏览器头(user-agent)

# curl -A "Mozilla/4.0 (compatible;MSIE 6.0; Windows NT 5.0)" www.baidu.com

例3:处理重定向页面

# curl –L http://192.168.1.100/301.php   #默认curl是不处理重定向

例4:模拟用户登陆,保存cookie信息到cookies.txt文件,再使用cookie登陆

# curl -c ./cookies.txt -F NAME=user -F PWD=***URL            #NAME和PWD是表单属性不同,每个网站基本都不同

# curl -b ./cookies.txt –o URL

例5:获取HTTP响应头headers

# curl -I http://www.baidu.com

# curl -D ./header.txt http://www.baidu.com   #将headers保存到文件中

例6:访问HTTP认证页面

# curl –u user:pass URL

例7:通过ftp上传和下载文件
# curl -T filename ftp://user:pass@ip/docs  #上传

# curl -O ftp://user:pass@ip/filename   #下载

博客:http://lizhenliang.blog.51cto.com

2、wget(文件下载工具)

常用参数如下:

2.1 启动参数

-V,--version:显示版本号

-h,--help:查看帮助

-b,--background:启动后转入后台执行

2.2 日志记录和输入文件参数

-o,--output-file=file:把记录写到file文件中

-a,--append-output=file:把记录追加到file文件中

-i,--input-file=file:从file读取url来下载

2.3 下载参数

-bind-address=address:指定本地使用地址

-t,-tries=number:设置最大尝试连接次数

-c,-continue:接着下载没有下载完的文件

-O,-output-document=file:将下载内容写入到file文件中

-spider:不下载文件

-T,-timeout=sec:设置响应超时时间

-w,-wait=sec:两次尝试之间间隔时间

--limit-rate=rate:限制下载速率

-progress=type:设置进度条

2.4 目录参数

-P,-directory-prefix=prefix:将文件保存到指定目录

2.5 HTTP参数

-http-user=user:设置http用户名

-http-passwd=pass:设置http密码

-U,--user-agent=agent:伪装代理

-no-http-keep-alive:关闭http活动链接,变成永久链接

-cookies=off:不使用cookies

-load-cookies=file:在开始会话前从file文件加载cookies

-save-cookies=file:在会话结束将cookies保存到file文件

2.6 FTP参数

-passive-ftp:默认值,使用被动模式

-active-ftp:使用主动模式

2.7 递归下载排除参数

-A,--accept=list:分号分割被下载扩展名的列表

-R,--reject=list:分号分割不被下载扩展名的列表

-D,--domains=list:分号分割被下载域的列表

--exclude-domains=list:分号分割不被下载域的列表

使用示例:

例1:下载单个文件到当前目录下,也可以-P指定下载目录

# wgethttp://nginx.org/download/nginx-1.8.0.tar.gz

例2:对于网络不稳定的用户可以使用-c和--tries参数,保证下载完成

# wget --tries=20 -c http://nginx.org/download/nginx-1.8.0.tar.gz

例3:下载大的文件时,我们可以放到后台去下载,这时会生成wget-log文件来保存下载进度

# wget -b http://nginx.org/download/nginx-1.8.0.tar.gz

例4:可以利用—spider参数判断网址是否有效

# wget --spider http://nginx.org/download/nginx-1.8.0.tar.gz

例5:自动从多个链接下载文件

# cat url_list.txt   #先创建一个URL文件

http://nginx.org/download/nginx-1.8.0.tar.gz

http://nginx.org/download/nginx-1.6.3.tar.gz

# wget -i url_list.txt

例6:限制下载速度

# wget --limit-rate=1m http://nginx.org/download/nginx-1.8.0.tar.gz

例7:登陆ftp下载文件

# wget --ftp-user=user --ftp-password=pass ftp://ip/filename

来源: 互联网

 

LVM 基本原理与实践

目录:
一: LVM原理详解
二: LVM创建
三: LVM的增大和放缩
四: LVM快照
五: 相关扩展阅读
六: LVM 优缺点

VIM space and tab Mutual conversion

VIM space 与 tab 互转

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:
set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)
set expandtab

ret 是replace tab 的缩写
用法: [range]ret[ab]! [new-tabstop]

对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:

TAB替换为空格:
< 将第一行到文件尾的tab转换成space,每个tab用4个space替代。 >

方案A
:set ts=4
:set expandtab
:%retab!

方案B
:set expandtab
:%ret! 4
注:如果没有给定4,则用当前的tab宽度设定替换为space。

空格替换为TAB:

:set ts=4
:set noexpandtab
:%retab!

*** 加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。***

其它相关命令:
:set tabstop=4        设定tab宽度为4个字符
:set shiftwidth=4     设定自动缩进为4个字符
:set expandtab        用space替代tab的输入
:set noexpandtab      不用space替代tab的输入