Linux菜鸟成长日记(文件输入输出的管理,重定义,追加,管道等···)

文件输入输出的管理(重定义,追加,管道等)

             

今天为大家带来Linux中文件的基本输入输出管理

     先解释一下所谓的输入输出

      输入:就是用我们的键盘,鼠标和我们用这些硬件在系统逐个录入的字符;

      输出:系统接收到我们的输入的信息后,经过进程的处理产生对应的功能字符
      输入会有两种出现,分别为编号1,编号2。

          编号1为正确输出;编号2为错误输出。系统默认这两种输出都会被定向到字符设备中。

      对输入进行管理    非交互式多行录入

          首先举个例子,我们在进行用户密码修改时在shell中执行passwd,如下会提示让我们输入新密码,这就是与系统有“交流”,也就是交互式,这样的操作难免让人觉得麻烦,进行非交互式输入可解决这个问题。

         

非交互式输入:

Shell中的 ‘<<’符号表示一种特殊的重定向,用于向某一个命令传递多行输入。当脚本中出现此符号时,Shell将首先会把紧跟着‘<<’的一个字符串,视为一种特殊的分界符;然后,用户可以输入一连串的数据;最后,用户单独起一行,用另一个相同的分界符结尾。在两个分界符之间的内容,都被视为命令的输入参数。可以此来实现非交互式输入。

   例如:密码修改:如下所示,执行sh xgmm.sh后密码修改成功不用进行交互。

vim中编辑如下

    对输出进行管理:1.重定向:输出重定向"<"  对命令的输出进行重新定向

       在执行一个显示命令后在shell中显示出结果可将这个结果的输出重新定向到一个文件中。

例如

:执行 date 指令后 会在shell中显示出对应的时间,如果进行输出重定向“date >time.txt”则不会在shell中显示,而是定向到time.txt这个文件中去。      


上面的 “>”为重定向正确输出,还有相应的“2>”重定向错误输出;"&>"重定向所有输出;"2>&1"把错误输出的编号由2转换为1。我将以一个例子来解释上面的这三个重新定向。

   首先我们在当前目录建立一个名为linux的文件,并为其附上内容“hello linux”,在shell中执行“cat linux lin”结果如下,由于没有lin这个文件所以会显示“lin:No such file or directory”.

若是在“cat linux lin”指令后加上“2> file.err”,则会在当前目录建立一个名为“file.err”的文件,并把错误输出写进文件中。如下所示,就是错误输出重定向。

若是在“cat linux lin”指令后加上“&> file.all”,则会在当前目录建立一个名为“file.all”的文件,并把所有输出写进文件中而不在shell中显示。如下所示,就是全部输出重定向。

若是在“cat linux lin”指令后加上“2>&1 file”,则会在当前目录建立一个名为“file”的文件,并把所有出写进文件中。如下所示,有人会问了:“>”不是重新定向正确输出么,为什么错误输出也被定重新向到文件file中了,不要慌张,这就是“2>&1”把错误输出的编号由2转换为1,即在此符号作用下,将错误输出的编号2转化为正确输出的编号1,后被重新定向到file文件中。(比较绕口望诸君细细体悟)

 注:重定向会将原文家内容覆盖,举个例子若是当前目录中有一文件“westos”其内容为“lee lee”若是执行上述命令“cat linx”定义到“westos”中则会覆盖“westos”中内容。(示例如下)

         2.追加 :保持原文件内容不变的情况下把输出追加到文件之后。

             “>> ” 追加正确输出;“2>>”追加错误输出;“&>>”追加所有输出。

       接上面输出重定向的例子来解释这三个命令符。对上述产生的file.err ,file.all进行操作

    对于  “>> ”而言,执行“cat linux lin  >>file.err”会将正确输出追加到file.err文件内容后,如下,file.err原内容未被覆盖。

  

    对于 “2>>”而言,执行“cat linux lin  2>>file.all”会将错误输出追加到file.all文件内容后,如下,file.all原内容未被覆盖,错误输出被追加到文件内容后。

 

对于“&>>”而言,执行“cat linux lin  &>>file.all”会将所有输出追加到file.all文件内容后,如下,file.all原内容未被覆盖。所有输出被追加到文件内容后。


最后要讲的是管道:符号为“|”

所谓管道,是把输出变成下一个程序的输入,管道的作用是组合多条命令。

例如,想要查看某文件的15-18行,以/etc/passwd为例,在shell下执行 "head -n 18 | tail -n 3"就可显示/etc/passwd的15-18行内容,也就是先执行显示文件头15行的命令,在此基础下在执行显示出上述15行的后三行的命令,应该不难理解。具体如下:

附加一个:"tee",复制输出到指定位置

示例如下:在当前目录新建一个名为westos的文件,内容为“linux” 执行"cat westos | tee file"将会i显示westos内容并将其内容复制到file文件中





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值