Linux进程管理
管道和重定向
重定向
利用>
可以使本应该输出在屏幕上的输出信息移到了一个文本文件中去保存,以便以后方便查看。
例如:date > file
将现在的时间信息保存到file文件中
例如ls / > file
将根目录下的信息输出在file文件中
重定向的原理
- FD简介
file descriptors,FD,文本描述符,进程使用文件描述符来管理打开的文件,又叫文件句柄。
文件描述符是一个程序在打开的时候描述这个文件的,为了更加方便的调用文件,给每一个文件的路径都起一个别名(也就是软连接),在调用时就直接用别名即可。 - FD图示
stdin代表标准输入 stdout代表标准输出 stderr代表标准错误。
FD的范围是0到255。
FD是相对于程序来说的,为的就是让程序更加方便、快捷的打开文件。
FD是访问文件的标识,即链接文件,省去了冗长的绝对路径。
0代表标准输入
1代表标准输出
2代表标准错误输出
3+代表文件,可读可写通过vim程序,来观察一个进程的FD信息
- 1.通过一个终端,打开一个文本
touch /home/file
vim file
- 2.通过另一个终端,查询文本程序的进程号
ps aux | grep vim
由此可以查询程序的进程编号是1633
- 3.在/proc目录中查询文本程序的FD
ls /proc
在/proc文件夹下可以找到1633文件夹。
ls /proc/1633
进入到1633文件夹中又有很多文件夹,可以看到一个很关键的文件夹叫fd
ls /proc/1633/fd
查看fd文件夹中的详细内容,发现0,1,2,4代表的是一个一个的文件,而0,1,2这些数字代表的是/dev/pts/0,4数字代表的是/home/.file.swp
- 在文件夹上创建一个文件的快捷方式
ln -s 文件名称 文件的快捷方式
ln -s file.txt 333
- 在一个程序中往另一个程序发送消息
echo 1234 > /dev/pts/0
输出重定向
- 正确输出
1>等价于>
date 1> /dev/pts/0
表示的是对文本内容进行覆盖
1>>等价于>>
date >> time.txt
表示的是对文本文件进行追加,并不是覆盖。
- 错误输出
2>
当某条命令产生错误时,才会有错误输出。
2>>
如何在命令行中将正确的信息和错误的信息同时输出呢?
如何将正确的信息和错误的信息分开存放呢?可不可以创建两个文件进行分开存放呢?
答案是可以的。
一般情况下我们很少看输出的信息,在大多数情况下将程序输出的信息放入一个空洞程序。
ls /home/ /aaa &> /dev/null
此时屏幕上并没有输出任何信息。
输入重定向
mail -s "邮件名称" 计算机用户名称
按下回车键会让我们去输入邮件的内容。按下.回车回到命令行界面。
接下来会查看这封邮件。
首先我们要创建一个计算机用户
useradd alice
其次要为这个创建的用户更新一下密码
passwd alice
按下回车后会让输入自己的密码
最后从超级管理员切换到user01用户
su - alice
输入刚更新的密码回车之后就进入了user01用户界面
使用mail查看自己发送的邮件
按下1查看邮件中的内容
按下q退出邮件,在按下exit退出alice用户回到超级管理员。
但是这种不断编写邮件再去发送的方式有些麻烦,所以我们可以考虑写一个邮件的模板,之后利用重定向发送给邮件程序,来代替我们发送文件
首先我们要准备一个文件
vim word
在创建的word文件中写入内容
通过输入重定向想邮件程序发送文件
mail -s "test01" alice < word
这样就代替了我们发送邮件。
管道
进程管道简介
管道(Piping):管道命令可以将许多条命令组合起来,一次性完成复杂的处理任务。
语法:command1 | command2 | command3 |......
管道的工作原理:
指令1的输出信息通过管道作为输入信息输入进指令2,经过指令2整合分析处理后作为输出信息通过管道作为输入信息进指令3,依次类推,直到最后没有命令时就会把最后的输出信息显示在我们熟悉的命令行界面上。
- 查看/etc/passwd的内容
cat /etc/passwd | head -4
cat /etc/passwd | head -4 | tail -2
这样管道可以帮助我们进行层层筛选达到我们想要的效果。
tee管道
管道通过层层筛选达到我们想要的结果,那么如果在筛选的过程当中我们如何将之前在某个管道筛选出的信息保存到文本中呢?这时就用到了tee管道。
tee管道就相当于一个三通管道,就是交给另一个程序处理的同时,又保存一份副本。
- 例如:
cat /etc/passwd | tee file.txt | tail -1
将passwd文件中的内容保存到file.txt中,同时又经过了tail处理
cat /etc/passwd | grep "root" | file.txt | head -1
这条命令的结果是在file1.txt中保存了两条在命令行中输出了一行。
参数传递Xargs
Xargs的作用和管道的作用是一样的。它主要是管理那些不服管教的特殊命令,比如:cp、rm
1.准备一些文件
touch /home/file{1..5}
2.接到消息,部分文件需要删除,考虑使用管道试试
cat files | rm -rfv
由此可见并没有删除成功
4.再加上Xargs试试
cat files | xargs rm -rfv
由此可见加上xargs就可以了。
Linux存储管理