[常用命令]xargs的i参数
Unix/LinuxC技术 jackxiang 2013-7-10 19:51
xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find . -type f -name "*.log" | xargs rm -rf *就将以log结尾的文件删除了,如果我想去移动或者复制就需要使用参数来代替了。 xargs -i 参数或者-I参数配合{}即可进行文件的操作。 -I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate
input items; instead the separator is the newline character. Implies -x and -L 1.
--replace[=replace-str], -i[replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified, and for -I{} otherwise. This option is deprecated; use -I instead.
man了一下看的还是不太懂,通过例子,做作实验将我的理解写一下。 ############### 操作的目录下的文件###############[root@test05 ab]# ls
1kk.zip 3kk.zip 5kk.zip b.rar d.rar f.rar h.rar j.rar mini.txt ni.txt
2kk.zip 4kk.zip a.rar c.rar e.rar g.rar i.rar k.rar nii.txt###################使用 i 参数 ##################
[root@test05 ab]# find . -type f -name "*.txt" | xargs -i cp {} /tmp/k/
[root@test05 ab]# ls ../k/
mini.txt nii.txt ni.txt
[root@test05 ab]# ################### 使用 I 参数 ################
[root@test05 ab]# find . -type f -name "*.txt" | xargs -I {} cp {} /tmp/n/
[root@test05 ab]# ls ../n/
mini.txt nii.txt ni.txt 结果出来了, 加-i 参数直接用 {}就能代替管道之前的标准输出的内容; 加 -I 参数 需要事先指定替换字符
来自:
http://hi.baidu.com/xmflycat/item/359efb2dbc490799b6326358
---------------------------------------------------------------------------------------------------------------------
如下实践,更容易理解:
Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate
input items; instead the separator is the newline character. Implies -x and -L 1.
--replace[=replace-str], -i[replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified, and for -I{} otherwise. This option is deprecated; use -I instead.
man了一下看的还是不太懂,通过例子,做作实验将我的理解写一下。 ############### 操作的目录下的文件###############[root@test05 ab]# ls
1kk.zip 3kk.zip 5kk.zip b.rar d.rar f.rar h.rar j.rar mini.txt ni.txt
2kk.zip 4kk.zip a.rar c.rar e.rar g.rar i.rar k.rar nii.txt###################使用 i 参数 ##################
[root@test05 ab]# find . -type f -name "*.txt" | xargs -i cp {} /tmp/k/
[root@test05 ab]# ls ../k/
mini.txt nii.txt ni.txt
[root@test05 ab]# ################### 使用 I 参数 ################
[root@test05 ab]# find . -type f -name "*.txt" | xargs -I {} cp {} /tmp/n/
[root@test05 ab]# ls ../n/
mini.txt nii.txt ni.txt 结果出来了, 加-i 参数直接用 {}就能代替管道之前的标准输出的内容; 加 -I 参数 需要事先指定替换字符
来自:
http://hi.baidu.com/xmflycat/item/359efb2dbc490799b6326358
---------------------------------------------------------------------------------------------------------------------
如下实践,更容易理解:
[实践OK]在linux中查看线程数的三种方法
Unix/LinuxC技术 jackxiang 2013-7-5 16:49
查看线程的方法:
ps -efL, 其中的LWP是线程ID(why是这个), nlwp是线程数.
UID PID PPID LWP C NLWP STIME TTY TIME CMD
也就是第四位,是它的线程ID,而第二位则是进程的PID,第三位是子进程号:
ps -T -p 9613
PID SPID TTY TIME CMD
9613 9613 pts/1 00:00:00 thread01
9613 9712 pts/1 00:00:00 thread01
9613 9795 pts/1 00:00:00 thread01
9613 9853 pts/1 00:00:00 thread01
看线程PID:
ps -efL|grep logstash|awk '{print $4}'|wc
148 148 888
查看进程28740是主进程,28741是子进程,28265则是程序的主进程来自:
[root@iZ25dcp92ckZ ~]# ps aux|grep 28265
root 28265 0.0 0.3 116648 3412 pts/0 Ss 21:29 0:00 -bash:
也就是bash终端~
列名分别是:
UID PID PPID LWP C NLWP STIME TTY TIME CMD
其中
UID为User ID.
PID为processid,进程标识符
PPID为 parent processid,父进程标识符2,
LWP为light weight process orthread, 轻量级进程,即线程标识符
NLWP为,number oflwps(threads) in the process, 线程的数量
摘自:http://blog.csdn.net/jiafu1115/article/details/19070015
——————————————————————————————————————————————————————
48属于www用户的id,这儿我这个没有添加,所以没有显示www,对上面这些线程进行跟踪:
————————————————————————————————
1、 cat /proc/${pid}/status
Threads: 2 //这个是核心,2个线程!如下:
[root@test multepoolserver]# cat /proc/26202/status
Name: multipepollserv
State: S (sleeping)
SleepAVG: 58%
Tgid: 26202
Pid: 26202
PPid: 18260
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmPeak: 26036 kB
VmSize: 26036 kB
VmLck: 0 kB
VmHWM: 1144 kB
VmRSS: 1144 kB
VmData: 10508 kB
VmStk: 84 kB
VmExe: 16 kB
VmLib: 3052 kB
VmPTE: 80 kB
StaBrk: 03103000 kB
Brk: 03124000 kB
StaStk: 7fff73219100 kB
Threads: 2
SigQ: 1/70656
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180004407
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
Cpus_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000ff
Mems_allowed: 00000000,00000003
2、pstree -p ${pid}
[root@test multepoolserver]# pstree -p 26202
multipepollserv(26202)─┬─multipepollserv(26203)
└─{multipepollserv}(26204)
26204 就是一个线程。
[root@test multepoolserver]# ps aux|grep httpmut
root 26202 0.0 0.0 26036 1144 pts/10 Sl+ 17:35 0:00 [httpmut: master process] H?????5r%
www 26203 0.0 0.0 15840 468 pts/10 S+ 17:35 0:00 [httpmut: worker process] H?????5r%
3、top -p ${pid} 再按H 或者直接输入 top -bH -d 3 -p ${pid}
[root@test multepoolserver]# top -p 26202
按大写的H(shift+h),就能看到有几个线程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26202 root 18 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
26204 root 20 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
top -bH -d 3 -p 26202 //3秒刷新一次
[root@test multepoolserver]# top -bH -d 3 -p 26202
top - 17:39:34 up 650 days, 3:35, 10 users, load average: 1.04, 1.01, 1.01
Tasks: 2 total, 0 running, 2 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.9%us, 0.3%sy, 0.0%ni, 97.8%id, 0.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8180460k total, 7648040k used, 532420k free, 1269016k buffers
Swap: 8385920k total, 218976k used, 8166944k free, 4855668k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26202 root 18 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
26204 root 20 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
4、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
http://liulinxia02.blog.163.com/blog/static/268687720111129103740947/
[root@test multepoolserver]# ps aux|grep httpmut
root 26202 0.0 0.0 26036 1144 pts/10 Sl+ 17:35 0:00 [httpmut: master process] H?????5r%
www 26203 0.0 0.0 15840 468 pts/10 S+ 17:35 0:00 [httpmut: worker process] H?????5r%
root 26206 0.0 0.0 61172 748 pts/14 S+ 17:35 0:00 grep httpmut
[root@test multepoolserver]# ps -mp 26202
PID TTY TIME CMD
26202 pts/10 00:00:00 multipepollserv
- - 00:00:00 -
- - 00:00:00 -
[root@test multepoolserver]# ps -mp 26203
PID TTY TIME CMD
26203 pts/10 00:00:00 multipepollserv
- - 00:00:00 -
——————————————————————————————————————————
在linux中查看线程数的三种方法
在linux中查看线程数的三种方法
www.2cto.com
1、top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
2、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
3、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
来源:http://www.2cto.com/os/201212/177103.html
更多:http://www.360doc.com/content/13/0512/13/9085503_284797175.shtml
ps -efL, 其中的LWP是线程ID(why是这个), nlwp是线程数.
UID PID PPID LWP C NLWP STIME TTY TIME CMD
也就是第四位,是它的线程ID,而第二位则是进程的PID,第三位是子进程号:
ps -T -p 9613
PID SPID TTY TIME CMD
9613 9613 pts/1 00:00:00 thread01
9613 9712 pts/1 00:00:00 thread01
9613 9795 pts/1 00:00:00 thread01
9613 9853 pts/1 00:00:00 thread01
看线程PID:
ps -efL|grep logstash|awk '{print $4}'|wc
148 148 888
查看进程28740是主进程,28741是子进程,28265则是程序的主进程来自:
[root@iZ25dcp92ckZ ~]# ps aux|grep 28265
root 28265 0.0 0.3 116648 3412 pts/0 Ss 21:29 0:00 -bash:
也就是bash终端~
列名分别是:
UID PID PPID LWP C NLWP STIME TTY TIME CMD
其中
UID为User ID.
PID为processid,进程标识符
PPID为 parent processid,父进程标识符2,
LWP为light weight process orthread, 轻量级进程,即线程标识符
NLWP为,number oflwps(threads) in the process, 线程的数量
摘自:http://blog.csdn.net/jiafu1115/article/details/19070015
——————————————————————————————————————————————————————
48属于www用户的id,这儿我这个没有添加,所以没有显示www,对上面这些线程进行跟踪:
————————————————————————————————
1、 cat /proc/${pid}/status
Threads: 2 //这个是核心,2个线程!如下:
[root@test multepoolserver]# cat /proc/26202/status
Name: multipepollserv
State: S (sleeping)
SleepAVG: 58%
Tgid: 26202
Pid: 26202
PPid: 18260
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmPeak: 26036 kB
VmSize: 26036 kB
VmLck: 0 kB
VmHWM: 1144 kB
VmRSS: 1144 kB
VmData: 10508 kB
VmStk: 84 kB
VmExe: 16 kB
VmLib: 3052 kB
VmPTE: 80 kB
StaBrk: 03103000 kB
Brk: 03124000 kB
StaStk: 7fff73219100 kB
Threads: 2
SigQ: 1/70656
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180004407
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
Cpus_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000ff
Mems_allowed: 00000000,00000003
2、pstree -p ${pid}
[root@test multepoolserver]# pstree -p 26202
multipepollserv(26202)─┬─multipepollserv(26203)
└─{multipepollserv}(26204)
26204 就是一个线程。
[root@test multepoolserver]# ps aux|grep httpmut
root 26202 0.0 0.0 26036 1144 pts/10 Sl+ 17:35 0:00 [httpmut: master process] H?????5r%
www 26203 0.0 0.0 15840 468 pts/10 S+ 17:35 0:00 [httpmut: worker process] H?????5r%
3、top -p ${pid} 再按H 或者直接输入 top -bH -d 3 -p ${pid}
[root@test multepoolserver]# top -p 26202
按大写的H(shift+h),就能看到有几个线程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26202 root 18 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
26204 root 20 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
top -bH -d 3 -p 26202 //3秒刷新一次
[root@test multepoolserver]# top -bH -d 3 -p 26202
top - 17:39:34 up 650 days, 3:35, 10 users, load average: 1.04, 1.01, 1.01
Tasks: 2 total, 0 running, 2 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.9%us, 0.3%sy, 0.0%ni, 97.8%id, 0.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8180460k total, 7648040k used, 532420k free, 1269016k buffers
Swap: 8385920k total, 218976k used, 8166944k free, 4855668k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26202 root 18 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
26204 root 20 0 26036 1144 984 S 0.0 0.0 0:00.00 multipepollserv
top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
4、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
http://liulinxia02.blog.163.com/blog/static/268687720111129103740947/
[root@test multepoolserver]# ps aux|grep httpmut
root 26202 0.0 0.0 26036 1144 pts/10 Sl+ 17:35 0:00 [httpmut: master process] H?????5r%
www 26203 0.0 0.0 15840 468 pts/10 S+ 17:35 0:00 [httpmut: worker process] H?????5r%
root 26206 0.0 0.0 61172 748 pts/14 S+ 17:35 0:00 grep httpmut
[root@test multepoolserver]# ps -mp 26202
PID TTY TIME CMD
26202 pts/10 00:00:00 multipepollserv
- - 00:00:00 -
- - 00:00:00 -
[root@test multepoolserver]# ps -mp 26203
PID TTY TIME CMD
26203 pts/10 00:00:00 multipepollserv
- - 00:00:00 -
——————————————————————————————————————————
在linux中查看线程数的三种方法
在linux中查看线程数的三种方法
www.2cto.com
1、top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
2、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
3、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
来源:http://www.2cto.com/os/201212/177103.html
更多:http://www.360doc.com/content/13/0512/13/9085503_284797175.shtml
[实践Ok]通过spawn-fcgi管理命令行直接启动PHP的fastCGI程序,fastCGI加入监控拉起功能备案。
Php/Js/Shell/Go jackxiang 2013-7-5 15:49
背景:Apache结合spawn-fcgi使用FastCGI的实践,和PHP启动fastCGI一个原理。
关于PHP的相关情况参考:使用spawn-fcgi管理运行php-cgi Url: http://www.libaqiang.com/?p=78193
spawn-fcgi和nginx自带的fastcgi相比 有什么优势?
为什么在用nginx的时候还要装spawn-fcgi,nginx不是自带有这个模块吗?
nginx的fastcgi_pass模块是用于代理fcgi协议的后端。spawn-fcgi用于管理支持fcgi协议的进程,属于process manager这类,免于重造轮子。
对于PHP,推荐php-fpm,比spawn多了不少专门针对php的功能,例如slow_request等。
http://www.zhihu.com/question/19689162
一)这个用spawn-fcgi 来管理FastCGI 以达到优化Apache 下PHP性能的方法比较另类,大家权当一种参考。
方法:系统平台是CentOS 5,前提是LAMP已配置好,运行正常。
1. wget -c http://www.21andy.com/centos/5/i386/spawn-fcgi-1.6.3-1.el5.i386.rpm(也可以去官方下载源码包编译安装:http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz)
2. rpm -ivh spawn-fcgi-1.6.3-1.el5.i386.rpm
3. 使用spawn-fcgi来控制php-cgi的FastCGI进程:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g apache -f /usr/bin/php-cgi
参数含义如下:
-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置。
-a <addr> 绑定到地址addr。
-p <port> 绑定到端口port。
-s <path> 绑定到unix socket的路径path。
-C <childs> 指定产生的FastCGI的进程数,默认为5。(仅用于PHP)
-P <path> 指定产生的进程的PID文件路径。
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,CentOS下可以使用apache用户,其他的根据情况配置,如nobody、www-data等。
4. 将这行代码加入到/etc/rc.local文件底部,这样系统启动的时候就可以同时启动PHP的FastCGI进程。
实践内容:
实践来源:http://www.phpabc.cn/apachejie-he-spawn-fcgishi-yong-fastcgi.html
(1)通过spawn-fcgi来启动php进程
/usr/local/webserver/fastcgi/spawn-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f /usr/local/webserver/php/bin/php-cgi
spawn-fcgi: child spawned successfully: PID: 7551
ps aux|grep php
apache 7551 16.7 1.6 43396 6016 ? Ssl 15:14 0:01 /usr/local/webserver/php/bin/php-cgi
cd lighttpd_fastCGI_Codes/
./configure && make && make install
/usr/bin/install -c spawn-fcgi '/usr/local/bin'
启动PHP:
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f /usr/local/webserver/php/bin/php-cgi
root@192.168.137.128:~/software/lighttpd_fastCGI_Codes# ps aux|grep php //共5个
www 9754 4.0 2.4 45112 8588 ? Ss 15:50 0:00 /usr/local/webserver/php/bin/php-cgi
www 9756 0.0 1.1 45112 3988 ? S 15:50 0:00 /usr/local/webserver/php/bin/php-cgi
www 9757 0.0 1.1 45112 3988 ? S 15:50 0:00 /usr/local/webserver/php/bin/php-cgi
(2)要是自己编写一个fastcgi呢?简单如下操作(这儿好像不能像PHP一样有多个进程:fastcgi 多进程这部分,我还没研究到。可以有空再看看):
代码编写:
vi hello.c
编译:
gcc -o hello.fcgi hello.c -L /usr/local/webserver/fastcgi/fcgi/lib -lfcgi
/usr/local/webserver/fastcgi/spawn-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f ./hello.fcgi
启动成功没:
root@192.168.137.128:/usr/local/test# ps aux|grep hello
apache 10485 0.0 0.1 2140 416 ? Ss 16:31 0:00 ./hello.fcgi
至于后面的ngnx配置,无非两种:
一个是直接连sock,另一个是开9002端口两者对比效率上哪个高一点儿呢?
一般来说本地的 unix sock要快一些。
参考Url:
http://blog.csdn.net/qzier_go/article/details/7340868
http://terry831010.blog.163.com/blog/static/6916117120126185428827/
二)spawn-fcgi与fcgi的运行机制分析 :在此基础上实现了守护监控功能
http://blog.csdn.net/cleanfield/article/details/6412723
关于PHP的相关情况参考:使用spawn-fcgi管理运行php-cgi Url: http://www.libaqiang.com/?p=78193
spawn-fcgi和nginx自带的fastcgi相比 有什么优势?
为什么在用nginx的时候还要装spawn-fcgi,nginx不是自带有这个模块吗?
nginx的fastcgi_pass模块是用于代理fcgi协议的后端。spawn-fcgi用于管理支持fcgi协议的进程,属于process manager这类,免于重造轮子。
对于PHP,推荐php-fpm,比spawn多了不少专门针对php的功能,例如slow_request等。
http://www.zhihu.com/question/19689162
一)这个用spawn-fcgi 来管理FastCGI 以达到优化Apache 下PHP性能的方法比较另类,大家权当一种参考。
方法:系统平台是CentOS 5,前提是LAMP已配置好,运行正常。
1. wget -c http://www.21andy.com/centos/5/i386/spawn-fcgi-1.6.3-1.el5.i386.rpm(也可以去官方下载源码包编译安装:http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz)
2. rpm -ivh spawn-fcgi-1.6.3-1.el5.i386.rpm
3. 使用spawn-fcgi来控制php-cgi的FastCGI进程:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g apache -f /usr/bin/php-cgi
参数含义如下:
-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置。
-a <addr> 绑定到地址addr。
-p <port> 绑定到端口port。
-s <path> 绑定到unix socket的路径path。
-C <childs> 指定产生的FastCGI的进程数,默认为5。(仅用于PHP)
-P <path> 指定产生的进程的PID文件路径。
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,CentOS下可以使用apache用户,其他的根据情况配置,如nobody、www-data等。
4. 将这行代码加入到/etc/rc.local文件底部,这样系统启动的时候就可以同时启动PHP的FastCGI进程。
实践内容:
实践来源:http://www.phpabc.cn/apachejie-he-spawn-fcgishi-yong-fastcgi.html
(1)通过spawn-fcgi来启动php进程
/usr/local/webserver/fastcgi/spawn-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f /usr/local/webserver/php/bin/php-cgi
spawn-fcgi: child spawned successfully: PID: 7551
ps aux|grep php
apache 7551 16.7 1.6 43396 6016 ? Ssl 15:14 0:01 /usr/local/webserver/php/bin/php-cgi
cd lighttpd_fastCGI_Codes/
./configure && make && make install
/usr/bin/install -c spawn-fcgi '/usr/local/bin'
启动PHP:
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f /usr/local/webserver/php/bin/php-cgi
root@192.168.137.128:~/software/lighttpd_fastCGI_Codes# ps aux|grep php //共5个
www 9754 4.0 2.4 45112 8588 ? Ss 15:50 0:00 /usr/local/webserver/php/bin/php-cgi
www 9756 0.0 1.1 45112 3988 ? S 15:50 0:00 /usr/local/webserver/php/bin/php-cgi
www 9757 0.0 1.1 45112 3988 ? S 15:50 0:00 /usr/local/webserver/php/bin/php-cgi
(2)要是自己编写一个fastcgi呢?简单如下操作(这儿好像不能像PHP一样有多个进程:fastcgi 多进程这部分,我还没研究到。可以有空再看看):
代码编写:
vi hello.c
编译:
gcc -o hello.fcgi hello.c -L /usr/local/webserver/fastcgi/fcgi/lib -lfcgi
/usr/local/webserver/fastcgi/spawn-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g www -f ./hello.fcgi
启动成功没:
root@192.168.137.128:/usr/local/test# ps aux|grep hello
apache 10485 0.0 0.1 2140 416 ? Ss 16:31 0:00 ./hello.fcgi
至于后面的ngnx配置,无非两种:
一个是直接连sock,另一个是开9002端口两者对比效率上哪个高一点儿呢?
一般来说本地的 unix sock要快一些。
参考Url:
http://blog.csdn.net/qzier_go/article/details/7340868
http://terry831010.blog.163.com/blog/static/6916117120126185428827/
二)spawn-fcgi与fcgi的运行机制分析 :在此基础上实现了守护监控功能
http://blog.csdn.net/cleanfield/article/details/6412723
[转]set_error_handler() 重要用法
Php/Js/Shell/Go jackxiang 2013-7-4 16:17
背景:
群里有兄弟在问:
我在PHP.ini里 display=off屏蔽了错误,然后把错误信息 写入到LOG里
怎么搞?
一)
set_exception_handler
set_error_handler
二)php.ini里配置:
log_errors = On
error_log = /data/logs/php_error.log
阅读全文
群里有兄弟在问:
我在PHP.ini里 display=off屏蔽了错误,然后把错误信息 写入到LOG里
怎么搞?
一)
set_exception_handler
set_error_handler
二)php.ini里配置:
log_errors = On
error_log = /data/logs/php_error.log
阅读全文
PHP5.5集成opcache(开源版Zend Optimizer+)
Php/Js/Shell/Go jackxiang 2013-7-4 15:44
VMware虚拟机网络设置为NAT方式,而虚拟机(系统为CentOS)中的默认gateway并不使用VMnet8这块虚拟网卡的IP地址(192.168.38.1),而默认使用的是192.168.38.2,为什么?
真实系统中的vmnet8网卡IP地址是网关,你虚拟机里面的网卡IP地址怎么可能和vmnet8设置的地址一样?
那个虚拟的网卡就是网关,所以你虚拟系统里面的网卡IP地址只能是192.168.38.X,网关要设置成你真实系统里面看到的vmnet8的网卡IP,否则无法上网。
追问:
你误解了,我是说虚拟机里面的网卡的网关不是vmnet8网卡的ip地址,详细情况为:虚拟机:网卡ip为192.168.38.128,网关为192.168.38.2。主机:vmnet8网卡ip为192.168.38.1我想问的是为什么虚拟机中网卡的网关不为192.168.38.1而为192.168.38.2?
回答:
你打开你虚拟机安装目录,找到vmnetcfg.exe配置这个文件,然后找到vmnet8,在NAT配置里面也会看到这样一行,默认网关192.168.38.2
主机网卡IP 192.168.38.1是对外连接的IP,192.168.38.2是LAN网络,就是虚拟机NAT网络的网关,
vmnet8就相当于连接到内网的网卡,而虚拟机本身则相当于运 行在内网上的机器
所以192.168.38.2没错呀。
因为.1被用来连接主机的实际网卡了,所以,网关是:192.168.38.2。
来处:http://wenwen.soso.com/z/q228962597.htm
二:用DHCP上vmware8下进行上网:
设置主机名称与默认网关(通过vi编辑器打开/etc/sysconfig/network文件)
[root@hostname root]# vi /etc/sysconfig/network
按照下图设置,注意HOSTNAME这里设置成daquan.wang.com,配置完成后,重启机器后hostname会变成daquan。
设置网卡参数(通过vi编辑器打开/etc/sysconfig/network-scripts/ifcfg-eth0文件)
ONBOOT="yes"
DEVICE="eth0"
BOOTPROTO="dhcp"
设置DNS主机的IP(通过vi编辑器打开/etc/resolv.conf文件)
[root@hostname root]# vi /etc/resolv.conf
下图无需设置,大家看一下即可,如果不是如下,重新启动机器应该就会自动设置,因为已经设置为DHCP,nameserver会自动设置成VMnet8的Gateway IP Address,nameserver就起到Windows下的DNS Server作用,这种设置类似于Windows域环境下的DNS转发器,说明这个地址会自动转发DNS查询到主机的DNS。
来源 :http://www.linuxeden.com/html/netadmin/20080307/50368.html
真实系统中的vmnet8网卡IP地址是网关,你虚拟机里面的网卡IP地址怎么可能和vmnet8设置的地址一样?
那个虚拟的网卡就是网关,所以你虚拟系统里面的网卡IP地址只能是192.168.38.X,网关要设置成你真实系统里面看到的vmnet8的网卡IP,否则无法上网。
追问:
你误解了,我是说虚拟机里面的网卡的网关不是vmnet8网卡的ip地址,详细情况为:虚拟机:网卡ip为192.168.38.128,网关为192.168.38.2。主机:vmnet8网卡ip为192.168.38.1我想问的是为什么虚拟机中网卡的网关不为192.168.38.1而为192.168.38.2?
回答:
你打开你虚拟机安装目录,找到vmnetcfg.exe配置这个文件,然后找到vmnet8,在NAT配置里面也会看到这样一行,默认网关192.168.38.2
主机网卡IP 192.168.38.1是对外连接的IP,192.168.38.2是LAN网络,就是虚拟机NAT网络的网关,
vmnet8就相当于连接到内网的网卡,而虚拟机本身则相当于运 行在内网上的机器
所以192.168.38.2没错呀。
因为.1被用来连接主机的实际网卡了,所以,网关是:192.168.38.2。
来处:http://wenwen.soso.com/z/q228962597.htm
二:用DHCP上vmware8下进行上网:
设置主机名称与默认网关(通过vi编辑器打开/etc/sysconfig/network文件)
[root@hostname root]# vi /etc/sysconfig/network
按照下图设置,注意HOSTNAME这里设置成daquan.wang.com,配置完成后,重启机器后hostname会变成daquan。
设置网卡参数(通过vi编辑器打开/etc/sysconfig/network-scripts/ifcfg-eth0文件)
ONBOOT="yes"
DEVICE="eth0"
BOOTPROTO="dhcp"
设置DNS主机的IP(通过vi编辑器打开/etc/resolv.conf文件)
[root@hostname root]# vi /etc/resolv.conf
下图无需设置,大家看一下即可,如果不是如下,重新启动机器应该就会自动设置,因为已经设置为DHCP,nameserver会自动设置成VMnet8的Gateway IP Address,nameserver就起到Windows下的DNS Server作用,这种设置类似于Windows域环境下的DNS转发器,说明这个地址会自动转发DNS查询到主机的DNS。
来源 :http://www.linuxeden.com/html/netadmin/20080307/50368.html
ifconfig eth0 up/down与ifup/ifdown eth0的区别,阿里云启动网卡,ifup eth1 ifup eth0。
Unix/LinuxC技术 jackxiang 2013-6-29 15:51
上周五临下课时,老师突然问我这两个命令的区别,在看鸟哥的私房菜的时候也没有特别注意这两个命令的不同,毕竟平时经常用的是ifconfig这个命令,虽然ifup ifdown要简单一些,但没怎么用过。仔细查阅资料之后,总结出区别大概如下,关于详细的解释,我也就不在这里搬了,下面是大概的区别,了解linux的人应该能看懂。
ifconfig :设定网络参数使用的指令
ifup,ifdown:激活与关闭某个网络适配卡
ifconfig eth0 up 或者是 ifconfig eth0 down 可以使用 ifup eth0 或 ifdown eth0 来替代!,但是 ifup 与 ifdown 是以 /etc/sysconfig/network-scripts/ifcfg-eth[n ](这里的n取0,1,2……)的档案来进行激活的!所以 ifcfg-eth0 必须存在才能使用 ifup/ifdown eth0
也就是说ifup和ifdown必须要有相关的档案存在才能激活呦!举个例子来说,上面我们要激活 eth0 这块网络卡的时候,那么你的 Linux 系统当中就必须要存在 /etc/sysconfig/network-scripts/ifcfg-eth0 这个网络适配卡的设定档案才行!同理可证!如果要激活 eth1 ,除了存在 eth1 这个实体网络卡之外,还要存在 ifcfg-eth1 才行!
而ifconfig eth0 up/down则不需要这两个档案存在。
这也就是ifconfig eth0 up/down与ifup/ifdown eth0的区别!
来自:http://www.muxiaofei.com/ifconfig-eth0-up-down-difference-ifup-and-ifdown-eth0/
阿里云启动网卡:
cat ifcfg-eth0
cat ifcfg-eth1
ifup eth1
ifup eth0
ifconfig :设定网络参数使用的指令
ifup,ifdown:激活与关闭某个网络适配卡
ifconfig eth0 up 或者是 ifconfig eth0 down 可以使用 ifup eth0 或 ifdown eth0 来替代!,但是 ifup 与 ifdown 是以 /etc/sysconfig/network-scripts/ifcfg-eth[n ](这里的n取0,1,2……)的档案来进行激活的!所以 ifcfg-eth0 必须存在才能使用 ifup/ifdown eth0
也就是说ifup和ifdown必须要有相关的档案存在才能激活呦!举个例子来说,上面我们要激活 eth0 这块网络卡的时候,那么你的 Linux 系统当中就必须要存在 /etc/sysconfig/network-scripts/ifcfg-eth0 这个网络适配卡的设定档案才行!同理可证!如果要激活 eth1 ,除了存在 eth1 这个实体网络卡之外,还要存在 ifcfg-eth1 才行!
而ifconfig eth0 up/down则不需要这两个档案存在。
这也就是ifconfig eth0 up/down与ifup/ifdown eth0的区别!
来自:http://www.muxiaofei.com/ifconfig-eth0-up-down-difference-ifup-and-ifdown-eth0/
阿里云启动网卡:
cat ifcfg-eth0
cat ifcfg-eth1
ifup eth1
ifup eth0
相比Win下的调试书籍,linux下的相关书,至少在国内几乎没有见过。 想是因为win下的破解带动了调试这块吧。。。。
以前尝试过直接去翻GDB的manual,但是十分枯燥,看不下去。因为只是直接介绍命令而已,对于初学者,事实上需要的是实例,和能够一步步能操演下去的讲解。这本书很薄,但是基本的调试用法都讲到了,普通的程序调试应该是足够了。这本书让我觉得调试也是非常有意思的一件事,并勾起了我对于底层硬件探究的兴趣。
DownLoad:
http://ishare.iask.sina.com.cn/f/22493308.html?from=like
阅读全文
以前尝试过直接去翻GDB的manual,但是十分枯燥,看不下去。因为只是直接介绍命令而已,对于初学者,事实上需要的是实例,和能够一步步能操演下去的讲解。这本书很薄,但是基本的调试用法都讲到了,普通的程序调试应该是足够了。这本书让我觉得调试也是非常有意思的一件事,并勾起了我对于底层硬件探究的兴趣。
DownLoad:
http://ishare.iask.sina.com.cn/f/22493308.html?from=like
阅读全文
25个Linux 服务器安全小贴士
Unix/LinuxC技术 jackxiang 2013-6-27 12:28
大家都认为 Linux 默认是安全的,我大体是认可的 (这是个有争议的话题)。Linux默认确实有内置的安全模型。你需要打开它并且对其进行定制,这样才能得到更安全的系统。Linux更难管理,不过相应也更灵活,有更多的配置选项。
对于系统管理员,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。这是我们关于“如何让Linux系统更安全” 或者 “加固Linux系统“之类话题的第一篇文章。本文将介绍 25个有用的技巧和窍门 ,帮助你让Linux系统更加安全。希望下面的这些技巧和窍门可以帮助你加强你的系统的安全。
1. 物理系统的安全性
配置BIOS,禁用从CD/DVD、外部设备、软驱启动。下一步,启用BIOS密码,同时启用GRUB的密码保护,这样可以限制对系统的物理访问。
通过设置GRUB密码来保护Linux服务器
2. 磁盘分区
使用不同的分区很重要,对于可能得灾难,这可以保证更高的数据安全性。通过划分不同的分区,数据可以进行分组并隔离开来。当意外发生时,只有出问题的分区的数据才会被破坏,其他分区的数据可以保留下来。你最好有以下的分区,并且第三方程序最好安装在单独的文件系统/opt下。
/
/boot
/usr
/var
/home
/tmp
/opt
3. 最小包安装,最少漏洞
你真的需要安装所有的服务么?建议不要安装无用的包,避免由这些包带来的漏洞。这将最小化风险,因为一个服务的漏洞可能会危害到其他的服务。找到并去除或者停止不用的服务,把系统漏洞减少到最小。使用‘chkconfig‘命令列出运行级别3的运行所有服务。
# /sbin/chkconfig --list |grep '3:on'
当你发现一个不需要的服务在运行时,使用下面的命令停止这个服务。
# chkconfig serviceName off
使用RPM包管理器,例如YUM或者apt-get 工具来列出所有安装的包,并且利用下的命令来卸载他们。
# yum -y remove package-name
# sudo apt-get remove package-name
5 chkconfig Command Examples
20 Practical Examples of RPM Commands
20 Linux YUM Commands for Linux Package Management
25 APT-GET and APT-CACHE Commands to Manage Package Management
4. 检查网络监听端口
在网络命令 ‘netstat‘ 的帮助下,你将能够看到所有开启的端口,以及相关的程序。使用我上面提到的 ‘chkconfig‘ 命令关闭系统中不想要的网络服务。
# netstat -tulpn
Linux 网络管理中的 20 条 Netstat 命令
5. 使用 SSH(Secure Shell)
Telnet 和 rlogin 协议只能用于纯文本,不能使用加密的格式,这或将导致安全漏洞的产生。SSH 是一种在客户端与服务器端通讯时使用加密技术的安全协议。
除非必要,永远都不要直接登录 root 账户。使用 “sudo” 执行命令。sudo 由 /etc/sudoers 文件制定,同时也可以使用 “visudo” 工具编辑,它将通过 VI 编辑器打开配置文件。
同时,建议将默认的 SSH 22 端口号改为其他更高的端口号。打开主要的 SSH 配置文件并做如下修改,以限制用户访问。
# vi /etc/ssh/sshd_config
关闭 root 用户登录
PermitRootLogin no
特定用户通过
AllowUsers username
使用第二版 SSH 协议
Protocol 2
SSH 服务器安全维护五条最佳实践
6. 保证系统是最新的
得一直保证系统包含了最新版本的补丁、安全修复和可用内核。
# yum updates
# yum check-update
7. 锁定 Cron任务
Cron有它自己内建的特性,这特性允许定义哪些人能哪些人不能跑任务。这是通过两个文件/etc/cron.allow 和 /etc/cron.deny 控制的。要锁定在用Cron的用户时可以简单的将其名字写到corn.deny里,而要允许用户跑cron时将其名字加到cron.allow即可。如果你要禁止所有用户使用corn,那么可以将“ALL”作为一行加到cron.deny里。
# echo ALL >>/etc/cron.deny
11 个linux Cron调度实例
8. 禁止USB探测
很多情况下我们想去限制用户使用USB,来保障系统安全和数据的泄露。建立一个文件‘/etc/modprobe.d/no-usb‘并且利用下面的命令来禁止探测USB存储。
install usb-storage /bin/true
9.打开SELinux
SELinux(安全增强linux)是linux内核提供的一个强制的访问控制安全机制。禁用SELinux意味着系统丢掉了安全机制。要去除SELinux之前仔细考虑下,如果你的系统需要发布到网络,并且要在公网访问,你就要更加注意一下。
SELinux 提供了三个基本的操作模式,他们是:
强制执行:这是默认是模式,用来启用和强制执行SELinux安全措略。
许可模式:这种模式下SELinux不会强制执行安全措略,只有警告和日志记录。这种模式在SELinux相关问题的故障排除时候非常有用。
关闭模式:SELinux被关闭。
你可以使用命令行‘system-config-selinux‘, ‘getenforce‘ or ‘sestatus‘来浏览当前的SEliux的状态。
# sestatus
如果是关闭模式,通过下面的命令开启SELinux
# setenforce enforcing
你也可以通过配置文件‘/etc/selinux/config‘来进行SELinux的开关操作。
10. 移除KDE或GNOME桌面
没必要在专用的LAMP服务器上运行X Window桌面比如KDE和GNOME。可以移掉或关闭它们,以提高系统安全性和性能。打开/etc/inittab然后将run level改成3就可以关闭这些桌面。如果你将它彻底的从系统中移走,可以用下面这个命令:
# yum groupremove "X Window System"
11. 关闭IPv6
如果不用IPv6协议,那就应该关闭掉它,因为大部分的应用和策略都不会用到IPv6,而且当前它不是服务器必需的。可以在网络配置文件中加入如下几行来关掉它。
# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no
12. 限制用户使用旧密码
如果你不希望用户继续使用老密码,这一条很有用。老的密码文件位于 /etc/security/opasswd。你可以使用 PAM 模块实现。
RHEL / CentOS / Fedora 中打开 ‘/etc/pam.d/system-auth‘ 文件。
# vi /etc/pam.d/system-auth
Ubuntu/Debian/Linux Mint 中打开 ‘/etc/pam.d/common-password‘ 文件。
# vi /etc/pam.d/common-password
在 ‘auth‘ 块中添加下面一行。
auth sufficient pam_unix.so likeauth nullok
在 ‘password‘ 块添加下面一行,禁止用户重新使用其过去最后用过的 5个密码。
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
服务器只记录最后的 5 个密码。如果你试图使用曾用的最后 5个老密码中的任意一个,你将看到如下的错误提示。
Password has been already used. Choose another.
13. 如何检查用户密码过期?
在 Linux 中,用户的密码以加密的形式保存在 ‘/etc/shadow‘ 文件中。要检查用户的密码是否过期,你需要使用 ‘chage‘ 命令。它将显示密码的最后修改日期及密码期限的细节信息。这些细节就是系统决定用户是否必须修改其密码的依据。
要查看任一存在用户的老化信息,如 过期日 和 时长,使用如下命令。
#chage -l username
要修改任一用户的密码老化,使用如下命令。
#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
参数
-M 设置天数最大数字
-m 设定天数最小数字
-W 设定想要的天数
14. 手动锁定或解锁用户账号
锁定和解锁功能是非常有用的,你可以锁定一个账号一周或一个月,而不是将这个账号从系统中剔除。可以用下面这个命令锁定一个特定用户。
# passwd -l accountName
提示:这个被锁定的用户仅对root用户仍然可见。这个锁定是通过将加密过的密码替换成(!)来实现的。如果有个想用这个账号来进入系统,他会得到类似下面这个错误的提示。
# su - accountName
This account is currently not available.
解锁一个被锁定的账号时,用下面这个命令。这命令会将被替换成(!)的密码改回来。
# passwd -u accountName
15. 增强密码
有相当数量的用户使用很弱智的密码,他们的密码都可以通过字典攻击或者暴力攻击攻破。‘pam_cracklib‘模块存于在PAM 中,它可以强制用户设置复杂的密码。通过编辑器打开下面的文件。
# vi /etc/pam.d/system-auth
在文件中增加一行,使用认证参数(lcredit, ucredit, dcredit 或者 ocredit 对应小写字母、大写字母,数字和其他字符)
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
16. 启用Iptable(防火墙)
高度推荐启用linux防火墙来禁止非法程序访问。使用iptable的规则来过滤入站、出站和转发的包。我们可以针对来源和目的地址进行特定udp/tcp端口的准许和拒绝访问。
Basic IPTables Guide and Tips
17. 禁止Ctrl+Alt+Delete重启
在大多数的linux发行版中,按下‘CTRL-ALT-DELETE’将会让你的系统重启。只说生产服务器上这是不是一个很好的做法,这可能导致误操作。
这个配置是在‘ /etc/inittab‘文件,如果你打开这个文件,你可以看到下面类似的段落。默认的行已经被注释掉了。我们必须注释掉他。这个特定按键会让系统重启。
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. 检查空密码帐号
任何空密码的账户意味这可以让Web上任何无授权的用户访问,这是linux服务器的一个安全威胁。所以,确定所有的用户拥有一个复杂的密码并且不存在特权用户。空密码帐号是安全风险,可以被轻易的攻克。可以利用下面的命令来检查是否有空密码账户存在。
# cat /etc/shadow | awk -F: '($2==""){print $1}'
19. 登录前显示SSH提示
在ssh认证时候,使用一个法律和安全警示是很好的建议。关于SSH警示可以看下面的文章。
Display SSH Warning Message to Users
20. 监视用户行为
如果你有很多的用户,去收集每一个用户的行为和和他们的进程消耗的信息非常重要。可以随后和一些性能优化和安全问题处理时进行用户分析。但是如果监视和搜集用户行为信息呢 ?
有两个很有用的工具‘psacct‘ 和 ‘acct‘可以用来监视系统中用户的行为和进程。这些工具在系统后台执行并且不断记录系统中每一个用户的行为和各个服务比如Apache, MySQL, SSH, FTP, 等的资源消耗。对这些工具更多的安装配置和使用信息,请访问下面的网址:
Monitor User Activity with psacct or acct Commands
21. 定期查看日志
将日志移动到专用的日志服务器里,这可避免入侵者轻易的改动本地日志。下面是常见linux的默认日志文件及其用处:
/var/log/message – 记录系统日志或当前活动日志。
/var/log/auth.log – 身份认证日志。
/var/log/kern.log – 内核日志。
/var/log/cron.log – Crond 日志 (cron 任务).
/var/log/maillog – 邮件服务器日志。
/var/log/boot.log – 系统启动日志。
/var/log/mysqld.log – MySQL数据库服务器日志。
/var/log/secure – 认证日志。
/var/log/utmp or /var/log/wtmp :登录日志。
/var/log/yum.log: Yum 日志。
22. 重要文件备份
在生产环境里,为了灾难恢复,有必要将重要文件备份并保存在安全的远程磁带保险库、远程站点或异地硬盘。
23. NIC 绑定
有两种类型的NIC绑定模式,需要在绑定接口用得到。
mode=0 – 循环赛模式
mode=1 – 激活和备份模式
NIC绑定可以帮助我们避免单点失败。在NIC绑定中,我们把两个或者更多的网卡绑定到一起,提供一个虚拟的接口,这个接口设置ip地址,并且和其他服务器会话。这样在一个NIC卡down掉或者由于其他原因不能使用的时候,我们的网络将能保持可用。
相关阅读 : Create NIC Channel Bonding in Linux
24. 保持 /boot 只读
linux内核和他的相关的文件都保存在/boot目下,默认情况下是可以读写的。把它设为了只读可以减少一些由于非法修改重要boot文件而导致的风险。
# vi /etc/fstab
在文件最后增加下面的行,并且保存
LABEL=/boot /boot ext2 defaults,ro 1 2
如果你今后需要升级内核的话,你需要修回到读写模式。
25.不鸟ICMP和Broadcast请求
在/etc/sysctl.conf中添加下面几行,屏蔽掉ping和broadcast请求。
Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1
Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1
运行下面这一行加载修改或更新
#sysctl -p
如果你觉得了上述安全小贴士很好用,或还有什么其它需要补充进去,请在下面的评论框里写写,不断追求进步的TecMint一如既往地愿意听到您的评论、建议以及讨论。
来自:http://www.admin10000.com/document/2273.html
对于系统管理员,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。这是我们关于“如何让Linux系统更安全” 或者 “加固Linux系统“之类话题的第一篇文章。本文将介绍 25个有用的技巧和窍门 ,帮助你让Linux系统更加安全。希望下面的这些技巧和窍门可以帮助你加强你的系统的安全。
1. 物理系统的安全性
配置BIOS,禁用从CD/DVD、外部设备、软驱启动。下一步,启用BIOS密码,同时启用GRUB的密码保护,这样可以限制对系统的物理访问。
通过设置GRUB密码来保护Linux服务器
2. 磁盘分区
使用不同的分区很重要,对于可能得灾难,这可以保证更高的数据安全性。通过划分不同的分区,数据可以进行分组并隔离开来。当意外发生时,只有出问题的分区的数据才会被破坏,其他分区的数据可以保留下来。你最好有以下的分区,并且第三方程序最好安装在单独的文件系统/opt下。
/
/boot
/usr
/var
/home
/tmp
/opt
3. 最小包安装,最少漏洞
你真的需要安装所有的服务么?建议不要安装无用的包,避免由这些包带来的漏洞。这将最小化风险,因为一个服务的漏洞可能会危害到其他的服务。找到并去除或者停止不用的服务,把系统漏洞减少到最小。使用‘chkconfig‘命令列出运行级别3的运行所有服务。
# /sbin/chkconfig --list |grep '3:on'
当你发现一个不需要的服务在运行时,使用下面的命令停止这个服务。
# chkconfig serviceName off
使用RPM包管理器,例如YUM或者apt-get 工具来列出所有安装的包,并且利用下的命令来卸载他们。
# yum -y remove package-name
# sudo apt-get remove package-name
5 chkconfig Command Examples
20 Practical Examples of RPM Commands
20 Linux YUM Commands for Linux Package Management
25 APT-GET and APT-CACHE Commands to Manage Package Management
4. 检查网络监听端口
在网络命令 ‘netstat‘ 的帮助下,你将能够看到所有开启的端口,以及相关的程序。使用我上面提到的 ‘chkconfig‘ 命令关闭系统中不想要的网络服务。
# netstat -tulpn
Linux 网络管理中的 20 条 Netstat 命令
5. 使用 SSH(Secure Shell)
Telnet 和 rlogin 协议只能用于纯文本,不能使用加密的格式,这或将导致安全漏洞的产生。SSH 是一种在客户端与服务器端通讯时使用加密技术的安全协议。
除非必要,永远都不要直接登录 root 账户。使用 “sudo” 执行命令。sudo 由 /etc/sudoers 文件制定,同时也可以使用 “visudo” 工具编辑,它将通过 VI 编辑器打开配置文件。
同时,建议将默认的 SSH 22 端口号改为其他更高的端口号。打开主要的 SSH 配置文件并做如下修改,以限制用户访问。
# vi /etc/ssh/sshd_config
关闭 root 用户登录
PermitRootLogin no
特定用户通过
AllowUsers username
使用第二版 SSH 协议
Protocol 2
SSH 服务器安全维护五条最佳实践
6. 保证系统是最新的
得一直保证系统包含了最新版本的补丁、安全修复和可用内核。
# yum updates
# yum check-update
7. 锁定 Cron任务
Cron有它自己内建的特性,这特性允许定义哪些人能哪些人不能跑任务。这是通过两个文件/etc/cron.allow 和 /etc/cron.deny 控制的。要锁定在用Cron的用户时可以简单的将其名字写到corn.deny里,而要允许用户跑cron时将其名字加到cron.allow即可。如果你要禁止所有用户使用corn,那么可以将“ALL”作为一行加到cron.deny里。
# echo ALL >>/etc/cron.deny
11 个linux Cron调度实例
8. 禁止USB探测
很多情况下我们想去限制用户使用USB,来保障系统安全和数据的泄露。建立一个文件‘/etc/modprobe.d/no-usb‘并且利用下面的命令来禁止探测USB存储。
install usb-storage /bin/true
9.打开SELinux
SELinux(安全增强linux)是linux内核提供的一个强制的访问控制安全机制。禁用SELinux意味着系统丢掉了安全机制。要去除SELinux之前仔细考虑下,如果你的系统需要发布到网络,并且要在公网访问,你就要更加注意一下。
SELinux 提供了三个基本的操作模式,他们是:
强制执行:这是默认是模式,用来启用和强制执行SELinux安全措略。
许可模式:这种模式下SELinux不会强制执行安全措略,只有警告和日志记录。这种模式在SELinux相关问题的故障排除时候非常有用。
关闭模式:SELinux被关闭。
你可以使用命令行‘system-config-selinux‘, ‘getenforce‘ or ‘sestatus‘来浏览当前的SEliux的状态。
# sestatus
如果是关闭模式,通过下面的命令开启SELinux
# setenforce enforcing
你也可以通过配置文件‘/etc/selinux/config‘来进行SELinux的开关操作。
10. 移除KDE或GNOME桌面
没必要在专用的LAMP服务器上运行X Window桌面比如KDE和GNOME。可以移掉或关闭它们,以提高系统安全性和性能。打开/etc/inittab然后将run level改成3就可以关闭这些桌面。如果你将它彻底的从系统中移走,可以用下面这个命令:
# yum groupremove "X Window System"
11. 关闭IPv6
如果不用IPv6协议,那就应该关闭掉它,因为大部分的应用和策略都不会用到IPv6,而且当前它不是服务器必需的。可以在网络配置文件中加入如下几行来关掉它。
# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no
12. 限制用户使用旧密码
如果你不希望用户继续使用老密码,这一条很有用。老的密码文件位于 /etc/security/opasswd。你可以使用 PAM 模块实现。
RHEL / CentOS / Fedora 中打开 ‘/etc/pam.d/system-auth‘ 文件。
# vi /etc/pam.d/system-auth
Ubuntu/Debian/Linux Mint 中打开 ‘/etc/pam.d/common-password‘ 文件。
# vi /etc/pam.d/common-password
在 ‘auth‘ 块中添加下面一行。
auth sufficient pam_unix.so likeauth nullok
在 ‘password‘ 块添加下面一行,禁止用户重新使用其过去最后用过的 5个密码。
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
服务器只记录最后的 5 个密码。如果你试图使用曾用的最后 5个老密码中的任意一个,你将看到如下的错误提示。
Password has been already used. Choose another.
13. 如何检查用户密码过期?
在 Linux 中,用户的密码以加密的形式保存在 ‘/etc/shadow‘ 文件中。要检查用户的密码是否过期,你需要使用 ‘chage‘ 命令。它将显示密码的最后修改日期及密码期限的细节信息。这些细节就是系统决定用户是否必须修改其密码的依据。
要查看任一存在用户的老化信息,如 过期日 和 时长,使用如下命令。
#chage -l username
要修改任一用户的密码老化,使用如下命令。
#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
参数
-M 设置天数最大数字
-m 设定天数最小数字
-W 设定想要的天数
14. 手动锁定或解锁用户账号
锁定和解锁功能是非常有用的,你可以锁定一个账号一周或一个月,而不是将这个账号从系统中剔除。可以用下面这个命令锁定一个特定用户。
# passwd -l accountName
提示:这个被锁定的用户仅对root用户仍然可见。这个锁定是通过将加密过的密码替换成(!)来实现的。如果有个想用这个账号来进入系统,他会得到类似下面这个错误的提示。
# su - accountName
This account is currently not available.
解锁一个被锁定的账号时,用下面这个命令。这命令会将被替换成(!)的密码改回来。
# passwd -u accountName
15. 增强密码
有相当数量的用户使用很弱智的密码,他们的密码都可以通过字典攻击或者暴力攻击攻破。‘pam_cracklib‘模块存于在PAM 中,它可以强制用户设置复杂的密码。通过编辑器打开下面的文件。
# vi /etc/pam.d/system-auth
在文件中增加一行,使用认证参数(lcredit, ucredit, dcredit 或者 ocredit 对应小写字母、大写字母,数字和其他字符)
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
16. 启用Iptable(防火墙)
高度推荐启用linux防火墙来禁止非法程序访问。使用iptable的规则来过滤入站、出站和转发的包。我们可以针对来源和目的地址进行特定udp/tcp端口的准许和拒绝访问。
Basic IPTables Guide and Tips
17. 禁止Ctrl+Alt+Delete重启
在大多数的linux发行版中,按下‘CTRL-ALT-DELETE’将会让你的系统重启。只说生产服务器上这是不是一个很好的做法,这可能导致误操作。
这个配置是在‘ /etc/inittab‘文件,如果你打开这个文件,你可以看到下面类似的段落。默认的行已经被注释掉了。我们必须注释掉他。这个特定按键会让系统重启。
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. 检查空密码帐号
任何空密码的账户意味这可以让Web上任何无授权的用户访问,这是linux服务器的一个安全威胁。所以,确定所有的用户拥有一个复杂的密码并且不存在特权用户。空密码帐号是安全风险,可以被轻易的攻克。可以利用下面的命令来检查是否有空密码账户存在。
# cat /etc/shadow | awk -F: '($2==""){print $1}'
19. 登录前显示SSH提示
在ssh认证时候,使用一个法律和安全警示是很好的建议。关于SSH警示可以看下面的文章。
Display SSH Warning Message to Users
20. 监视用户行为
如果你有很多的用户,去收集每一个用户的行为和和他们的进程消耗的信息非常重要。可以随后和一些性能优化和安全问题处理时进行用户分析。但是如果监视和搜集用户行为信息呢 ?
有两个很有用的工具‘psacct‘ 和 ‘acct‘可以用来监视系统中用户的行为和进程。这些工具在系统后台执行并且不断记录系统中每一个用户的行为和各个服务比如Apache, MySQL, SSH, FTP, 等的资源消耗。对这些工具更多的安装配置和使用信息,请访问下面的网址:
Monitor User Activity with psacct or acct Commands
21. 定期查看日志
将日志移动到专用的日志服务器里,这可避免入侵者轻易的改动本地日志。下面是常见linux的默认日志文件及其用处:
/var/log/message – 记录系统日志或当前活动日志。
/var/log/auth.log – 身份认证日志。
/var/log/kern.log – 内核日志。
/var/log/cron.log – Crond 日志 (cron 任务).
/var/log/maillog – 邮件服务器日志。
/var/log/boot.log – 系统启动日志。
/var/log/mysqld.log – MySQL数据库服务器日志。
/var/log/secure – 认证日志。
/var/log/utmp or /var/log/wtmp :登录日志。
/var/log/yum.log: Yum 日志。
22. 重要文件备份
在生产环境里,为了灾难恢复,有必要将重要文件备份并保存在安全的远程磁带保险库、远程站点或异地硬盘。
23. NIC 绑定
有两种类型的NIC绑定模式,需要在绑定接口用得到。
mode=0 – 循环赛模式
mode=1 – 激活和备份模式
NIC绑定可以帮助我们避免单点失败。在NIC绑定中,我们把两个或者更多的网卡绑定到一起,提供一个虚拟的接口,这个接口设置ip地址,并且和其他服务器会话。这样在一个NIC卡down掉或者由于其他原因不能使用的时候,我们的网络将能保持可用。
相关阅读 : Create NIC Channel Bonding in Linux
24. 保持 /boot 只读
linux内核和他的相关的文件都保存在/boot目下,默认情况下是可以读写的。把它设为了只读可以减少一些由于非法修改重要boot文件而导致的风险。
# vi /etc/fstab
在文件最后增加下面的行,并且保存
LABEL=/boot /boot ext2 defaults,ro 1 2
如果你今后需要升级内核的话,你需要修回到读写模式。
25.不鸟ICMP和Broadcast请求
在/etc/sysctl.conf中添加下面几行,屏蔽掉ping和broadcast请求。
Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1
Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1
运行下面这一行加载修改或更新
#sysctl -p
如果你觉得了上述安全小贴士很好用,或还有什么其它需要补充进去,请在下面的评论框里写写,不断追求进步的TecMint一如既往地愿意听到您的评论、建议以及讨论。
来自:http://www.admin10000.com/document/2273.html
[常规延时]Windows下的cmd和linux下的shell实现简单延时的方法,Linux平台延时之sleep、usleep、nanosleep、select比较。
Unix/LinuxC技术 jackxiang 2013-6-26 16:14
背景:
在Linux上或windows上有时接口调用时需要有一个延时(模拟和真实访问一样),于是在windows下和linux下都需要要这样的延时函数。
Windows下延时两秒示例:
Linux下延时两秒示例:
usleep - sleep some number of microseconds 它微妙:
Linux平台延时之sleep、usleep、nanosleep、select比较:
sleep的精度是秒
usleep的精度是微妙,不精确
select的精度是微妙,精确
struct timeval delay;
delay.tv_sec = 0;
delay.tv_usec = 20 * 1000; // 20 ms
select(0, NULL, NULL, NULL, &delay);
nanosleep的精度是纳秒,不精确
unix、linux系统尽量不要使用usleep和sleep而应该使用nanosleep,使用nanosleep应注意判断返回值和错误代码,否则容易造成cpu占用率100%。
上面提到usleep和nanosleep不精确的实验,参见这里:http://www.lslnet.com/linux/dosc1/18/linux-188816.htm
摘自:http://www.cppblog.com/kongque/archive/2011/01/18/138765.aspx
在Linux上或windows上有时接口调用时需要有一个延时(模拟和真实访问一样),于是在windows下和linux下都需要要这样的延时函数。
Windows下延时两秒示例:
Linux下延时两秒示例:
usleep - sleep some number of microseconds 它微妙:
Linux平台延时之sleep、usleep、nanosleep、select比较:
sleep的精度是秒
usleep的精度是微妙,不精确
select的精度是微妙,精确
struct timeval delay;
delay.tv_sec = 0;
delay.tv_usec = 20 * 1000; // 20 ms
select(0, NULL, NULL, NULL, &delay);
nanosleep的精度是纳秒,不精确
unix、linux系统尽量不要使用usleep和sleep而应该使用nanosleep,使用nanosleep应注意判断返回值和错误代码,否则容易造成cpu占用率100%。
上面提到usleep和nanosleep不精确的实验,参见这里:http://www.lslnet.com/linux/dosc1/18/linux-188816.htm
摘自:http://www.cppblog.com/kongque/archive/2011/01/18/138765.aspx
[值得实践]centos修改用户进城数和句柄数,修改linux的最大文件句柄数限制 (Too many open files)。
Unix/LinuxC技术 jackxiang 2013-6-24 21:33
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
其中第一列是打开的句柄数,第二列是进程ID。可以根据ID号来查看进程名:
ps aef|grep 24204
是当前生效还是全局,http://www.linuxde.net/2013/03/13045.html
分析这段代码可以知道先读/etc/security/limits.conf,如果/etc/security/limits.d/目录下还有配置文件的话,也读进来,一起分析。这就意味/etc/security/limits.d/里面的文件里面的配置会覆盖/etc/security/limits.conf的配置。
一般在/etc/security/limits.conf 中修改最大打开文件数和进程数,如:
* soft noproc 102400
* hard noproc 102400
* soft nofile 102400
* hard nofile 102400
但是在centos 6.3下,方法不一样了
首先在/etc/security/limits.conf中修改最大文件数和进程数
* soft nofile 102400
* hard nofile 102400
然后在/etc/security/limits.d/90-nproc.conf中修改最大文件数和进程数
* soft nproc 102400
* hard nproc 102400
阅读全文
其中第一列是打开的句柄数,第二列是进程ID。可以根据ID号来查看进程名:
ps aef|grep 24204
是当前生效还是全局,http://www.linuxde.net/2013/03/13045.html
分析这段代码可以知道先读/etc/security/limits.conf,如果/etc/security/limits.d/目录下还有配置文件的话,也读进来,一起分析。这就意味/etc/security/limits.d/里面的文件里面的配置会覆盖/etc/security/limits.conf的配置。
一般在/etc/security/limits.conf 中修改最大打开文件数和进程数,如:
* soft noproc 102400
* hard noproc 102400
* soft nofile 102400
* hard nofile 102400
但是在centos 6.3下,方法不一样了
首先在/etc/security/limits.conf中修改最大文件数和进程数
* soft nofile 102400
* hard nofile 102400
然后在/etc/security/limits.d/90-nproc.conf中修改最大文件数和进程数
* soft nproc 102400
* hard nproc 102400
阅读全文
Linux下C++的man安装及使用方法
Unix/LinuxC技术 jackxiang 2013-6-24 21:28
nfs挂载存储图片的方法
Unix/LinuxC技术 jackxiang 2013-6-24 21:23
PHP处理control-M字符(^M)的方式
Php/Js/Shell/Go jackxiang 2013-6-24 14:31
背景:在接口有奇怪的符号,如下:
^M
^M
{"code":"0","msg":"参数无效"}
代码(把^M 和换行全替换成空: \r\n 在Unix下显示是:^M且换行了):
现在好了。没有换行也没有M了,也可:
vim编辑下,然后: :%s/\r\+$//e
如直接用PHP的trim替换后,还是有换行,只是^m没了。就是下文的直接替换:
阅读全文
^M
^M
{"code":"0","msg":"参数无效"}
代码(把^M 和换行全替换成空: \r\n 在Unix下显示是:^M且换行了):
现在好了。没有换行也没有M了,也可:
vim编辑下,然后: :%s/\r\+$//e
如直接用PHP的trim替换后,还是有换行,只是^m没了。就是下文的直接替换:
阅读全文
cp /opt/harbor/harbor.cfg{,.ori}
harbor.cfg ==> harbor.cfg.ori
方法一:yes|cp -r /x y
cp -rf 即使使用了f 每个文件仍然会询问。 yes|可以解决这个问题。
方法二:(加右斜杠)
Linux使用cp命令直接覆盖不提示的方法
普通的cp命令使用
例如:cp abc.txt /home
如果/home里面之前有abc.txt文件,会提示你是否要覆盖?这个时候你需要输入Y,假如文件很多的话,每复制一个文件都要输入一次Y.
下面介绍cp文件时直接覆盖不提示的方法
命令如下:
\cp abc.txt /home
直接复制abc.txt 到/home 里面,不管/home 里面之前是否有这个文件都会直接覆盖,不再出现覆盖提示!
原因:alias 成cp -r了
vi ~/.bashrc
alias cp='cp -i'
——————————————————————————————————————————————————————
新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是不能忍受的。
把a目录下的文件复制到b目录
cp –r a/* b
执行上面的命令时,b存在的每个文件都会提示是否覆盖;
cp –r –f a/* b
执行上面的命令时,b存在的每个文件都不再会提示;
这是我们希望的理想状态,但是有时加了-f了,怎么还会有提示呢?原来一些服务器会默认增加别名 alias cp='cp -i',当你执行cp时,其实执行的是cp –i。
在终端执行alias就可以看出来了。
[root@devdb ~]# alias
alias cp='cp -i'
可以这样解决
[root@devdb ~]# vi ~/.bashrc
在alias cp='cp -i'前加上"#"注释掉这行,:wq!保存推出,然后重新登陆就可以了。
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3637144&highlight=
http://soft.chinabyte.com/os/220/11760720.shtml