linux umount 时出现device is busy 的处理方法--fuser,20253进程在使用,退出或杀死:
    * 查询: fuser -m /media/share  #/media/share 是挂载在本地的目录
    * fuser -m 找出其所有进程:fuser -m /dev/ttyACM0 | awk '{for(i=1;i<=NF;i++) if($i ~ /^[0-9]+$/) print "ps -p " $i}'|sh
    * 显示: /media/share: 25023c  #25023c   是进程编号,25023是进程PID。用ps aux|grep 25023进行查看是哪个进程导致出现device is busy

问:lsof -p 1498 | grep ttyACM0
没有输出任何内容,是它有可能打开过,可能并闭了是么,内核会记录下来,我只是查到当时打开过,是这个意思吗
答:是的,你的理解是正确的。即使进程已经打开了一个文件,但在某些情况下,它可能会在后来将其关闭。在这种情况下,`lsof`命令可能不会显示任何与该进程相关的文件描述符。内核确实会记录文件的打开和关闭事件,但是通常情况下,这些记录是暂时的,一般情况下不会保留太长时间。

如果你想要更详细地追踪设备的使用情况,你可能需要使用其他工具或技术,如系统日志(`/var/log/messages`或`/var/log/syslog`),来查看设备的活动历史记录。
—————————————————————某个文件是谁在读取,反查进程有用———————————————————————————————
umount /data/htdocs/xiyou.cntv.cn/application/views/themes/default/nettv/adp
/data/htdocs/xiyou.cntv.cn/application/views/themes/default/nettv/adp was not found in /proc/mounts 解决办法:
解决:
umount 时使用 -l 命令。
umount /img1/bbs/img1.bbs.cctv.com -f -l  #当-f强制不行,还得-l ,也就是lazy选项合用才行,再不行只有杀死对应的占用目录的进程。
sudo umount -l /data/htdocs/xiyou.cntv.cn/application/views/themes/default/nettv/adp
       -l     Lazy  unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as
              soon as it is not busy anymore.  (Requires kernel 2.4.11 or later.)
来自:https://blog.csdn.net/robertsong2004/article/details/41346629



[root@iZ25dcp92ckZ multepoolserver]# ps aux|grep hhvm
www      15801  0.0 14.0 826616 142904 ?       Sl   14:15   0:00 /usr/bin/hhvm --mode server --user www --config /etc/hhvm/server.ini --config /etc/hhvm/php.ini --config /etc/hhvm/config.hdf
www      15804  0.0  0.1 115212  1404 ?        S    14:15   0:00 bash -c ! fuser /data/runsock/hhvm.sock
www      15805  0.0  0.0 107904   828 ?        R    14:15   0:00 fuser /data/runsock/hhvm.sock
root     15807  0.0  0.0 110224   904 pts/0    S+   14:15   0:00 grep --color=auto hhvm
[root@iZ25dcp92ckZ multepoolserver]# fuser /data/runsock/hhvm.sock
/data/runsock/hhvm.sock: 15801
——————————————————————————————————————————————————————————————

我的日志文件太大了,一直在写,但关了还有程序在写,能反查到是谁在写么?
du -sh Remote-20131216.log  
4.3G    Remote-20131216.log
lsof abc.txt 显示开启文件abc.txt的进程:
lsof  Remote-20131216.log  .
安装lsof包(yum install lsof),安装完成可以使用lsof命令。
没有:
回忆未来-向东-Jàck  下午 03:41:05
我就是要这个啊哈哈。
没有囁。
大侠江  下午 03:42:36
COMMAND 有没有进程记录
如过没有就没有了
回忆未来-向东-Jàck  下午 03:44:20
我这边是加载的NFS,Linux都挂载到日志上了。
可能是这个原因吧?NFS网络挂载的。
linux中TOP命令显示出COMMAND进程名?
top 后有一个
http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html
大侠江  下午 03:48:40
lsof 显示的的COMMAND
回忆未来-向东-Jàck  下午 03:49:51
好几列啊,就lsof  lsof |grep xxxx.avi 虽然有点慢,但是可以用。
lsof -f 不行的,先用grep试试吧。那就去掉-f,直接+文件试一试?
不行的。还是 grep 吧  lsof 加上-n貌似会快一点。
确实快了很多,瞬间返回。


这个lsof是啥原理,是扫整个系统的打开文件句柄了?
遍历 /proc/实现的。

fuser
fuser -v file
使用-v选项将显示更全的信息:
# fuser -v /root
            USER     PID    ACCESS   COMMAND
/root:      root    17923    ..c..      bash
            root    24869    ..c..      atop


root@119.10.*.23:~# fuser -v -n tcp 80
                     用户     进程号 权限   命令
80/tcp:              root       7717 F.... nginx
                     www        7718 F.... nginx
                     www        7719 F.... nginx

来自:http://www.cnblogs.com/bangerlee/articles/2460614.html
         http://www.cnblogs.com/yuboyue/archive/2011/07/18/2109838.html
方法:

lsof-4.82-4.el6.x86_64
[root@localhost htdocs]# rpm -qa|grep lsof
lsof-4.82-4.el6.x86_64

/usr/sbin/lsof|grep "Remote-20131216.log"
阅读全文
背景:有时用wireshark抓到的post数据时,需要把一列并成一行形成CUrl格式的数据进行模拟Post请求,用awk快速实现一列变一行。
一、一列变成一行的AWK实现方法:
请教!怎么把一个文本的一列,换成一行?
在vi中能做吗?
sed可以做到
是吗?请教sed怎么实现呢?谢谢!
也就是一个文件是这样的:
oplasttr
dsprjord
accontsup106
alprjinfo
holiday
把它替换成oplasttr dsprjord accontsup106 alprjinfo holiday
cat test.txt | awk '{printf "%s ",$0}'
AWK可以取出任何一列并形成行:
例子:  
[root@WANGJIAN ~]# cat file  
a 13  
b 1  
c 23  
d 234  
[root@WANGJIAN ~]# awk '{printf "%s", $1}' file  
abcd  

把a、b、c、d与相应的值放到file里,然后通过awk语句实现列变行的转换。

实践如下:
[root@test tmp]# vi test
You have new mail in /var/spool/mail/root
[root@test tmp]# cat test | awk '{printf "%s ",$0}'    
oplasttr dsprjord accontsup106 alprjinfo holiday

[root@test tmp]# cat test | awk '{printf "%s ",$1}'
oplasttr dsprjord accontsup106 alprjinfo holiday

而用wireshark导出的Post或Get参数时是以如下形式进行分布的:
Content-Disposition: form-data; name="playlist"
20362
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
Content-Disposition: form-data; name="user_name"
20120926173632167912
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
Content-Disposition: form-data; name="email"
21240168
------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6
用editplus处理下就形成下面的格式了:
1)Content-Disposition: form-data; name=" 全部替换掉。
2)"$ 用正则把后面的"给去掉。
3)------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6 替换掉。
4)用^[\t ]*\n  正则把空行去掉。
形成下面的结构,再用awk处理一下就形成了post的格式(数据多时这样做最省力,少了就自己拼吧):
playlist
20362
user_name
20120926173632167912
email
21240168
如下处理:

自己的实践下要多行,问了下scottjiang兄弟一行搞定:

来自:http://linux.sheup.com/linux/linux5480.htm

二、sed和awk实现打印奇数行和偶数行
假设文件为test.txt
1.奇数行:
    awk实现:awk '{if (NR%2==1) print $0}'  test.txt
    sed实现:sed -n 'p;n' test.txt
2.偶数行:
    awk实现:awk '{if (NR%2==0) print $0}'  test.txt
    sed实现:sed -n 'n;p' test.txt
来自:http://blog.chinaunix.net/uid-7845870-id-3203124.html


三、awk 多列变多行的转换:
tony@tony-LIFEBOOK-LH532:~$ cat test
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

怎么变成
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
——————————————————————
AWK:

实践如下:
[root@test tmp]# vi test
[root@test tmp]# cat test|awk '{for(i=1;i<=NF;i++)a[i]=a[i]?a[i]" "$i:$i}END{for(i=1;i<=NF;i++)print a[i]}'
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4078467
/home/irdcops/shell/hiwifi/hiwificonn.sh  
chmod +x /home/irdcops/shell/hiwifi/hiwificonn.sh


yum remove NetworkManager
上在这样是不行的,有可能是网IP还在,只是访问有问题:
/home/irdcops/shell/nmcli/nmcli.sh

*/1 * * * *   /home/irdcops/shell/nmcli/nmcli.sh >> /data/logs/nmcli/nmcli.log

sh  /home/irdcops/shell/nmcli/nmcli.sh
123.125.114.144 Ping is successful.
114.114.114.114 Ping is successful.
111.161.64.48 Ping is successful.


Crontab:



简单的判断Wifi的那个:
/home/irdcops/shell/nmcli/nmcli.sh

Crontab:



实践发现,这块如果是xterm会显示,好像linux不显示这个标签,这块应该可以设置:http://jackxiang.com/post/3474/里,让标签显示文件路径,有描述:
让标签显示文件路径:
Options => Session Options => Terminal => Emulation
选择Terminal为Xterm/VShell,勾选“ANSI Color”,这样就会自动修改标签标题,还会包含当前目录。

==========================================================
实践OK如下:
vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;仿真机\a"
再登录出现如下提示:
-bash: /etc/sysconfig/bash-prompt-xterm: Permission denied
加上权限:


一)CentOS6最终这样写,以eth0网卡为例:


阿里私有云取Eth0:
/sbin/ifconfig eth0|grep "inet"|awk -F' ' '{print $2}'

二)CentOS7,因ifconfig的返回ip格式有变得这样:
echo -ne "\e]2;K8S仿真机-老武在上面测试@$(/sbin/ifconfig eth0|grep "inet"|cut -f2 -d:|awk '{print $2}')\a"  

sh  /etc/sysconfig/bash-prompt-xterm
Docker仓库机@CentOS7@10.71.182.163


实践发现即使unset进入了,还是会出现SecureCRT的标签没有变化(PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm ,没有进入到默认的分支里去),于是自己 在/etc/bashrc 在判读的前面加了几行Shell,解决了问题,如下:AddTime:2018/05/03

进了这里面去了,但是标签没有变化:

-------------------------------------------------加上可执行权限---------------------------------------------------------
-bash: /etc/sysconfig/bash-prompt-xterm: 权限不够
root@101.200.228.135:~# chmod a+x /etc/sysconfig/bash-prompt-xterm
[/codes]

———————————————————————————————————————————————————————————————
有时会不小心在ctrl+B时误按成Ctrl+V后发现按错了,一瞬间又按了b(或ctrl+b),于是,把原来的会话标签页给去勾选了,标签没了,就当前了。
,查看并勾选会话标签页选项。
http://linuxroad.blog.51cto.com/765922/1022602
在linux系统中设置的方法(此法适用于所有远程登录的软件)

这时候只需要简单两步即可搞定
[root@centos581 sysconfig]# vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;$(ifconfig eth0|grep "inet addr"|cut -f2 -d:|awk '{print $1}')\a"

[root@centos581 sysconfig]# chmod 755 /etc/sysconfig/bash-prompt-xterm

当然,你也可以定义让其显示你指定的字符串。
比如:
[root@centos581 sysconfig]# vim /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]2;hello\a"



CentOS7修改好像无效,于是查了一下:
一个是可能修改了hostname:http://jackxiang.com/post/5640/
二是linux下的shell——如何修改shell的提示符,能够出现登录用户名、主机名和路径
  有的机器上可能登上去后显示总是-bash-3.00$,解决方法是对比其他机器的~/.bash_profile文件,发现补充上以下东西就可以显示"xx@机器名 当前dir“了。

2 if [ -f ~/.bashrc ]; then
  3     . ~/.bashrc
  4 fi
  5 PATH=$PATH:$HOME/bin
  6 export PATH
  7 unset USERNAME



深入的看下,发现是在/etc/bashrc文件里面有/etc/sysconfig/bash-prompt-xterm这样的设置,/etc/bashrc:

17 # are we an interactive shell?
18 if [ "$PS1" ]; then
19     case $TERM in
20     xterm*)
21         if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
22             PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
23         else
24             PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
25         fi
26         ;;

发现是这个变量在阿里云里有值,而没有加载导致的,如下,非阿里去是没有这个PROMPT_COMMAND参数的: -AddTime:2015-10-12
PROMPT_COMMAND=""; //加一行清空这个变量也就对了,PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm能运行进去了,呵呵:
if [ -z "$PROMPT_COMMAND" ]; then 这一行阿里云给加上了,其它常规linux没有的,像centOS啥的:
-z STRING
              the length of STRING is zero
PROMPT_COMMAND估计是干这事的:Linux利用PROMPT_COMMAND实现操作记录的功能,http://www.bdqn.cn/news/201312/12316.shtml
Linux 利用 PROMPT_COMMAND 实现审计功能  :http://blog.163.com/ly_89/blog/static/1869022992011756434459/
看了下:/var/log/sa:
sa01  sa03  sa05  sa07  sa09  ... sa30 (一个月的日志)
————————————————————————
if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then  #[ -z STRING ] “STRING” 的长度为零则为真。  https://blog.csdn.net/longyinyushi/article/details/50728049
    case $TERM in
    xterm*|vte*)
      if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
      elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
          PROMPT_COMMAND="__vte_prompt_command"
      else
          PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
来自:http://www.cnblogs.com/mangu-uu/archive/2012/10/08/2715503.html

cat /etc/sysconfig/bash-prompt-xterm
echo -ne "\e]3;阿里云bobWB's VPS@$(/sbin/ifconfig eth1|grep "inet"|awk  -F" " '{print $2}')\a"
下次登录后就secureCRT标签里就会出现:
阿里云bobWB's VPS@101.200.1.***
————————————————————————————————————————————————————————————————
方法:
步骤一:
使用xterm让标签显示文件路径:
Options => Session Options => Terminal => Emulation
选择Terminal为Xterm/VShell,勾选“ANSI Color”,这样就会自动修改标签标题,还会包含当前目录,
这样就会自动修改标签标题,还会包含当前目录,类似这样:
user@host:/home/user/

步骤二:把IP地址由localhost修改为真实IP,多机器时好维护
将服务器名称设为你清楚的名字或者是ip地址,
这样连上服务器了,标签只是显示名称了,而不是登入后的帐号名和登入服务器的主机名:
________________________________________________________________
永久性修改服务器名称:
编辑/etc/sysconfig/network
修改HOSTNAME=新名称
保存后退出
同时修改/etc/hosts
添加一行 127.0.0.1    新名称
保存后退出
好了,如果是服务器建议还是重启一次,更新主机名,如果是普通用户电脑,那么就继续玩吧,这次就暂时用hostname修改,下次重启就正常了。

步骤三:对投影仪、Linux下的目录因颜色导致看不清的解决办法:
在使用投影仪的时候,可以勾选“Use color scheme”,即可以实现白底黑字效果,这样比黑底白字看的清楚些。
设置成xterm后,会发现在黑色背景下,目录的颜色太深,看不太清楚:
目录看不清的解决方案:Global Options => Terminal => Appearance => ANSI Color:将Normal color的颜色改成自己喜欢的颜色即可。(勾选“ANSI Color”, 才能显示鲜艳的颜色)
改变显示的最大列(默认80列,不满屏):
1) Global Options => Terminal => Appearance, 调整最大列为300;(实践Ok:选项->全局选项->外观->最大列:300)
2) Options => Session Options => Terminal => Emulation,调整逻辑列为132(或其他)(实践Ok:选项->会话选项->终端->仿真->逻辑列:132)

参考:
http://blog.opvps.com/securecrt-%E6%98%BE%E7%A4%BA%E6%A0%87%E7%AD%BE%E8%AE%BE%E5%AE%9A/
http://z515123.blog.51cto.com/679304/647679
Dig 在CentOS6.4/7下面的安装方法及查找某命令在哪个包的方法:http://jackxiang.com/post/7038/
一)rpm -qf /bin/dig
bind-utils-9.11.4-9.P2.el7.x86_64
安装DNS服务器的时候,想测试一下DNS服务器,发现没有host dig nslookup命令,原来是没有安装bind-untils,立即yum install bind-untils搞定如下:
sudo yum install bind-utils -y
它们各自的位置在:
[root@localhost site]# ls /usr/bin/nslookup
/usr/bin/nslookup
You have new mail in /var/spool/mail/root
[root@localhost site]# ls /usr/bin/dig
/usr/bin/dig
[root@localhost site]# ls /usr/bin/host
/usr/bin/host
实践如下:
Total download size: 1.0 M
Installed size: 2.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm                                                                                    | 878 kB     00:00    
(2/2): bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm                                                                                   | 182 kB     00:00    
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        9.0 MB/s | 1.0 MB     00:00    
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 32:bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64   1/2
  Installing : 32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64   2/2
  Verifying  : 32:bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64   1/2
  Verifying  : 32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64   2/2
Installed:
  bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.6                                                                                                                
Dependency Installed:
  bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.6                                                                                                                
Complete!

二)我的LINUX服务器没有strace命令,CENTOS 6.4,怎么安装它呢
打开终端,输入命令:rpm -qa |grep strace,如果显示为空。
3. 如果没有这个显示结果,可以采取如下方式:
3.1 在系统光盘中查找对应的软件包,一般在Server目录下;
3.2 可以去Linux系统对应的官方网站进行下载对应的软件包;
4. 安装方式:
4.1 如果在图形界面,通常双击安装即可;
4.2 如果是在命令行界面,进入对应的路径,输入命令“rpm -ivh strace等文件全称.rpm”安装即可;
4.3 安装完成后使用命令“rpm -qa |grep strace”查询即可知道是否安装正确。

注:如果已经安装了yum源即可直接输入命令:root#yum -install strace-4.5.18-5.el5
使用:
复杂的用法还是直接man strace看说明吧,这里说个最简单的用法就是 strace -p <PID>针对进程跟踪。

Egg:
Total download size: 172 k
Installed size: 533 k
Is this ok [y/N]: y
Downloading Packages:
strace-4.5.19-1.17.el6.x86_64.rpm | 172 kB     00:00    
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : strace-4.5.19-1.17.el6.x86_64   1/1
  Verifying  : strace-4.5.19-1.17.el6.x86_64   1/1

Installed:
  strace.x86_64 0:4.5.19-1.17.el6
背景: 在树莓派上编译安装Nginx出现下面错误,因为是相当于debian上安装,所以得atp-get。
阅读全文
复盘:就是DHCP的网关IP和DNS要找对,且DHCP服务是启动且是好的,防火墙不拦截也就能上网了。
I:IP配置网
1 编辑 > 虚拟网络编辑器
2 选中NAT模式的网卡(我的是VMnet8),点击 “NAT设置” 按钮
3 查出 子网IP,子网掩码和 网关IP
查出 子网IP,子网掩码和 网关IP 后接下来就好办了。

二、配置虚拟机 网络配置文件,重启网卡
1 进入 /etc/sysconfig/network-scripts
2 vim ifcfg-ens32,修改配置如下:
BOOTPROTO="none"  #DHCP去掉
ONBOOT="yes"
IPADDR="192.168.153.22"
PREFIX="24"
GATEWAY="192.168.153.2"
DNS1="192.168.153.2"
3. 退出 vim 编辑,重启网卡:
service network restart

systemctl restart network
DNS1设置后会启动网络后会自动配置DNS解析文件:
cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.153.2

II:DHCP服务网:
开始---设置--控制面板---管理工具---服务(运行:services.msc)
确保 VMware DHCPService 和VMware NAT Service 服务已经启动
启动之后重新在虚拟机中连接网络(一般是eth0)
DHCP service for virtual networks.
C:\WINDOWS\SysWOW64\vmnetdhcp.exe
Network address translation for virtual networks.
C:\WINDOWS\SysWOW64\vmnat.exe
启动类型:自动。


上网dig和ifconfig这个命令分别在:
yum install bind-utils net-tools -y

dig jackxiang.com @192.168.153.2 #成功解析。


预告:最后我安装了盗版的VMware8,升级了一下(会提示你卸载旧版本),也就没有下面一堆的乱七八糟的问题了,但那个192.168.137.1还是由那个注册表修改下,NAT方式Linux也就能上网了。
背景:重装系统后,配置Vmware后有可能里面的Linux无法上网。尽管IP一样的,但是就他妈的上不了外网,给升级Rpm包带来困难,路由如下:
root@192.168.137.128:~# traceroute baidu.com
traceroute to baidu.com (220.181.111.86), 30 hops max, 60 byte packets
1  192.168.137.2 (192.168.137.2)  0.348 ms  0.307 ms  0.295 ms
2  * * *
3  * * *
4  * * *
修改后是这样的:
root@192.168.137.128:~# traceroute baidu.com
traceroute to baidu.com (220.181.111.86), 30 hops max, 60 byte packets
1  192.168.137.1 (192.168.137.1)  0.188 ms * *
2  * * *
3  * * *
。。。。。。
29  * * *
30  * * *
也就是说还是没明确的路由,但Ping是通的,Curl是通的,能获取到数据就是Ok。

......
Is this ok [y/N]: y
Downloading Packages:
traceroute-2.0.14-2.el6.x86_64.rpm    
......
Running Transaction
  Installing : 3:traceroute-2.0.14-2.el6.x86_64    
  Verifying  : 3:traceroute-2.0.14-2.el6.x86_64    
Installed:
  traceroute.x86_64 3:2.0.14-2.el6      
Complete!
________________________________________________________________________________________________________
防火墙是要开启的,否则在共享时会返回null的问题:
1.services.msc
2.找到:Windows Firewall,启动类型:自动,启动:让服务状态为已启动。
——网上其实很多方法,都不行,我想可能是Vmware6.0和其下面的虚拟机的一个重装后的小Bug—————
解决办法:【第8条才是关键,特别注意。】
0)删除:修改 /etc/udev/rules.d/70-persistent-net.rules 文件
删除掉 关于 eth0 的信息。修改 第二条 eth1 的网卡的名字为 eth0. 重启服务器。
http://jackxiang.com/post/5651/
1)移动:下ifcfg-eth0到ifcfg-eth0.bak
2)关闭:ifconfig eth0 down
3)启动:ifconfig eth0 up
4)  重置:/etc/init.d/network reload
5)还原:ifcfg-eth0.bak -》ifcfg-eth0
6)重启:service network restart
7)把services.msc里的Vmware服务都全开了。
8)一系列都做了通过service network restart还是不能获取到新的DHC ip段:
VMware下->Edit->Virtue Network Settings...->DHCP->选 Vmware8(properties)->Start IP address(这块由:192.168.137.128修改最后一位:129),也就再service network restart 获取到129了,再修改回去就成(我估计这里之所以修改128成129是因为DHCP有缓存:192.168.157.128终于变为:192.168.137.128),呵呵,不容易,不知vmware的高版本有没有这个问题。
9)有时间win7要修改成:192.168.137.128 才能上网,而前面默认就是128,你得修改下vmware下的linux才能变IP第三位(由129变到128),而你修改的是最后一位128到129,于是你想还回去,可就又不行了,这也是vmware6.0的问题,这样就Ok了:
你再修改为更低:如:192.168.137.120 (128),再修改下注册表到另外的IP(192.168.138.0),再启动Vmware进行修改到:192.168.138.128。为此,你再关闭后修改注册表改回:192.168.137.0,启动vmware还回去(192.168.137.128)就可以了。
其实以上所有操作都是为了能让vmware下的linux能够获取到正确且能上网的ip:192.168.137.128。这个128是由dhcp确定的,必须修改,但修改后又有可能上不了外网。(这点也是奇怪的),也就只能这样折腾了,vmware6.0害人呐,呵呵。

最后,这个Vmware6.0下的虚拟Linux也就可以上网更新rpm了,NAT的Vmware6.0生成的Vmware8的访问类型:无法连接到Internet(其实也能访问),再就是防火墙要打开,否则共享会出现null的提示。
vi /etc/sysconfig/network-scripts/ifcfg-eth0  
阅读全文
https://bitbucket.org/PinIdea/fcgi_ext/
老外点评:
该用法有点意思,不过是特定场景下的应用:
有点像分布式事务
规避php的高资源消耗
原先的php代码中需要访问solr获得搜索结果,然后回传nginx
但是solr不稳定,或者说获得结果的时间比较长,不确定
这样php代码必须得持有很多资源等待结果
所以导致系统负载很大
改进方案就是在nginx和php之间增加golang的deamon程序
让golang去等待搜索结果
得到结果后,扔给后方的php,再回传nginx
所以golang等待的时候,就不会持有那么多资源
每次vim 一个文件,光标都在最上面的位置,不是上次我编辑的位置了..
进入vim后键入:
'0
即回到当初你编辑的位置
ctrl + o 回到光标回到上次位置
ctrl+i,ctrl+o跳转位置,完全没看手册啊

try  Ctrl+ o
配合ctrl + ] 阅读代码时尤其便捷
——————————————————————
PS: 如果想把光标停止在指定的行, 这样
vim +n urfile // n为行号
如果要停留在行尾, 这样
vim + urfile
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1024941&page=1
http://blog.longwin.com.tw/2012/09/vim-last-read-line-2012/
http://bbs.chinaunix.net/thread-1271757-1-1.html


vim-重新打开回到上次所编辑文件的位置:
应用场景:
在每次退出一份文件后再重新打开该文件时,希望光标停留在当时退出的地方;也就是说当我程序写到hello.c的第100列时突然有事必须关电脑了,那在我下次打开电脑以vim打开hello.c, 希望光标还是停留在第100列,怎么办?

解决方案就是在.vimrc里面加上这一行即可:
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif  

google大神的礼物: 
http://bbs.chinaunix.net/viewthread.php?tid=1024941&page=1
我的无线WIFI设置成这个iP以后,连接到这个WIFI的用户才能上网,设置成192.168.0.1就不行,为什么?
192.168.136.*也不行,但我不知道为什么?是不是192.168.137.*这个IP 段具有特别的意义?

是这样的:因为在192.168.1.0/24这个的意思就是说前24位是网络位,而后八位是主机位
在你的网关中规定了,子网掩码是255.255.255.0对吧?这个的意思和/24一样,只不过是另一种表示方式,而你的网关地址应该是192.168.137.*对吧,这两个数据确定了你网络192.168.137.0
并不是这个ip有什么特别,在路由器里设置一下就好了

点击确定(OK)之后,将会出现如下的说明:
大致是说,将会自动把无线网卡的ip地址设置成为192.168.137.1的地址。
点击确定(OK),即可。
win7简单搭建WIFI热点使iphone快速上网(很仔细)
2012-1-26 12:35:21 上传下载附件 (27.5 KB)


(10)、这个时候查看无线网卡的IP地址,确保一定要是上面提示说明的IP地址。
ip地址:192.168.137.1
掩码:255.255.255.0


摘录:http://bbs.app111.com/thread-176775-1-1.html
这个更界面化:http://www.cnblogs.com/rocketfan/archive/2009/11/15/1603465.html

GNU gprof 是一款linux平台上的程序分析软件(unix也有prof)。借助gprof可以获得C程序运行期间的统计数据,例如每个函数耗费的时间,函数被调用的次数以及各个函数相互之间的调用关系。gprof可以帮助我们找到程序运行的瓶颈,对占据大量CPU时间的函数进行调优(gprof统计的只是CPU的占用时间,对I/O瓶颈貌似无能为力,耗时甚久的I/O操作很可能只占据极少的CPU时间)。
gprof的使用非常简单,在编译链接的时候加上"-pg"选项,然后按照正常方式运行程序,如果程序正常退出,一个名为gmon.out将会产生。使用gprof可查看gmon.out中的统计结果:

gprof <options> [executable-file] [profile-data-file(s)……] [>outfile]

可通过man gprof 查看各选项含义,通常会加上"-b"选项禁止显示冗长的说明信息。
executable-file如果没有指定,则会默认为a.out。
profile-data-file可跟多个文件,若没有指定,默认gmon.out。
统计信息较多,最好重定向到outfile方便查看。
最终呈现的统计信息包括两张表:flat table和call graph。flat table列出了各个函数的运行时间(不包括子函数)及所占总运行时间的比率,函数的调用次数;call graph还包括函数之间的调用关系,详细列出了每个函数在它的各个子函数上所耗费的时间。
下面一个简单的例子说明一下两张表中各项的含义:
待分析的程序源码:
#define MAX 10000000
void f() {
long long sum = 0;
for (long long i=0;i<MAX;i++)
sum += i;
}
void g() {
long long sum = 0;
for (long long i=0;i<MAX;i++)
sum += i;
f();
}
int main() {
long long sum = 0;
for (long long i=0;i<MAX;i++)
sum += i;
f();
g();
}

Flat profile:
Each sample counts as 0.01 seconds.
  %          cumulative          self         self                           total          
time         seconds         seconds    calls        ms/call      ms/call     name    
50.00         0.07                 0.07         2            35.00       35.00         f()
28.57         0.11                 0.04         1            40.00       75.00         g()
21.43         0.14                 0.03                                                        main
% time:各个函数占用的时间比率(不包括子函数),这一列加起来应该为100%
cumulative seconds:累积时间,当前行减去上一行即为当前函数耗费时间
self seconds:当前函数耗费时间(不包括子函数)
self calls:调用次数
ms/call:调用一次耗费的平均时间(不包括子函数),单位毫秒
total ms/call:同上,但包括子函数
name:函数名

call graph:
granularity: each sample hit covers 4 byte(s) for 7.14% of 0.14 seconds
index      % time    self     children    called        name
                                                                     <spontaneous>
[1]            100.0    0.03       0.11                        main [1]
                             0.04       0.04         1/1           g() [2]
                             0.04       0.00         1/2           f() [3]
-----------------------------------------------
                             0.04       0.04          1/1          main [1]
[2]              53.6    0.04       0.04          1             g() [2]
                             0.04       0.00          1/2          f() [3]
-----------------------------------------------
                             0.04       0.00          1/2          g() [2]
                             0.04       0.00          1/2          main [1]
[3]              50.0    0.07       0.00           2            f() [3]
-----------------------------------------------

每个函数都分配了一个index,index按升序排列,一个函数对应一个entry,两个entry之间用虚线隔开。
在每个entry中,以[index]起头的行称为primary line。primary line上面的行称为caller's line,列举的是调用该函数的函数;下面的行subroutine's line列举的是该函数调用的子函数。这三种line的各项名称虽然相同,但有着截然不同的含义。
以下都以第二个entry为例说明:

primary line
index      % time    self     children    called        name
[2]              53.6    0.04       0.04          1             g() [2]
%time:g()耗费的时间比率。该比率包括了调用的f(),因此各个entry的该项数字加起来不等于100%。
self:同flat table的self seconds。
children:f()耗费的时间。下面的subroutines's line 的self项和children项之和应等于该数值。
called:只被调用了一次。

subroutine's line
index      % time      self       children       called        name
                                0.04       0.00            1/2           f() [3]
self:f()被g()调用过程中,f()的耗费时间0.04s。
children:f()被g()调用过程中,f()中的子函数耗费时间为0。
called:f()一共被调用了2次,其中有1次被g()调用。

caller's line
index      % time      self       children       called        name
                               0.04       0.04            1/1            main [1]
self:g()被main()调用过程中,g()的耗费时间。
children:g()被main()调用过程中,g()中的子函数耗费的时间。
called:g()一共被调用了1次,其中1次是被main()调用的。

gprof的基本原理
类似于gdb,gprof需要对待分析的程序做一些改动,因此在程序编译的时候需要加上"-pg"选项,如果程序的某个模块在编译的时候没有加上"-pg",则该模块的函数会被排除在统计范围之外。比如想要查看库函数的profiling,则需在链接库函数的时候用“-lc_p"代替”-lc"(gprof是各个类UNIX的标准工具,系统自带的链接库通常有两个版本,它们的区别在于编译的时候是否加上了"-pg"。用-lc_p等于告诉编译器选择加上了"-pg"的那个版本)。
加上"-pg"选项后,程序的入口会于main()之前调用monstartup(),主要是申请内存存储接下来获取的统计信息。
在每个函数中会调用mcount(),主要是在函数的堆栈中查询父函数和子函数的地址并保存下来。
最后会在程序退出前调用_mcleanup(),将统计结果保存到gmon.out中,并完成清除工作。
gprof统计各个函数的运行时间是采用的抽样的方法,周期性的查看Program counter指向哪一个函数的地址段,并把结果以直方图的形式保存下来。

PS:
有人建议在编译时不要加上"-g"选项,因为这样可能会影响分析结果。
通常gprof的采样周期是0.01s,统计项越接近这个值误差可能越大。若函数的运行时间低于0.01S,统计值会显示为0。

关于这一主题的有用链接:
http://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html:关于options, flat table, call graph有更详细的论述。
http://wiki.waterlin.org/Cpp/gprof.html:对gprof的实现原理论述得很清晰。
http://sam.zoy.org/writings/programming/gprof.html:对多线程profiling。
http://linuxfocus.org/English/March2005/article371.meta.shtml:提到了perl和java的profiling方法。

来自:http://blog.sina.com.cn/s/blog_6608391701013phr.html
查看当前进程的最大可以打开的文件数:
cat /proc/PID/limits  (如果通过ulimit -n 设置或者修改/etc/security/limits.conf,看看进程是否生效)  

ulimit  -a|grep "open files"
open files                      (-n) 1024000

直接对文件的修改如下:
cat  /etc/security/limits.conf|grep -Ei 'soft|hard'
* soft nofile 1024000
* hard nofile 1024000
* soft nproc  1024000
* hard nproc  1024000

cat /proc/1279/limits |grep files
Max open files            8192                 8192                 files    
cat /proc/64658/limits |grep files
Max open files            1024000              1024000              files    
cat /proc/64658/limits |grep files
cat /proc/18576/limits |grep files
Max open files            1024000              1024000              files    

怎么修改?
# CentOS7系统使用命令
prlimit --nofile=65536:65536 --pid 39977

# CentOS6系统使用命令
echo - n "Max open files=65535:65535" > /proc/39977/limits

当然,可以通过重启这个进程所对应的服务(如果可重启,也不会来修改这个session里的参数了)来重新读取系统里的默认设置。

ulimit -n
# 临时修改,重启失效
ulimit -HSn 65536

# 永久解决
vim /etc/security/limits.conf
# 添加如下的行
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536

实践如下:

原文链接:https://blog.csdn.net/dqchouyang/article/details/115230076

Linux查看文件句柄占用多的进程 :

其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名和进程的句柄详细情况:

8798 8770 8797 8770 8769 8764 8763 8713 8618 均是PHP的PHP-FPM的句柄数,也就是说第一是virtualBOX,再才是certmonger服务,后是clock-applet,再后是php-fpm进程,这些进程文件数分布排列很正常~
(1)这个没啥用就关了得了:
certmonger 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
chkconfig certmonger  off
root@119.10.6.54:~# chkconfig certmonger  off
root@119.10.6.54:~# chkconfig --list|grep certmonger
certmonger      0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
root@119.10.6.54:~# service certmonger stop
停止 certmonger:                                          [确定]

重启后按Esc或者F5键,可以查看系统启动过程,卡在哪里,我的是在certmonger启动OK之后卡住的,完全有必要停掉,来源:
http://www.linuxidc.com/Linux/2015-02/112688.htm

(2)/usr/libexec/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=29
这个好像是gnome的时间同步啥的一个服务,暂时不关。
(1)查看Linux系统默认的最大文件句柄数,系统默认是1024

(3)对服务器没有用的也关了,调节cpu速度用来省电,常用在Laptop上:
service cpuspeed stop
chkconfig cpuspeed off

——————————————————————————————————————————————————
ulimit -n
1024

(2)查看当前进程打开了多少句柄数
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204 
57 24244  
57 24231   ........
其中第一列是打开的句柄数,第二列是进程ID。

(3)可以根据ID号来查看进程名。
ps aef|grep 24204
nginx  24204 24162 99 16:15 ?    00:24:25 /usr/local/nginx/sbin/nginx -s

来自:http://www.examw.com/linux/all/146041/

accept4() failed (24: Too many open files)
如何优化这个
ulimit -n 是多少?
文件描述符不够用了
1024
这个可以开大点
能开多大,如何去衡量啊
内存足够都可以
一般开10万
好的,我看看。
来源:PHP高级编程QQ对话。
=========================================
实践如何找到当面数据库打开了多少个文件句柄数的如下实践:
1)先PS一下获取到Mysql的进程号:
root      4935  0.0  0.0  63992   272 ?        S    Aug06   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/conf/my.cnf
mysql     5622  4.5 83.4 14974096 6823984 ?    Sl   Aug06 149:07 /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/db/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/db/mysql/localhost.localdomain.err --open-files-limit=65535 --pid-file=/data/db/mysql/localhost.localdomain.pid --socket=/tmp/mysqld.sock --port=3306
2)得到如下两个进程号:
4935
5622

3)通过lsof获取到所有进程的句柄数再grep一下就得到了当前mysql的进程为4935的句柄数:
/usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 4935
4 4935
4)一样的方法:
/usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 5622
4 5622

目前只打开了4个文件句柄数量,远远底于系统默认值1024。

=========================================
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
    # lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more    
        131 24204  
         57 24244  
         57 24231  
         56 24264  
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
    ps -aef|grep 24204  
    mysql    24204 24162 99 16:15 ?        00:24:25 /usr/sbin/mysqld  
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
    ulimit -HSn 4096  
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。
用普通用户登录,执行ulimit -n,查看文件打开数。
如果太小,默认值是1024,则进行如下操作:
使用root用户修改vim /etc/security/limits.conf 文件。
在文件最后加如下两句话:
*   soft nofile 50000
*   hard nofile 50000
参考:http://hi.baidu.com/itnote/item/7347bfea829e3ee3fa42bad8
在“工具-》首选项-》语法”设置函数模式。
其实就是匹配函数的正则表达式。

一:让EditPlus支持PHP5的函数列表:
将函数模式改为:
^[ \t]*[a-z| ]*function[ \t].*\([^;]*$

二:C/C++
默认:^[A-Za-z_].*\([^;]*$  这个匹配还成。
有兄弟说这个,实践感觉好像匹配多了点如else给匹配上了,如下:
^[\t ]*[a-zA-Z]+[\t ]+[a-zA-Z_][a-zA-Z0-9_]*[\t ]*\(.*\)[/t ]*\{?[\t ]*[\r\n$]
[Wed Jul 10 21:12:46.109914 2013] [unique_id:alert] [pid 3870] (EAI 2)Name or service not known: AH01564: unable to find IPv4 address of "jackxiang.localdomain"

添加:
127.0.0.1   jackxiang.localdomain  
    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
---------------------------------------------------------------------------------------------------------------------
如下实践,更容易理解:
分页: 33/40 第一页 上页 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 下页 最后页 [ 显示模式: 摘要 | 列表 ]