本文转载自微信公众号“小姐姐的味道”,作者小姐姐养的狗。转载本文请联系味觉小姐公众号。这里有6个更巧妙的Linux命令!今天新鲜血液来了,突然想安利几句Linux命令。Linux非常有趣。它的KISS原理本意是好的,反而增加了用户的记忆负担。与python不同,os.dir可以看到所有函数。1.envsubst很多时候,需要动态修改配置文件中的很多信息,比如IP地址、端口等。虽然这对于高级语言来说容易一些,但是对于shell来说问题更大。这时候熟悉Linux的同学就会用到sed命令的替换方式。但是,sed命令的学习曲线有点陡峭。其实在这种情况下,还有一个比较有用的命令,那就是envsubst,可以无缝完成变量命名替换。比如有下面这个redis配置文件,我们需要动态部署,所以它的端口也不一样。端口${PORT}protected-modenodaemonizenoappendonlynocluster-enabledyesdbfilenamedump-${PORT}.rdbcluster-config-filenodes.confcluster-node-timeout15000cluster-announce-port${PORT}cluster-announce-bus-port1${PORT}我们把port,给它起个名字,叫PORT,然后,你可以把PORT作为一个变量传入,然后生成一个配置文件。PORT=6379envsubstredis-6379.conf这样envsubst就可以把PORT命名变量替换成6379了,用过k8s的同学应该对这个命令很熟悉了。2.expectexpect可以实现命令的自动化,尤其是交互场景,比如你输入makelove,它就会体现出来。下面以使用export实现两步登录的场景为例。例如,在GoogleAuthenticator中使用动态令牌。脚本可能看起来像这样。#!/bin/shexportLC_CTYPE="en_US.UTF-8"expect-c"spawnsshroot@67.226.201.167-p28869settimeout3expect\"root@67.226.201.167'spassword:\"setpassword\"bZzPddnvH88b\"send\"\$password\r\"interact"bZzPddnvH88b是我们的动态密码。上面的脚本会尝试登录主机67.226.201.167并自动输入这个密码。使用expect命令,可以完成一些交互式的自动化工作,可以节省很多时间。3.sshpassexpect非常适合非常复杂的交互环境。对于ssh登录,有一个更简单的命令,那就是sshpass,但是你的机器上可能没有这个命令,需要你主动安装。yuminstallshpass-y有了它,爱情之门瞬间就可以破了。您无需输入yes和输入凭据即可进入,所有这些都可以自动完成。您甚至可以省略-p参数并将其替换为SSHPASS环境。#sshpass-p'woshimima'sshroot@127.0.0.1'ipa'警告:将'127.0.0.1'(ECDSA)永久添加到已知主机列表中。1:lo:mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loop00:000:00back00:000:00::00brd00:00:00:00:00:00inet127.0.0.1/8scopehostlovalid_lftforeverpreferred_lftforeverinet6::1/128scopehostvalid_lftforeverpreferred_lftforever但是很有可能你执行了这个命令没有反应。这是因为你还需要提前做一些配置。#vim/etc/ssh/ssh_configStrictHostKeyCheckingno#vim/etc/ssh/sshd_configGSSAPIAuthenticationnoUseDNSno#servicesshdrestart再试一次。4、查看ip地址如何查看Linux系统的ip地址?别说你知道,各种场景下的ip地址查询你需要掌握。通常,我们会使用ifconfig命令来查看系统的ip地址,这是最常用的,但不再推荐使用。因为ifconfig属于废弃命令列表,像centos7一样,默认是没有ifconfig命令的。#ifconfigeth0:flags=4163mtu1500inet172.19.26.39netmask255.255.240.0broadcast172.19.31.255inet6fe80::216:3eff:fe34:e9a9prefixlen64scopeeid0x30:9:1a9txqueuelen1000(Ethernet)RXpackets14358451bytes5598714807(5.2GiB)RXerrors0dropped0overruns0frame0TXpackets12792784bytes11993514451(11.1GiB)TXerrors0dropped0overruns0carrier0collisions可以简写为ip命令,不用.0进入iproute工具包ipaddr命令,也可以看到ip地址。使用它还可以方便的看到keepalived、推荐等VIP信息。#ipa1:eth0:mtu1500qdiscfq_codelstateUPgroupdefaultqlen1000link/ether00:16:3e:34:e9:a9brdff:ff:ff:ff:ff:ffinet172.19.26.39/20brd172.19.31.255scopeglobaldynamicnoprefixrouteeth0valid_lft297189896secpreferred_lft297189896secinet6fe80::216:3eff:fe34:e9a9/64scopelinkvalid_lftforeverpreferred_lftforever不过现在都是云环境,很多都用docker。为了进一步简化docker镜像,很多甚至不安装iproute包。现在你不仅没有ifconfig命令,连ipaddr命令都没有,这很好。幸运的是,我们还有主机名。加上-I参数,依然可以看到系统的ip地址。#hostname-I172.19.26.39不要怕狗,条条大路通罗马。5.watch狗头,顾名思义,watch就是观察的意思。其实它可以制定一个间隔时间,然后执行你指定的命令。例如,检查文件变化、网络变化,甚至可以用来触发定时器。比如我启动一个springboot服务,如果想监控什么时候启动成功,又不想每次都执行ps,可以使用如下命令。#observewatch-n1'ps-ef|grepjava'#观察端口,更准确watch-n1'ss-ltpn|grep8080'当你的进程启动成功后,屏幕上会自动输出信息,非常方便。6、arch的命令是什么?你会发现很多软件发布包,比如i386、i486等,很容易让刚入门的人迷惑。这个命令非常简单,甚至没有参数。#archx86_64上面的命令告诉我们我的系统是x86_64位架构的,可以下载对应的软件包进行安装。不会先被其他版本的软件包破坏。x86是指英特尔公司开发的一系列处理器的架构。32位架构通常称为i386、x86,64位架构称为amd64或x86-64或x64。现在普遍使用的64位架构,这个指令集是AMD设计的,AMD授权Intel生产。如果intel也叫amd64,就有点打脸了,所以改了个名字。但是,本质是一样的。EndLinux上有很多命令,今天就介绍这几个。因为一次有那么多介绍,所以会静静的躺在收藏夹里,不在脑子里!我还是很体贴的,所以忽略其中的错别字。作者简介:品味小姐姐(xjjdog),一个不允许程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。