linux系统日常经验总结

sed文本替换
替换PJ_DEF(.*)为.*
find pjproject-2.7.2 -name “audiodev.c” \( -exec sed ‘s/PJ_DEF[(]\(.*\)[)]/\1/g’ {} > tmp.c \; -o -exec mv -vf tmp.c {} \; \)

https://blog.csdn.net/ljp1919/article/details/53337670

STL相关的一些文章:
map vs multimap

http://blog.csdn.net/pathuang68/article/details/4248013

set

http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html

upper_bounder, lower_bounder

http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html

经验1:
前段时间,发现centOs重新启动后,进入不了系统,按CTRL + ALT + F2切换进入系统,发现是root@none提示符。
最后发现,是由于root目录/的权限被错误修改为744了,修改回755的权限重启一下系统就好了:chmod 755 /
这个问题在启用了selinux的系统上,才会发生!并且报的错误会让你误以为是selinux本身出了问题。

经验2:
进入linux 单机模式方法
grub 3秒启动提示符下按e键,再选择第二行按e键, 在行尾输入 selinux=0 single
按ENTER回车,按b键启动
重新挂载根目录命令:
mount -n -o remount,rw /
或者
mount -n -o remount,rw -t extX /dev/hdaX /

经验3:
修改启动项参数
修改/etc/grub.conf

修改selinux配置
修改配置文件/etc/selinux/config

经验4:
安装mysql相关
yum install mysql mysql-devel mysql-server
设置mysqld的root密码
/usr/bin/mysqladmin -u root password ‘xxx’

经验5:
安装memcached
yum install libmemcached libmemcached-devel

经验6:
安装gcc,g++
yum install gcc gcc-c++

centos linux下安装c和c++静态库:
yum install glibc-static
yum install libstdc++-static

经验7:
安装nfs client
yum install nfs-utils rpcbind

经验8:
mysqld启动报错:Another MySQL daemon already running with the same unix socket.
a.找到mysqld使用的unix socket路径:
cat /etc/my.cn |grep socket
#/var/lib/mysql/mysql.sock
b.删除这个临时文件,我的系统为/var/lib/mysql/mysql.sock
rm -f /var/lib/mysql/mysql.sock
service mysqld start启动成功!

经验9:linux下把16进制文本转换为2进制文件
xxd -r -p input.txt output.bin

经验10:linux下误删libc的恢复方法(系统未重启情况下)
LD_PRELOAD=/lib/libc-2.6.1.so ln -s /lib/libc-2.6.1.so libc.so.6

经验11:
vs2008等环境下c++编程,debug调试下查找定位内存泄露,可用vld这个工具,简单易用:
0. 安装vld-2.3-setup.exe,在安装目录下,分别有include,lib,bin几个目录
1. 把include子目录加入VS的include路径设置
2. 把lib子目录加入VS的lib路径设置
3. 在任意一个自己的源码文件中,增加1行:#include
4. bin子目录下的三个文件拷贝到工程的Debug目录下
5. Debug模式下,F5启动程序,运行完毕后退出,即可在output窗口中查看到很多内存泄露信息
注意事项:对应一些系统调用的内存泄露,比方说printf和_setenvp可以忽略,只需要关注自己源码中的泄露项
优点:有内存泄露位置的堆栈信息,能直接定位到哪一行分配的内存未被释放
运行事项:
VLD 2.2.3
在项目中使用了visual leak detector,调试时程序无法启动报错“应用程序正常启动失败(0xc0150002)”。
解决流程:
查看vs输出信息最后一条是:
Theprogram ‘[3980] MobileSignalAnalyzer.exe: Native’ has exited with code-1072365566 (0xc0150002)
在网上多方查找有:

http://blog.csdn.net/evilswords/article/details/5698851

http://blog.csdn.net/brook0344/article/details/6685724

解决办法,就是把VLD安装目录中的这两个复制到执行文件夹下就正常了
Microsoft.VC90.CRT.manifest
Microsoft.DTfW.DHL.manifest

经验12:
linux环境下c或c++编程,检查内存泄露的工具是valgrind
安装该工具后,直接在命令行输入:
valgrind –track-origins=yes –tool=memcheck –leak-check=full ./test

经验13:
linux下把目录下dos文件转换为unix文件格式命令
find . -type f | xargs dos2unix

经验14:
linux下编译相关的环境变量设置
PKG_CONFIG_PATH,设置pkg-config的搜索.pc文件的目录
LD_LIBRARY_PATH,设置动态库的连接目录,另一种方式也可修改/etc/ld.so.conf文件,增加so的路径,然后后执行命令ldconfig

经验15:
linux下查看各个线程CPU占用情况
top -H -p pid
lsof -n -i -P
netstat -antp
netstat -anup

经验16:
gdb设置内存watch点
watch *(int*)0x22cbc0
linux kernel网络参数含义及单位官方文档

https://www.kernel.org/doc/Documentation/sysctl/net.txt

gdb调试子进程模式设置

https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/

follow-fork-mode

在2.5.60版Linux内核及以后,GDB对使用fork/vfork创建子进程的程序提供了follow-fork-mode选项来支持多进程调试。

follow-fork-mode的用法为:

set follow-fork-mode [parent|child]

parent: fork之后继续调试父进程,子进程不受影响。
child: fork之后调试子进程,父进程不受影响。

因此如果需要调试子进程,在启动gdb后:

(gdb) set follow-fork-mode child

并在子进程代码设置断点。

此外还有detach-on-fork参数,指示GDB在fork之后是否断开(detach)某个进程的调试,或者都交由GDB控制:

set detach-on-fork [on|off]

经验17:
查看linux命令所在的源码包
rpm -qif `which top`
就会显示如下行
source RPM: procps-3.2.7-16.el5.src.rpm

经验18:
从rpm包中提取源码
rpm2cpio coreutils-5.2.1-31.8.el4_7.1.src.rpm| cpio -idv
此时会在当前目录下产生coreutils-5.2.1.tar.bz2文件
然后
tar -jxvf coreutils-5.2.1.tar.bz2

经验19:
selinux中samba用户允许访问home目录
参考http://selinuxproject.org/page/SambaRecipes
执行命令
setsebool -P samba_enable_home_dirs=1
setsebool -P use_samba_home_dirs 1
修改smb.conf
hosts allow = 192.168.18.0/24
iptables防火墙规则添加:

http://www.sanitarium.co.za/how-to-install-and-configure-a-file-server-using-centos-6-4-samba-and-external-drives/

修改/etc/sysconfig/iptables
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p tcp –dport 137 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p tcp –dport 138 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p tcp –dport 139 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p tcp –dport 445 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p udp –dport 137 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p udp –dport 138 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p udp –dport 139 -j ACCEPT
-A INPUT -s 192.168.18.0/24 -m state –state NEW -p udp –dport 445 -j ACCEPT

回复

你的邮件地址不会被公开(Your email address will not be published.) Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>