(高手们只要掌握不多的一些命令就可以从容完成许多复杂的任务) shell 编程的本质,就是将多步骤的复杂任务分解,然后使用流程控制语句将命令行串接起来,从而实现强大的自动化处理。 Linux 还要用鼠标吗?https://www.toutiao.com/article/7184726094896038458/?log_from=4c999ea9ac0ed8_1672889779984 现在找互联网行业的技术工作,有一项技能是必备的,那就是能熟练使用 Linux 操作系统。无论你是想做开发、测试、运维,看看各大厂的要求吧,都要求会 Linux。 Linux 并不容易上手,尤其是它的命令行(Command Line Interface, CLI)操作方式会让初学者难以适应。不过有句话说的是:GUI 使简单的工作更简单,而 CLI 使完成艰难的任务成为可能。 记得我刚入行时,用 Linux 还在 GUI 界面下操作。结果有一回去跟一位技术大牛做对接就出糗了,我正到处寻摸鼠标,大牛一脸嫌弃地说:“Linux 还要用鼠标吗?” 大牛说着调出命令行界面,手指在键盘上一通飞舞,就把一个我认为很困难的任务给快速搞定了。这是我对命令行的威力,第一次有直观的感受。当然,大牛的那句话我也一直记到现在。 命令行,就是 Linux 对外提供的人机操作接口。对于技术人来说,把操作命令行这门手艺修炼好,就可以将 Linux 的强大能力发挥出来。 进入命令行世界的第一站,我们先了解一下命令行的哲学。 命令行哲学:极致的艺术对于第一次打开 Linux 终端的初学者来说,最痛苦的有两件事:第一是瞪着屏幕上闪烁的光标,总觉得这样操作太低级;第二是看着1000多个系统命令心发慌,这怎么学得完? 平心而论,学习 Linux 命令行的门槛也就在这里,但为什么要这么设计呢?这就要从 Linux 操作系统的设计理念说起。 Linux 其实是一种类 Unix 操作系统,而 Unix 是出自贝尔实验室的 Kenneth Thompson 之手。Thompson 大神在设计 Unix 命令时化繁为简,定下了一个基调:一次只做一件事,做到极致。 Kenneth Thompson 这个意思就是某个命令行程序,它只完成一项任务,并且把这项任务做到功能完备。例如 echo 就是回显文本;cat 就是显示文件内容;ls 就是显示磁盘目录内容。你要做什么,第一反应就是这个程序,而不会想到别的。 当我们理解了这个设计思想后,可能又会觉得这个道理太简单了,好像天经地义的一样。但这也是经历了前人的失败之后才总结出来的经验,大神不同于常人之处,就在于他能想到用最简单的办法去解决最复杂的问题。 所以,我们在学习 Linux 命令行时,没有必要去熟悉所有命令程序。只需要掌握好最常用的几十个命令,并能根据任务要求去检索一些特殊的命令进行组合,这就能很好地完成工作了。 明白了道理,就要踏实做好实践。为了打消你放弃的念头,我们就从实例上手。 命令行初探:从入门到放心探索 Linux,最佳起点是学会操作文件系统。因为这包括如何切换目录、查找文件、编辑文本、运行可执行程序等。在此我假设各位已经安装好了一个 Linux 发行版,并且知道如何打开一个终端 Terminal 窗口。 终端窗口是与 Linux 的 shell 程序打交道,它会将用户输入的命令文本传输给 shell,然后 shell 会传递给 Linux 内核去执行,得到结果后再返回给终端窗口。 基本文件操作
掌握了这几个命令,就可以对 Linux 的树形目录组织结构进行游历了。例如 /usr 目录下都有哪些子目录,每个子目录中又有什么内容。友情提示:不要在 root 权限下执行 rm -rf /,不要执行,不要执行,因为这个事故责任我担不起哈。 留一个思考题,如何在大量的文件中查找某个文件是否存在,例如在 /usr/bin 目录下查找python程序。提示:可使用 find 命令。 神奇的管道 不知道你注意到没有,单个命令只能完成一件事,那么复杂一点的需求怎么完成?答案是把命令行进行组合,它依赖的技术就是管道。 这是 Thompson 大神的神来之笔,其实他当年也受困于如何在程序之间传递数据的问题。后来有一天如同上帝亲吻了他的脑门,他猛然悟道,于是只用了一个小时就在系统调用中实现了管道。这就是将程序的孤岛给连接起来的竖线符:“|”。 用实例来感性体验一下,问:/usr/bin 目录下总共有多少个文件?你还在一个一个数吗,我的是 1060。下面就是我的方法:
这就是组合的威力,也是为什么高手们只要掌握不多的一些命令,就可以从容完成许多复杂的任务。当然,这也需要不断思考和练习,逐步提升水平。如果上来就是大力出奇迹的蛮干,那只能在一个低水平里重复。 玩熟一个文本编辑器 在 Linux 下编辑文本是最常用操作,程序员写代码、测试写脚本、运维改配置,都绕不开这一步。我强烈建议大家不要只在 Windows 上编辑文件然后上传,而要踏实掌握一个文本编辑器,例如 vim。 尽管 vim 有最难学会的编辑器称号,但掌握了它会有多爽真的只有自己才知道。关于学习 vim 的建议我只有一个,那就是运行 vimtutor 命令,这是一个交互式的学习环境,轻松就助你掌握 vim。 学习到这里还没放弃,我想你应该对 Linux CLI 感到放心了,下面我们就更进一步,走向专业之路。 命令行进阶:shell 编程卓越的工程师都对效率有着偏执的追求,他们无法忍受低效重复的工作,总要想尽办法使之自动化。Linux 下的 cron 这个定时自动执行命令,就是 Thompson 大神亲手所写。据说“cron”是他为了纪念希腊语的“时间”一词。 可以说,shell 编程能力的高低,是专业和业余的分野。shell 编程的本质,就是将多步骤的复杂任务分解,然后使用流程控制语句将命令行串接起来,从而实现强大的自动化处理。 shell 编程脚本语言提供的语法特性并不多,因为它的目标本来就是助力自动化,而不是成为一门特性完备的编程语言。简单的语法有利于使用者快速掌握它,并形成生产力。 我们来思考一个稍有些难度的需求:创建 100 个文件,以 0 ~ 99 命名,文件名后缀为“txt”,并在每个文件内写入一个随机数。 你打算用 vim 挨个创建并输入?千万不要这么干,下面给出一种解法:
将上述代码保存至一个脚本文件,例如 genfiles.sh 中,修改文件属性为可执行,然后在终端中执行./genfiles.sh命令,就可以进行验证。 不要满足于理解这个例子,结合工作中的实际需求,多做 shell 编程练习,成为真正的 Linux 高手吧。 结语记得在工作多年之后,给新人培训 Linux 操作时,有位小伙子很殷勤地帮我把鼠标递过来,我下意识地就说了一句“Linux 还要用鼠标吗?” 说完这话我自己也觉得有意思,于是就跟他们分享了我当初的那段经历。现在他们也成长起来了,不知道会不会把这个故事流传给更多人。 现在 Linux 已经是互联网的基础设施,对它的操作哪怕是生疏一些,都会在工作效率上被别人拉下一大截。所以技术人要在自己的技术栈中,将 Linux CLI 操作排在重要位置,多想多练。 最后,手边常备《Linux 命令行大全 第2版》,你需要知道的命令行知识里面全都有。你能不能把操控命令行这门手艺,耍得风生水起,就看你读书是不是认真啦。 |
|
来自: 山峰云绕 > 《Linux和Unix系统分区安装引导原理》