Archive for the ‘shell脚本’ Category

wget 脚本常用选项

wget -c url    支持断点续传
wget -c http://www.hardwork.cn/1.rar

wget -P 把文件存储在哪个位置
wget -P /usr/local/src http://www.hardwork.cn/1.rar

wget –http-user=name –http-password=pw url
wget –http-user=software –http-password=123456 http://www.hardwork.cn/1.rar
如果页面有验证,使用http-user和http-password做验证

shell脚本从文件中按行读取数据,并且赋值到数组中的几种方法。

从ip.txt里读取IP.然后把IP地址赋值到一个数组里.
IP文件如下:
Address:  220.181.26.163
Address:  220.181.26.174
Address:  220.181.26.175
Address:  220.181.26.176
Address:  220.181.19.228
Address:  220.181.19.229
Address:  220.181.26.161
Address:  220.181.26.162

方法一:
for x in ` awk ‘{print $2}’ ip.txt `
{
echo $x
}
方法二:
ARRAY=($(awk ‘{print $2}’ ip.txt))
方法三:
n=0;while read a b;do array[$n]=$b;((n++));done<ip.txt

方法四:
n=1
while ((n<=$(cat ip.txt|wc -l)))
do
    ipaddr[$n]=$(cat ip.txt|sed -n “${n}p”|awk ‘{print $2}’)
    ((n+=1))
done
n=`expr $n – 1`

dos格式文件转换为unix文件格式

dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也有可能看不到,但是在vi的时候,会在下面显示此文件的格式,比如 “dos.txt” [dos] 120L, 2532C 字样,表示是一个[dos]格式文件,如果是MAC系统的,会显示[MAC],因为文件格式的原因有时会导致我们的unix程序,或者shell程序出现错误,那么需要把这些dos文件格式转换成unix格式,方法是 vi dos.txt

:set fileformat=unix

:w   这样文件就转换成unix格式文件了, 一般在windows机器上编写好了文件传到unix下就可能会出现这样的情况.  用命令:set ff?  可以看到dos或unix的字样.

  用:set ff=unix把它强制为unix格式,也可以用sed 这样的工具来做:  sed ’s/^M//’ filename > tmp_filename  其中^M是同时Ctrl+V+M按出来的,表示回车。

其它“怪招”:

1. 使用vi

vi dos_file.txt

:%s/^M//g

其中^M 必须是同时按 Ctrl+V+M ,表示回车。不是直接输入 ^M ,那没有用的, :-) 。2. 使用tr

命令:tr -d “\015″ dos_file.txt3. 使用perlcat dos_file.txt | perl -pe ‘~s/\r//g’ > dos_file.txt【VIM】DOS、Mac 和 Unix 文件http://vimcdoc.sourceforge.net/doc/usr_23.html

很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称

为回车,<CR>),另一个字符把纸上移一行 (称为换行,<LF>)。

当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行

尾。UNIX 开发者决定他们可以用 <Line Feed> 一个字符来表示行尾。Apple 开发者规定

了用 <CR>。开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的 <CR><LF>。

那意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方

面的麻烦。Vim 编辑器自动识别不同文件格式,并且不劳你操心就把事情给办妥了。

选项 ‘fileformats’ 包含各种各样的格式,Vim 会在编辑一个新文件之初尝试该选项

定义的各种格式。例如,下面这个命令告诉 Vim 先尝试用 UNIX 格式,其次,尝试

MS-DOS 格式: :set fileformats=unix,dos编辑一个文件时,你将注意到 Vim 给出的信息消息报中包括文件所用的格式。如果你编

辑的是本地格式文件 (你编辑的文件格式和所用系统一致),你就不会看到任何格式名。

因此在 Unix 系统上编辑一个 Unix 格式文件不会产生任何关于格式的信息。但你若编辑

一个 dos 文件,Vim 将这样通知你: “/tmp/test” [dos] 3L,71C 如果是 Mac 文件,你会看到 “[mac]“。

探测到的文件格式会被存入 ‘fileformat’ 选项。执行下面这个命令可以显示你当前

使用的文件格式: :set fileformat?Vim 能使用的三种格式如下: unix <LF>

dos <CR><LF>

mac <CR>

使 用 MAC 格 式在 Unix 上,<LF> 用于分行。但 <CR> 字符混在文本行中间也非罕见。这种情况碰巧经

常发生在 Vi (和 Vim) 脚本内。

在采用 <CR> 作为换行符的 Macintosh 上,<LF> 字符也有可能混在文本行中间。

结果,很难 100% 肯定一个同时包含 <CR> 和 <LF> 的文件究竟是 Mac 还是 Unix 格

式。所以,Vim 假设你一般不会在 Unix 上编辑一个 Mac 文件,所以干脆对这种文件格

式不作检查。果真要检查此种格式,就把 “mac” 加入 ‘fileformats’: :set fileformats+=mac然后 Vim 就会猜测文件格式。要当心, Vim 可能会猜错的。

强 制 格 式如果你用往日美好的 Vi 来尝试编辑一个采用 MS-DOS 格式的文件,你将会发现每一行的

末尾有个 ^M 字符。(^M 就是 <CR>)。而 Vim 的自动探测功能就避免了这个问题。莫非

你确实要按那个样子来编辑这个文件吗?那么你需要强制 Vim 忽略文件格式而使用你指

定的格式: :edit ++ff=unix file.txt字符串 “++” 告诉 Vim 后面跟的是选项名,以取代其默认值。但仅作用于这一个命令。

“++ff” 用于 ‘fileformat’ 选项。你也可以用 “++ff=mac” 或 “++ff=dos”。

这样用法并非适用于任意选项,目前 Vim 仅仅实现了 “++ff” 和 “++enc”。用全称

“++fileformat” 和 “++encoding” 也行。

转 换你可以用 ‘fileformat’ 选项把文件从一种格式转换为另一种。例如,假定你有个名为

README.TXT 的 MS-DOS 文件,你要把它转换成 UNIX 格式。首先编辑这个采用 MS-DOS

格式的文件:

vim README.TXTVim 将识别出那是一个 dos 格式文件。现在把这个文件的格式改为 UNIX: :set fileformat=unix

:write这个文件就以 Unix 格式存盘了。

screen命令

crol+a   d  退出screen的shell,但程序还可以运行,

下次只需要screen -ls,

然后screen -r 8856

即可连上以前的shell,其中8856是运行screen -ls中的一个结果中的一个数字。

rsync客户端使用方法

A:192.168.0.10
B:192.168.0.20
A是rsync server
在B服务器上,把A中的rsync server中定义的目录webdata,同步到B上的/data/webdata目录

在B服务器上运行如下命令
rsync -vaz –progress yanjin@192.168.0.10::webdata /data/webdata/

其中,yanjin为在rsync.conf文件中的密码文件定义的用户
两个冒号::表示通过rsync,而不是通过ssh来传输文件,一个冒号,表示通过ssh
webdata为rsync.conf中定义的目录

服务器被入侵后的一些日志分析

命令:

1、grep “xyz” 路径
  grep “2010:18:38:” 20100205-host.access.log-back >> 18.30.txt

2、grep -E “jpg|png|gif” -v 18.30.txt
  搜索不包含jpg,png,gif的行,-v是不匹配的意思

find /web/ -mtime -60|grep php

find /web/|grep html|xargs grep twolye

shell中的命令的一些特殊的情况,类似于《linux一句话》

1、要删除第一个字符为“-”的文件 (例如“-foo”),请使用以下其中一种方法:
  rm — -foo
  rm ./-foo
以上也可以类推。例如mv ./-foo test

CPAN基本介绍
1.perl模块是perl的库,就好比c/c++写的可执行文件需要用到.a静态库和.so动态库一样。
2.CPAN(http://www.cpan.org/)是perl官方站点(http://www.perl.com/)的一个“军火库”,里面有上百万的perl模块,用来支撑perl强大的功能,从生物工程到天文计算,从宏观世界到原子力学,无所不有。
3.为了很方便的安装perl模块,有人做了一个CPAN模块,用cpan命令来管理和安装CPAN网站上的所有perl模块。
cpan命令
1.cpan命令其实也是一个perl脚本,对于不同版本的perl,可能cpan命令的功能强弱有所不同;
2.执行cpan,我们进入了一个类似bash的界面,暂且叫做cpanshell,cpanshell上可以像bash一样输入命令,这个命令是CPAN所特有的。
3.我们一般常用到的cpan命令主要有:
1.help
•help命令是显示帮助信息,这里面包含了所有的cpan命令,虽然看上去只有一屏,但功能确是非常强大哟!
2.m //
这个是一个模式,用来查找perl模块,有点像perl正则里面的m//,用于匹配(match),但这里m与//之间多了一个空格,且这里的m指
modules,意思是根据模块名称查找,//内可以使用正则; 同理
a(authors)、b(bundles)、d(distributions)和i(in all)都有这种模式。
3.install
•install命令是安装perl模块,一般是接模块名称,而不是压缩包名字。比如DBD::mysql,而不是DBD-mysql,即

   install DBD::mysql
CPAN配置
•CPAN安装是网络安装,如果没有网络,使用cpan命令是无法安装的,所以CPAN安装的速度是与网络有直接关系;•当然,我们可以选择一个快速的镜像站点来安装CPAN模块,那如何配置呢?

1.如果是第一次使用CPAN,那么执行cpan命令的时候,cpan命令会给出配置的友好提示,不过很多人都对这个友好提示的繁冗程度显得很不耐烦,不过新版本的CPAN模块已经改善了这一缺点;

2.如果不是第一次使用CPAN,而以前别人配置的CPAN镜像站点出了问题不能下载,或镜像站点太慢等等修改一下配置信息,可以重新配置CPAN:

 

 

  CPAN>o conf init

•若不是root用户,使用cpan命令或perl -MCPAN -e shell也可以进行配置后安装:

1.首先,配置好CPAN配置,这个配置可以使用非root用户配置好,配置好的内容一般在$HOME/.cpan/CPAN/MyConfig.pm文件内;

2.配置文件MyConfig.pm中配置信息中确定有 ‘makepl_arg’=>q[PREFIX=~/perl] 这一行,~/perl为你当前用户有权限读、写和执行的目录;

3.最后,设置 PERL5LIB 环境变量,把 ~/perl 下的相关目录添加进 PERL5LIB。以 bash shell 为例,在 ~/.bash_profile 里添加如下即可:

 

 

  export PERL5LIB=~/perl/lib:\  ~/perl/lib/perl5/5.8.0/i386-linux-thread-multi:\  ~/perl/lib/perl5/5.8.0:\  ~/perl/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi:\  ~/perl/lib/perl5/site_perl/5.8.0:\  ${PERL5LIB}
模块检测
•运行

 

  $perl -e ‘use Module’

如果没有任何输出,则表示模块 Module 成功安装

 
•打印模块版本

 

  $perl -MModule -e ‘print $Module::VERSION;’
注意事项
1.使用 CPAN 安装模块有时候会 make test 一步失败。可到 $HOME/.cpan/build 的相应目录下直接 make install;

2.第一次安装 CPAN 时,可以先安装:

 

  install Bundle::CPAN

 
  installBundle::CPANxxl?

这样以后的安装包安装就会少需要的依赖,建议安装。


京ICP备07010914号