1.用你最喜欢的编辑器来敲命令

  command <CTRL-x CTRL-e>

  在已经敲完的命令后按<CTRL-x CTRL-e>,会打开一个你指定的编辑器(比如vim,通过环境变 量$EDITOR指定),里面就是你刚输入的命令,然后爱怎么编辑就怎么编辑吧,特别是那些参数异常复杂的程序,比如 mencoder/ffmpeg,一个命令动辄3、4行的,要修改其中的参数,这个方法最合适不过了,保存退出后自动执行这个程序。

  实际上这是readline 库的功能,在默认情况下,bash使用的是emacs模式的命令行操作方式,<CTRL-x CTRL-e>是 调用这个功能的一个绑定。如果你习惯使用vi模式,按<ESC v>可以实现同样功能。

  如果你喜欢别的编辑器,可以在~/.bashrc里面放上比如export EDITOR=nano的命令。

  另外一个修改命令的方法是使用fc命令(Fix Command),在编辑器里面打开上一句命令。我们的第一辑连载提过一个^foo^bar^命 令可以用fc来实现:fc -s foo=bar。

  2.清空或创建一个文件

  > file.txt

  >在shell里面是标准输出重定向符,即把(前部个命令的)命令行输出转往一个文件内,但这里没有“前部命 令”,输出为空,于是就覆盖(或创建)成一个空文件了。

  有些脚本的写法是:>file.txt,因为:是bash默认存在的空函数。

  单纯创建文件也可以用$touch file.txt,touch本来是用作修改文件的时间戳,但如果文件不存在,就自 动创建了。

  3.用ssh创建端口转发通道

  ssh -N -L2001:remotehost:80 user@somemachine

  这个命令在本机打开了2001端口,对本机2001端口的请求通过somemachine作为跳板,转到remotehost的 80端口上。

  实现效果跟术语反向代理是相似的,实际上就是端口转发,注意上面的描述涉及了3台主机,但当然somemachine可 以变成localhost。

  这个命令比较抽象,但有时候是很有用的,比如因为众所周知的原因国内的IP的80端口无法使用,又或者公司的防火墙只给外网开了ssh端口,需要访 问内部服务器一个web应用,以及需要访问某些限定了来源IP的服务,就可以用上这个方法了。

  举一个具体例子,运行:

  2

  ssh -f -N -L 0.0.0.0:443:twitter.com:443 shell.cjb.netssh -f -N -L 0.0.0.0:80:twitter.com:80 shell.cjb.net

  然后在/etc/hosts里面添加127.0.0.1 twitter.com,好吧剩下的你懂的。

  当然通常做这个功能的反向代理,应该要用squid、nginx之类,ssh就算是轻量级的尝试吧!

  4.重置终端

  reset

  如果你试过不小心cat了某个二进制文件,很可能整个终端就傻掉了,可能不会换行,没法回显,大堆乱码之类的,这时候敲入reset回车,不管命令 有没有显示,就能回复正常了。

  实际上reset命令只是输出了一些特殊字符,我们看BusyBox里面最简单的reset程序的实现:

  printf("\033c\033(K\033[J\033[0m\033[?25h");

  输出的这些字符对Shell是有特殊意义的:

  \033c: “ESC c” – 发送重置命令;

  \033(K: “ESC ( K” – 重载终端的字符映射;

  \033[J: “ESC [ J” – 清空终端内容;

  \033[0m: “ESC [ 0 m” – 初始化字符显示属性;

  \033[?25h: “ESC [ ? 25 h” – 让光标可见;

  其中字符显示属性经常用来设定打印字符的颜色等,可参考这 个博文。

  5.在午夜的时候执行某命令

  echo cmd | at midnight

  说的就是at这个组件,通常跟cron相提并论,不过at主要用 于定时一次性任务,而cron定时周期性任务。

  at的参数比较人性化,跟英语语法一样,可以tomorrow, next week之类的,详细的查看手册man at。

  6.远程传送麦克风语音

  dd if=/dev/dsp | ssh username@host dd of=/dev/dsp

  没错就是实现一个喊话器的功能。

  /dev/dsp是Linux下声卡的文件映射(Digital Signal Proccessor),从其中读数据就是录音,往里面写数据就是播放,相当简单!

  dd是常用的数据拷贝程序,如果不同时指定if、of,就直接使用stdin/stdout来传输。

  如果你没有远程主机,可以试试这样:

  dd if=/dev/dsp of=/dev/dsp

  直接回放麦克风的声音,只是有一点延时。

  但是如果有别的程序正在使用声卡,这个方法就不凑效了,因为一般的声卡都不允许多个音频流同时处理,可以借用alsa组件的工具,arecord跟 aplay:

  arecord | ssh username@host aplay

  本地回放就是:

  arecord | aplay

  如果你想吓吓别人:

  cat /dev/urandom | ssh username@host aplay

  7.映射一个内存目录

  mount -t tmpfs -o size=1024m tmpfs /mnt/ram

  这个命令开了一块1G内存来当目录用。不过放心,如果里面没文件,是不会占用内存的,用多少占多少。

  不过一般来说没必要手动挂载,因为多数发行版都会在fstab内预留了一个内存目录,挂载在/dev/shm,直接使用 即可;

  最常见的用途是用内存空间来放Firefox的配置,可以让慢吞吞的FF快很多,参见Shellex的博文:用 tmpfs让Firefox在内存中飞驰,以及后来的改进:用 tmpfs让Firefox在内存中飞驰II,其中提到的脚本来自speeding up firefox with tmpfs and automatic rsync。

  那个破烂LinuxQQ也可以用这个方法,减少因为大量磁盘IO导致的问题。

  8.用diff对比远程文件跟本地文件

  ssh user@host cat /path/to/remotefile | diff /path/to/localfile -

  diff通常的用法是从参数读入两个文件,而命令里面的-则是指从stdin读入了。

  善用ssh可以让web开发减少很多繁琐,还有比如sshfs,可以从编辑-上传-编辑-上传的 人工循环里面解脱出来。

  9.查看系统中占用端口的进程

  netstat -tulnp

  Netstat是很常用的用来查看Linux网络系统的工具之一,这个参数可以背下来:

  -t: 显示TCP链接信息

  -u: 显示UDP链接信息

  -l: 显示监听状态的端口

  -n: 直接显示ip,不做名称转换

  -p: 显示相应的进程PID以及名称(要root权限)

  如果要查看关于sockets更详细占用信息等,可以使用lsof工具。

一些风骚的shell命令行操作的更多相关文章

  1. Shell命令行操作

    1.1 shell提示符 [me@linuxbox ~]$ 如果最后一个字符是"#",表示当前终端会话有超级用户权限.使用root用户登录或者使用能提供超级用户权限的终端能获得该权 ...

  2. Hadoop HDFS的shell(命令行客户端)操作实例

    HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls                  功能:显示目录信息 示例: hadoop fs ...

  3. HDFS shell命令行常见操作

    hadoop学习及实践笔记—— HDFS shell命令行常见操作 附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop ...

  4. linux快速入门 1.1命令行操作

    http://lovesoo.org/linux-command-line-operation.html 1.1命令行操作 目录: <wp_nokeywordlink>Shell简介 &l ...

  5. MongoDB命令行操作

    本文专门介绍MongoDB的命令行操作.其实,这些操作在MongoDB官网提供的Quick Reference上都有,但是英文的,为了方便,这里将其稍微整理下,方便查阅. 这里用来做测试的是远端(10 ...

  6. WinSCP命令行操作

    WinSCP命令行操作     WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 直接在cmd下输入 ...

  7. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

  8. * 和 ?在 shell 命令行中与在正则表达式中的区别

    Linux 正则表达式 你有没有想过,在 shell 命令行中的 *,?和正则表达式中的*,?是否一样? 自打好多年前接触 DOS,就知道了* 和?这两个通配符(Wildcard),象 dir *.* ...

  9. Zookeeper的命令行操作(三)

    Zookeeper的命令行操作 1. ZooKeeper服务命令 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 1. 启动ZK服务: sh bin/zkSer ...

随机推荐

  1. [http]HTTP状态码含义

    HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应 ...

  2. 在javascript对象内搜索,貌似是一个新鲜的话题。

    为啥 也不为啥,因为没找到. 用途 也没啥用途,比如,在电影网站找到链接,在小说网站找到链接.二货同事写的复杂对象.等等吧.反正要搜索就对了. 目标 在对象内,无论多少层,找到关键字. 关键字可能的位 ...

  3. Django2.0 应用 Xadmin 报错二

    以上错误是运行点击添加数据等报异常,全是度年解决,并记录解决方法 1.报异常 ‘某个字段类型 ‘ object has no attribute ‘rel‘,点击报异常的地方,把.rel 修改为.re ...

  4. LeetCode:180.连续出现的数字

    题目链接:https://leetcode-cn.com/problems/consecutive-numbers/ 题目 编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+--- ...

  5. MongoDB divide 使用之mongotempalte divide

    需求:求一组数的两个字段计算结果的平均值 如有一组这样的数: 列名1 列名2 列名3 第一组数   a       2       5 第二组数   b       4       8 按照列名1分组 ...

  6. About Spring MVC

    一.简介 1.Springmvc是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解 ...

  7. android项目笔记整理(3)

    61.AlphabetIndexer字母索引辅助类       实现对链表类型的数据进行快速索引. 应用于类似联系人列表右侧的导航栏 注意:       1.链表里的元素必须是Object类型,并实现 ...

  8. 三台服务器的时间同步-Linux

    192.168.1.30    做服务器时间 192.168.1.40   同步30 192.168.1.50  同步30 step1.在30机器上修改ntp.conf 添加: restrict  1 ...

  9. mount的bind选项

      mount 的 bind 选项将第一个目录克隆到第二个.一个目录中的改变将会在另一个中出现 - 毕竟,它是同一磁盘上的同一个块. 使用 bind 与对同一设备进行两次挂载的区别在于:您可以挂载子目 ...

  10. VSCODE IDE开发工具的快捷键一览

    按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + ...