这是一些您可能没有注意到的有用的Linux命令行命令。
现在,制作网站和移动应用程序最重要的是促销。如果推广做得好,那将是成功的一半以上。相对未曝光的产品很难继续使用。从这个角度来看,绝大多数Linux命令行升级简直是可怕的。许多Linux是一个非常有用的命令行工具,可以安静地隐藏在您的发行版中默认安装的软件包中。很多时候,您只会在遇到任何问题时才知道是否搜索过Internet。更痛苦的是其中有很多东西。一旦知道了,您就会认为我将没有它而活。因此,在这里我将列出一些我已经使用过的东西,大多数发行版默认都有它,或者可以使用软件包管理工具轻松获得的东西。
本文仅讨论Linux环境中的内容,这显然也适用于MacOS。实际上,尽管Windows可以找到很多东西,但是配置更加麻烦,因此在此不再赘述。像Linux老手这样的许多人似乎都认为hahaha真的太基础了。但是,诸如cd,ls,mkdir之类的过于基础的编写在这里过于业余,因此我在这里跳过了许多非常常见的命令。像git和sed,awk这样的重量级工具可以单独发布,我想我无法清楚地解释它,因此这里有一些功能简单的小工具。但是让我们忘记这些小问题...
如果你有更多的时间
...那么最好读这本书:
如果你没有多余的东西
然后,我将列出一些我认为按随机顺序非常好的命令行工具。此处不详细描述各种参数。您应该使用man xxx来查看文档。如果您的发行版中未安装这些程序,请手动搜索它们。 Mac用户可以在自制软件中找到它。
tmux
尽管顺序非常随机,但该顺序必须排名第一。许多人以其计算机为Windows的状态使用Linux,并使用腻子连接到Linux服务器以正常工作。在这种情况下,每次断开连接时,您运行的程序都会被杀死。您可能要在退出时将打开的程序保留在此处,并在下次使用连接时自动返回到先前的工作状态。 tmux是解决此问题的最终方法。一方面,它们的功能是在终端中创建多个“窗口”。另一方面,如果您关闭连接或意外断开连接,则默认情况下不会关闭它们。您可以在下次连接之前使用tmux Attach恢复您的身份。工作状态。
如果您从未听说过此屏幕或类似屏幕,则应给我一些现金。
tree
ls可能是您最常用的命令之一。 tree可以递归列出目录中的所有文件,并以树形式显示它们:
$ tree
.
├──b
├──c
│└──d
└──什么└──什么
相应地,还有pstree可以以这种方式显示进程树。
ack
我记得在采访中被问到“请写出如何调用grep列出当前目录中所有包含字符串的文件”。我对这个问题的回答是“ Just use ack”。 ack的官方域名为Betterthangrep.com。由于在当前目录中下载的所有文件中查找字符串字符是一种常见的操作,因此请执行ack foo在当前目录中的所有文件中查找foo。默认情况下,ack将跳过许多无用的目录和文件,从而使搜索速度更快,输出结果更准确。另外,像默认的彩色显示屏使用起来也非常舒适。
ack目前在大多数发行版中不可用。如果使用的是Ubuntu,则程序包名称为ack-grep,并且可执行文件的名称相同。您可以在此处查看文档。
rsync
例如,您在本地有一台计算机,而在远程有一台服务器。您想将所有文件夹复制到另一侧。您通常必须更新此文件夹,希望以某种方式快速同步更新的零件。我该怎么办?如果您不了解rsync,则可能要使用git,构建ftp或使用scp等。但实际上,rsync是精确解决此问题的真正软件。 rsync最好的部分是差异更新,这意味着仅传递另一面缺少的内容,并且您不需要任何其他配置即可快速运行。一个例子:
rsync -arvuzp --chmod=g+rx ./built/ me@example.com:/var/www/site
aspell
作为程序员,您将有一天写英语文档。对于我来说,用英语以外的其他语言输入拼写是正常的。如果您使用Word,则会有一个下划线提醒您,但是如果您在Linux中用代码编写注释或编写markdown,则似乎没有办法。实际上,这也是一个已解决的问题,aspell可以解决。 Aspell可以拼写检查任何纯文本。作为程序员的工具,它可以检测文件类型。例如,对于C ++程序,它仅检查注释中的单词。
tee
有时某些命令的结果会很长,而您向上和向下查找所用的时间可能会更少。或者您可以使用>重定向到文件。但是在某些情况下,该程序可能会要求您输入y进行确认,或者某些程序需要很长时间才能运行,并且仅重定向不确定其是否正常运行。 tee可以输出到屏幕并同时重定向到文件。一个简单的例子:
(reverse-i-search)`echo': echo waht | vim -
这将被输出到屏幕并写入out.txt文件。另外,tee的含义实际上是T。拉动输入和输出的中间并拉出更多,可以说它是一幅图像。
值得一提的是,vim也可以在管道中使用,示例如下:
$ cloc /usr/include/
9628 text files.
9308 unique files.
434 files ignored.
T=39.0 s (227.6 files/s, 39948.2 lines/s)
-------------------------------------------------
Language files blank comment code
-------------------------------------------------
C/C++ Header 8875 217366 287013 1053368
Teamcenter def 1 48 0 186
-------------------------------------------------
SUM: 8876 217414 287013 1053554
-------------------------------------------------
您必须知道可以使用键盘上的向上和向下箭头键来回查找历史记录。然后,例如,可能有一个您很久以前播放的命令,您可能需要按一下才能找到它。实际上,只需输入零件并按
(reverse-i-search)`echo': echo waht | vim -
如果存在前向搜索,则通常存在向后搜索。遗憾的是,将来搜索的快捷键是
cloc
尽管代码行数不能解释任何问题,但有时我不知道为什么我只想知道。 cloc可以准确地计算代码行数,并分隔注释和空格。如果您是一位传奇的项目经理,请立即使用cloc计算您的代码农民的薪水!随附以下屏幕截图:
$ cloc /usr/include/
9628 text files.
9308 unique files.
434 files ignored.
T=39.0 s (227.6 files/s, 39948.2 lines/s)
-------------------------------------------------
Language files blank comment code
-------------------------------------------------
C/C++ Header 8875 217366 287013 1053368
Teamcenter def 1 48 0 186
-------------------------------------------------
SUM: 8876 217414 287013 1053554
-------------------------------------------------
printenv
使用set可以查看所有shell变量,还包括shell函数,但是其中一些仅在当前shell中使用。通常,您需要查找由export定义的环境变量。 printenv用于执行此操作。
set -o vi
bash或大多数常见的shell实际上都支持使用vi进行命令行编辑。例如,设置set -o vi之后,您可以使用熟悉的hjkl进行移动,使用w,b跳过单词,等等。
同样,如果设置了EDITOR环境变量,请输入fc将先前输入的命令行放入编辑器进行编辑,只要保存,它将被执行。相反,放弃保存等于放弃。
find
仔细阅读上述书籍后,最大的收获之一就是我终于学会了使用find。现在这是我几乎每天都会使用的命令。例如,如果我要将目录中的所有png文件添加到此git commit中,则可以使用:
find . -name '*.png' -exec git add {} ';'
如果您熟悉find,您将了解最后一个;更改为+可能更好,但这是有目的的。尽管此命令看起来非常简单,但是省略或双引号命令中的单引号将失败。这些转义规则涉及“ shell变量扩展”和引号,尽管感觉很烦人,但是它们只是一些简单的规则,并且一致性非常好。因此,只要您愿意花一些时间来澄清相关的事情,这个简单的问题就可以轻松解决。
type
如果foo是可以直接在命令行上运行的程序,则应该知道可以使用哪个foo查找foo可执行文件的路径。但是,可以在命令行上执行的命令不一定与可执行文件相对应。它可以是别名,shell附带的函数以及用户自己的函数。因此,有时您找不到与之相关的东西时可能会感到困惑。您实际上可以使用foo类型来查看foo是什么类型。
help
如上所述,“内置命令”也是内置命令,它是外壳程序提供的一些基本命令,或者不能由外部程序完成。通常,您可以使用man来查看文档,但是对于内置命令,man会跳到Shell自己的手册页。在某些系统中,这是一个巨大的页面。您必须找到要在某些系统中看到的内容。有些系统根本没有它。相关信息。这时,help内置命令可以解决此问题:例如,要查看设置集的可接受选项,可以使用帮助集轻松找到它。
env
您应该知道#的作用!脚本第一行的(Shebang)是指定其``运行时''。例如,如果您想编写Python脚本,但实际上并不在乎其版本,或者不确定其可执行文件在其他计算机上的位置。然后env可以派上用场了。它可以写成#! / usr / bin / env python,以便在执行时将使用在当前PATH中找到的python。另一方面,这也是您无需修改代码即可重新选择“运行时”的机会。
file
如果您想知道某个路径上的文件类型,那么使用文件是最合适的。它可以对任何内容进行有意义的解释,并且还列出了二进制文件的许多相关重要信息。
strings
“我在用C ++编写的程序中放了我的秘密。运行它并输入正确的密码即可查看它。”实际上,如果遇到这种情况,则只需要运行字符串program-write-in-cxx。它可以准确列出二进制文件中包含的C样式字符串。这似乎没有多大意义,但实际上取决于您。例如,要知道使用字符串编译程序的哪个版本的GCC,可能会产生结果。
od
整个过程应该是“对象转储”,可以以八进制,十六进制或其他方式显示文件。我认为在大多数情况下,每个人都在使用od -c转储ASCII代码的文件。一种用例是查看文件的行尾是什么。例如,执行od -c foo.txt将显示以下结果:
$ od -c foo.txt
0000000 h e l l o w o r l d
y e a
0000020 h
0000021
可以清楚地看到它是一个制表符和Windows风格的换行符。