`
lxs647
  • 浏览: 523204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最牛B 的 Linux Shell 命令(一)【转】

阅读更多
最牛B 的 Linux Shell 命令(一)

引言

Shell作为Unix系操作系统当中最有魅力且不可或缺的组件,经过数十载的洗礼不仅没有被淘汰,而且愈加变得成熟稳健,究其原因,大概因为它是个非常稳固的粘合剂,能够把大量功能强大的组件任意配搭,总能很好很快地完成用户的任务。

本文的一些命令很可能看起来是“雕虫小技”,我们只好仰慕一下Shell大牛了,但是有些细节我会稍加发掘加以说明,遇到有趣的地方希望能博您一笑了。

1.以sudo运行上条命令

$ sudo !!

大家应该都知sudo,不解释。但通常出现的情况是,敲完命令执行后报错才发现忘了sudo。这时候,新手用户就会:按上箭头,按左箭头,盯着光标回到开始处,输入sudo,回车;高手用户就蛋定多了,按Ctrl-p,按Ctrl-a,输入sudo,回车。

这里介绍这个是天外飞仙级别的,对,就直接sudo !!。

当然这几种解决方式效果是完全一样的,只是款不一样,嗯,不解释。

两个感叹号其实是bash的一个特性,称为事件引用符(event designators)。!!其实相当于!-1,引用前一条命令,当然也可以!-2,!-50。默认情况下bash会在~/.bash_history 文件内记录用户执行的最近500条命令,history命令可以显示这些命令。

关于事件引用符的更多用法可以深入阅读The Definitive Guide to Bash Command Line History。

2.以HTTP方式共享当前文件夹的文件

$ python -m SimpleHTTPServer

这命令启动了Python的SimpleHTTPServer模块,考虑到Python在绝大多数的Linux发行版当中都默认安装,所以这个命令很可能是最简单的跨平台传文件的方法。

命令执行后将在本机8000端口开放HTTP服务,在其他能访问本机的机器的浏览器打开ttp://ip:8000即打开一个目录列表,点击即可下载。

3.在以普通用户打开的vim当中保存一个root用户文件

:w !sudo tee %

这题目读起来纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会 提示)等编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。

查阅vim的文档(输入:help :w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。

tee是一个把stdin保存到文件的小工具。

而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。

所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。

4.切换回上一个目录

$ cd -

应该不少人都知道这个,横杆-代表上一个目录的路径。

实际上cd -就是cd $OLDPWD的简写,bash的固定变量$OLDPWD总保存着之前一个目录的路径。

相对地,$PWD总保存着当前目录的路径。这些变量在编写shell脚本时候相当有用。

5.替换上一条命令中的一个短语

$ ^foo^bar^

又是另外一个事件引用符(event designator),可以把上一条命令当中的foo替换成bar。

在需要重复运行调试一道长长的命令,需要测试某个参数时候,用这个命令会比较实用;但多数人会首先选择按上箭头提出上道命令,再移动光标去修改某参数,这样更直观,但效率上就不够使用引用符高,而且在脚本中用这个方法可以简化很多。

这道命令的原始样式应该是这样的:

!!:s/foo/bar/

本文一开始介绍过!!,后面的一段大家应该很熟悉,vim、sed的替换操作都是这样的语法。

关于事件引用符的更多用法可以深入阅读The Definitive Guide to Bash Command Line History

6.快速备份一个文件

$ cp filename{,.bak}

这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于bash对大 括号的展开操作,filename{,.bak}这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。

大括号在bash里面是一个排列的意义,可以试试这个:

$ echo {a,b,c}{a,b,c}{a,b,c}

将输出三个集合的全排列:

aaa aab aac aba abb abc aca acb acc
baa bab bac bba bbb bbc bca bcb bcc
caa cab cac cba cbb cbc cca ccb ccc
关于shell当中的集合操作,可深入阅读“Set Operations in the Unix Shell”

7.免密码ssh登录主机

$ ssh-copy-id remote-machine

这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys内,这样下次使用ssh登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码了。前提是你当前用户有生成了公钥,默认是没有的,先执行ssh-keygen试试吧!

这个命令如果用手工完成,是这样的:

your-machine$ scp ~/.ssh/identity.pub remote-machine:
your-machine$ ssh remote-machine
remote-machine$ cat identity.pub >> ~/.ssh/authorized_keys

如果你想删掉远程主机上的密钥,直接打开authorized_keys,搜索你的用户名,删除那行,即可。

8.抓取Linux桌面的视频
1
$ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

我们在一些视频网站上看到别人的3D桌面怎么怎么酷的视频,通常就是这么来的,ffmpeg可以直接解码X11的图形,并转换到相应输出格式。

ffmpeg的通常用法是,根据一堆参数,输出一个文件,输出文件通常放最后,下面解析下几个参数:

-f x11grab 指定输入类型。因为x11的缓冲区不是普通的视频文件可以侦测格式,必须指定后ffmpeg才知道如何获得输入。

-s wxga 设置抓取区域的大小。wxga是1366*768的标准说法,也可以换成-s 800×600的写法。

-r 25 设置帧率,即每秒抓取的画面数。

-i :0.0 设置输入源,本地X默认在0.0

-sameq 保持跟输入流一样的图像质量,以用来后期处理。

后记
说Shell是一种编程语言,可能有些尴尬,虽然很多人每天都在用Shell,但从来没见它荣登TIOBE编程语言排行榜之类的,可以 说毫无名分,因为很多用户没意识到它是一种语言,只当做这是一个能够很好完成任务的工具,基本得理所当然,就好像GUI程序的菜单、按钮一样。

掌握Shell,通常能够让任务在数秒钟内完成,这就让Shell跟C、Perl、Python这些语言区别开来,没人否认后者更能胜任更多的任 务,但是他们是在不同的层面上去做,Shell依赖大量的系统组件黏合调用,而后者依赖各种库,各所擅长不同的应用领域,比喻就是,Shell是混凝土, 可以很方便地粘合一些建筑组件而成为稳固的高楼大厦;但同样是粘合剂,粘玻璃窗、粘书报、粘皮鞋,混凝土是绝对不合适的,Shell并不擅长一些细致操 作,比如它连浮点运算都不支持,更别提什么图形运算什么的。但这并不妨碍Shell来帮我们完成很多粗重任务。

Shell的工作方式,大多数入门用户会觉得枯燥难学,而所谓的经典教材也离不开《Advanced Bash-Scripting》、《Bash Guide for Beginners》,但类似本文这样的一些“雕虫小技”因为难登大雅之堂绝不会收录进去。这情况如果象国外一些unix用户比较多的地方会有很好改善, 即使是新手,偶尔看看别人的操作都能“偷师”一手,我编译本系列文章其实也就希望稍微改善一下这个状况。

 

http://hi.baidu.com/hy0kl/blog/item/5508384fec1ec438aec3ab0e.html

分享到:
评论

相关推荐

    最牛B的 Linux Shell 命令

    最牛B的 Linux Shell 命令,最牛B的 Linux Shell 命令,

    最牛B的Linux_Shell命令

    标题《最牛B的Linux_Shell命令》所指向的知识点覆盖了Linux中Shell命令的强大和便捷性,尤其是在完成系统管理任务时的实用性。Shell命令之所以重要,是因为它们充当了用户和操作系统之间的接口,能够调用和控制底层...

    最牛的Linux Shell 命令.pdf

    【Linux Shell 命令详解】 在Linux操作系统中,Shell是一个至关重要的组成部分,它作为用户与系统交互的接口,提供了一系列强大的命令行工具。本文将详细介绍一些顶级的Linux Shell命令,帮助用户提升在Linux运维和...

    最牛B的 Linux Shell 命令 中文版

    Shell作为Unix系操作系统当中最有魅力且不可或缺的组件,经过数十载的...本文的一些命令很可能看起来是"雕虫小技",我们只好仰慕一下Shell大牛了,但是有些细节我会稍加发掘加以说明,遇到有趣的地方希望能博您一笑了。

    最牛B的linuxBshell命令

    最牛B 的 linux B shell 命令 最牛B 的 linux B shell 命令

    Linux常用命令大全Linux常用命令深入理解Linux内核鸟哥的Linux私房菜Linux命令学习资料(12个).zip

    Linux常用命令大全Linux常用命令深入理解Linux内核鸟哥的Linux私房菜Linux命令学习资料(12个): Linux命令大全(Linuxidc.com修改版).chm Linux命令学习.chm Linux基础命令教程(豪华版).chm LINUX安全加固手册.doc ...

    Linux Shell编程最牛面试题全揭秘 119页

    Linux Shell编程是一种使用命令行解释器(如bash)编写脚本的方式,它在Linux系统管理、自动化任务和处理文本文件等方面有着广泛的应用。Shell脚本的使用是面试Linux系统管理员、运维工程师、DevOps工程师等职位时必...

    史上最牛b的linux教教程

    Linux 是一个自由和开放的操作系统,广泛应用于服务器、嵌入式系统、移动设备等领域。asterying Linux 需要了解其基础知识点,以下是 Linux 基础知识点总结: 1. Linux 严格区分大小写 Linux 操作系统严格区分大小...

    史上最牛Linux教程

    史上最牛Linux教程。 简单,易学,页数不是很多。

    linux下最牛B的测网速软件,没有之一

    本文将详细介绍一款被誉为“Linux下最牛B的测网速软件”——iperf,以及如何利用它来进行网络速度和性能的测量。 iperf是一款强大的网络性能测试工具,它支持TCP和UDP协议,可以用来测量带宽、延迟抖动以及网络连接...

    linux命令大全(15部最全面的CHM文档)linux命令手册集合最新版本

    Mint11官方中文手册.pdfLinux命令大全(Linuxidc.com修改版).chmLinux命令学习.chmLinux基础命令教程(豪华版).chmLinux基础命令教程豪华版.chmLINUX安全加固手册.docLinux常用命令全集.CHMLinux常用命令大全.chm史上...

    史上最牛的Linux内核学习方法论.doc

    本文旨在提供一种高效的学习方法,帮助读者快速掌握Linux内核的基本概念和技术要点,特别是通过Kconfig和Makefile来指导学习路径。 #### 二、Kconfig和Makefile的重要性 Kconfig和Makefile是Linux内核中两个非常...

    linux命令大全.rar

    对于那些希望成为Linux高级用户的人来说,《史上最牛Linux教程》可以是一个很好的选择。这本书可能包含了丰富的Linux知识点和实战技巧,既有基础命令的讲解,也有对系统深层次原理的探究,适合有一定基础的用户...

    史上最牛的Linux内核学习方法论

    Linux内核的学习是一个复杂而深入的过程,涉及到操作系统的核心机制、硬件接口、驱动程序以及系统调用等多方面知识。在探索如此庞大的代码库时,掌握正确的学习方法至关重要。标题所提及的“史上最牛的Linux内核学习...

    史上最牛的linux教程学习笔记整理

    史上最牛的linux教程学习笔记整理、linux学习笔记整理、

    Linux常用命令和基础命令和教程,好用,非常推荐

    所提供的资源如“史上最牛Linux教程”、“Linux基础命令教程豪华版”和“Linux常用命令”都是很好的学习材料,值得深入研究。学习Linux不仅能提升工作效率,也有助于理解计算机系统底层工作原理,为成为IT专家打下...

    史上最牛的Linux内核学习方法

    ### 最强Linux内核学习法:深入理解Kconfig与Makefile #### 一、引言 在探索Linux内核的世界时,很多初学者可能会感到迷茫和困惑,不知道从何入手。尤其是在面对庞大的代码库时,如何高效地找到自己感兴趣的部分是...

Global site tag (gtag.js) - Google Analytics