Linux概述
安卓就是一种Linux,上层使用Java
Linux 终端新手指南 | Linux 中国 {Linux 终端是一个基于文本的交互界面,它是用来控制 Linux 计算机的。}
一台物理上的字符终端必须具备:显示器、串行通信口,键盘。不必须具备磁盘存储器
C语言编写的应用程序,通过printf打印一个换行符\n,但在终端上执行的是回车加换行\r\n,把换行符替换为回车换行是由Linux内核中的行律模块完成的。在Linux内核中,终端设备通常以行为单位进行输入和输出。当你在C语言程序中使用 printf 打印一个换行符 \n 时,终端设备会将其解释为换行操作,并自动添加回车符 \r。这样做是为了在输出文本时在终端中正确实现换行的效果。
使用PuTTY或SecureCRT仿真终端登录Linux,将终端类型设置为linux,输入echo -e "\033[1;31mHello"命令后文字变为红色。输入echo -e "\033[1;33mHello"文字变为黄色。
终端仅仅是Linux主机的一个外部设备,不分担存储和计算工作
传统的终端与Linux主机之间传输的是字节流
终端转义序列的意义在于终端收到某一特定字符序列后执行一些约定好的控制功能,而不是把这些字符显示在显示器上。比如执行换行符、退格符
5 个有用的 Linux Shell 转义序列 | Linux 中国
开始使用Linux
用户登录和联机手册的查阅
root用户(超级用户)
- root不受权限的制约,可随意修改和删除文件
- root用户误删重要文件可能带来严重后果
创建新用户
由root用户创建(useradd命令),用户信息存放在/etc/passwd文件中,
包括用户名和用户ID,以及Home目录,登录shell
登录shell:一般为bash,也可以选其他shell,其他系统程序,甚至自设
计的程序
用户可以从普通终端或者网络虚拟终端登录进入系
普通用户:$ | root用户:#
组成命令的英文字母大小写敏感
几个基本命令:
man查阅手册:各种命令说明、系统调用使用手册等
date日期和时间
ntpdate通过NTP协议校对系统时间
cal日历
bc计算器,缺省精度为小数点后20位
passwd修改口令(密码)
超级用户root
修改口令之前不验证旧的口令
可修改自己的口令,还可强迫设置/查看其它用户口令
几个了解系统状态的命令
who:确定谁在系统中
uptime:了解系统启动时间和忙碌程度
top:列出资源占用(CPU)排名靠前的进程
free:了解总体内存使用情况
vmstat:了解系统负载情况
ps:查阅进程状态(关于进程的属性都可以) ps -SZ:进程逻辑内存大小
文本文件的处理
文本文件及处理工具
文本信息包含:
文本文件:C语言,Java语言等编程文件的源程序语言;文本格式的数据文件;文本格式的文字信息
程序输出
系统配置信息
文本型的网络协议
文本文件的处理命令
重定向与管道机制
输出重定向:ls -l>filelist.txt
输入重定向:sort < filelist.txt
一个“>”是输入
两个“>>”是追加
读取文件内容
Linux中和文本处理有关的命令:vi more grep yacc lex awk sed
介绍几个文本文件读取与处理的命令
more/less:逐屏显示文件
cat与od:列出文件内容
head与tail:显示文件的头部或者尾部
tee:三通
wc:字计数
sort:对文件内容排序
tr:翻译字符
uniq:筛选文件中的重复行
tail命令
使用more命令逐屏显示文本文件时,使得显示内容上滚一行而不是滚动一屏,应按下回车键
使用less命令逐屏显示文本文件时,使得显示内容上滚一行而不是滚动一屏,应按下向下的箭头
Linux中用来实现计数功能,比如:统计系统有多少个登录用户,实现计数功能的命令是:wc -l
uniq命令可以通过无选项运行uniq bar.txt,或者使用选项-d运行uniq -d bar.txt,两种情况的输出结果中都不会出现相邻两行内容完全相同的情况。
uniq bar.txt逐行检查bar.txt中的文本行,如果本行与上一行完全相同则不输出,否则输出;
uniq -d bar.txt的选项d是duplicate,如果本行与下一行不同却与上一行相同,才输出,结果只输出连续两次或多次出现的行。
-c选项是counter计数器。
一个应用程序的C语言源程序通过printf语句在标准输出输出信息,运行时只要使用输出重定向机制,不需要修改原先的程序加入文件操作的代码,就可以把输出结果存入指定名字的文件。
od命令可以实现用16进制方式逐字节打印一个文件内容的功能,但并不要求文件的每个字节必须是可打印字符,不可打印也能输出。
tail命令的-f选项可以让tail命令持续运行下去,持续地将它操作的文本文件新增的数据显示出来。如果这个文本文件被其他进程随时间推移断断续续追加几行,tail也会断断续续地输出这些新增的内容。
可以为tee命令提供一个文件名abc.log,例如:xyz | tee abc.log 那么,通过管道的方式可以把前面xyz命令的输出结果在当前终端上显示的同时也存入磁盘文件abc.log,可供事后查阅。如果以某用户正在使用的终端的设备文件名(如/dev/pts/2)代替文件名abc.log,那么,这个xyz命令执行时的输出就会同时在两个终端上实时显示。就算是把前面的xyz命令换成vi也是完全可能的,也就是说完全可能在第二个终端上实时看到第一个终端上的编辑画面。
uniq 命令只能消除相邻的重复行。如果文件中有多个相同的行,但它们不是相邻的,那么 uniq 命令不会消除它们。
信息由一个个字节组成,tr命令处理这些信息时,可以将256种字节值中的任何一种取值“翻译”为另一个字节值,并且不限于可打印字符之间的转译,比如把换行符替换为斜线。
正则表达式的概念和相关命令
正则表达式语法
正则表达式
正则表达式中6个元字符(特殊字符): . * [ \ ^ $
用反斜线可以取消特殊字符的特殊含义:正则表达式*与字符串*匹配,与字符串*不匹配
转义字符后除以上六种之外的不该出现其他字符
“.”匹配任意单字符
“[ ]”在该位置上匹配括号内任意一个单字符:例如 [abcd] 与a或b,c,d匹配(只能匹配一位)
圆点、星号在方括号内时,代表它们自己:[*.] 匹配 * 和 .
Linux中的正则表达式
三个与正则表达式相关的处理命令
- grep/egrep/fgrep:在文件中查找字符串(筛选)
- sed:流编辑(加工)
- awk:逐行扫描进行文本处理的一门语言(筛选与加工)
🔺grep(Global regular expression print)
是真的很详细了!Linux中的Grep命令使用实例
grep命令的思维导图
grep和fgrep都可以从一个文本文件中搜索出指定的字符串。
egrep 使用扩展正则表达式ERE描述模式,在指定模式方面比grep更灵活
fgrep 快速搜索指定字符串,按字符串搜索而不是按模式搜索。
🔺sed(Stream Editor) 一个强大的流式文本编辑器
常用功能:
-
文本替换:sed最常用的功能是进行文本替换。使用s/模式/替换字符串/命令,sed可以根据正则表达式模式匹配文本,并将匹配到的部分替换为指定的字符串。
-
删除行:sed可以根据正则表达式模式删除符合条件的行。使用d命令,sed可以删除匹配到的行。
-
插入和追加行:sed可以在指定位置插入或追加文本行。使用i命令可以在匹配行之前插入行,而使用a命令可以在匹配行之后追加行。
-
打印行:sed可以根据匹配条件选择性地打印文本行。使用p命令,sed可以打印匹配到的行,或者使用-n选项来禁止自动输出,只有通过命令显式打印才会输出结果。
-
转换命令:sed提供了一些转换命令,可以对文本进行处理。例如,y命令可以进行字符替换,tr命令可以进行字符转换,y/abc/ABC/将会把输入中的小写字母a、b、c分别替换为大写字母A、B、C。
-
多行处理:sed可以处理包含多行的文本数据。通过使用N命令,可以将多行文本合并为一行进行处理,或者使用/pattern/{commands}语法在匹配模式的范围内执行一系列命令。
-
文件处理:sed可以直接在文件中进行文本处理,也可以通过管道接收输入数据。使用-i选项,sed可以直接在原始文件上进行修改,而不需要创建新文件。
-
脚本模式:除了直接在命令行中使用sed命令,还可以将sed命令保存在脚本文件中进行批处理。通过在命令行中使用-f选项指定脚本文件,可以执行包含多个sed命令的脚本。
sed命令_Linux sed命令:替换、删除、更新文件中的内容
判断
fgrep,grep,egrep三个命令在指定待查找字符串的模式方面,依次越来越灵活,后面的命令可以覆盖前面命令的功能,并且模式描述的语法也是完全兼容的。(错)
命令cat pm.txt | sed ‘s/[[^][]*]//g’ 可以把pm.txt中所有用方括号括起来的内容(包括方括号自身)类似“ [参考文献23] ”这样的字符串片段删除。
grep可以筛选出包括某些特定模式的文本行,awk不仅可以筛出指定模式的行,还可以筛掉文本型表格中的部分列。
正则表达式<[^<>]*>可以匹配一个HTML格式数据中的诸如这样的用尖括号包裹起来的标签信息。
awk是一门小型的文本数据处理语言,有类似C语言一样的语法,可以使用自定义的变量,变量之间可以进行算术运算、关系运算和逻辑运算,还可以进行正则表达式匹配运算,支持条件、循环等流程控制。
文件比较
两文件逐字节比较:cmp
Linux cmp 命令
🔺用法
cmp file1 file2
🔺功能
逐字节比较两个文件是否完全相同。
两个文件完全相同时,不给出任何提示;两个文件不同时,打印出第一个不同之处
在Windows中有类似的命令COMP
md5sum计算出位于两台不同计算机上的两文件的校验和是相同的,我们就认为两个文件的内容是完全相同的,无论这两个文件有多大。两计算机之间仅交换16字节的校验和就可以完成文件内容的比较。
求出两个文件的差别:diff
Linux diff 命令
🔺用法
diff file1 file2
diff –u file1 file2
🔺功能
比较两个版本的文本文件,以寻找两者间差别
输出格式 normal,unified (-u)
normal格式:列出一个如何将file1转化为file2的指令。这些指令有a(Add),c(Change)和d(Delete)
判断
diff命令只可以求出两个文件中文本文件的差异,二进制的数据文件不可以
diff -u 的输出格式和git相同,而不是normal格式
normal 列出将file1转化为file2的指令
vi编辑器
刚进入vi时,进入命令状态。按 i 进入文本输入状态。再按下Esc按键可以返回命令状态
常用命令
🔺删除
删除当前字符:x
删除从当前光标开始的5个字符:5x
🔺替换命令:r
ra命令将当前光标处字符替换为a
将当前光标处开始的三个字符依次替换为abc,则需要按命令rarbrc
🔺取消上一次的编辑操作(undo) u
如:误删了一段正文,用u命令可撤销删除
如:把文件中的所有abc字符串替换成xyz字符串, 用u命令可撤销替换
🔺重复上一次的编辑操作 .
按圆点键,可以重复上一次的编辑操作
例如:按3dd命令删除了三行,然后按圆点键就再删除三行,接着连续按
圆点键,每按一次删三
🔺存盘退出命令
方法一:首先需要按ESC键回到命令模式,然后按“:wq回车”。
方法二:按住shift再按两下’z‘键。
🔺存盘不退出
:w
🔺不存盘退出
:q!
操作失误导致的问题
Ctrl-S 在 Linux 中用于流量控制,而不是保存文件。使用 Ctrl-Q 流量控制解除
vi存盘命令Shift-ZZ,误操作为Ctrl-ZZ
当前终端的“行律”设置不正确,导致退格键(Backspace)无法使用
由于 /bin/bash 文件不是文本文件,是二进制文件。cat /bin/bash或head -n 1 /bin/bash导致屏幕乱码
Linux:行尾处仅存换行字符;Windows:行尾处存回车和换行两个字符
许多Linux默认中文编码方案:UTF8;Windows默认中文编码方案:GBK。迁移文件时不兼容导致乱码
文件名和文件通配符
文件和目录的命名规则
一般允许1-255字符
除斜线“/”外的所有字符都是命名的合法字符
🔺系统配置信息
/etc目录:供系统维护管理用的命令和配置文件
🔺临时目录
/tmp:临时文件
/var:系统运行时要改变的数据,系统日志 syslog 等
🔺可运行程序和设备文件
/bin:系统常用命令,如ls,ln,cp,cat等
/usr/bin:存放一些常用命令,如ssh,ftp,make,gcc,git等
/sbin,/usr/sbi:系统管理员专用命令
/dev:设备文件,如终端设备,磁带机,打印机
🔺头文件和库文件
/usr/include (usr=Unix System Resource):C语言头文件存放目录
/lib,/usr/lib:存放各种库文件,指C语言的链接库文件,以及terminfo终端库等等
文件通配符规则
🔺星号 *
匹配任意长度的文件名字符串(包括空字符串)
点字符(.),当它作为文件名或路径名分量的第一个
字符时,必须显式匹配
斜线(/)也必须显式匹配
例:*file匹配file,makefile,不匹配.profile文件
🔺问号 ?
匹配任一单字符
🔺方括号 [ ]
匹配括号内任一字符,也可以用减号指定一个范围
例: [A-Z]* *.[ch] [Mm]akefile
🔺波浪线 ~
(Bash特有的)
~ 当前用户的主目录(home)
~kuan 用户kuan的主目录(home)
文件名通配符规则与正则表达式的规则不同,应用场合不同
不同种类shell通配符规则会略有些差别
选择题
在windows中*.可以匹配所有文件,但在Linux有的文件名与.*不匹配,下列哪个不匹配?
abc Makefile .profile comp.exe sort.c find.obj readme.text admin-ver3.1.2sp.tar
A、readme.txt
B、comp.ext
C、abc
D、admin-ver3.1.2sp.tar
解析
匹配的名称必须有“ . ”,选 C
文件管理和目录管理
ls选项-l: 长格式列表
第1列:文件属性;第一个字符为文件类型,后面为文件访问权限
第2列:文件link数,涉及到此文件的目录项数
第3列,第4列:文件主的名字和组名
第5列:文件大小/目录表大小
第6列:文件最后一次被修改的日期和时间
第7列:文件名
注意:ls -l 未列出 文件占用多少存储空间
ls是ls指令的普通模式,列出当前目录下的普通文件的文件名
ls * 中的 * 会在shell中进行替换,替换成可以匹配到的所有的文件名,相当于命令 ls file_name
cp: 拷贝文件
命令的两种格式和功能
cp file1 file2 cp file1 file2 ... filen dir
其中file1,……,filen为文件名,dir为已有目录名
第二种格式中: dir必须已经存在并且是一个目录
第一种格式中: file2不存在,则创建;file2存在且是文件,则覆盖; file2
存在且是目录,则按格式二处理
例:cp a.c a.bak
cp a.c b.c backup.d
mv: 移动文件
格式
mv file1 file2
mv file1 file2 ... filen dir
mv dir1 dir2
功能
使用mv命令可以将文件和目录改名
可以将文件和子目录从一个目录移动到另一个目录
mv dir1 dir2 两种执行情况(同文件系统,不同文件系统)
rm: 删除文件
命令格式
rm file1 file2 ... filen
例
rm core a.out
rm *.o *.tmp
rm * .bak
选项
-r 递归地(Recursive)删除实参表中的目录,也就是删除一整棵目录树。
-i 每删除一个文件前需要操作员确认(Inform)
-f 强迫删除(Force)。只读文件也被删除并且无提示
注:正在运行的可执行程序文件不能被删除
目录管理
pwd (print working directory):打印当前工作目录
cd (Change Directory):改变当前工作目录
mkdir:创建目录
rmdir:删除目录
cp: 复制目录
- –r,递归地复制一个目录
- –v,冗长(verbose)方式:复制目录时实时列出正在复制的文件的名字
- 选项–u,增量拷贝(update),便于备份目录
rsync:数据备份工具(增量拷贝工具)
例题
cd只能是内部命令,但是pwd是可以设计成外部命令的
rm命令的–r选项是递归(recursion)的意思,-f是强制删除的意思,rm -rf *命令能把当前目录下的所有文件都删除。(x)
错误一:*并不能匹配到所有的文件,例如.profile就不能匹配到
错误二:-f虽然是强制删除的意思,但实际作用是省去了删除时的提示信息,对没有权限删除的文件,它是不会删除的
rm命令的-f选项是force:“强制删除”,可能会将只读文件强制删除不给出任何提示。
find:遍历目录树
🔺功能
find命令从指定的查找范围开始,递归地查找子目录,凡满足条件的文件或目录,执行规定的动作
🔺举例
find verl.d ver2.d -name '*.c' -print
范围:当前目录的子目录 ver1.d 和 ver2.d
条件:与名字 *.c 匹配。注:*.c 应当用引号括起
动作:把查找到的文件的路径名打印出来
🔺条件选项
-name wildcard:文件名与wildcard匹配,
注意:必需的引号;这里的“文件名”仅指路径名的最后一部分;对通配符的解释由find完成
-regex pattern:整个路径名与正则表达式pattern匹配
🔺动作选项
-print
打印查找的文件的路径名
-exec
对查找到的目标执行某一命令
在-exec及随后的分号之间的内容作为一条命令
在这命令的命令参数中,{}代表遍历到的目标文件的路径名
-ok
与-exec类似,只是对查找到符合条件的目标执行一个命令前需要经过操作员确认
注:使用find命令的-exec选项启用一个命令处理符合条件的文件,比find结合xargs的方式,花费更多的CPU时间
tar命令输出文件的后缀必须符合规定,为.tar,.tar.gz, .tgz, .tar.bz2等,否则无法解包。(x)
文件名后缀.tar,.tar.gz,.tar.bz2仅仅是惯例,不是系统级强制要求
应用程序获取信息的方法
命令获取信息的方法
易变性从小到大为
配置文件:较复杂的程序
环境变量:与“环境”相关的配置或选项信息
命令行参数:程序启动之前指定
交互式键盘输入:程序启动之后通过计算机与操作员之间的人机交互获取信息
命令行参数的三种风格
类似dd命令的风格
类似find和gcc的风格
类似ls和grep的风格:现今流行的格式
文件系统
文件系统的创建与安装
🔺根文件系统 (root filesystem)
根文件系统是整个文件系统的基础,不能“脱卸(umount)”
🔺子文件系统
子文件系统,包括硬盘,软盘,CD-ROM,USB盘,网络文件系统NFS以根文件系统中某一子目录的身份出现(不似Windows逻辑盘)
🔺独立的存储结构
根文件系统和子文件系统都有其自己独立的文件系统存储结构,甚至文件系统的格式也不同
mkfs和mount:文件系统的创建和安装
umount:文件系统的卸载
文件系统的存储结构
引导块(0号块):用于启动系统,只有根文件系统的引导块有效
专用块(1号块):也叫管理块,或者超级块。存放文件系统的管理信息
i节点区:i节点(index node,简记为i-node):每块可容若干个i节点,每个i节点包括:指向文件存储区数据块的一些索引(index)指针;文件类型
文件存储区:用于存放文件数据的区域,包括目录表。文件名也存放在磁盘的文件存储区
inode
【小知识】第12期 linux中的iNode介绍
inode:存储文件的元数据信息,比如类型、owner、权限、时间信息、连接数、文件内容所在的位置
inode 以数组的方式存储。inode一般是128/256 byte
初始化数组之后会生成一个目录表(Map),存放 inode-index 和文件名的对应关系(目录项:“文件名-节点号”对)
示例:如何通过文件名找到 inode
- 假定要找 /etc/1.txt 文件,首先用文件名在 Map 中找到对应的 inode-index
- 利用 inode-index 找到 inode 数组中对应的 inode
- 查看 inode 中的信息,查看是否有 读写权限
- 如果具有读/写信息,则找到 inode 中文件内容所在的位置(磁盘上块的下标)
扇区(sector):磁盘制造的时候就定好了(硬件层面)
磁盘上的块(block):包含多个扇区(逻辑层面)
inode用尽:由于 inode 数组的大小在声明的时候就定好了,所以如果 inode 数组被完全占用,则称为 inode 用尽
一个文件名只能对应一个inode,但一个inode可以被多个文件名同时指向。
硬链接
例
现在有 filename1,在 Map 中对应 inode_index1,这种对应关系称为一个硬链接。此时使用如下命令:
ln filename2 inode_index1
建立 filename2 文件名与 inode_index1 的对应关系。此操作为创建硬链接。此操作后 inode 中硬链接数+1(同一 inode 被目录项引用的次)
由此可见,Linux 可以在同一目录或者不同目录中的两个目录项,有相同的 i 节点号。
可以类比 C 语言中,不同指针指向同一个地址号。如果对地址内容(inode对应的地址块)进行修改,那么所有的文件名对应的文件都会改变。
删除一个文件名,不会对 inode 造成影响。除非删除所有的文件名。
注
命令 ln 只允许对同一文件系统的普通文件建立硬链接,不允许对目录用 ln 命令建立硬链接,防止形成环状目录结构,难以处理。目录的 link 数=直属子目录数+2(包括自身目录 . 和上级目录 .. )
符号链接(软链接)
类似于Windows中的快捷方式。是一个文件,包含的有另一文件的位置信息。使用如下代码建立软链接
ln -s 源文件或目录 目标文件或目录
符号链接的内容可以是“绝对路径”也可以是“相对路径”,相对路径指的是相对于符号链接文件所处位置,而不是相对于进程的当前工作目录。
比较
Linux软连接和硬链接
🔺硬连接
在数据结构层次上实现
只适用于文件,不适用于目录
同文件系统之间也不行
🔺符号连接
在算法软件上实现
硬连接能够完成的功能软连接都可以做到(软>硬)
适用于目录,也适用于不同的文件系统
同硬连接相比要占用操作系统内核的一部分开销(因为单独创建了文件)
循环式符号连接,以及处理方法(解析路径时设置符号链接解析计数器)
无论采用符号链接还是硬链接,都可以实现将只存储一份的数据文件同时加入到两个或两个以上不同目录中。
系统调用
系统调用以C语言函数调用的方式提供
操作系统内核提供的编程界面
应用程序(ap)和操作系统(kernel)进行交互的唯一手段
例如:文件操作的open,read,write,close
种类:早期UNIX有50多个,后来扩充到120个,Linux有300个左
返回值
一般返回一个整数值
返回值大于或等于零:成功
返回值为-1:失败
strerror
char *strerror(int errno);
errno是个整数,便于程序识别错误原因,不便于操作员理解失败原因。
库函数strerror将数字形式的错误代码转换成一个可阅读的字符串
访问i节点和目录
系统调用stat/fstat:从i节点获得文件的状态信息
结构体stat包括access时间、modification时间、change时间
文件和目录的权限
文件权限
🔺权限的三个级别
文件主,同组用户,其他用户
每个文件有唯一的属主
🔺普通文件的权限
读、写、可执行
不可写文件也可能会被删
两类可执行文件:程序文件、脚本文件
目录权限
若无读权限,”目录表“文件不许读取,ls 会失败
若无写权限,”目录表“文件不许写
目录无写权限不是指目录下所有文件都禁止写
有执行权限(x)意味着分析路径名过程中可检索该目录
STICKY权限(黏着位):目录有写权限并且带STICKY属性,此目录下的文件仅文件主可以删除,其他用户删除操作会失败
在Linux中用户可以把他的某个文件设置为他本人不可以读、写、执行,但是与他同组的人可以读、可以执行,即使他是该组的成员之一也无法读取文件。
权限相关命令
ls -l :查询当前目录下所有文件和子目录权限
chmod:修改已有文件的权限
umask命令:控制文件/目录的初始权限。进程新创建的文件的权限受其影响
shell的基本机制
Linux基础篇(一)-- Shell与Bash的区别和联系
Bash是Shell的一种
交互方式:直接在窗口输入命令。熟悉shell的替换机制、转义机制,掌握循环等控制流程,可以编写复合命令
非交互方式:编写shell脚本程序,把一系列的操作变成一个脚本文件,批量处理
交互式bash的命令提示符下输入!v并按下回车,其功能是引用历史机制,重复执行最近输入的以v开头的命令
bash的重定向符<<<的作用是:将重定向符后面的单词作为这个命令的标准输入
程序的标准输入/输出
标准输入:stdin,fd=0
标准输出:stdout,fd=1;标准错误输出:stderr,fd=2
stdout 输出重定向
filename:将stdout重定向到文件filename,文件已存在则覆盖
filename:将stdout重定向追加到filename尾
命令执行时在终端上显示的信息有些属于标准输出stdout,有些属于标准错误输出stderr。显示信息到底属于stdout还是stderr,这取决于命令提供者如何设计的程序,与操作员无关。
变量
变量赋值及应用
在脚本中编辑文件
环境变量
替换
shell的替换工作:先替换命令在执行命令
变量替换、命令替换、文件名替换
方便交互使用的功能:历史替换与别名替换
元字符和转义
bash的元字符有:
单引号、双引号
shell流程控制:条件、循环与函数
进程的基本概念
进程的创建和重定向
重定向、信号
重定向与管道机制