提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 学习目标:
  • 学习内容:
  • 学习时间:
  • 学习产出:

学习目标:

提示:这里可以添加学习目标
例如:一周掌握 Java 入门知识


学习内容:

提示:这里可以添加要学的内容
例如:
1、 搭建 Java 开发环境
2、 掌握 Java 基本语法
3、 掌握条件语句
4、 掌握循环语句


学习时间:

提示:这里可以添加计划学习的时间
例如:
1、 周五至周日晚上 7 点—晚上9点


学习产出:

既然已经在上一章学完了几乎所有基础且常用的Linux命令,那么接下来的任务就是把多个Linux命令适当地组合到一起,使其协同工作,以便我们更加高效地处理数据。要做到这一点,就必须搞明白命令的输入重定向和输出重定向的原理。
简而言之,输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高,所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及清空写入与追加写入两种模式。听起来就很玄妙?刘遄老师接下来将慢慢道来。
标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
比如分别查看两个文件的属性信息,先创建出第一个文件,而第二个文件是不存在的。所以虽然针对这两个文件的操作都分别会在屏幕上输出一些信息,但这两个操作的差异其实很大:

[root@linuxprobe ~]# touch linuxprobe
[root@linuxprobe ~]# ls -l linuxprobe
-rw-r–r--. 1 root root 0 Aug 5 05:35 linuxprobe
[root@linuxprobe ~]# ls -l xxxxxx
ls: cannot access xxxxxx: No such file or directory

在上述命令中,名为linuxprobe的文件是真实存在的,输出信息是该文件的一些相关权限、所有者、所属组、文件大小及修改时间等信息,这也是该命令的标准输出信息。而名为xxxxxx的第二个文件是不存在的,因此在执行完ls命令之后显示的报错提示信息也是该命令的错误输出信息。那么,要想把原本输出到屏幕上的数据转而写入到文件当中,就要区别对待这两种输出信息。
对于输入重定向来讲,用到的符号及其作用如表3-1所示。
表3-1 输入重定向中用到的符号及其作用

符号
作用

命令 < 文件
将文件作为命令的标准输入

命令 << 分界符
从标准输入中读入,直到遇见分界符才停止

命令 < 文件1 > 文件2
将文件1作为命令的标准输入并将标准输出到文件2

对于输出重定向来讲,用到的符号及其作用如表3-2所示。
表3-2 输出重定向中用到的符号及其作用

符号
作用

命令 > 文件
将标准输出重定向到一个文件中(清空原有文件的数据)

命令 2> 文件
将错误输出重定向到一个文件中(清空原有文件的数据)

命令 >> 文件
将标准输出重定向到一个文件中(追加到原有内容的后面)

命令 2>> 文件
将错误输出重定向到一个文件中(追加到原有内容的后面)

命令 >> 文件 2>&1

命令 &>> 文件

将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写的。先来小试牛刀,通过标准输出重定向将man bash命令原本要输出到屏幕的信息写入到文件readme.txt中,然后显示readme.txt文件中的内容。具体命令如下:
[root@linuxprobe ~]# man bash > readme.txt
[root@linuxprobe ~]# cat readme.txt
BASH(1) General Commands Manual BASH(1)

NAME
bash - GNU Bourne-Again SHell

SYNOPSIS
bash [options] [command_string | file]

COPYRIGHT
Bash is Copyright © 1989-2016 by the Free Software Foundation, Inc.

DESCRIPTION
Bash is an sh-compatible command language interpreter that executes
commands read from the standard input or from a file. Bash also incor‐
porates useful features from the Korn and C shells (ksh and csh).

   Bash  is  intended  to  be a conformant implementation of the Shell andUtilities portion  of  the  IEEE  POSIX  specification  (IEEE  Standard1003.1).  Bash can be configured to be POSIX-conformant by default.

………………省略部分输出信息………………

有没有感觉到很方便呢?我们接下来尝试输出重定向技术中的覆盖写入与追加写入这两种不同模式带来的变化。首先通过覆盖写入模式向readme.txt文件写入多行数据(该文件中已包含上一个实验的man命令信息),但每一次都会覆盖掉上一次的输出内容,所以最终文件中只有最后一次的输出结果:
[root@linuxprobe ~]# echo “Welcome to LinuxProbe.Com” > readme.txt
[root@linuxprobe ~]# echo “Welcome to LinuxProbe.Com” > readme.txt
[root@linuxprobe ~]# echo “Welcome to LinuxProbe.Com” > readme.txt
[root@linuxprobe ~]# echo “Welcome to LinuxProbe.Com” > readme.txt
[root@linuxprobe ~]# echo “Welcome to LinuxProbe.Com” > readme.txt
[root@linuxprobe ~]# cat readme.txt
Welcome to LinuxProbe.Com
然后再通过追加写入模式向文件再写入一次数据,在执行cat命令之后,可以看到如下所示的文件内容:

[root@linuxprobe ~]# echo “Quality linux learning materials” >> readme.txt
[root@linuxprobe ~]# cat readme.txt
Welcome to LinuxProbe.Com
Quality linux learning materials

虽然都是输出重定向技术,但是命令的标准输出和错误输出还是有区别的。例如查看当前目录中某个文件的信息,这里以linuxprobe文件为例,这个文件是真实存在的,因此使用标准输出即可将原本要输出到屏幕的信息写入到文件中,而错误的输出重定向则依然把信息输出到了屏幕上。
[root@linuxprobe ~]# ls -l linuxprobe > /root/stderr.txt
[root@linuxprobe ~]# ls -l linuxprobe 2> /root/stderr.txt
-rw-r–r--. 1 root root 0 Mar 1 13:30 linuxprobe
如果想把命令的报错信息写入到文件,该怎么操作呢?当用户在执行一个自动化的Shell脚本时,这个操作会特别有用,而且特别实用,因为它可以把整个脚本执行过程中的报错信息都记录到文件中,便于安装后的排错工作。
接下来以一个不存在的文件进行实验演示:
[root@linuxprobe ~]# ls -l xxxxxx > /root/stderr.txt
cannot access xxxxxx: No such file or directory
[root@linuxprobe ~]# ls -l xxxxxx 2> /root/stderr.txt
[root@linuxprobe ~]# cat /root/stderr.txt
ls: cannot access xxxxxx: No such file or directory
还有一种常见情况,就是我们想不区分标准还是错误输出信息,只要命令有输出信息则全部追加写入到文件中,这种就要使用到&>>操作符了,全部写入到文件中:
[root@linuxprobe ~]# ls -l linuxprobe &>> readme.txt
[root@linuxprobe ~]# ls -l xxxxxx &>> readme.txt
-rw-r–r--. 1 root root 0 Mar 1 13:30 linuxprobe
cannot access xxxxxx: No such file or directory
输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。输入重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把readme.txt文件导入给wc -l命令,统计一下文件中的内容行数:
[root@linuxprobe ~]# wc -l < readme.txt
2

大家肯定发现了这次的输出结果跟第2章节讲的时候有所不同,没有了文件名称。
[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd
这是因为此前使用“wc -l /etc/passwd”是一种非常标准的“命令+参数+对象”的执行格式,而这次的“wc -l < readme.txt”则是将readme.txt文件内的内容通过操作符导入到的命令中,没有被当作命令对象进行执行的过程,因此wc命令只能读到信息流的数据,没有文件名称的信息。这个小差异,同学们可以慢慢琢磨下。
3.2 管道命令符
细心的读者肯定还记得在2.6节学习tr命令时曾经见到过一个名为管道符的东西。同时按下键盘上的“Shift”和“\”反斜杠键即可打出管道符,其执行格式为“命令A | 命令B”。管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的信息当作是后一个命令的标准输入”。在2.6节讲解grep文本搜索命令时,我们通过匹配关键词/sbin/nologin找出了所有被限制登录系统的用户。在学完本节内容后,完全可以把下面这两条命令合并为一条:
找出被限制登录用户的命令是:grep /sbin/nologin /etc/passwd
统计文本行数的命令则是:wc -l
现在要做的就是把grep搜索命令的输出值传递给wc统计命令,即把原本要输出到屏幕的用户信息列表再交给wc命令作进一步的加工,因此只需要把管道符放到两条命令之间即可,具体如下。这简直是太方便了!
[root@linuxprobe ~]# grep /sbin/nologin /etc/passwd | wc -l
40
这个管道符就像一个法宝,我们可以将它套用到其他不同的命令上,比如用翻页的形式查看/etc目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本看不清楚):
[root@linuxprobe ~]# ls -l /etc/ | more
total 1344
-rw-r–r--. 1 root root 16 Jul 21 05:08 adjtime
-rw-r–r--. 1 root root 1518 Sep 10 2018 aliases
drwxr-xr-x. 3 root root 65 Jul 21 05:06 alsa
drwxr-xr-x. 2 root root 4096 Jul 21 05:08 alternatives
-rw-r–r--. 1 root root 541 Oct 2 2018 anacrontab
-rw-r–r--. 1 root root 55 Feb 1 2019 asound.conf
-rw-r–r--. 1 root root 1 Aug 12 2018 at.deny
drwxr-x—. 4 root root 100 Jul 21 05:16 audit
drwxr-xr-x. 3 root root 228 Jul 21 05:08 authselect
drwxr-xr-x. 4 root root 71 Jul 21 05:06 avahi
drwxr-xr-x. 2 root root 204 Jul 21 05:06 bash_completion.d
-rw-r–r--. 1 root root 3001 Sep 10 2018 bashrc
–More–

在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和passwd命令的–stdin参数相结合,可以用一条命令来完成密码重置操作:
[root@linuxprobe ~]# echo “linuxprobe” | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
还有咱们上个章节学习ps命令的时候,输入ps aux参数后屏幕信息呼呼闪过,根本找不到有用的信息,现在也可以将ps、grep、管道符三者结合到一起使用了。搜索与bash有关的进程信息:
[root@linuxprobe ~]# ps aux | grep bash
root 1070 0.0 0.1 25384 2324 ? S Sep21 0:00 /bin/bash /usr/sbin/ksmtuned
root 3899 0.0 0.2 26540 5136 pts/0 Ss 00:27 0:00 bash
root 4002 0.0 0.0 12112 1056 pts/0 S+ 00:28 0:00 grep --color=auto bash:
例如:以上就是今日学习的内容,希望正在学习Linux的你越来越好

Linux就要这样学相关推荐

  1. Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。...

    Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们. 这个是我将鸟哥书上的进行了一下整理的,希望不要涉及到版权问题. 1.显示日期的 ...

  2. 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么

    Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到win ...

  3. Linux菜鸟必学的60个命令

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  4. linux和python学哪个好一些-作为一个Python自学者,怎样学好Python?

    想学习Python? 加群:778570108? ?分享资源和在线课堂,专业教学. 对于有基础的更容易上手.可以根据计划进行学习,楼主是否有基础?不知道楼主进行到哪一步了.只要路线可以先把基础打好,后 ...

  5. python和linux哪个难学-请不要重复犯我在学习Python和Linux系统上的错误

    本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习.使用的对象,它简单.易用.好操作.界面绚丽,对于想接触Linux的新手来说是非 ...

  6. 学习Unix/Linux编程要学些什么

    最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...

  7. 50个linux指令,每天学一个 Linux 命令(50):date

    命令简介 date 命令用于显示与设置系统时间. 语法格式date [OPTION] [MMDDhhmm[[CC]YY][.ss]] 选项说明-d  #显示字符串所指的日期与时间.字符串前后必须加上双 ...

  8. linux入门怎么学?

    Linux是一款免费.稳定.性能好的开源软件,在服务器端得到了广泛的应用,对于不懂Linux得人员来说,相当神秘,对初学者来说,也比较枯燥晦涩,但是,只有你肯下功夫.拥有丰富的资源.掌握恰当的学习方法 ...

  9. Linux入门怎么学?262页linux学习笔记,零基础也能轻松入门

    #种一棵树最好的时间是十年前,其次是现在 很多程序员一开始在学习上找不到方向,但我想在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来. 但是没过多久,能了解 ...

最新文章

  1. 查找算法常见的五大面试知识点与两类实战!
  2. python输出word内容_Django输出word文件(.doc),只在内容中显示原始html
  3. .netcore 堆栈调用方法小记
  4. 关于 mahout factorize-movielens-1M.sh 执行
  5. vue tab切换_iviewUITabs选项卡切换组件
  6. Android自定义View之上拉、下拉列表 头部元素跟随 缩放、平移效果的实现
  7. 如何查看bmp文件头_效率神器:史上最强最小文件搜索软件Everything!
  8. python format()函数的用法
  9. java做安卓开发需要学什么,安卓开发要学什么 需要什么基础知识
  10. NJUPT南邮 | 离散数学_实验一
  11. 三菱PLC缓冲表操作
  12. Python、PyGame游戏项目
  13. 北京地区广播电台频率
  14. 摄氏度与华氏度之间的转换
  15. containers和overlay2占用磁盘过大
  16. '什么意思 怎么输入
  17. 编译报错Building for iOS, but the linked and embedded framework ‘xxx.framework’ was buil......
  18. Docker 入门学习
  19. python如何读取下一行_python读取行停止,然后在下一行继续
  20. python添加高斯噪声_使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)

热门文章

  1. Android Google Map开发指南(三)百度地图、谷歌地图自如切换
  2. centos7时间同步
  3. MongoDB设置登录账号和密码
  4. 操作系统学习3--Windows server 2012搭建web服务器
  5. n*n阶魔方阵c语言程序,N阶幻方入门算法及图解
  6. SpringBoot中使用Schedule
  7. 美国科技大亨换儿子血浆实现“永葆青春”?
  8. 运用人工智能实现的 THOMAS DEMARK 次序 (TD SEQUENTIAL)
  9. hexo搭建博客教程(matery主题)
  10. 营销圈说:怎样制造胡歌被催婚上热搜的偶然?