Linux07

发布时间 2023-11-28 15:51:44作者: jx03

              在Linux课程的第6章中,我学习了I/O重定向与管道。在生产环境中,每天凌晨需要备份数据库,这时工作人员会编写一个简单的脚本创建计划任务,把脚本执行结果放到一个或几个文件中以便第二天查看,这个过程就叫重定向。在使用“ps aux”命令时,为了快速找到所需信息,经常使用grep命令进行过滤,此时就需要使用管道符。

打开一个终端3,输入date命令,会显示出当前时间。如果在date后加>,并指向date.txt文件,那么结果就会写入date.txt文件:

【tty】

【date】

【date > date.txt】

【cat date.txt】

接着再打开一个终端4,将终端3的date输出结果重定向到终端4:

【tty】

【date > /dev/pts/4】

在/proc虚拟文件系统中,可以查看内核与进程的一些信息,其中有很多数字。每一个进程在运行中都会打开一些文件,每一个文件都会有一个指定的数字标识,这个标识就叫文件描述符。(在/proc下随机查看一个进程打开的文件【ll /proc/2206/fd】)

绝大多数进程中会有0,1,2这3个描述符。0表示标准输入,可以理解为键盘输入;1表示标准输出,输出到终端;2表示标准错误,输出到终端;3及以上为常规文件的描述符。

 

输出重定向:

输出重定向分为正确输出与错误输出。

正确输出:1>、1>>等价于>、>>,1可省略。

错误输出:2>、2>>。

其中,>表示覆盖,>>表示追加。如:

【date > date.txt】

【date > date.txt】

【date > date.txt】

【cat date.txt】

【date >> date.txt】

【date >> date.txt】

【date >> date.txt】

 

输出重定向(覆盖)【date 1> date.txt】

输出重定向(在尾部追加)【date >> date.txt】

输出错误重定向【ls /home/linux】

                        【ls /home/linux 2> error.txt】

正确结果与错误结果都输出到相同位置【ls /home/ /linux &> list.txt】

正确结果与错误结果都输出重定向到相同的位置【ls /home/ /linux > list.txt 2>&1】

正确结果保留在文件list.txt,错误结果丢到/dev/null【ls /home/ /linux > list.txt 2>/dev/null】

 

输入重定向:

1.使用grep命令过滤root,没有改变输入端,默认为键盘,接着把输入重定向到/etc/passwd【grep 'root'】

                                                                                                                                       【grep 'root' </etc/passwd】(加或不加<符号输出结果一样,但原理不一样。/etc/passwd一个是作为文件,一个是作为参数。)。

2.使用dd命令从/dev/zero中读取数据并写入到file01.txt文件,每次写入1MiB,一共写入两次【dd if=/dev/zero of=/file01.txt bs=1M count=2】。

   使用输入重定向与输出重定向的方式也可以实现同样的功能【dd </dev/zero>file02.txt bs=1M count=2】。

3.使用at命令创建一个计划任务,从现在开始5分钟后船舰用户linux,按组合键Ctrl+d结束【at now +5 min】

 

进程管道:

管道实际上也是一种重定向,重定向字符控制输出到文件,管道控制输出到其他程序。管道的作用是把上一个进程的输出作为下一个进程的输入,利用管道可以把若干个命令连接在一起。进程➡标准输出➡管道➡标准输入➡进程。

1.将/etc/passwd中的用户按UID数值大小排序并显示前3行【sort -t“:” -k3 -n /etc/passwd | head -3】

   (-t指定字段分隔符,-k指定字段,-n表示按数值大小排序)

2.统计出最占CPU的5个进程【ps aux --sort=-%cpu |head -6】

3.统计当前/etc/passwd中用户使用的Shell类型。取出第7列(Shell)|排序(把相同项归类|去重:

   awk是一个非常强大的文本处理工具,可以快速提取出有用的信息。-F表示指定字段分隔符,默认问空格,这里以“:”作为分隔符;$7表示第7个字段;整条命令表示取出文件的第7列【awk -F: '{print $7}'  /etc/passswd】

使用管道符1,添加sort命令进行排序(把相同项归类)【awk -F:’{print $7 }'   /etc/passwd  |sort】

添加uniq命令,去掉重复的Shell类型【awk -F: '{print $7}'  /etc/passwd  |sort  |uniq】

添加-c统计出每种Shell类型的数量【awk -F:'{print $7}'   /etc/passwd  |sort  |uniq  -c】