当前位置: 首页 > 科技观察

Linux命令行好物

时间:2023-03-15 19:16:31 科技观察

列出了一些你可能没有注意到的有用的Linux命令行命令。如今,网站和移动应用程序最重要的是推广。推广做得好,就成功了一大半。相对来说,即使产品没有曝光,也很难继续做下去。大多数Linux命令行的推广在这方面都很糟糕。许多有用的Linux命令行工具悄悄地存在于您的发行版中默认安装的包中。很多时候,遇到问题只能通过上网搜索才能知道。更痛苦的是,一旦你了解了里面的很多东西,你就会奇怪我没有它是怎么过的。所以在这里我将列出一些我用过的,大多数发行版默认都有它们,或者可以通过包管理工具轻松获得。本文只讨论Linux环境下的东西,显然也适用于MacOS。其实很多东西虽然用Windows也能找到,但是配置比较麻烦,这里就不赘述了。很多东西喜欢linux老手都会觉得哈哈哈太基础了。但是像cd、ls、mkdir这些基础知识太外行了,这里写不出来,所以这里跳过了很多很常用的命令。git、sed、awk这些重量级的工具可以单独发布,我觉得我无法解释,所以这里都是功能简单的小东西。但是让我们忘记这些小问题吧……如果你有更多的时间……那么为什么不读这本书:<>。书的内容就像书名一样。它深入浅出地介绍了所谓“Linux命令行”的方方面面。这篇文章的很多内容也是从书中看到的。网站上有合法的免费PDF下载,文笔很好,可以随便看,不会有太大压力。最重要的是,如果您是Linux新手,那么这可能是最好的入门教程,很遗憾没有读到这样一本书。说起来,另一本Linux入门大师级教程应该是鸟哥的私房菜了。这个太有名了,我觉得没什么好说的。如果您没有太多时间,这里列出了一些我认为非常酷的命令行工具,顺序是随机的。各种参数这里就不详细介绍了,大家可以使用manxxx查看文档。如果您的发行版中没有安装这些程序,请手动搜索它们。Mac用户应该可以在homebrew中找到它。虽然tmux说顺序很随意,但是这个肯定排在第一位。很多人使用Linux是因为他们的机器是Windows,他们使用putty连接Linux服务器进行工作。这样,每次断开连接,你正在运行的程序都会被杀死。你可能希望在退出时将打开的程序保留在那里,下次使用连接时自动回到之前的工作状态。tmux是这个问题的终极解决方案。一方面,它们的功能是在终端中创建多个“窗口”。另一方面,如果您关闭连接或意外断开连接,默认情况下它们不会关闭。下次可以使用tmuxattach恢复之前的连接。工作状态。如果你没有听说过这个或类似的屏幕,你应该给我一些现金。trees可能是您最常用的命令之一。tree可以递归列出目录下的所有文件,并以树的形式展示:$tree.├──b├──c│└──d└──pstree对应的,可以这样展示进程树。ack我记得在一次采访中被问到“请写下如何调用grep以列出当前目录中所有文件中包含特定字符串的行”。我对这个问题的回答是“只用ack”。ack官网的域名是betterthangrep.com。由于在当前目录下载的所有文件中查找某个字符串字符是一个很常见的操作,所以执行ackfoo可以在当前目录的所有文件中查找foo。默认情况下,ack会跳过许多无用的目录和文件,使搜索更快,输出更准确。此外,默认开启的彩色显示屏用起来也很舒服。ack目前在大多数发行版中不可用。如果您使用的是Ubuntu,则包名称为ack-grep,可执行文件的名称也是相同的。您可以在此处查看文档以获取详细信息。rsync例如,您在本地有一台计算机,在远程有一台服务器。您想要将所有一个文件夹复制到另一侧的某个位置。你的文件夹经常更新,希望更新的部分能通过某种方式快速同步。应该怎么做?在不了解rsync的情况下,您可能想使用git、设置ftp或使用scp或其他任何东西。但实际上rsync才是真正精准解决这个问题的软件。rsync最好的地方就是差分更新,就是只传输对方缺失的部分,不需要你额外配置,飞的很快。一个例子:rsync-arvuzp--chmod=g+rx./built/me@example.com:/var/www/siteaspell作为一名程序员,你总有一天要写英文文档。我等待非英语母语者的拼写错误是很正常的。如果用Word,会有下划线提醒,但是如果在代码里写注释或者在linux下写markdown,好像就没办法了。其实这个问题早就解决了,aspell就是来做的。aspell可以检查任何纯文本的拼写,作为面向程序员的工具,它可以检测文件类型,例如对于C++程序,它只检查注释中的单词。tee有的时候有些命令的结果很长,你可能会用less来上下查找。或者您可以使用>重定向到一个文件。但是有时候程序可能会要求你输入y确认,或者有些程序运行时间比较长,仅仅重定向并不能确定是否正常运行。tee可以输出到屏幕并同时重定向到文件。一个简单的例子:$echowaht|teeout.txtwaht将被写入屏幕并写入out.txt文件。另外,tee的意思其实就是T,把输入输出中间拉出来,挺形象的。值得一提的是,vim也可以在管道中使用,例子如下:$echowaht|vim-你要知道,你可以使用键盘上的上下方向键来搜索你的来回历史记录,例如,有一个很久以前输入的文件您可能需要向上滑动才能找到命令。其实这时候你只要输入一个part,按bash,它就会帮你往回找。连续按可按顺序向前搜索。(或直接按进入)。继续上面的例子,输入echo后,效果如下:(reverse-i-search)`echo':echowaht|vim-如果有正向搜索,那么一般都会有反向搜索。可惜后面搜索的快捷键是,你试着按一下,你会发现……机器好像没有反应。这是因为大多数情况下默认是XOFF,即暂停接收输入。按恢复。当然也可以将正向搜索绑定到其他键上,请自行搜索。虽然cloc说代码行数并不能说明什么问题,但有时候我只是因为某些原因想知道而已。cloc可以准确统计代码行数,区分注释和空格。如果你是传奇项目经理,从今天开始使用cloc为你的码农计算工资吧!附截图:$cloc/usr/include/9628textfiles.9308uniquefiles.434filesignored.T=39.0s(227.6files/s,39948.2lines/s)--------------------------------------------------语言文件空白注释代码----------------------------------------------------C/C++Header88752173662870131053368Teamcenterdef1480186------------------------------------------------------总和:88762174142870131053554----------------------------------------------printenv可以查看所有shell变量和shell函数设置,但其中一些只在当前shell中工作。通常你需要找的是export定义的环境变量。printenv用于执行此操作。set-ovibash或许大部分常见的shell其实都支持vi方式的命令行编辑,比如设置set-ovi后,可以使用熟悉的hjkl移动,使用w,b跳过单词等等.同样的,如果设置了EDITOR环境变量,输入fc就可以将之前输入的命令行放入编辑器中进行编辑,只要保存就会执行。相反,放弃储蓄就等于放弃。find仔细阅读了上面提到的这本书,最大的收获之一就是终于学会了find的使用方法。这已经成为我几乎每天都使用的命令。比如我想把目录下的所有png文件都添加到这次gitcommit中,我可以使用:find.-name'*.png'-execgitadd{}';'如果熟悉find就知道最后的;将它替换为+会更好,但它是有目的的。虽然这个命令看起来很简单,但是如果省略单引号或者用双引号代替,命令就会失败。这些涉及“shell变量扩展”和引号的转义规则虽然烦人,但只是一些简单的规则,一致性很好。所以只要你愿意花一些时间去弄清楚相关的东西,这个简单的问题是可以轻松解决的。type如果foo是一个可以在命令行直接运行的程序,你应该知道使用whichfoo可以找到foo的可执行文件路径在哪里。但是,在命令行中可以执行的命令并不一定对应于一个可执行文件。可以是别名、shell自带的函数、用户自己的函数等等。因此,当您找不到与之相关的东西时,有时可能会感到困惑。其实可以通过typefoo看foo是什么类型。上面的帮助提到了“builtincommand”,也就是内置命令,是shell提供的一些基本命令,或者是外部程序做不到的一些基本命令。通常你可以使用man查看文档,但是对于内置命令man会跳转到shell自己的联机帮助页。在某些系统中,它是一个巨大的页面。你必须在其中找到你想看到的东西,而有些系统根本就没有。相关信息。在这种情况下,可以使用内置命令help来解决这个问题:例如,如果你想查看set接受的选项,你可以使用helpset轻松找到它们。env你应该知道#!(shebang)在脚本的第一行是指定它的“运行时”。假设您想编写一个Python脚本,但您并不真正关心它的版本,或者您不确定它的可执行文件在另一台机器上的位置。那么env在这里就可以派上用场了。可以写成#!/usr/bin/envpython,这样执行时会使用当前PATH中找到的python。另一方面,这也是您在不修改代码的情况下重新选择“运行时”的机会。file如果你想知道某个路径上的文件是什么类型,那么使用file是完美的。它可以对任何事物给出有意义的解释,对于二进制文件,它会列出很多相关的重要信息。字符串“我把我的秘密放在这个用C++编写的程序中。运行一下,输入正确的密码就可以看到”。其实遇到这种情况,十有八九只需要运行stringsprogram-written-in-cxx就可以看到了,可以更准确的列出二进制文件中包含C风格的字符串,看似无意义,但实际上功能完全由你决定,比如你想知道一个程序是哪个版本的GCC编译出来的,使用字符串可能会有结果。od的整个过程应该是“对象转储”,你可以用八进制,十六进制或其他方式显示文件。我想大多数情况下每个人都在使用od-c以ASCII码转储文件。一个用例是看什么文件的行尾是怎么样,比如执行od-cfoo.txt显示如下结果:$od-cfoo.txt0000000hello\tworld\r\nyea0000020h0000021可以清楚的看到\t是制表符,和\r\n是一个Windows风格的换行符。最后没什么特别的,但如果我以后遇到一个有用的命令行工具,我会在这里添加。