Bash shell 的操作环境
路径与命令搜寻顺序
命令运行的顺序:
- 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
- 由 alias 找到该命令来运行;
- 由 bash 内建的 (builtin) 命令来运行;
- 透过 $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只会读取下面两个配置文件:
- /etc/profile:这是系统整体的配置,你最好不要修改这个文件;
- ~/.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 默认的组合键