设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

徐小东:像黑客一样使用Linux命令行

2014-4-2 15:37| 发布者: joejoe0332| 查看: 4390| 评论: 0|原作者: 中华网科技|来自: 中华网科技

摘要:   2014年3月30日,由全球最大的中文IT社区CSDN主办的“开源技术大会·2014” (Open Source Technology Conference 2014,简称OSTC 2014)在北京丽亭华苑酒店召开。  本次大会以“启蒙·开源”(Open Mind, Open So ...
  2014年3月30日,由全球最大的中文IT社区CSDN主办的“开源技术大会·2014” (Open Source Technology Conference 2014,简称OSTC 2014)在北京丽亭华苑酒店召开。

  本次大会以“启蒙·开源”(Open Mind, Open Source)为主题,邀请到了来自全国各地的30多位开源业界资深人士发表主题演讲,数十个开源社区现场参与,到场的开源软件开发者、贡献者和开源爱好 者总人数超过500人。作为一场“接地气”的开源盛会,“OSTC 2014”以其开放性、专业性、社交性深受与会者的好评。


  徐小东:大家好,很高兴有机会在这个地方和大家分享使用Linux的一些心得,从我个人来说我使用Linux快10年了,说到命令行最近几 年每天都在使用,我使用这个命令行的原因,实现命令行的朋友都知道,有一个非常强大的特性,支持管道,管道能够把命令类的串起来,产生非常强大的威力。


  这里有一个例子,这个例子实际上单行,可能显示不完整,所以在这儿错分成多行展示,如果有同学感兴趣尝试一下命令行产生的效果是怎么样,我 使用的命令行产生下面的接口,说明我在命令行使用一段时间之后,使用命令的频率,根据编号,前10使用最多10个,用次数,用百分比,第二个原因,像我们 在使用同音画界面的时候,我拍了照片,我想知道这个照片如果在GY可能大家进行下面的操作,点击鼠标,保存这个文件夹,如果不是按照详细信息显示的话会点 击一下工具栏,让完整的显示,排序,然后再用眼睛看,这些照片是不是这个月拍的,在命令行使用两个命令LS,先列出来,把这个命令输出,推到另一个输入, 就可以了解这个照片下一个动态了。


  第三个原因LS能够自动化,在命令行输入的东西可以保存起来,保存在一个文件里,一次写好之后可以多次使用,在Linux的系统特性可以定时的完整重复性的工作。


  可能有些朋友谈到命令行的时候会感觉到不解,因为命令行的确是很古老的,现在都是GUI,为什么还去看命令行,我觉得命令行仍然具有非常重要的用途。


  下面根据我个人使用命令行的经历,向大家介绍一{敏感词}会,我做一个小小的调查大家在命令行的时候有没有输入命令的情况请举手。


  古人都说过人非圣贤,孰能无过。命令输入错了,从头输入一遍就完了,第二种如果了解命令行的特性,可以把命令调出来编辑一下,输入错了不是全错,只是错了一部分,可以编辑一下,再去执行,更省事节省时间,更高效的办法。


  下面具体的看一下,我总结起来,我们输错命令行的时候有三种情况:


  第一种情况命令输多了,比如我这儿有一个命令我想查一下文件里的内容,但是我打坏了就多打了一个字符,这个时候怎么处理,我们就可以拓字符把多余的部分涮掉,根据匹配命令行最左边的字符,负的话就是F后面的字母O会涮掉,然后执行这个命令。


  第二种可能会输错,或者命令输入少了,这个时候我们可以由两个(拓)字符,第一个拓字符跟着错误的内容,替换错误的单词,第二个拓字符跟着要替换新的字符。


  看一下myflie的内容,我们可以用替换掉错误的部分,这个错误的部分就是li,正确的部分就是il,替换之后正确的命令就能看到期待的结果。


  另外一种情况我们输入的时候可能输入少了,输入少的话也可以用拓字符去替换,我这儿有一个命令我是用ansible远程执行想看一下uptim,但是少用了一个字符一,所以用两个拓字符将少输的部分填补起来,这样的话就达到了期待的效果。


  两个拓字符只会替换命令行的一部分,最开始找到的那部分,一个命令行有两个相同的,或者三个相同的想替换,这个时可以用历史展开操作符来计算,一个冒号跟着是修饰符,全局替换的话后面会详细的讲解,用GS替换Ld,替换成6,nginx替换成squid。


  如果用gs的话还有另外一种替换的方式,可以用三个拓字符,后面跟一个大写的冒号G,这个也是做选举的替换,根据需要选择使用哪一种。


  我们简单的总结一下,三个部分,之前我们在交女朋友的时候,一哭二闹三上吊,我总结一下一删,二换,三全变。


  如果想深入研究一下的话有一个问题,拓字符为什么会有这么神奇的功效,简短回答的话,国外的名人说如果你忘记历史了,被迫说的严重了,我想提醒一下在使用命令行的话如果不善于利用历史,对我们来说是不划算的,我们要高效、快速的使用命令行,可以通过历史去完成。


  首先了解一下历史的基础知识,想知道历史记录保持的这个大小,可以看一下histsize这个变量,我这个定制是一条退,退化会话之后,下 次想进入系统,还想使用过去的历史命令行的话会保存在历史文件里,这个文件保存的位置,可以通过histfile,保存的大小也是可以通过变量查询的,可 以根据需要定制。




  说到历史,想达到的一个主要的目的如何去使用它,如何去利用它,要看历史有一个历史命令history,在这里可以看到按照顺序编号,一到三,后面都有一个完整的内容。


  有一个带星号的,因为命令行被修改过,所以带星号,一般来说历史列表比较长,默认500条,如果上千条一屏看不完,这个时候可以输入另一个命令行。


  如果快速的从历史当中找到需要的东西,如果从快捷键来说有这样的几种方式:第一个逆向搜索历史,按照ctrl+L键从最后历史往前搜索,输入H首先找到 history5。


  第二ctrl+p,如果想访问最后的一个命令行,按ctr+P就出来了。


  我们利用历史的命令不是特别的有用,这样估计会麻烦一点,会慢一点,有没有其他的好的方式引用,这些历史命令的得益于SL强大的机制,提供 以下的几种方式引用历史命令,最常见的我们需要执行的上一条命令,可以用两个惊叹号引用。如果有一个软件我想装一下,但是权限失败了,我不想输入完整的命 令行,就用两个惊叹号引用上一层命令,所以后面加两个叹号,就按照我们的要求去执行。


  其实有的时候我们引用历史命令的时候,如果能记住历史命令和字符,可以用惊叹号和你记住的字符引用命令行。比如这个例子后面跟着三个字母从 列表来找最出,找到最近的history,这个大家要注意是命令字符的开头,有的时候只能记住命令当中的字符可以用另外一种方式去引用,用一个惊叹号加一 个问号,这样的方式引用,引用这个命令行包含的这个字符,我们举的例子一个惊叹包含的IS这两个,我们注意到之前是命令当中想变量的时候用IS可以引用过 来。


  前面说历史命令的时候大家还会记得通过数字同这个命令进行编号,所以我们要用心用这个命令可以通过编号完成。第10个编号一个惊叹号+编号 10就会持续历史列表当中编号为10的命令。如果我想从历史列表从后往前执行,通过编号引用,可以在数字前面加一个符号,这个代表倒数引用。比如执行惊叹 号2后面跟一个-2,就会去执行倒数第二条命令。前面说过通过两个惊叹号就是最后一条,它等价于惊叹号-1,就是倒数第一条命令。


  有一个小的提示,如果你想通过编号的方式引用历史命令的话,可以在SL提示符里加上被所执行命令的提示,我们这儿/加一个惊叹号放在PH1变量里,在这儿你所执行的命令会在/左边显示出来,我这儿显示是1998,对于以后想重新用这个编号命令的话会有一些帮助。


  最后引用历史命令的方式,用惊叹号加警号字符,这个引用方式是引用正在输入的命令行,就是当前的命令行,比如我这儿输入了CP filename,想拷贝一下,经常情况下会把文件名完整的输出来,如果用历史引用模式的话,我们可以简写一下,一个警号,一个冒号,这个是引用当前的历 史命令,但是我们这儿后面还有一个冒号1,后面会说到是引用了这个命令行的第一个前面的word,我们这儿引用了filename。


  完整引用历史命令行的话有这样的四种方式,最后一条命令行或者以某个字符开头,包含某个字符的命令行,或者命令行有数字编号,可以这样去引用。


  其实有的时候我们利用用命令行的时候不光是想用完整的命令行,我们有的时候只想利用它的一部分,其他的部分不需要,这个有没有办法做到?也 是可以的,在此我做了一张图,我称它为历史命令word选取图,一个完整的命令行是根据空格,分格,完整的命令行,从命令到参数到选项,空格分开都不会成 为一部分,所以从命令开始算的起的话从0算起,命令本身就是0,下一个参数就是1,如果字符有引号是一个完整的整体。


  下面我们就看一下,如何引用历史命令的某一部分,我是根据使用情况最多的情况来介绍的,我们首先介绍上一个命令就是最后一位参数,我们这儿用两个字符,一个是惊叹号,一个是(DOL),这个是名冷行的最后一部分。


  如果想引用命令行第一个参数,惊叹号加头字符,这个也是来自于表达式里开头。


  同样这个地方也可以用快捷键ctrl+alt+Y,可以引用命令行的第一个参数。




  前面介绍的word如何分开的,如果我们把一个命令行看成一个数组的话,编程,每一个word就是数组的原数,一般是索引,再次我们也可以 用索引引用命令行的某一个参数,这个例子我想创建三个文件,创建之后我想对第二个文件进行编辑,这个时候我就用惊叹号中间冒号隔开2,2就是第二个参数。 其实有的时候不光是想得到某一处的word,有的时候还想得到连续的word,比如2到3,3到4,引用这样的参数的话可以用连隔符来引用。这个例子1到 2引用前面的参数。


  如果引用到最后的话用简写的方式后面加一个星号,引用用一个冒号,后面加星号,就是从第二个参数到最后一个参数。如果只是一个叹号加星号,就是所有的参数。


  做一个简单的总结,我们前面的介绍的都是根据一上一个命令的参数讲的如何引用,根据我们前面的引用完整的历史命令的话也可以和其他的方式相结合,比如一个惊叹号一个AN,会引用以AN命令行开头的最后一个参数。


  除了引用完整的命令行,也能引用命令行的具体的参数,其实有的时候我们还想对这个引用的这部分做一些具体的处理,这个修饰符就派上用场了, 看几个例子,第一个列了一个具体的目录,通过H修饰符可以取得这个参数的前半部分,操作符一个惊叹号+dort+H,回到结尾的部分可以用一个冒号加T, 下载一个原本包进行解压操作,我们这儿T引用代表路径名单的结尾部分。


  另外还可以选取文件名,可以用:R,如果是扩展名就用一个1。


  如果不想去执行这个命令的话可以用修饰符P,P的效果把这个命令打印出来,但是不会执行。这个S用来做替换的,GS就是全局替换,我们这儿一笔带过。


  修饰符需要提醒的一点两个修饰符可以组合用在一起,先取结为变成再变成大写。


  这是历史展开模式图,如何引用完整的命令行,第二利用命令行的某一个部分,第三个部分就是修饰符对它进行修饰操作。


  下面是我用的命令行比较多的情况,简单的说一下,第一个就是定义后缀别名大家用过文件管理器的话,我们要打开一个文件,只需要点击它一次, 管理器自动的调用程序打开,比如要打开PDF,系统可能就会用管理员的PDF打开它,如果实现内数效果的话可以用后缀别名定义它。用/S选项,左边是扩展 名,右边是要处理的程序,比如要打开PDF,怎么把它关联到一个程序,这样就不用输入PDF打开它,直接输入文件名,就会直接调用这个文件打开它。


  对一个文件进行备份的话用花括号,中间隔一个逗号,最后加上新的拓展名,这个展开有很多种方式,可以是字符,也可以是数字的。


  比如我要下载五张图片,连续1到5,jpg1到5,这个宽度是一致的,也可以1..10..2,展开就是1到9,反转展开的话后面用负数处理。花括号展开 的话如果是组合使用,会带来非常有趣的效果,创建一个目录结构的话用两个花括号去展开,这两个花括号也支持前面,它的威力就更加的巨大了。

   

  另外一点我们可以做一个利用命令输出的话我们可以使用命令替换,用两个反引号,或者用一个括号去做,如果分两个操作,用命令替换只需要一步就完成。


  首先找出错误,最后怎么编辑它,我们用命令替换去完成,就可以节省一步的操作。


  另外一点有一些信息想重复使用的话用变量去保存。

  
  最后我们要重复执行,命令行可以利用for in编程结果,我准备这个PPT幻灯的时候我想和Linux带来艺术化的效果,如果每个命令都执行一下的话非常的累,花时间,这个时候我可以用循环结构,重复执行这次命令。


  和我们前面提的花括号展开的话联合起来使用也会达到不错的效果。


  最后简单的提一下根据我今天讲的内容,提一下几条原则,强调一下,我们前面一直说如果引用历史,毕竟命令行是需要通过手输打字完成的,通过我们前面介绍的内容我们可以实现一个效果就是少打字,同样可以完成更多的工作,就是少打多做。


  第二个部分就是重复的东西找更好的东西处理,最后一个如果经常会用到的话要关心一下它。


  我今天讲的主要就是这些内容,如果你对Linux感兴趣,省时间高效的,以及用快捷键编辑命令行之类的,就可以作为大家拓展的内容了解。


  如果想深入学习,读一下手册,获益也有相关的书籍了解这些方面的内容。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部