chown root filetest
filetest的所有者被chown命令改为root,但是所属组未变
chown root:filetest
冒号或者点号用来表示用户root现在将组关系修改成root。组名称在冒号后列出,中间没有空格。
shell可以定义两类变量:局部变量和环境变量。
局部变量只属于创建他们的shell,不会传给该shell派生的任何子进程。set命令可以显示局部变量;
环境变量则正好相反,会被父进程传给子进程,子进程再传给孙进程,如此逐代传递。env命令可以显示环境变量;
文件描述符
所有I/O,包括文件、管道和套接字,都是由内核通过一种名为文件描述符的机制进行管理的。文件描述符是一个比较小的无符号整数,是文件描述符表的索引。文件描述符表由内核维护,内核用它访问打开的文件和I/O流。每个进程都会从它的父进程那继承文件描述符表。头3个文件描述符为0(stdin)、1(stdout)、2(stderr),被赋给了用户的终端。如果所有文件描述符都被用掉了,就不能再打开新文件了。
重定向
当文件描述符被分配给终端以外的对象时,就被称为I/O重定向。
shell把输出重定向到一个文件的过程是:先关闭标准文件描述符1(终端),然后将这个描述符分配给该文件;
who > file 命令who的输出从终端被重定向到file;
cat file1 file2 >> file3 命令cat的输出(连接file1和file2)被附加到file3尾部;
重定向标准输入时,shell先关闭文件描述符0(终端),然后将它分配给一个文件。
mail tom < file file的输入被重定向到mail程序,也就是说,file的内容被送给用户tom;
Bourne、Bash和Korn shell重定向错误输出的方式是将一个文件分配给文件描述符2。
find / -name file -print 2 > errors find命令的所有错误都被重定向到文件errors,输出则发往终端。
C/TC shell则要经过一个更复杂的过程。
(find / -name file -print > /dev/tty) >& errors find命令的所有错误被重定向到文件errors,输出则发往终端。
管道
管道用来将一条命令的输出传递给另一个命令做输入,这通常限于在父进程和子进程之间单向传递数据。简单说,管道其实只是个内核缓存区,两个进程通过它来共享数据,而不需要临时的中间文件。
who | wc
ls | sort
who | cat
shell和进程
默认情况下,大部分信号会终止进程。每个进程对给定的信号可采取的动作如下:
1、忽略信号
2、停止进程
3、继续进程
4、进程可以被程序中定义的函数所捕获。
Bourne、Bash和Korn shell可以通过设置特定信号的相应动作来处理进入程序中的信号、或忽略信号。C和TC shell只能处理^C(Ctrl+C)即中断字符。
阅读(1016) | 评论(0) | 转发(0) |