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. 特殊字符
2.1.7. 控制键
通过控制键可以控制shell的行为,下面是一些常用的控制键。
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
上面这三个文件是bash shell的用户环境配置文件,位于用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代替.bash_profile文件。
.bashrc文件会在bash shell调用另一个bash shell时读取,也就是在shell中再键入bash命令启动一个新shell时就会去读该文件。这样可有效分离登录和子shell所需的环境。但一般来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境。
.bash_logout在退出shell时被读取。所以我们可把一些清理工作的命令放到这文件中。
在/etc目录的bash.bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile和.bashrc\时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。alias l = 'ls -l'是设置别名的语句,把它放在这些配置文档中就可使我们能用简单的'l'命令,代替'ls -l'命令。
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
- bash
- .bash
- bash
- bash
- bash
- bash
- bash
- Bash
- Bash
- bash
- bash
- Bash
- bash
- BASH
- bash
- bash
- Bash
- bash
- Nginx+ IIS7.5防下载
- 开发者如何进一步提升和积淀自己
- BAT执行文件 按任意键开始退出
- 第五周项目四:学生类
- 三角类
- Bash
- FLEX alert.show() flag 详细值
- 如何分析自己的处境
- 使用 InternetReadFile 来获取文件
- .net获取系统当前时间
- for update和for update of 的区别
- 校验和算法
- Oracle数据库创建表空间及为用户指定表空间
- 公钥,私钥和数字签名这样最好理解