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文件的内容
- linu下编程70条经验总结
- linu下C语言之BMP图片操作编程(下)
- linu下C语言之BMP图片操作编程(上)
- linu下C语言之BMP图片操作编程(中)
- linu串口编程入门
- linu下拼音输入法
- linu 下 apache 安装
- linu编程经典书籍介绍
- linu 下安装 websphere 手册
- linu下的命令LN
- linu下查看配置信息
- linu下subversion的安装
- mongodb 在linu下配置
- 编程经验总结
- 编程经验总结
- 编程经验总结
- 编程经验总结
- 【CakePHP】21条经验总结
- 从0开始学习 GitHub 系列之「05.Git 进阶」
- Batch_size问题
- java生成动态gif格式与png格式的验证码(代码2)
- 用两个栈实现队列
- 关于结构体以及内部指针的一道面试题
- linu下编程70条经验总结
- 学习Django(一)
- java线程相关面试题
- java生成动态gif格式与png格式的验证码(代码1)
- 博客现在更新要慢了
- 软件的版本命名管理
- 单例模式
- hihoCoder #1032 : 最长回文子串
- HTML 脚本