编者按
本文编译自commandlinefu.com的系列文章Top Ten One-Liners from CommandLineFu Explained 。作为一个由用户推荐最有用shell命令的网站,其记录了数以万计的各色shell命令,其中不乏相当实用和有趣的,本文就要细数当中获投票最高的一些命令,从其中取材并加以细释,希望读者能从中受益。
编辑:@BOYPT
1.用你最喜欢的编辑器来敲命令
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.清空或创建一个文件
1 |
>
file.txt
|
>
在shell里面是标准输出重定向符,即把(前部个命令的)命令行输出转往一个文件内,但这里没有“前部命令”,输出为空,于是就覆盖(或创建)成一个空文件了。
有些脚本的写法是:>file.txt
,因为:
是bash默认存在的空函数。
单纯创建文件也可以用$touch file.txt
,touch本来是用作修改文件的时间戳,但如果文件不存在,就自动创建了。
3.用ssh创建端口转发通道
1 |
ssh -N -L2001:remotehost:80 user@ somemachine |
这个命令在本机打开了2001端口,对本机2001端口的请求通过somemachine
作为跳板,转到remotehost
的80端口上。
实现效果跟术语反向代理
是相似的,实际上就是端口转发,注意上面的描述涉及了3台主机,但当然somemachine可以变成localhost。
这个命令比较抽象,但有时候是很有用的,比如因为众所周知的原因国内的IP的80端口无法使用,又或者公司的防火墙只给外网开了ssh端口,需要访问内部服务器一个web应用,以及需要访问某些限定了来源IP的服务,就可以用上这个方法了。
举一个具体例子,运行:
1 2 |
ssh -f -N -L 0.0.0.0:443 :twitter.com:443 shell.cjb.net ssh -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.重置终端
1 |
reset |
如果你试过不小心cat了某个二进制文件,很可能整个终端就傻掉了,可能不会换行,没法回显,大堆乱码之类的,这时候敲入reset回车,不管命令有没有显示,就能回复正常了。
实际上reset
命令只是输出了一些特殊字符,我们看BusyBox里面最简单的reset程序的实现:
1 |
printf ( "\033 c\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.在午夜的时候执行某命令
1 |
echo cmd | at midnight |
说的就是at
这个组件,通常跟cron
相提并论,不过at
主要用于定时一次性任务,而cron
定时周期性任务。
at
的参数比较人性化,跟英语语法一样,可以tomorrow, next week之类的,详细的查看手册man at
。
6.远程传送麦克风语音
1 |
dd if =/ dev/ dsp | ssh username@ host dd of =/ dev/ dsp |
没错就是实现一个喊话器的功能。
/dev/dsp是Linux下声卡的文件映射(Digital Signal Proccessor),从其中读数据就是录音,往里面写数据就是播放,相当简单!
dd是常用的数据拷贝程序,如果不同时指定if、of,就直接使用stdin/stdout来传输。
如果你没有远程主机,可以试试这样:
1 |
dd if =/ dev/ dsp of =/ dev/ dsp |
直接回放麦克风的声音,只是有一点延时。
但是如果有别的程序正在使用声卡,这个方法就不凑效了,因为一般的声卡都不允许多个音频流同时处理,可以借用alsa组件的工具,arecord跟aplay:
1 |
arecord | ssh username@ host aplay |
本地回放就是:
1 |
arecord | aplay |
如果你想吓吓别人:
1 |
cat / dev/ urandom | ssh username@ host aplay |
7.映射一个内存目录
1 |
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对比远程文件跟本地文件
1 |
ssh user@ host cat / path/ to/ remotefile | diff / path/ to/ localfile - |
diff通常的用法是从参数读入两个文件,而命令里面的-
则是指从stdin读入了。
善用ssh可以让web开发减少很多繁琐,还有比如sshfs
,可以从编辑-上传-编辑-上传
的人工循环里面解脱出来。
9.查看系统中占用端口的进程
1 |
netstat -tulnp |
Netstat是很常用的用来查看Linux网络系统的工具之一,这个参数可以背下来:
-
-t
: 显示TCP链接信息 -
-u
: 显示UDP链接信息 -
-l
: 显示监听状态的端口 -
-n
: 直接显示ip,不做名称转换 -
-p
: 显示相应的进程PID以及名称(要root权限)
如果要查看关于sockets更详细占用信息等,可以使用lsof
工具。
Related posts:
- 最牛B的Linux Shell命令 系列连载(一) 编 者按 本文编译自commandlinefu.com的系列文章Top Ten One-Liners from CommandLineFu Explained。作为一个由用户推荐最有用shell命令的网站,其记录了数以万计的各色shell命令,其中不乏相当实用和有趣的,本文就要细数当 中获投票最高的一些命令,从其中取材并加以细释,希望读者能从中受益。 编辑:@BOYPT 引言 Shell作为Unix系操作系统当中最有魅力且不可或缺的组件,经过数十载的洗礼不仅没有被淘汰,而且愈加变得成熟稳健,究其原因,大概因为它是个非常 稳固的粘合剂,能够把大量功能强大的组件任意配搭,总能很好很快地完成用户的任务。...
- 快速添加 Ubuntu PPA 源 Ubuntu 的 LaunchPad 平台上提供了强大的 Personal Pacakges Archive,简称 PPA。PPA 允许任何人上传自己编译的 deb...
- Ubuntu 快速部署 SSH SSH 是一个十分常用的远程控制服务,作为一个系统管理员,学会使用 SSH 是一个必备的技能。 在 Ubuntu 下安装 SSH 服务是十分容易的。仅仅需要安装 openssh-server...
以上关联文章由 Yet Another Related Posts Plugin 提供支持。
相关推荐
最牛B的 Linux Shell 命令,最牛B的 Linux Shell 命令,
标题《最牛B的Linux_Shell命令》所指向的知识点覆盖了Linux中Shell命令的强大和便捷性,尤其是在完成系统管理任务时的实用性。Shell命令之所以重要,是因为它们充当了用户和操作系统之间的接口,能够调用和控制底层...
【Linux Shell 命令详解】 在Linux操作系统中,Shell是一个至关重要的组成部分,它作为用户与系统交互的接口,提供了一系列强大的命令行工具。本文将详细介绍一些顶级的Linux Shell命令,帮助用户提升在Linux运维和...
Shell作为Unix系操作系统当中最有魅力且不可或缺的组件,经过数十载的...本文的一些命令很可能看起来是"雕虫小技",我们只好仰慕一下Shell大牛了,但是有些细节我会稍加发掘加以说明,遇到有趣的地方希望能博您一笑了。
最牛B 的 linux B shell 命令 最牛B 的 linux B shell 命令
Linux常用命令大全Linux常用命令深入理解Linux内核鸟哥的Linux私房菜Linux命令学习资料(12个): Linux命令大全(Linuxidc.com修改版).chm Linux命令学习.chm Linux基础命令教程(豪华版).chm LINUX安全加固手册.doc ...
从提供的文件内容来看,这本书涵盖了一系列与Linux Shell编程相关的面试题目,这些问题既包括了基础知识点,也包括了实际工作中可能遇到的各种场景。下面,我将根据提供的内容,总结一些重要的知识点和面试题目的...
Linux 的命令格式通常由命令名、选项和参数组成,例如 `ls -l`、`mkdir -p` 等。 11. Linux 目录处理命令 Linux 目录处理命令包括 `ls`、`mkdir`、`cd`、`pwd`、`rmdir` 等,用于目录的管理和操作。 12. Linux ...
- **最牛B的Linux Shell命令**:分享了一些高级用户和开发者可能会感兴趣的Linux命令。 #### 曹江华的职业发展经历: - **背景介绍**:曹江华毕业于机电一体化专业,起初从事CAD设计工作,后因工厂生产线停产,...
"Linux文档大全.zip" 包含了一系列关于Linux的学习资料,旨在帮助用户从初学者到精通者全面提升对Linux的理解和操作技能。以下是对这些文档内容的详细解读: 1. **《鸟哥的Linux私房菜》**:这是一本非常知名的...
《鸟哥的Linux私房菜第二版包括基础和服务器》是该系列的升级版,内容更加丰富,特别强调了服务器管理方面的知识,对网络服务、系统安全和性能优化等进行了深入讲解。 《学成Linux快手》可能是一本快速学习Linux的...
史上最牛Linux教程。 简单,易学,页数不是很多。
Mint11官方中文手册.pdfLinux命令大全(Linuxidc.com修改版).chmLinux命令学习.chmLinux基础命令教程(豪华版).chmLinux基础命令教程豪华版.chmLINUX安全加固手册.docLinux常用命令全集.CHMLinux常用命令大全.chm史上...
### Linux内核学习方法论——以U盘驱动为例 #### 一、引言 随着Linux系统的广泛应用和发展,越来越多的人开始接触并尝试理解Linux内核的工作原理。然而,面对庞大的Linux内核源码库,初学者往往会感到无从下手。...
所提供的资源如“史上最牛Linux教程”、“Linux基础命令教程豪华版”和“Linux常用命令”都是很好的学习材料,值得深入研究。学习Linux不仅能提升工作效率,也有助于理解计算机系统底层工作原理,为成为IT专家打下...
### 最强Linux内核学习法:深入理解Kconfig与Makefile #### 一、引言 在探索Linux内核的世界时,很多初学者可能会感到迷茫和困惑,不知道从何入手。尤其是在面对庞大的代码库时,如何高效地找到自己感兴趣的部分是...
史上最牛的linux教程学习笔记整理、linux学习笔记整理、