我的LINUX服务器centos6.4中没有host dig nslookup strace命令的解决办法,yum install bind-utils -y。
Unix/LinuxC技术 jackx 2013-10-26 14:50
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
一)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
[实践OK]Vmware6.0在重装系统后出现通过重启网卡用DHCP不会变IP上不了外网的怪异解决办法。
Unix/LinuxC技术 jackx 2013-10-5 01:56
复盘:就是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
阅读全文
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

qnx操作系统善于自动化控制,如汽车,手机等微型实时操作系统。
Unix/LinuxC技术 jackx 2013-9-27 10:31
Migrating from php(LEMP) to Golang in large scale
Unix/LinuxC技术 jackx 2013-9-25 13:40
https://bitbucket.org/PinIdea/fcgi_ext/
老外点评:
该用法有点意思,不过是特定场景下的应用:
有点像分布式事务
规避php的高资源消耗
原先的php代码中需要访问solr获得搜索结果,然后回传nginx
但是solr不稳定,或者说获得结果的时间比较长,不确定
这样php代码必须得持有很多资源等待结果
所以导致系统负载很大
改进方案就是在nginx和php之间增加golang的deamon程序
让golang去等待搜索结果
得到结果后,扔给后方的php,再回传nginx
所以golang等待的时候,就不会持有那么多资源
老外点评:
该用法有点意思,不过是特定场景下的应用:
有点像分布式事务
规避php的高资源消耗
原先的php代码中需要访问solr获得搜索结果,然后回传nginx
但是solr不稳定,或者说获得结果的时间比较长,不确定
这样php代码必须得持有很多资源等待结果
所以导致系统负载很大
改进方案就是在nginx和php之间增加golang的deamon程序
让golang去等待搜索结果
得到结果后,扔给后方的php,再回传nginx
所以golang等待的时候,就不会持有那么多资源
vim回到上次光标位置
Unix/LinuxC技术 jackx 2013-9-22 11:02
每次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
进入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
Vmware通过NAT上网中的192.168.137.1是个特殊的IP吗?
Unix/LinuxC技术 jackx 2013-9-5 13:57
我的无线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
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
Linux 下僵尸进程的清理方法
Unix/LinuxC技术 jackx 2013-8-15 17:58
linux下的程序分析工具——gprof
Unix/LinuxC技术 jackx 2013-8-13 18:24
这个更界面化: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
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
Linux查看文件句柄占用多的进程 ,查看Linux某进程的句柄数,并通过ulimit -n 单个进程打开的最大文件句柄数量限制解决accept4() failed (24: Too many open files)
Unix/LinuxC技术 jackx 2013-8-8 14:49
查看当前进程的最大可以打开的文件数:
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
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的函数列表和C/C++函数列表。
Unix/LinuxC技术 jackx 2013-7-14 11:58
在“工具-》首选项-》语法”设置函数模式。
其实就是匹配函数的正则表达式。
一:让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$]
其实就是匹配函数的正则表达式。
一:让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$]
Linux下查看某个函数在哪个动态库里的简单方法
Unix/LinuxC技术 jackx 2013-7-14 11:35
Apache启动错误解决
Unix/LinuxC技术 jackx 2013-7-10 21:13
[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
添加:
127.0.0.1 jackxiang.localdomain
[常用命令]xargs的i参数
Unix/LinuxC技术 jackx 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技术 jackx 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
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技术 jackx 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