Chapter 2 命令行基础(1)

来源:互联网 发布:棋牌游戏透视软件 编辑:程序博客网 时间:2024/05/17 01:12

()的作用

        如果有两个命令,我们可以像第一种用分号隔开执行:

$ cd ~; ls

        也可以用一个括号将其包起来:

$ (cd ~; ls)

        除了括号之外,两种命令形式完全一样,有时其效果也完全一样。但是两者的意义大不相同。第一种命令形式只是在一个逻辑行并列给出多个命令,其效果同一次输入一个命令基本上没有区别。而且都是在当前shell下执行,而第二种形式则把多个命令看做一个组合命令,在一个子shell里执行,所有的命令的输出合并成为一个输出流,着在管道操作中差别尤为明显。

wc命令 

http://www.cnblogs.com/peida/archive/2012/12/18/2822758.html

后台进程:

shell命令前台解释并执行命令的过程中用户不能做其他操作。如果希望命令转到后台去执行,在命令之后加一个 &,如下:

$find /-name echo -print 2>/dev/null &

之后shell会给出类似如下的输出:

[1] 13784

[1] 是作业号

13784是进程号(可以通过进程管理的命令操作)

后台执行的命令有可能随时出现在shell中,所以如果使用vim可能会受到干扰。

cat -v 命令行中回显用户的输入命令

文件描述符(简化的文件指针)

内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIXLinux这样的操作系统。[1] 

习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非Unix内核的特性,但是因为一些 shell 和很 多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。(0~9都可用但是,尽量避开5,因为shell在exec创建进程的时候,会覆盖掉原有的描述符为5的文件)

shell的输入输出重定向:

(感觉内容有点杂,我就先总结几个常用的)

> 将命令行返回的结果输出到文件(如果没有该文件,就以文件名创建该文件;如果有这个文件,就覆盖掉原有内容)

如下:

ls >fname

会在当前目录下创建一个fname的文件,然后将ls的内容添加进去

>>

与上一个不同的是,如果文件存在,是将新的内容添加到后面,而不是覆盖

<

按照标准输入流输入文件(个人怎么觉得不太常用,书上给的例子是统计长度...)

wc -l <fname

管道 ‘|’

用管道连接两个命令的时候,Shell将会把两个进程连接起来,利用管道的单向通信特征,把一个进程对标准输出传递到另一个进程的标准输入。Shell将协调两个进程的同步,使两个进程能够并发的运行,这样就可以省略村中中间处理结果的临时文件,实际上,管道是一种特殊的I/O重定向。

可以多个组合

$command1 | command2 | command3 |….


用例:

$ps -ef | grep cron

理解:

进行如下两步操作,但是省去创建fname的过程

$ps -ef>fname

$grep cron < fname

tee命令:

通过标准输入输出接受并显示数据,同时把数据存储到给定的文件中

用例:

$ps -ef | grep cron | tee fname1

我们就将结果返回到console,同时也创建了一个fname1来存返回的结果。


1 0
原创粉丝点击