linu下编程70条经验总结

来源:互联网 发布:hash算法的实现原理 编辑:程序博客网 时间:2024/05/01 18:40

最近从事linux下的开发, 遇到的问题在网上逐个搜索, 这里把他们总结罗列了一下,方便日后查阅

文中主要涉及 linux命令, 脚本, c++开发等内容

内容虽然多,但不难, 大多可在网上查到



- ------------VIM ------------
1. 让vim为某个用户单独支持显示行号
   新建~/.vimrc,  加入一行 set nu, 然后 source ~/.vimrc
   不显示就是set nonu
   


2. 编辑命令
  % 跳到匹配的括号
  gD 转到定义
  \c不区分大小写搜索, 如查abc,   /abc\c  注意无空格
  
3. 替换字符串
  %s/old/new/g    g是全部替换
  分隔符/还可写为!, 替换目录时有用


4. 同时修改2个文件
  vi  1.txt
  :sp 2.txt
  切换窗口 ctrl+w+j或ctrl+w+k


5. 修改注释颜色
  配置文件(.vimrc)加入
  highlight comment ctermsg=green guifg=green


6. 存盘并退出
  方法1: wq
  方法2: x   推荐, 因为如果未作修改, 则不改文件日期


------------Linux 命令-----------
7. 查看文件前10行,后10行
  head xxx
  tail xxx
  加-n 行数, 如  -n  30 可以看30行
  加-f 可以自动刷新, 如 tail -f xxx,  总是显示最新的10行,适合看log
  
8. 查看执行过的命令
  history  , 加-c可以清空


9. 递归改变属性
  chown xxx:xxx -R
  
10. 让grep不区分大小写
  搜索加-i
  
11. find,which,locate,whereis区别
  find真的找
  locate: 在索引找; 索引大约1天自动更新; 手动更新 updatedb; 索引包含所有文件
  which: 只在$PATH下找
  whereis: 只找可执行文件, man文件, 源代码(貌似只能找到linux自带命令), 不推荐
  
12. 让rm, mv带/取消提示
  -f 无提示 , -i有提示
  
13. 统计文件行数
  wc -l xxx, 返回2个结果(行数  文件名)
  若需要在脚本中提取其中的行数  num=`wc -l 1.txt | awk'{ print $1 }'`     注意`和'
  
  
14. 在后台运行的程序, 把屏幕输出重定向
  正确:  a.out > 1.txt   2> 2.txt  &
  错误:  b.out & > 1txt 2>2.txt
  
15. 删除用户
  userdel xxx 不能删除/home等文件
  userdel -r 可以
  若提示xx is log in, 则 -f 强制 
  
16. 设置主机名
  方法1: /etc/hosts 新加一行  "ip  主机名"
  方法2: /etc/sysconfig/network 直接给hostname=填数
  如果2个都有, 以2为准
  临时设置:  hostname  xxx


17. sudo 不用输密码
  在/etc/sudoers 里改为
  用户名   ALL=(ALL)  NOPASSWD:ALL
  
18. scp拷贝文件夹
  scp -r folder  192xxx:
  不要写成scp -fr
  
  
19. su 与 su - root区别
  su等效 su root, 不切换为root目录, 仅执行/root/.bashrc
  su - root等效 su -l ,与直接用root登录一样, 还执行了bash_profile
  
20. grep搜索不存在的
  加-v, 可用在排除svn st结果中带?的
  svn st | grep -v '?'
  
21. killall失败
  原因 因为他不是发给系统, 而是发给程序 sig_terminate, 若程序已死,则无效
  解决 -9
  
22. 设置打开文件数限制
  ulimit -S -n 12345
  ulimti -H -n 12345
  一定要先soft后hard
  
23. 搜索环境变量
  set | grep xxx源文件
  压缩后与用tar压缩的可能不同,可能是因为插入了线程对其的字节
  
  
24. 并行压缩
  下载pigz
   pigz -k
   
25. 关闭控制台颜色
  有的命令输出带颜色格式信息, 粘贴出来后有乱码, 如[31m[0m 
  关掉的方法 命令后加 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
  
26. 不重启, 让fstab生效
  mount -a
  
27. 关闭磁盘io缓存
  关闭写缓存 /etc/fstab 第4列, default换成sync
  清理读缓存
  sync
  sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
  
28. 统计一段时间内磁盘io
  iostat  -d  -m  -t 20      20s记录一次, 单位MB
  
29. ls按大小排列
  -S 大小, -t时间  
  -Sr -tr 升序
  
30. 打patch
  diff  -ruN  old new > 1.patch
  应用补丁 patch -p1 -d old < 1.patch




------------shell-------------------
31. shell拆文件
  如把1.txt(100行)拆为4个,每个25行
  方法1  split  -l 25  1.txt  m_  这样生成m_a  m_b  m_c  m_b
  方法2  sed  -n "1,25p" 1.txt > m_a
         sed  -n "26,50p" 1txt > m_b
         ..
         在脚本里可以写为变量  sed -n "${n1}, ${n2}p"
         
32 . 引号区别
  单引号:完全忽略转移符   echo '$val', 输出 $val
  双引号:不忽略$及反引号  echo "$val", 输出 33
  反引号:先执行           echo `ls`,   输出ls命令的结果
  
33. shell里实现c语言的i++
  方法1: i=`expr $i+1`
  方法2: let i+= 1
  方法3: ((i++))
  方法4: i$[$(i+1)]
  方法5: i=$(($i+1))
  
34 . 给脚本传递参数
  如脚本a.sh内容   echo  $AA
  调用时 AA=123 ./a.sh, 则会输出123
  用途:临时替换系统的环境变量  
  
35. 逐行读文件
 方法1:指定换行符
       IFS=" "
       for LINE in "1.txt"
       do
        echo $LINE
       done
       
 方法2: 文件重定向给read处理
       cat list.txt | while read LINE
       do
        echo $LINE
       doen 
       
 方法3: 用read读文件重定向
       while read LINE
       do
        echo $LINE
       done <list.txt
       
       
       
 
 ------------gdb----------------
36. 调试带参数命令, 如加-a
  set args -a
  r
  或直接  r -a
  
37. 显示代码
  gdb  a.out -tui
  
38. x命令 x/<n/f/u><addr>
  有时release版无代码, 只有一个地址
  n: 要显示的内存单元个数
  u: 一个单元字节(默认4), b,h,w,g代表1,2,4,8
  f:个数, 如s代表字符串, i代表指令
  例1  x/i  0x242343  可以看这段内存的汇编
  例2  x3uh 0x22222  可以输出3x2个 unsigned
  更多help x
  
.39 多线程时固定到一个线程
 set scheduler-locking on
 
------------Redhat -------------
.40 安装samba
  在光盘里找到并安装 sambe*.rpm, inetd*.rpm
  service smbd start
  然后在system->share home dir即可
  最后添加用户名密码 smbpasswd -a xxx
  
.41 虚拟机nat方式不能自动获取ip
  vi  /etc/sysconfig/network-script/ifcfg-eth0
  ONBOOT="yes"
  BOOTROTO=dhcp
  NM_CONTROLD=yes
  修改后  service network restart
  
.42 虚拟机nat网卡不通
  一个hostonly, 一个nat时, 若hostonly是静态ip, 不要设置网关

.43 去掉注册提示
  查看rpm  -qa | grep subscription-manager
  然后移除出现的项目
  然后再yum remove rhn-setup-gnome


.44 虚拟机复制/移动区别
  复制后会改变mac, 同时网卡名称也会变, 如eth0变eth3
  如无需要,尽量move, 不慎copy后
  vi  /etc/udev/rules.d/70-persistent-net.rules
  删除无用的行(保留当前mac), 然后修改eth号


.45 修改开始菜单
  vi  /usr/share/applications/xxx.desktop
  如eclipse.desktop, 找到一个模板编辑即可
  
.46 vmware支持utility模式, 可以把虚拟机的窗口放入windows 
  
47. 6.x不要装svn1.9
 因为sqllite, libc都要替换
  
  












  
-------------SSH ----------------
48. 连接远程服务器时,长时间操作网络可能断
  可以用tmux, screen等工具, 断了后可以 tmux att重连
  
49. 连接慢
  关闭dns, vi /etc/ssh/ssd_config
  UseDNS no
  GSSAPIAuthentication no
  
50. xshell 中文乱码
  属性  终端  utf
  
51. 连接提示 @@@@@@@@@@ remote host identification
  原因是过期了 修改发起点的 root/.ssh/known_hosts, 删除被连接者的ip
  
  
  
-------------C++-----------------
52. linux下的open
  在open时可能已经读入xx字节了, 因此第一次的read处设断点可能跟踪不到
  
53. qt自己实现stl
  目的不一定是好, 更多的是为了跨平台


54. 带boost的程序编译错误 concept_check.hpp:302: error: expect ')' before '?' token
  方法1 把include boost相关的.h放最前面
  方法2 若还不行,把相关代码放入cpp里, 不放h里,原因同上(h可能被别的cpp用)


55. delete时可不判空, 无论1维还是多维, 直接delete/free
 
56. 智能指针不能dynamic_cast
  auto_ptr<Base> baseptr;
  派生类 *ptr = dynamic_cast<派生类*> baseptr; //编译ok, 运行错


57.shared_ptr不能delete
  因为这样不会较小计数,造成重复
  
58. shared_ptr的数组形式 shared_array
 
59. typedef作用域
  在函数体内定义的typedef只在函数内 
  而define可以到文件尾
  
60. vector多线程
  vector<int> buf; 里面有2个元素
  一个线程访问buf[0], 另外访问buf[1]是没问题的, 可以跟踪stl的operator[]


61. 模板实现可以不放h文件
  放扩展名tcc里
  
62. 用perf看性能
  sudo perf top  看全部的
  记录 sudo perf record -g -p 进程号; 结束ctrl c
  回放 sudo perf report








  
  
  
------------其他-----------------
 
63. 素数
  前5000万个素数 prime.utm.edu/note/faq/longestlist.html
  
64. 给win7增加98风格的快速启动
 任务栏 新建   c:\users\用户名\appdata\roaming\microsoft\internet explore\quick lanch
 
65.  svn提示 skipped 'xxx'  node remains in confict
  删除文件夹也无效
  方法 svn  resovled xxx




66. foxmail筛选器
  可以把收到的邮件自动分类, 在工具->过滤器
  
67. eclipse
  提示"you are opening a large file. scalability ..." 选No, 否则不能debug
  设置里save action: 去掉删除结尾空格, 因为可能产生不必要的svn冲突
  调试时假死, 不能下一步等操作, 此时鼠标点击debug窗口即可恢复
  调试时真死, 可能是express窗口中出现了一个非法的变量, 如空指针>xxx, 尽量把活动窗口显示别的
  
68. 笔记本触摸板
  2个手指同时上下滑动可以滚轮效果
  双击, 第二次不放手,可以拖拽
  
69. windows任务管理器
  一条竖线 6s, 全屏(1920)走完768s 默认大小走完114s
  
70. 搜索word中的文件
  2003版可搜索一个文件夹下所有word文件的内容
  
 

0 0