存档

‘Linux工具使用’ 分类的存档

linux screen 命令详解

2017年4月28日 评论已被关闭

http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

一、背景

系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

二、简介

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

  • 会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
  • 会话共享
Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

GNU’s Screen 官方站点:http://www.gnu.org/software/screen/

三、语法

# screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

参数说明

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或–list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

四、常用screen参数

screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> Time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

五、使用 screen

5.1 安装screen

流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。

[root@TS-DEV ~]# yum install screen
[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[root@TS-DEV ~]#

5.2 创建一个新的窗口

安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:

[root@TS-DEV ~]# screen -S david

screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:

[root@TS-DEV ~]# screen vi david.txt

screen创建一个执行vi david.txt的单窗口会话,退出vi 将退出该窗口/会话。

5.3 查看窗口和窗口名称

打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:

0$ bash  1-$ bash  2*$ bash

这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。

Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。

5.4 会话分离与恢复

你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:

[root@TS-DEV ~]# screen vi /tmp/david.txt

之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:

暂时中断会话

半个小时之后回来了,找到该screen会话:

[root@TS-DEV ~]# screen -ls

重新连接会话:

[root@TS-DEV ~]# screen -r 12865

一切都在。

当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。

这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:

5.5 清除dead 会话

如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:

5.6 关闭或杀死窗口

正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。

如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。

除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。

六、screen 高级应用 

6.1 会话共享

还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:

[root@TS-DEV ~]# screen -x

这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

6.2 会话锁定与解锁

Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。

也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。

6.3 发送命令到screen会话

在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:

[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com

这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。

6.4 屏幕分割

现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。分屏以后,可以使用C-a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。

可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。

6.5 C/P模式和操作

screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a <Esc>或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。

一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。

6.6 更多screen功能

同大多数UNIX程序一样,GNU Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。

以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg…)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。

Linux — logrotate 切割 Nginx

2017年2月4日 评论已被关闭

Linux — logrotate 切割 Nginx
http://blog.sina.com.cn/s/blog_5f54f0be0101h6y8.html
logrotate是作为linux系统日志的管理工具存在。他可以轮换,压缩,邮件系统日志文件。
它默认的配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/

配置文件介绍:
========================
logrotate.conf 才主要的配置文件, logrotate.d 是一个目录, 该目录里的所有文件都会被主动的读入 /etc/logrotate.conf 中执行。
另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以 /etc/logrotate.conf 这个文件的设定来作为默认值。

切割介绍:
————————–
当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存日志。而第二次执行之后, messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存日志!如果我们仅设定保留三个日志而已的话,那么执行第四次时,则 messages.3 这个档案就会被删除,并由后面的较新的保存日志所取代!也就是会保存最新的几个日志。

当然,这个得根据配置文件中的 dateext 参数来判定:

先看 logrotate.conf 的内容:

vim /etc/logrotate.conf
# 底下的设定是 “logrotate 的默认值” ,如果別的文件设定了其他的值,
# 就会以其它文件的设定为主

weekly <==默认一周执行一次 rotate 工作
rotate 4 <==保留多少个日志文件.默认保留四个.
create <==创建新的文件.因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext <==文件后缀是日期格式,也就是切割后文件是:xxx.log-20131216.gz 这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1 这种格式
#compress <==是否压缩日志.

include /etc/logrotate.d
# 将 /etc/logrotate.d/ 目录中的所有文件都加载进来

/var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数
monthly <==每月一次切割,取代默认的一周
minsize 1M <==文件大小超过 1M 后才会切割
create 0664 root utmp <==指定新建的日志文件权限以及所属用户和组
rotate 1 <==只保留一个日志.
}
# 这个 wtmp 可记录用户登录系统及系统重启的时间
# 因为有 minsize 的参数,因此不见得每个月一定会执行一次喔.要看文件大小。

由这个文件的设定我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,虽然我们可以将所有的配置都给他写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理~
所以,如果独立出来一个目录,那么每个要切割日志的服务, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中

切割案例:syslog
============================

下面我们再以 /etc/logrotate.d/syslog 这个切割 syslog 服务的配置文件,来看看该如何设定他的 rotate 呢?

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
在上面的语法当中,我们知道正确的 logrotate 的写法为:

日志文件:
被处理的日志绝对路径.使用空格符分隔多个文件名;
执行脚本:
可调用外部指令来进行额外的命令,这个设定需与 sharedscripts …. endscript 设定合用才行。命令介绍:
prerotate:在启动 logrotate 之前进行的指令,例如修改文件的属性等动作;
postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序!

那么 /etc/logrotate.d/syslog 内设定的六个文件的切割功能就变成了:

1.该设定只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;
2.日志切割每周一次、保留四个、且切割下来的日志文件不进行压缩(未更改预设值);
3.切割完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd

假设我们有针对 /var/log/messages 这个文件增加 chattr +a 的属性时, 依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是由于加上这个 +a 的参数啊,所以更名是不可能成功的! 那怎么办呢?
就利用 prerotate 与 postrotate 来进行日志文件切割前、后所需要作的动作!

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages
endscript
}
看到否?就是先给他去掉 a 这个属性,让日志文件 /var/log/messages 可以进行切割的动作, 然后执行了切割之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP … 的意义,这一行的目的在于将系统的 syslogd 重新以其参数档 (syslog.conf) 的资料载入一次!也可以想成是 reload 的意思啦!
由于我们建立了一个新的空的纪录档,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误呦!

切割案例:Nginx
============================

在 /etc/logrotate.d 新建 nginx

/usr/local/nginx/logs/*.log {
daily
rotate 5
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

就是把日志切割后重启 nginx

Nginx 日志切割还可以这样:http://blog.sina.com.cn/s/blog_5f54f0be0100zaza.html
通过自定义的 shell 脚本去做.\
实际测试 logrotate
============================
[root@www ~]# logrotate [-vf] logfile选项与参数:
v: 启动显示模式,会显示 logrotate 执行的过程
f: 不论是否符合配置文件地规则,强制每个日志都进行 rotate 的动作

范例一: 执行一次 logrotate 看看整个流程
[root@www ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf <==读取主要设定档
including /etc/logrotate.d <==加载外部的设定
reading config file acpid <==就是外部设定啊!….(中间省略)….
Handling 21 logs <==共有 21 个日志被记录….(中间省略)….
rotating pattern: /var/log/messages /var/log/secure /var/log/maillog \
/var/log/spooler /var/log/boot.log /var/log/cron weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/messages <==开始处理 messages
log does not need rotating <==因为时间未到,不需要更动!….(底下省略)….
范例二:强制进行 logrotate 的动作
[root@www ~]# logrotate -vf /etc/logrotate.conf….(前面省略)….rotating log /var/log/messages, log->rotateCount is 4
renaming /var/log/messages.4 to /var/log/messages.5 (rotatecount 4, logstart 1, i 4),
renaming /var/log/messages.3 to /var/log/messages.4 (rotatecount 4, logstart 1, i 3),
renaming /var/log/messages.2 to /var/log/messages.3 (rotatecount 4, logstart 1, i 2),
renaming /var/log/messages.1 to /var/log/messages.2 (rotatecount 4, logstart 1, i 1),
renaming /var/log/messages.0 to /var/log/messages.1 (rotatecount 4, logstart 1, i 0),
old log /var/log/messages.0 does not exist….(底下省略)….# 看到否?整个 rotate 的动作就是这样一步一步进行的~
[root@www ~]# ll /var/log/messages*; lsattr /var/log/messages
-rw——- 1 root root 63 Apr 8 15:19 /var/log/messages
-rw——- 1 root root 670 Apr 8 14:22 /var/log/messages.1
-rw——- 1 root root 24984 Apr 1 19:26 /var/log/me

分类: Linux工具使用 标签:

Linux 下 PHP 扩展 cURL 编译安装

2017年2月3日 评论已被关闭

Linux 下 PHP 扩展 cURL 编译安装
http://www.cnblogs.com/suan07lai/p/5234868.html
下载 cURL http://pan.baidu.com/s/1hqrHWkG (curl-7.39.0.tar.gz) 3.98MB

解压:

tar zxvf curl-7.39.0.tar.gz
./configure –prefix=/usr/local/curl
make && make install

安装 curl 成功后,进入 php 的源码包(非php安装地址)

cd /var/soft/php-5.3.19/ext/curl
/usr/local/php/bin/phpize 注:/usr/local/php 为我的php安装目录
./configure –with-php-config=/usr/local/php/bin/php-config –with-curl=/usr/local/curl/
make && make install
成功后出现 curl.so 的所在目录

打开 php.ini 添加 extension=xxx/curl.so

重启 apache 即可。

openldap安装及常用配置

2017年1月23日 评论已被关闭

openldap安装及常用配置
https://www.52os.net/articles/openldap-install-and-settings.html
openLDAP是LDAP(轻量目录访问协议)在linux系统上的实现,和windows下的AD域是一回事,主要是用来构建集中的身份验证系统,提供高效的查找和管理信息服务,可以减少管理成本并保持数据一致性。

服务器环境:centos 6.6 64位

一、配置OpenLDAP Server

1.安装

服务器端所需的软件:

openldap 包含配置文件、库、文档等
openldap-server slapd服务器
openldap-client 客户端程序
openldap-devel 开发套件,供第三方程序调用
yum自带的源里就有了,直接yum安装:

yum install -y openldap openldap-servers openldap-clients openldap-devel
2.配置slapd

有两个文件要复制:slapd的配置文件和数据库文件,将openldap-servers自带的example复制到相应目录:

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /etc/openldap
chown -R ldap.ldap /var/lib/ldap
使用slappasswd创建LDAP管理员密码,这个命令不会直接将密码写入配置,运行slappasswd后输入两次密码,会返回一串密文,复制下这个密文。

编辑/etc/openldap/slapd.conf,找到”database bdb“,按照自己的需求更改下面的:

suffix “dc=52os,dc=net”
rootdn “cn=admin,dc=52os,dc=net” //管理员为admin
rootpw {SSHA}QeLa25YmQt3csWI2eWcrXbtylxpq5FQ0 //复制的管理员的密码,也支持明文
测试并生成配置文件:

rm -rf /etc/openldap/slapd.d/* //删除原文件
service slapd start //生成bdb文件
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d //生成配置文件
chown -R ldap:ldap /etc/openldap/slapd.d
配置完成重启服务:

service slapd restart
chkconfig slapd on //设置开机自启动
经过上面的配置后,openldap server就配置好了。
查看LDAP数据库结构:

ldapsearch -x -H ldap://127.0.0.1 -b ‘dc=52os,dc=net’
会返回类似:

# extended LDIF
# LDAPv3
# base <dc=52os,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# search result
search: 2
result: 32 No such object
# numResponses: 1
3.配置并迁移系统用户

配置好的LDAP数据库是空的,需要将系统上的用户导入到LDAP数据库中。需要用migrationtools将系统用户转换为LDAP能识别的ldif文件。

先新建一个test用户作为测试用户:

useradd test
echo “pwdpwd” |passwd –stdin test
安装migrationtools:

yum install migrationtools
配置migrationtools:

编辑/usr/share/migrationtools/migrate_common.ph ,按需更改下面两行:

$DEFAULT_MAIL_DOMAIN = “52os.net”;
$DEFAULT_BASE = “dc=52os,dc=net”;
生成ldif文件:

./migrate_passwd.pl >/tmp/passwd.ldif
./migrate_passwd.pl /etc/passwd >/tmp/passwd.ldif
./migrate_group.pl /etc/group >/tmp/group.ldif
如果有需要,也可以编辑passwd.ldif和group.ldif去掉不需要的条目。
将生成的ldif导入到LDAP数据库:

ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f /tmp/base.ldif
ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f /tmp/passwd.ldif
ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f /tmp/group.ldif
需要输入LDAP管理员密码,在用上面的ldapsearch命令就能查看到导入的数据。

二、客户端配置

客户端配置有两种方法:

使用authconfig-tui ,也就是setup命令中的 “Authentication configuration”
手动配置
无论哪种方式,都要先安装客户端:

yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap
第一种方法:
在命令行中输入authconfig-tui或者setup命令中选择”Authentication configuration”,选中 ”Use LDAP“和“Use LDAP Authentication”,之后点击NEXT,输入服务器地址和“BASE DN”即可。全部图形化添加,非常简单,推荐使用。

第二种方法需要修改文件较多:
编辑/etc/openldap/ldap.conf,加入:

URI ldap://10.11.15.78/ //LDAP服务器地址
BASE dc=52os,dc=net
TLS_CACERTDIR /etc/openldap/cacerts
编辑/etc/nslcd.conf,加入:

uri ldap://10.11.15.78/
base dc=52os,dc=net
ssl no
tls_cacertdir /etc/openldap/cacerts
系统命名服务(NSS)配置使用LDAP,编辑 /etc/nsswitch.conf,修改如下几项为:

passwd: files ldap
shadow: files ldap
group: files ldap
netgroup: files ldap
automount: files ldap
编辑/etc/pam.d/system-auth,修改如下几项为:

auth sufficient pam_ldap.so use_first_pass
account required pam_unix.so broken_shadow
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
password sufficient pam_ldap.so use_authtok
session required pam_unix.so
session optional pam_ldap.so #这一行要加在pam_unix.so下面
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022 #自动创建用户的宿主目录
编辑/etc/sysconfig/authconfig:

USELDAPAUTH=yes
USELDAP=yes
修改好之后启动nslcd服务,并设置开机启动

service nslcd start && chkconfig nslcd on
验证:
test用户只有在ldap server上有,在客户端如果也能查看到,就说明设置成功:

id test
或者使用:

getent passwd |grep test
这时就能用test账号登录客户端了。

三、其它设置:

1.日志配置

openLDAP默认是不打日志的,要配合rsyslog才能打日志。
在/etc/openldap/slapd.conf 中设置日志级别,加入:

loglevel 1
具体的loglevel解释,可以:

man slapd.conf
在/etc/rsyslog.conf最后加入:

local4.* /var/log/slapd.log
重启rsyslog和slapd:

service rsyslog restart
service slapd restart
2.sudo管理

在openldap的服务器端拷贝sudo schema到openldap配置目录

cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
加载sudo schema,在/etc/openldap/slapd.conf  添加:

include /etc/openldap/schema/sudo.schema
重新生产配置文件:

rm -rf /etc/openldap/slapd.d/*
sudo -u ldap slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
service slapd restart
新建一个sudo.ldif文件,内容为:

dn: ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: organizationalUnit
ou: Sudoers

dn: cn=defaults,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty

dn: cn=test,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: test
sudoCommand: ALL
sudoHost: ALL
sudoOption: !authenticate
sudoRunAsUser: ALL
sudoUser: test
上面的内容按实际情况更改,注意每行最后不要有空格,ldif里的大小写不敏感。我允许sudo的用户是test,允许使用全部命令,允许所有主机sudo
导入sudo.ldif记录:

ldapadd -x -D “cn=admin,dc=52os,dc=net” -W -f sudo.ldif
设置客户端:
在/etc/sudo-ldap.conf中加入:

uri ldap://10.11.15.78
sudoers_base ou=Sudoers,dc=52os,dc=net
在/etc/nsswitch.conf中加入:

Sudoers: files ldap
在客户端用切换到test用户,测试一下sudo是否可用

3.用户目录自动挂载

使用Openldap的好处就是在服务器端建好一个用户后,各个客户端去服务器端验证,不需要在创建该用户。验证通过后会在客户端/home目录下创建该用户的宿主目录,虽然是同一用户,但目前的配置来说,每个客户端和服务器之间宿主目录是独立的,并没有共享服务器端的宿主目录。举例来说,我在服务器端的宿主目录中上传了一份代码,如果客户端共享服务器的宿主目录,当用户在任意一个客户端登录时,都会看到服务器上宿主目录的代码,管理起来就十分方便了。

配置用户目录共享,需要在服务器端安装nfs,在客户端安装autofs。
安装并启动nfs:

yum install nfs-utils
service rpcbind start
service nfslock start
service nfs start
启动好后用chkconfig加入开机启动。
编辑/etc/exports文件,加入:

/home *(rw,sync)
要注意用户需在nfs服务器/home下有宿主目录,否则autofs无法挂载。”*”可以写成具体的ip或ip段,设置好后重启nfs服务,测试并查看:

showmount -e localhost
服务器端的nfs配置完成。
客户端要安装autofs和nfs-utils,但nfs服务不用启动:

yum install nfs-utils autofs
配置autofs,在/etc/auto.master最后加入:

/home /etc/auto.nfs
新建一个/etc/auto.nfs文件,内容为:

* -fstype=nfs 10.11.15.78:/home/&
启动autofs:

service autofs start
用su – test测试是否正常切换,在用mount命令查看挂载:

10.11.15.78:/home/test on /home/test type nfs (rw,vers=4,addr=10.11.15.78,clientaddr=10.11.15.79)
说明挂载成功了,客户端的用户目录和服务器端的用户目录内容就能正常同步了

其它的一些设置,用到在写。
1.安全设置主要有两点:1.启用TLS加密 2.关闭匿名查询
2.主备高可用配置
3.web管理工具:phpldapadmin和LDAP Account Manager

四、一些问题

1.用户不能建立宿主目录
提示 “could not chdir to home directory /home/user: No such file or directory”
解决方法:
在 /etc/pam.d/password-auth 和/etc/pam.d/system-auth 都要加入:

session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022
2.导入ldif文件时报错
ldap_bind: Invalid credentials (49)
这种情况是管理员密码错误或者rootdn信息错误

3.配置autofs后,切换su – test 报错

Creating directory ‘/home/test’.
Unable to create and initialize directory ‘/home/test’.
su: warning: cannot change directory to /home/test: No such file or directory
这是由于nfs服务器上/home下没有test用户的宿主目录造成的,且权限要正确,否则autofs无法挂载目录,用户也无法在客户端登录。

参考文章:
http://www.zhukun.net/archives/7548
http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%85%8D%E7%BD%AE.html
http://www.ibm.com/developerworks/cn/linux/l-openldap/

分类: Linux工具使用 标签:

lsyncd+rsync实时文件同步

2017年1月23日 评论已被关闭

lsyncd+rsync实时文件同步

http://xukaizijian.blog.163.com/blog/static/1704331192010112191936700?suggestedreading
客户端:

[root@10.10.90.20 ~]# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
[root@10.10.90.20 ~]# tar -zxf rsync-3.0.7.tar.gz
[root@10.10.90.20 ~]# cd rsync-3.0.7
[root@10.10.90.20 rsync-3.0.7]#./configure –prefix=/usr/local/rsync && make && make install
修改配置文件:

[root@10.10.90.20 ~]#cat /etc/rsyncd.conf
uid = root
gid = root
read only = no
use chroot = yes
max connections = 20
log file = /var/log/rsyncd.log
list = yes
pid file = /var/run/rsyncd.pid
hosts allow =10.10.90.97
hosts deny =0.0.0.0/0
[9097]
path = /root/10.10.90.97
comment =focus backup
启动:

rsync:rsync –daemon

服务器端:
1.安装lsyncd

[root@10.10.90.97 ~]##wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz
[root@10.10.90.97 ~]##tar zxvf lsyncd-1.26.tar.gz
[root@10.10.90.97 ~]##cd lsyncd-1.26
[root@10.10.90.97 ~]##./configure –prefix=/usr/local/lsyncd
[root@10.10.90.97 ~]##make && make install
2.配置lsyncd
[root@10.10.90.97 ~]#vi /etc/lsyncd.conf

/opt/data/ 10.10.90.20::9097
说明:a> /opt/data/ #要实时同步的目录
b>10.10.90.20 #要实时同步到的远端机器
c> 9097 #对应远端机器的rsync的tag。
d> 如果需要同步多台或者同步多个目录就在这个文件中添加相应的行

3.建立lsyncd日志文件
#vi /etc/logrotate.d/lsyncd

/var/log/lsyncd {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true
endscript
}
4.建立lsyncd的启动文件

#!/bin/bash
/etc/rc.d/init.d/functions
lsyncd=”/usr/local/bin/lsyncd”
lockfile=”/var/lock/subsys/lsyncd”
pidfile=”/var/run/lsyncd.pid”
function_start_lsyncd()
{
printf “Starting Lsyncd…\n”
while read i
do
source=`echo $i | awk ‘{print $1}’`
target=`echo $i | awk ‘{print $2}’`
$lsyncd $source $target
done < /etc/lsyncd.conf
}
function_stop_lsyncd()
{
printf “Stoping Lsyncd…\n”
killall $lsyncd
}
function_restart_lsyncd()
{
printf “Restarting Lsyncd…\n”
function_stop_lsyncd
function_start_lsyncd
}
if [ “$1” = “start” ]; then
function_start_lsyncd
elif [ “$1” = “stop” ]; then
function_stop_lsyncd
elif [ “$1” = “restart” ]; then
function_restart_lsyncd
else
printf “Usage: lsyncd.sh {start|stop|restart}\n”
fi
5.启动:
[root@10.10.90.97 ~]# chmod 755 /etc/init.d/lsyncd
[root@10.10.90.97 ~]# /etc/init.d/lsyncd start

后记:个人觉得lsyncd+rsync对于大量小文件的实时同步比rsync要好,消耗资源较少,但在配置rsync客户端时,必须设置无密码连接,而且,数据的传输是完全同步的,并不是增量的。

分类: Linux工具使用 标签: ,

Linux下设置memcached访问IP

2016年12月11日 评论已被关闭

Linux下设置memcached访问IP

http://www.cnblogs.com/longshiyVip/p/5636233.html
在虚拟机上装了memcached,本地访问可以,但从其它机器连这台机器的memcached应用总是报连接失败。防火墙的端口都是打开的。Google了才知道原来需要修改memcached的配置文件,将默认的127.0.0.1地址改成外部可访问的地址。(与Mysql一样的道理)。
我在Ubuntu上apt-get install的配置文件被安装在了

/etc/memcached.conf
修改该文件中将

-l 127.0.0.1
改为本机的IP地址

-l 192.168.1.100
运行

/etc/init.d/memcached restart
重新启动后,从外部就可以访问了。

[网络监控]iftop 安装以及相关参数及说明

2016年12月10日 评论已被关闭

[网络监控]iftop 安装以及相关参数及说明

 http://www.cnblogs.com/wenanry/archive/2012/02/09/2344648.html

关于 Iftop

iftop 是类似于top的实时流量监控工具。主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同那台机器间的流量大小,非常适合于代理服务器和iptables服务器使用

官方网站:http://www.ex-parrot.com/~pdw/iftop/

 

安装iftop
安装方法1、编译安装

如果采用编译安装可以到iftop官网下载最新的源码包。

安装前需要已经安装好基本的编译所需的环境,比如make、gcc、autoconf等。安装iftop还需要安装libpcap和libcurses。

CentOS上安装所需依赖包:

yum install flex byacc  libpcap ncurses ncurses-devel libpcap-devel

Debian上安装所需依赖包:

apt-get install flex byacc  libpcap0.8 libncurses5

下载iftop

wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz

tar zxvf iftop-0.17.tar.gz

cd iftop-0.17

./configure

make && make install

configure: error: can’t find pcap.h
You’re not going to get very far without libpcap.
那你需要先安装libpcap,找到相应的rpm文件,比如:

-rw-r–r– 1 root root  108987 Apr  3 08:21 libpcap-0.9.4-8.1.i386.rpm
-rw-r–r– 1 root root  119062 Apr  3 08:21 libpcap-devel-0.9.4-8.1.i386.rpm

安装方法2:(懒人办法,最简单)
直接省略上面的步骤
flibpcap-0.9.4-14.el5.x86_64.rpm
CentOS系统:

yum install flex byacc  libpcap ncurses ncurses-devel

wget ftp://fr2.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/iftop-0.17-1.el5.rf.i386.rpm

rpm -ivh iftop-0.17-1.el5.rf.i386.rpm

Debian系统 运行:apt-get install iftop

运行iftop
直接运行: iftop

 

1、iftop界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

2、iftop相关参数
常用的参数
-i设定监测的网卡,如:# iftop -i eth1

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-n使host信息默认直接都显示IP,如:# iftop -n

-N使端口信息默认直接都显示端口号,如: # iftop -N

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-h(display this message),帮助,显示参数信息

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b使流量图形条默认就显示;

-f这个暂时还不太会用,过滤计算包用的;

-P使host信息及端口信息默认就都显示;

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

进入iftop画面后的一些操作命令(注意大小写)

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

分类: Linux工具使用 标签:

Logrotate命令整理(有空再整理)

2016年12月8日 评论已被关闭

Logrotate命令整理(有空再整理)

http://blog.chinaunix.net/uid-20281367-id-225550.html

logrotate是个强大的系统软件,它对日志文件(只要文件名固定的)有着一套完整的操作模式,譬如:转储、邮件和压缩等等;但是它也有那么点瑕疵:就是转储的时候,文件大小经常不是预期的,譬如,设置成size 1024,那么转储的时候文件大小可能已经上兆了。原因很简单,因为logrotate是个cron任务,它只能每天(最小轮询单位)轮询一次,至于在这一天内文件大小超过1024,它也无能为力。不管怎么说,logrotate是个非常实用的工具,只要对log临时需要(测试)或要求不高,都可以采用。以下是我对logrotate的理解和整理。

logrotate


LOGROTATE(8)             System Administrator’s Manual            LOGROTATE(8)




NAME

       logrotate - rotates, compresses, and mails system logs


SYNOPSIS

       logrotate [-dv] [-f|--force] [-s|--state file] config_file+


DESCRIPTION

       logrotate  is  designed to ease administration of systems that generate
       large numbers of log files.  It allows automatic rotation, compression,
       removal, and mailing of log files.  Each log file may be handled daily,
       weekly, monthly, or when it grows too large.

       Normally, logrotate is run as a daily cron job.  It will not  modify  a
       log  multiple  times  in  one  day unless the criterium for that log is
       based on the log’s size and logrotate is being run multiple times  each
       day, or unless the -f or -force option is used.

       Any number of config files may be given on the command line. Later con-
       fig files may override the options given in earlier files, so the order
       in  which  the logrotate config files are listed in is important.  Nor-
       mally, a single config file which includes any other config files which
       are  needed  should  be used.  See below for more information on how to
       use the include directive to accomplish this.  If a directory is  given
       on  the  command line, every file in that directory is used as a config
       file.

       If no command line arguments are given, logrotate  will  print  version
       and  copyright  information,  along with a short usage summary.  If any
       errors occur while rotating logs, logrotate  will  exit  with  non-zero
       status.

描述:

       为了简化对产生大量日志文件的各种系统的管理,logrotate从而被设计出来。它可以
       自动转储、压缩、删除和邮件这些日志。每个日志文件可以在每天,每星期,每月或太
       大了的时候被处理。

       通常,logrotate是一个每天执行一次的cron任务。除非被操作的日志文件是以大小处理
       的,并且在一天内logrotate被执行多次,或是使用了选项-f-force,每天logrotate
       不会多次修改一个文件。

       命令行可以包含任意数量的配置文件。后面的配置文件可能会覆盖前面的配置文件给出的
       选项,所以logrotate列出的配置文件顺序是很重要的。通常,如果需要包含其它配置文
       件信息,那么应该用一个单一的配置文件。根据下面更多的信息,通过使用include导向
       来完成这个。假如命令行上给出的是个目录,那么在这个目录下的文件都被看作是一个配
       置文件。

       如果命令行不包含任意选项,那么logrotate会打印出它的版本和版权信息,以及一段短
       小的用法摘要。

OPTIONS

       -v     Turn on verbose mode.


       -d     Turns  on  debug mode and implies -v.  In debug mode, no changes
              will be made to the logs or to the logrotate state file.


       -f, --force
              Tells logrotate to force the rotation, even if it doesn’t  think
              this  is  necessary.   Sometimes this is useful after adding new
              entries to logrotate, or if old log files have been  removed  by
              hand,  as  the  new files will be created, and logging will con-
              tinue correctly.


       -m, --mail 
              Tells logrotate which command to use  when  mailing  logs.  This
              command  should accept two arguments: 1) the subject of the mes-
              sage, and 2) the recipient. The command must then read a message
              on standard input and mail it to the recipient. The default mail
              command is /bin/mail -s.


       -s, --state 
              Tells logrotate to use an alternate state file.  This is  useful
              if  logrotate  is being run as a different user for various sets
              of log files.  The default state file is /var/lib/logrotate/sta-
              tus.


       --usage
              Prints a short usage message.

选项:

       -v     打开冗长模式。

       -d     打开调试模式,并且隐式打开冗长模式-v。在调试模式下,日志文件和log-
            rotate状态文件不会有变化。

        -f, --force
            告诉logrotate强制轮调,即使它不认为这是必要的。有时这是很有用的,
              譬如logrotate增加了新的入口;又如假设旧的日志文件被手动删除了,这
              样新的日志文件需要创建出来,保证正常写日志。

       -m, --mail 
            告诉logrotate当邮件日志时调用command。这个command需要包含2个参数:
              1) 消息的主题,和 2) 接收者。这个command必须从标准输入上读出消息,然
              后发邮件给接收者。默认发邮件命令是/bin/mail -s-s, --state 
            告诉logrotate使用备用的状态文件。当另一个用户正在用logrotate管理大
              量的日志文件时,这是非常有用的。默认的状态文件是/var/lib/logrotate
            /status--usage
            打印简要的用法信息。

CONFIGURATION FILE

       logrotate  reads  everything  about the log files it should be handling
       from the series of configuration files specified on the  command  line.
       Each configuration file can set global options (local definitions over-
       ride global ones, and later  definitions  override  earlier  ones)  and
       specify  a  logfile  to  rotate. A simple configuration file looks like
       this:

       # sample logrotate configuration file
       compress

       /var/log/messages {
           rotate 5
           weekly
           postrotate
                                     /sbin/killall -HUP syslogd
           endscript
       }

       "/var/log/httpd/access.log" /var/log/httpd/error.log {
           rotate 5
           mail www@my.org
           size=100k
           sharedscripts
           postrotate
                                     /sbin/killall -HUP httpd
           endscript
       }

       /var/log/news/news.crit {
           monthly
           rotate 2
           olddir /var/log/news/old
           missingok
           postrotate
                                     kill -HUP ‘cat /var/run/inn.pid‘
           endscript
           nocompress
       }

       The first few lines set global options; in the example, logs  are  com-
       pressed after they are rotated.  Note that comments may appear anywhere
       in the config file as long as the first non-whitespace character on the
       line is a #.

       The next section of the config files defined how to handle the log file
       /var/log/messages. The log will go through five weekly rotations before
       being  removed. After the log file has been rotated (but before the old
       version of the log has been compressed), the command /sbin/killall -HUP
       syslogd will be executed.

       The     next     section    defines    the    parameters    for    both
       /var/log/httpd/access.log  and  /var/log/httpd/error.log.    They   are
       rotated whenever is grows over 100k is size, and the old logs files are
       mailed (uncompressed) to www@my.org after going  through  5  rotations,
       rather  then being removed. The sharedscripts means that the postrotate
       script will only be run once(after the old logs have been  compressed),
       not  once  for  each  log which is rotated. Note that the double quotes
       around the first filename at  the  beginning  of  this  section  allows
       logrotate  to rotate logs with spaces in the name. Normal shell quoting
       rules apply, with ’, ", and \ characters supported.

       The last section defines  the  parameters  for  all  of  the  files  in
       /var/log/news.  Each  file is rotated on a monthly basis.  This is con-
       sidered a single rotation directive and if errors occur for  more  then
       one file, the log files are not compressed.

       Please  use  wildcards  with caution.  If you specify *, logrotate will
       rotate all files, including previously rotated ones.  A way around this
       is  to  use  the  olddir  directive  or  a more exact wildcard (such as
       *.log).

       Here is more information on the directives which may be included  in  a
       logrotate configuration file:


       compress
              Old  versions  of log files are compressed with gzip by default.
              See also nocompress.


       compresscmd
              Specifies which command to  use  to  compress  log  files.   The
              default is gzip.  See also compress.


       uncompresscmd
              Specifies  which  command  to  use to uncompress log files.  The
              default is gunzip.


       compressext
              Specifies which extension to use on compressed logfiles, if com-
              pression is enabled.  The default follows that of the configured
              compression command.


       compressoptions
              Command line options may be passed to the  compression  program,
              if  one is in use.  The default, for gzip, is "-9" (maximum com-
              pression).


       copy   Make a copy of the log file, but don’t change  the  original  at
              all.   This option can be used, for instance, to make a snapshot
              of the current log file, or when some  other  utility  needs  to
              truncate or pare the file.  When this option is used, the create
              option will have no effect, as the old log file stays in  place.


       copytruncate
              Truncate  the  original log file in place after creating a copy,
              instead of moving the old log file and optionally creating a new
              one,  It  can be used when some program can not be told to close
              its logfile and thus might continue writing (appending)  to  the
              previous log file forever.  Note that there is a very small time
              slice between copying the file and truncating it, so  some  log-
              ging  data  might be lost.  When this option is used, the create
              option will have no effect, as the old log file stays in  place.


       create mode owner group
              Immediately after rotation (before the postrotate script is run)
              the log file is created (with the same name as the log file just
              rotated).   mode  specifies  the  mode for the log file in octal
              (the same as chmod(2)), owner specifies the user name  who  will
              own  the  log  file,  and group specifies the group the log file
              will belong to. Any of the log file attributes may  be  omitted,
              in  which  case  those  attributes for the new file will use the
              same values as the original log file for the omitted attributes.
              This option can be disabled using the nocreate option.


       daily  Log files are rotated every day.


       delaycompress
              Postpone  compression of the previous log file to the next rota-
              tion cycle.  This has only effect when used in combination  with
              compress.   It  can be used when some program can not be told to
              close its logfile and thus might continue writing to the  previ-
              ous log file for some time.


       extension ext
              Log  files  are given the final extension ext after rotation. If
              compression is used, the compression  extension  (normally  .gz)
              appears after ext.


       ifempty
              Rotate  the  log  file  even  if  it  is  empty,  overiding  the
              notifempty option (ifempty is the default).


       include file_or_directory
              Reads the file given as an argument as if it was included inline
              where  the  include  directive appears. If a directory is given,
              most of the files in that directory are read in alphabetic order
              before  processing  of  the  including  file continues. The only
              files which are ignored are files which are  not  regular  files
              (such  as directories and named pipes) and files whose names end
              with one of the taboo extensions, as specified by  the  tabooext
              directive.  The include directive may not appear inside of a log
              file definition.


       mail address
              When a log is rotated out-of-existence, it is mailed to address.
              If  no  mail should be generated by a particular log, the nomail
              directive may be used.


       mailfirst
              When using the mail command, mail the just-rotated file, instead
              of the about-to-expire file.


       maillast
              When  using  the  mail  command,  mail the about-to-expire file,
              instead of the just-rotated file (this is the default).


       missingok
              If the log file is missing, go on to the next one without  issu-
              ing an error message. See also nomissingok.


       monthly
              Log files are rotated the first time logrotate is run in a month
              (this is normally on the first day of the month).


       nocompress
              Old versions of log files are not compressed with gzip. See also
              compress.


       nocopy Do  not copy the original log file and leave it in place.  (this
              overrides the copy option).


       nocopytruncate
              Do not truncate the original log file in place after creating  a
              copy (this overrides the copytruncate option).


       nocreate
              New  log  files  are  not  created  (this  overrides  the create
              option).


       nodelaycompress
              Do not postpone compression of the previous log file to the next
              rotation cycle (this overrides the delaycompress option).


       nomail Don’t mail old log files to any address.


       nomissingok
              If  a  log  file  does  not  exist,  issue an error. This is the
              default.


       noolddir
              Logs are rotated in the same directory the log normally  resides
              in (this overrides the olddir option).


       nosharedscripts
              Run  prerotate  and postrotate scripts for every script which is
              rotated (this is the default, and  overrides  the  sharedscripts
              option).


       notifempty
              Do not rotate the log if it is empty (this overrides the ifempty
              option).


       olddir directory
              Logs are moved into directory for rotation. The  directory  must
              be  on  the  same physical device as the log file being rotated,
              and is assumed to be relative to the directory holding  the  log
              file unless an absolute path name is specified. When this option
              is used all old versions of the log end up in  directory.   This
              option may be overriden by the noolddir option.


       postrotate/endscript
              The  lines  between postrotate and endscript (both of which must
              appear on lines by themselves) are executed after the  log  file
              is  rotated.  These  directives  may only appear inside of a log
              file definition.  See prerotate as well.


       prerotate/endscript
              The lines between prerotate and endscript (both  of  which  must
              appear  on lines by themselves) are executed before the log file
              is rotated and only if the log will actually be  rotated.  These
              directives may only appear inside of a log file definition.  See
              postrotate as well.


       firstaction/endscript
              The lines between firstaction and endscript (both of which  must
              appear  on lines by themselves) are executed once before all log
              files that match the wildcarded pattern are rotated, before pre-
              rotate  script is run and only if at least one log will actually
              be rotated. These directives may only appear  inside  of  a  log
              file definition. See lastaction as well.


       lastaction/endscript
              The  lines  between lastaction and endscript (both of which must
              appear on lines by themselves) are executed once after  all  log
              files  that  match  the  wildcarded  pattern  are rotated, after
              postrotate script is run  and  only  if  at  least  one  log  is
              rotated.  These  directives may only appear inside of a log file
              definition. See lastaction as well.


       rotate count
              Log files are rotated   times  before  being  removed  or
              mailed to the address specified in a mail directive. If count is
              0, old versions are removed rather then rotated.


       size size
              Log files are rotated when they grow bigger then size bytes.  If
              size  is  followed by M, the size if assumed to be in megabytes.
              If the k is used, the size is in kilobytes. So  size  100,  size
              100k, and size 100M are all valid.


       sharedscripts
              Normally,  prescript and postscript scripts are run for each log
              which is rotated, meaning that a single script may be run multi-
              ple  times for log file entries which match multiple files (such
              as the /var/log/news/* example). If sharedscript  is  specified,
              the scripts are only run once, no matter how many logs match the
              wildcarded pattern.  However, if none of the logs in the pattern
              require  rotating,  the  scripts  will  not  be run at all. This
              option overrides the nosharedscripts option and  implies  create
              option.


       start count
              This is the number to use as the base for rotation. For example,
              if you specify 0, the logs will be created with a  .0  extension
              as they are rotated from the original log files.  If you specify
              9, log files will be created with a  .9,  skipping  0-8.   Files
              will  still  be  rotated  the number of times specified with the
              count directive.


       tabooext [+] list
              The current taboo extension list is  changed  (see  the  include
              directive  for information on the taboo extensions). If a + pre-
              cedes the list of extensions, the current taboo  extension  list
              is  augmented,  otherwise  it is replaced. At startup, the taboo
              extension list contains .rpmorig, .rpmsave, ,v,  .swp,  .rpmnew,
              and ~.


       weekly Log  files  are  rotated if the current weekday is less then the
              weekday of the last rotation or if more then a week  has  passed
              since  the  last rotation. This is normally the same as rotating
              logs on the first day of the week, but it works better if logro-
              tate is not run every night.



FILES

       /var/lib/logrotate.status  Default state file.
       /etc/logrotate.conf        Configuration options.


SEE ALSO

       gzip(1)


AUTHORS

       Erik Troan <ewt@redhat.com>
       Preston Brown <pbrown@redhat.com>



4th Berkeley Distribution       Wed Nov 5 2002                    LOGROTATE(8)

以上是linux man手册上的logrotate。

系统管理员可以使用logrotate 程序用来管理系统中的最新的事件。logrotate 还可以用来备份日志文件,本篇将通过以下几部分来介绍

日志文件的管理:

1、logrotate 配置

2、缺省配置 logrotate

3、使用include 选项读取其他配置文件

4、使用include 选项覆盖缺省配置

5、为指定的文件配置转储参数

一、logrotate 配置

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。

logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。

logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:

参数 功能

compress 通过gzip 压缩转储以后的日志

nocompress 不需要压缩时,用这个参数

copytruncate 用于还在打开中的日志文件,把当前日志备份并截断

nocopytruncate 备份日志文件但是不截断

create mode owner group 转储文件,使用指定的文件模式创建新的日志文件

nocreate 不建立新的日志文件

delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩

nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。

errors address 专储时的错误信息发送到指定的Email 地址

ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。

notifempty 如果是空文件的话,不转储

mail address 把转储的日志文件发送到指定的E-mail 地址

nomail 转储时不发送日志文件

olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

noolddir 转储后的日志文件和当前日志文件放在同一个目录下

prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

daily 指定转储周期为每天

weekly 指定转储周期为每周

monthly 指定转储周期为每月

rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份

tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~

size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).

二、缺省配置 logrotate

logrotate 缺省的配置募??/etc/logrotate.conf。

Red Hat Linux 缺省安装的文件内容是:

# see “man logrotate” for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# send errors to root

errors root

# create new (empty) log files after rotating old ones

create

# uncomment this if you want your log files compressed

#compress

1

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

# no packages own lastlog or wtmp –we’ll rotate them here

/var/log/wtmp {

monthly

create 0664 root utmp

rotate 1

}

/var/log/lastlog {

monthly

rotate 1

}

# system-specific logs may be configured here

缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。

第三行weekly 指定所有的日志文件每周转储一次。

第五行 rotate 4 指定转储文件的保留 4份。

第七行 errors root 指定错误信息发送给root。

第九行create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和

原来的文件一样的权限。

第11行 #compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。

三、使用include 选项读取其他配置文件

include 选项允许系统管理员把分散到几个文件的转储信息,集中到一个

主要的配置文件。当 logrotate 从logrotate.conf 读到include 选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf 中一样。

第13行 include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d 目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM 软件包的日志转储参数一般存放在/etc/logrotate.d 目录。

include 选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d 。

典型的应用有:apache, linuxconf, samba, cron 以及syslog。

这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以了。

四、使用include 选项覆盖缺省配置

当 /etc/logrotate.conf 读入文件时,include 指定的文件中的转储参数将覆盖缺省的参数,如下例:

# linuxconf 的参数

/var/log/htmlaccess.log

{ errors jim

notifempty

nocompress

weekly

prerotate

/usr/bin/chattr -a /var/log/htmlaccess.log

endscript

postrotate

/usr/bin/chattr +a /var/log/htmlaccess.log

endscript

}

/var/log/netconf.log

{ nocompress

monthly

}

在这个例子中,当 /etc/logrotate.d/linuxconf 文件被读入时,下面的参数将覆盖/etc/logrotate.conf中缺省的参数。

Notifempty

errors jim

五、为指定的文件配置转储参数

经常需要为指定文件配置参数,一个常见的例子就是每月转储/var/log/wtmp。为特定文件而使用的参数格式是:

# 注释

/full/path/to/file

{

option(s)

}

下面的例子就是每月转储 /var/log/wtmp 一次:

#Use logrotate to rotate wtmp

/var/log/wtmp

{

monthly

rotate 1

}

六、其他需要注意的问题

1、尽管花括号的开头可以和其他文本放在同一行上,但是结尾的花括号必须单独成行。

2、使用 prerotate 和 postrotate 选项

下面的例子是典型的脚本 /etc/logrotate.d/syslog,这个脚本只是对

/var/log/messages 有效。

/var/log/messages

{

prerotate

/usr/bin/chattr -a /var/log/messages

endscript

postrotate

/usr/bin/kill -HUP syslogd

/usr/bin/chattr +a /var/log/messages

endscript

}

第一行指定脚本对 /var/log messages 有效

花ê哦阅诓康慕疟驹诵杏? /var/log/messages

prerotate 命令指定转储以前的动作/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”属性 endscript 结束 prerotate 部分的脚本postrotate 指定转储后的动作

/usr/bin/killall -HUP syslogd

用来重新初始化系统日志守护程序 syslogd

/usr/bin/chattr +a /var/log/messages

重新为 /var/log/messages 文件指定“只追加”属性,这样防治程序员或用户覆盖此文件。

最后的 endscript 用于结束 postrotate 部分的脚本

3、logrotate 的运行分为三步:

判断系统的日志文件,建立转储计划以及参数,通过cron daemon 运行下面的代码是 Red Hat Linux 缺省的crontab 来每天运行logrotate

#/etc/cron.daily/logrotate

#! /bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

4、/var/log/messages 不能产生的原因:

这种情况很少见,但是如果你把/etc/services 中的 514/UDP 端口关掉的话,这个文件就不能产生了。

以上是网上的一篇中文说明。

个人觉得比较有用的一个例子:
/etc/logrotate.d/xxx
/home/zhoudh/test/yyy {
rotate 2
size 100
copytruncate
compress
delaycompress
}

使用iostat分析IO性能

2016年12月8日 评论已被关闭

使用iostat分析IO性能
http://blog.csdn.net/yangzhenzhen/article/details/39078277
对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。

下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。

1.不加选项执行iostat

我们先来看直接执行iostat的输出结果:
linux # iostat
Linux 2.6.16.60-0.21-smp (linux) 06/12/12

avg-cpu: %user %nice %system %iowait %steal %idle
0.07 0.00 0.05 0.06 0.00 99.81

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.58 9.95 37.47 6737006 25377400
sdb 0.00 0.00 0.00 824 0
复制代码
单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

Device: 各磁盘设备的IO统计信息

对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:

Device: 以sdX形式显示的设备名称
tps: 每秒进程下发的IO读、写请求数量
Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
Blk_wrtn/s: 每秒写扇区数量
Blk_read: 取样时间间隔内读扇区总数量
Blk_wrtn: 取样时间间隔内写扇区总数量
我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。

2.指定采样时间间隔与采样次数

与sar命令一样,我们可以以”iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:

复制代码
linux # iostat -d 1 2
Linux 2.6.16.60-0.21-smp (linux) 06/13/12

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.55 8.93 36.27 6737086 27367728
sdb 0.00 0.00 0.00 928 0

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 2.00 0.00 72.00 0 72
sdb 0.00 0.00 0.00 0 0
复制代码
以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。

3.以kB为单位显示读写信息(-k选项)

我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:

复制代码
linux # iostat -d -k
Linux 2.6.16.60-0.21-smp (linux) 06/13/12

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.55 4.46 18.12 3368543 13686096
sdb 0.00 0.00 0.00 464 0
复制代码
以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)

4.更详细的io统计信息(-x选项)

为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

复制代码
linux # iostat -x -k -d 1
Linux 2.6.16.60-0.21-smp (linux) 06/13/12

……
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60
复制代码
以上各列的含义如下:

rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

对于以上示例输出,我们可以获取到以下信息:

每秒向磁盘上写30M左右数据(wkB/s值)
每秒有91次IO操作(r/s+w/s),其中以写操作为主体
平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
等待处理的IO请求队列中,平均有11.79个请求驻留

以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:

util = (r/s+w/s) * (svctm/1000)

对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603

Cannot open /var/log/sa/sa*: No such file or directory的解决办法

2016年12月8日 评论已被关闭

Cannot open /var/log/sa/sa*: No such file or directory的解决办法

http://hzhg12345.blog.163.com/blog/static/4537634220112152626478/

sar来是外部的工具,不是系统默认就安装有的。

可以到http://pagesperso-orange.fr/sebastien.godard/download.html去下载!

安装
# tar zxvf xxx.tar.gz

# ./configure

# make

# make install

安装首次执行#sar 命令时会提示如下错误。

Cannot open /var/log/sa/sa**: No such file or directory

星号值一般是当天的日期。

这个错误是由于没有创建那个文件,可是使用参数-o 让其生成。

#sar -o 2 3

这样/var/log/sa/目录下就会有文件了。

有人说起需要运行sysstat才不会报这个错误,实际上这样做了之后问题依旧。

# chmod 751 /etc/sysconfig/sysstat
# /etc/sysconfig/sysstat

分类: Linux工具使用 标签: ,

linux logrotate 配置及测试

2016年12月8日 评论已被关闭

linux logrotate 配置及测试
http://blog.csdn.net/hepeng597/article/details/7768615

一、logrotate 配置

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。

logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:

参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及K (sizek)或者M (sizem).

二、缺省配置 logrotate

logrotate 缺省的配置募/etc/logrotate.conf。
Red Hat Linux 缺省安装的文件内容是:

# see “man logrotate” for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors root
# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp –we’ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

/var/log/lastlog {
monthly
rotate 1
}

# system-specific logs may be configured here
缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。

第三行weekly 指定所有的日志文件每周转储一次。
第五行 rotate 4 指定转储文件的保留 4份。
第七行 errors root 指定错误信息发送给root。
第九行create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和
原来的文件一样的权限。
第11行 #compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。

三、使用include 选项读取其他配置文件
include 选项允许系统管理员把分散到几个文件的转储信息,集中到一个
主要的配置文件。当 logrotate 从logrotate.conf 读到include 选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf 中一样。

第13行 include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d 目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM 软件包的日志转储参数一般存放在/etc/logrotate.d目录。

include 选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d ,/etc/logrotate.d/里的每个文件配置会覆盖或追加该文件默认的参数,如果未指定参数,则采用logrotate.conf中默认的参数,比如logrotate.conf中,rotate默认为4, test(四章中的例子)文件指定rotate为50,将覆盖rotate配置,

典型的应用有:apache, linuxconf, samba, cron 以及syslog, squid。

这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以了。
logrotate 也可以直接执行 后直接跟配置文件就可以了。
-v 给出详细信息
-d debug模式,不更改日志文件内容 模拟执行
-f 强制执行,忽略所有规则

四、测试例子

例1:在/etc/logrotate.d/目录下,touch test,打开test文件输入以下:
[cpp] view plain copy
<span style=”font-size:24px;”>/tmp/test.log{
missingok
create 0640 root root
rotate 50
size=1k
}</span>
在/tmp/目录下touch test.log文件

执行命令: dd if=/dev/zero of=test.log bs=1024 count=1000

之后文件大小为1000K。

执行命令: logrotate -v /etc/logrotate.conf

ls -lrt查看/tmp目录多了一个test.log.1,大小是1000K

得出结论:

1.logrotate能设置文件大小,当超过这个大小时,是转储成另一个文件,而不是按size大小转储多个文件。

2.logrotate本身并不能时时监控文件大小,logrotate一般是在/etc/cron.daily中一天执行一次,所以当test.log超过配置的size大小时,并不能主动触发logrotate命令,这将造成logrotate滞后,当然,可以在crontab里1分钟执行一次,不过这样的话,整个日志系统效率会比较低。我们可以写个脚本一秒执行一次检测test.log文件大小。如下:
[cpp] view plain copy
<span style=”font-size:24px;”>#!/bin/bash
a=”/tmp/test.log”
while [[ -f $a ]];
do
sleep 1;
size=`ls -lrt $a | cut -d ” ” -f 5`
echo $size
if [ $size -ge 1024 ];
then
logrotate /etc/logrotate.conf;
fi
done</span>

例2:和例1一样,也是test.log,不过,在/etc/logrotate.d/test里改动如下:

[cpp] view plain copy
<span style=”font-size:24px;”>/tmp/test.log{
missingok
create 0640 root root
rotate 50
size=1k
prerotate
chattr -a /tmp/test.log
endscript
postrotate
chattr +a /tmp/test.log
endscript
}</span>

chattr +a属性是把该文件变成只能追加模式,不能截断和覆盖,也不能重命名,所以logrotate之前,需要chattr -a,logrotate之后再chattr +a加上该属性(见test文件)
执行:dd if=/dev/zero of=/tmp/111 bs=1025 count=1 生成1025字节的111文件

执行:cat /tmp/111 >> /tmp/test.log

执行:logrotate -vf /etc/logrotate.conf

test.log成功转储到test.log.1

分类: Linux工具使用 标签:

linux下logrotate 配置和理解

2016年12月8日 评论已被关闭

linux下logrotate 配置和理解
http://blog.csdn.net/cjwid/article/details/1690101
对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以使用logrotate 程序用来管理系统中的最新的事件,对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以使用logrotate 程序用来管理系统中的最新的事件。logrotate 还可以用来备份日志文件,本篇将通过以下几部分来介绍

日志文件的管理:
1、logrotate 配置
2、缺省配置 logrotate
3、使用include 选项读取其他配置文件
4、使用include 选项覆盖缺省配置
5、为指定的文件配置转储参数
一、logrotate 配置

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。

logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:

参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
二、缺省配置 logrotate

logrotate 缺省的配置募?/etc/logrotate.conf。
Red Hat Linux 缺省安装的文件内容是:

# see “man logrotate” for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors root
# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp –we’ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

/var/log/lastlog {
monthly
rotate 1
}

# system-specific logs may be configured here
缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。

第三行weekly 指定所有的日志文件每周转储一次。
第五行 rotate 4 指定转储文件的保留 4份。
第七行 errors root 指定错误信息发送给root。
第九行create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和
原来的文件一样的权限。
第11行 #compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。

三、使用include 选项读取其他配置文件
include 选项允许系统管理员把分散到几个文件的转储信息,集中到一个
主要的配置文件。当 logrotate 从logrotate.conf 读到include 选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf 中一样。

第13行 include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d 目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM 软件包的日志转储参数一般存放在/etc/logrotate.d 目录。

include 选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d 。

典型的应用有:apache, linuxconf, samba, cron 以及syslog。

这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以了。

四、使用include 选项覆盖缺省配置

当 /etc/logrotate.conf 读入文件时,include 指定的文件中的转储参数将覆盖缺省的参数,如下例:

# linuxconf 的参数
/var/log/htmlaccess.log
{ errors jim
notifempty
nocompress
weekly
prerotate
/usr/bin/chattr -a /var/log/htmlaccess.log
endscript
postrotate
/usr/bin/chattr +a /var/log/htmlaccess.log
endscript
}
/var/log/netconf.log
{ nocompress
monthly
}

在这个例子中,当 /etc/logrotate.d/linuxconf 文件被读入时,下面的参数将覆盖/etc/logrotate.conf中缺省的参数。

Notifempty
errors jim

五、为指定的文件配置转储参数
经常需要为指定文件配置参数,一个常见的例子就是每月转储/var/log/wtmp。为特定文件而使用的参数格式是:

# 注释
/full/path/to/file
{
option(s)
}

下面的例子就是每月转储 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
{
monthly
rotate 1
}

六、其他需要注意的问题

1、尽管花括号的开头可以和其他文本放在同一行上,但是结尾的花括号必须单独成行。

2、使用 prerotate 和 postrotate 选项
下面的例子是典型的脚本 /etc/logrotate.d/syslog,这个脚本只是对
/var/log/messages 有效。

/var/log/messages
{
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
postrotate
/usr/bin/kill -HUP syslogd
/usr/bin/chattr +a /var/log/messages
endscript
}

第一行指定脚本对 /var/log messages 有效
花括号外的/var/log messages

prerotate 命令指定转储以前的动作/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”属性 endscript 结束 prerotate 部分的脚本postrotate 指定转储后的动作

/usr/bin/killall -HUP syslogd

用来重新初始化系统日志守护程序 syslogd

/usr/bin/chattr +a /var/log/messages

重新为 /var/log/messages 文件指定“只追加”属性,这样防治程序员或用户覆盖此文件。

最后的 endscript 用于结束 postrotate 部分的脚本

3、logrotate 的运行分为三步:

判断系统的日志文件,建立转储计划以及参数,通过cron daemon 运行下面的代码是 Red Hat Linux 缺省的crontab 来每天运行logrotate。

#/etc/cron.daily/logrotate
#! /bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

4、/var/log/messages 不能产生的原因:
这种情况很少见,但是如果你把/etc/services 中的 514/UDP 端口关掉的话,这个文件就不能产生了。

小结:本文通过对Red Hat 系统上典型的logrotate 配置例子的介绍,详细说明了logrotate 程序的应用方法。希望对所有Linux 系统管理员有所帮助。管理好,分析好日志文件是系统安全的第一步,在以后的文章里FreeLAMP还会介绍另外一个检查日志的好东东 logcheck。

分类: Linux工具使用 标签:

logrotate

2016年12月8日 评论已被关闭

logrotate
http://www.linuxcommand.org/man_pages/logrotate8.html

LOGROTATE(8) System Administrator’s Manual LOGROTATE(8)
NAME

logrotate – rotates, compresses, and mails system logs
SYNOPSIS

logrotate [-dv] [-f|–force] [-s|–state file] config_file+
DESCRIPTION

logrotate is designed to ease administration of systems that generate
large numbers of log files. It allows automatic rotation, compression,
removal, and mailing of log files. Each log file may be handled daily,
weekly, monthly, or when it grows too large.

Normally, logrotate is run as a daily cron job. It will not modify a
log multiple times in one day unless the criterium for that log is
based on the log’s size and logrotate is being run multiple times each
day, or unless the -f or -force option is used.

Any number of config files may be given on the command line. Later con-
fig files may override the options given in earlier files, so the order
in which the logrotate config files are listed in is important. Nor-
mally, a single config file which includes any other config files which
are needed should be used. See below for more information on how to
use the include directive to accomplish this. If a directory is given
on the command line, every file in that directory is used as a config
file.

If no command line arguments are given, logrotate will print version
and copyright information, along with a short usage summary. If any
errors occur while rotating logs, logrotate will exit with non-zero
status.

OPTIONS

-v Turn on verbose mode.
-d Turns on debug mode and implies -v. In debug mode, no changes
will be made to the logs or to the logrotate state file.
-f, –force
Tells logrotate to force the rotation, even if it doesn’t think
this is necessary. Sometimes this is useful after adding new
entries to logrotate, or if old log files have been removed by
hand, as the new files will be created, and logging will con-
tinue correctly.
-m, –mail <command>
Tells logrotate which command to use when mailing logs. This
command should accept two arguments: 1) the subject of the mes-
sage, and 2) the recipient. The command must then read a message
on standard input and mail it to the recipient. The default mail
command is /bin/mail -s.
-s, –state <statefile>
Tells logrotate to use an alternate state file. This is useful
if logrotate is being run as a different user for various sets
of log files. The default state file is /var/lib/logrotate/sta-
tus.
–usage
Prints a short usage message.

CONFIGURATION FILE

logrotate reads everything about the log files it should be handling
from the series of configuration files specified on the command line.
Each configuration file can set global options (local definitions over-
ride global ones, and later definitions override earlier ones) and
specify a logfile to rotate. A simple configuration file looks like
this:

# sample logrotate configuration file
compress

/var/log/messages {
rotate 5
weekly
postrotate
/sbin/killall -HUP syslogd
endscript
}

“/var/log/httpd/access.log” /var/log/httpd/error.log {
rotate 5
mail www@my.org
size=100k
sharedscripts
postrotate
/sbin/killall -HUP httpd
endscript
}

/var/log/news/news.crit {
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill -HUP ‘cat /var/run/inn.pid‘
endscript
nocompress
}

The first few lines set global options; in the example, logs are com-
pressed after they are rotated. Note that comments may appear anywhere
in the config file as long as the first non-whitespace character on the
line is a #.

The next section of the config files defined how to handle the log file
/var/log/messages. The log will go through five weekly rotations before
being removed. After the log file has been rotated (but before the old
version of the log has been compressed), the command /sbin/killall -HUP
syslogd will be executed.

The next section defines the parameters for both
/var/log/httpd/access.log and /var/log/httpd/error.log. They are
rotated whenever is grows over 100k is size, and the old logs files are
mailed (uncompressed) to www@my.org after going through 5 rotations,
rather then being removed. The sharedscripts means that the postrotate
script will only be run once(after the old logs have been compressed),
not once for each log which is rotated. Note that the double quotes
around the first filename at the beginning of this section allows
logrotate to rotate logs with spaces in the name. Normal shell quoting
rules apply, with ’, “, and \ characters supported.

The last section defines the parameters for all of the files in
/var/log/news. Each file is rotated on a monthly basis. This is con-
sidered a single rotation directive and if errors occur for more then
one file, the log files are not compressed.

Please use wildcards with caution. If you specify *, logrotate will
rotate all files, including previously rotated ones. A way around this
is to use the olddir directive or a more exact wildcard (such as
*.log).

Here is more information on the directives which may be included in a
logrotate configuration file:
compress
Old versions of log files are compressed with gzip by default.
See also nocompress.
compresscmd
Specifies which command to use to compress log files. The
default is gzip. See also compress.
uncompresscmd
Specifies which command to use to uncompress log files. The
default is gunzip.
compressext
Specifies which extension to use on compressed logfiles, if com-
pression is enabled. The default follows that of the configured
compression command.
compressoptions
Command line options may be passed to the compression program,
if one is in use. The default, for gzip, is “-9” (maximum com-
pression).
copy Make a copy of the log file, but don’t change the original at
all. This option can be used, for instance, to make a snapshot
of the current log file, or when some other utility needs to
truncate or pare the file. When this option is used, the create
option will have no effect, as the old log file stays in place.
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
create mode owner group
Immediately after rotation (before the postrotate script is run)
the log file is created (with the same name as the log file just
rotated). mode specifies the mode for the log file in octal
(the same as chmod(2)), owner specifies the user name who will
own the log file, and group specifies the group the log file
will belong to. Any of the log file attributes may be omitted,
in which case those attributes for the new file will use the
same values as the original log file for the omitted attributes.
This option can be disabled using the nocreate option.
daily Log files are rotated every day.
delaycompress
Postpone compression of the previous log file to the next rota-
tion cycle. This has only effect when used in combination with
compress. It can be used when some program can not be told to
close its logfile and thus might continue writing to the previ-
ous log file for some time.
extension ext
Log files are given the final extension ext after rotation. If
compression is used, the compression extension (normally .gz)
appears after ext.
ifempty
Rotate the log file even if it is empty, overiding the
notifempty option (ifempty is the default).
include file_or_directory
Reads the file given as an argument as if it was included inline
where the include directive appears. If a directory is given,
most of the files in that directory are read in alphabetic order
before processing of the including file continues. The only
files which are ignored are files which are not regular files
(such as directories and named pipes) and files whose names end
with one of the taboo extensions, as specified by the tabooext
directive. The include directive may not appear inside of a log
file definition.
mail address
When a log is rotated out-of-existence, it is mailed to address.
If no mail should be generated by a particular log, the nomail
directive may be used.
mailfirst
When using the mail command, mail the just-rotated file, instead
of the about-to-expire file.
maillast
When using the mail command, mail the about-to-expire file,
instead of the just-rotated file (this is the default).
missingok
If the log file is missing, go on to the next one without issu-
ing an error message. See also nomissingok.
monthly
Log files are rotated the first time logrotate is run in a month
(this is normally on the first day of the month).
nocompress
Old versions of log files are not compressed with gzip. See also
compress.
nocopy Do not copy the original log file and leave it in place. (this
overrides the copy option).
nocopytruncate
Do not truncate the original log file in place after creating a
copy (this overrides the copytruncate option).
nocreate
New log files are not created (this overrides the create
option).
nodelaycompress
Do not postpone compression of the previous log file to the next
rotation cycle (this overrides the delaycompress option).
nomail Don’t mail old log files to any address.
nomissingok
If a log file does not exist, issue an error. This is the
default.
noolddir
Logs are rotated in the same directory the log normally resides
in (this overrides the olddir option).
nosharedscripts
Run prerotate and postrotate scripts for every script which is
rotated (this is the default, and overrides the sharedscripts
option).
notifempty
Do not rotate the log if it is empty (this overrides the ifempty
option).
olddir directory
Logs are moved into directory for rotation. The directory must
be on the same physical device as the log file being rotated,
and is assumed to be relative to the directory holding the log
file unless an absolute path name is specified. When this option
is used all old versions of the log end up in directory. This
option may be overriden by the noolddir option.
postrotate/endscript
The lines between postrotate and endscript (both of which must
appear on lines by themselves) are executed after the log file
is rotated. These directives may only appear inside of a log
file definition. See prerotate as well.
prerotate/endscript
The lines between prerotate and endscript (both of which must
appear on lines by themselves) are executed before the log file
is rotated and only if the log will actually be rotated. These
directives may only appear inside of a log file definition. See
postrotate as well.
firstaction/endscript
The lines between firstaction and endscript (both of which must
appear on lines by themselves) are executed once before all log
files that match the wildcarded pattern are rotated, before pre-
rotate script is run and only if at least one log will actually
be rotated. These directives may only appear inside of a log
file definition. See lastaction as well.
lastaction/endscript
The lines between lastaction and endscript (both of which must
appear on lines by themselves) are executed once after all log
files that match the wildcarded pattern are rotated, after
postrotate script is run and only if at least one log is
rotated. These directives may only appear inside of a log file
definition. See lastaction as well.
rotate count
Log files are rotated <count> times before being removed or
mailed to the address specified in a mail directive. If count is
0, old versions are removed rather then rotated.
size size
Log files are rotated when they grow bigger then size bytes. If
size is followed by M, the size if assumed to be in megabytes.
If the k is used, the size is in kilobytes. So size 100, size
100k, and size 100M are all valid.
sharedscripts
Normally, prescript and postscript scripts are run for each log
which is rotated, meaning that a single script may be run multi-
ple times for log file entries which match multiple files (such
as the /var/log/news/* example). If sharedscript is specified,
the scripts are only run once, no matter how many logs match the
wildcarded pattern. However, if none of the logs in the pattern
require rotating, the scripts will not be run at all. This
option overrides the nosharedscripts option and implies create
option.
start count
This is the number to use as the base for rotation. For example,
if you specify 0, the logs will be created with a .0 extension
as they are rotated from the original log files. If you specify
9, log files will be created with a .9, skipping 0-8. Files
will still be rotated the number of times specified with the
count directive.
tabooext [+] list
The current taboo extension list is changed (see the include
directive for information on the taboo extensions). If a + pre-
cedes the list of extensions, the current taboo extension list
is augmented, otherwise it is replaced. At startup, the taboo
extension list contains .rpmorig, .rpmsave, ,v, .swp, .rpmnew,
and ~.
weekly Log files are rotated if the current weekday is less then the
weekday of the last rotation or if more then a week has passed
since the last rotation. This is normally the same as rotating
logs on the first day of the week, but it works better if logro-
tate is not run every night.

FILES

/var/lib/logrotate.status Default state file.
/etc/logrotate.conf Configuration options.
SEE ALSO

gzip(1)
AUTHORS

Erik Troan <ewt@redhat.com>
Preston Brown <pbrown@redhat.com>

4th Berkeley Distribution Wed Nov 5 2002 LOGROTATE(8)

分类: Linux工具使用 标签:

Linux — logrotate 切割 Nginx

2016年12月8日 评论已被关闭

Linux — logrotate 切割 Nginx
http://blog.sina.com.cn/s/blog_5f54f0be0101h6y8.html
logrotate是作为linux系统日志的管理工具存在。他可以轮换,压缩,邮件系统日志文件。
它默认的配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/

配置文件介绍:
========================
logrotate.conf 才主要的配置文件, logrotate.d 是一个目录, 该目录里的所有文件都会被主动的读入 /etc/logrotate.conf 中执行。
另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以 /etc/logrotate.conf 这个文件的设定来作为默认值。

切割介绍:
————————–
当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存日志。而第二次执行之后, messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存日志!如果我们仅设定保留三个日志而已的话,那么执行第四次时,则 messages.3 这个档案就会被删除,并由后面的较新的保存日志所取代!也就是会保存最新的几个日志。

当然,这个得根据配置文件中的 dateext 参数来判定:

先看 logrotate.conf 的内容:

vim /etc/logrotate.conf
# 底下的设定是 “logrotate 的默认值” ,如果別的文件设定了其他的值,
# 就会以其它文件的设定为主

weekly <==默认一周执行一次 rotate 工作
rotate 4 <==保留多少个日志文件.默认保留四个.
create <==创建新的文件.因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext <==文件后缀是日期格式,也就是切割后文件是:xxx.log-20131216.gz 这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1 这种格式
#compress <==是否压缩日志.

include /etc/logrotate.d
# 将 /etc/logrotate.d/ 目录中的所有文件都加载进来

/var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数
monthly <==每月一次切割,取代默认的一周
minsize 1M <==文件大小超过 1M 后才会切割
create 0664 root utmp <==指定新建的日志文件权限以及所属用户和组
rotate 1 <==只保留一个日志.
}
# 这个 wtmp 可记录用户登录系统及系统重启的时间
# 因为有 minsize 的参数,因此不见得每个月一定会执行一次喔.要看文件大小。

由这个文件的设定我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,虽然我们可以将所有的配置都给他写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理~
所以,如果独立出来一个目录,那么每个要切割日志的服务, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中

切割案例:syslog
============================

下面我们再以 /etc/logrotate.d/syslog 这个切割 syslog 服务的配置文件,来看看该如何设定他的 rotate 呢?

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
在上面的语法当中,我们知道正确的 logrotate 的写法为:

日志文件:
被处理的日志绝对路径.使用空格符分隔多个文件名;
执行脚本:
可调用外部指令来进行额外的命令,这个设定需与 sharedscripts …. endscript 设定合用才行。命令介绍:
prerotate:在启动 logrotate 之前进行的指令,例如修改文件的属性等动作;
postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序!

那么 /etc/logrotate.d/syslog 内设定的六个文件的切割功能就变成了:

1.该设定只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;
2.日志切割每周一次、保留四个、且切割下来的日志文件不进行压缩(未更改预设值);
3.切割完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd

假设我们有针对 /var/log/messages 这个文件增加 chattr +a 的属性时, 依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是由于加上这个 +a 的参数啊,所以更名是不可能成功的! 那怎么办呢?
就利用 prerotate 与 postrotate 来进行日志文件切割前、后所需要作的动作!

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages
endscript
}
看到否?就是先给他去掉 a 这个属性,让日志文件 /var/log/messages 可以进行切割的动作, 然后执行了切割之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP … 的意义,这一行的目的在于将系统的 syslogd 重新以其参数档 (syslog.conf) 的资料载入一次!也可以想成是 reload 的意思啦!
由于我们建立了一个新的空的纪录档,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误呦!

切割案例:Nginx
============================

在 /etc/logrotate.d 新建 nginx

/usr/local/nginx/logs/*.log {
daily
rotate 5
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

就是把日志切割后重启 nginx

Nginx 日志切割还可以这样:http://blog.sina.com.cn/s/blog_5f54f0be0100zaza.html
通过自定义的 shell 脚本去做.\
实际测试 logrotate
============================
[root@www ~]# logrotate [-vf] logfile选项与参数:
v: 启动显示模式,会显示 logrotate 执行的过程
f: 不论是否符合配置文件地规则,强制每个日志都进行 rotate 的动作

范例一: 执行一次 logrotate 看看整个流程
[root@www ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf <==读取主要设定档
including /etc/logrotate.d <==加载外部的设定
reading config file acpid <==就是外部设定啊!….(中间省略)….
Handling 21 logs <==共有 21 个日志被记录….(中间省略)….
rotating pattern: /var/log/messages /var/log/secure /var/log/maillog \
/var/log/spooler /var/log/boot.log /var/log/cron weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/messages <==开始处理 messages
log does not need rotating <==因为时间未到,不需要更动!….(底下省略)….
范例二:强制进行 logrotate 的动作
[root@www ~]# logrotate -vf /etc/logrotate.conf….(前面省略)….rotating log /var/log/messages, log->rotateCount is 4
renaming /var/log/messages.4 to /var/log/messages.5 (rotatecount 4, logstart 1, i 4),
renaming /var/log/messages.3 to /var/log/messages.4 (rotatecount 4, logstart 1, i 3),
renaming /var/log/messages.2 to /var/log/messages.3 (rotatecount 4, logstart 1, i 2),
renaming /var/log/messages.1 to /var/log/messages.2 (rotatecount 4, logstart 1, i 1),
renaming /var/log/messages.0 to /var/log/messages.1 (rotatecount 4, logstart 1, i 0),
old log /var/log/messages.0 does not exist….(底下省略)….# 看到否?整个 rotate 的动作就是这样一步一步进行的~
[root@www ~]# ll /var/log/messages*; lsattr /var/log/messages
-rw——- 1 root root 63 Apr 8 15:19 /var/log/messages
-rw——- 1 root root 670 Apr 8 14:22 /var/log/messages.1
-rw——- 1 root root 24984 Apr 1 19:26 /var/log/messages.2
-rw——- 1 root root 1911 Mar 28 11:32 /var/log/messages.3
-rw——- 1 root root 25193 Mar 22 04:02 /var/log/messages.4

上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化了!而且应该不会出现错误讯息才对!

分类: Linux工具使用 标签:

解决 debian TAB 键不能自动补全命令的原因

2016年12月8日 评论已被关闭

解决 debian TAB 键不能自动补全命令的原因

http://phpquan.com/lamp/linux/debian-tab-apt-get/

一般情况,命令行输入 sudo apt-get ins 按 tab ,它后面会自动补全为 install 如果右面写了包的名的一部分,按 tab 它也会自动完成或列出候选的,这次装了个 debian 5 突然不好使了

首先确认是否安装了 自动补全的插件,输入

apt-get install bash-completion

问了一圈都不知道,后来还是在老外的 blog 上找到答案:

即 在 .bash_profile 里加

if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

就 ok 了

链接:http://gumelta.com/add-bash-completion-in-debian.php

完整 copy 下来吧:

Add Bash Completion In Debian

ash completion is a useful tool for completion of file paths, commands etc. By default it is enabled on Ubuntu but not on Debian. With two simple steps it can also be enabled on Debian.

1. Install bash-completion

First of all we need the install the according package:

apt-get install bash-completion

2. Add it to the bash profile

Either edit the ~/.bash_profile file to enable it only for a given user or edit /etc/profile to add it system-wide. Add the following code:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
3. Try it

In order for it to work you have to log out and relogin and then you can make use of bash completion the usual way. E.g. issue:
apt-g

and then press the TAB key once and the command will be completed to apt-get. Or issue this:
apt

and then press TAB key twice. You can also try with
apt-get install apa

and then press TAB key once to complete as far as possible and a second time to list all options.

转自:http://hi.baidu.com/liheng_2009/

Sublime Text 3 快捷键精华版

2016年12月6日 评论已被关闭

Sublime Text 3 快捷键精华版
Ctrl+Shift+P:打开命令面板
Ctrl+P:搜索项目中的文件
Ctrl+G:跳转到第几行
Ctrl+W:关闭当前打开文件
Ctrl+Shift+W:关闭所有打开文件
Ctrl+Shift+V:粘贴并格式化
Ctrl+D:选择单词,重复可增加选择下一个相同的单词
Ctrl+L:选择行,重复可依次增加选择下一行
Ctrl+Shift+L:选择多行
Ctrl+Shift+Enter:在当前行前插入新行
Ctrl+X:删除当前行
Ctrl+M:跳转到对应括号
Ctrl+U:软撤销,撤销光标位置
Ctrl+J:选择标签内容
Ctrl+F:查找内容
Ctrl+Shift+F:查找并替换
Ctrl+H:替换
Ctrl+R:前往 method
Ctrl+N:新建窗口
Ctrl+K+B:开关侧栏
Ctrl+Shift+M:选中当前括号内容,重复可选着括号本身
Ctrl+F2:设置/删除标记
Ctrl+/:注释当前行
Ctrl+Shift+/:当前位置插入注释
Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的
Ctrl+Shift+A:选择当前标签前后,修改标签用的
F11:全屏
Shift+F11:全屏免打扰模式,只编辑当前文件
Alt+F3:选择所有相同的词
Alt+.:闭合标签
Alt+Shift+数字:分屏显示
Alt+数字:切换打开第N个文件
Shift+右键拖动:光标多不,用来更改或插入列内容
鼠标的前进后退键可切换Tab文件
按Ctrl,依次点击或选取,可需要编辑的多个位置
按Ctrl+Shift+上下键,可替换行
选择类
Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。
Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。
Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+↓ 效果一样。
Ctrl+Shift+L 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。
Ctrl+Shift+M 选择括号内的内容(继续选择父括号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或重写括号内里的内容。
Ctrl+M 光标移动至括号内结束或开始的位置。
Ctrl+Enter 在下一行插入新行。举个栗子:即使光标不在行尾,也能快速向下插入一行。
Ctrl+Shift+Enter 在上一行插入新行。举个栗子:即使光标不在行首,也能快速向上插入一行。
Ctrl+Shift+[ 选中代码,按下快捷键,折叠代码。
Ctrl+Shift+] 选中代码,按下快捷键,展开代码。
Ctrl+K+0 展开所有折叠代码。
Ctrl+← 向左单位性地移动光标,快速移动光标。
Ctrl+→ 向右单位性地移动光标,快速移动光标。
shift+↑ 向上选中多行。
shift+↓ 向下选中多行。
Shift+← 向左选中文本。
Shift+→ 向右选中文本。
Ctrl+Shift+← 向左单位性地选中文本。
Ctrl+Shift+→ 向右单位性地选中文本。
Ctrl+Shift+↑ 将光标所在行和上一行代码互换(将光标所在行插入到上一行之前)。
Ctrl+Shift+↓ 将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。
Ctrl+Alt+↑ 向上添加多行光标,可同时编辑多行。
Ctrl+Alt+↓ 向下添加多行光标,可同时编辑多行。
编辑类
Ctrl+J 合并选中的多行代码为一行。举个栗子:将多行格式的CSS属性合并为一行。
Ctrl+Shift+D 复制光标所在整行,插入到下一行。
Tab 向右缩进。
Shift+Tab 向左缩进。
Ctrl+K+K 从光标处开始删除代码至行尾。
Ctrl+Shift+K 删除整行。
Ctrl+/ 注释单行。
Ctrl+Shift+/ 注释多行。
Ctrl+K+U 转换大写。
Ctrl+K+L 转换小写。
Ctrl+Z 撤销。
Ctrl+Y 恢复撤销。
Ctrl+U 软撤销,感觉和 Gtrl+Z 一样。
Ctrl+F2 设置书签
Ctrl+T 左右字母互换。
F6 单词检测拼写
搜索类
Ctrl+F 打开底部搜索框,查找关键字。
Ctrl+shift+F 在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找,略高端,未研究。
Ctrl+P 打开搜索框。举个栗子:1、输入当前项目中的文件名,快速搜索文件,2、输入@和关键字,查找文件中函数名,3、输入:和数字,跳转到文件中该行代码,4、输入#和关键字,查找变量名。
Ctrl+G 打开搜索框,自动带:,输入数字跳转到该行代码。举个栗子:在页面代码比较长的文件中快速定位。
Ctrl+R 打开搜索框,自动带@,输入关键字,查找文件中的函数名。举个栗子:在函数较多的页面快速查找某个函数。
Ctrl+: 打开搜索框,自动带#,输入关键字,查找文件中的变量名、属性名等。
Ctrl+Shift+P 打开命令框。场景栗子:打开命名框,输入关键字,调用sublime text或插件的功能,例如使用package安装插件。
Esc 退出光标多行选择,退出搜索框,命令框等。
显示类
Ctrl+Tab 按文件浏览过的顺序,切换当前窗口的标签页。
Ctrl+PageDown 向左切换当前窗口的标签页。
Ctrl+PageUp 向右切换当前窗口的标签页。
Alt+Shift+1 窗口分屏,恢复默认1屏(非小键盘的数字)
Alt+Shift+2 左右分屏-2列
Alt+Shift+3 左右分屏-3列
Alt+Shift+4 左右分屏-4列
Alt+Shift+5 等分4屏
Alt+Shift+8 垂直分屏-2屏
Alt+Shift+9 垂直分屏-3屏
Ctrl+K+B 开启/关闭侧边栏。
F11 全屏模式
Shift+F11 免打扰模式

执行脚本出现bin/bash: bad interpreter: No such file or directory(转)

2016年12月5日 评论已被关闭

执行脚本出现bin/bash: bad interpreter: No such file or directory(转)

http://xafc2370.iteye.com/blog/1484686
刚刚学习SHELL 写了一个简单的例子发生如下错误

-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

VI打开文件,没发现任何问题,

把/bin/bash改成/bin/sh

-bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory

依然报错,脚本内容在VI下没有任何问题,仔细一看错误消息,^M..明显在第一行末尾被加入了个^M,

这种情况应该有两种原因

1.在WIN底下用文本编辑工具修改过参数变量,在保存的时候没注意编码格式造成的,

2.也有可能是在VIM里修改,第一行末尾按到ctrl_v

错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
(1). vi filename
然后用命令
:set ff?
可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出. 再运行一遍看.

2.可以用执行dos2unix 命令转换编码

#dos2unix myshell.sh

3..也可以用sed 这样的工具来做:
sed ‘s/^M//’ filename > tmp_filename
mv -f tmp_filename filename
来做
特别说明:^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)

关于^M

new line of DOS/Windows

new line of dos/win: 0X0d0a
new line of linux/unix: 0X0a

分类: Linux工具使用 标签:

bin/sh^M: bad interpreter: No such file or directory解决

2016年12月5日 评论已被关闭

bin/sh^M: bad interpreter: No such file or directory解决

http://www.2cto.com/os/201309/246535.html

bin/sh^M: bad interpreter: No such file or directory解决

原因是.sh脚本在windows系统下用记事本文件编写的。不同系统的编码格式引起的。

转行文件的编码格式:

1、确保用户对文件有读写及执行权限

oracle@linux-106:~/RMAN/bin> chmod a+x test.sh

2、然后修改文件格式

(1)使用vi工具

oracle@linux-106:~/RMAN/bin> vi test.sh

(2)利用如下命令查看文件格式
:set ff 或 :set fileformat
可以看到如下信息
fileformat=dos 或 fileformat=unix
(3) 利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix
:wq (存盘退出)

3、最后再执行

oracle@linux-106:~/RMAN/bin> ./test.sh

Linux下执行.sh脚本错误:command not found

command not found这个问题一般都是像我这样的新手才会犯的,所以刚学linux的童鞋们遇到这个问题可以看看我的解释,可能会给你帮助。

其实这个问题可能是很多原因引起的,今天我碰到原因很值得关注,一般我们在写java代码的时候定义变量都喜欢这样写” String test = “ ”; ”。今天我写了一个shell脚本,在脚本里定义了一个变量,(“host = “””),结果执行的时候出现了这个command not found。我是冥思苦想啊,怎么想也想不出为什么,后来我终于发现问题的所在了就是一个空格在作怪,其实在定义shell脚本的变量时在变量名和等号之间是不允许有空格的,而我写的是test和=之间有空格,所以系统默认为,test是一个命令,所以系统找不到这个命令。切记切记,小问题有时候也会让你停滞不前的。

分类: Linux工具使用 标签:

Sublime默认系统语言设置

2016年12月5日 评论已被关闭

Sublime默认系统语言设置

Sublime Text 2默认使用的就是UTF8,这个UTF8模式使用的是不带BOM的,如果要修改这个配置,到Perference->Settings-User->中添加:”default_encoding”: “UTF-8″,而后保存即可。UTF-8可以替换成你需要的编码格式。
通过samba,在win7上面编辑ubuntu下面的文件,保存的时候,有时候会发现文件被保存为dos格式的(如换行等),只能在ubuntu下面通过命令来一个一个转换。可不可以设置sublimetext的默认保存格式是unix的呢?
文件的格式控制可以Perference->Setting-*中找到。设置对象是default_line_ending,这个参数有三 个可用选
项:system,windows,unix,system是根据当前系统情况设置,windows使用的CRLF,unix使用的是 LF。按你的情况,应该在Setting-User中设置”default_line_ending”:”unix”就可以解决这个问题。
windows和linux中换行符的转换
windows 文件的换行符为:[CR][LF]
Linux和Unix文件的换行符为:[LF]
有些需要转换使用,如修改或替换安卓andriod的hosts文件,需要保证换行符为Unix形式才能使用。
其中一种办法是在linux系统中重新保存一份文件;
但是:如何在windows系统中,转换成Unix / Linux / Mac 换行符呢

用软件Sublime打开要转换的文件,
菜单 view -> Line Endings -> Unix 保存

分类: Linux工具使用 标签:

Sublime Text 3 绝对神器

2016年12月5日 评论已被关闭

Sublime Text 3 绝对神器

http://www.cnblogs.com/bananaplan/p/Sublime-Text-3-Powerful.html

 

距第一篇的开箱水文,已经有4个月的时间了,但因为懒,就没有下文了。终于,今天,我觉得写一篇准技术文章了。

忘记了是怎么开始用的ST,应该是在网上看到别人推荐才用到吧,用了有半年了。在windows下是绝对的神器,Notepad++之类的无可比拟;linux下,因为有个vim,鄙人对vim不懂,所以孰好孰更好,不好说。总结起来就是,神器一般的轻量级的面向php、python等开发者的文本编辑器,相当灰常不错,推荐给你。

我主要用它来写PHP,真是相当的好用。在写python方面可能也挺好用;写ruby不知道情况怎么样,有没有用它来写的。总之,ST比较适合写一些脚本语言,至于像C#,Java等还是用传统经典的IDE吧。

 

一、安装Sublime Text 3

官网 http://www.sublimetext.com/3

一定要选择ST3,而不是ST2,3比2好用,真的,后面你就知道了。

选择对应的版本安装。完事后,要安装一个基础的、必备的包管理:Package Control,用来以后安装插件用的。

Package Control安装

  安装指导  https://sublime.wbond.net/installation

打开ST3,点击菜单 View -> Show Console,会在底部出现一个命令输入框,然后将上面的命令拷贝到输入框中,回车,等待,安装成功。

 

二、插件安装

经过上面安装了Package Control后,我们就可以通过快捷键 Ctrl+Shift+P 打开Package Control来安装插件了。在打开的输入框中输入 install ,会根据你的输入自动提示,选择 Install Package。

等待,然后又会弹出一个输入框,让你输入你要安装的插件。

我们要安装支持非UTF8编码的一个插件,只需要在输入框中输入convert,自动匹配后,选择 ConvertToUTF8 插件,回车,等待,安装完毕,这样,ST就支持显示如 GBK 等编码的内容了。

我以为必装的插件

(主要针对PHP开发,其他语言大部分通用,请读者自行选择)

1、ConvertToUTF8  支持 GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS 等编码的插件

2、Bracket Highlighter  用于匹配括号,引号和html标签。对于很长的代码很有用。安装好之后,不需要设置插件会自动生效

3、DocBlockr  DocBlockr可以自动生成PHPDoc风格的注释。它支持的语言有Javascript, PHP, ActionScript, CoffeeScript, Java, Objective C, C, C++

4、Emmet(Zen Coding)  快速生成HTML代码段的插件,强大到无与伦比,不知道的请自行google

5、SideBar Enhancements  这个插件改进了侧边栏,增加了许多功能

6、Themr  主题管理,切换主题的时候,不用自己修改配置文件了,用这个可以方便的切换主题

请参考  http://www.ladyloveit.com/sublime/developers-commonly-used-10-sublime-text-plugin

三、通用快捷键

了解并熟练掌握快捷键,才能让你有健步如飞的赶脚,so,下面我们了解一下ST有哪些好用的快捷键操作,此处只讲我平时开发时常用的,完整的快捷键操作请读者自行google。

1、Ctrl+Shift+P

打开Package Control,上面已经介绍过了。这里还有个技巧,此技巧在下面的各种地方都能用的上,就是ST支持模糊匹配。比如,你想找Install Package,你在 Package Control 的输入框中install,可以自动匹配到Install Package,也可以简单的输入ip,也能匹配到它,这种模糊匹配的功能很方便。

2、Ctrl+P

根据文件名打开文件。比如你想打开login/func/funtion.php,你只要在输入框中输入login/func/funtion.php即可,也可以用模糊匹配,如login/function等,模糊匹配还是自己去体验吧。

3、找到了我们要查看的源码文件后,想找函数方法怎么办?

Ctrl+R

输入log,能找到所有名带log的方法,输入loginout,则能定位到loginout()。

大家可能会注意到,Ctrl+R后,在输入框中会自动有一个@,这就是要匹配方法的意思。那么,除此之外,还有些有用的匹配符号,就一并说了。

定位到行,Ctrl+G,或Ctrl+P后,在框中输入:行数,如:58,则要跳转到58行去。

查找标识,Ctrl+P后,#标识。

4、学会了以上快捷操作,基本上能玩得转ST了,能用ST写PHP不成问题了,在各个文件中切来切去,快速跳到方法,都很爽了。但想用的更爽,更顺滑,如丝般赶脚,还看下面

多处同步编辑,Ctrl+D,此功能我常用,很好。

当你想同时修改多个相同代码的时候,比如,将

$user[‘name’] = ‘bananaplan’;

$user[‘age’] = 28;

$user[‘desc’] = ‘弟要永远的28岁’;

中的user统一改成member,可以双击选中user,然后Ctrl+D,会向下连选user,重复,直到你满意的位置,然后就可以统一编辑了。

  —->  

有人说了,切,这算什么,完全可以用查找替换呀,是的,查找替换是可以实现,但我脚着这种方式更直观一些,而且不易出错。正所谓,英雄所见,各有不同,请看官自斟。

其实,除了用Ctrl+D快捷键的方式,还有用鼠标的方式实现连选。按住Ctrl,然后双击选中多个即可。

其实除了,以上的2中方式实现同步编辑以外,还有一个方式。那就是,按住Shift,然后按住鼠标右键,最后,垂直向下拉。这种方式有限制,就是只能垂直选中,适用于代码段有点长的场景,如下

5、感觉这么写,非写残了不可,不能这么详细了,下面把重要的详细写,网上都能找得到的,就简单说说即可

下面要说的这个大家司空见惯,但我还是要讲一讲。

Ctrl+F,查找,左边的选项就不多说了,自己看提示吧,英文的,叫你不好好学英文,话说,现在高考好像要逐渐削弱英语的分量。注意,最下面,会提示你 2 of 5 matches,总共找到了5个,你现在匹配到的是第二个,我觉得这个小提示很管用。

Ctrl+F后,Enter查找下一个,Shift+Enter,查找上一个。

Ctrl+H,查找替换,就不多说了。

Ctrl+Shift+F,这个得加粗,飘红,就指着它活着呢。怎么说呢,可以叫全项目查找,就是在你当前打开的项目中,根据你输入的字符查找。

如上,我们在wp文件夹中查找含有 have_posts 的文件。三言两语,可能道不尽其中用法,请看官自行体验。

想当初,俺不知道有ST这么个好东西,就只用NotePad++的时候,为了实现全文查找替换,特意写了个PHP脚本以实现此功能。

———-感觉写累了,这活还真不好干,认认真真的写博不容易呀。剩下的快捷键好像也没什么要浓墨重彩的细说了,请各位自行参考网上资料———-

参考  http://ce.sysu.edu.cn/hope/Item/106853.aspx

 

四、说说ST的好处

1、PHP代码自动提示;且已有字符串自动提示

杠杠的好用,PHP代码自动提示,不用解释了。已有字符串自动提示,请看下图

$st_so_powerful不是PHP内置变量,但是却可以有自动提示,是因为在代码中已存在,所以可以提示已存在的字符,这功能可以大大节约你敲代码的时间。

2、代码模板,快速生成代码

你敲个ifelse,会帮你快速生成 if else 的代码模板。关键是在PHP代码和在HTML代码中,会生成对应的的内容,言语难表,请看下图

 PHP代码中生成的                HTML代码中生成的

我就不解释了,请自悟。

再说下在HTML中代码生成的关键字:php  echo  if  ifelse  foreach,够用了不?

还不够用???哦,那这一块代码模板自定义的高级用法,请自行google:Sublime Text Snippet

还得回来补一下,要不你可能得骂我。因为你输入了 if 后,没反应,要按 Tab 键啊,大哥。

3、真心写累了,就结束了吧,在最后放一个重量级的重磅炸弹功能,请注意,此功能仅在ST3中有效

我为什么用IDE,哦,对了,得先说我用什么IDE,那就是非常好用的 Zend Studio,我只在乎它的两个功能:1、代码跳转,即跳转到变量或函数定义的地方;2、函数在哪些地方被引用的(这个是重量级的杀手功能,我试过其他PHP IDE都没有)。

当然你不能指望咱小小的ST能有这重量级杀手功能,但现在ST3有第一个功能,即代码跳转,可以跳转到函数定义的地方。这个功能的重要意义在于,你现在完全可以用ST3来取代其他非 Zend Studio IDE 了,真的。上图:

如果你要跳转的函数在只在一个文件中定义了,则直接跳转过去;否则,会提供选项,让你选择跳转到哪个文件。

此功能虽然还没有 Zend Studio 智能(Zend是直接很智能的就跳到对应的文件了),但已经很不错了,不是吗?

丫的,还得再再补一下,年龄大了,脑子不好使了。忘了说跳转的方法,选中调用的函数方法名,点F12,就能跳过去了。如果出现F12快捷键被占用的情况,请修改默认快捷键,将跳转到函数的快捷键自定义,可以自定义为{ “keys”: [“f3”], “command”: “goto_definition” },因为我以前写Java的,用Eclipse好些好些年了,所以习惯F3跳转到函数,读者自便。至于自定义快捷键的方法,请google

4、虽然写累了,发布了,但又突然想起还有一个很重要的功能,不得不说,所以回来补一下

那就是,将文件夹加入项目,点击菜单 Project -> Add Fold To Project,选择你要加入项目的文件夹即可。

当你将很多文件夹加入项目之后,你会发现一个小小的问题,那就是Ctrl+P切换文件的时候,可选列表有点长,那是因为,你的项目多啊,可能会出现很多相同名称的文件,而且左边项目列表看起来也不清爽。什么?你没看见左边有项目列表,请点击 View -> Side Bar -> Show Side Bar。

所以,我们可以一个项目占一个工作空间,要写哪个项目,就切换到哪个项目中去。

具体操作:当你把一个文件夹加入到项目中后,点击菜单 Project -> New Workspace For Project,为这个单独的项目建一个工作空间,注意,当前要只有一个项目,如果有两个或以上的项目,那么这些都会被加入的新的工作空间里去的,对于此,我不是很确定,但我上次操作好像是这样的。新的工作空间和项目的保存路径可以放到你项目的根目录下。比如,我的项目文件夹是mybiaoke,我就把那两个文件保存到这下面了。

完事之后,我们想切换项目还怎么办呢,用快捷键 Ctrl+Alt+P ,很快的就切过去了。

对于这个功能,我的操作方式和步骤不知道是不是科学,但至少可以实现,请懂的同学指点。

 

好了,It’s time to finish. 有写错的地方,还望谅解,第一次写这么长。。。。。。。。。。。。。。。准技术文,累,有 任何疑问好的使用方法 欢迎提出和共享。

自此,神器一出,谁与争锋。