在上一章节中,介绍了该如何使用man这个指令来查询指定的指令的用法,在这一章节中,笔者将继续的介绍基本操作文字档案的方式以及相关的指令使用方法。
在解释重新导向如何运作之前,可以搭配下面这张概念图:
从上面的图示可以知道,程序或是指令在执行的时候,会有三个管线,第一个就是使用者执行指令或是程序的时候,会有一个standard input的管线(stdin),这个就是当程序或是指令是互动式的时候,则会监控键盘所输入的字串,当程序或指令执行一阵子之後,会输出一些讯息,有些讯息是正常的资讯,那这些输出的讯息则会重新导向到stdout,就是standard output,标准输出的意思,而有些讯息会是在程序或是指令执行的时候出现错误讯息,这些错误的讯息则会导向到stderr之管线,即standard error,标准错误的意思,而编号0是stdin,编号1的即是stdout,编号2则是stderr。
知道管线上面会存放什麽讯息之後,接着就可以里用几个常用的指令来演示重新导向讯息的范例了。
首先开启workstation虚拟机器,登入到rocky这个使用者之桌面环境之後,,笔者使用ls
这个指令当作范例,并执行下列的指令:
[rockylinux@workstation ~]$ ls ~
Desktop Downloads file2_soft ls.ps Music Public Videos
Documents file2_hard ls.pdf ls.txt Pictures Templates
ls
带~
参数的话,指的是将家目录底下的档案与目录(不包含隐藏档案)列出,若是使用下列的指令:
[rockylinux@workstation ~]$ ls ~ > home_list.txt
[rockylinux@workstation ~]$ cat home_list.txt
Desktop
Documents
Downloads
file2_hard
file2_soft
home_list.txt
ls.pdf
ls.ps
ls.txt
Music
Pictures
Public
Templates
Videos
执行ls ~ > home_list.txt
指令则是将输出的档案清单重新导向到home_list.txt
这个档案中,接着可以使用cat
这个指令将指定的档案内容给印出来到终端机上,就会得到上面的样子了。那>
这是什麽?这指的是将stdin输出的讯息重新导向到home_list.txt
档案里,也等价於ls 1> home_list.txt
指令,所以当使用ls
这个指令输出的讯息是在stderr时候,则导向的档案则会是空的,若只要将stderr
之讯息存下来,那只要改成ls not_found_dir 2> error.txt
即可,相关的执行命令之结果讯息如下:
[rockylinux@workstation ~]$ ls not_found_dir 2> error.txt
[rockylinux@workstation ~]$ cat error.txt
ls: cannot access 'not_found_dir': No such file or directory
那若要将stdout与stderr分别重新导向到个别的档案去储存,那可以使用下列的方式做到:
[rockylinux@workstation ~]$ ls not_found_dir 2> error.txt
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ cat error.txt
ls: cannot access 'not_found_dir': No such file or directory
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ ls not_found_dir 1> success.txt 2> error.txt
[rockylinux@workstation ~]$ cat success.txt
[rockylinux@workstation ~]$ cat error.txt
ls: cannot access 'not_found_dir': No such file or directory
[rockylinux@workstation ~]$ ls ~ 1> success.txt 2> error.txt
[rockylinux@workstation ~]$ cat success.txt
Desktop
Documents
Downloads
error.txt
file2_hard
file2_soft
home_list.txt
ls.pdf
ls.ps
ls.txt
Music
Pictures
Public
success.txt
Templates
Videos
[rockylinux@workstation ~]$ cat error.txt
[rockylinux@workstation ~]$
从上面的使用来看,就是分别将编号1之stdout与编号之stderr重新导向到success.txt
与error.txt
档案储存,若要将上述两个管线都导向到同一个档案呢?那可以参考下列的做法:
[rockylinux@workstation ~]$ ls ~ > message.txt 2>&1
[rockylinux@workstation ~]$ cat message.txt
Desktop
Documents
Downloads
error.txt
file2_hard
file2_soft
home_list.txt
ls.pdf
ls.ps
ls.txt
message.txt
Music
Pictures
Public
success.txt
Templates
Videos
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ ls not_found_dir > message.txt 2>&1
[rockylinux@workstation ~]$ cat message.txt
ls: cannot access 'not_found_dir': No such file or directory
从上面的执行指令输出结果,可以知道两件事情:
2>&1
将stdout与stderr两个管线的输出讯息同时重新导向到message.txt
做储存。>
会将输出的讯息导向到指定的档案之外,也会将同一个档案之内容给覆盖掉,那要留下原本的文字档案要怎麽做呢?可以参考下列的做法:[rockylinux@workstation ~]$ ls ~ > message.txt 2>&1
[rockylinux@workstation ~]$ ls not_found_dir >> message.txt 2>&1
[rockylinux@workstation ~]$ cat message.txt
Desktop
Documents
Downloads
error.txt
file2_hard
file2_soft
home_list.txt
ls.pdf
ls.ps
ls.txt
message.txt
Music
Pictures
Public
success.txt
Templates
Videos
ls: cannot access 'not_found_dir': No such file or directory
从上面的执行指令输出过程,可以看到,首先使用>
方式先将message.txt
档案内容覆盖成前家目录的清单讯息,接着将ls not_found_dir
之错误讯息用>>
之方式将内容从原本message.txt
最後一行内容开始附加进去,这样就会完整保存之前所存放在message.txt
档案之内容了。
讲完了重新导向以及标准输出与错误之重新导向到档案之後,接着来介绍另一个指令的功能,就是管线Pipelines了。这功能其实意思是,将前面的stdout输出的结果当成stdin输入并给下一个指定的指令,并两者用|
隔开,那什麽意思呢?可以看一下下面的执行指令范例:
[rockylinux@workstation ~]$ ls ~ | tee home_list.txt
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
[rockylinux@workstation ~]$ cat home_list.txt
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
从上面执行指令的过程可以知道,首先先用ls ~
将家目录除隐藏档案之外的档案与目录全数列出,接着使用pipelines管线将前面输出的档案与目录清单当成输入转给tee
这个指令,这个指令是用来将读取标准输入讯息以及将读到的讯息写入到指定的档案中,因为使用tee
指令的时候,会一并把写入的输入讯息给印出来,若不要将这些输入的讯息印出来的话,则可以将上述的指令改成:ls ~ | tee home_list.txt > /dev/null
,意思就是将写入的讯息stdout之标准输出导向到没有,/dev/null
是一个特别的装置档案,可以称为位元桶或是黑洞,导向这里的路径的讯息都会被吃掉与不见,因此就不会有输出的讯息了。
除了使用tee
指令之外,另外也可以使用less
或是more
指令将用cat
指令所书的指定档案内容终端的文字阅读器浏览,相关执行的指令方式如下:
[rockylinux@workstation ~]$ ls ~/ > home_list.txt
[rockylinux@workstation ~]$ cat home_list.txt | less
[rockylinux@workstation ~]$
Desktop
Documents
Downloads
home_list.txt
Music
Pictures
Public
Templates
Videos
(END)
从上面的指令执行後的输出讯息可以得知,首先先透过ls ~ > home_list.txt
将家目录的清单给储存起来,接着使用cat
指令将home_list.txt
档案给印出并使用管线pipelines方式将前面档案内容当成输入并交给less
指令,接着less
便会开启一个文字阅读器让图取档案内容变得方便,进入文字阅读器之後,可以用键盘上与下方向键进行移动,要离开文字阅读器的话,按下键盘的Q
即可以离开,若要搜寻的的话,则可以按下键盘的/
之後,便可以输入要搜寻的关键字。
vim,是一个功能强大且多元的终端机上的文字编辑器,透过使用键盘的方式便可以进行文字档案内容的编辑,为什麽要学vim呢?原因很简单,因为有时候,主机并不会有桌面环境,只有终端机的情况下,有需要编辑档案就无法使用图形化介面的文字编辑器,像是gedit等,因此学习vim会变得如此的重要原因就在这里。
要开启vim指令很简单,只要利用下面的方式即可以开启指定的档案:
[rockylinux@workstation ~]$ vim home_list.txt
[rockylinux@workstation ~]$
开启档案之後,就会进到文字编辑的模式,相关模式如下:
Desktop
Documents
Downloads
home_list.txt
Music
Pictures
Public
Templates
Videos
~
~
~
~
~
"home_list.txt" 9L, 81C
相关的vim简易操作方式如下:
有关於vim的用法还有很多,笔者这边先列出最常见的用法供读者们参考,日後更进阶的vim用法可以读者自行去翻阅其他书籍学习,但是笔者认为这些基本的vim用法学会之後,已经足以应付大部分的事情了。
ls /home/rockylinux
这个指令将输出的结果导向到home_rockylinux.txt
档案中。ls /home/rockylinux_not_found
这个指令将输出的结果导向到home_rockylinux_not_found.txt
档案中。ls /home/rockylinux_not_found
指令,不论是stdout或是stderr之结果都将要重新导向到message.txt
档案中。ls /home/rockylinux_not_found
输出的讯息显示在终端机上。cat message.txt
指令并使用less
或more
文字阅读器打开,请用一行指令完成。vim
指令进行文字编辑,并试着将message.txt
之第一行与最後一行删除,并找到Documents
字串将其改成Replaced-Documents
。
RESTful_API只有听最後一堂 1.Lab_AJAX_Node.js localhost:80...
因为如果把dialog写在viewmodel里面,之後在自动化测试的时候可能会出问题,所以在mvvm...
前言 现在越来越多民众喜欢透过网路付款,在网路付款中很重要的环节就是需要进行线上刷卡,提到网路付款和...
让我们谈谈如何制作成功的商业传单进行促销。宣传传单的主要目的是吸引注意力。无论您是要开设商店还是想吸...
我今天要来教大家Python的while回圈,前天有教过for回圈,都是能让程序重复跑的语法,但是功...