linux 总结 原创-胡志广

1.   ps  监视进程

ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0  10372   696 ?        Ss   Mar28   0:02 init [3]

root         2  0.0  0.0      0     0 ?        S<   Mar28   0:00 [migration/0]

root         3  0.0  0.0      0     0 ?        SN   Mar28   0:00 [ksoftirqd/0]

root         4  0.0  0.0      0     0 ?        S<   Mar28   0:00 [watchdog/0]

 

 

PID  进程 ID

MEM  内存使用率

VSZ  占用虚拟内存大小

RSS  内存中页的数量(页是管理内存的单位,在 PC 上通常为 4K 

TTY  进程所在终端的 ID 

2.   top

top  -p pid,pid,…

top   后,会显示 CPU 详细内容

 

3.   vi  到最后一行

shift+g

 

 

4.   通过端口查询 pid

netstat -anp | grep 8001

 

tcp        0      0 :::8001                     :::*                        LISTEN     1359/java

1359   PID

 

 

5.   Sar  进行性能监控

 

  1. 查看 CPU 使用情况  

  sar    2       5     //   每隔 2 秒,显示 5 次, CPU 使用的情况

                                                         

                                       

  1. 查看内存使用情况  

  sar    -      2       5     //   每隔 2 秒,显示 5 次,内存使用的情况

                                                         

                                       

  1. 查看网络吞吐量  

  sar    -   n DEV    2       5     //   每隔 2 秒,显示 5 次,网络吞吐量情况

 

保存为文本:

sar          10       >    data.txt 
  
//   每隔 1 秒,写入 10 次,把 CPU 使用数据保存到 data.txt 文件中。     sar               -   e    15     00     00       >    data.txt 
  
//   每隔 1 秒记录 CPU 的使用情况,直到 15 点,数据将保存到 data.txt 文件中。 (-e 参数表示结束时间,注意时间格式:必须为  hh:mm:ss 格式 )     sar                -   r   -   e    15     00     00       >    data.txt 
  
//   每隔 1 秒记录内存使用情况,直到 15 点,数据将保存到 data.txt 文件中。     sar               -   n DEV    -   e    15     00     00       >    data.txt 
  
//   每隔 1 秒记录网络使用情况,直到 15 点,数据将保存到 data.txt 文件中。

 

6.   强制 kill

看到 vim 占用 cpu  99 ,然后用 ps 查询 vim

Ps aux|grep vim

然后根据 pid  杀死进程

Kill -9 pid

是强制杀死进程

 

7.   统计端口来路总数

netstat -an | grep 8081 | wc –l

 

 

8.   开启网络中断

开启网络中断可通过服务查看irqbalance服务查看状态,如果网络中断分布不均,则可以通过开启或关闭服务进行切换

service irqbalance stop

 

 

9.   解压 bz2

$bzip2 –d test.tar.bz2

$tar xvf test.tar

解压到执行目录加命令:

-C test_dir

10.           Rpm 无法应用解决方法

当应用无关联删除 rpm -e --allmatches –nodeps popt 后, rpm 无法应用,所以切记不要随便卸载不清楚地 rpm

当卸载 popt 后,无法应用 rpm 了,执行 rpm 会报

Libpopt.so.0 不存在,所以我们这时候无法在用 rpm 安装 popt 包,那么就下载源码包安装

源码包地址:

http://www.linuxfromscratch.org/blfs/view/6.3/general/popt.html

下载后,我们解压 popt1.10.4 

执行:

sed -i -e "/*origOptString ==/c 0)" popt.c &&
./configure --prefix=/usr &&
make

然后检查

make check

然后安装:

make install

安装在执行 rpm 即又可用了,所以一定要小心啊

 

 

11.           Vim  统计某个字符出现的次数

%s/the/&/gn 

上面的代码是 the 出现的次数

 

匹配行数:

%s/^//n

 

12.           解压 tar.bz2

#bzip2 –d xxx.tar.bz2

#tar xvf xxx.tar

 

 

13.           编译内核重启后,错误解决方法( linux 2.6.35 内核)

mount: could not find filesystem ‘/dev/root’ 
setuproot: moving /dev failed: No such file or directory 
setuproot: error mounting /proc: No such file or directory 
setuproot: error mounting /sys: No such file or directory 
switchroot: mount failed: No such file or directory 
Kernel panic – not syncing: Attempted to kill init!

 

修改

.config

CONFIG_SYSFS_DEPRECATED_V2=y

CONFIG_SYSFS_DEPRECATED=y

 

或者在

Make menuconfig 

General setup--> [*] enable deprecated sysfs features to support old userspace tools

 

 

14.           Linux date  获取时间戳(秒)

date +%s

 

 

15.           Vi  替换命令

:%s/aaa/ bbb/g  全部替换

:s/aaa/bbb/  替换当前行

 n  $s/vivian/sky/  替换第  n  行开始到最后一行中每一行的第一个  vivian    sky 

 

按指定行替换

 startline  endline s/vivian/sky/  替换第  n  行开始到最后一行中每一行的第一个  vivian    sky 

 :

 1,3  s/vivian/sky/  替换第  n  行开始到最后一行中每一行的第一个  vivian    sky 

 

 

 

aaa 是被替换内容

bbb  是替换内容

 

 

16.           vim  代码自动补全

ctrl+p

光标可以上下移动

 

17.           Vi 添加行号

:set nu

 

18.           Vi  设置缩进

set softtabstop=2

 

19.           vi  批量注释

批量注释:

Ctrl + v  进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 //  或  # ,输入完毕之后, Vim 会自动将你选中的所有行首都加上注释

取消注释:

Ctrl + v  进入块选择模式,选中你要删除的行首的注释符号,注意 //  要选中两个,选好之后按 d 即可删除注释

 

20.           Vi  剪切和复制

用 v 选中文本之后可以按 y 进行复制,如果按 d 就表示剪切,之后按 p 进行粘贴。

 

21.           更改系统语言为英文

export LANG="en_US"

 

22.           删除乱码文件或文件夹

首先, ls –li 查看索引节点

[root@BP-28-xxxx tools]# ls -li

× Ü ¼ Æ 119644

85458947 drwxr-xr-x  8 1000 1000     4096 06-18 19:22 jdws-1.0

85458946 -rw-r--r--  1 root root   612267 06-18 19:21 jdws-1.0.tar.gz

85491713 drwxrwxr-x 24 root root     4096 06-26 21:38 linux-2.6.35.13

85459795 -rw-r--r--  1 root root 69335593 06-20 11:41 linux-2.6.35.13.tar.bz2

85459319 drwxr-xr-x  7 1169 1169     4096 06-18 19:25 pcre-8.10

85459318 -rw-r--r--  1 root root  1285776 06-18 19:24 pcre-8.10.tar.gz.gz

85459796 -rwxr--r--  1 root root      426 06-26 01:01 realserver

85983233 drwxr-xr-x  2 root root     4096 07-09 17:26 search_front_server

85459798 -rw-r--r--  1 root root 51113771 07-09 17:42 search_front_server.zip

85954225 drwxr-xr-x  2 root root     4096 07-09 17:26 -?-¸WEB+À¥¦¦?¢¿

 

然后找到 85954225

执行命令:

find ./ -inum 85954225 -print -exec rm {} -rf \;

之后就可以删除乱码文件或者文件夹了

 

 

23.           Rpm  强制安装

后面加上   --nodeps –force 即可

例:

rpm -ivh libpng-devel-1.2.10-7.1.el5_3.2.x86_64.rpm --nodeps –force

 

 

24.           linux php 安装

首先安装:

rpm -ivh libjpeg-6b-37.x86_64.rpm

rpm -ivh libjpeg-devel-6b-37.x86_64.rpm

rpm -ivh libjpeg-6b-37.i386.rpm

rpm -ivh libjpeg-devel-6b-37.i386.rpm

 

rpm -ivh libpng-1.2.10-7.1.el5_3.2.i386.rpm

rpm -ivh libpng-1.2.10-7.1.el5_3.2.x86_64.rpm

rpm -ivh libpng-devel-1.2.10-7.1.el5_3.2.i386.rpm

rpm -ivh libpng-devel-1.2.10-7.1.el5_3.2.x86_64.rpm

如果不能正常安装则进行强制安装

--nodeps –force

 

然后安装:

tar zxf libmcrypt-2.5.8.tar.gz && cd libmcrypt-2.5.8/ && ./configure && make && make install && /sbin/ldconfig && cd libltdl/ && ./configure --enable-ltdl-install && make && make install && cd ../../

 

tar zxf mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8/ && /sbin/ldconfig

ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config

./configure && make && make install && cd ../

 

然后安装或解压 mysql

 

然后:

tar jxvf php-5.3.5.tar.bz2

cd php-5.3.5

./configure '--prefix=/export/servers/php' '--with-mysql=../mysql-5.1.54-linux-x86_64-glibc23/' '--with-config-file-path=/export/servers/php/etc' '--disable-debug' '--enable-ftp' '--enable-inline-optimization' '--enable-magic-quotes' '--enable-mbstring' '--enable-soap' '--enable-safe-mode' '--enable-wddx=shared' '--enable-xml' '--with-gd' '--with-gettext' '--with-regex=system' '--with-zlib-dir=/usr/lib' '--enable-fpm' '--with-jpeg-dir' '--enable-fpm' '--with-fpm-user=www''--with-fpm-group=www'  '--enable-shmop' '--with-mcrypt' '--with-mysqli=mysqlnd'

 make

sleep 5

 make  install

 

//make ZEND_EXTRA_LIBS='-liconv' && make install

cd ..

cp -r -v php-fpm.conf /export/servers/php/etc/

 

增加扩展:

tar jxvf eaccelerator-0.9.6.1.tar.bz2

cd eaccelerator-0.9.6.1

/export/servers/php/bin/phpize

 

./configure     --enable-eaccelerator=shared     --with-php-config=/export/servers/php/bin/php-config      --with-eaccelerator-shared-memory     --with-eaccelerator-sessions     --with-eaccelerator-content-caching

make -j 9&&make -j 9 install

 

 

25.           php   fpm  配置端口

 /etc/php-fpm.conf 中更改

Listen 

Listen 127.0.0.1:9001

端口可自定

默认是: listen = '/dev/shm/php-fcgi.sock'

 

26.           Php  动态添加模块

首先,进入到 php 的安装目录下的 ext 目录,找到指定的模块进入目录,如 curl  目录,进入

Cd  /export/tools/php/php-5.3.5/ext/curl

进入后,执行 php  phpize 命令,如 php 目录是 /export/servers/php

那么执行:

/export/servers/php/bin/phpize

执行后在该目录下会生成 configure 文件

然后执行 configure 

./configure  --with-curl --with-curlwrappers  --with-php-config=/export/servers/php /bin/php-config

 

然后执行 make && makeinstall

执行后,我们去 /export/servers/php/lib/php/extensions/no-debug-non-zts-20090626 目录下查看是否有 curl.so

然后再 ll /export/servers/php/etc/php.ini 中加入:

extension=curl.so

然后用

/export/servers/php/bin/php –m

查看是否有 curl ,如果有就成功了

 

 

27.           Php  iconv 错误解决方法

 make php 时报了如下错误:

/export/huzhiguang/bak_tools/nginx+php/php-5.3.5/ext/iconv/iconv.c:337: undefined reference to `libiconv'

 

配置 ./configure 

--with-iconv=/usr/local

这样配置上其路径即可

 

28.           Php  增加 apache 支持

'--with-apxs2=/export/servers/apache2/bin/apxs'

 

 

29.           You've configured multiple SAPIs to be build 解决方法

   因为在安装 php 时加入了 apache  支持和 nginx 支持,冲突了,所以,先进行 apache 安装

'--with-apxs2=/export/servers/apache2/bin/apxs'

 

然后再进行

'--enable-fpm' '--enable-fastcgi' '--with-fpm-user=www'   '--with-fpm-group=www'

 Nginx 的安装

 

30.           Vi  撤销和恢复

u 是撤销你刚才做的动作

ctrl+r  是恢复你刚才撤销的动作

 

 

 

31.           Xhprof 使用问题总结

当报如下问题的时候:

Warning : fopen(/export/servers/xhprof_logs/4fffc57f6fa9e.xhprof_foo) [ function.fopen ]: failed to open stream: Permission denied in /export/data/www/search.360buy.com/xhprof_lib/utils/xhprof_runs.php   on line   135

 

这是由于 /export/servers/xhprof_logs/ 目录的权限不足,需要把其他使用人的写权限打开,所以这里可以赋予权限:

Chmod 777  /export/servers/xhprof_logs/

记住最后一项一定要是 7

/export/servers/xhprof_logs/ 这个目录是我们保存 xhprof 日志的目录,是配置在 php.ini  中的

xhprof.output_dir=/export/servers/xhprof_logs

这个路径

 

 

当我们要查看 xhprof ui 的时候,一定要把 xhprof_html  xhprof_lib 文件夹 copy 到我们的 web  服务的目录下

 

还有就是这 2 个目录一定要指定好目录:

include_once $XHPROF_ROOT . "/search.360buy.com/xhprof_lib/utils/xhprof_lib.php";

include_once $XHPROF_ROOT . "/search.360buy.com/xhprof_lib/utils/xhprof_runs.php";

 

否则会报如下错误:

Warning : include_once(/export/data/www1/search.360buy.com/xhprof_lib/utils/xhprof_lib.php) [ function.include-once ]: failed to open stream: No such file or directory in /export/data/www/search.360buy.com/sample.php   on line   30 
Warning
 : include_once() [ 
function.include ]: Failed opening '/export/data/www1/search.360buy.com/xhprof_lib/utils/xhprof_lib.php' for inclusion (include_path='/export/servers/php/include/ice/') in   /export/data/www/search.360buy.com/sample.php   on line  30 
Warning
 : include_once(/export/data/www1/search.360buy.com/xhprof_lib/utils/xhprof_runs.php) [ 
function.include-once ]: failed to open stream: No such file or directory in   /export/data/www/search.360buy.com/sample.php   on line   31 
Warning
 : include_once() [ 
function.include ]: Failed opening '/export/data/www1/search.360buy.com/xhprof_lib/utils/xhprof_runs.php' for inclusion (include_path='/export/servers/php/include/ice/') in   /export/data/www/search.360buy.com/sample.php   on line   31

 

上面有提示错误的路径,如

export/data/www1/search.360buy.com/xhprof_lib/utils/xhprof_lib.php

这里我们查看是否我们需要的 php 在这个路径下,如果不在,我们则改为指定路径即可, /export/data/www/  这个而是我们的 web  应用的路径,程序会自动跟踪到,也就是我们指定的 web 服务路径

 

当我们执行需要测试的 php 时,成功后会生成指定的路径

http:// /index.php?run=4fffc79e37141&source=xhprof_foo ---------------

后面连接的是生成好的我们监控信息

这里的 index.php  xhprof_html 目录下的,所以 xhprof_html 这个目录我们需要提前 copy 到应用下,可以进行查看分析列表

 

 

Incl. CPU(microsecs)   是进入函数后其所有子函数的 cpu 时间和本函数消耗时间的总和

 

ICpu%  Incl. CPU(microsecs)/ Total Incl. CPU (microsecs) ,包含所有子函数的 CPU 消耗时间 /  cpu 消耗时间

 

Excl. CPU(microsec) ,本函数消耗的 cpu 时间

ECPU%   Excl. CPU(microsec) / Total Incl. CPU (microsecs)  的比率

 

 

32.           Vi  查找不区分大小写

vim 在默认的情况下,用 /  ? 来查找字符串时,是区分大小写的,有时候很不方便。 我们可以用 :set ic 
这样 vim 就不区分大小写了。 如果我们像区分大小写 :set noic

 

33.           配置静态 IP

Vi /etc/sysconfig/network-scripts/ifcfg-eth0

然后将 BOOTPROTO="static"  设置为 static

配置 IP 、网关、 DNS 、子网掩码等

…..

IPADDR="192.168.12.63"

NETMASK="255.255.255.0"

GATEWAY="192.168.12.1"

DNS1="202.106.0.20"

…….

 

Onboot=yes

是引导默认的网卡

34.           Wget  测试 gzip

Wget --header="accept-encoding:gzip"  地址

 

35.           Tar  打包 + 压缩

tar -zcvf /home/www/images.tar.gz /home/www/images

 

 

36.            挂载内存文件系统

内存文件系统一般分析 ramdisk  ramfs  tmpfs

Ramdisk 是通过固定分配内存的一块空间,进行格式化,然后挂载,这种方式不再我们考虑的范围之内因为不灵活。

 

剩下 2 种则是 ramfs  tmpfs

Ramfs 是用物理内存动态分配的文件系统,物理内存空间够用的情况下可进行动态分配。

Tmpfs 是物理内存和 swap 内存搅浑系统共用,当物理内存不够用时用 swap ,而且tmpfs 可进行设定分区上限大小,比较灵活。

在内存空间够用时 ramfs  tmpfs 的性能差不多, io 无压力,当内存空间用尽时,2 种内存文件系统均 io 比较高,但是 tmpfs  io 高后,会调用 swap 来分摊,而 ramfs则需要清空内存文件系统中的文件才可以。

 

挂载 tmpfs:

mount my_tmpfs $DIR_TMP -t tmpfs -o size=512m
例:
mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m

 

调整挂载内存系统的大小:

mount $DIR_TMP -o remount,size=1024m,nr_inodes=100k
 
nr_inodes为最大节点数,如果你的$DIR_TMP使用df命令查看明明有空间,却无法创建新文件(例如touch一个新文件),可能是文件节点用到上限了,可以用"df -i"命令来查看,如果是有空间但节点达到上限,就需要用nr_inodes来调整了
 
 

37.            查看文件夹大小

du -h --max-depth=1 /usr/

 

df 是查看系统大小

du 是查看文件夹大小

--max-depth  是深度,是文件夹的深度

后面是需要查看的文件夹

 

38.           Ldd  查看二进制动态链接库

Ldd ./program

就可以查看该二进制文件下的动态链接库

 

 

39.           递归查找文本内容

grep  内容   匹配  [–r]

-r  是递归查找

如:

grep “content” * -r

这就是查找该目录下所有文件中含有 content 内容的文件查找出来

 

 

40.           Umout   device is busy. 解决方法

df  查看硬盘容量信息

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             30720960   9464728  19695656  33% /

tmpfs                 16432956         0  16432956   0% /dev/shm

/dev/sda3            392050276  20914848 351220420   6% /export

 

然后 umount 掉一个挂载点

Umount /export

当执行 umount  时,报了

/export: device is busy. 错误

我们通过 fuser 命令把所有占用 /export 的进程等 kill 掉,执行如下命令:

fuser –km /export

 

然后我们再执行

Umout /export

卸载成功,然后我们重新挂载

mount /dev/sda3 /export –t ext4

然后再用 df 查看挂载情况

 

41.           Vi  格式化文本

先按 g(  g) 到最上面,然后按 = ,然后按 G (大写 G )到最下面文本就全部格式化了

 

 

42.           安装 redis

$ wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz

$ tar xzf redis-2.4.17.tar.gz

$ cd redis-2.4.17

$ make

 

启动 redis

cd src

./ redis-server ../redis.conf

后面的 ../redis.conf 是配置文件的路径

 

进入 redis  的客户端 :

$ src/redis-cli

redis> set foo bar

OK

redis> get foo

"bar"

 

43.           Lsof –i

Lsof –i

查看网络链接

可用于查看当连接多时造成的问题

44.           Ss

查看连接

可以查看当连接多时造成的问题

一般连接多,最后死掉了可能是由于未关闭连接造成的

 

ss -a -t|grep 192.168.12.63:27017|grep TIME|wc -l

wc –l  统计总数

-t   tcp

45.           Linux 中没有 sar iostat 等命令安装

可以 yum install  sysstat

或者找 sysstat 包安装

 

 

46.           This account is currently not available

当切换登录用户时,如:

Su – mysql

系统提示了 This account is currently not available 当前用户无效,是由于该用户为

Sbin/nologin

所以通过 vipw 命令

进入后修改 mysql 用户为  bin/bash 即可

mysql:x:503:503::/home/mysql:/bin/bash

 

 

47.           scp ssh 通信错误解决方法

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that the RSA host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

ca:3a:84:1b:64:1c:58:35:df:a9:00:2b:54:68:e4:23.

Please contact your system administrator.

Add correct host key in /root/.ssh/known_hosts to get rid of this message.

Offending key in /root/.ssh/known_hosts:1

RSA host key for 192.168.12.63 has changed and you have requested strict checking.

Host key verification failed.

lost connection

 

删除 /root/.ssh/ 下的 known_host 文件即可

 

 

48.           重新链接 gcc

安装新的 gcc 后,配置环境变量后,使用 gcc 还是旧的

那么我们首先

Cd /usr/bin

然后 ln –s –f /export/servers/gcc-4.6.1/bin/gcc

即可

这样就将 bin 下的 gcc 直接链接到 /export/servers/gcc-4.6.1/bin/gcc 

 

 

 

49.           安装 boost_1.50

tar -zxvf  boost_1_50_0.tar.gz cd boost_1_50_0/ 
./bootstrap.sh --prefix=/usr --libdir=/usr/lib64 
./b2 --prefix=/usr --libdir=/usr/lib64  --layout=system install 
export Boost_LIBRARYDIR=/usr/include/boost/

 
BOOST_INCLUDE=/usr/local/include/boost
BOOST_LIB=/usr/local/lib
export BOOST_INCLUDE BOOST_LIB

 

这里要注意,编译时需要用到你以后使用的 gcc 版本,版本不一致会出现问题

 

50.           Yum gcc

Yum install gcc*

需要是  gcc* 否则会安装不全

 

51.           配置 gcc 环境变量

export PATH=/export/servers/gcc4.7/bin:$PATH

这里的 gcc 环境变量需要配置在 $PATH 前,这样最新的 gcc 就有优先级了,配置后面不生效,因为之前的 gcc 会先被调用,并且最好不用用软链接( ln –s )来更改 gcc,这样容易出现问题

 

 

 

ls  >a; od -Ax -tcx1  a

 

 

52.           ssh  服务停止无法启动

/var/empty/sshd must be owned by root and not group or world-writable.

Linux 上的 SSH 无法启动

 

报告 /var/empty/sshd must be owned by root and not group or world-writable.

主要是权限造成的,解决方法如下:

(1)         方法 1 

 

修改为 root 属主,启动成功

 

-bash-2.05b# chown root /var/empty/sshd/

 

-bash-2.05b# /etc/init.d/sshd start

 

Starting sshd: [ OK ]

(2)         方法 2

chown -R root.root /var/empty/sshd

chmod 744 /var/empty/sshd

service sshd restart

 

方法 2 解决了问题

 

53.           shell 界面出现“ -bash-4.1$ ”这种形式的解决方法

 .bashrc  .bash_profile 文件 cp 到用户的 home 路径下

上面 2 个文件通过 ~/.bash_profile

然后就可以解决这个问题了

 

54.           Shell  统计执行后的数量

如:

Lsof –I |wc -l

这样就可以统计数量

 

55.           Cannot assign requested address 解决方法

服务端没有被压死,但是 http_load 报这个问题

那么修改 http_load 服务器的 /etc/sysctl.conf 文件

添加上:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

 

执行 sysctl –p 生效

 

# 开启 time_wait 状态的 socket 重用

net.ipv4.tcp_tw_reuse = 1

# 开启 time_wait 状态的 socket 快速回收

net.ipv4.tcp_tw_recycle = 1

 

首先查看服务端:

是否有大量的 TIME_WAIT

Netstat –anp

然后可通过 ss –a|wc –l 查看

服务端把:

net.ipv4.tcp_max_tw_buckets = 6000

千万要注意 .tcp_max_tw_buckets 这项,这个千万要在 net.ipv4.ip_local_port_range的范围内,这样当超过最大的 buckets 时,才可以对 TIME_WAIT 进行快速回收,不要设置太大,如果设置的太大超过了端口限制,那么一般就会报 Cannot assign requested address 问题,当 client 端出现大量的 TIME_WAIT 时,首先分析的就应该是 buckets是否设置过大,或者 ip_local_port_range 范围过小

调大 ( 修改 /etc/sysctl.conf) 

net.ipv4.tcp_max_tw_buckets 表示系统同时保持 TIME_WAIT 套接字的最大数量,如果超过这个数字

 

然后客户端,发送的最大端口数量限制,一般来说每台机器都有 65535 个端口,但是可用的也许在 60000 多;

修改( /etc/sysctl.conf 

net.ipv4.ip_local_port_range = 1024 65000  表示用于向外连接的端口范围。缺省情况下很小: 32768  61000 ,改为 1024  65000 

1024-65000 的范围这样可用的端口数量就变大很多,发送端可用的就多;

然后 sysctl –p ,让文件生效

 

sysctl -w net.ipv4.tcp_timestamps=1   开启对于 TCP 时间戳的支持 , 若该项设置为 0,则下面一项设置不起作用

sysctl -w net.ipv4.tcp_tw_recycle=1   表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收

 

参照:

http://zhumeng8337797.blog.163.com/blog/static/10076891420129155535790/

 

 

56.           configure   If you meant to cross compile, use `--host'. 错误解决方法

当运行 ./configure 时,报出了如下错误:

checking whether we are cross compiling... configure: error: in `/export/wanghong/ice/ThirdParty-Sources-3.4.1/db-4.8.30.NC/build_unix': 
configure: error: cannot run C compiled programs. 
If you meant to cross compile, use `--host'.

需要在 ./configure  配置 —host

 —host 是本系统的机型

 ./configure 最上面就有显示如:

checking build system type...  x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking if building in the top-level or dist directories... no

红色的则为机型

所以配置:

./configure –host= x86_64-unknown-linux-gnu

 

 

57.           Error, some other host already uses address 解决办法

配置完静态 ip 后,启动

Service network restart  命令,报了如下错误:

Error, some other host already uses address xxx.xxx.xxx.xxx

 

 2 种解决方法,一种是:

Ifconfig ech0 192.168.12.11 netmask 255.255.255.0 up

但是这个不能用 service network restart   否则将会被覆盖

 

另一种是:

进入   /etc/sysconfig/network-scripts/ifup-eth 文件中:

注释掉:

if ! arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${IPADDR} ; then

echo $”Error, some other host already uses address ${IPADDR}.”

exit 1

fi

 

然后再执行 service network restart  即可

 

 

 

参考:

http://chyd96.blog.163.com/blog/static/62706076201052743350211/

 

58.           查看 centos  版本

cat /etc/redhat-release

 

59.           查看文件大小

ls –lht

 

60.           回收内存

echo "3" > /proc/sys/vm/drop_caches

 

 

61.           putty  断开连接解决方式

 putty 超期时,报:

network error:software caused connection about 

设置 secoonds between keepalive (0 to turn off)   10

上图中,默认输入  0  是禁用保持连接,在这里我习惯的设置了  10 。两个复选框都保持默认选中。

参考:

http://blog.csdn.net/googchar/article/details/8190104

 

 

62.           踢掉其他在线用户

首先用 who 命令查看

bianhaoqiong@bianhaoqiong-virtual:~$ who 

bianhaoqiong pts/0        2011-11-30 18:53 (192.168.190.1) 

bianhaoqiong pts/2        2011-11-30 17:52 (192.168.190.1) 

然后发现 pts/2  不是你的用户,然后踢掉即可

然后执行 pkill -kill -t pts/2 

 

63.           Ssh  连接报 Read from socket failed: Connection reset by peer 问题解决方法

当连接 ssh  时,报了如下错误:

Read from socket failed: Connection reset by peer

起因;

$sudo chmod 777 /etc/  -R ( 千万不要做,这是一个误操作 )

导致了上面的结果

 

解决方法:

#chmod 400 /etc/ssh/*

 

在重新连接就可以了。

 

 

64.           linux  su 命令 su cannot set groups Operation not permitted 错误

linux 下命令 su 执行出现以下错误 su: cannot set groups: Operation not permitted

 huzg 切换到 root 用户后提示如上错误

首先看:

  ll /bin/su

-rwsr-xr-x 1 root root 28336 Jan 21  2009 /bin/su

然后先分配 root 用户组,然后执行

chmod a+s /bin/su

然后就可以切换了

 

 

65.        -bash: /dev/ null : Permission denied

当从 root 用户切换到普通用户的时候报了如下错误:

-bash: /dev/null: Permission denied

 /etc/bashrc  78 

"$i" >/dev/null 2>&1

这里是要有写权限的

[root@BP-28-2-206192 home]# ll /dev/null

crwxr-xr-x 1 root root 1, 3 Mar 14 22:34 /dev/null

看一下 /dev/null

在组这里只有执行和读的权限

所以我们重新给授权 chmod 666 /dev/null

也就是所有的都授予 rw 权限,但未分配执行权限

 

66.           压缩 tar.bz2

tar -cjf hiphop-php-bin.tar.bz2 bin

 

67.           指定动态链接库路径

vi /etc/ld.so.conf.d/hhvm.conf

在目录 /etc/ld.so.conf.d/ 下创建,所以的配置引用在 /etc/ld.so.conf 文件下保存

然后在 hhvm.conf 中一定要引入动态链接库的路径,因为它无法进行递归操作

然后指定 ldconfig

 

 

68.           linux grep  命令取反

取含有 abc   的是      grep abc

取不含有 abc  的是    grep -v abc

 

 

69.           后台执行命令

Nohup  命令  &

如:

nohup sh compare_url_cbs.sh &

 

nohup ./nginx &

 

详见:

http://blog.sina.com.cn/s/blog_605f5b4f0100x28u.html

 

70.           curl 命令加引用来路头

curl –e “ http://item.jd.com/849503.html ”

“ http://club.jd.com/productpage/p-1002664897-s-0-t-3-p-0.html?callback=jsonp1364800457420&_=1364800614497 ”

 

Referrer: http//item.jd.com

参照:

http://codingstandards.iteye.com/blog/807844

 

71.           linux  定时任务执行器

执行 crontab -e

编辑任务执行器

然后将需要执行的语句和规则加入进去:

49 22 15 5 *  nohup /usr/local/bin/http_load_gzip -p 100 -s 1200 /export/http_load_data/huzg/test_memery.txt &>/export/http_load_data/huzg/test_memery.log &

注意:

这里的二进制需要加上指定的路径,否则找不到文件

 

每一行对应一个 cron job

每一行分为六个部分,每一部分用空格隔开,同一个部分用逗号隔开

minute  hour  day_of_month  month  weekday  command

前五个域中使用 * ,则表示所有的时间点

minute  0-59

hour  0-23  0 代表零点

day_of_month  1-31

month  1-12

weekday  0-6  0 代表星期天, 1-6 代表星期一到星期六

command :需要执行的脚本或者命令

 

比如上面的就是 5  15 日的 22  49 分执行,最后的星期不需要用 * 代替

49 22 15 5 *  这样倒着配置

 

详见:

http://www.2cto.com/os/201109/105474.html 

 

72.           TIME_WAIT 过多

net.ipv4.tcp_max_tw_buckets = 5000  表示系统同时保持 TIME_WAIT 套接字的最大数量,如果超过这个数字, TIME_WAIT 套接字将立刻被清除并打印警告信息。

    认为 180000 ,改为 5000 。对于 Apache  Nginx 等服务器,上几行的参数可以很好地减少 TIME_WAIT 套接字数量,但是对于 Squid ,效果却不大。此项参数可以控制 TIME_WAIT 套接字的最大数量,避免 Squid 服务器被大量的 TIME_WAIT 套接字拖死。

 

 :

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

 

设置这两个参数:  reuse 是表示是否允许重新应用处于 TIME-WAIT 状态的 socket用于新的 TCP 连接;  recyse 是加速 TIME-WAIT sockets 回收

 

参考:

http://space.yoka.com/blog/1216916/3662173.html

 

73.           指定某个用户运行程序

 

su - <user> -c "<cmd>"

例:

su - huzg -c "/export/dev_hhvm/hiphop-php_hzg/build2/src/hhvm/hhvm -c /export/data/www/hhvm/config-club_hhvm_nolog_test.hdf -m daemon"

 

 :

-c  后的路径需要是绝对路径

 

74.           查看最后登录用户的命令

last             

 

 

75.           linux   patch 方法

详细见:

http://www.cnblogs.com/itech/archive/2009/08/19/1549729.html

 

1  diff

     --------------------

    NAME

           diff - find differences between two files

    SYNOPSIS

           diff [options] from-file to-file

     --------------------

 

        单的说, diff 的功能就是用来比较两个文件的不同,然后记录下来,也就是所谓的 diff 补丁。语法格式: diff  【选项】   源文件(夹)   目的文件(夹),就是要给源文件(夹)打个补丁,使之变成目的文件(夹),术语也就是“升级”。下面介绍三个最为常用选项:

 

    -r  是一个递归选项,设置了这个选项, diff 会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。

    -N  选项确保补丁文件将正确地处理已经创建或删除文件的情况。

    -u  选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。

 

2  patch

     ------------------

    NAME

       patch - apply a diff file to an original

    SYNOPSIS

           patch [options] [originalfile [patchfile]]

           but usually just

           patch -pnum <patchfile>

     ------------------

     简单的说, patch 就是利用 diff 制作的补丁来实现源文件(夹)和目的文件(夹)的转换。这样说就意味着你可以有源文件(夹)―― > 目的文件(夹),也可以目的文件(夹)―― > 源文件(夹)。下面介绍几个最常用选项:

    -p0  选项要从当前目录查找目的文件(夹)

-p1  选项要忽略掉第一层目录,从当前目录开始查找。

 

总结一下: 单个文件 diff   uN from-file to-file >to-file.patch 
patch  
 p0 < to-file.patch 
patch  
 RE   p0 < to-file.patch 
多个文件 diff   uNr from-docu to-docu >to-docu.patch 
patch  
 p1 < to-docu.patch 
patch  
   p1 <to-docu.patch

 

(1)        文件 patch

原始文件: test0

修改后文件: test1

创建补丁:

diff -uN test0 test1 > test1.patch

diff –uN  原始文件   修改后文件  >  补丁名称

 

打补丁:

patch -p0 < test1.patch

 

恢复:

patch –RE -p0 < test1.patch

 

(2)        文件夹 patch

原始文件夹: folder0

修改后文件夹 :folder1

创建补丁:

diff -uNr floder0  folder1  > folder1.patch

diff -uNr  原始文件夹   修改后文件夹    补丁名称

 

打补丁:

cp folder1.patch folder0

cd folder0

cat folder1.patch | patch -p1

 

恢复:

cat folder1.patch | patch -R -p1

 

76.           通过端口 KILL 进程

[root@BP-28-2-206192 ~]# netstat -anp|grep 8083

tcp        0      0 0.0.0.0:8083                0.0.0.0:*                  LISTEN      -

tcp        0      0 0.0.0.0:18083               0.0.0.0:*                  LISTEN      -

这样对于查看端口没有进程状态的

[root@BP-28-2-206192 ~]# lsof -i:8083

COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME

memcheck- 27124 huzg   33u  IPv4 51310972      0t0  TCP *:us-srv (LISTEN)

通过 lsof 命令查看,然后强制 PID kill 

Kill -9 27124

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值