Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


Shell入门:掌握Linux,OS X,Unix的Shell环境

2015-3-31 08:05    评论: 20 收藏: 8 分享: 32    

综合一下:定制你自己的Linux或Unix bash shell工作环境

现在,你将使用bash shell配置自己的环境。我只介绍bash。但是理论上zsh,ksh和其他常用shell都差不多。让我们看看如何调整shell来适合我作为系统管理员的需求。编辑你的~/.bashrc文件来附加设定。下面是一些常用的配置选项。

#1: 设定bash路径和环境变量

# 设定路径 ##
export PATH=$PATH:/usr/local/bin:/home/vivek/bin:/opt/firefox/bin:/opt/oraapp/bin

# 为cd命令设定路径
export CDPATH=.:$HOME:/var/www

使用less或more命令作为翻页器:

export PAGER=less

设定vim作为默认文本编辑器:

export EDITOR=vim
export VISUAL=vim
export SVN_EDITOR="$VISUAL"

设定Oracle数据库特别要求的参数:

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export ORACLE_SID=XE
export NLS_LANG=$($ORACLE_HOME/bin/nls_lang.sh)

设定JAVA_HOME和其他java路径,比如java版本:

export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre

# 把ORACLE和JAVA加入到PATH里
export PATH=$PATH:$ORACLE_HOME/bin:$JAVA_HOME/bin

使用密钥实现免密码登录让ssh远程登录更安全:

# 再也不用输密码了
/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

最后,打开bash命令补齐

source /etc/bash_completion

#2: 设定bash命令提示符

设定定制的bash提示符(PS1):

PS1='{\u@\h:\w }\$ '

#3: 设定默认文件权限

## 设定默认权限为644 ##
umask 022

#4: 调整shell命令历史设定

# 不往命令历史里写入相同的行
HISTCONTROL=ignoreboth

# 忽略这些命令
HISTIGNORE="reboot:shutdown *:ls:pwd:exit:mount:man *:history"

# 通过HISTSIZE和HISTFILESIZE设定命令历史的长度
export HISTSIZE=10000
export HISTFILESIZE=10000

# 为命令历史文件增加时间戳
export HISTTIMEFORMAT="%F %T "

# 附加到命令历史文件,而不是覆盖
shopt -s histappend

#5: 设定shell会话的时区

## 为我自己的shell会话设定IST(印度标准时间) ##
TZ=Asia/Kolkata

#6: 设定shell行编辑接口

## 使用vi风格的行编辑接口,替代bash默认的emacs模式 ##
set -o vi

#7: 设定自己喜好的别名

## 增加一些保护 ##
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

## Memcached ##
alias mcdstats='/usr/bin/memcached-tool 10.10.29.68:11211 stats'
alias mcdshow='/usr/bin/memcached-tool 10.10.29.68:11211 display'
alias mcdflush='echo "flush_all" | nc 10.10.29.68 11211'

## 默认命令参数 ##
alias vi='vim'
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias bc='bc -l'
alias wget='wget -c'
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'
alias rm='rm -I --preserve-root'
alias ln='ln -i'

下面是一些额外的OS X Unix bash shell别名:

# 从bash打开桌面应用
alias preview="open -a '$PREVIEW'"
alias safari="open -a safari"
alias firefox="open -a firefox"
alias chrome="open -a google\ chrome"
alias f='open -a Finder '

# 清理那些.DS_Store文件
alias dsclean='find . -type f -name .DS_Store -delete'

#8: 寡人好色

# 彩色的grep输出 
alias grep='grep --color=auto'
export GREP_COLOR='1;33'

# 彩色的ls
export LSCOLORS='Gxfxcxdxdxegedabagacad'
# Gnu/linux的ls
ls='ls --color=auto'

# BSD/os x的ls命令
# alias ls='ls -G'

#9: 设定自己喜好的bash函数

# 在屏幕上显示10个最近的历史命令
function ht {
  history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
}

# host和ping命令的替代
# 接受http:// 或 https:// 或 ftps:// 名称用作域或主机名
_getdomainnameonly(){
    local h="$1"
    local f="${h,,}"
    # remove protocol part of hostname
        f="${f#http://}"
        f="${f#https://}"
    f="${f#ftp://}"
    f="${f#scp://}"
    f="${f#scp://}"
    f="${f#sftp://}"
    # remove username and/or username:password part of hostname
    f="${f#*:*@}"
    f="${f#*@}"
    # remove all /foo/xyz.html*  
    f=${f%%/*}
    # show domain name only
    echo "$f"
}


ping(){
    local array=( $@ )          # get all args in an array
    local len=${#array[@]}          # find the length of an array
    local host=${array[$len-1]}     # get the last arg
    local args=${array[@]:0:$len-1} # get all args before the last arg in $@ in an array 
    local _ping="/bin/ping"
    local c=$(_getdomainnameonly "$host")
    [ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
    # pass args and host
    $_ping $args $c
}

host(){
    local array=( $@ )
    local len=${#array[@]}
    local host=${array[$len-1]}
    local args=${array[@]:0:$len-1}
    local _host="/usr/bin/host"
    local c=$(_getdomainnameonly "$host")
    [ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
    $_host $args $c
}

#10: 通过shell shopt命令设定bash shell行为

最后,你可以使用set和shopt命令调整bash shell环境

# 目录拼写纠正
shopt -q -s cdspell

# 保证每次终端窗口改变大小后会更新显示
shopt -q -s checkwinsize

# 打开高级模式匹配功能
shopt -q -s extglob

# 退出时附加命令历史而不是覆盖
shopt -s histappend

# 在命令历史使用多行
shopt -q -s cmdhist

# 在后台任务结束时立刻通知
set -o notify

# 禁用[CTRL-D]来结束shell
set -o ignoreeof

总结

这个帖子不难理解。它简短地将如何定制用户环境从头介绍了一下。要深入了解bash/ksh/zsh/csh/tcsh/的能力,我建议你用下面的命令阅读man文档:

man bash
man zsh
man tcsh
man ksh

这篇文章由Aadrika T. J.贡献;由admin编辑并增加了额外内容。你也可以为nixCraft做出贡献


via: http://www.cyberciti.biz/howto/shell-primer-configuring-your-linux-unix-osx-environment/

作者:nixCraft 译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

123456
查看其它分页:

发表评论


最新评论

我也要发表评论

_Dreamer 2015-4-6 13:19
不明觉厉啊
回复
ZetaZ 2015-3-31 22:33  新浪微博网友评论
5 回复
linux 2015-3-31 15:50
1
sunriders 发表于 2015-3-31 14:12 的评论:
第一张有大图么?想做桌面
来啦:http://pichost.me/1346723/
回复
sunriders 2015-3-31 14:12
第一张有大图么?想做桌面
1 回复
埋头奔跑的草帽 2015-3-31 14:03  新浪微博网友评论
@我的印象笔记
回复
Esteem 2015-3-31 13:18
真心不知道花费这么多时间写这些零散的东西有什么用?要真想写出属于自己的Shellscript还是的找一本合适的书并多动手联系才是!
2 回复
linlover 2015-3-31 11:53
巩固学习!
回复
闲云岛 2015-3-31 11:03  新浪微博网友评论
[酷]
回复
崔波king 2015-3-31 10:33  新浪微博网友评论
这个要掌握~~
回复
Oakenshield_ 2015-3-31 10:03  新浪微博网友评论
Repost
回复
JACKALywz 2015-3-31 09:33  新浪微博网友评论
@保存到为知笔记
回复
苏生不惑 2015-3-31 09:33  新浪微博网友评论
Linux shell
回复
thank4u 2015-3-31 09:03  新浪微博网友评论
mark
回复
随便就行了 2015-3-31 09:03  新浪微博网友评论
@我的印象笔记
回复
Geequlim 2015-3-31 09:03  新浪微博网友评论
收藏。
回复
冰红茶911 2015-3-31 08:33  新浪微博网友评论
@有道云笔记收藏
9 回复
魏先森准备去漂泊Nic 2015-3-31 08:33  新浪微博网友评论
Repost
10 回复
哈尔滨Linux用户组 2015-3-31 08:33  新浪微博网友评论
Repost
回复
振云_percy 2015-3-31 08:33  新浪微博网友评论
好长,马克
回复
Pigzhu_朱 2015-3-31 08:33  新浪微博网友评论
@我的印象笔记
回复

热点评论

魏先森准备去漂泊Nic 2015-3-31 08:33
Repost
10
冰红茶911 2015-3-31 08:33
@有道云笔记收藏
9
ZetaZ 2015-3-31 22:33
5
Esteem 2015-3-31 13:18
真心不知道花费这么多时间写这些零散的东西有什么用?要真想写出属于自己的Shellscript还是的找一本合适的书并多动手联系才是!
2
sunriders 2015-3-31 14:12
第一张有大图么?想做桌面
1
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。