Linux_重定向

有哪些

有标准输入、标准输出重定向。
有命令代换。
有管道。

标准输出重定向

1
2
3
4
5
6
#include <stdio.h>
int main()
{
printf("C Program!\n");
return 0;
}

编译为a.out
>为完全覆盖写。

1
./a.out > aa.txt

目前aa.txt内容为

1
C Program!

>>为追加写。

1
./a.out >> aa.txt

目前aa.txt内容为

1
2
C Program!
C Program!

我们想在命令行把程序执行后的输出结果输出到文件中时,可以这样:./cmpxz DCE 20250709 >log.txt 2>&1

标准输入重定向

1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
char str[50];
scanf("%s", str);
printf("%s\n", str);
return 0;
}

编译为b.out

1
./b.out < "hello"

提示:

所以标准输入重定向不能是简单的字符串,而是要重定向到一个文件。
先用echo把一些内容输入到一个文件中:

1
2
echo "hello" > aa.txt
./b.out < aa.txt

执行结果:

1
hello

管道

我们上面讲的标准输入、标准输出重定向都是文件和程序之间的交互。
而管道是进程之间的交互。

用上面的a.outb.out示例一下管道:

1
./a.out | ./b.out

执行结果:

1
C

(没有显示全C Program!,是因为中间有空格,scanf只输入了空格前的C字符。)

命令代换

Command Substitution

形如:

1
2
var2=$(./a.out)
var3=$(./1st.sh)

即,可以把程序、shell脚本运行的结果写入到环境变量中。

便于脚本编写中涉及到的命令中转,可以先保存到环境变量中。使用命令代换,避免了在代码中编写读写文件的繁琐。

Linux_启动过程

输入以下命令,可以看到全部进程。

1
ps -aux | less

下面是FreeBSD的 Unix 系统的测试结果:

0 号进程为[kernel]。(测试的Ubuntu Linux 系统没有显示 0 号进程)

1号进程为/sbin/init。用于初始化。

[ctypto]用于加密。

有一个特殊的[idle]进程,用于空闲时的调度。某个进程时间片结束,则把权力上交[idle]。由[idle]决定下一次调用谁。

Unix 系统有多个 getty,是终端程序。一旦有哪个人登录,其中一个 getty 就负责调用 login(登陆器),用于登录相关。
如果用户名、密码匹配,最终就会打开Shell。