拥有扎实的编程基础显然是一位优秀软件工程师的必备素质。无论是像Python这样的解释型语言,还是像C++这样的编译型语言,至少掌握一门编程语言至关重要。然而,这只是成为一个真正全面发展的工程师的一个方面。如果你在Shell环境下迷失方向,那些基础知识也就毫无用处了。
在Bash中灵活运用命令将带你到达传统编程语言无法触及的领域。有时候,你实际上并不需要使用更强大的编程语言。通过仅仅使用Shell,你可以更快、更轻松地完成所需任务,而且不需要额外的依赖。
在本文中,我们将探讨一些非常实用的Bash命令。这些命令可以帮助你避免编写比实际需要更多的代码。下次遇到问题时,不妨试试这些命令。
1、循环命令
linuxmi@linuxmi:~/www.linuxmi.com$ while true; do echo "hello $(date)"; sleep 1; done
你不必为了循环一些东西而跳进一个庞大的编程语言中。如果你想定期获取一些输出或需要迭代一些基本数据,你可以很容易地在Bash中实现这个目标。
上面的命令展示了如何在Shell中构建一个简单的无限while循环一行代码。你只需用分号把所有内容拼接在一起,就完成了。可以随意将echo命令替换为你想要执行的任何命令,并相应调整sleep定时器。
当你运行这个命令时,你应该在终端上看到日期每秒变化一次。
2、输出重定向
linuxmi@linuxmi:~/www.linuxmi.com$ echo "hello linux迷 www.linuxmi.com" | tee linuxmi.rs | less
tee命令可以做到在其他语言中需要多行代码才能实现的功能。这个方便的小工具可以让你将一些输入发送到文件或另一个命令,然后将其再次传送到另一个命令。它实际上就像在水管中安装一个“T”形阀门。你可以将一部分输出引出,而它会继续沿着管道流动。
上面的示例将从echo命令获取的“hello linux迷 www.linuxmi.com”文本发送到linuxmi.rs文件,然后继续将其发送到less。完成后,你将同时拥有一个包含输出的文件,并在屏幕上使用less显示。
3、压缩文件
linuxmi@linuxmi:~/www.linuxmi.com$ tar -czvf linuxmi.tar.gz linuxmi.sh
在命令行上移动文件和目录是一项重要的技能。如果你正在处理某个东西并需要在主机之间移动它,或者只是想压缩文件以进行离线存储,tar命令是你的好帮手。
上面的命令及其参数将把一个目录压缩成一个崭新的tar.gz归档文件。现在你可以快速地带上你的文件了。
4、计数
linuxmi@linuxmi:~/www.linuxmi.com$ echo -e "linuxmi\n linuxmi.com\n www.linuxmi.com\n www.93139.com" > linuxmi.txt | wc -l
想知道文件中有多少行?很简单。使用wc实用程序。实际上,它的含义是“word count”(单词计数),但你可以用它来计算许多不同的内容,包括行数。
上面的片段将四行文本输出到一个文件中,然后使用wc计算行数。如果你在日志文件中操作一定数量的行,或者只是想知道在进程中是否实际写入了新行到文件中,这将非常方便。
5、生成数字
linuxmi@linuxmi:~/www.linuxmi.com$ seq 95 100
如此简单,但非常有帮助。在Bash中生成数字非常容易,只需使用seq实用程序。这个巧妙的小命令将打印出一个数字序列,供你在循环、文本文件或任何需要数字列表的地方使用。
你也可以根据需要更改分隔符:
seq -s " " 1 10
或者
echo {0..10}
这将以空格而不是默认的换行符分隔所有数字。你也可以使用echo命令和..操作符获得相同类型的结果。
6、管理你的SSH密钥
linuxmi@linuxmi:~/www.linuxmi.com$ eval $(ssh-agent) && ssh-add && ssh-add -l
对SSH密钥的基本了解和如何管理它们是绝对必要的。了解ssh-add和ssh-agent实用程序将比你想象的更加有用。
上述命令执行了几个重要的操作:
- eval命令将为你执行ssh-agent,并确保它在后台运行。
- ssh-add命令将添加你的默认SSH密钥。如果你为默认密钥设置了密码,它将提示你输入密码。
- 最后,ssh-add -l命令显示当前在你的代理中添加的所有密钥。
这个简单的一行命令确保你的代理工作正常,并包含了正确的密钥。下次当你需要连接到某个服务或获取一些代码时,你就可以立即开始了。
7、查找过去的命令
linuxmi@linuxmi:~/www.linuxmi.com$ history | grep "top"
或者按下CTRL + R,然后输入top
还记得很久以前运行的那个命令吗?我也不记得了。在历史记录中搜索它吧。
如果你像我一样记忆力不太好,那么history命令非常有用。它会显示当前终端会话中所有已运行的命令列表。当你使用反向交互式搜索或grep来查找之前的命令时,它的真正威力就体现出来了。
如果你只想查看命令(并不特别关心执行它),你可以通过grep搜索历史记录。如果你想要在搜索和执行之间进行统一操作,可以使用CTRL + R组合键执行反向交互式搜索历史记录。按下这个快捷键后,你将进入一个交互提示符,当你开始输入时,匹配的命令将显示在控制台中。
8、将多个命令作为一个整体传递
linuxmi@linuxmi:~/www.linuxmi.com$ history | grep "top"
有时Bash会变得有点奇怪。变量插值可能出错,嵌套引号可能会混乱且难以跟踪。尤其是当你在其他二进制文件或服务之间传递命令字符串时,情况会更加复杂。在这种情况下,你可以使用bash命令本身将一串命令作为一个整体进行评估。
这个命令将接受纯文本字符串,并将其作为普通的Bash语法进行评估。对于外部shell来说,你只是运行一个命令并传递一个参数,但实际上你是在指示Bash解析多个命令的字符串并执行它们。