《树莓派开始,玩转Linux》Linux部分学习记录(二)程序和进程、文本流

第16章 从程序到进程

一、指令
(此处简述指令、寄存器和汇编语言,略)
二、C程序
(作为和C语言打交道很久的程序员来说…略)
三、程序编译
高级C语言程序必须先编译成汇编程序,再转成机器程序运行。

以gcc编译C程序为例:
$gcc demo.c
编译完成后生成a.out的二级制可执行文件。以下面方式执行该文件:
$./a.out

C语言的编译是把程序员可读的C语言文本,翻译成计算机可读的机器程序。编译产生的a.out就是可执行文件,内含二进制文本,就是指令式的程序。
使用apt-get命令可以下载的应用大部分都是已经编译好的二进制可执行文件。但有些时候软件商店没有我们所需要的软件,这就需要我们从源代码出发,对程序进行编译。一般来说,源代码中还包含了编译大型工程的辅助文件。一般会有一个名为configure的脚本用于设置。编译的第一步就是执行该脚本,根据提示进行配置:

$./configure

随后你需要执行make命令

$make

命令make会根据工程的Makefile来解析代码之间的依赖关系。
最后把编译好的二进制可执行文件放到configure设定的目标路径中:

$sudo make install

四、 看一眼进程
虽然程序规定了活动的动作,但是应用程序不等于进程。进程是程序的一个具体实现,是执行程序的过程。
在Linux系统中,我们可以用ps命令来查询正在运行的进程:

$ps -eo pid,cmd

-e选项表示列车全部进程,-eo pid,cmd选项表示我们需要的信息。
每个进程都有唯一的PID来表示自己的身份。


第17章 万物皆是文本流

一、文本流
在Linux的涉及哲学中,一向有“万物皆是文件”的说法。由于文件总和数据存储联系在一起,因此托瓦兹把“万物皆文件”的说法改为“万物皆是文本流”。
文本流具有以下特性:

  • 文本型
  • 有序性
  • 完整性

二、标准输入、标准输出、标准错误
文本流存在与Linux的每个进程中。当Linux启动一个进程时,会自动打开三个流的端口:标准输出、标准输出和标准错误,这三个端口类似于入口、出口、紧急出口。
以bash进程为例,在bash中,键盘输入文本通过bash进程的标准输入端口进入bash。bash拿到输入后,不仅内部处理,还会把相同的字符输出到标准输出。
而程序有错误信息时,错误信息就会通过标准错误端口输出。
三、重定向
bash执行命令时,如果想让文本流流到文件而不是显示在屏幕上,就可以利用重新定向的机制。比如将ls命令输出的文本流导入一个文件:

 $ls > output.log

这里的>符号重新定向了ls的标准输出。标准输出的文本流不再出现在bash窗口,而是有序地存储在新建的output.log文件中。
另一个符号>>也可以重新定向,例如:

 $ls >> a.txt

>>符号的作用也是重新定向标准输出。如果a.txt不存在,那么>>符号的行为和>符号相同,都是新建a.txt文件,并把文本流导入。但如果 a.txt已经存在,ls产生的文本流会附加在a.txt的结尾,而不会像>那样每 次都新建a.txt。
单一的>和>>符号只会重新定向标准输出。如果标准错误有端口输出,那么输出内容依然按照默认情况,输出到bash窗口。如果想重新定向标准错误,那么可以使用

 $rm none-exit-file 2 >error.log

这里的2代表了标准错误。因此,标准错误重新定向到了文件 error.log。你可以分别把标准输出和标准错误重新定向到不同的目的地:

 $ls 1>output.log 2>error.log

我们还可以用<符号来改变标准输入的来源。比如:

 $grep abc < content.txt

则content.txt 中包含abc的那一行将被输出。
当然我们可以同时重定向标准输入,标准输出和标准错误:

 $grep abc < content.txt &>output.txt

四、管道
管道也可以变更文本流的方向,不过管道的目的地是另一个进程。借用管道,我们可以将一个进程的输出便成为另一个进程的输入。在bash中我们用|来表示管道。
例如:

 $echo Hello | grep lo

命令echo功能是把作为参数的文本输出到标准输出。管道把echo输出导入到grep命令。这里grep命令是从文本流查找“lo”的字符串,由于输入的“Hello"中包含该字符串,所以grep命令会打印出”Hello“
再例如,我们想从一个文件中找出所有包含文本”Tom“的行,并按照字母表顺序排列,只需要:

 $grep Tom < input.txt | sort

我们还可以把更多的管道连接起来,比如:

 $ls | grep txt | wc -l

命令wc代表”word count”,用于统计文本中的行、词以及字符的总数。-l表示统计行数。总的来说这一串命令可以发现当前目录中名字包含了"txt"的文件的总数。
五、文本相关命令
输出整个文件时,可以使用cat命令:

 $cat long_night.txt

head和tail分别从文件开头的结尾输出。比如输出开头3行:

 $head -3 long_night.txt

又比如输出文件末尾的两行:

 $tail -2 long_night.txt

此外还可以用diff命令,只输出两个文件不同的部分:

 $diff file1 file2

上述文件输出命令,以及输出参数的echo的命令,经常作为生成文本流的起点。有两块文本流就可以用管道连接多个命令,从而对文件内容进行编辑。

 $cat long_night|txt | sort | uniq >another_night.txt

命令uniq用于删除与1行之后的重复行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值