Bash shell 的操作环境

路径与命令搜寻顺序

命令运行的顺序:

  1. 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
  2. 由 alias 找到该命令来运行;
  3. 由 bash 内建的 (builtin) 命令来运行;
  4. 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。

例如:

[root@www ~]# alias echo='echo -n'
[root@www ~]# type -a echo
echo is aliased to `echo -n'
echo is a shell builtin
echo is /bin/echo
//先 alias 再 builtin 再由 $PATH 找到 /bin/echo

bash 的进站与欢迎信息: /etc/issue, /etc/motd

[root@www ~]# cat /etc/issue
CentOS release 5.3 (Final)
Kernel \r on an \m

issue内的各代码意义:

\d 本地端时间的日期;
\l 显示第几个终端机接口;
\m 显示硬件的等级 (i386/i486/i586/i686...);
\n 显示主机的网络名称;
\o 显示 domain name;
\r 操作系统的版本 (相当于 uname -r)
\t 显示本地端时间的时间;
\s 操作系统的名称;
\v 操作系统的版本。

如果您想要让使用者登陆后取得一些信息,例如您想要让大家都知道的信息, 那么可以将信息加入 /etc/motd 里面去,如:

[root@www ~]# vi /etc/motd
Hello everyone,
Our server will be maintained at 2009/02/28 0:00 ~ 24:00.
Please don't login server at that time. ^_^

环境配置文件

login

login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』啰;

login shell只会读取下面两个配置文件:

  1. /etc/profile:这是系统整体的配置,你最好不要修改这个文件;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,你要改自己的数据,就写入这里!

non-login shell

non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举例来说,(1)你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

当你取得 non-login shell 时,该 bash 配置文件仅会读取 ~/.bashrc 而已啦!那么默认的 ~/.bashrc 内容如下:

[root@www ~]# cat ~/.bashrc
# .bashrc

# User specific aliases and functions
alias rm='rm -i'             <==使用者的个人配置
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then  <==整体的环境配置
        . /etc/bashrc
fi

其他相关配置文件

  • /etc/man.config:这个文件的内容规范了使用 man 的时候, man page 的路径到哪里去寻找
  • ~/.bash_history:默认的情况下, 我们的历史命令就记录在这里啊!而这个文件能够记录几笔数据,则与 HISTFILESIZE 这个变量有关啊。
  • ~/.bash_logout:这个文件则记录了当我注销 bash 后,系统再帮我做完什么动作后才离开

通配符与特殊符号

  • 常用通配符 常用通配符

      [root@www ~]# LANG=C              <==由于与编码有关,先配置语系一下 
    
      范例一:找出 /etc/ 底下以 cron 为开头的档名
      [root@www ~]# ll -d /etc/cron*    <==加上 -d 是为了仅显示目录而已
    
      范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
      [root@www ~]# ll -d /etc/?????    <==由于 ? 一定有一个,所以五个 ? 就对了
    
      范例三:找出 /etc/ 底下文件名含有数字的文件名
      [root@www ~]# ll -d /etc/*[0-9]*  <==记得中括号左右两边均需 *
    
      范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
      [root@www ~]# ll -d /etc/[^a-z]*  <==注意中括号左边没有 *
    
      范例五:将范例四找到的文件复制到 /tmp 中
       [root@www ~]# cp -a /etc/[^a-z]* /tmp
    
  • bash环境下特殊符号 特殊符号

  • bash 默认的组合键 bash默认组合键