linux杂项

这篇文章记录了本人在使用linux过程中遇到的问题及解决方案。

1.Redhat Enterprise 6 X86_64 安装 yum

wget -c http://yum.baseurl.org/download/2.0/yum-2.0.8-1.src.rpm,得到yum-2.0.8-1.src.rpm,再使用

rpmbuild --rebuild yum-2.0.8-1.src.rpm将上个文件编译成二进制的rpm,生成的文件在目录:

/root/rpmbuild/RPMS/noarch或者在/usr/src/redhat/RPMS/noarch,具体视系统而定。


2.一台真实机器上装有两台linux,需要在三台机器上共享文件,则最好的解决方案是在真实机器上共享一个文件夹,然后在linux里面挂载远程的目录即可。设共享的文件夹为整个盘,盘符为I,则挂载的命令如下:

mkdir /mnt/sharedir

mount -t cifs -o username=administrator,password=admin //192.168.137.1/I /mnt/sharedir

另外,两台linux机器间可以使用scp命令交换文件


3.配置 vim

引用文章:http://blog.youkuaiyun.com/namecyf/article/details/7787479

a).Ctags 

安装 Ctags,然后在你希望生成tags文件的目录下运行命令:ctags -R,则ctags会将该目录及目录递归下的所有源文件都进行语法分析,生成一个 tags文件,这个文件每当你更改了源文件后就得重新生成。在 vim 里面使用命令:

:set tags=...../tags,之后再使用 ctrl + ] 就可以寻找到一个函数或者一个变量的定义了。

如果要设置多个 tags直接使用逗号间隔开,或者使用 set tags+=也可以。


b).TagList

安装TagList,在~/.vim目录下解压taglist_xx.zip。然后在 ~/.vimrc文件中加上:

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

然后就可以使用了,在 vi 中输入命令 :Tlist


c).WinManager

安装WinManager,在~/.vim目录下解压WinManager_xx.zip。然后在 ~/.vimrc文件中加上:

let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>

注意 第二行 wm 后面有一个空格,然后就可以使用了,直接在 vi 的命令模式下输入 wm ,不是输入":wm",就会弹出taglist 和 fileexplorer


d).autocomplpop

参照文章:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646455.html

autocomplpop是一个vim插件,将下载的autocomplpop解压后,会有三个文件夹 autoload , doc, plugin,将它们三者一一复制到 /usr/share/vim/vim72/ 下面的对应文件夹中,一个都不能缺少,此时便安装完毕。

再启动 vim 时可能会报错,参照文章:http://blog.163.com/wangkangming2008@126/blog/static/7827792820122148624896/这时是因为 l9.vim 这个插件没有安装,再以相同的方法安装即可。再次启动,便能自动提醒了。


e).OmniCppComplete 

参照文章:http://blog.163.com/023_dns/blog/static/1187273662012125112426472/ 第五条和http://blog.youkuaiyun.com/duguteng/article/details/7417181

下载OmniCppComplete 后放在 ~/.vim文件夹里面解压,至此,安装成功。在vim中使用:helptags ~/.vimrc/doc将帮助信息加入到 vim文档中。

直接使用 ctags -R --c++-kinds=+p --fields=+iaS --extra=+q命令将信息加入到 tags文件,便于自动完成时使用。还可以绑定 ctrl x + ctrl o 为F3,自动完成,绑定 ctrl x + ctrl + i 到 F2自动完成所有头文件中出现的关键字。


f).echofunc

参照文章:http://blog.chinaunix.net/uid-12845622-id-3123474.html

下载echofunc后放于 ~/.vim/plugin文件夹下,配合 ctags ,使用命令行ctags -R --c++-kinds=+p --fields=+ialS --extra=+q , 比原来的命令多了一个小写的 L ,就可以使用了。

echofunc对库函数是没有作用的,它只对用户函数有作用。有如下解决办法:

1.vim 下使用将光标置于库函数上面,使用 shift + k 查看

2.命令下使用 man 查看

3.上文提到一种解决方法,可以将库函数头文件生成一个 tags并引入到项目中,便可以查看了。


转载一篇文章:

经常需要远程登录到Linux服务器上改配置、写程序,我使用的编辑器是vim。vim它小快灵,网络速度慢也能工作,并且vim+ctags+cscope的组合能很好的满足编程的时候经常用到的代码跳转功能,比如查看函数原型、符号智能补全、查找符号被引用处等。

但ctags为系统提供的头文件生成的索引总是不太对。比如对于/usr/include/sys/socket.h,里面有很多函数在ctags处理的时候没有能加到索引里去。最后发现是__TRHOW的问题。以listen函数为例,在socket.h中,它的原型是:

extern int listen (int __fd, int __n) __THROW;

socket.h间接包含了sys/cdefs.h,__THROW就是在这个头文件中被定义的。其定义如下:

# if !defined __cplusplus && __GNUC_PREREQ (3, 3)        
# define __THROW       __attribute__ ((__nothrow__))    
# define __NTH(fct)    __attribute__ ((__nothrow__)) fct
# else                                                   
# if defined __cplusplus && __GNUC_PREREQ (2,8)         
#   define __THROW      throw ()                         
#   define __NTH(fct)   fct throw ()                     
# else                                                  
#   define __THROW                                       
#   define __NTH(fct)   fct                              
# endif                                                 
# endif                                                 

如果gcc正在编译c++文件,并且gcc版本大于2.8那么__THROW会被定义为throw()。如果正在编译c文件并且gcc版本在2.8之前,__THROW则是一个空的宏定义,如果版本大于3.3,则__THROW被定义成一个attribute内包含的nothrow的形式。最后这个形式表示这段c代码不会抛出异常。

正是这个复杂的宏定义干扰了ctags,对于所有像listen这样含有__THROW的原型,ctags一律都不能正确解析。其原因是ctags本身不是一个编译器也没有专门的预处理器,它是通过直接解析源文件的语法来工作的,不进行语义的检查和宏展开。对于宏,它的能力仅限于识别定义、调用和简单的条件编译的猜测。

为了不让__THROW干扰ctags,需要在运行ctags时使用-I选项。我一般使用下面的命令生成系统头文件tags

ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p -R -f ~/.vim/systags /usr/include /usr/local/include

其关键是-I __THROW部分和--c-kinds=+p部分。设置-I后,ctags会在处理文件时,就会忽略-I后面写出来的符号。而--c-kinds=+p则告诉ctags需要为函数原型的声明也生成tag。--langmap=c:+.h表示.h视为c文件而不是c++文件。

最后,设置你的~/.vimrc,加入一行:
set tags+=~/.vim/systags
就可以享受系统库函数名补全、原型预览等功能了。

以前一直用Visual Studio写程序,这些功能都是已经有了的,不需要自己配置。在VIM里使用ctags、cscope和taglist插件和适当的配置一样可以达到同样的效果,而且有写地方还更方便了。

下面贴几幅图(点击查看大图):

这是对listen的预览窗口加智能补全的效果。当光标停在“e”上,VIM自动寻找“liste”开头的符号供你选择。对于“->”和“.”符号,VIM也可以对结构体成员进行智能补全。顶部的区域就是预览窗口,一般写代码的时候,它是关闭的,需要查看函数原型或者定义的时候,可以让它打开,很方便。


再给出一篇有用的参考文章:http://blog.youkuaiyun.com/zdl1016/article/details/6099279

4.环境变量

环境变量有临时的和永久的。

临时的环境变量只对当前的 shell有效。它是通过在命令行使用 exports 变量名=变量值 来设置的。

永久的环境变量永久有效,它分为全局用户或者只对某个用户有效。

编辑 /etc/profile ,输入 exports 变量名=变量值增加一个环境变量,或者使用 exports 变量名+=来给一个存在的环境变量增加值,多个环境变量值之间用冒号 :隔开。

同种行为如果施加在 用户的 profile文件则只对那个用户有效。/home/lzh/.bash_profile文件即是。

编辑完文件后,要使用 source profile 使其立即生效。

注意,不要将当前路径 ./ 录加入到环境变量当中,这样很容易遭到入侵,因为这种行为是不确定行为,别有用心的人可能会利用这种行为将他的某个执行文件替换为原有文件。

通过 $echo $path查看当前环境变量。



(不定期更新...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值