Bash技巧

Bash技巧


1 运行上一条命令


!!
!-1


!!是BASH的事件引用符,!!相当与!-1,表示引用上一条命令。同理,可以使用!-2!-3等等来引用前N次的命令,可以引用命令的多少取决与~/.bashhistory文件记录的命令数。


2 快速备份一个文件


cp filename{,.bak}


该命令把filename文件拷贝成filename.bak。它的原理就在于bash把大括号扩展成filename filename.bak。


3 Ctrl+r历史搜索模式


有的时候,我们需要在Bash中重复执行先前的命令,虽然上下方向键可以使用,但是这适用于附近的几个命令。当你需要执行很早以前的命令时,Ctrl+r更方便。它可以帮助你搜索先前曾经输入的命令,一旦匹配到,直接回车即可。


4 cd - 返回上次进入的目录


如果你利用cd命令进入一个比较深的目录之后,突然丢失之后,可以使用cd - 命令返回上一次进入的目录,相当于撤销。


下面是测试实例:

4.1 进入某复杂目录下
lishuo@lishuo-Rev-1-0:/media/D/人文&技术文档/计算机编程/GCC$
4.2 cd回到主目录下
lishuo@lishuo-Rev-1-0:~$
4.3 使用cd -进行补救
lishuo@lishuoRev-1-0:~$ cd -
/media/D/人文&技术文档/计算机编程/GCC
lishuo@lishuo-Rev-1-0:/media/D/人文&技术文档/计算机编程/GCC$  


5 !$ 重复命令参数


!$的作用就是重复前一个命令的参数,另外Esc + . 可以快速切换这些命令的参数或选项。


实例:

~$ mkdir ~/桌面/test

~$ cd !$
cd ~/桌面/test

~/桌面/test


6 标准流


0stdin
1stdout
2sterr


实例:

~$ sudo smartctl --all /dev/sda 2>&1 | grep Power_On_Hours
  9 Power_On_Hours          0x0032   095   095   000    Old_age   Always       -       3996


其中grep不仅搜索标准输出,还搜索stderr的输出信息。其中"2>&1"的意思就是将便准错误的输出加入到标准输出。


7 友好显示当前挂载的文件系统


mount | column -t


column把输出结果进行列表格式化操作。


8 执行一条命令但不保存到history中


<space> command


通过在命令行前添加一个空格,就可一组织这条命令被保存到bash history中,这个行为可以通过$HISTIGNORE shell变量来设置。我的设置是HISTIGNORE="&:[ ]*" ,表示不保存重复的命令到 history 中,并且不保存以空格开头的命令行。$HISTIGNORE 中的值以冒号分隔。


9 显示当前目录素有子目录的大小


du -h --max-depth=1


–max-depth=1 参数可以让 du 命令显示当前目录下 1 级子目录的统计信息,当然你也可以把 1 改为 2 ,进一步显示 2 级子目录的统计信息,可以灵活运用。而-h 参数则是以Mb 、G 这样的单位来显示大小。


10 显示消耗内存最多的10个运行中的进程,以内存使用量排序


ps aux | sort -nk +4 | tail


11 查看ASCII表


man 7 ascii


12 在一个子SHELL中运行一个命令


(cd /tmp && ls)


当然这只是演示,要查看目录当然可以ls /tmp。好处就是不会改变当前shell的目录,以及如果命令中设计环境变量,也不会对当前shell有任何修改。


在Shell编程中还有很多使用上引号来括住一个命令:`ls /tmp`,这也是子shell过程。可是上引号的方法无法嵌套,而使用小括号的方法可以,一个比较纠结的例子.


echo $(echo -e /C|/x%24%28printf "%x" 65))


13 列出10条最长用的命令


history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}} | sort -rn | head'

13.1 改良版

下面命令可以显示命令的使用频率


$ history | \
> awk '{a[$2]++} END{for(i in a){print a[i] "\t" i "\t" a[i]/$HISTSIZE}}'\
> sort -rn \
> awk '{print $2 "\t\t" $3}' \
> sed '/^\./d' \
> head -n 10




Date: 2012-08-17 五

Author: lishuo

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值