Shell(一):功能、配置和插件(附iTerm 2(for mac) && Oh My Zsh教程)

关于shell,一个广义的解释就是在用户与操做系统之间,提供一个工具或接口给用户来操做计算机系统;用户在shell中经过输入命令行,按下回车键,shell执行命令后就能返回结果,达到操做计算机的效果。  【用户与操做系统交互的接口
但有不少人会问,为何要学习shell呢?如下是我对为何要学习shell的见解:php

  • 在经过ssh来远程操纵Linux/Unix服务器时,都是使用shell而不是用户界面
  • 相比于经过点击多个用户界面来执行操做,输入命令行更加直接和快捷
  • 利用管道组合各类可用工具,来建立和定制宏工具
  • 使用shell script将重复简单的任务自动化

而shell有不少种:Bourne Shell, C Shell,Korn Shell,Bourne-again Shell,TENEX C Shell等,经过命令cat /etc/shells能够查看系统支持哪些shell:css


System Support Shell.pnghtml

Linux/Unix默认都是使用Bash(Bourne-again Shell),但我更倾向于使用zsh,但因为配置过于复杂,前期不多人使用,但后来有外国程序员弄出一个Oh My ZSH来管理zsh的配置和支持更多插件,使得zsh变得更容易使用和更增强大。linux


zsh shell.pnggit

Shell有哪些功能

  • 命令历史记录

    一旦你在shell敲入正确命令并能执行后,shell就会存储你所敲入命令的历史记录(存放在~/.bash_history文件),方便你再次运行以前的命令。
    你能够按方向键↑和↓来查看以前执行过的命令程序员


Shell Command History.gifgithub

能够用!!来执行上一条命令,但最经常使用仍是使用ctrl-r来搜索命令历史记录正则表达式


Shell Search Command History.gifshell

  • 命令和文件补全(按tab键)

    当你输入命令或文件名时,你能够经过按tab键来补全命令或文件名,这样可让你更快敲入命令和敲入正确的命令。
    有时你忘记具体某个命令,但你记住命令开头的几个字母是gi,能够敲入字母gi,按tab键来显示与前几个字母有关的全部命令:

    Shell Command Complete.gifjson

    当用cd命令前往某个目录时,你没必要敲入整个路径的全部目录名,你只需敲入目录前几个字母,而后按tab键逐个补全目录名便可。

    Shell Auto Complete Dir.gif

  • 命令别名

    命令别名是一个比较有用的东西,特别适应用于简化命令输入。好比,你要更新cocoapods时,在shell输入如下命令行

    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. pod update --verbose --no-repo-update  

    但每次都输入这么长的命令行,多么麻烦啊。因此,这时使用命令别名来简化命令行的输入:

    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. alias pod_update='pod update --verbose --no-repo-update'  

    下次你只须要输入pod_update就能够更新cocoapod
    你可使用alias命令来显示全部命令别名

    list all alias .png

  • 任务控制(job control)

    使用shell登录系统后,想要一边复制文件、一边查找文件、一边进行编译代码、一边下载软件,固然能够经过开启多个shell来完成,但若是想只在一个shell来完成以上多个任务时,此时可使用shell的一个特性任务控制

    在学会如何使用命令来控制任务以前,先了解两个概念:前台(foreground)后台(background)前台就是出现提示符让用户操做的环境,而后台就是不能与用户交互的环境,你没法使用 ctrl-c 终止它,可以使用 bg/fg 呼叫该任务。

    下面介绍一些命令如何控制任务:

    1. 将任务放在后台运行:command + &


    job control 1.png

    注意一下上面打印信息,[1]表示job number(任务编号),7089表示PID(进程号)。在后台执行的命令,若是有stdout和stderr,数据依旧输出到屏幕上,能够经过数据重定向传输到文件中,就不会影响前台的工做。

    job control 2.png

    2. 将任务丢到后台暂停:ctrl-z

    在shell中执行find / -print命令,而后按下ctrl-z将任务丢到后台暂停:

    job control 3.png

    由上面打印可知,任务find / -print暂停执行,并将任务放在后台,返回一个job number[2]

    3. 查看后台全部任务状态:jobs -l

    输入jobs -l 查看后台全部的任务状态:

    job control 4.png

    仔细查看打印信息,有没有留意到在PID 7417和7431以前有-和+两个符号,-表示最近第二个被放到后台的任务号码,+表示最近被放到后台的任务号码。

    4. 将后台的任务拿到前台处理:fg %jobnumber

    输入fg会默认取出+的任务,而后迅速按下ctrl-z

    job control 5.png

    看上面打印的PID是7431,确实如此。再次输入jobs -l来查看后台全部任务的信息

    job control 6.png

    此次输入fg %1来说后台的任务拿到前台处理。

    5. 将后台的任务变成运行中:bg %jobnumber

    输入jobs -l查看任务状态:

    job control 7.png

    而后输入bg %2; jobs -l将后台任务变成运行,并查看任务状态,而后不断地输入打印信息,这时须要关闭终端才能kill这个shell进程的子进程。

    6. 管理后台当中的任务:kill -signal %jobnumber

    有时,任务在后台运行或暂停,这时我想结束这个任务,怎样办呢?你可使用kill命令将任务结束。
    输入find / -print命令,并按下ctrl-z暂停任务:

    job control 8.png

    输入kill -9 %1;jobs -l结束任务并显示任务状态:

    job control 9.png

  • shell script

    shell script是利用shell的功能所编写的一个程序,这个程序使用纯文本文件来保存一些shell的命令,并遵循shell的语法规则,搭配数据重定向、管道、和正则表达式等功能来组合各类工具,实现简单重复任务的自动化。

  • 通配符

    除了完整的字符串以外,shell还支持许多的通配符来帮助用户查询和命令执行。我简答地列出经常使用的几个通配符:



iTerm 2(for mac) && Oh My Zsh

若是你是mac的用户,推荐一个终端应用iTerm 2, iTerm 2 相比mac自带的 Terminal 应用,有太多优势了。例如,支持画面分割,能够设置主题,各类使用的快捷键,以及快速唤出。配合 Oh My Zsh 使用,简直优雅到爆!

Oh My Zsh安装

  • curl方式
    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh  
  • wget方式
    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh  

    安装完以后,关闭当前终端,并从新打开一个,oh my zsh的默认主题是robbyrussell,效果以下:


robbyrussell theme.jpg

配置

若是你想定制和扩展zsh,oh my zsh提供配置文件~/.zshrc来配置,能够设置环境变量和别名;

[plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
  1. # Support autojump  
  2. [[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh  
  3.    
  4. # setup moco alias name  
  5. alias moco_service="moco start -p 12306 -g settings.json"  
  6.    
  7. #setup macvim alias name  
  8. alias vim="/Applications/MacVim.app/Contents/MacOS/Vim"  
  9.    
  10. #setup pod update alias name  
  11. aliaspod_update='pod update --verbose --no-repo-update'  

Themes列出全部可用主题,每一个主题都有截屏效果并教你如何设置,选择你喜欢的主题,在配置文件~/.zshrc查找字符串ZSH_THEME=”robbyrussell”,经过改变ZSH_THEME环境变量来改变主题。例如,

[plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
  1. ZSH_THEME="agnoster"  

oh my zsh提供数十种主题,相关文件在~/.oh-my-zsh/themes 目录,能够编辑主题来知足自身需求,我是使用默认的robbyrussell,不过作了一点小小改动:

[plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
  1. PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}> '  
  2. #PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}> '  

与原来不一样的是,将c(表示当前目录)改成d(表示绝对路径),另外在尾部添加一个>做为隔离符号,效果以下:

modified robbyrussell.png

插件

oh my zsh提供丰富的插件,存放在~/.oh-my-zsh/plugins目录下:

oh my zsh plugins.png

想了解每一个插件的功能以及如何使用,只要打开相关插件的目录下zsh文件便可,以git插件为例:

git plugin.png

打开git.plugin.zsh文件,里面有不少命名别来来简化命令的输入。你能够根据本身的须要来启用哪些插件,只需在~/.zshrc配置文件追加内容便可:

[plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
  1. plugins=(git autojump osx)  

我来介绍一下一些经常使用插件的使用吧:

git

当你处在一个git受控的目录下时,Shell明确显示git和branch信息,另外简化git不少命令,具体使用请参考:Plugin:git

autojump

autojump插件使你可以快速切换路径,不再须要逐个敲入目录,只需敲入目标目录,就能够迅速切换目录。

  • 安装
    若是你是mac用户,可使用brew安装:
    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. brew install autojump  
  • 关于 zsh: command not found: j 报错
    请在.zshrc文件相应的位置,找到 plugins=() 这行,添加 autojump 记得各插件名之间用英文空格隔开  而后重启item便可
    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. plugins=(git autojump)  

    若是是linux用户,首先下载autojump最近版本,好比:
  • [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. git clone git://github.com/joelthelion/autojump.git  

    而后进入目录,执行

    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. ./install.py  

    最后将如下代码加入~/.zshrc配置文件:

    [plain]  view plain copy 在CODE上查看代码片 派生到个人代码片
    1. [[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh  
  • 使用
    若是你以前打开过~/.oh-my-zsh/themes目录,如今只需敲入j themes就能够快速切换到~/.oh-my-zsh/themes目录。

    autojump.png
osx
  • tab - 在一个新标签打开当前目录
  • cdf - cd到当前Finder目录
  • quick-look - 快速浏览特殊的文件
  • man-preview - 在Preview应用打开特定的man page
  • trash - 将特定的文件移到垃圾桶

使用

  1. 由于zsh兼容bash,因此以前使用bash的人切换到zsh毫无压力
  2. 智能拼写纠正,好比你输入cls,会提示

    auto correct.png
  3. 各类补全:除了支持命令补全和文件补全以外,还支持命令参数补全,插件内容补全,只须要按tab键
  4. 使用autojump智能跳转
  5. 目录浏览和跳转:输入d,就显示在会话里访问的目录列表,输入列表前的序号,便可以跳转

    list dir and jump.png
  6. 输入..能够返回到上级目录

    parent dir.pngYouTube有个演示视频 zsh shell详细介绍若是使用Oh My Zsh

总结

做为的一个程序员,我以为shell是一个必不可少的工具,使用它可以绝不费劲地操做计算机。在shell提示下,经过调用各类各样的工具,并结合管道,将这些工具根据本身须要组合起来,建立和制定宏工具,甚至编写shell script来将简单而重复的工做自动化,作到Don’t repeat your self

扩展阅读


转自 http://blog.jobbole.com/86820/

参考 http://uecss.com/zsh-brew-autojump-plugins-shell-for-mac.html

相关文章
相关标签/搜索