Linux服务器查看占用IO较高的程序
Unix/LinuxC技术 jackxiang 2014-11-22 12:01
开启IO监控:
sysctl vm.block_dump=1
#或
echo 1 >/proc/sys/vm/block_dump
开启后内核会将IO读写dump到日记,用dmesg查看:
dmesg
进程读写block到磁盘dm-0:
mysqld(7822): READ block 78196624 on dm-0
kjournald(529): WRITE block 211136 on dm-0
bash(8336): dirtied inode 7391146 (dmesg) on dm-0
统计当前占用IO最高的10个进程:
dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10
摘处:http://www.haiyun.me/archives/linux-dmesg-io-dump.html
sysctl vm.block_dump=1
#或
echo 1 >/proc/sys/vm/block_dump
开启后内核会将IO读写dump到日记,用dmesg查看:
dmesg
进程读写block到磁盘dm-0:
mysqld(7822): READ block 78196624 on dm-0
kjournald(529): WRITE block 211136 on dm-0
bash(8336): dirtied inode 7391146 (dmesg) on dm-0
统计当前占用IO最高的10个进程:
dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10
摘处:http://www.haiyun.me/archives/linux-dmesg-io-dump.html
转贴,Android手机一键Root原理分析,如何获取到root的原理分析。
Unix/LinuxC技术 jackxiang 2014-11-21 17:50
背景:android手机是linux内核的手机,当然linus自己可能发现漏洞,但同时其linux是开源的,代码是公开的,只要能读取其root的一个su的机制,及内核相关权限代码,可能发现各种漏洞,有些漏洞是内核自己的,比如linus作为linux之父亲,自己都提交一个,有些呢是程序调用时需要用root去获取如某些设备权限等,此时会编译原理的大牛就可以在此处作文章了,经过努力是可以实现提权的,再就是利用如linux下多进程的原理:如linux内核会对孤儿进程会用1号进程去收养,恶意创建N多进程后,其adb崩溃重启瞬间没法让1号进程去执行降权,此时adb就是root,这是一个内核和应用程序相结合的提权,总之,提权这种事情都对linux的内核较熟悉,对多进程啊,对哪些地方需要root的代码有研究,也就是黑发生在内部,提权拿钱这种事情,不光linux系统,人类这个大的系统也有类似的情形,叫专政策漏洞,在法律灰色地带干赚钱,法律这套体系已经被他摸透了,已经被root了,法律不健全,或故意不打补丁引起的,所以需要开源、开放、透明,一块打补丁,所谓政策开放、透明、在法制下阳光运行就是这个理儿。
阅读全文
![](template/trielegant/images/readmore.gif)
Linux操作系统下生成一个指定大小的文件
Unix/LinuxC技术 jackxiang 2014-11-19 17:56
磁盘预留空间的实验:
1、首先在要预留空间的分区上使用dd命令生成一个指定大小的文件:
创建一个10M的文件,名字是foobar:
# dd if=/dev/zero of=/home/foobar bs=1K count=10000
In Unix-like operating systems, /dev/zero is a special file that provides as many null characters (ASCII NULL, 0x00; not ASCII character "digit zero", "0", 0x30) as are read from it. One of the typical uses is to provide a character stream for overwriting information. Another might be to generate a clean file of a certain size. Using mmap to map /dev/zero to RAM is the BSD way of implementing shared memory.
2、将这个文件格式化:
# mke2fs -vFm0 /home/foobar 100000000 //(1K * 10000)
3、将这个文件mount,之后就可以向这个文件中写内容了,就好比向一个目录中写内容一样:
# mount -o loop home/foobar /mnt/mountpoint
摘自:http://blog.csdn.net/penn902/article/details/5746606
更多:http://blog.chinaunix.net/uid-8504518-id-2030389.html
1、首先在要预留空间的分区上使用dd命令生成一个指定大小的文件:
创建一个10M的文件,名字是foobar:
# dd if=/dev/zero of=/home/foobar bs=1K count=10000
In Unix-like operating systems, /dev/zero is a special file that provides as many null characters (ASCII NULL, 0x00; not ASCII character "digit zero", "0", 0x30) as are read from it. One of the typical uses is to provide a character stream for overwriting information. Another might be to generate a clean file of a certain size. Using mmap to map /dev/zero to RAM is the BSD way of implementing shared memory.
2、将这个文件格式化:
# mke2fs -vFm0 /home/foobar 100000000 //(1K * 10000)
3、将这个文件mount,之后就可以向这个文件中写内容了,就好比向一个目录中写内容一样:
# mount -o loop home/foobar /mnt/mountpoint
摘自:http://blog.csdn.net/penn902/article/details/5746606
更多:http://blog.chinaunix.net/uid-8504518-id-2030389.html
Linux双网卡配置两个网关导致网络无法使用
Unix/LinuxC技术 jackxiang 2014-11-17 23:32
Linux服务器有两个网卡,配置eth0为公网使用,eth1为内网使用。
分别为两个网卡配置IP地址,DNS,网关等。重启生效后,发现无法访问公网,ping网关也能ping通,ping同一个网关下的其他公网地址也能ping通。
1> 刚开始ping的时使用域名,怀疑是DNS无法解析,遂直接ping IP地址,同样无法ping,排除与DNS的关系。
2> 由于能够ping同一个网关下的IP地址,所以服务器网卡等肯定没有问题。应该还是网卡配置导致。
3> 后来仔细检查eth0和eth1的配置,发现配置了两个网关。其中eth1配置了内网的网关,修改eht1的网关与eth0一致后,问题解决。
上述问题还是比较容易犯,配置网卡的时候通常都是和别的环境对照着配,稍不注意,就会配置多个网关。
来自:http://www.linuxidc.com/Linux/2011-03/32955.htm
分别为两个网卡配置IP地址,DNS,网关等。重启生效后,发现无法访问公网,ping网关也能ping通,ping同一个网关下的其他公网地址也能ping通。
1> 刚开始ping的时使用域名,怀疑是DNS无法解析,遂直接ping IP地址,同样无法ping,排除与DNS的关系。
2> 由于能够ping同一个网关下的IP地址,所以服务器网卡等肯定没有问题。应该还是网卡配置导致。
3> 后来仔细检查eth0和eth1的配置,发现配置了两个网关。其中eth1配置了内网的网关,修改eht1的网关与eth0一致后,问题解决。
上述问题还是比较容易犯,配置网卡的时候通常都是和别的环境对照着配,稍不注意,就会配置多个网关。
来自:http://www.linuxidc.com/Linux/2011-03/32955.htm
[实践OK]u盘制作启动盘后空间容量变小解决方法
Unix/LinuxC技术 jackxiang 2014-11-15 20:56
背景:前两天搞那个笔记本光驱位启动偶尔出现启动不对,给试着做了一个U盘作为启动盘后,发现插入后,只有8M。
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>diskpart
Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上: USER-2S1CISV9DB
DISKPART> list disk
磁盘 ### 状态 大小 可用 Dyn Gpt
-------- ------------- ------- ------- --- ---
磁盘 0 联机 119 GB 8 MB
磁盘 1 联机 465 GB 1024 KB
磁盘 2 联机 3840 MB 64 KB
DISKPART> select disk 2
磁盘 2 现在是所选磁盘。
DISKPART> clean
DiskPart 成功地清除了磁盘。
DISKPART>
第二步,不能直接在盘符上点格式化,是格式化不了的。
右击计算机,选择管理,进入磁盘管理,能看到u盘分区是未分配(黑色),右击,新建分区,后格式化,一直下一步就OK了。
参考:http://wenku.baidu.com/link?url=GdwdGJFfmxY-cWkAjf0nuUMxehOILyFnc20iwmUNtsF-FIG_WttKC4BSiiC1FKAx2ls9P3DoXJ1pME7VOyhr4_arATMkqMdCuL0wMv3bZLW
摘自:http://jingyan.baidu.com/article/b24f6c82dddece86bee5da67.html
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>diskpart
Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上: USER-2S1CISV9DB
DISKPART> list disk
磁盘 ### 状态 大小 可用 Dyn Gpt
-------- ------------- ------- ------- --- ---
磁盘 0 联机 119 GB 8 MB
磁盘 1 联机 465 GB 1024 KB
磁盘 2 联机 3840 MB 64 KB
DISKPART> select disk 2
磁盘 2 现在是所选磁盘。
DISKPART> clean
DiskPart 成功地清除了磁盘。
DISKPART>
第二步,不能直接在盘符上点格式化,是格式化不了的。
右击计算机,选择管理,进入磁盘管理,能看到u盘分区是未分配(黑色),右击,新建分区,后格式化,一直下一步就OK了。
参考:http://wenku.baidu.com/link?url=GdwdGJFfmxY-cWkAjf0nuUMxehOILyFnc20iwmUNtsF-FIG_WttKC4BSiiC1FKAx2ls9P3DoXJ1pME7VOyhr4_arATMkqMdCuL0wMv3bZLW
摘自:http://jingyan.baidu.com/article/b24f6c82dddece86bee5da67.html
[实践OK]php的coredump怎么看?段错误等造成死机问题的分析, apache的coredump文件及其它像swoole这样的出现崩溃查找问题在哪行的原理。
Unix/LinuxC技术 jackxiang 2014-11-14 16:58
设置一下吐核,按Swoole官方的Wiki教程,设置一下吐核,From: https://wiki.swoole.com/wiki/page/10.html :
一、开启CoreDump:
ulimit -c #查看
#ulimit -c unlimited
使用gdb来查看core dump信息。core文件一般在当前目录,如果操作系统做了处理,将core dump文件放置到其他目录,请替换为相应的路径
二、设置内核参数将吐的核放到指定目录下指定格式存放:
kernel.core_pattern = /data/core_files/core-%e-%p-%t
通过ulimit -c命令查看当前coredump文件的限制
ulimit -c
打开core dump
ulimit -c unlimited
三、调试:
#gdb /usr/bin/httpd core.123
gdb /usr/local/nginx/sbin/nginx core.456
四、在GDB里使用bt命令调试等:
在gdb下输入bt查看调用栈信息
(gdb)bt
Program terminated with signal 11, Segmentation fault.
#0 0x00007f1cdbe205e0 in swServer_onTimer (reactor=<value optimized out>, event=...)
at /usr/local/php/swoole-swoole-1.5.9b/src/network/Server.c:92
92 serv->onTimer(serv, timer_node->interval);
Missing separate debuginfos, use: debuginfo-install php-cli-5.3.3-22.el6.x86_64
在gdb中使用f指令查看代码段
(gdb)f 1
(gdb)f 0
五、像这种退出不是段错误,没有Coredump的:
==> /data/logs/nginx/error.log <==
2017/08/16 11:56:52 [notice] 41234#0: signal 17 (SIGCHLD) received
2017/08/16 11:56:52 [notice] 41234#0: worker process 41237 exited with code 2
2017/08/16 11:56:52 [alert] 41234#0: worker process 41237 exited with fatal code 2 and cannot be respawned
2017/08/16 11:56:52 [notice] 41234#0: signal 29 (SIGIO) received
2017/08/16 11:56:52 [emerg] 41236#0: load ip map file error: /usr/local/nginx/conf/ip.map
2017/08/16 11:56:52 [notice] 41234#0: signal 17 (SIGCHLD) received
2017/08/16 11:56:52 [notice] 41234#0: worker process 41236 exited with code 2
2017/08/16 11:56:52 [alert] 41234#0: worker process 41236 exited with fatal code 2 and cannot be respawned
原因是:一个文件不存在,故意移动了下:
mv /usr/local/nginx/conf/ip.map /usr/local/nginx/conf/ip.map.bak
===================================================================================
使用gdb来查看core dump信息。core文件一般在当前目录,如果操作系统做了处理,将core dump文件放置到其他目录,请替换为相应的路径
gdb php core
gdb php /tmp/core.4596
在gdb下输入bt查看调用栈信息
(gdb)bt
Program terminated with signal 11, Segmentation fault.
#0 0x00007f1cdbe205e0 in swServer_onTimer (reactor=<value optimized out>, event=...)
at /usr/local/php/swoole-swoole-1.5.9b/src/network/Server.c:92
92 serv->onTimer(serv, timer_node->interval);
Missing separate debuginfos, use: debuginfo-install php-cli-5.3.3-22.el6.x86_64
在gdb中使用f指令查看代码段
(gdb)f 1
(gdb)f 0
对gdb下f命令的实践,能显示哪一行出了问题:
(gdb) bt
#0 0x00007ffff7b01980 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x00007ffff7a924a0 in _IO_new_file_underflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at fileops.c:612
#2 0x00007ffff7a9342e in __GI__IO_default_uflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at genops.c:436
#3 0x00007ffff7a753b3 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=argptr@entry=0x7fffffffe368, errp=errp@entry=0x0) at vfscanf.c:600
#4 0x00007ffff7a83a19 in __isoc99_scanf (format=<optimized out>) at isoc99_scanf.c:37
#5 0x00000000004006d4 in creat () at nodedemo.c:24
#6 0x000000000040075b in main () at nodedemo.c:46
(gdb) f 5
#5 0x00000000004006d4 in creat () at nodedemo.c:24
24 }
(gdb) f 2
#2 0x00007ffff7a9342e in __GI__IO_default_uflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at genops.c:436
436 int ch = _IO_UNDERFLOW (fp);
如果为0,需要修改/etc/security/limits.conf,进行limit设置。
开启core-dump后,一旦程序发生异常,会将进程导出到文件。对于调查程序问题有很大的帮助
来自:http://wiki.swoole.com/wiki/page/10.html http://wiki.swoole.com/wiki/page/11.html
—————————————————————————————————————————————
记录一下。
1. ulimit -S -c unlimited
2. 在apache主配置文件中增加一行:CoreDumpDirectory /var/apache_coredump #目录随意
3. chown修改/var/apache_coredump的权限为apache子进程可写
注意:不要开启太久,core文件太多。占用太多磁盘空间
调试
gdb /usr/bin/httpd core.123
apache的coredump
来自:http://5iwww.blog.51cto.com/856039/761077
阅读全文
一、开启CoreDump:
ulimit -c #查看
#ulimit -c unlimited
使用gdb来查看core dump信息。core文件一般在当前目录,如果操作系统做了处理,将core dump文件放置到其他目录,请替换为相应的路径
二、设置内核参数将吐的核放到指定目录下指定格式存放:
kernel.core_pattern = /data/core_files/core-%e-%p-%t
通过ulimit -c命令查看当前coredump文件的限制
ulimit -c
打开core dump
ulimit -c unlimited
三、调试:
#gdb /usr/bin/httpd core.123
gdb /usr/local/nginx/sbin/nginx core.456
四、在GDB里使用bt命令调试等:
在gdb下输入bt查看调用栈信息
(gdb)bt
Program terminated with signal 11, Segmentation fault.
#0 0x00007f1cdbe205e0 in swServer_onTimer (reactor=<value optimized out>, event=...)
at /usr/local/php/swoole-swoole-1.5.9b/src/network/Server.c:92
92 serv->onTimer(serv, timer_node->interval);
Missing separate debuginfos, use: debuginfo-install php-cli-5.3.3-22.el6.x86_64
在gdb中使用f指令查看代码段
(gdb)f 1
(gdb)f 0
五、像这种退出不是段错误,没有Coredump的:
==> /data/logs/nginx/error.log <==
2017/08/16 11:56:52 [notice] 41234#0: signal 17 (SIGCHLD) received
2017/08/16 11:56:52 [notice] 41234#0: worker process 41237 exited with code 2
2017/08/16 11:56:52 [alert] 41234#0: worker process 41237 exited with fatal code 2 and cannot be respawned
2017/08/16 11:56:52 [notice] 41234#0: signal 29 (SIGIO) received
2017/08/16 11:56:52 [emerg] 41236#0: load ip map file error: /usr/local/nginx/conf/ip.map
2017/08/16 11:56:52 [notice] 41234#0: signal 17 (SIGCHLD) received
2017/08/16 11:56:52 [notice] 41234#0: worker process 41236 exited with code 2
2017/08/16 11:56:52 [alert] 41234#0: worker process 41236 exited with fatal code 2 and cannot be respawned
原因是:一个文件不存在,故意移动了下:
mv /usr/local/nginx/conf/ip.map /usr/local/nginx/conf/ip.map.bak
===================================================================================
使用gdb来查看core dump信息。core文件一般在当前目录,如果操作系统做了处理,将core dump文件放置到其他目录,请替换为相应的路径
gdb php core
gdb php /tmp/core.4596
在gdb下输入bt查看调用栈信息
(gdb)bt
Program terminated with signal 11, Segmentation fault.
#0 0x00007f1cdbe205e0 in swServer_onTimer (reactor=<value optimized out>, event=...)
at /usr/local/php/swoole-swoole-1.5.9b/src/network/Server.c:92
92 serv->onTimer(serv, timer_node->interval);
Missing separate debuginfos, use: debuginfo-install php-cli-5.3.3-22.el6.x86_64
在gdb中使用f指令查看代码段
(gdb)f 1
(gdb)f 0
对gdb下f命令的实践,能显示哪一行出了问题:
(gdb) bt
#0 0x00007ffff7b01980 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1 0x00007ffff7a924a0 in _IO_new_file_underflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at fileops.c:612
#2 0x00007ffff7a9342e in __GI__IO_default_uflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at genops.c:436
#3 0x00007ffff7a753b3 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=argptr@entry=0x7fffffffe368, errp=errp@entry=0x0) at vfscanf.c:600
#4 0x00007ffff7a83a19 in __isoc99_scanf (format=<optimized out>) at isoc99_scanf.c:37
#5 0x00000000004006d4 in creat () at nodedemo.c:24
#6 0x000000000040075b in main () at nodedemo.c:46
(gdb) f 5
#5 0x00000000004006d4 in creat () at nodedemo.c:24
24 }
(gdb) f 2
#2 0x00007ffff7a9342e in __GI__IO_default_uflow (fp=0x7ffff7dd5640 <_IO_2_1_stdin_>) at genops.c:436
436 int ch = _IO_UNDERFLOW (fp);
如果为0,需要修改/etc/security/limits.conf,进行limit设置。
开启core-dump后,一旦程序发生异常,会将进程导出到文件。对于调查程序问题有很大的帮助
来自:http://wiki.swoole.com/wiki/page/10.html http://wiki.swoole.com/wiki/page/11.html
—————————————————————————————————————————————
记录一下。
1. ulimit -S -c unlimited
2. 在apache主配置文件中增加一行:CoreDumpDirectory /var/apache_coredump #目录随意
3. chown修改/var/apache_coredump的权限为apache子进程可写
注意:不要开启太久,core文件太多。占用太多磁盘空间
调试
gdb /usr/bin/httpd core.123
apache的coredump
来自:http://5iwww.blog.51cto.com/856039/761077
![](template/trielegant/images/readmore.gif)
[apr] rm: cannot remove `libtoolT’: No such file or directory
Unix/LinuxC技术 jackxiang 2014-11-8 12:57
背景:最新的apr-1.5.1.tar.gz,configure时出现cannot remove `libtoolT’: No such file or directory。
在configure里面RM='$RM -f' 这里的$RM后面一定有一个空格。 如果后面 ... 时apr报错解决rm: cannot remove `libtoolT': No such file or directory.
解决办法:42432 $RM "$cfgfile" 删除掉。也可以修改下:
在configure里面 RM='$RM -f' 这里的$RM后面一定有一个空格。 如果后面没有空格,直接连接减号,就依然会报错。把RM='$RM'改为RM='$RM -f'
注意,此文件下载到本地修改在上传会报错。建议用VI修改,来处:http://blog.csdn.net/a673341766/article/details/9078011
————————————————————————————————————————————————
在源码编译的apr./configure时,出现问题,具体详细信息如下:
OS:Centos 5.6 32bit
Apr Version:1.4.8
报错信息如下:
error info:rm: cannot remove `libtoolT': No such file or directory
解决方法如下:
打开configure文件
找到30055(不同的版本可能位置不一样)
将这行代码注释掉
# $RM "$cfgfile"
然后重新编译,问题可以解决
来自:http://sxhxt.blog.51cto.com/5126000/1301432
在configure里面RM='$RM -f' 这里的$RM后面一定有一个空格。 如果后面 ... 时apr报错解决rm: cannot remove `libtoolT': No such file or directory.
解决办法:42432 $RM "$cfgfile" 删除掉。也可以修改下:
在configure里面 RM='$RM -f' 这里的$RM后面一定有一个空格。 如果后面没有空格,直接连接减号,就依然会报错。把RM='$RM'改为RM='$RM -f'
注意,此文件下载到本地修改在上传会报错。建议用VI修改,来处:http://blog.csdn.net/a673341766/article/details/9078011
————————————————————————————————————————————————
在源码编译的apr./configure时,出现问题,具体详细信息如下:
OS:Centos 5.6 32bit
Apr Version:1.4.8
报错信息如下:
error info:rm: cannot remove `libtoolT': No such file or directory
解决方法如下:
打开configure文件
找到30055(不同的版本可能位置不一样)
将这行代码注释掉
# $RM "$cfgfile"
然后重新编译,问题可以解决
来自:http://sxhxt.blog.51cto.com/5126000/1301432
[实践OK]2014年Linux下源码安装Subversion及Apache成功实践,编译subversion里出现gcc的问题,想通过centos 6.6 升级gcc 不一定能解决error: C compiler cannot create executables问题。
Unix/LinuxC技术 jackxiang 2014-11-8 12:24
==========================================================================
安装成功参考URL,Linux下源码安装Subversion及Apache:
http://blog.csdn.net/tcpipstack/article/details/8680706
Apache 安装一定要加参数:--enable-dav --enable-so参数:
上面的模块都是双小中间短横,不是一个,是两个,前几次编译都给搞一个,没编译出来这个svn的动态so。
总结:出现这种情况有可能三种情况:
1)rpm包不全。
2)rpm包32位和64位混用。
3)可能给CFLAGS加上不同的参数了,在启动时就加上了,如方便编译arm,得清掉这样的影响。
————————————————————————————————————————————————————————————
背景:今天安装http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz 的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:
yum install glibc-*
还是不OK:
entos: yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
居然编译也依旧出现:
configure:4912: error: in `/data/software/subversion_Apache_SoftAll/apr-1.5.1':
configure:4915: error: C compiler cannot create executables
于是看了下:apr-1.5.1/config.log
configure:4864: gcc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w conftest.c >&5
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: error: unrecognized command line option "-mfpu=vfp"
这个玩意,想起来了,是编译树莓派时给在/root/.bashrc里加上的:
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
于是去了,去了还一样,还不行,明白了,去了以前影响还在,得:export CFLAGS="",于是好了。
一搜网上,N年前我的博文里也描述过类似的问题,但那是由于32位和64位不同的rpm包引起的:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1976088
我本来想升级gcc的,升级还是不行,于是自己写个简单的测试下,就发现了,如下:
试写一个:
#include <stdio.h>
int main(){
printf("Helo,World");
return 1;
}
make helo
cc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w helo.c -o helo
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: 错误:无法识别的命令行选项“-mfpu=vfp”
cc1: 错误:无法识别的命令行选项“-mfloat-abi=hard”
helo.c:1: 错误:-mtune=switch所带参数(arm1176jzf-s)不正确
make: *** [helo] 错误 1
想起来了:做树莓派时给加了新的参数:
获得ARM GCC 交叉编译器
cd work/raspberry
git clone git://github.com/raspberrypi/tools.git
这里官网下载可能比较慢,可以到我的资源下载 为 bcm2708hardfp编译器,和官方一样的
http://download.csdn.net/detail/canyue102/6725615
安装该编译器,把编译器路径加入到环境变量中:
gedit ~/.bashrc
在最后一行添加:
export PATH=$PATH:/your_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
在终端执行:
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
上面加export来自:http://www.csdn123.com/html/technology/2013/20131218/3796.htm
/gcc-build-4.8.0# vi ~/.bashrc
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
——————————————————————————————————————————————————————————
开始摘录:
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
http://blog.csdn.net/magicyang87/article/details/7972169
1.下载源码包
wget http: //ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
解压: tar -jxvf gcc-4.8.0.tar.bz2
2.下载编译所需依赖库
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
3.建立编译输出目录
mkdir gcc-build-4.8.0
4.进入此目录,执行以下命令,生成makefile文件
cd gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
5.编译
make -j4
如果编译成功,则时间是比较长的,半个小时左右,所以如果你看它一直在输出没有立刻停下来,应该很开心!
6.安装
sudo make install
7.切换GCC到新版
确定新安装的GCC的路径,一般默认在/usr/local/bin下。可以先updatedb,然后locate gcc-4.8|tail找一下
ls /usr/local/bin | grep gcc
添加新GCC到可选项,倒数第三个是名字,倒数第二个参数为新GCC路径,最后一个参数40为优先级,设大一些之后就自动使用新版了
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40
8.确认当前版本已经切换为新版
gcc -v
我这里用ssh远程的,发现版本没变,断开重练下,重新生成会话后发现变成了4.8了!
看起来很顺有木有?!
心酸的弯路不知道走了多少呢!
以下是辛酸史。。
=================万恶的分割线===========================
首先是参考我们伟大的头儿的博客, http://blog.csdn.net/yanxiangtianji/article/details/8365630。
坑一、libstdc++-static
他这过程也是参考各种博客集成而来,因为我网上看大部分第一步都是: yum install glibc-static libstdc++-static -y
可其实centos的源上根本没有 libstdc++-static,第一个是有的,请安装。
坑爹的是,按照教程进行到编译make 之后,查看目录下的config.log 文件 ,搜索err,果然报 static- libstdc++的错!
这下我可认真了,死都要把 libstdc++-static装上。
首先,换centos的源,换了163的源(http://www.cnblogs.com/peterpanzsy/archive/2013/04/07/3003387.html),不行,后来跑oschina上提问,大神说epel源上应该有,于是换epel的源,仍然屁都没有!
于是去下rpm包,centos的软件包又不多,只能去下fedora的,一个家族的可以一试,epel源两者也通用的。
rpm -ivh xxx.rpm
结果出现依赖问题,于是下了这么一堆:
可是安装第一个的时候又跟系统自带的4.4.6版本的冲突,尼玛的,yum remove又因为依赖关系不可行,总不能卸载自带的gcc 4.4.7吧,后面编译新的gcc还要靠它呢,不能冲动。
今天上午就是乱搞,搞到报kernel的错,下午花了一个小时重装的系统。
还有一个原因,大神误以为他当年6.3的centos是成功yum装上了 libstdc++-static,于是我顺道重装的时候换成了centos6.3的版本,开始是6.4的其实。
最后发现6.3的源上也没有这个神奇的东西。
于是对安装 libstdc++-static绝望了。。。放弃。
坑二、三个依赖库是否要手动编译安装的问题。
进入gcc目录,执行:
./contrib/download_prerequisites
下正确版本的载那三个依赖的库。
大神说:可惜它不能自动配置编译安装,可以用我写的这个脚本来执行(假设当前是在contrib文件夹下):
cd gmd
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install
可是真的要装吗?尼玛装完之后显然会出问题的!至少在我的实践里。我在网上偶然间看到有人这么说了一句,放心上了。
这么手动一装之后,编译gcc,直接报两个error停掉了,然后就出现第一步搜到的 libstdc++-static错误。
后来跳过手动装gmd mpfr mpc之后,才执行了编译成功了。。。
坑三、共享库路径的问题
因为大神那篇博客里说以上的三个共享库不在系统默认路径下。
我们可以搜一下:locate mpc|grep so
确实有/usr/local/lib/libmpc.so
可是当我在 /etc/ld.so.conf.d下面加上/usr/local/lib路径后执行ldconfig又报错,估计下面没有找到合法的库文件吧。
于是去掉,并且没有产生什么影响。
我是真心不知道大神那个是怎么会那么复杂的。。
来自:http://blog.csdn.net/dyllove98/article/details/8917485
实践情况:
/gcc-4.8.0# ./contrib/download_prerequisites
cd ..
mkdir gcc-build-4.8.0
cd gcc-build-4.8.0
configure: error: in `/data/software/subversion_Apache_SoftAll/gcc-build-4.8.0':
configure: error: C compiler cannot create executables
See `config.log' for more details.
——————————————————不是这个问题,老老实实的安吧遇到确啥加上---------------------------
安装步骤原始来源:http://blog.csdn.net/tcpipstack/article/details/8680706
最新下载地址:
http://downloads.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2F&ts=1415418215&use_mirror=jaist
http://www.openssl.org/source/openssl-1.0.1j.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
解决 configure: error: C compiler cannot create executables
2014年03月17日 ⁄ Linux ⁄ 共 241字 ⁄ 暂无评论 ⁄ 被围观 2,049 views+
今天安装memcached的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:
yum install glibc-*
还是不OK:
entos: yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
——————————————————————————————————————————————————————————
安装APR
Apr & apr-util的下载地址:http://apr.apache.org/download.cgi
[plain] view plaincopy
cd apr-1.4.6
//
./buidconf
//
./configure -h
//
./configure --prefix=/usr/local/apr/
编译和Install
[plain] view plaincopy
make
make install
configure时出现rm: cannot remove `libtoolT': No such file or directory问题解决办法:https://jackxiang.com/post/7619/
安装APR-UTIL
下载地址:http://www.fayea.com/apache-mirror//apr/apr-util-1.5.1.tar.bz2
安装步骤:
[plain] view plaincopy
cd apr-util-1.5.1
./buildconf
./configure --prefix=/usr/local/apr-util/
./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr
make
make install
安装OpenSSL
下载OpenSSL,地址是http://www.openssl.org/source/openssl-1.0.1d.tar.gz
安装过程:
[plain] view plaincopy
#tar -xvf openssl-1.0.1d.tar.gz
#cd openssl-1.0.1d
#./config --prefix=/usr/local --openssldir=/usr/local/openssl
#make
#make test
#make install
安装PCRE
下载pare,地址:http://nchc.dl.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.gz
解压之后安装:
[plain] view plaincopy
cd pcre-8.32
./configure -h
./configure --prefix=/usr/local/pcre
make
make install
继续安装Apache HTTP Server,./configure 时加上参数 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre,这个问题就解决了:
[plain] view plaincopy
./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/
注意:Apache在安装时不会检查参数是否正确,错误的参数会直接被丢弃,不会报告给用户。但可以使用echo $?命令检查是否有错误,当输出结果为0时表示没有错误。
serf 这个库提供的是对http和https协议的支持。值得说明的是,1.8版本之前这里依赖的是neon,1.8之后改成了serf。这里用的是serf-1.2.1
编译:./configure --prefix=/usr/local/serf --with-apr-util=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
yum install expat
rpm -ql expat-2.0.1-11.el6_2.x86_64
/lib64/libexpat.so.1
/lib64/libexpat.so.1.5.2
vi /etc/ld.so.conf
/lib64/
这两行有用然后:
yum install expat
yum install expat-devel
./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install
安装subversion:
http://pkgs.fedoraproject.org/repo/pkgs/libserf/serf-1.3.4.tar.bz2/9820da2c46ee10773309f0de657cddfd/
serf-1.3.4.tar.bz2 放到那个subversion源码的temp目录下后:
root@119.10.6.23:/data/software/subversion_Apache_SoftAll/subversion-1.8.10# ./get-deps.sh
Local directory 'zlib' already exists; the downloaded copy won't be used
Local directory 'sqlite-amalgamation' already exists; the downloaded copy won't be used
Local directory 'apr' already exists; the downloaded copy won't be used
Local directory 'apr-util' already exists; the downloaded copy won't be used
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib \
--with-openssl --enable-maintainer-mode --with-serf=/usr/local/serf --enable-mod-activation
make && make install
检查svn是否支持http方式:
svn --version
配置svn请参考:http://blog.linuxeye.com/95.html
参考:
http://subversion.apache.org/docs/release-notes/1.8.html
http://code.google.com/p/serf/
1)建立版本库(Repository),配置subversion和http的关系:
mkdir -p /data/subversion/repositories
chown -R www:www /data/subversion/repositories
2)如果版本库的增改次数很频繁,可以写一个简单的脚本来实现快速调用:
3)接下来就是apache的配置了,这里要保证两个模块都已经正确放到模块目录中,检查是否安装成功看有没有加入下面两行:
安装成功会在/usr/local/apache2/conf/httpd.conf自己加入下面2行
LoadModule dav_svn_module /usr/local/subversion/libexec/mod_dav_svn.so
LoadModule authz_svn_module /usr/local/subversion/libexec/mod_authz_svn.so
4)Httpd下的svn扩展配置文件如下:
httpd.conf
5)配置文件里的文件:
cat /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.grp
admin: chluo jackxiang builder oscarzhu samonma yongwang bluexchen samliang phillipzhang dalazheng jasoncao ianzhang harry sally
ozzyad: marvin richard mandy ben amy vincent sam gary adam
ssd: kary
jgys_sz: zh_jgys lhq_jgys
haoyang: haoyang
mihekeji: mihekeji
cat /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.pwd
sally:Y.FJC2U7MqJOU
harry:udpIl6wCO.LuI
jackxiang:cCkclYr9pb98o
6)启动: /usr/local/apache2/bin/apachectl start
启动apache出现undefined symbol: dav_register_provider错误:
从网上找了原因,是因为编译apache的时候没有加上
--enable-dav --enable-so参数
是因为--enable-dav 启用davweb支持,是subversion+apache组合必选,缺少的话,在运行apache会出现undefined symbol: dav_register_provider的错误
重新编译了一遍,OK了。摘自:http://blog.sina.com.cn/s/blog_5d15305b0101cn6q.html
还不行:
解决方法:
svn安装在 /usr/local/subversion,检查/usr/local/subversion/modules,里面已包含mod_authz_svn.so 与 mod_dav_svn.so。
要将他们复制或链接到apache的modules目录中才可以。
以前在自己的Vmware下面配置成功过,上面这些是在自己的那个vps上配置,以前配置成功的链接,特别是关于https这块的配置,得参考:
https://jackxiang.com/post/4229/
安装成功参考URL,Linux下源码安装Subversion及Apache:
http://blog.csdn.net/tcpipstack/article/details/8680706
Apache 安装一定要加参数:--enable-dav --enable-so参数:
上面的模块都是双小中间短横,不是一个,是两个,前几次编译都给搞一个,没编译出来这个svn的动态so。
总结:出现这种情况有可能三种情况:
1)rpm包不全。
2)rpm包32位和64位混用。
3)可能给CFLAGS加上不同的参数了,在启动时就加上了,如方便编译arm,得清掉这样的影响。
————————————————————————————————————————————————————————————
背景:今天安装http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz 的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:
yum install glibc-*
还是不OK:
entos: yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
居然编译也依旧出现:
configure:4912: error: in `/data/software/subversion_Apache_SoftAll/apr-1.5.1':
configure:4915: error: C compiler cannot create executables
于是看了下:apr-1.5.1/config.log
configure:4864: gcc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w conftest.c >&5
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: error: unrecognized command line option "-mfpu=vfp"
这个玩意,想起来了,是编译树莓派时给在/root/.bashrc里加上的:
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
于是去了,去了还一样,还不行,明白了,去了以前影响还在,得:export CFLAGS="",于是好了。
一搜网上,N年前我的博文里也描述过类似的问题,但那是由于32位和64位不同的rpm包引起的:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1976088
我本来想升级gcc的,升级还是不行,于是自己写个简单的测试下,就发现了,如下:
试写一个:
#include <stdio.h>
int main(){
printf("Helo,World");
return 1;
}
make helo
cc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w helo.c -o helo
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: 错误:无法识别的命令行选项“-mfpu=vfp”
cc1: 错误:无法识别的命令行选项“-mfloat-abi=hard”
helo.c:1: 错误:-mtune=switch所带参数(arm1176jzf-s)不正确
make: *** [helo] 错误 1
想起来了:做树莓派时给加了新的参数:
获得ARM GCC 交叉编译器
cd work/raspberry
git clone git://github.com/raspberrypi/tools.git
这里官网下载可能比较慢,可以到我的资源下载 为 bcm2708hardfp编译器,和官方一样的
http://download.csdn.net/detail/canyue102/6725615
安装该编译器,把编译器路径加入到环境变量中:
gedit ~/.bashrc
在最后一行添加:
export PATH=$PATH:/your_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
在终端执行:
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
上面加export来自:http://www.csdn123.com/html/technology/2013/20131218/3796.htm
/gcc-build-4.8.0# vi ~/.bashrc
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
——————————————————————————————————————————————————————————
开始摘录:
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
http://blog.csdn.net/magicyang87/article/details/7972169
1.下载源码包
wget http: //ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
解压: tar -jxvf gcc-4.8.0.tar.bz2
2.下载编译所需依赖库
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
3.建立编译输出目录
mkdir gcc-build-4.8.0
4.进入此目录,执行以下命令,生成makefile文件
cd gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
5.编译
make -j4
如果编译成功,则时间是比较长的,半个小时左右,所以如果你看它一直在输出没有立刻停下来,应该很开心!
6.安装
sudo make install
7.切换GCC到新版
确定新安装的GCC的路径,一般默认在/usr/local/bin下。可以先updatedb,然后locate gcc-4.8|tail找一下
ls /usr/local/bin | grep gcc
添加新GCC到可选项,倒数第三个是名字,倒数第二个参数为新GCC路径,最后一个参数40为优先级,设大一些之后就自动使用新版了
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40
8.确认当前版本已经切换为新版
gcc -v
我这里用ssh远程的,发现版本没变,断开重练下,重新生成会话后发现变成了4.8了!
看起来很顺有木有?!
心酸的弯路不知道走了多少呢!
以下是辛酸史。。
=================万恶的分割线===========================
首先是参考我们伟大的头儿的博客, http://blog.csdn.net/yanxiangtianji/article/details/8365630。
坑一、libstdc++-static
他这过程也是参考各种博客集成而来,因为我网上看大部分第一步都是: yum install glibc-static libstdc++-static -y
可其实centos的源上根本没有 libstdc++-static,第一个是有的,请安装。
坑爹的是,按照教程进行到编译make 之后,查看目录下的config.log 文件 ,搜索err,果然报 static- libstdc++的错!
这下我可认真了,死都要把 libstdc++-static装上。
首先,换centos的源,换了163的源(http://www.cnblogs.com/peterpanzsy/archive/2013/04/07/3003387.html),不行,后来跑oschina上提问,大神说epel源上应该有,于是换epel的源,仍然屁都没有!
于是去下rpm包,centos的软件包又不多,只能去下fedora的,一个家族的可以一试,epel源两者也通用的。
rpm -ivh xxx.rpm
结果出现依赖问题,于是下了这么一堆:
可是安装第一个的时候又跟系统自带的4.4.6版本的冲突,尼玛的,yum remove又因为依赖关系不可行,总不能卸载自带的gcc 4.4.7吧,后面编译新的gcc还要靠它呢,不能冲动。
今天上午就是乱搞,搞到报kernel的错,下午花了一个小时重装的系统。
还有一个原因,大神误以为他当年6.3的centos是成功yum装上了 libstdc++-static,于是我顺道重装的时候换成了centos6.3的版本,开始是6.4的其实。
最后发现6.3的源上也没有这个神奇的东西。
于是对安装 libstdc++-static绝望了。。。放弃。
坑二、三个依赖库是否要手动编译安装的问题。
进入gcc目录,执行:
./contrib/download_prerequisites
下正确版本的载那三个依赖的库。
大神说:可惜它不能自动配置编译安装,可以用我写的这个脚本来执行(假设当前是在contrib文件夹下):
cd gmd
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install
可是真的要装吗?尼玛装完之后显然会出问题的!至少在我的实践里。我在网上偶然间看到有人这么说了一句,放心上了。
这么手动一装之后,编译gcc,直接报两个error停掉了,然后就出现第一步搜到的 libstdc++-static错误。
后来跳过手动装gmd mpfr mpc之后,才执行了编译成功了。。。
坑三、共享库路径的问题
因为大神那篇博客里说以上的三个共享库不在系统默认路径下。
我们可以搜一下:locate mpc|grep so
确实有/usr/local/lib/libmpc.so
可是当我在 /etc/ld.so.conf.d下面加上/usr/local/lib路径后执行ldconfig又报错,估计下面没有找到合法的库文件吧。
于是去掉,并且没有产生什么影响。
我是真心不知道大神那个是怎么会那么复杂的。。
来自:http://blog.csdn.net/dyllove98/article/details/8917485
实践情况:
/gcc-4.8.0# ./contrib/download_prerequisites
cd ..
mkdir gcc-build-4.8.0
cd gcc-build-4.8.0
configure: error: in `/data/software/subversion_Apache_SoftAll/gcc-build-4.8.0':
configure: error: C compiler cannot create executables
See `config.log' for more details.
——————————————————不是这个问题,老老实实的安吧遇到确啥加上---------------------------
安装步骤原始来源:http://blog.csdn.net/tcpipstack/article/details/8680706
最新下载地址:
http://downloads.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2F&ts=1415418215&use_mirror=jaist
http://www.openssl.org/source/openssl-1.0.1j.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
解决 configure: error: C compiler cannot create executables
2014年03月17日 ⁄ Linux ⁄ 共 241字 ⁄ 暂无评论 ⁄ 被围观 2,049 views+
今天安装memcached的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:
yum install glibc-*
还是不OK:
entos: yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
——————————————————————————————————————————————————————————
安装APR
Apr & apr-util的下载地址:http://apr.apache.org/download.cgi
[plain] view plaincopy
cd apr-1.4.6
//
./buidconf
//
./configure -h
//
./configure --prefix=/usr/local/apr/
编译和Install
[plain] view plaincopy
make
make install
configure时出现rm: cannot remove `libtoolT': No such file or directory问题解决办法:https://jackxiang.com/post/7619/
安装APR-UTIL
下载地址:http://www.fayea.com/apache-mirror//apr/apr-util-1.5.1.tar.bz2
安装步骤:
[plain] view plaincopy
cd apr-util-1.5.1
./buildconf
./configure --prefix=/usr/local/apr-util/
./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr
make
make install
安装OpenSSL
下载OpenSSL,地址是http://www.openssl.org/source/openssl-1.0.1d.tar.gz
安装过程:
[plain] view plaincopy
#tar -xvf openssl-1.0.1d.tar.gz
#cd openssl-1.0.1d
#./config --prefix=/usr/local --openssldir=/usr/local/openssl
#make
#make test
#make install
安装PCRE
下载pare,地址:http://nchc.dl.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.gz
解压之后安装:
[plain] view plaincopy
cd pcre-8.32
./configure -h
./configure --prefix=/usr/local/pcre
make
make install
继续安装Apache HTTP Server,./configure 时加上参数 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre,这个问题就解决了:
[plain] view plaincopy
./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/
注意:Apache在安装时不会检查参数是否正确,错误的参数会直接被丢弃,不会报告给用户。但可以使用echo $?命令检查是否有错误,当输出结果为0时表示没有错误。
serf 这个库提供的是对http和https协议的支持。值得说明的是,1.8版本之前这里依赖的是neon,1.8之后改成了serf。这里用的是serf-1.2.1
编译:./configure --prefix=/usr/local/serf --with-apr-util=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
yum install expat
rpm -ql expat-2.0.1-11.el6_2.x86_64
/lib64/libexpat.so.1
/lib64/libexpat.so.1.5.2
vi /etc/ld.so.conf
/lib64/
这两行有用然后:
yum install expat
yum install expat-devel
./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install
安装subversion:
http://pkgs.fedoraproject.org/repo/pkgs/libserf/serf-1.3.4.tar.bz2/9820da2c46ee10773309f0de657cddfd/
serf-1.3.4.tar.bz2 放到那个subversion源码的temp目录下后:
root@119.10.6.23:/data/software/subversion_Apache_SoftAll/subversion-1.8.10# ./get-deps.sh
Local directory 'zlib' already exists; the downloaded copy won't be used
Local directory 'sqlite-amalgamation' already exists; the downloaded copy won't be used
Local directory 'apr' already exists; the downloaded copy won't be used
Local directory 'apr-util' already exists; the downloaded copy won't be used
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib \
--with-openssl --enable-maintainer-mode --with-serf=/usr/local/serf --enable-mod-activation
make && make install
检查svn是否支持http方式:
svn --version
配置svn请参考:http://blog.linuxeye.com/95.html
参考:
http://subversion.apache.org/docs/release-notes/1.8.html
http://code.google.com/p/serf/
1)建立版本库(Repository),配置subversion和http的关系:
mkdir -p /data/subversion/repositories
chown -R www:www /data/subversion/repositories
2)如果版本库的增改次数很频繁,可以写一个简单的脚本来实现快速调用:
3)接下来就是apache的配置了,这里要保证两个模块都已经正确放到模块目录中,检查是否安装成功看有没有加入下面两行:
安装成功会在/usr/local/apache2/conf/httpd.conf自己加入下面2行
LoadModule dav_svn_module /usr/local/subversion/libexec/mod_dav_svn.so
LoadModule authz_svn_module /usr/local/subversion/libexec/mod_authz_svn.so
4)Httpd下的svn扩展配置文件如下:
httpd.conf
5)配置文件里的文件:
cat /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.grp
admin: chluo jackxiang builder oscarzhu samonma yongwang bluexchen samliang phillipzhang dalazheng jasoncao ianzhang harry sally
ozzyad: marvin richard mandy ben amy vincent sam gary adam
ssd: kary
jgys_sz: zh_jgys lhq_jgys
haoyang: haoyang
mihekeji: mihekeji
cat /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.pwd
sally:Y.FJC2U7MqJOU
harry:udpIl6wCO.LuI
jackxiang:cCkclYr9pb98o
6)启动: /usr/local/apache2/bin/apachectl start
启动apache出现undefined symbol: dav_register_provider错误:
从网上找了原因,是因为编译apache的时候没有加上
--enable-dav --enable-so参数
是因为--enable-dav 启用davweb支持,是subversion+apache组合必选,缺少的话,在运行apache会出现undefined symbol: dav_register_provider的错误
重新编译了一遍,OK了。摘自:http://blog.sina.com.cn/s/blog_5d15305b0101cn6q.html
还不行:
解决方法:
svn安装在 /usr/local/subversion,检查/usr/local/subversion/modules,里面已包含mod_authz_svn.so 与 mod_dav_svn.so。
要将他们复制或链接到apache的modules目录中才可以。
以前在自己的Vmware下面配置成功过,上面这些是在自己的那个vps上配置,以前配置成功的链接,特别是关于https这块的配置,得参考:
https://jackxiang.com/post/4229/
背景:这种情况一般是干下文件啥的,你在你亲戚家下载大文件到你的vps linux上,突然有事说要停电,此时正在一半,怎么办,那就是把当前进程放后台执行,第二步是脱离终端,于是你可以关掉ssh,走路坐车回家再看下完没有,下面这就是干这事的。
0)特别注意别一直有输入,用wget时有输入,这样对于第3部就需要按回车一瞬间输入命令,比较麻烦。
1)ctrl + Z (暂停)
2)bg %1
3)看通过2推到后台后还在下没(PID=6193):
jobs -l
[1]+ 6193 Running wget http://download.virtualbox.org/virtualbox/4.3.18/VirtualBox-4.3-4.3.18_96516_el6-1.x86_64.rpm &
4)后台,还没有脱离终端,于是,还得脱离终端:
(1)disown -h %1
(2)nohup -p 6193 [Linux下再开一个算是优点,第(1)个有个问题是只能在当前脱离终端里输入,新开终端无效,这样试试,发现: 我的是centos好像没有这个选项。]没有disown,但是可以使用nohup -p PID来获得disown同样的效果。
关掉终端,在其它终端再ps下,还在,不错:
ps aux|grep wget
root 6193 0.1 0.0 138500 2512 ? S 19:40 0:03 wget http://download.virtualbox.org/virtualbox/4.3.18/VirtualBox-4.3-4.3.18_96516_el6-1.x86_64.rpm
阅读全文
0)特别注意别一直有输入,用wget时有输入,这样对于第3部就需要按回车一瞬间输入命令,比较麻烦。
1)ctrl + Z (暂停)
2)bg %1
3)看通过2推到后台后还在下没(PID=6193):
jobs -l
[1]+ 6193 Running wget http://download.virtualbox.org/virtualbox/4.3.18/VirtualBox-4.3-4.3.18_96516_el6-1.x86_64.rpm &
4)后台,还没有脱离终端,于是,还得脱离终端:
(1)disown -h %1
(2)nohup -p 6193 [Linux下再开一个算是优点,第(1)个有个问题是只能在当前脱离终端里输入,新开终端无效,这样试试,发现: 我的是centos好像没有这个选项。]没有disown,但是可以使用nohup -p PID来获得disown同样的效果。
关掉终端,在其它终端再ps下,还在,不错:
ps aux|grep wget
root 6193 0.1 0.0 138500 2512 ? S 19:40 0:03 wget http://download.virtualbox.org/virtualbox/4.3.18/VirtualBox-4.3-4.3.18_96516_el6-1.x86_64.rpm
![](template/trielegant/images/readmore.gif)
(转)Linux在指定文件夹里查找指定文件并清空其内容 ...
Unix/LinuxC技术 jackxiang 2014-11-7 10:43
背景:最近发现Log目录里各种服务的日志很大,想把它们都清空(非删除)。可是文件又多,位置又不一样,于是写了个脚本,可以快速解决以上问题:
我的实践Ok如下:
解释:在/home/www目录下查找后缀是.log的所有文件,并将其内容清空!
来自:http://bbs.51cto.com/thread-1072175-1.html
http://www.jbxue.com/LINUXjishu/14410.html
附录:
linux下清空文件内容
1、> /var/log/asterisk/messages 或者 :> /var/log/asterisk/messages (文件大小被截为0字节)
2、cat /dev/null > /var/log/asterisk/messages (文件大小被截为0字节)
3、echo "" > /var/log/asterisk/messages(文件大小被截为1字节)
我的实践Ok如下:
解释:在/home/www目录下查找后缀是.log的所有文件,并将其内容清空!
来自:http://bbs.51cto.com/thread-1072175-1.html
http://www.jbxue.com/LINUXjishu/14410.html
附录:
linux下清空文件内容
1、> /var/log/asterisk/messages 或者 :> /var/log/asterisk/messages (文件大小被截为0字节)
2、cat /dev/null > /var/log/asterisk/messages (文件大小被截为0字节)
3、echo "" > /var/log/asterisk/messages(文件大小被截为1字节)
Nginx代理Apache模式的SVN
Unix/LinuxC技术 jackxiang 2014-11-7 10:17
背景:从最早还是svn的模块和apache结合紧密一些,而后来Nginx的崛起后,也很多服务器用的是Nginx,这块个人认为Nginx应该以Https的形式来代码Apache内部的http,这样更安全一些。
阅读全文
![](template/trielegant/images/readmore.gif)
查询linux自动重新启动原因
Unix/LinuxC技术 jackxiang 2014-11-3 20:29
背景:今天自己的vps服务器突然重启了,不知何原因,下面这些方法好像也没看明白,先写这儿。
1、Linux 服务器因 CPU 温度过高自动重启
http://www.s2.cn/news.php?id=33
2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html
3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'
4、linux启动日志: /var/log/boot.log
来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
1、Linux 服务器因 CPU 温度过高自动重启
http://www.s2.cn/news.php?id=33
2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html
3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'
4、linux启动日志: /var/log/boot.log
来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
linux 多线程应用–线程内部私有的全局变量,多线程内的全局变量(私有数据) 。
Unix/LinuxC技术 jackxiang 2014-10-28 10:18
[实践OK]linux重定向及nohup不输出/无输出的方法,用strace调试程序的输出输入文件的方法涉及到linux 重定向 标准错误与标准输出到同一文件 。使用nohup执行多个命令。
Unix/LinuxC技术 jackxiang 2014-10-22 23:26
使用nohup执行多个命令:
背景:也就是如ssh登录后发邮件,用nohup可以快速推到后台,更快进入终端,不用直到发完邮件才进入#shell下。
nohup /usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf >/dev/null 2>&1 >/dev/null &
nohup /usr/local/cronolog/sbin/cronolog /data/logs/lighttpd/img.bbs.cntv.cn-access_%Y%m%d.log >/dev/null 2>&1 >/dev/null &
实践成功来自:https://blog.csdn.net/qq_27870421/article/details/90753948
From:http://www.tuxradar.com/answers/215
发邮件链接:
https://jackxiang.com/post/7579/
linux 重定向 标准错误与标准输出到同一文件 :
特别是那个错误输出啥的,这块strace就是一例:
strace php include.php > abcdef.txt //这样显然是没法实现把输出导入到abcdef.txt文件的啦。
重定向标准错误到标准输出
cat foo 2>&1 得出:strace php include.php > abcdef.txt 2>&1 ,还有别的写法参考来自:
http://blog.chinaunix.net/uid-21142030-id-3211182.html
------------------------------------------------------------------------------------------------------------------------
这种方式的输出重定向使得以 word 扩展结果为名的文件被打开并通过文件描述符 n 从尾部添加。如果没有指定 n 就使用标准输出 (文件描述符
1)。如果文件不存在,它将被创建。
重定向的一般形式是:
[n]>>word
Redirecting Standard Output and Standard Error
Bash 允许使用这种结构将标准输出和标准错误 (文件描述符 1 和 2) 重定向到以 word 扩展结果为名的文件中。
有两种重定向标准输出/标准错误的形式:
&>word
还有
>&word
两种形式中,推荐使用第一种。它与
>word 2>&1
在语义上等价。
下列描述中,重定向操作符之后的词如果没有特殊说明,都要经过 brace expansion, tilde expansion, parameter expansion, command substitution, arithmetic
expansion, quote removal, pathname expansion, 还有 word splitting。如果扩展为多于一个词, bash 将报错。
注意重定向的顺序非常重要。例如,命令
ls > dirlist 2>&1
将标准输出和标准错误重定向到文件 dirlist, 而命令
ls 2>&1 > dirlist
只会将标准输出重定向到文件 dirlist, 因为在标准输出被重定向到文件 dirlist 中之前,标准错误被复制为标准输出。
————————————————————————————————————————————————
先说一下linux重定向:
0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。
在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标号。例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:
# ls 1>/dev/null 2>/dev/null
还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:
# ls >/dev/null 2>&1
注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄:-)
由于使用nohup时,会自动将输出写入nohup.out文件中,如果文件很大的话,nohup.out就会不停的增大,这是我们不希望看到的,因此,可以利用/dev/null来解决这个问题。
(1)舍弃标准输出,将错误输出到log文件中
nohup ./program >/dev/null 2>log &
(2)如果错误信息也不想要的话:
nohup ./program >/dev/null 2>&1 &
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
关于重定向,参考文章:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=484163
1. 基本概念
a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;(FD:file descripter,文件描述符)
b、常用FD有3个,为: 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
c、用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
d、用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
e、0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
f、在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
g、管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
h、tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
i、bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;
j、( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。
k、exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除,。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。
2. 基本IO
cmd > file 把 stdout 重定向到 file 文件中
cmd >> file 把 stdout 重定向到 file 文件中(追加)
cmd 1> fiel 把 stdout 重定向到 file 文件中
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中
cmd 2> file 把 stderr 重定向到 file 文件中
cmd 2>> file 把 stderr 重定向到 file 文件中(追加)
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中
cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout
cat <>file 以读写的方式打开 file
cmd < file cmd 命令以 file 文件作为 stdin
cmd << delimiter Here document,从 stdin 中读入,直至遇到delimiter 分界符
来自:http://ezplayer.diandian.com/post/2011-06-10/40040502293
背景:也就是如ssh登录后发邮件,用nohup可以快速推到后台,更快进入终端,不用直到发完邮件才进入#shell下。
nohup /usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf >/dev/null 2>&1 >/dev/null &
nohup /usr/local/cronolog/sbin/cronolog /data/logs/lighttpd/img.bbs.cntv.cn-access_%Y%m%d.log >/dev/null 2>&1 >/dev/null &
实践成功来自:https://blog.csdn.net/qq_27870421/article/details/90753948
From:http://www.tuxradar.com/answers/215
发邮件链接:
https://jackxiang.com/post/7579/
linux 重定向 标准错误与标准输出到同一文件 :
特别是那个错误输出啥的,这块strace就是一例:
strace php include.php > abcdef.txt //这样显然是没法实现把输出导入到abcdef.txt文件的啦。
重定向标准错误到标准输出
cat foo 2>&1 得出:strace php include.php > abcdef.txt 2>&1 ,还有别的写法参考来自:
http://blog.chinaunix.net/uid-21142030-id-3211182.html
------------------------------------------------------------------------------------------------------------------------
这种方式的输出重定向使得以 word 扩展结果为名的文件被打开并通过文件描述符 n 从尾部添加。如果没有指定 n 就使用标准输出 (文件描述符
1)。如果文件不存在,它将被创建。
重定向的一般形式是:
[n]>>word
Redirecting Standard Output and Standard Error
Bash 允许使用这种结构将标准输出和标准错误 (文件描述符 1 和 2) 重定向到以 word 扩展结果为名的文件中。
有两种重定向标准输出/标准错误的形式:
&>word
还有
>&word
两种形式中,推荐使用第一种。它与
>word 2>&1
在语义上等价。
下列描述中,重定向操作符之后的词如果没有特殊说明,都要经过 brace expansion, tilde expansion, parameter expansion, command substitution, arithmetic
expansion, quote removal, pathname expansion, 还有 word splitting。如果扩展为多于一个词, bash 将报错。
注意重定向的顺序非常重要。例如,命令
ls > dirlist 2>&1
将标准输出和标准错误重定向到文件 dirlist, 而命令
ls 2>&1 > dirlist
只会将标准输出重定向到文件 dirlist, 因为在标准输出被重定向到文件 dirlist 中之前,标准错误被复制为标准输出。
————————————————————————————————————————————————
先说一下linux重定向:
0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。
在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标号。例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:
# ls 1>/dev/null 2>/dev/null
还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:
# ls >/dev/null 2>&1
注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄:-)
由于使用nohup时,会自动将输出写入nohup.out文件中,如果文件很大的话,nohup.out就会不停的增大,这是我们不希望看到的,因此,可以利用/dev/null来解决这个问题。
(1)舍弃标准输出,将错误输出到log文件中
nohup ./program >/dev/null 2>log &
(2)如果错误信息也不想要的话:
nohup ./program >/dev/null 2>&1 &
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
关于重定向,参考文章:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=484163
1. 基本概念
a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;(FD:file descripter,文件描述符)
b、常用FD有3个,为: 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
c、用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
d、用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
e、0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
f、在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
g、管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
h、tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
i、bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;
j、( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。
k、exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除,。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。
2. 基本IO
cmd > file 把 stdout 重定向到 file 文件中
cmd >> file 把 stdout 重定向到 file 文件中(追加)
cmd 1> fiel 把 stdout 重定向到 file 文件中
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中
cmd 2> file 把 stderr 重定向到 file 文件中
cmd 2>> file 把 stderr 重定向到 file 文件中(追加)
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中
cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout
cat <>file 以读写的方式打开 file
cmd < file cmd 命令以 file 文件作为 stdin
cmd << delimiter Here document,从 stdin 中读入,直至遇到delimiter 分界符
来自:http://ezplayer.diandian.com/post/2011-06-10/40040502293
CentOS 7 正式版发布
Unix/LinuxC技术 jackxiang 2014-10-10 18:07
CentOS 项目正式发布 CentOS 7.0-1406。相当于是 CentOS 7 的正式版。该版本使用存放于 git.centos.org 上的源码进行构建。所有的源码 rpms 采用相同的密钥进行签名,包括二进制文件。
同时从该版本开始 CentOS 将采用新的版本号规则,其中 1406 表示为 2014年6月。通过使用月份作为版本号,我们可以衍生和补发更新媒体容器和云映像、定期更新同时仍然保持连接到基础发行版的版本。
官方的发行说明请看:http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7
CentOS 7 的主要变化包括:
内核更新至 3.10.0
支持 Linux 容器
Open VMware Tools 及 3D 图像能即装即用
OpenJDK-7 作为缺省 JDK
这次直接从 6.5 升级至 7.0(上文已提及)
ext4 及 XFS 的 LVM 快照
转用 systemd、firewalld 及 GRUB2
XFS 作为缺省文件系统
内核空间内的 iSCSI 及 FCoE
支持 PTPv2
支持 40G 网卡
更信息的改进说明请看红帽企业 Linux 7 的发行说明。
CentOS 7 只提供 64 位版本,下载地址:http://mirror.centos.org/centos/7/isos/
国内镜像:http://mirrors.aliyun.com/centos/7.0.1406/
同时从该版本开始 CentOS 将采用新的版本号规则,其中 1406 表示为 2014年6月。通过使用月份作为版本号,我们可以衍生和补发更新媒体容器和云映像、定期更新同时仍然保持连接到基础发行版的版本。
官方的发行说明请看:http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7
CentOS 7 的主要变化包括:
内核更新至 3.10.0
支持 Linux 容器
Open VMware Tools 及 3D 图像能即装即用
OpenJDK-7 作为缺省 JDK
这次直接从 6.5 升级至 7.0(上文已提及)
ext4 及 XFS 的 LVM 快照
转用 systemd、firewalld 及 GRUB2
XFS 作为缺省文件系统
内核空间内的 iSCSI 及 FCoE
支持 PTPv2
支持 40G 网卡
更信息的改进说明请看红帽企业 Linux 7 的发行说明。
CentOS 7 只提供 64 位版本,下载地址:http://mirror.centos.org/centos/7/isos/
国内镜像:http://mirrors.aliyun.com/centos/7.0.1406/
加什么参数可以让tar把软链接所指向的真实数据也打到tar包中
Unix/LinuxC技术 jackxiang 2014-10-10 14:51
背景:有时打包不想打包软链接,有时想要打上,这就是涉及到Linux下的tar命令了,找了下,有一个这样的参数,可使用。
-h, --dereference dump instead the files symlinks point to
-h, --dereference
don't dump symlinks; dump the files they point to
实践如下:
[root@test tmp]# tar --help|grep dereference
-h, --dereference dump instead the files symlinks point to.
1)只打软链接进来不打真实文件:
tar -zcvf testtar-h.tar.gz testtar
2)打真实文件进来:
tar -zcvfh testtar-h.tar.gz testtar
小技巧:
其实用scp也就自动把软链接给过滤掉了,根本不留下软链接。
摘自:http://bbs.chinaunix.net/thread-1447388-1-1.html
实践成功如下,注意h位置,否则报错:
参考自:http://t.zoukankan.com/TreeDream-p-10277075.html
-h, --dereference dump instead the files symlinks point to
-h, --dereference
don't dump symlinks; dump the files they point to
实践如下:
[root@test tmp]# tar --help|grep dereference
-h, --dereference dump instead the files symlinks point to.
1)只打软链接进来不打真实文件:
tar -zcvf testtar-h.tar.gz testtar
2)打真实文件进来:
tar -zcvfh testtar-h.tar.gz testtar
小技巧:
其实用scp也就自动把软链接给过滤掉了,根本不留下软链接。
摘自:http://bbs.chinaunix.net/thread-1447388-1-1.html
实践成功如下,注意h位置,否则报错:
参考自:http://t.zoukankan.com/TreeDream-p-10277075.html
MacBook下的watch安装方法brew install watch, Linux 自带的 watchdog 的简介,Linux 软件看门狗 watchdog。
Unix/LinuxC技术 jackxiang 2014-10-9 20:58
MacBook下的watch安装方法brew install watch:
brew install watch (mac os)
https://www.jianshu.com/p/d75e50e38bb9
背景:
root@119.10.6.23:/usr/local/php# ps aux|grep watchdog
root 6 0.0 0.0 0 0 ? S Aug28 4:50 [watchdog/0]
root 10 0.0 0.0 0 0 ? S Aug28 4:11 [watchdog/1]
root 14 0.0 0.0 0 0 ? S Aug28 3:58 [watchdog/2]
root 18 0.0 0.0 0 0 ? S Aug28 3:36 [watchdog/3]
附:
最简单的安装教程(CentOS)
yum install watchdog -y
modprobe softdog
chkconfig watchdog on
/etc/init.d/watchdog start
配置看门狗程序,开机自动运行
chkconfig watchdog on
启动看门狗
sudo /etc/init.d/watchdog start
——————————————————————————————————————
Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),每次写操作会导致重新设定定时器。如果用户空间程序在1分钟之内没有写操作,定时器到期会导致一次系统 reboot 操作(“狗咬人了”呵呵)。通过这种机制,我们可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,因无法正常定时“喂狗”,Linux系统在看门狗作用下重新启动(reboot),核心进程又运行起来了。多用于嵌入式系统。
打开 /dev/watchdog 设备(“开门放狗”):
每隔一段时间向 /dev/watchdog 设备写入数据(“定期喂狗”):
关闭 /dev/watchdog 设备,通常不需要这个步骤:
所需头文件:
转自:http://blog.csdn.net/liigo/article/details/9227205
摘自:http://bbs.linuxtone.org/thread-19567-1-1.html
摘自:http://wjjchen.blog.163.com/blog/static/1628722201342354415584/
brew install watch (mac os)
https://www.jianshu.com/p/d75e50e38bb9
背景:
root@119.10.6.23:/usr/local/php# ps aux|grep watchdog
root 6 0.0 0.0 0 0 ? S Aug28 4:50 [watchdog/0]
root 10 0.0 0.0 0 0 ? S Aug28 4:11 [watchdog/1]
root 14 0.0 0.0 0 0 ? S Aug28 3:58 [watchdog/2]
root 18 0.0 0.0 0 0 ? S Aug28 3:36 [watchdog/3]
附:
最简单的安装教程(CentOS)
yum install watchdog -y
modprobe softdog
chkconfig watchdog on
/etc/init.d/watchdog start
配置看门狗程序,开机自动运行
chkconfig watchdog on
启动看门狗
sudo /etc/init.d/watchdog start
——————————————————————————————————————
Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),每次写操作会导致重新设定定时器。如果用户空间程序在1分钟之内没有写操作,定时器到期会导致一次系统 reboot 操作(“狗咬人了”呵呵)。通过这种机制,我们可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,因无法正常定时“喂狗”,Linux系统在看门狗作用下重新启动(reboot),核心进程又运行起来了。多用于嵌入式系统。
打开 /dev/watchdog 设备(“开门放狗”):
每隔一段时间向 /dev/watchdog 设备写入数据(“定期喂狗”):
关闭 /dev/watchdog 设备,通常不需要这个步骤:
所需头文件:
转自:http://blog.csdn.net/liigo/article/details/9227205
摘自:http://bbs.linuxtone.org/thread-19567-1-1.html
摘自:http://wjjchen.blog.163.com/blog/static/1628722201342354415584/