执行计划任务时会主动给root发一封信

执行计划任务时会主动给root发一封信,关闭不再发信的方法:

原来是这样:

[root@scj ~]#crontab -l

*/30 * * * * /usr/sbin/ntpdate ntp.ksyun.cn

改为这样:

[root@scj ~]#crontab -l

*/30 * * * * /usr/sbin/ntpdate ntp.ksyun.cn > /dev/null  2>&1

注意:2>&1 等价于 &> ,意思是:将 标准正确输出 和 标准错误输出 都输出到一个地方

解决does not map back to the address - POSSIBLE BREAK-IN ATTEMPT

##ssh登陆时报错:
#less /var/log/secure
#Address 192.168.1.168 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!##分析:
#是因为DNS服务器把 192.168.1.168 的地址反向解析成 localhost
C:\Users\shencj>nslookup
默认服务器:  localhost
Address:  192.168.3.1> set type=PTR
> 192.168.1.168
服务器:  localhost
Address:  192.168.3.1168.1.168.192.in-addr.arpa      name = localhost##解决方法:
vim /etc/ssh/sshd_config
将UseDNS 改为 no
/etc/init.d/sshd restart

zabbix微信,短信报警

参考:

http://my.oschina.net/u/2422096/blog/601976?fromerr=8TlHnGSF

http://wangzan18.blog.51cto.com/8021085/1734408

[Errno 13] Permission denied: '/root/.python-eggs'解决办法

python脚本里面添加,注意必须在MySQLdb模块前面添加:
import os
os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs'[root@localhost shell]# more qps.py
#!/usr/bin/env python
# coding=utf-8import time
import sys
import os
os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs'
import MySQLdb另外权限 给  chmod 755  /tmp/.python-eggs/


获取一分钟的日志(nginx)

#!/bin/bash
#author: linuxhub.org
#取出nginx一分钟内的日志#Nginx日志格式:
# 192.168.0.161 - - [26/Mar/2015:14:29:20 +0800] "GET / HTTP/1.1" 200 2126 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36" -if [ -z $1 ];thenecho "请在脚本后面加上日志文件!!"exit 1
fi#日志文件
#logfile=/data/logs/nginx/admin.kuaiyouxi.com.log
logfile=$1#开始时间
start_time=`date -d "10 minutes ago" +"%H:%M:%S"`
#start_time="14:29:20"#结束时间
stop_time=`date +"%H:%M:%S"`
#stop_time="14:35:36"tac $logfile | awk  -v st="$start_time" -v et="$stop_time" '
#BEGIN{
#    print "\n-------------------------------";
#    print "开始时间:"st;
#    print "结束时间:"et;
#    print "在这个时间段(1分钟内)的日志如下:"
#    print "---------------------------------\n"
#}{#第4列的时间数据,然后按:冒号进行分割出时间#split($4,i,":");#组合时间 例: 14:37:49#t=sprintf("%s:%s:%s",i[2],i[3],i[4]);#第4列的时间数据,取出时:分:秒t=substr($5,RSTART+14,21);#判断在st与et之间的时间if(t>=st && t<=et){print $0}
}
#END{
#    print "\n"
#}'
##获取一分钟内的日志##
sed -n "/$(date -d "1 minutes ago" "+%d\/%b\/%Y:%H:%M")/,/$(date "+%d\/%b\/%Y:%H:%M")/p" access.log

nginx root与alias区别

##Nginx 貌似没有虚拟目录的说法,因为它本来就是完完全全根据目录来设计并工作的。
##如果非要给nginx安上一个虚拟目录的说法,那就只有alias标签比较"像",干脆来说说alias标签和root标签的区别吧。
##最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。
##另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。
##说不明白,看下配置:
location /abc/ {alias /home/html/abc/;
}
##在这段配置下,http://ip/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成
location /abc/ {root /home/html/;
}
##这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。但是,如果我把alias的配置改成:
location /abc/ {alias /home/html/def/;
}
##那么nginx将会从/home/html/def/取数据,这段配置还不能直接使用root配置,如果非要配置,只有在/home/html/下建立一个 def->abc的软link(快捷方式)了。
##一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯
location /img/ {alias /var/www/p_w_picpath/;
}
#按照上述配置,访问/img/目录里面的文件时,ningx会自动去/var/www/p_w_picpath/目录找文件location /img/ {root /var/www/p_w_picpath;
}
#按照这种配置,访问/img/目录下的文件时,nginx会去/var/www/p_w_picpath/img/目录下找文件alias是一个目录别名的定义,root则是上层目录的定义还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的,而root则可有可无

history显示时间

vi /etc/bashrc
##在最后添加:
username=`whoami`
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S $username "
export HISTFILESIZE=1000000
export HISTSIZE=2000source /etc/bashrc
#history321  2015-10-12 10:45:49 root vi /etc/bashrc 322  2015-10-12 10:45:57 root source /etc/bashrc323  2015-10-12 10:46:02 root ifconfig 324  2015-10-12 10:46:04 root history 325  2015-10-12 10:46:23 root vi /etc/bashrc 326  2015-10-12 10:46:32 root source /etc/bashrc327  2015-10-12 10:46:33 root history 328  2015-10-12 10:46:42 root date329  2015-10-12 10:46:44 root history##数目,时间,用户,命令

nmap扫描端口

 nmap -sS -O 139.196.xxx.xxx

安装epel yum源

 rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

netstat查看连接情况

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'

tomcat部署多个项目

vi server.xml
##在host标签里面添加一个Context标签
<Context path="/pic" reloadable="true" docBase="/photo/pic"/>
##path:别名
##docBase:根目录
访问:ip:8080  默认访问的根目录是webapps
访问:ip:8080/pic  访问的是/photo/pic

参考:http://blog.csdn.net/philosophyatmath/article/details/30246631

tomcat7日志切割

1、下载 # wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
2、解压缩 # tar zxvf cronolog-1.6.2.tar.gz
3、进入cronolog安装文件所在目录 # cd cronolog-1.6.2
4、运行安装 # ./configure # make # make install
5、查看cronolog安装后所在目录(验证安装是否成功) # which cronolog ##一般情况下显示为:/usr/local/sbin/cronolog
vi /usr/local/tomcat7/bin/catalina.sh
##在大约370行
##找到 if [ "$1" = "-security" ] ; then##修改为:if [ "$1" = "-security" ] ; thenif [ $have_tty -eq 1 ]; thenecho "Using Security Manager"fishifteval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \-Djava.security.manager \-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \-Dcatalina.base="\"$CATALINA_BASE\"" \-Dcatalina.home="\"$CATALINA_HOME\"" \-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \| /usr/local/sbin/cronolog /data/tomcat7/logs/catalina.%Y-%m-%d.out >> /dev/null &elseeval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \-Dcatalina.base="\"$CATALINA_BASE\"" \-Dcatalina.home="\"$CATALINA_HOME\"" \-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \| /usr/local/sbin/cronolog /data/tomcat7/logs/catalina.%Y-%m-%d.out >> /dev/null &fi
##重启tomcat

nginx服务器http重定向到https的正确写法

server {listen         80;server_name    my.domain.com;return         301 https://$server_name$request_uri;
}server {listen         443 ssl;server_name    my.domain.com;[....]
}

参考:http://www.sijitao.net/1829.html

nginx的全局变量参数解释

参考:http://blog.sina.com.cn/s/blog_594c47d00101dfyh.html

nginx的全局变量参数解释 --网站Nginx Rewrite 规则nginx的全局变量参数解释:
$arg_PARAMETER#这个变量包含GET请求中,如果有变量PARAMETER时的值。
$args    #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;
$binary_remote_addr#二进制的客户地址。
$body_bytes_sent#响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
$content_length#请求头中的Content-length字段。
$content_type#请求头中的Content-Type字段。
$cookie_COOKIE#cookie COOKIE变量的值
$document_root#当前请求在root指令中指定的值。
$document_uri#与$uri相同。
$host#请求主机头字段(即:请求url中的host),否则为服务器名称(即:配置文件中的server_name值)。
$hostname#Set to the machine’s hostname as returned by gethostname
$http_HEADER
$is_args#如果有$args参数,这个变量等于”?”,否则等于”",空值。
$http_user_agent#客户端agent信息
$http_cookie#客户端cookie信息
$limit_rate#这个变量可以限制连接速率。
$query_string#与$args相同。
$request_body_file#客户端请求主体信息的临时文件名。
$request_method#客户端请求的动作,通常为GET或POST。
$remote_addr#客户端的IP地址。
$remote_port#客户端的端口。
$remote_user#已经经过Auth Basic Module验证的用户名。
$request_completion#如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
$request_method#GET或POST
$request_filename#当前请求的文件路径,由root或alias指令与URI请求生成。
$request_uri#包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
$scheme#HTTP方法(如http,https)。
$server_protocol#请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr#服务器地址,在完成一次系统调用后可以确定这个值。
$server_name#服务器名称(即:配置文件中的server_name值)。
$server_port#请求到达服务器的端口号。
$uri#不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。该值有可能和$request_uri 不一致。$request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。
if (-d $request_filename){rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

rewrite后面的flag:

参考:http://www.76ku.cn/articles/archives/317

##nginx中if判断&&
set $flag 0;
if ($uri !~ /login$) {set $flag "${flag}1";
}
if ($uri !~ /register.html$) {set $flag "${flag}1";
}
if ($uri !~ /account/.*$) {set $flag "${flag}1";
}
if ($flag = "0111") {#rewrite ^/?.*$ http://$server_name$request_uri;rewrite ^(.*) http://$server_name$1 permanent;
}
##nginx中if判断&&

rewrite重定向和伪静态

rewrite重定向和伪静态:重定向:rewrite ^(.*) https://$server_name$1 permanent;  (https://$server_name$1 是一个完整的url ),将http请求重定向到https伪静态:rewrite ^(.*)/t(\d+)\.html$ $1/index.php?t=3 last; ($1/index.php?t=3 是一个相对的url,没有host)将http://dede.com/index.php?t=3用伪静态规则改写成http://dede.com/t3.html

keepalived相关

notify_master/etc/keepalived/master.sh         #当前服务器为主时,觖发执行的脚本
notify_backup/etc/keepalived/slave.sh          #当前服务器为备时,觖发执行的脚本
notify_fault/etc/keepalived/notify_fault.sh    #当前服务器出现问题时,觖发执行的脚本
notify_stop/etc/keepalived/down.sh             #当前服务器为down时,觖发执行的脚本
notify_down /etc/keepalived/killkeepalived.sh  #检测的服务(如:mysql)down掉时,触发执行的脚本vi /etc/keepalived/master.sh         #增加如下内容
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` change master status!!! " >> /etc/keepalived/change.log
#输出当前时间到日志中##编写当前服务器为备时的脚本##
vim/etc/keepalived/slave.sh
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` change slave status!!!" >> /etc/keepalived/change.log
#输出当前时间到日志中##编写当前服务器不正常时的脚本##
vim/etc/keepalived/notify_fault.sh
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` change notify_fault status!!!" >>/etc/keepalived/change.log
#输出当前时间到日志中
sleep 3   #休眠3秒
echo "#`date +"%Y-%m-%d%H:%M"` try startup mysql!!!" >> /etc/keepalived/change.log
#输出当前时间到日志中
service mysql start     #启动Mysql服务器##编写当前服务器wodn时的脚本##
vim/etc/keepalived/down.sh
#!/bin/bash
echo "#`date +"%Y-%m-%d%H:%M"` keepalived is down!!!" >> /etc/keepalived/change.log
#输出当前时间到日志中
##单播模式##
vrrp_instance VI_1 {state backupinterface eth0virtual_router_id 51priority 99unicast_src_ip 10.10.191.224      #本机ipunicast_peer {10.10.150.230                  #对端ip}advert_int 1#nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.10.113.94}
}

大神的博客地址

http://space.itpub.net/26355921

新浪微博技术总监: http://blog.csdn.net/heiyeshuwu

书记博客:http://www.51clocker.com

startssl证书免费申请步骤:http://blog.csdn.net/ruixue0117/article/details/22201303        #建议使用firefox浏览器

mysql配置主从

binlog_format           = MIXED                         //binlog日志格式,mysql默认采用statement,建议使用mixed
log-bin                 = /data/mysql/mysql-bin.log    //binlog日志文件
expire_logs_days        = 7                           //binlog过期清理时间
max_binlog_size         = 100m                       //binlog每个日志文件大小
binlog_cache_size       = 4m                        //binlog缓存大小
max_binlog_cache_size   = 512m                     //最大binlog缓存大小

验证mysql主从数据是否一致(pt-table-checksum和pt-table-sync)

##安装toolkit需要一些依赖包
yum -y install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes

参考:http://www.cnblogs.com/zhoujinyi/archive/2013/05/09/3067045.html

zabbix触发器表达式常用的两个函数

last:

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

意思是:最后时刻cpu的负载大于5,则触发报警

min:

{www.solutionware.com:net.if.in[eth0,bytes].min(60)}>100K

意思是:60秒内流进网卡的流量持续大于100K,则报警

Name 触发器名称.
名称可以包含宏变量: {HOST.HOST}, {HOST.NAME}, {HOST.CONN}, {HOST.DNS}, {HOST.IP}, {ITEM.VALUE}, {ITEM.LASTVALUE} and {$MACRO}.
$1, $2…$9 可以被用来关联表达式的常量
示例:
name:Processor load above $1 on {HOST.NAME}”
表达式:system.cpu.load[percpu,avg1].last(0)}>5
会显示为:Processor load above 5 on ttlsa云服务器
Expression 计算触发器状态的逻辑表达式,这边设置为上一次值等于0
Multiple PROBLEM events generation 通过设置该选项,你可以在触发器产生problem的时候触发一个事件
Description 触发器的描述,一般name写的不清楚,这边可以具体描述这个触发器的作用,例如nginx当前离线,请处理等等。Zabbix 2.2版本开始,支持触发器名称。
URL 在Monitoring → Triggers中,可以看到URL并且可以点击,一般情况下他需要配合触发器ID来使用,在url中包含触发器ID(宏变量 {TRIGGER.ID}),这样可以直接点击到具体触发器中。
Severity 设置严重性级别,上图我设置为“灾难”,你可以相应的设置警告、严重等状态的触发器
Enabled 当前触发器是否启用

zabbix自定义key注意事项

UserParameter=sjsyServer.status,/etc/zabbix/itemscripts/mysqlstatus.sh

注意:zabbix用户要对/etc/zabbix/itemscripts/mysqlstatus.sh这个文件有执行权限

[root@localhost itemscripts]# ll /etc/zabbix/itemscripts/mysqlstatus.sh
-rwxr--r-- 1 zabbix root 114 Sep 14 12:25 /etc/zabbix/itemscripts/mysqlstatus.sh

否则:

[root@localhost ~]# zabbix_get -s 192.168.188.129 -k sjsyServer.status##获取的结果将会是空

saltstack相关

saltstack中文wiki社区:http://www.saltstack.cn/projects/cssug-kb/wiki

saltstack中文介绍:http://docs.saltstack.cn/zh_CN/latest/

saltstack官网:http://saltstack.com/

saltstack配置实例:http://bbs.chinaunix.net/thread-4142057-1-1.html

salt写的相当不错:http://my.oschina.net/u/877567/blog?catalog=404877

http://my.oschina.net/xxbAndy/blog/391591

http://my.oschina.net/guol/blog/156610

salt所有资源: http://docs.saltstack.cn/zh_CN/latest/ref/states/all/index.html

磁盘inode不足 

最近磁盘总是写不上数据,查看磁盘空间(df -h)发现空间只用了不到5%,后来找到牛人才知道是磁盘inode已经用完了,可使用df -hi查看磁盘inode使用情况。

原因:使用/ext3的磁盘inode空间只有几百K,如果存储太多的小文件导致空间不足时就无法再创建新的文件。

解决方案:使用xfs的磁盘格式,可增加inode大小。

执行步骤:

1.   安装xfsprogs-2.9.4-1.el5.centos.x86_64.rpm

rpm -ivh http://mirror.centos.org/centos/5/extras/x86_64/RPMS/xfsprogs-2.9.4-1.el5.centos.x86_64.rpm

或者将包下载下来手动安装

2.   将挂载磁盘空间数据备份,并将该磁盘卸载:

umount /data

如果失败,执行以下命令查看使用/data文件的所有进程:

lsof |grep /data

执行以下命令将进程杀死:

lsof |grep /data |awk -F" " '{print $2}' |xargs kill

3.   执行以下命令将磁盘格式化为xfs

mkfs.xfs -f /dev/xvdb

4.   修改/etc/fstab,将挂载磁盘的格式由ext3改为xfs

5.   重新挂载磁盘:mount -a

iptables

每次执行 iptables -A 添加规则后,一定要记得执行:

[root@scj ~]# /etc/init.d/iptables save

lrzsz

rz:将windous端数据传到linux服务器上

rz -y:将windous端数据传到linux服务器上,并覆盖掉原来相同文件名的文件

sz httpd.conf:将linux服务器上的httpd.conf文件传到windous端

svn同步数据到线上服务器

只同步指定版本到最新版本被改过的数据:

在线上服务器写一个脚本,代码如下:

#!/bin/bash
#此脚本是根据svn版本号,指定版本到最新版本只同步更改过的文件到服务端Svnurl=http://ip/svn/zhushen/server
Web_server_dir=/tmp/scj/server
Log_dir=/tmp/scj#列出指定版本到最新版本被更改过的文件
Update_server_xml=$(/usr/bin/svn diff -r $1:HEAD $Svnurl 2> /dev/null | grep Index |awk -F":" '{print $2}')#同步被改过的文件
case $1 in[0-9]*)echo ===================== >> $Log_dir/update.log 2>&1echo $(date +%F-%H:%M:%S) >> $Log_dir/update.log 2>&1for conf_xml in $Update_server_xmldo/usr/bin/svn  export  $Svnurl/$conf_xml  $Web_server_dir/$conf_xml  --forceecho $conf_xml >> $Log_dir/update.logdone;;*)echo "输入版本号";;
esac

常用数据下载

稀酷客: http://www.ckook.com/

netstat 出现大量的close_wait状态

出现这种问题的主要原因:

客户端主动关闭连接,服务端由于某种原因没有即使向客户端发送FIN数据请求,导致服务端没有即使将连接释放掉

解决方法:

通过修改系统的内核参数(tcp_keepalive相关的)来解决问题:

net.ipv4.tcp_keepalive_time=30

net.ipv4.tcp_keepalive_probes=2

net.ipv4.tcp_keepalive_intvl=2

sysctl -p          #使立即生效

注意:内核参数我调整的可能有些猛,到底合不合适要注意观察

参考链接:

http://ipsysctl-tutorial.frozentux.net/

http://haka.sharera.com/blog/BlogTopic/32309.htm

注意:其实出现这种问题根本的原因还是程序代码有问题

find查找某一个文件

find . -name  'file*'             #查找当前目录下file开头的文件

注意:-name后面的关键字要用引号引起来,如'file*'

##find查找目录## 只查找/backup/目录下的所有一级目录
find /backup/ -maxdepth 1 -type d -mtime +15 -exec rm -rf {} \;
##-maxdepth 1 -type d,只显示一级目录

使用find在目录下查找文件里含有"INFORMATION"字符串的文件名

[root@scj postfix]# find /etc/postfix/ | xargs grep "INFORMATION" | awk -F":" '{print $1}' | sort |uniq

/etc/postfix/main.cf

[root@scj postfix]# find /etc/postfix/ | xargs grep "INFORMATION" | awk -F":" '{print $1}' | awk -F"/" '{print $NF}'|sort |uniq

main.cf

磁盘报警快速查找方法

1、df -h

查看挂载情况和每个分区的使用情况

2、du -h --max-depth=1

查看当前目录下,每个目录里数据的大小(只能查看目录,文件会忽略掉),深度是1(也就是只查看当前的一级目录)

[root@scj tmp]# du -h --max-depth=1
12K ./scripts
96K ./salt
2.1G    ./lishi
4.0K    ./.ICE-unix
8.0K    ./pear
2.1G    ./beifen
4.2G    .

可以看出/tmp目录下,总共有4.2G的数据,beifen目录和linshi目录各有2.1G

3、du -sh

查看当前目录下所有数据的大小

[root@scj tmp]# du -sh
4.2G    .

4、du -sh *

突然知道这个命令更好用,不仅统计所有目录,还统计所有文件(当前目录下的一级文件和子目录)

[root@scj tmp]# du -sh *
4.0K    aa
4.0K    beifen
4.0K    file1
2.1G    lishi
0   mysqld.sock
620K    mysqldump.sql
8.0K    pear
4.0K    percona-version-check
16K php-fpm.log
96K salt
12K scripts
0   www.log.slow
0   yum.log
4.0K    yum_save_tx-2015-04-21-06-053qooJ4.yumtx
4.0K    yum_save_tx-2015-04-21-07-03wAW6m7.yumtx
8.0K    yum_save_tx-2015-04-29-11-12VLBEZO.yumtx
8.0K    yum_save_tx-2015-04-29-11-17jxd71y.yumtx
8.0K    yum_save_tx-2015-04-29-11-188of3QH.yumtx

利用上面四个命令可以快速定位某个目录(其实第二个命令可以被第四个命令替代了)

创建逻辑卷

新买进一台服务器,用来存数据库数据

最好的方法是将磁盘做成逻辑卷(将来可动态扩展)

步骤:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3096087.html

缩减home逻辑卷,添加到/(根)逻辑卷下:

http://www.php114.net/2013/1019/637.html

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3097785.html

rpm包下载地址

163网易:

http://mirrors.163.com/centos/

东北大学:

http://mirror.neu.edu.cn/centos/

搜狐CentOS镜像:

http://mirrors.sohu.com/centos/

电子科技大:

http://mirrors.stuhome.net/centos/

中科大:

http://centos.ustc.edu.cn/centos/

两次fork()原因

1、子进程的产生:

执行任何程序,父进程会产生子进程,由子进程去完成;子进程会被分配一定的资源,同时子进程会继承父进程的所有资源环境

2、执行fork()函数:

执行fork()函数会产生一个子进程,fork()函数会返回两个值,子进程号和0,若是父进程则返回子进程号,若是子进程则返回0;若调用fork()函数失败则返回-1(失败原因:进程数达到上限;内存不足)

3、孤儿进程:

父进程产生一个子进程,若父进程在子进程结束之前结束,则这个子进程就会变为孤儿进程,不过,这个子进程之后会由init这个进程去管理,同时子进程结束时,资源也会被init进程回收

4、僵尸进程:

父进程产生一个子进程,子进程结束时,父进程没有用waitwaitpid回收子进程,这时候这个子进程就会变成僵尸进程,僵尸进程不会占用系统资源,不过会占用进程表,虽然僵尸进程不占用资源,但是如果僵尸进程多了也会影响系统性能

5、两次fork():

为了避免出现僵尸进程,就需要执行两次fork();父进程执行fork产生子进程,子进程再执行fork产生一个子子进程;子子进程的父进程是子进程,子进程的父进程可能是一个一直在运行的某个服务, 我们把子进程停掉,这时候子子进程就会由init进程去管理,之后子子进程结束时,资源也由init进程去回收

6、参考:http://www.linuxidc.com/Linux/2011-08/40590.htm

守护进程

1、定义:

守护进程:脱离终端并且在后台运行的进程

守护进程脱离终端:避免进程在执行过程中的信息在任何终端上显示;进程不会被任何终端所产生的终端信息所打断

2、创建步骤:

创建子进程,退出父进程:

使用fork()函数和if判断语句,使子进程变为孤儿进程,交给init进程管理

pid = os.fork()         #调用fork()函数
if pid < 0:             #小于0,表明调用fork失败print 'invoke fork() failure'sys.exit(1)         #退出脚本
elif pid > 0:           #大于0,表明是父进程sys.exit(0)         #退出父进程

在子进程中创建新会话:

这个步骤是创建守护进程中最重要的一步;调用fork函数创建子进程时,子进程继承了父进程的全部资源环境(包括会话期、进程组、控制终端等),虽然父进程退出了,但会话期、进程组、控制终端等并没有改变,因此,子进程并没有真正的独立出来,而setsid函数能够使子进程完全独立出来

os.setsid()             #调用setsid()函数

改变当前目录为根目录:

调用fork()函数创建子进程,子进程也会继承父进程的当前工作目录,若子进程使用父进程的当前工作目录可能会有一些问题

os.chdir("/")

重设文件权限掩码:

把文件权限掩码设置为0,可以大大增强守护进程的灵活性

os.umask(0)

3、一个创建守护进程的实例:

vi /tmp/dir1/file.py
#encoding:utf-8
import os
import sys
import time
import commandspid = os.fork()         #调用fork()函数
if pid < 0:             #小于0,表面调用fork失败print 'invoke fork() failure'sys.exit(1)         #退出脚本
elif pid > 0:           #大于0,表面是父进程sys.exit(0)         #退出父进程,下面所有命令都是在子进程下执行os.setsid()             #在子进程中调用setsid函数
os.chdir("/")
os.umask(0)
while True:os.system('echo `date +%F-%H%M%S` >> /tmp/dir1/file')time.sleep(1)
[root@scj dir1]# python /tmp/dir1/file.py
[root@scj dir1]# ps -ef | grep file.py
root      3282     1  0 02:46 ?        00:00:00 python /tmp/dir1/file.py
root      3311  1575  0 02:46 pts/1    00:00:00 grep file.py

由上发现:file.py被放在后台作为守护进程运行,父进程号是1(也就是init进程)

注意:守护进程由init进程管理

[root@scj dir1]# tail -f /tmp/dir1/file
2015-06-23-025041
2015-06-23-025042
2015-06-23-025043
2015-06-23-025044
2015-06-23-025045
2015-06-23-025046
2015-06-23-025047
2015-06-23-025048
2015-06-23-025049
2015-06-23-025050
2015-06-23-025051
2015-06-23-025052
2015-06-23-025053
2015-06-23-025054

每秒执行一次

4、停止守护进程的方法:

使用kill杀死

[root@scj dir1]# ps -ef | grep file.py
root      3282     1  0 02:46 ?        00:00:00 python /tmp/dir1/file.py
root      4195  1575  0 02:51 pts/1    00:00:00 grep file.py
[root@scj dir1]# kill -9 3282

添加静态路由

另一种永久的方法:

###设置eth0上的路由,如果不默认网关在eth0上,就不用设置了
#cat > /etc/sysconfig/network-scripts/route-eth0 << EOF
#10.0.0.0/8 via 10.126.40.254
#EOF

内核优化

net.core.wmem_max = 873200
net.core.rmem_max = 873200
net.core.netdev_max_backlog = 1024
net.core.somaxconn = 512
net.ipv4.tcp_mem = 786432  1048576 1572864
net.ipv4.tcp_wmem = 8192  436600  873200
net.ipv4.tcp_rmem = 8192  436600  873200
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024  65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#### sysctl.conf setting  设置内核参数
cat >> /etc/sysctl.conf << EOF
###下面的TCP内核参数的调整都是为了让服务器可以应对大的或突发性的连接数(如上万的ESTALISH连接)
这些调整在nginx/squid/varnish/httpd/ftp这样有会产生大量的TCP连接的应用上,是需要的
##最大的TCP数据接收窗口(字节)
net.core.wmem_max = 873200
##最大的TCP数据发送窗口(字节)
net.core.rmem_max = 873200
##每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的最大数目,默认是300
net.core.netdev_max_backlog = 1024
##定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
net.core.somaxconn = 512
##下面的三个要一起看
##第一个net.ipv4.tcp_mem[0][1][2]表示TCP整体内存使用,计算方式是值*内存页大小4K;
##三个值分别是低于[0]值,表示TCP没有内存压力,在[1]值下,进入内存压力阶段,大于[2]高于此值,TCP拒绝分配连接
##net.ipv4.tcp_wmem[0][1][2]分别表示最小发送内存,默认发送内存,最大发送内存;
##结合上面的net.ipv4.tcp_mem[0][1][2]三个值,当TCP总内存占用小于tcp_mem[0]时,可以分配小于tcp_wmem[2]的内存给一个TCP连接;
##当TCP内存占用大于tcp_mem[0]时,可以分配tcp_wmem[0]的内存;
##当TCP总内存占用大于tcp_mem[1],小于tcp_mem[2]时,可以分配tcp_wmem[0]的内存;
##当TCP总内存占用大于tcp_mem[2]时,tcp内存分析无法进行
##net.ipv4.tcp_rmem的三个值的解释同上。
net.ipv4.tcp_mem = 786432  1048576 1572864  #设置[0][1][2]分别为3G、4G、6G
net.ipv4.tcp_wmem = 8192  436600  873200   #设置TCP发送缓存分别为:最小8K,默认400k,最大800K
net.ipv4.tcp_rmem = 8192  436600  873200   #设置TCP接收缓存分别为:最小8K,默认400k,最大800K
net.ipv4.tcp_retries2 = 5  #TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源
net.ipv4.tcp_fin_timeout = 30  #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_keepalive_time = 1200  #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟
net.ipv4.tcp_syncookies = 1  #开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***
net.ipv4.tcp_tw_reuse = 1  #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,减少TIME-WAIT 状态
net.ipv4.tcp_tw_recycle = 1  #表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.ip_local_port_range = 1024  65000  #增大本地端口数,对于发启很多对外的连接时有用
net.ipv4.tcp_max_syn_backlog = 8192 # 进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处
net.ipv4.tcp_max_tw_buckets = 5000  #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为180000
###这四个是用来设置lvs实体机用的,如果你的机器不使用lvs的DR方式,可以不加这几个参数
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF

参考: http://waringid.blog.51cto.com/65148/183496/

nohup

如果我们想把一个进程放在后台运行,可以使用&;但是只使用&把进程放在后台运行会有问题,就是当我们退出账号或是注销用户时,这个进程就会消失;为了避免退出账号时进程就会消失,可以使用nohup,就是no hang up 不挂起的意思

·

sed添加多行

[root@scj www.scj.com]# cat file2.sh
aaaaaa
bbbbbb
cccccc
dddddd

在第二行后面添加如下内容:

#备份6服 血色城堡
dbname='gamedb_xscb logdb_xscb'
dumpname='6f_xscb'mysqldump  --opt --default-character-set=utf8 --databases  $dbname > ${backuptodir}${dumpname}_full_`date +%Y%m%d%H%M`.sql
cd $backuptodir
dumpfile=`find . -type f -name "${dumpname}*" | sort | tail -n1 | awk -F'/' '{print $2}'`
tar -zcf ${dumpname}_full_`date +%Y%m%d%H%M`.tar.gz $dumpfile
rm -rf $dumpfile
[root@scj www.scj.com]# sed -i '2a\\n#备份6服 血色城堡\ndbname='"'gamedb_xscb logdb_xscb'"'\ndumpname='"'6f_xscb'"'\n\nmysqldump  --opt --default-character-set=utf8 --databases  $dbname > ${backuptodir}${dumpname}_full_`date +%Y%m%d%H%M`.sql\ncd $backuptodir\ndumpfile=`find . -type f -name "${dumpname}*" | sort | tail -n1 | awk -F'"'/'"' '"'{print \$2}'"'`\ntar -zcf ${dumpname}_full_`date +%Y%m%d%H%M`.tar.gz $dumpfile\nrm -rf $dumpfile\n' file2.sh
[root@scj www.scj.com]# cat file2.sh
aaaaaa
bbbbbb#备份6服 血色城堡
dbname='gamedb_xscb logdb_xscb'
dumpname='6f_xscb'mysqldump  --opt --default-character-set=utf8 --databases  $dbname > ${backuptodir}${dumpname}_full_`date +%Y%m%d%H%M`.sql
cd $backuptodir
dumpfile=`find . -type f -name "${dumpname}*" | sort | tail -n1 | awk -F'/' '{print $2}'`
tar -zcf ${dumpname}_full_`date +%Y%m%d%H%M`.tar.gz $dumpfile
rm -rf $dumpfilecccccc
dddddd

解析:

[root@scj www.scj.com]# sed '1a\hello' file2.sh    #在第一行后面添加hello一行,sed最外面必须用单引号,必须
aaaaaa
hello
bbbbbb
[root@scj www.scj.com]# sed '1a\hello\nworld' file2.sh   #添加两行,用\n进行换行
aaaaaa
hello
world
bbbbbb
##在第一行后面添加'hello',要带着单引号
[root@scj www.scj.com]# sed '1a\'"'hello'"'' file2.sh
aaaaaa
'hello'
bbbbbb
##这里在单引号里用'"'把hello引起来即可
[root@scj www.scj.com]# sed '13a\\n' file1.sh && sed "14a\#备份6服 血色城堡\ndbname='gamedb_xscb logdb_xscb'\ndumpname='6f_xscb'\n" file1.sh         #sed里面若引用变量,此时最外面要用双引号
[root@scj www.scj.com]# sed '1a\if\n  {\n    echo hello\n  }' file2.sh
aaaaaa
if{echo hello}
bbbbbb
##有几个空格就在单引号写几个空格

ls几个参数

ls:默认是按文件(目录)名的首字母进行排序的

##注意:pear是目录
[root@scj tmp]# ls
file1  file2  file3.sh  gamedb.sql  logdb.sql  mysqldump.sql  pear  test  yum.log  zookeeper
[root@scj tmp]# ls -l
total 664
-rw-r--r--  1 user1  nobody      6 Apr 15 06:57 file1
-rw-r--r--  1 nobody nobody      6 Apr 15 07:00 file2
-rw-r--r--  1 root   root      246 Aug 21 13:23 file3.sh
-rw-r--r--  1 root   root    11461 Aug 12 05:07 gamedb.sql
-rw-r--r--  1 root   root     7102 Aug 12 05:07 logdb.sql
-rw-r--r--  1 root   root   631787 May  6 11:47 mysqldump.sql
drwxr-xr-x  3 root   root     4096 Apr 10 14:13 pear
-rw-r--r--  1 root   root        7 Aug 21 13:25 test
-rw-------. 1 root   root        0 Apr  3 15:01 yum.log
drwxr-xr-x  2 root   root     4096 Apr  8 09:45 zookeeper

ls -r:按文件名首字母反向排序

[root@scj tmp]# ls -r
zookeeper  yum.log  test  pear  mysqldump.sql  logdb.sql  gamedb.sql  file3.sh  file2  file1

ls -t:按文件(目录)的修改时间排序

##最近修改时间在前面
[root@scj tmp]# ls -t
test  file3.sh  gamedb.sql  logdb.sql  mysqldump.sql  file2  file1  pear  zookeeper  yum.log
[root@scj tmp]# ls -lt
total 664
-rw-r--r--  1 root   root        7 Aug 21 13:25 test
-rw-r--r--  1 root   root      246 Aug 21 13:23 file3.sh
-rw-r--r--  1 root   root    11461 Aug 12 05:07 gamedb.sql
-rw-r--r--  1 root   root     7102 Aug 12 05:07 logdb.sql
-rw-r--r--  1 root   root   631787 May  6 11:47 mysqldump.sql
-rw-r--r--  1 nobody nobody      6 Apr 15 07:00 file2
-rw-r--r--  1 user1  nobody      6 Apr 15 06:57 file1
drwxr-xr-x  3 root   root     4096 Apr 10 14:13 pear
drwxr-xr-x  2 root   root     4096 Apr  8 09:45 zookeeper
-rw-------. 1 root   root        0 Apr  3 15:01 yum.log

ls -rlt:按修改时间反向排序

[root@scj tmp]# ls -ltr
total 664
-rw-------. 1 root   root        0 Apr  3 15:01 yum.log
drwxr-xr-x  2 root   root     4096 Apr  8 09:45 zookeeper
drwxr-xr-x  3 root   root     4096 Apr 10 14:13 pear
-rw-r--r--  1 user1  nobody      6 Apr 15 06:57 file1
-rw-r--r--  1 nobody nobody      6 Apr 15 07:00 file2
-rw-r--r--  1 root   root   631787 May  6 11:47 mysqldump.sql
-rw-r--r--  1 root   root     7102 Aug 12 05:07 logdb.sql
-rw-r--r--  1 root   root    11461 Aug 12 05:07 gamedb.sql
-rw-r--r--  1 root   root      246 Aug 21 13:23 file3.sh
-rw-r--r--  1 root   root        7 Aug 21 13:25 test

刷博客访问次数

import webbrowser
import time
import osz = 1
while z <= 5:x = 1while x <= 10:webbrowser.open_new_tab("http://732233048.blog.51cto.com/9323668/1625477")x = x + 1time.sleep(1)else:os.system("taskkill /F /IM 360se.exe")z = z + 1

注意:

博文的链接地址:http://732233048.blog.51cto.com/9323668/1625477

360浏览器的程序名称:360se.exe

windows杀掉浏览器程序的命令:taskkill /F /IM 360se.exe

本例中共打开50次:

里面循环打开10次,关闭浏览器

外面循环5次

git

git乱码问题:http://segmentfault.com/a/1190000000578037

git使用:http://blog.csdn.net/vipzjyno1/article/details/






lsof和fuser

lsof:查看某个进程打开使用的文件有哪些

lsof | grep puppet :查看puppet进程所打开的文件

fuser:查看某一个文件是由哪个进程打开的

fuser -v /usr/lib/ruby/1.8/i386-linux/syck.so:包含用户,进程号及command等等

fuser -m  :后面接的那个文件名会主动上提到该文件系统的最顶层,对umount不成功很有效

如:fuser -m /home   查看home正在被哪些进程所使用

fuser -m /home/xxxx/xxxx    上跳到文件系统最顶层/home

[root@localhost ~]# lsof -i :80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1634   root    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1662 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1663 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1664 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1665 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1714 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1715 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1716 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   1717 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   2086 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
httpd   2087 daemon    4u  IPv6  10007      0t0  TCP *:http (LISTEN)
[root@localhost ~]# ps -ef | grep http
root       1634      1  0 05:17 ?        00:00:03 /usr/local/apache2/bin/httpd -k start
daemon     1662   1634  0 05:17 ?        00:00:01 /usr/local/apache2/bin/httpd -k start
daemon     1663   1634  0 05:17 ?        00:00:01 /usr/local/apache2/bin/httpd -k start
daemon     1664   1634  0 05:17 ?        00:00:01 /usr/local/apache2/bin/httpd -k start
daemon     1665   1634  0 05:17 ?        00:00:02 /usr/local/apache2/bin/httpd -k start
daemon     1714   1634  0 05:20 ?        00:00:02 /usr/local/apache2/bin/httpd -k start
daemon     1715   1634  0 05:20 ?        00:00:01 /usr/local/apache2/bin/httpd -k start
daemon     1716   1634  0 05:20 ?        00:00:01 /usr/local/apache2/bin/httpd -k start
daemon     1717   1634  0 05:20 ?        00:00:02 /usr/local/apache2/bin/httpd -k start
daemon     2086   1634  0 09:26 ?        00:00:01 /usr/local/apache2/bin/httpd -k start
daemon     2087   1634  0 09:26 ?        00:00:02 /usr/local/apache2/bin/httpd -k start
root       2899   2771  0 15:54 pts/3    00:00:00 grep http
[root@localhost ~]# lsof -i :80 |wc -l
12
[root@localhost ~]# ps -ef | grep http|wc -l
12

centos查看网卡流量iftop

top:用来查看系统的性能情况

l: 切换显示平均负载和启动时间信息。即显示隐藏第一行
m:切换显示内存信息。即显示隐藏内存行
t: 切换显示进程和CPU状态信息。即显示隐藏CPU行
c:切换显示命令名称和完整命令行。 显示完整的命令。 这个功能很有用。
M: 根据驻留内存大小进行排序。
P:根据CPU使用百分比大小进行排序。
T:根据时间/累计时间进行排序top -bc -n1 与 ps -ef 功能差不多,且更详细;在方括号'[]'里的都是内核级进程

iftop:用来查看网卡流量情况

参考:

http://blog.csdn.net/gaojinshan/article/details/40781241

http://down.chinaz.com/server/201112/1478_1.htm

转载于:https://blog.51cto.com/732233048/1637668

日常工作积累(待续)相关推荐

  1. 数据科学工作者(Data Scientist) 的日常工作内容包括什么?

    作者:阿萨姆 众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.即使在2017年,数据科学家这个岗位的依然显得" ...

  2. 站长日常工作必备记录详细单

    目前站长行业里的基本情况是大家各自单打独斗,所谓"个人站长"很大程度上说明这个群体的生存状态:独立,个体,尚无团队.在这种状况下,日常工作的条理性显得非常重要,然而,对于庞大的网站 ...

  3. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道...

    摘要: 阿里持续交付平台已经经历了 8 年的不断迭代进化,成长为集团几万应用所依赖的最重要的研发工具,它的效率直接影响着几万研发日常工作.但平台不能只是工具的堆砌,更需要针对互联网时代的研发模式进行深 ...

  4. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道... 1

    摘要: 阿里持续交付平台已经经历了 8 年的不断迭代进化,成长为集团几万应用所依赖的最重要的研发工具,它的效率直接影响着几万研发日常工作.但平台不能只是工具的堆砌,更需要针对互联网时代的研发模式进行深 ...

  5. Oracle DBA日常工作手册

    Oracle DBA日常工作手册   概述... 2 第一章.  事前阶段... 3 一 . 日常工作-每天应做工作内容... 3 1.工作内容-日常环境监控... 3 1.1系统运行环境监控... ...

  6. 开源的OA办公系统,解决日常工作管理问题

    O2OA工作管理系统是一套适用于协作型组织及个人,全面实施任务过程化.规范化.信息化的管理软件产品,它以扁平化管理思想为理论基础,以任务过程化管理为核心.通过领导者.管理者对日常任务的管理与分配,实现 ...

  7. 嵌入式的日常工作内容是什么?

    如果不是在创业公司的话,其实很多嵌入式公司的岗位分工的颗粒度还是很细的.基本上都是各司其职.答主多年的嵌入式开发经历,经历过技术支持(TSE).嵌入式产品模块开发(MDE).项目组长(PL).项目经理 ...

  8. 如何使用python编程解决生活中的问题-日常工作问题处理中Python程序的运用

    计算机应用毕业论文第八篇:日常工作问题处理中Python程序的运用 摘要:Python是一门简单.实用而且有趣的百搭款语言,在Web应用开发.系统网络运维.科学与数字计算.网络编程等领域都有所建树.在 ...

  9. JAVA程序员的日常工作是什么?一文告诉知道!

    由于Java的企业需求热度,想学习Java并获得就业安排的学员也只增不减.而对于Java工程师来说,每天的工作内容是怎样的呢?本篇带大家了解一下Java开发者的日常工作,希望会有所收获. 首先对于一个 ...

最新文章

  1. java项目测试支付异步通知接口
  2. arm linux考勤,定稿毕业论文_基于ARM与Linux的员工刷卡考勤系统喜欢就下吧(范文1)...
  3. git 报错:was cached in the local repository, resolution will not be reattempted until the upda
  4. android每日一问【2011-8-26】
  5. 关于JSP与Int不得不说的故事
  6. jQuery模拟下拉框单选框复选Select,Checkbox,Radio
  7. linux mint 主题切换,详解如何在 Linux Mint 中更换主题
  8. CSS3中很容易混淆的transform,translate,transition。如何去区分,以及综合写法。
  9. 令程序员们夜不能寐的“噩梦”除了改需求,还有这些…...
  10. SURF源码分析之fasthessian.h和fasthessian.cpp
  11. VDbench 参数信息
  12. IDEA 导入 czml-writer
  13. Matlab/Simulink Embedded Coder一个非常迷幻的问题
  14. 导师不喜欢自己怎么办?
  15. 朗兰兹纲领:关于数学大一统的伟大构想
  16. 小程序 canvas画图片
  17. java解压rar5 兼容rar4(改bug)
  18. 基于Basys2的分秒计时器的设计
  19. 仿短视频竖屏播放美nv网站源码
  20. 阿里巴巴技术委员会主席王坚眼中的人工智能

热门文章

  1. 有关DSP2812与SPI接口DA芯片的通信(AD5640,AD5682)
  2. C# 高级开发应用:GPS+北斗 antenna 实现精准定位 C#实现
  3. 【测绘程序设计】——附合导线近似平差
  4. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)01 手写字体识别
  5. 贪心算法(Java版本)
  6. Kindeditor使用常见问题
  7. UEFI入门必读的12本书
  8. 提高记忆力的 10 种记忆技巧和工具
  9. 【答学员问】面试被拒后HR又一次打电话问,是否可以去上班?
  10. spring Boot 报错Failed to introspect Class [xxx] from ClassLoader