本文来自Quroa上的一问一答《What are some time-saving tips that every Linux user should know?》-Linux用户应该知道的一些生产力技巧有哪些。我觉得还不错,总结的比较好,所以翻了一下,加了一些自己的理解。首先我要告诉大家,在Unix/Linux下,最高效的技巧不是图形界面操作,而是命令行操作,因为命令行意味着自动化。如果你看过《你可能不知道的Shell》和?,你就知道Linux的强大了。这种力量完全来自命令行。所以,即使你不知道如何做一个环保程序员,至少他们可以让你少熬夜,有利于你的健康生活。下面是一个有点长的列表,正如作者所说,你不需要知道所有这些东西,但如果你还在认真使用Linux,这些东西值得一看。(注:如果你想了解后面涉及到的命令的更多用法,必须man一下,有些命令可能需要先用yum或apt-get安装,如有疑问,不要不要忘记谷歌。如果你要百度,我只代表这个地球上的所有生物,包括微生物,甚至细菌,病毒,小强BS你到宇宙毁灭)基本学习Bash。你可以看看manbashbash的东西,不复杂也不长。您可以使用其他shell,但bash非常强大并且是系统默认的。(学习zsh或tsch只会在很多情况下限制你)学习vim。在Linux下,基本上没有与之竞争的编译器(即使你是Emacs或Eclipse的重度用户)。你可以看看《简明vim攻略》和《Vim的冒险游戏》和《给程序员的Vim速查卡》和《把Vim变成一个编程的IDE》等等。了解ssh。了解不需要密码的用户认证(通过ssh-agent,ssh-add),学习使用ssh翻墙,使用scp代替ftp传输文件等等。你知道吗?当scp在远端时,可以按tab键查看远端目录和文件(当然需要用户认证,不需要密码),这都要归功于bash。熟悉bash作业管理,如:&、Ctrl-Z、Ctrl-C、jobs、fg、bg、kill等。当然,你还需要知道Ctrl+(SIGQUIT)和Ctrl+C(SIGINT)的区别).简单的文件管理:ls和ls-l(你最好知道“ls-l”每一列是什么意思)、less、head、tail和tail-f、ln和ln-s(你知道硬链接和软链接的区别和优点和缺点),chown,chmod,du(如果你想查看磁盘的大小du-sk*),df,mount。当然,原作者忘记了find命令。基本网络管理:ip或ifconfig、dig。当然,原作者也忘了理解netstat、ping、traceroute等正则表达式,以及grep/egrep的各种选项。诸如-o、-A和-B之类的选项非常值得了解。学习使用apt-get和yum来查找和安装软件(前者的经典发行版是Ubuntu,后者的经典发行版是Redhat),我也建议大家尝试从源码编译安装软件。日常在bash中,使用Ctrl-R代替上下光标键来查找历史记录中的命令。在bash中,使用Ctrl-W删除最后一个单词,使用Ctrl-U删除一行。请在manbash之后找到ReadlineKeyBindings部分,以查看bash的默认热键,例如:Alt-。打印最后一个命令的最后一个参数,Alt-*列出您可以输入的命令。回到上一个工作目录:cd-(回到家就是cd~)使用xargs。这是一个非常强大的命令。您可以使用-L来限制有多少命令,或使用-P来指定并行进程的数量。如果您不知道您的命令会是什么样子,您可以使用xargsecho来查看它会是什么样子。当然,-I{}也能正常工作。例子:find.-name*.py|xargsgrepsome_functioncathosts|xargs-I{}sshroot@{}hostnamepstree-p可以帮你显示进程树。使用pgrep和pkill通过名称查找或终止进程。(-f选项很有用)。了解可以发送到进程的信号。例如:要暂停进程,请使用kill-STOP[pid]。使用man7signal查看各种信号,使用kill-l查看对应的数字和信号表如果想让某个进程在后台运行则使用no??hup或disown。使用netstat-lntp查看网络上是否有进程在监听某个端口。当然也可以使用lsof。在bash脚本中,您可以使用set-x来调试输出。发生错误时使用set-e中止。考虑使用set-opipefail来限制错误。也可以使用trap拦截信号(比如拦截ctrl+c)。在bash脚本中,子shell(写在括号中)是将命令组合在一起的便捷方式。一个常见的例子是暂时转到另一个目录,例如:#dosomethingincurrentdir(cd/some/other/dir;other-command)#continueinooriginaldir在bash中,请注意那里有很多变量扩展。例如:检查一个变量是否存在:${name:?errormessage}。如果bash脚本需要参数,可能是像input_file=${1:?usage:$0input_file}这样的表达式。计算表达式:i=$(((i+1)%5))。一个序列:{1..10}。截断字符串:${var%suffix}和${var#prefix}。示例:如果var=foo.pdf,则echo${var%.pdf}.txt打印“foo.txt”。<(somecommand)可以将命令视为文件。示例:将本地文件与远程文件/etc/hosts进行比较:diff/etc/hosts<(sshsomehostcat/etc/hosts)了解“此处文档”,即cat<
