[Apache]访问日志IP统计

这两个服务器apache error日志暴涨~~~,检查了下日志,封了几个IP

日志内容如图~~~

 

QQ20141206-1

cat ip-error.log |awk -F " " '{print $8}'|sed 's/]//g'|sort|uniq -c|sort -rn

首先用awk 过滤出IP. 以空格位分隔符,打印第八个域,然后用sed 把多余出来的]替换,再排序统计,最后输出到一个文件

得到如图锁所示IP,然后检查量比较大的IP,封了有问题的就OK

iptables -I INPUT -s ip -j DROP

 

QQ20141206-2.

[Python]脚本 mysql+web文件备份

由于担心服务器数据安全,所以写了这个脚本,结合前边分享的Server/Client 文件互传,可以备份网站数据到本地,安全又可靠

#!/usr/bin/python
# Filename: webbak.py
import os
import time
import tarfile

os.chdir('/home/web/') #切换目录
source = 'leonis'
bakdir = '/home/web/leonis/'
# mysql dump 
dump = 'mysqldump'
dbuser = 'XXXXXXX'
dbpwd = 'XXXXXXXXXXX'
dbname = 'XXXXXXXX'
sqlfile = '/home/web/leonis/leonis.sql'
sql = "%s -u%s -p%s %s >  %s" % (dump,dbuser,dbpwd,dbname,sqlfile) 
if os.path.exists(sqlfile):  
    os.remove(sqlfile)
else:
    print 'then will dump sql file'
result = os.popen(sql)
if result:              #
	print ("SQL backup completed!")
else:
	print ("SQL backup failed!")
# gzip 压缩 以当日日期命名
filename = bakdir + time.strftime('%Y%m%d')+'.tar.gz'
tar = tarfile.open(filename,"w:gz")
tar.add(source)
tar.close()

[python]学习笔记:字符串

Python学习笔记:字符串
startswith 检测开头
示例:

1. a = 'leonis'
if a.startswith('le’):
print ‘le’

endswith 检测结尾
示例:

1. a = ‘leonis'
if a.endswith(‘is’):
print ‘is’

in 检测是否为其中一部分
示例:

1. a = ‘leonis’
if ‘o’ in a:
print ‘a’

find 查询包含
示例:

1. a= ‘leonis’
if a.find(‘on’) != -1:
print(‘on’)

join 连接字符串
示例:

1. a = ' '
mylist = ['Brazil','Russia','India','China']
print a.join(mylist)
2. mylist = ['Brazil','Russia','India','China’]
print ‘_’.join(mylist)

split 拆分字符串

1. b = 'my..name..is..leonis’
print b
print b.split('..’)
2. b = ‘my..name..is..leonis’
print b
print b.split(‘..’,1)

[分享]用python实现简单Server/Client文件传输

最近在学习python,由于需要备份服务器上的文件,又不想用第三方的,打算自己写个,百度了下发现个不错的脚本,分享学习下

服务器端:

#!/usr/bin/python
import SocketServer, time
class MyServer(SocketServer.BaseRequestHandler):
userInfo = {
'leonis' : 'leonis',
'hudeyong' : 'hudeyong',
'mudan' : 'mudan' }
def handle(self):
print 'Connected from', self.client_address
while True:
receivedData = self.request.recv(8192)
if not receivedData:
continue
elif receivedData == 'Hi, server':
self.request.sendall('hi, client')
elif receivedData.startswith('name'):
self.clientName = receivedData.split(':')[-1]
if MyServer.userInfo.has_key(self.clientName):
self.request.sendall('valid')
else:
self.request.sendall('invalid')
elif receivedData.startswith('pwd'):
self.clientPwd = receivedData.split(':')[-1]
if self.clientPwd == MyServer.userInfo[self.clientName]:
self.request.sendall('valid')
time.sleep(5)
sfile = open('down.sh', 'rb')
while True:
data = sfile.read(1024)
if not data:
break
while len(data) > 0:
intSent = self.request.send(data)
data = data[intSent:]
time.sleep(3)
self.request.sendall('EOF')
else:
self.request.sendall('invalid')
elif receivedData == 'bye':
break
self.request.close()
print 'Disconnected from', self.client_address
print
if __name__ == '__main__':
print 'Server is started\nwaiting for connection...\n'
srv = SocketServer.ThreadingTCPServer(('ip', 50000), MyServer)
srv.serve_forever()

客户端:

import socket, time
class MyClient:
def __init__(self):
print 'Prepare for connecting...'
def connect(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('ip', 50000))
sock.sendall('Hi, server')
self.response = sock.recv(8192)
print 'Server:', self.response
self.s = raw_input("Server: Do you want get the 'thinking in python' file?(y/n):")
if self.s == 'y':
while True:
self.name = raw_input('Server: input our name:')
sock.sendall('name:' + self.name.strip())
self.response = sock.recv(8192)
if self.response == 'valid':
break
else:
print 'Server: Invalid username'
while True:
self.pwd = raw_input('Server: input our password:')
sock.sendall('pwd:' + self.pwd.strip())
self.response = sock.recv(8192)
if self.response == 'valid':
print 'please wait...'
f = open('down.sh', 'wb')
while True:
data = sock.recv(1024)
if data == 'EOF':
break
f.write(data)
f.flush()
f.close()
print 'download finished'
break
else:
print 'Server: Invalid password'
sock.sendall('bye')
sock.close()
print 'Disconnected'
if __name__ == '__main__':
client = MyClient()
client.connect()

原文地址:http://yangsq.iteye.com/blog/129380

apache 记录来访日志,并按照日期进行分割

逐个对每个虚拟主机进行配置的,找到一个虚拟主机,添加如下内容

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
CustomLog "/usr/logs/logs/access_log" combined

然后,这样的话当前的虚拟主机的日志就会放到/data/wwwlogs/apache/

<VirtualHost *:80>
...
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
CustomLog "/data/wwwlogs/apache/access_log" combined
</VirtualHost>

如果要添加按照日期进行划分,如下请修改:

CustomLog "/backup/logs/access_log" combined
CustomLog "|/usr/local/apache/bin/rotatelogs /data/wwwlogs/apache/access.%Y%m%d 86400" common

 

/usr/local/apache/                    apache路径

/data/wwwlogs/apache/           日志路径

access                                       日志前缀

%Y%m%d                                    后缀格式

86400                                       分割时长

具体日志命名如下:access.20140608

安装phpredis扩展以及phpRedisAdmin工具

先从phpredis的git拿到最新的源码包:

http://notech.net/351.cc

nginx 各种网站程序Rewrite(伪静态)

Rewrite(伪静态规则)。

#Discuz 7.2 Nginx伪静态

rewrite ^/archiver/((fid|tid)-[w-]+.html)$   /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+).html$   /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
rewrite ^/profile-(username|uid)-(.+).html$ /viewpro.php?$1=$2 last;
rewrite ^/space-(username|uid)-(.+).html$   /space.php?$1=$2 last;
rewrite ^/tag-(.+).html$ /tag.php?name=$1 last;break;

WordPress:

location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}

 

PHPCMS:

location / {
###以下为PHPCMS 伪静态化rewrite规则
rewrite ^(.*)show-([0-9]+)-([0-9]+).html$ $1/show.php?itemid=$2&page=$3;
rewrite ^(.*)list-([0-9]+)-([0-9]+).html$ $1/list.php?catid=$2&page=$3;
rewrite ^(.*)show-([0-9]+).html$ $1/show.php?specialid=$2;

####以下为PHPWind 伪静态化rewrite规则
rewrite ^(.*)-htm-(.*)$ $1.php?$2 last;
rewrite ^(.*)/simple/([a-z0-9_]+.html)$ $1/simple/index.php?$2 last;
}

 

ECSHOP:

if (!-e $request_filename)
{
rewrite "^/index.html" /index.php last;
rewrite "^/category$" /index.php last;
rewrite "^/feed-c([0-9]+).xml$” /feed.php?cat=$1 last;
rewrite “^/feed-b([0-9]+).xml$” /feed.php?brand=$1 last;
rewrite “^/feed.xml$” /feed.php last;
rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-

([a-zA-Z]+)(.*).html$” /category.php?

id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*).html$”

/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$”

/category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*).html$” /category.php?

id=$1&brand=$2&page=$3 last;
rewrite “^/category-([0-9]+)-b([0-9]+)(.*).html$” /category.php?id=$1&brand=$2 last;
rewrite “^/category-([0-9]+)(.*).html$” /category.php?id=$1 last;
rewrite “^/goods-([0-9]+)(.*).html” /goods.php?id=$1 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$” /article_cat.php?

id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*).html$” /article_cat.php?id=$1&page=$2 last;
rewrite “^/article_cat-([0-9]+)(.*).html$” /article_cat.php?id=$1 last;
rewrite “^/article-([0-9]+)(.*).html$” /article.php?id=$1 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+).html” /brand.php?

id=$1&cat=$2&page=$3&sort=$4&order=$5 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*).html” /brand.php?id=$1&cat=$2&page=$3

last;
rewrite “^/brand-([0-9]+)-c([0-9]+)(.*).html” /brand.php?id=$1&cat=$2 last;
rewrite “^/brand-([0-9]+)(.*).html” /brand.php?id=$1 last;
rewrite “^/tag-(.*).html” /search.php?keywords=$1 last;
rewrite “^/snatch-([0-9]+).html$” /snatch.php?id=$1 last;
rewrite “^/group_buy-([0-9]+).html$” /group_buy.php?act=view&id=$1 last;
rewrite “^/auction-([0-9]+).html$” /auction.php?act=view&id=$1 last;
rewrite “^/exchange-id([0-9]+)(.*).html$” /exchange.php?id=$1&act=view last;
rewrite “^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$

” /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;
rewrite ^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$” /exchange.php?

cat_id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/exchange-([0-9]+)-([0-9]+)(.*).html$” /exchange.php?cat_id=$1&page=$2 last;
rewrite “^/exchange-([0-9]+)(.*).html$” /exchange.php?cat_id=$1 last;
}

 

SHOPEX:

location / {
if (!-e $request_filename) {
rewrite ^/(.+.(html|xml|json|htm|php|jsp|asp|shtml))$ /index.php?$1 last;
}
}

 

SaBlog 2.0:

# 只带月份的归档
rewrite "^/date/([0-9]{6})/?([0-9]+)?/?$" /index.php?action=article&setdate=$1&page=$2 last;
# 无分类翻页
rewrite ^/page/([0-9]+)?/?$ /index.php?action=article&page=$1 last;
# 分类
rewrite ^/category/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&cid=$1&page=$2 last;
rewrite ^/category/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&curl=$1&page=$2 last;
# 归档、高级搜索
rewrite ^/(archives|search|article|links)/?$ /index.php?action=$1 last;
# 全部评论、标签列表、引用列表 带分页
rewrite ^/(comments|tagslist|trackbacks|article)/?([0-9]+)?/?$ /index.php?action=$1&page=$2 last;
# tags
rewrite ^/tag/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&item=$1&page=$2 last;
# 文章
rewrite ^/archives/([0-9]+)/?([0-9]+)?/?$ /index.php?action=show&id=$1&page=$2 last;
# RSS rewrite ^/rss/([0-9]+)?/?$ /rss.php?cid=$1 last;
rewrite ^/rss/([^/]+)/?$ /rss.php?url=$1 last;
# 用户 rewrite ^/uid/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&uid=$1&page=$2 last;
rewrite ^/user/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&user=$1&page=$2 last;
# 地图文件
rewrite sitemap.xml sitemap.php last;
# 自定义链接
rewrite ^(.*)/([0-9a-zA-Z-_]+)/?([0-9]+)?/?$ $1/index.php?action=show&alias=$2&page=$3 last;

 

Discuz 7:

rewrite ^/archiver/((fid|tid)-[w-]+.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+).html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+).html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+).html$ /tag.php?name=$1 last;

 

Typecho:

location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}

 

modoer:

 

location / {
#index
rewrite ^(.*)/index.html$ $1/index.php last;
#shop comment
rewrite ^(.*)/shop/cate_([0-9]+)_order_([a-z0-9]+)_type_([a-z0-9]+)_offset_([0-9]+).html $1/shop/cate.php?cd=$2&order=$3&ty
pe=$4&offset=$5 last;
rewrite ^(.*)/shop/cate_([0-9]+)_areacode_([0-9]+)_order_([a-z0-9]+)_type_([a-z0-9]+)_offset_([0-9]+).html $1/shop/cate.php
?cd=$2&areacode=$3&order=$4&type=$5&offset=$6 last;
rewrite ^(.*)/shop/cate_([0-9]+)_areacode_([0-9]*)_streetcode_([0-9]*)_order_([a-z0-9]+)_type_([a-z0-9]+)_offset_([0-9]+).h
tml $1/shop/cate.php?cd=$2&areacode=$3&streetcode=$4&order=$5&type=$6&offset=$7 last;
rewrite ^(.*)/shop/cate_([0-9]+)_([a-z0-9]+)_([0-9]+).html $1/shop/cate.php?cd=$2&order=$3&page=$4 last;
rewrite ^(.*)/shop/cate_([0-9]+).html $1/shop/cate.php?cd=$2 last;
rewrite ^(.*)/shop/(shop_|)([0-9]+).html$ $1/shop/shop.php?shopid=$3 last;
rewrite ^(.*)/shop/(shop_|)([0-9]+)$ $1/shop/shop.php?shopid=$3 last;
rewrite ^(.*)/shop/viewreview_([0-9]+).html#respond$ $1/shop/viewreview.php?reviewid=$2#respond last;
rewrite ^(.*)/shop/viewreview_([0-9]+).html$ $1/shop/viewreview.php?reviewid=$2 last;
rewrite ^(.*)/shop/search.html$ $1/shop/search.php last;
rewrite ^(.*)/shop/search_([0-9]+).html$ $1/shop/search.php?searchid=$2&searchsubmit=yes last;
rewrite ^(.*)/shop/rss.xml$ $1/shop/rss.php last;
rewrite ^(.*)/shop/rss_cd_([0-9]+).xml$ $1/shop/rss.php?cd=$2 last;
rewrite ^(.*)/shop/top_pcd_([0-9]+).html$ $1/shop/top.php?pcd=$2 last;
rewrite ^(.*)/shop/top_pcd_([0-9]+)_sort_([a-z0-9]+).html$ $1/shop/top.php?pcd=$2&sort=$3 last;
rewrite ^(.*)/shop/reviews.html$ $1/shop/reviews.php last;
rewrite ^(.*)/shop/reviews_pcd_([0-9]+).html$ $1/shop/reviews.php?pcd=$2 last;
rewrite ^(.*)/shop/reviews_pcd_([0-9]+)_order_([a-z0-9]+)_day_([0-9]+).html$ $1/shop/reviews.php?pcd=$2&order=$3&day=$4 last
;
rewrite ^(.*)/shop/allpic_pcd_([0-9]+).html$ $1/shop/allpic.php?pcd=$2 last;
rewrite ^(.*)/shop/allpic.html$ $1/shop/allpic.php last;
rewrite ^(.*)/shop/tag_(.+).html$ $1/shop/tag.php?tagname=$2 last;
rewrite ^(.*)/shop/tag.html $1/shop/tag.php last;
#person space
rewrite ^(.*)/space/([0-9]+)_([a-z]+)(.html|)$ $1/space/index.php?suid=$2&n=$3 last;
rewrite ^(.*)/space/([0-9]+)(.html|)$ $1/space/index.php?suid=$2 last;
#cash center
rewrite ^(.*)/exchange/index.html$ $1/exchange/index.php last;
rewrite ^(.*)/exchange/gift_([0-9]+).html$ $1/exchange/index.php?action=gift&giftid=$2 last;
#Discount Card
rewrite ^(.*)/coupon/index.html$ $1/coupon/index.php last;
rewrite ^(.*)/coupon/([0-9]+).html$ $1/coupon/index.php?ac=detail&couponid=$2 last;
rewrite ^(.*)/coupon/order_([a-z]+).html$ $1/coupon/index.php?order=$2 last;
rewrite ^(.*)/coupon/pcd_([0-9]*)_order_([a-z]+).html$ $1/coupon/index.php?pcd=$2&order=$3 last;
#news
rewrite ^(.*)/article/([0-9]+).html$ $1/article/article.php?articleid=$2 last;
rewrite ^(.*)/article/classid_([0-9]+)_order_([a-z]+).html$ $1/article/index.php?classid=$2&order=$3 last;
rewrite ^(.*)/article/classid_([0-9]+).html$ $1/article/index.php?classid=$2 last;
rewrite ^(.*)/article/list_shopid_([0-9]+).html $1/article/list.php?shopid=$2 last;
rewrite ^(.*)/article/index.html$ $1/article/index.php last;
#member card
rewrite ^(.*)/card/index.html$ $1/card/index.php last;
rewrite ^(.*)/card/pcd_([0-9]+).html$ $1/card/index.php?pcd=$2 last;
}

 

 

Linux添加时间戳,查询某个用户在某个时间执行某条命令

history 是一条非常实用的 shell 命令,可以显示出之前在 shell 中运行的命令,但是如果需要查什么时候什么人执行了什么命令似乎还是非常吃力,因为你即使查到了一条你认为不应该执行的命令,你也不能准确的说出这条命令是谁来执行的,更不能精确的指出这条命令就是事故发生的时候执行的,怎么办? shterm? 这个对于一般中小型公司来说似乎还是非常昂贵的,怎么办? 

设置很简单:

[dbadmin@JR-ZR01-TEST ~]$ history

1 ls
2 pwd
3 iptables-save
4 history
5 unset HISTTIMEFORMAT
6 history
设置方法:

[root@MO-ZR01-WEB&nbsp;~]#&nbsp;export&nbsp;HISTTIMEFORMAT="%F %T `whoami` "
[root@MO-ZR01-WEB&nbsp;~]# echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >>&nbsp;/etc/profile
[dbadmin@JR-ZR01-TEST ~]$ history
1 2008-06-20 05:36:14 dbadmin ls
2 2008-06-20 05:36:16 dbadmin pwd
3 2008-06-20 05:36:19 dbadmin iptables-save
4 2008-06-20 05:36:23 dbadmin history
5 2008-06-20 05:36:31 dbadmin unset HISTTIMEFORMAT
6 2008-06-20 05:36:32 dbadmin history
7 2008-06-20 05:37:19 dbadmin export HISTTIMEFORMAT="%F %T `whoami` "
8 2008-06-20 05:37:20 dbadmin history

HISTTIMEFORMAT 的格式就是 strftime 函数的格式,比如上面的  “%F %T”,%F 表示显示出 Y-M-D 格式的日期,%T 表示显示出  H-M-S 这样格式的时间。更多的格式,可以参考 man strftime

Linux 删除指定日期之前的文件

要删除系统中就的备份文件,就需要使用命令了:

#find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} ;

 

假如在一个目录中保留最近30天的文件,30天前的文件自动删除

#find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} ;

 

/tmp –设置查找的目录;

-mtime +30 –设置时间为30天前;

-type f –设置查找的类型为文件;

-name *.sh[ab] –设置文件名称中包含sha或者shb;

-exec rm -f –查找完毕后执行删除操作;

提示:将此命令写入crontab后即可自动完成查找并删除的工作

另外的方法大同小异

#find . -mtime +30 -type f | xargs rm -rf

 

我的操作是:先ls -ltr 查看时间,没有太久的所以就用 -cmin n查找系统中最后N分钟被改变文件状态的文件。具体命令:

$ find /home/oracle/test6 -cmin +20 -type f -name *.xml -exec rm -f { } ;

 

另外的方法大同小异

#find . -mtime +30 -type f | xargs rm -rf

$find . -type f -cmin +10 -exec rm -rf *.xml {} ;

find . type f -name "debug*" -atime +3 -exec rm -f {} ;

 

首先cd进入目录:

find . -name "*~" -exec rm {} ;

find . -ctime +n -exec -exec rm -vi {} ;

 

这里的+n是指多少天以前,比如:+7

find . -ctime +7 -exec -exec rm -vi {} ;

 

如果不想手动确认,把命令中的-vi改成-fv

请详查find命令。

使用find时要区分清楚atime,ctime,mtime的区别,一般都使用mtime来查找,因为在ls -al显示出来的就是mtime时间戳,可以使用:

# find $PAHT -mtime +3 -ok rm {} ;

 

在交互模式下删除比较保险。

一、按照一定日期格式命名文件

1、按照一定的格式输出日期:

date +”%y%m%d”

格式说明:

% : 印出 %

%n : 下一行

%t : 跳格

%H : 小时(00-23)

%I : 小时(01-12)

%k : 小时(0-23)

%l : 小时(1-12)

%M : 分钟(00-59)

%p : 显示本地 AM 或 PM

%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)

%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数

%S : 秒(00-60)

%T : 直接显示时间 (24 小时制)

%X : 相当于 %H:%M:%S

%Z : 显示时区

日期方面 :

%a : 星期几 (Sun-Sat)

%A : 星期几 (Sunday-Saturday)

%b : 月份 (Jan-Dec)

%B : 月份 (January-December)

%c : 直接显示日期与时间

%d : 日 (01-31)

%D : 直接显示日期 (mm/dd/yy)

%h : 同 %b

%j : 一年中的第几天 (001-366)

%m : 月份 (01-12)

%U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形)

%w : 一周中的第几天 (0-6)

%W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形)

%x : 直接显示日期 (mm/dd/yy)

%y : 年份的最后两位数字 (00.99)

%Y : 完整年份 (0000-9999)

2、命名带有日期的文件:filename`date +%y%m%d`,此处的”`”不是单引号。

二、以创建文件日期为界线删除文件

1、find命令简解

find pathname -options [-print -exec -ok …]

 

pathname: find命令所查找的目录路径。例如用。来表示当前目录,用/来表示系统根目录。

-print: find命令将匹配的文件输出到标准输出。

-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和;之间的空格。

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

options:

-name

按照文件名查找文件。

-perm

按照文件权限来查找文件。

-prune

使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

-user

按照文件属主来查找文件。

-group

按照文件所属的组来查找文件。

-mtime -n +n

按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。

-nogroup

查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。

-nouser

查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。

-newer file1 ! file2

查找更改时间比文件file1新但比文件file2旧的文件。

-type

查找某一类型的文件,诸如:

b – 块设备文件。

d – 目录。

c – 字符设备文件。

p – 管道文件。

l – 符号链接文件。

f – 普通文件。

-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。

-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

-mount:在查找文件时不跨越文件系统mount点。

-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

对于时间相关的参数,有以下补充:

-amin n

查找系统中最后N分钟访问的文件

-atime n

查找系统中最后n*24小时访问的文件

-cmin n

查找系统中最后N分钟被改变文件状态的文件

-ctime n

查找系统中最后n*24小时被改变文件状态的文件

-mmin n

查找系统中最后N分钟被改变文件数据的文件

-mtime n

查找系统中最后n*24小时被改变文件数据的文件

2、删除固定日期以前的文件

find logs -type f -mtime +5 -exec rm { } ;

 

linux crontab 定时执行任务

*  *  *  *  *
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.
M: 分钟(0-59)。
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定
user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设
定自己的时程表。
参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数
来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执
行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s “hi” alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”
20 0-23/2 * * * echo “haha”
注意 :
当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之
后加上 > /dev/null 2>&1 即可
例子2 :
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date
范例
$crontab -l 列出用户目前的crontab.