0%

Linux 工作流总结

Linux 工作流总结

​ 由于已经工作一年了,由于进行Android系统的客制化任务,其编译环境需要再Ubuntu环境下进行,故期间不停的在使用指令操作,渐渐的对Linux工作流有了新的认识与看法.回想起第一次秋招面试时有位面试官问我linux指令相关问题,:如果我要看log最后面几行我该怎么看.当时由于实战经验不足,又没有对该方面的知识死记硬背过,最后拧拧巴巴的最后不知道说了一通什么狗屎.

标准输入流与标准输出流

​ 要是在大二期间我看到这几个字,我一定是一脸问号,回想以前学Java时也遇到过这几个关键字,为什么称之为关键字,因为当时并没有理解什么时输出流与输入流,更不明白何为标准,学完Java后有了新的认识,一种抽象概念,讲的是将数据或者其他东西输入到系统(内存)中,这一过程抽象为输入流,反之从内存输出到其他设备如磁盘\显示器等则为输出流.在这一过程中我以为这只是Java这一编程语言的抽象概念而已.直到我开始阅读Linux的书籍<,发现有> 2> 这样的标准输出流存在,我开始怀疑我以前的体系(何来体系?)于是我开始接触Linux系统编程,通过系统API去感受所谓的输入流与输出流(虽然感觉并没有什么卵用)

于是没有人教我便自己领悟了怎么去保存diff文件,看书很神奇的一点在于它并未教你如何处理该情况,它只是告诉了你所谓的原理,你就能在工程中实战出来.由于在工作中经常要处理代码冲突的情况,并且是在Shell框中,一切都不是那么的自动化,所有的流程需要手动操作,所以难免的觉得麻烦,最开始由于不熟悉git操作,我采取的操作是直接将修改回退,并拉取到最新.此时如果修改不保存的话需要重新修改,故我才去的方式是将diff保存起来,方式也特别简单,由于执行 git diff时,会将diff信息输出到屏幕,也就是默认输出到屏幕.而最简单的方式便是将diff信息输出到文件即可,故 git diff > patch.diff .这样信息就不会输出到屏幕,而是被重定向输出到了patch.diff文件中.当将代码拉新后 git apply patch.diff 即可将刚保存的修改应用至代码中,简单粗暴.由于标准输出被重定向到了文件中故屏幕不再显示,此时也无法观察到diff信息,甚至不知道是否diff为空,如果不检查一下diff文件的话,将来apply时可能是竹篮打水一场空,白忙活一场,故可以使用升级方案: git diff | tee patch.diff,该方法的好处在于,不仅可以将diff保存到文件还让它在显示器上输出信息. 利用管道符号| 将输出重定向到 tee工具 ,该工具的作用在于不仅可以将标准输出流显示在屏幕还可以将其保存为文件.

​ 过滤信息,当我想要在一堆文件中过滤到想要的文件名时, 可以使用 tree -fi| grep xxx, 当然还可以用find(不熟悉)去找.

环境变量

​ 以前在学校学编程语言的时候,经常要做的第一件事情就是下载安装配置好该语言的环境变量,以前只知道根据教程一步一步走,并不知道为什么要这么操作,或者并不知道这样做会有什么用.

以Java为例,当我们开始学习该语言时,最最基本的我们需要去编译该语言,需要运行程序,所以我们需要JDK支撑,也就是说jdk里面的程序可以帮我们完成编译与运行操作,具体来说就是javac与java程序,配置环境变量的目的就是为了让计算机能够找到这两个程序.让我们在任意路径下都能够直接使用该程序.就是这么简单,那为什么配置好环境变量后就可以随处运行了呢? 原因也很简单,因为配置环境变量的位置会在第一次进入会话时执行一遍,既然执行过配置的环境变量,那变量自然也被赋予上了初始值.当我们使用bash去执行程序时,如果当前目录不存在该程序bash会帮我们去环境变量里配置好的路径里去寻找是否有我们需要的程序.这样自然就可以找到并执行了,环境变量分为系统变量与用户变量,三言两语难以讲明白,在加载时优先系统变量后加载用户变量,故用户变量配置的信息可以覆盖系统变量,优先级更高,在bash寻找程序时时先寻找用户变量配置,找到了便不会再去系统变量中寻找,故又是用户变量优先级更高.

​ 环境变量配置在用户配置文件或者系统配置文件,在每一次会话开始时被执行,这样的操作在后续是无感的,用起来非常方便,于是通过这个方法还可以做一些其他事情比如:别名 Linux命令行操作,有时候需要执行步骤复杂,对于的指令也非常复杂,于是我们可以将一些复杂的指令起一个别名 例如 alias ll =’ls -laF’, 起完别名后我们即可使用 ll 带她后面的操作,可是,alias的生效时间仅仅只有在当前会话中,如果退出登录后再登陆就再也没有用了,再想使用又要重新设置,于是为了解决这一办法,可以将该别名的设置写入用户配置文件中,这样每次退出会话时该别名虽然失效了,但进来时又会被重新设定,这样的无感知设置对于用户来说不就是永久生效吗? 别名是个好工具,在做调试Android部分源码时候由于代码比较多,嵌套文件夹很深,用cd一个个去进入很麻烦感觉像是在windows去点击寻找文件夹,设置了别名后像是在桌面加了一个快捷方式,直接点击即可进入.

Linux与C

​ c语言编译与java编译不一样的点在于,c编译[包括编译链接等一系列操作]最终生成就是二进制可执行文件,可以直接在系统上运行的,不需要其他环境,不像Java依赖于Java虚拟机才可运行.另外,在linux上编写程序遇到不知道使用的方法,可以通过man直接查阅使用方法.可惜我英文水平优先,阅读起来有点吃力.

编写脚本

​ 在开发过程中会遇到大量的重复性工作,比如拉取代码时有时候由于代码钟存在未commit内容问题,有时由于网络波动导致代码拉取失败,前者可以通过进入到对应仓库进行checkout 再手动拉取,后者可以通过不断重试解决,而这些操作要么繁琐,要么需要不断监督,很浪费个人精力,于是可以通过编写脚本优化工作流程,shell的编写方式简单、直接调用c语言库就可以解决大部分问题。