Linux生存指南-优雅编写Linux代码技巧
有些人会打开搜索引擎,辛辛苦苦地查找答案,解决了问题,但很快又会遗忘。聪明的朋友可能会想到使用man命令,打开tar的手册。然而,tar的手册内容通常都很冗长,让人望而却步。
又臭又长,需要你有较好的英语基础和耐心。不仅仅是我们这么觉得,会英语的老外都觉得烦:,于是有大神开发了tldr工具。tldr即Too Long;Didn’t Read的简写,太长不看。
使用方法和man一样,比如查看tar命令的用法:
tldr tar登录后复制
他的画风如上,虽然还是英语,但是他给出了使用的例子!排版简洁、清晰:,收纳了使用率高的例子。
比如你要解压缩,看到这,
即使你的英语水平不高,凭有限的词汇量, 你也能知道应该用什么参数了吧,可读性极强:!
1.2 安装tldr::
ubuntu下安装很简单,执行以下三条命令:
sudo apt-get install nodejs sudo apt-get install npm sudo npm install -g tldr登录后复制
如果出现了警告,有可能是因为nodejs版本问题,用以下命令升级nodejs:
sudo apt-get install nodejs-legacy sudo npm install -g n sudo n latest登录后复制
如果升级nodejs失败,可能是Ubuntu版本问题,用以下命令安装稳定版nodejs:
sudo n stable sudo node -v登录后复制
然后再安装tldr
sudo npm install -g tldr登录后复制
用以下命令可以对tldr更新
tldr --update登录后复制
2. 让你的终端分屏显示:
2.1 终端复用器(terminal multiplexer)::
通过ssh登录linux只有一个命令行界面,用tmux,让他分开!
如图,一个界面分成很多块,我们可以一边写程序,一边查看其他东西。
可以任意调整各个窗格大小与数量
优雅!:一个命令即可安装:
apt-get install tmux登录后复制
2.2 tmux操作::
2.2.1 启动tmux:
直接输入
tmux登录后复制
如图,出现 绿色栏就说明进入tmux环境了。
2.2.2 退出tmux:
一个exit命令即可退出。:
exit登录后复制
2.2.3 分屏:
左右分屏:在要分屏的窗格下输入:
tmux split-windosw -h登录后复制
上下分屏就是把-h换成-w。
2.2.4 切换当前窗格:
记住ctrl+b是tmux的各种快捷键的启动键:
切换窗格步骤:
1.按ctrl+b,松开。2.按方向键,如要切换到右边就按->。
2.2.5 调整窗格大小:
先切换到要调整的窗格,然后:
1.按ctrl+b,不松开:。2.按方向键
2.2.6 关闭一个窗格:
先切换到要关闭的窗格,然后:
1.按ctrl+b,松开。2.按x。
什么?还不够优雅、高效,还是习惯在windows下写好,再放到Linux下编译?:
是的,这样是正确的选择,完全没问题,但是如果不是写大型项目,其实直接在Linux下使用vim/vi会更加优雅!
vim/vi可不是记事本,他有着强大的查找、搜索、替换…..等功能,并且可以让你完全脱离鼠标,属于越用越喜欢的慢热型。不过确实比较复杂,不想在这么优雅的文章里介绍他,想学的可以看:
一文彻底解决vi/vim编辑器操作
上面的只是初级优雅,真正的优雅来了。
3. 管道配合printf调试程序:
Linux下,gdb是一个很好的调试工具,不会用的可以学一下,在这篇文章中,我并不打算介绍gdb,而是教你用管道机制:,利用Linux里一些命令配合printf来调试。
Linux 下程序可以协同工作,可以将一个命令/程序的输出通过管道连接到另一个命令/程序的输入,管道操作符是 |。
在程序中使用printf加入调试信息,或作为输出信息,是常用的调试和输出方法,但经常会遇到打印出几百行,不容易阅读的情况。:
3.1 基操:联合grep找到想要的信息::
比如一个输出进程信息的程序,运行后很长。
我们想看看包含system字样的,只需:
./pstree.o |grep system登录后复制
ok,只输出了含system的。
3.2 用head让程序只输出一部分::
比如一个输出信息特别多的程序,我们有时只想看几行信息
编辑
-n后面的参数就是表示输出的行数。这个操作看似作用不大,实则特别有用:!
比如一个程序,里面的printf会运行n次,为了测试程序,n可能很大,用head命令就相当于想让他让运行几次就运行几次!:
写一个简单的程序模拟一下该情况:
#include int main (int argc, char **argv) { int i,j; j = 8; for(i = 0;i if (i % j == 0) { printf("0 "); j++; } printf("1 "); } }登录后复制
编辑
3.3 用sort排序输出结果::
sort的-u选项:
在输出行中去除重复行。
sort的-r选项:
sort默认的排序方式是升序,想改成降序,加-r。
sort的-t选项和-k选项:
如果一行的输出有好几个部分/列,比如:
a:1:30:d b:2:30:c f:1:1:a登录后复制
每行都有4列,列与列之间用冒号隔开了,我想用第4列排序,怎么办?:
加上-t选项,后面跟间隔符,指定了间隔符之后,用-k来指定列数。
另外,管道机制可以让命令连用:
3.4 uniq命令统计输出结果::
uniq命令不带任何参数会删除重复出现的行
-c : 在每列旁边显示该行重复出现的次数 -d : 仅显示重复出现的行列 -u : 仅显示出一次的行列(没有重复的)登录后复制
有了这个-c选项,再配合sort就可以统计输出了
如上,表示 程序的前一百行输出里0输出了12次,1输出了88次。
这些功能我们完全可以在自己写的程序里实现,然后调试,这并不难,但是也会麻烦,而且这都是为了调试我们的程序,跟我们程序功能实际上不沾边,既然有现成的好用的轮子,为什么不用呢?