|
BASH 入门
作者:古世
Shell 是用户与系统之间的命令解释程序,就象 DOS 下的
COMMAND.COM 程序一样。而 BASH (Bourne Again SHell) 是一种优秀的
Linux shell 程序。它的功能十分全面,是 Linux 最常用的 shell
程序之一。在许多的 Linux 系统中,默认的 shell 一般都是 BASH ,
这可以在 /etc/passwd 文件中查看到。
用户在登录 Linux 系统之后,可以看到一个“ $ ”符号 ( 超
级用户是“ # ” ) 。这是 BASH 给出的命令输入提示符,这时只要在
它后面输入命令就可以了。但是要真正的会用 BASH ?还必须
学会很多知识 :
输入规则
1. 通配符
Linux 提供了通配符的功能。通配符有两种 : “ * ”和“ ? ”。? 它们可以在
输入中代替文件名的一个或多个字符。
“ * ”可以用来代替任意文件名 ( 以“ . ”打头的除外 ) 。
例如 :
$ cp /mnt/cdrom/* /tmp
此命令将 /mnt/cdrom 下的所有文件复制到 /tmp 目录下。
另一个通配符是“ ? ” , 与“ * ”不同的是,“ * ”可以表示任
意多个任意字符;而“ ? ”用于表示一个任意字符。
例如 :
$ ls /dev/tty?
/dev/tty0 /dev/tty2 /dev/tty4 /dev/tty6 /dev/tty8
? /dev/tty1 /dev/tty3 /dev/tty5 /dev/tty7 /dev/tty9
$ ls /dev/tty*
/dev/tty0 /dev/ttys0 /dev/ttyp0 /dev/ttyq0 /dev/ttyr0 /dev/ttyS0
/dev/tty1 /dev/ttys1 /dev/ttyp1 /dev/ttyq1 /dev/ttyr1 /dev/ttyS1
. ?
.
.
/dev/tty9 /dev/ttys9 /dev/ttyp9 /dev/ttyq9 /dev/ttyr9 /dev/ttyS9
试比较上面两行命令输出结果的区别。
除了使用以上两种通配符以外, BASH 还提供了清单功能。
用户可以将文件清单列在一对 [ ] 或 { } 内。
例如 :
$ ls /dev/tty[12345] ? ( 或 $ ls /dev/tty[1-5])
/dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty5
以上命令列出的文件都是在 /dev/tty 后面接一个 [ ] 中的
任意一个字符。 ( 如果表示字符的范围,可用 - 连接首尾字符。 )
如果要输入的是字串的话,就要将字串列入 { } 中,字串与字串间用“ , ”分隔。
例如 :
$ ls /{bin, dev, home, usr}
bin dev home usr
2. 引用特殊字符
上一节介绍了通配符的使用,但是如果要输入的命令或
参数中包含有诸如“ * ”或“ ? ”之类的特殊符号时怎么办呢 ? 这
时可以通过转义符通知系统将特殊字符作为普通字符处理。
BASH 提供的转义符有三种 : 反斜杠“ \ ”、单引号“ ' ”、双引号“ " ”。
反斜杠用于一个特殊字符前;或将字符串放在一对 ( ' ) 或 ( " )
之间。
例如 :
$ mkdir /home/my\*\?
$ mkdir '/home/my*?'
$ mkdir "/home/my*?"
以上三行命令都完成同样的工作 , 建立 /home/my*? 目录。
* 输入技巧 :
在输入命令的过程中,如果命令不完全,可以按 Tab 键, BASH 会
自动尝试补全不完全的命令。如果命令不止一个, BASH 会输出命令
列表,然后可以继续输入字符,再按 Tab 键,直到只有一个命令符合
为止。?
输入输出重定向
Linux 默认的标准输入设备是键盘,标准输出设备是屏幕。即从
键盘接收输入的信息,将程序运行的结果输出到屏幕上。如果需要
从文件接收数据,或把结果输出到文件中,那么就要用到 BASH 的重
定向功能,改变 Linux 的输入输出设备。
?
1. 输出重定向
可以用输出重定向操作符“ > ”和“ >> ”来实现。?
例如 :
$ ls /bin > dir
$ ls /bin >> dir
以上两条命令将 /bin 下的文件列表保存到 dir 文件中。两者的
不同之处在于 : 如果 dir 文件已经存在,使用“ > ”就会覆盖原文件;而
用“ >> ”则会把新的信息追加到原有信息之后,不破坏已有资料。
2. 输入重定向
输入重定向操作符也有两种,即“ < ”和“ << ”。
“ < ”的使用例如 :
$ wc < /etc/passwd
21 42 775
wc 改向 /etc/passwd 文件接收数据 , 再将结果输出至屏幕。
? “ << ”操作符叫做 here 文档。它实际上并没有改变标准的输入设
备,我将用一个例子来说明它的使用 :
$ wc << castle
> this is a
> magic castle
在“ << ”之后接着一个字符 castle ,它告诉 BASH 当输入的正文中遇
到字符 castle 时结束输入。这时的“ > ”字符是 BASH 作为继续输入的提示
符给出的,说明当前命令尚未结束,用户应该继续输入信息。
* 错误重定向
如果要程序在屏幕上输出正确结果,而把程序的错误信息输出到
文件中以备以后查阅,可以使用操作符“ 2> ” ( 或追加重定向操作符“ 2>> ” )
。
例如 :
$ ls /bin 2> erroes
如果要把标准输出和错误输出一起输出到一个文件,可用操作符
“ &> ”和“ &>> ”。
* 管道
管道的功能为把一个文件的输出作为另一个文件的输入。操作符
是“ | ”。
例如 :
$ls /etc/passwd | wc
21 42 775
历史表
在使用 Linux 系统时 , 用户常常需要重复输入同一条命令 , BASH 会自
动将使用过的命令保存在一个名为“历史表”的文件中,以便需要使用
同样的命令时可以直接调用它们,避免重复输入。历史表可以保存 500
多条命令。当用户退出登录时, BASH 会自动把命令保存至用户起始目录
的 .bash_history ( 注意!文件以“ . ”打头 ) 文件中。我们可以用 history 命令
列
出历史表中的命令清单。
例如 :
$ history
1 ls
2 cat > MyDoc.file
.
.
.
510 ls -l /bin
511 history
从上例可以看出,记录中的每一条命令都有一个与其对应的数字,
这些数字被称为事件号。如果要使用记录中的命令,只要将事件号接
在转义符“!”后即可。 ( 例如 $ !510)
另外,“!”也可以用于收索命令,例如 :
$ !ls
这条命令将逆向收索历史表,找到第一个以 ls 开头的命令并执行
它。而且,在要查找的字串中一样可以使用通配符。
* 有一种更方便的方法,就是用上下箭头选择命令,并可以对命令进行
修改,然后执行即可。
进程
简单来说,所谓进程,就是指正在运行的程序。 Linux 会给每一个进
程自动分配一个进程号 (PID) 。所有新的进程都是在已有进程上建立的,
它们分别称为父进程和子进程。这些大大小小的进程就构成了一个树
状结构。其中根进程名为 init ,它是系统启动时运行的进程, PID 为 1 。
用 ps 命令可以查看进程的信息 :
$ ps
PID TTY STAT TIME COMMAD
325 v01 S 0:00 -bash
359 v01 R 0:00 ps
1. 作业
对于用户输入的每一个命令,系统都会把它作为一个作业,并分配
一个作业号,通过作业号对命令进行控制。
在运行某些命令时,系统要等待很长时间才能完成 ( 比如格式化 ) 。
再让用户输入新命令。其实,可以在命令末尾追加字符“ & ”把当前作
业放在后台运行,系统立即可以接收下一条命令的输入。 后台作业是
Linux 多任务特性的体现之一。
用户还可以用组合键 Ctrl+z 来挂起当前作业。
相关命令 :
jobs 显示 shell 的作业清单
fg 以前台方式继续最近被挂起的作业
bg 以后台方式继续最近被挂起的作业
kill 终止进程
* 注意 : 用 logout 退出系统时,必须保证所有作业已结束,如果有作业处
于挂起状态,会得到出错信息。
2. 虚拟终端
虚拟终端是 Linux 多任务特性的又一实现。它允许同一用户多次登
录系统,同时执行多个命令。用户可以用组合键 Alt+F1~F6 在不同的虚拟
终端间切换。
其它
BASH 允许用户编写自己的命令,完成常用的操作。命令格式为 :
cmd_name( ) {command1;command2;...;commandN;}
例如 :
$ la( ) {ls -a;}
以后输入 la 就等于输入 ls -a
用户还可以设置 BASH 的系统初始化文件,设置环境变量等,在此就
不祥述了。至此,我已经向朋友们介绍了 BASH 的最重要部分,但是如果要
精通 BASH 和 shell ,关键是多实践、多操作。 |
|