Bash

来源:互联网 发布:添加usb打印机端口 编辑:程序博客网 时间:2024/05/20 14:19


2.1. Bash的用户交互接口

Bash的用户接口也就是我们经常说的字符界面,这是我们与系统交互的主要环境,我们可通过这个接口管理我们的系统。

在系统引导时,第一个需要运行的进程是init,

由init再衍生出一个getty终端进程,该进程打开一个终端窗口,提供标准输入、标准输出和标准错误。

然后执行程序/bin/login,login程序提示输入密码,加密并验证密码。

通过验证后系统进入登录shell,也就是bash。

不同的登录shell可在passwd文件设置。


bash会通过几个配置文件来初始化用户环境:

首先bash会查找/etc/profile,并执行其中的命令,初始化系统级别环境

然后在用户目录下查找.bash_profile文件,并执行里d面的命令,初始化用户级别的环境用户级别的设置可覆盖系统级别设置

最后会执行.bashrc用户环境设置文件,这时,默认提示符美元符号将显示在屏幕上。

2.1.1. 环境变量

进入bash后,系统可根据你的配置生成一系列的环境变量,这些环境变量可用export命令显示。下面是一些常的环境变量:

  • $LOGNAME,当前登录的用户名。

  • $HOME,当前用户的主目录。

  • $PATH,当前用户的命令搜索路径。

  • $LANG,当前系统的语言环境。

  • $TZ,时区

  • $MAILCHECK,检查新邮件的间隔,单位是秒。

  • $PS1,命令行提示符。

  • $PS2,二级命令行提示符,也就是当你的命令行很长,在一行写不下,转到第二行时出现的提示符。

  • $PWD,当前目录。

2.1.2. 目录操作

Linux以树状结构组织文件和目录,目录可以包含文件,也可以包含其它目录。目录的最高层是根目录"/",其它所有文件和目录都是挂在根目录下,形成一个倒挂的目录树。

使用bash shell的cd命令可在目录树中移动,当前停留的位置叫工作目录或当前目录,可用"."表示。每个用户在/home目录下都有一个与用户名相同的目录,叫用户主目录。可用"~"符号表示,".."表示上一级目录。

jims@localhost:~$           #位于jims用户的主目录jims@localhost:~$ cd .      jims@localhost:~$           #没变化jims@localhost:~$ cd ..jims@localhost:/home$       #移动到上层目录jims@localhost:/home$ cd ~jims@localhost:~$           #回到用户主目录jims@localhost:~$ pwd       #显示当前目录/home/jims                      

2.1.3. 通配符

在bash shell环境下,我们可用通配符来简化命令输入。

  • ?,匹配任意单个字符。

  • *,匹配任意字符串。

  • [set],匹配set中的任意字符。[!set]是取反操作,匹配不在set中的任意字符,如:

    [a-z]          匹配所有小写字符[0-9]          匹配所有数字[akz]          匹配a,k,z三个字符[.,;]          匹配句点,逗号和分号[!abc]         匹配除a,b,c之外的所有字符

下面是几个命令示例:

jims@localhost:~$ ls *.py         #显示当前目录下所有以.py结尾的文件jims@localhost:~$ ls *.[cho]      #显示当前目录下所有以c,h,o结尾的文件jims@localhost:~$ ls ???          #显示所有文件名为三个字符的文件

大括号"{}"可用于扩展任意字符串,如:

localhost:~/python# echo a{a,b,c}aaaa aba aca

我们也可用大括号做为通配符使用,如:

jims@localhost:~$ ls *.{c,h,o}    #效果同ls *.[cho]

2.1.4. 输入/输出

常用数据过滤命令

  • cat,将输入复制到输出。cat是"catenate"的缩写,是连接在一起的意思。

  • grep,从输入中检索字符串。

  • sort,对输入进行排序。

  • cut,从输入中抽取列。

  • sed,对输入进行编辑。

  • tr,对输入进行转换或删除操作。

使用"<"和">"可实现I/O重定向功能,如:

$ ls > filename     #输出重定向到filename文件,也就是生成一个filename文件,内容为ls命令执行的结果。$ grep < filename   #grep的命令参数从filename文件读取。

使用"|"可实现管道(pipeline)操作,管道操作可以把一个命令的输出重定向到另一个命令的输入,而不是文件,如:

$ ls -l | more           #先进行ls -l操作,再对操作结果进行more操作

2.1.5. 后台作业

bash shell允许在一个会话期间同时运行多个命令,正常情况下所有命令在前台运行。只有在一个命令运行完后才能输入一个命令。但如果我们在运行命令时在命令后加一个"&"符号,则该命令将转入后台运行,我们马上获得shell终端控制权,可输入另外一条命令。这种在后台运行的命令叫后台作业。后台作业主要用在一些需花很长时间来运行的命令上,如解压一个大的压缩文档。

$ tar zxvf xen.tar.gz&[1] 2547              

使用jobs命令可以查看后台作业状态。

2.1.6. 特殊字符

在bash中,有很多有特殊含义的特殊字符,下面是一个完整的列表:


Table 2.1. 特殊字符
字符含义~主目录`命令替换#注释$变量表达式&后台作业*字符通配符(启动子shell)停止子shell\转义或续行|管道操作符[]通配符集{}命令块;shell命令分隔符,作用是可在一行输入多条shell命令。'强引用,引号内所有内容保持字面意思。"弱引用,引号内某些内容保持字面意思。<输入重定向>输出重定向/路径分隔符?通配符,匹配单个任意字符!取反操作

2.1.7. 控制键

通过控制键可以控制shell的行为,下面是一些常用的控制键。

Table 2.2. 控制键控制键描述Ctrl_C中止当前命令Ctrl_D输入结束Ctrl_\如果Ctrl_C无效,则中止当前命令Ctrl_S禁止屏幕输出Ctrl_Q开启屏幕输出DEL或CTRL_?删除最后的字符Ctrl_U删除整个命令行Ctrl_Z暂停当前命令


2.2. 常用变量

变量是随系统运行而变化的,灵活使这些变量可简化我们的操作和更好地控制bash shell的行为。

$# 脚本的参数个数$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个$$ 脚本运行的当前进程ID号$! 后台运行的最后一个进程的进程ID号$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数$- 显示shell使用的当前选项,与set命令功能相同$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。$0 脚本名称$1..$9 第N个参数 

2.3. 用户环境配置

为使Bash更好地为我们服务,我们需定制bash shell环境。

2.3.1. .bash_profile、.bashrc、和.bash_logout

  1. 上面这三个文件是bash shell的用户环境配置文件,位于用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代替.bash_profile文件。

  2. .bashrc文件会在bash shell调用另一个bash shell时读取,也就是在shell中再键入bash命令启动一个新shell时就会去读该文件。这样可有效分离登录和子shell所需的环境。但一般来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境。

  3. .bash_logout在退出shell时被读取。所以我们可把一些清理工作的命令放到这文件中。

在/etc目录的bash.bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile和.bashrc\时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。alias l = 'ls -l'是设置别名的语句,把它放在这些配置文档中就可使我们能用简单的'l'命令,代替'ls -l'命令。

[Note] 当我们修改了这些配置件后,可用source .bash_profile命令使它修改内容马上生效。

2.3.2. 选项

bash shell中的选项可控制shell的行为和功能,我们可以通过shopt命令来设置。使用set命令也可以,但它已被shopt替代,但为了向下兼容,set命令还是可以使用的。使用不带参数的shopt命令可以列出当前shell中只能由shopt设置的选项,用shopt -o可列出可由set命令设置的选项。

下面是一些可由set命令基本的选项,默认是关闭的。

emacs                  进入emacs编辑模式vi                     进入vi编辑模式ignoreeof              不允许单独使用Ctrl_D退出的用法,要使用exit。与IGNOREEOF=10等价noclobber              不允许重定向覆盖已存在文件noglob                 不允许扩展文件名通配符nounset                使用未定义的变量时给出错误

下面是一些只能由shopt命令设置的选项。

cdspell          自动改正cd命令参数中的小错误hostcomplete     以@开头时,按tab键可进行主机名的自动完成dotgblob         以点开始的文件名被包含在路径名扩展中mailwarn         显示邮件警告信息

shopt命令的选项如下:

-p          显示可设置选项及当前取值-s          设置每一选项为on-u          设置每一选项为off-q          不输出信息-o