Bash技巧汇总

2017-04-01|Categories: Linux|

Bash快捷键

Bash keyboard shortcuts

排序、提取字段,然后格式化输出

格式化输出可以极大提升Linux配置文件的可读性:

  • sort -t ':' -k 7 /etc/passwd | cut -d ':' -f 1,3,6,7 | column -t -s ':'
  • cut -d ':' -f 1,3,6,7 /etc/passwd | column -t -s ':' | sort -k 4

14909566228936

从CentOS Terminal启动System Monitor

gnome-system-monitor:从字面推测,此命令通用于Gnome桌面环境发行版。

如果习惯了top命令,其实比图形界面的system monitor用途更广泛,也更灵活。

色彩配置

这里的色彩指的是lsgrep两个命令的输出色彩。除此之外的色彩应当由终端模拟器来提供。

Terminal.app of macOS

修改Bash配置文件:vim ~/.bash_profile

# `ls`彩色输出
# 在macOS里,`ls -G`选项是:Enable colorized output.
# This option is equivalent to defining `CLICOLOR` in the environment.
alias ls='ls -G'
alias la='ls -GA'
alias ll='ls -Gl'
# 有了`-G`选项,就不需要再设置`CLICOLOR`
# export CLICOLOR=1

# 还可以针对不同的终端主题,设置不同的`LSCOLORS`,具体的颜色可以通过`man ls`查询
# GNU `ls`不支持`LSCOLORS`变量,只能使用`LS_COLORS`
# 对我而言,下面的设置最有价值的一点是:可以让目录以粗体字显示
# For light theme:
# export LSCOLORS=ExFxBxDxCxegedabagacad
# For dark theme:
export LSCOLORS=GxFxCxDxBxegedabagaced

# `grep`关键字高亮
# export GREP_OPTIONS='--color=auto'
alias grep='grep -i --color=auto'
alias egrep='egrep -i --color=auto'

效果图:

iTerm.app of macOS

iTerm比Terminal支持更多的功能,但它同样需要读取~/.bash_profile。iTerm内置了一个「Visit Online Gallery」菜单,点击就可以下载丰富的颜色主题,我偏爱「Solarized Dark Higher Contrast」,经过反复对比,这是最完美的主题:

主题下载页面:

我在Vim同样使用了Solarized Dark主题,在MacVim里一切正常,但如果从iTerm打开控制台版本的Vim,就会有问题:

要解决很简单,把Vim主题设置为 Solarized 以外的就可以了,我偏爱自带的「desert」:

iTerm (Build 3.0.15)读取~/.bash_profile貌似有bug:

export LSCOLORS=GxFxCxDxBxegedabagaced这一行注释掉,保存后退出,然后source ~/.bash_profilels输出颜色和之前一样,并未生效,关闭标签之后重新打开iTerm才生效。

CentOS

在CentOS里面,ls和grep已经在别名里设置了--color=auto,默认会显示颜色;而ls -G--no-group)选项的作用与macOS完全不同

in a long listing, don't print group names

可以通过下面的方式修改:

cp /etc/DIR_COLORS ~/.dir_colors
vim ~/.dir_colors

CentOS默认把目录显示为蓝色,如果背景色是黑色,就看不清楚,因此我做了如下修改,把目录背景色显示为蓝色:

默认值:DIR 01;34 # directory
修改为:DIR 01;07;34 # directory

小结

设置颜色的前提是因为默认的颜色不合理,影响了正常工作,但是「Too many colors is just as useless as no color」,不要为了花哨而设置颜色,除了浪费时间,没有任何用处。

替换前一个命令的字符串

在Bash命令行中,^可用于「快速替换」前一个命令的字符串,Bash的官方手册有如下介绍:

^string1^string2^: Quick Substitution. Repeat the last command, replacing string1 with string2. Equivalent to !!:s/string1/string2/.

https://www.gnu.org/software/bash/manual/bashref.html#Event-Designators

但以上命令只能替换「第一个」字符串,如果想替换「所有的」字符串,必须使用以下命令:

!!:gs/string1/string2/

例如,要把echo 'http://bbs.etiantian.org' > /application/nginx/html/bbs/index.html的两个bbs替换成blog,必须这样:

!!:gs/bbs/blog/

备注:

  • 实际使用中,发现仅使用一个感叹号也可以完成替换:!:gs/bbs/blog/
  • ^,中文尚无通用名称,可以是插入符号、插入符、脱字符号、脱字符等;英文称为 Caret。

Tab补全路径时忽略大小写 2017-09-10

把以下内容添加到~/.inputrc

set completion-ignore-case on

# for Linux
# in macOS, must be commented out
$include /etc/inputrc

Leave A Comment