February 1, 2013
iptables规则的查看、添加、删除和修改[教程]
"\u003cp\u003e在 Linux 中 iptables 实际上只是一个操作 Linux 内核 Netfilter 子系统的“界面”。顾名思义,Netfilter 子系统的作用,就是 Linux 内核里挡在“网卡”和“用户态进程”之间的一道“防火墙”。 也就是说 \u003ccode\u003eiptables\u003c/code\u003e 工作在用户态,它和我们平时开发的应用程序完全一样的,只是它的作用是用来操作 \u003ccode\u003eNetFilter\u003c/code\u003e 的一个工具。而 \u003ccode\u003eNetFilter\u003c/code\u003e 工作在内核态,它们的关系,可以用如下的示意图来表示:\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2022/06/4a540c412455b4213552bbb531c535ad.webp\" alt=\"\"\u003e图来自极客时间\u003c/p\u003e\n\u003cp\u003e在 iptables 中存在四表五链的概念。\u003c/p\u003e\n\u003cp\u003e表分别为 \u003ccode\u003efilter\u003c/code\u003e、\u003ccode\u003enat\u003c/code\u003e、\u003ccode\u003eraw\u003c/code\u003e、\u003ccode\u003emangle\u003c/code\u003e ,当数据包抵达防火墙时,将依次应用 raw、mangle、nat、和 filter 表中对应链内的规则,其中表的应用顺序为:raw -\u0026gt; mangle -\u0026gt; nat -\u0026gt; filter,而表中链的规则自上向下依次执行,执行中有可能跳转到其它链中继续执行。 \u003cimg src=\"https://blogstatic.haohtml.com/uploads/2021/10/d2b5ca33bd970f64a6301fa75ae2eb22.png\" alt=\"\"\u003eiptables Processing Flowchart\u003c/p\u003e\n\u003cp\u003e如果按七层网络协议的话,则 ipables 中的数据流向为\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2021/10/d4305170eed2b86a240d044f337dd95c.png\" alt=\"\"\u003e(来自Netfilter 官方的原理 …\u003c/p\u003e"
January 31, 2013
ldconfig命令作用
"\u003cp\u003eldconfig是一个动态链接库管理命令\u003c/p\u003e\n\u003cp\u003e为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig\nldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.\u003c/p\u003e\n\u003cp\u003eldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.\n**ldconfig命令行用法如下: **\nldconfig [-v|–verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|–print-cache] [-c FORMAT] [–format=FORMAT] [-V] [- |–help|–usage] path…\u003c/p\u003e\n\u003cp\u003e**ldconfig可用的选项说明如下: **\n(1) -v或–verbose …\u003c/p\u003e"
January 26, 2013
iostat命令
"\u003cp\u003eLinux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iostat属于sysstat软件包。可以用yum install sysstat 直接安装。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.命令格式:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eiostat[参数][时间][次数]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2.命令功能:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3.命令参数:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e-c 显示CPU使用情况\u003c/p\u003e\n\u003cp\u003e-d 显示磁盘使用情况\u003c/p\u003e\n\u003cp\u003e-k 以 KB 为单位显示\u003c/p\u003e\n\u003cp\u003e-m 以 M 为单位显示\u003c/p\u003e\n\u003cp\u003e-N 显示磁盘阵列(LVM) 信息\u003c/p\u003e\n\u003cp\u003e-n 显示NFS 使用情况\u003c/p\u003e\n\u003cp\u003e-p[磁盘] 显示磁盘和分区的情况\u003c/p\u003e\n\u003cp\u003e-t 显示终端和CPU的信息\u003c/p\u003e\n\u003cp\u003e-x 显示详细信息\u003c/p\u003e\n\u003cp\u003e-V 显示版本信息\u003c/p\u003e\n\u003cp\u003e4.使用实例:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e实例1:显示所有设备负载情况\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e命令:\u003c/p\u003e\n\u003cp\u003eiostat\u003c/p\u003e\n\u003cp\u003e输出:\u003c/p\u003e\n\u003cp\u003e[root@CT1186 ~]# iostat\u003c/p\u003e\n\u003cp\u003eLinux …\u003c/p\u003e"
January 25, 2013
分布式TCP压力测试工具 tcpcopy
"\u003cp\u003etcpcopy是一种应用请求复制(基于tcp的packets)工具,其应用领域较广,我们曾经应用于网易的广告投放系统,urs系统,nginx hmux协议开发等系统,避免了上线带来的很多问题。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e总体说来,tcpcopy主要有如下功能:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug\n2)对于后端的短连接,请求丢失率非常低(1/10万),可以应用于热备份\n3)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线\n4)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验\n5)利用多种手段,构造无限在线压力,满足中小网站压力测试要求\n6)实战演习(架构师必备)\u003c/p\u003e\n\u003cp\u003etcpcopy可以用于实时和离线回放领域,并且tcpcopy支持mysql协议的复制,开源一年以来,功能上越来越完善。\u003c/p\u003e\n\u003cp\u003e如果你对上线没有信心,如果你的单元测试不够充分,如果你对新系统不够有把握,如果你对未来的请求压力无法预测,tcpcopy可以帮助你解决上述难题。 …\u003c/p\u003e"
January 25, 2013
git config –global push.default
"\u003cp\u003e参考教程 \u003ca href=\"http://blog.haohtml.com/archives/10093\"\u003ehttp://blog.haohtml.com/archives/10093\u003c/a\u003e 刚安装的git最新版本,发现有些命令发生了一些变化.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[web@bogon www]$ git push\nwarning: push.default is unset; its implicit value is changing in\nGit 2.0 from ‘matching’ to ‘simple’. To squelch this message\nand maintain the current behavior after the default changes, use:\u003c/p\u003e\n\u003cp\u003egit config –global push.default matching\u003c/p\u003e\n\u003cp\u003eTo squelch this message and adopt the new behavior now, use:\u003c/p\u003e\n\u003cp\u003egit config –global push.default simple\u003c/p\u003e\n\u003cp\u003eSee ‘git help config’ and search for ‘push.default’ for further …\u003c/p\u003e\u003c/blockquote\u003e"
January 25, 2013
git remote用法总结
"\u003cp\u003e\u003cstrong\u003egit remote\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003egit remote显示所有的remote(加-v显示详细信息)。\ngit remote add [shortname] [url]用来添加remote。\ngit fetch [remote-name]只会pull下来全部的更动,但不会自动merge,但是git pull会自动merge。\ngit remote show [remote-name]可以看到一个remote的详细信息。\ngit remote rename old new 用来改变一个remote的名字。\ngit remote rm [remote-name]删除一个remote。\ngit remote 不带参数,列出已经存在的远程分支,例如:\n#git remote\norigin_apps\u003c/p\u003e\n\u003cp\u003egit remote -v | –verbose 列出详细信息,在每一个名字后面列出其远程url,例如:\n#git remote -v\norigin_apps gitolite@scm:apps/Welcome.git (fetch)\norigin_apps …\u003c/p\u003e"
January 17, 2013
如何查看crontab的日志记录
"\u003cp\u003e昨天crontab中的同步任务没有执行,不知道是什么原因没有执行,貌似任务hang住了,想查询一下crontab到底问题出在哪里,或者hang在了什么地方。\u003c/p\u003e\n\u003cp\u003e1. linux\u003c/p\u003e\n\u003cp\u003e看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察\u003c/p\u003e\n\u003cp\u003e2. unix\u003c/p\u003e\n\u003cp\u003e在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。\u003c/p\u003e\n\u003col start=\"3\"\u003e\n\u003cli\u003email任务\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。\u003c/p\u003e"
January 17, 2013
运行cacti的问题Cannot connect to MySQL server on ‘localhost’.Please make sure you have specified a valid MySQL database name in ‘include/config.php’
"\u003cp\u003e参考以次的教程 \u003ca href=\"http://blog.haohtml.com/archives/9428\"\u003ehttp://blog.haohtml.com/archives/9428\u003c/a\u003e,在centos安装cacti监控工具,发现在命令行下运行\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ephp /var/www/html/cacti/poller.php\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e的时候,提示以下错误\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFATAL: Cannot connect to MySQL server on ‘localhost’. Please make sure you have specified a valid MySQL database name in ‘include/config.php’\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e而这此配置文件是没有任何问题的,cacti后台访问一切正常的。poller.php是使用/var/lib/mysql/mysql.sock的,\u003c/p\u003e\n\u003cp\u003e当我在my.cnf里把mysql.sock定义到/var/lib/mysql/mysql.sock时,poller.php可以连接,\n但执行mysql就提示错误了,我把mysql.sock的位置改为/tmp/mysql.sock,使用网上提供\u003cstrong\u003e解决办法:\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eln -s /tmp/mysql.sock …\u003c/p\u003e\u003c/blockquote\u003e"
January 17, 2013
查看Linux系统 重启日志,登录日志和输入命令的日志
"\u003cp\u003e查看 重启情况\u003c/p\u003e\n\u003cp\u003e# last reboot\u003c/p\u003e\n\u003cp\u003e——————————————————————————————————————————————–\u003c/p\u003e\n\u003cp\u003ereboot system boot 2.6.18-92.el5 Mon Dec 6 12:50 (05:11)\nreboot system boot 2.6.18-92.el5 Mon Dec 6 10:49 (07:12)\nreboot system boot 2.6.18-92.el5 Sun Dec 5 18:56 (23:05)\nreboot system boot 2.6.18-92.el5 Mon Nov 29 09:55 (7+08:06)\nreboot system boot 2.6.18-92.el5 Sun Nov 28 13:47 (8+04:14)\nreboot system boot 2.6.18-92.el5 Thu Nov 25 11:59 …\u003c/p\u003e"
January 14, 2013
nginx无法启动: libpcre.so.1/libpcre.so.0: cannot open shared object file解决办法
"\u003cp\u003eNGINX启动时提示错误:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/usr/local/nginx/sbin/nginx -t\n/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eldd $(which /usr/local/nginx/sbin/nginx)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003elinux-vdso.so.1 =\u0026gt; (0x00007fff48ff0000)\nlibcrypt.so.1 =\u0026gt; /lib64/libcrypt.so.1 (0x0000003065800000)\nlibpcre.so.1 =\u0026gt; not found\nlibssl.so.6 =\u0026gt; /lib64/libssl.so.6 (0x0000003067000000)\nlibcrypto.so.6 =\u0026gt; /lib64/libcrypto.so.6 (0x0000003066400000)\nlibdl.so.2 =\u0026gt; …\u003c/p\u003e\u003c/blockquote\u003e"
December 31, 2012
golang中的函数
"\u003cp\u003e函数是构建Go程序的基础部件;所遇有趣的事情都是在它其中发生的。函数\n的定义看起来像这样:\nListing 3.1. 函数定义\u003c/p\u003e\n\u003cp\u003etype mytype int 新的类型,参阅第 5 章\n\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2012/12/golang-func.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2012/12/golang-func.png\" alt=\"golang-func\"\u003e\u003c/a\u003e\n0 保留字func用于定义一个函数;\u003c/p\u003e\n\u003cp\u003e1 函数可以定义用于特定的类型,这类函数更加通俗的称呼是method。这\n部分称作receiver而它是可选的(可参考: \u003ca href=\"http://blog.haohtml.com/archives/13766\"\u003ehttp://blog.haohtml.com/archives/13766\u003c/a\u003e)。如下图:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2012/12/golang-struct-func.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2012/12/golang-struct-func.png\" alt=\"golang-struct-func\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e2 funcname是你函数的名字;\n3 int类型的变量q作为输入参数。参数用pass-by-value方式传递,意味着它\n们会被复制;\n4 变量r和s是这个函数的命名返回值。在Go的函数中可以返回多个值。\n参阅第32页的“多值返回”。如果不想对返回的参数命名,只需要提供类\n型:(int,int)。如果只有一个返回值,可以省略圆括号。如果函数是一\n个子过程,并且没有任何返回值,也可以省略这些内容;\n5 这是函数体,注意return是一个语句,所以包裹参数的括号是可选的。\u003c/p\u003e\n\u003cp\u003e这里有两个例子,左边的函数没有返回值,右边的只是简单的将输入返回。 …\u003c/p\u003e"
December 27, 2012
[golang]将函数作为值
"\u003cp\u003e就像其它在Go中的几乎所有的东西,函数也同样是值而已.它们可以像下面这样赋值给变量:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-go\" data-lang=\"go\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003epackage\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emain\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;fmt\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunc\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emain\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#a6e22e\"\u003ef\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e:=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003efunc\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t \u003cspan style=\"color:#a6e22e\"\u003efmt\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePrintln\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;func\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#75715e\"\u003e// 下面才开始调用函数\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#a6e22e\"\u003ef\u003c/span\u003e()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e结果会打印出 func 字符串。\u003c/p\u003e\n\u003cp\u003e另一种用法是立即调用函数,但是要求匿名函数要有返回值才可以,不然会提示错误信息.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2012/12/golang_func.jpg\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/golang_func.jpg\" alt=\"golang_func\"\u003e\u003c/a\u003e\u003c/p\u003e"
December 16, 2012
mysql中alter语句中change和modify的区别
"\u003cp\u003e以下摘自mysql5手册\u003c/p\u003e\n\u003cp\u003e您可以使用CHANGE _old_col_name__column_definition_子句对列进行重命名。重命名时,需给定旧的和新的列名称和列当前的类型。例如:要把一个INTEGER列的名称从a变更到b,您需要如下操作:\u003c/p\u003e\n\u003cp\u003e· mysql\u0026gt; \u003cstrong\u003eALTER TABLE t1 CHANGE a b INTEGER;\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如果您想要更改列的类型而不是名称, CHANGE语法仍然要求旧的和新的列名称,即使旧的和新的列名称是一样的。例如:\u003c/p\u003e\n\u003cp\u003emysql\u0026gt; \u003cstrong\u003eALTER TABLE t1 CHANGE b b BIGINT NOT NULL;\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e您也可以使用MODIFY来改变列的类型,此时不需要重命名:\u003c/p\u003e\n\u003cp\u003emysql\u0026gt; \u003cstrong\u003eALTER TABLE t1 MODIFY b BIGINT NOT NULL;\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003emysql alter 语句用法,添加、修改、删除字段等\u003c/p\u003e\n\u003cp\u003e//主键549830479\u003c/p\u003e\n\u003cp\u003ealter table tabelname add new_field_id int(5) unsigned default 0 not null …\u003c/p\u003e"
December 15, 2012
windows 下搭建 GoLang 语言开发环境
"\u003cp\u003egolang官方二进制分发包包括FreeBSD, Linux, Mac OS X (Snow Leopard/Lion), and Windows等平台,包括32位、64位等版本。\u003c/p\u003e\n\u003cp\u003e我自己使用的是windows 32位分发包,MSI格式的,下载地址为: \u003ca href=\"http://code.google.com/p/go/downloads/list\"\u003ehttp://code.google.com/p/go/downloads/list\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003egolang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e环境变量说明:\u003c/strong\u003e\n$GOROOT 指向golang安装之后的根目录,windows平台下默认为c:\\go,会在安装过程中由安装程序自动写入系统环境变量。\n$GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)\n$GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows)\n$GOBIN 指向安装之后根目录下的bin目录,即$GOROOT/bin,windows平台下默认为c:\\go\\bin,会在安装过程中由安装程序自动添加到PATH变量中\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e配 …\u003c/strong\u003e\u003c/p\u003e"
December 11, 2012
破解youku等视频网站广告的插件OpenGG.Clean.Player
"\u003cp\u003e官方网址: \u003ca href=\"http://opengg.me/781/opengg-clean-player/\"\u003ehttp://opengg.me/781/opengg-clean-player/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e安装地址: \u003ca href=\"http://userscripts.org/scripts/show/120679\"\u003ehttp://userscripts.org/scripts/show/120679\u003c/a\u003e\u003c/p\u003e"