第22节-Bash Shell 的操作环境

路径与命令搜寻顺序

    执行一个命令有4种运行方式:
        1.以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
        2.由 alias 找到该命令来运行;
        3.由 bash 内建的 (builtin) 命令来运行;
        4.透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。
    例题:
        配置 echo 的命令别名成为 echo -n ,然后再观察 echo 运行的顺序
        答:
        [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

        终端机接口 (tty1 ~ tty6) 登陆进站画面设置
            [root@node1 ~]# cat /etc/issue(本机登录画面)
            \S
            Kernel \r on an \m
            [跟着上面这句添加要显示的内容]

            [root@node1 ~]# cat /etc/issue.net(远程登录画面)
            \S
            Kernel \r on an \m
            [跟着上面这句添加要显示的内容]

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

bash 的环境配置文件

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

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

    login shell 其实只会读取这两个配置文件:

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

/etc/profile (login shell 才会读)

这是每个使用者登陆取得 bash 时一定会读取的配置文件!
    这个文件配置的变量主要有:
        PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统命令目录;
        MAIL:依据账号配置好使用者的 mailbox 到 /var/spool/mail/账号名;
        USER:根据用户的账号配置此一变量内容;
        HOSTNAME:依据主机的 hostname 命令决定此一变量内容;
        HISTSIZE:历史命令记录笔数。CentOS 5.x 配置为 1000 ;
    /etc/profile 可不止会做这些事而已,他还会去呼叫外部的配置数据,底下这些数据会依序的被呼叫进来:
        /etc/inputrc
            /etc/profile 会主动的判断使用者有没有自定义输入的按键功能
        /etc/profile.d/*.sh
            这个目录底下的文件规范了 bash 操作接口的颜色、 语系、ll 与 ls 命令的命令别名、vi 的命令别名、which 的命令别名等等
        /etc/sysconfig/i18n
            这个文件是由 /etc/profile.d/lang.sh 呼叫进来的!这也是我们决定 bash 默认使用何种语系的重要配置文件!

~/.bash_profile (login shell 才会读)

    bash 在读完了整体环境配置的 /etc/profile 并藉此呼叫其他配置文件后,接下来则是会读取使用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:
        1.~/.bash_profile
        2.~/.bash_login
        3.~/.profile

source :读入环境配置文件的命令

    由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的配置文件,所以, 如果你将自己的偏好配置写入上述的文件后,通常都是得注销再登陆后,该配置才会生效。那么,能不能直接读取配置文件而不注销登陆呢? 可以的!那就得要利用 source 这个命令了!   
    [root@www ~]# source 配置文件档名
    范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中
    [root@www ~]# source ~/.bashrc  <==底下这两个命令是一样的!
    [root@www ~]#  .  ~/.bashrc

~/.bashrc (non-login shell 会读)

    谈完了 login shell 后,那么 non-login shell 这种非登陆情况取得 bash 操作接口的环境配置文件又是什么? 当你取得 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
    ~/.bash_history
    ~/.bash_logout

终端机的环境配置: stty, set

    [root@www ~]# stty [-a]
    选项与参数:
    -a  :将目前所有的 stty 参数列出来;

    范例一:列出所有的按键与按键内容
    [root@www ~]# stty -a
    speed 38400 baud; rows 24; columns 80; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; 
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
    rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    ....(以下省略)....

    eof   : End of file 的意思,代表『结束输入』。
    erase : 向后删除字符,
    intr  : 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序;
    kill  : 删除在目前命令列上的所有文字;
    quit  : 送出一个 quit 的讯号给目前正在 run 的程序;
    start : 在某个程序停止后,重新启动他的 output
    stop  : 停止目前屏幕的输出;
    susp  : 送出一个 terminal stop 的讯号给正在 run 的程序。

    [root@www ~]# set [-uvCHhmBx]
    选项与参数:
    -u  :默认不激活。若激活后,当使用未配置变量时,会显示错误信息;
    -v  :默认不激活。若激活后,在信息被输出前,会先显示信息的原始内容;
    -x  :默认不激活。若激活后,在命令被运行前,会显示命令内容(前面有 ++ 符号)
    -h  :默认激活。与历史命令有关;
    -H  :默认激活。与历史命令有关;
    -m  :默认激活。与工作管理有关;
    -B  :默认激活。与刮号 [] 的作用有关;
    -C  :默认不激活。若使用 > 等,则若文件存在时,该文件不会被覆盖。

    范例一:显示目前所有的 set 配置值
    [root@www ~]# echo $-
    himBH
    # 那个 $- 变量内容就是 set 的所有配置啦! bash 默认是 himBH 

    另外,其实我们还有其他的按键配置功能呢!就是在前一小节提到的 /etc/inputrc 这个文件里面配置。

    [root@www ~]# cat /etc/inputrc
    # do not bell on tab-completion
    #set bell-style none

    set meta-flag on
    set input-meta on
    set convert-meta off
    set output-meta on
组合按键运行结果
Ctrl + C终止目前的命令
Ctrl + D输入结束 (EOF),例如邮件结束的时候;
Ctrl + M就是 Enter 啦!
Ctrl + S暂停屏幕的输出
Ctrl + Q恢复屏幕的输出
Ctrl + U在提示字符下,将整列命令删除
Ctrl + Z『暂停』目前的命令

通配符与特殊符号

    在 bash 的操作环境中还有一个非常有用的功能,那就是通配符 (wildcard) ! 我们利用 bash 处理数据就更方便了!底下我们列出一些常用的通配符喔:
符号意义
*代表『 0 个到无穷多个』任意字符
?代表『一定有一个』任意字符
[ ]同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ]若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ]若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
利用通配符配合 ls 找文档看看:
[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
符号内容
#批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行
“\”跳脱符号:将『特殊字符或通配符』还原成一般字符
|管线 (pipe):分隔两个管线命令的界定(后两节介绍);
;连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)
~用户的家目录
$取用变量前导符:亦即是变量之前需要加的变量取代值
&工作控制 (job control):将命令变成背景下工作
!逻辑运算意义上的『非』 not 的意思!
/目录符号:路径分隔的符号
>, >>数据流重导向:输出导向,分别是『取代』与『累加』
<, <<数据流重导向:输入导向 (这两个留待下节介绍)
’ ‘单引号,不具有变量置换的功能
” “具有变量置换的功能!
` `两个『 ` 』中间为可以先运行的命令,亦可使用 $( )
( )在中间为子 shell 的起始与结束
{ }在中间为命令区块的组合!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值