Unix & Linux基础笔记(4)

第13章       使用shell:命令和定制

13.1   元字符

        字母数字字符  alphanumeric character

        元字符      metacharacter

        引用元字符:保护元字符不被错误解释

                                shell中使用的元字符

字符

名称

作用

{}

 

花括号拓展:生成一种字符模式

|

 

命令行:创建一个管道线

 

命令行:重定向输入

 

命令行:重定向输出

()

 

命令行:在子shell中运行命令

#

hash、pound

命令行:注释的开头

;

 

命令行:用于分隔多条命令

`

反引号

命令行:命令替换

~

 

文件名拓展:插入home目录的名称

?

 

文件名拓展:匹配任意一个字符

[]

 

文件名拓展:与一组字符中的字符匹配

*

 

文件名拓展:匹配0个或多个字符

!

bang

历史列表:事件标记

&

 

作业控制:在后台运行命令

\

反斜线

引用:下一个字符转义

单引号

引用:取消所有的替换

 

引用:取消大部分的替换

{}

 

变量:确定变量名称的界限

$

 

变量:用变量的值替换

<Return>

 

空白符:标记一行结束

<Tab>

 

空白符:在命令行中分隔单词

<Space>

 

空白符:在命令行中分隔单词

特别地:

-      dash    minus
#     hash     pound

13.2   引用和转义

        l  使用反斜线引用单个字符(又称转义)

        l  使用单引号引用一串字符

        l  使用双引号引用一串字符,但保留 $(美元)、`(反引号)和\(反斜线)的特殊含义

 

13.3   强引用(strong quote)和弱引用(weak quote)

        反斜线是所有引用中最强的一个。

        在某行的末尾键入\<Return>,新行字符被引用,光标移到下一行,但它并不是一行结束的信号。Bash在等待更多的键入。

13.4   shell内置命令:type

        内置命令    builtin command简称builtin

        外部命令

        分辨内部命令与外部命令

                

(1)man   (2)type
                    type  command...

13.5   学习内部命令

        1.系统对于内置命令拥有独立的说明书页

        

        2.使用help命令

        help –m

 

13.6   外部命令及搜索路径

            shell检查环境变量PATH,PATH中的字符串即搜索路径。

apropos builtins;man builtins

 

13.7   修改搜索路径

        基本思想就是将修改PATH变量的命令放到登录时自动执行的初始化文件中。

 

Bourne shell

        使用export将PATH变量设置为环境变量。

        

export  PATH=”/bin:/usr/bin:/usr/ucb:/usr/local/bin”

        修改默认的搜索路径

                    

export  PATH=”$PATH:$HOME/bin”

将搜索路径的值修改为旧值加上$HOME/bin,即将$HOME/bin追加到已有搜索路径的末尾。

在搜索路径的开头插入一个新目录

    

export  PATH=”$HOME/bin:$PATH”

这个命令比较好,在搜索路径末尾添加当前目录

    

export  PATH=”$PATH:$HOME/bin:.”

 

13.8   黑客如何使用搜索路径

    寻找一种以root账户运行已经被修改的程序的方法,然后创建一个以后可以使用的后门。

    确保所有系统管理员用户标识使用的搜索路径中没有包含工作目录,或者用户可能访问的其他任何目录。

 

13.9   shell提示

       

 $   %   >   #

 

13.10  修改shell提示

环境变量PS1

export PS1=”$”

3种方法来增强shell

        l  将变量的值插入到shell提示中

        l  利用转义字符使用各种特殊码

        l  将命令的结果插入到提示中(即命令替换)

 

13.11  使用变量的值

export  PS1=”${VARIABLE}”

变量名

HOME   HOSTNAME   HOSTTYPE   LOGNAME
PWD    RANDOM     SECONDS    SHELL      USER

 

13.12  引用变量时使用哪类引号

export PS1=’Yourlucky number is ${RANDOM} $’
export PS1=”${USER}$”

    该变量的值在使用之前是否会变化?

        如果答案是肯定的,则使用强引用来防止$字符被解释,直至需要它们。否则使用弱引用,从而允许$字符被立即解释。

        l  单引号,强引用,在单引号中,没有字符拥有特殊的含义。在引用${RANDOM}时使用的是单引号,从而允许保留$字符的含义,以便于稍后引用,确保直至创建实际提示时才对RANDOM求值。

        l  双引号,弱引用,[$]、[`]和[\]符号保留各自的特殊含义。

 

13.13  使用转义字符的特殊码

Bash提示中使用的特殊码、命令和变量

含义

Bash

工作目录:~表示法

\w

工作目录:只有基名

\W

工作目录:完整路径名

.

计算机的主机名

\h

当前用户标识

\u

shell的名称

\s

时间:AM/PM表示法

\@

时间:24小时制表示法

\A

日期:

\d

历史列表

\!


 

13.14  命令替换(command substitution)

        命令替换允许在一条命令中嵌入另一条命令。shell首先执行嵌入的命令,并且用输出替换该命令,然后shell再执行整条命令。

echo   “The time and date are `date`.”

使用反引号

 

13.15  键入命令并进行修改

历史列表、命令行编辑、自动补全、别名

export PS1=”\u$”
export PS1=”${USER}$”

 

13.16  历史列表:fc、history

 

Bourne shell

C-shell

查看部分或全部历史列表

fc –l(list)

history

事件编号调取特定的命令

fc –s(substitute)number

!number

重复上一条命令

fc –s

!!

重新执行之前进行修改

fc –s patter=replace number

!number:s/pattern/replacement

微小修改长命令

fc –s q=e(同上)

^pattern^replacement

 

    在历史列表中,每条命令称为一个事件,而每个事件都有一个内部编号,称为事件编号。历史列表的功能就是基于事件编号调取命令。例如,可以告诉shell调取命令#24。

fc     fixcommand

^R     重新调用命令

 

13.17  历史列表:设置大小

export  HISTORY=number

13.18  历史列表示例:避免删错文件

fc –s ls=rm
^ls^rm
 

13.19  在shell提示中显示事件编号&工作目录

显示历史列表的事件编号  

export PS1=”bash[\!]$”<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">    </span>

exportPS1=”(\w) bash[\!]$”

13.20  自动补全

显示所有可能    

<Tab><Tab>

文件名补全  filename completion

C-shell    <Esc>/<Tab>   ^D

13.21  自动补全:高级应用

文件名补全、命令补全、变量补全、用户标识补全、主机名补全

 

13.22  为了好玩和赌注使用命令补全

13.23  命令行编辑:bindkey

    命令行编辑是一种强大的工具,允许使用许多不同的命令操纵在命令行上键入的内容,包括使用历史列表和自动补全功能。

Emacs模式  vi模式

set –o emacs
set –o vi

对于tcsh使用bindkey命令  bindkey –e

13.24  别名:alias、unalias

alias  [name=commands]

        将命令引用在单引号中,因为该命令包含有空格和元字符。强引用要比弱引用好,因为它们保留了元字符的含义,直至别名执行。

        输入alias和别名的名称就可以查看这个别名的当前值。要同时显示所有的别名,可以使用没有参数的alias。

        使用unalias可以移除别名。unalias name移除所有别名使用unalias –a(或unalias *)。type查看某条命名是不是别名。

 

13.25  临时挂起别名

    命令开头键入一个\(反斜线)

 

13.26  别名示例:避免删错文件

rm !ls:*

13.27  别名示例:从历史列表中重用命令

13.28  别名示例:在shell提示中显示工作目录的名称

你可能感兴趣的:(linux,unix,基础知识)