Shell探索
Unix系统的组成
内核:常驻内存
应用:需要时调入内存
[硬件] <-----> [内核]<-----> [驻留模块] <-----> [Shell] <-----> [用户]
Shell特点和功能
-
用户与操作系统间的主要接口,管理用户与系统之间的对话
-
本身是一个程序,用户登录系统时调入内存
-
本身提供了一些内部命令,还可以启动应用程序
-
提供了流控制和变量机制,将命令进行组合,可以作为编程工具
注:教材提供了Shell编写数据库应用的实例。后续课程是Unix系统编程。
通配符和文件的查找
-
?: 任何一个单字符
-
*: 0个或多个字符
-
[list]:list中设定的任一字符
-
[!list]:不在list中设定的任一字符
-
[-]
$rm *.*
$rm * // 删除所有文件
$rm report * // 先删除report,然后删除所有的文件,导致灾难性的后果
I/O重定向
标准文件
-
对每个进程,会自动打开三个标准文件。
-
Standard input,通常是键盘
-
Standard ouput,通常是屏幕
-
Standard error,通常是屏幕
文件指针
-
默认的情况下,程序的三个文件指针指向标准文件。
-
使用重定向符号可以指定文件指针指向的文件。
文件指针 重定向符号 标准文件
0 < (or <<) stdin
1 > (or >>) stdout
2 2> stderr
例:
$cat myfirst > myfirst.copy // 拷贝文件
$cat f1 f1.copy >> xyz // 合并文件到另一个文件尾
$cp test 2> out // 将错误信息输出到文件
$cat filea fileb 2> /dev/null // /dev/null 是一个特殊的文件,总是空的,将数据输出到这个文件,相当于删除。
重定向的组合
-
$command < input > outfile 2> errfile
-
$command > outfile 2> &1 // &1指代文件指针1
-
$command 2> &1 > outfile // 与前一个命令执行结果不同。重定向的展开是分步骤进行的, “2> &1 ”影响指针2,“> outfile”配置指针1
管道
-
多个命令之间用“|”分隔。
-
每一个命令的标准输出变为下一个命令的标准输入。
-
$ ls | wc -w
-
$ ls | grep ^n | wc -l // 以字母n开头的文件名
tee 分离输出
-
从标准输入读入数据,将数据发送到两个不同的目的地:标准输出和文件。
-
用于获得管道中的信息流的快照。
-
$ ls | tee /temp/ls.save | wc -l
群命令
用分号“;”分隔多个命令
续行符 /
Find 命令
-
格式:find path expression
-
查找选项:-name 文件名
-
文件名在用通配符时要用引号括起。
-
$ find . -name sum
动作选项
-
print
-
-exec command /; // 可用{}代表发现的文件名
-
-ok command /; // 执行命令前请求确认
-
$find . -name 'm*' -exec ls -l {} /;
grep 命令
-
global regular expression print
-
查找匹配特定模式的文本行;
-
分类:简单匹配和正则表达式匹配;
-
格式:grep [option] pattern [file1 file2 ...]
-
$ who | grep team01
-
-i 忽略大小写
-
-c
-
-v 显示不含的行。 $grep -vi UNIX file
Sort
可以指定排序所用的字段: $more animal | sort -t. +1 // 以.分隔字段,偏移一个字段
可以指定排序所用字段的第几个字符:$more animal | sort +0.1 //第0个字段,偏移一个字符
选项:-r // 反序
选项:-n // 按照数字排序
head
查看一个或多个文件的前几行内容
格式:head [-number] files
$: ls -l | head -2
tail
查看从指定行到文件末尾的内容
格式:tail [-number | + number] file // -number: 倒数的行数, +number: 正数的行数