鸟哥的Linux私房菜
  • 目录及概述
  • 第零章 计算机概论
    • 0.1 电脑-辅助人脑的好工具
    • 0.2 个人电脑架构与相关设备元件
    • 0.3 数据表示方式
    • 0.4 软件程序运行
    • 0.5 重点回顾
    • 0.6 本章习题
    • 0.7 参考资料与延伸阅读
  • 第一章 Linux是什么与如何学习
    • 1.1 Linux是什么
    • 1.2 Torvalds的Linux发展
    • 1.3 Linux当前应用的角色
    • 1.4 Linux该如何学习
    • 1.5 重点回顾
    • 1.6 本章习题
    • 1.7 参考资料与延伸阅读
  • 第二章 主机规划与磁盘分区
    • 2.1 Linux与硬件的搭配
    • 2.2 磁盘分区
    • 2.3 安装Linux前的规划
    • 2.4 重点回顾
    • 2.5 本章习题
    • 2.6 参考资料与延伸阅读
  • 第三章 安装CentOS7.X
    • 3.1 本练习机的规划-尤其是分区参数
    • 3.2 开始安装CentOS_7
    • 3.3 多重开机安装流程与管理
    • 3.4 重点回顾
    • 3.5 本章习题
    • 3.6 参考资料与延伸阅读
  • 第四章 首次登陆与线上求助
    • 4.1 首次登录系统
    • 4.2 文字模式下指令的下达
    • 4.3 Linux系统的线上求助man_page与info_page
    • 4.4 超简单文字编辑器-nano
    • 4.5 正确的关机方法
    • 4.6 重点回顾
    • 4.7 本章习题
    • 4.8 参考资料与延伸阅读
  • 第五章 Linux的文件权限与目录配置
    • 5.1 使用者与群组
    • 5.2 Linux文件权限概念
    • 5.3 Linux目录配置
    • 5.4 重点回顾
    • 5.5 本章习题
    • 5.6 参考资料与延伸阅读
  • 第六章 Linux文件与目录管理
    • 6.1 目录与路径
    • 6.2 文件与目录管理
    • 6.3 文件内容查阅
    • 6.4 文件与目录的默认权限与隐藏权限
    • 6.5 指令与文件的搜寻
    • 6.6 极重要的复习-权限与指令间的关系
    • 6.7 重点回顾
    • 6.8 本章习题
    • 6.9 参考资料与延伸阅读
  • 第七章 Linux磁盘与文件系统管理
    • 7.1 认识Linux文件系统
    • 7.2 文件系统的简单操作
    • 7.3 磁盘的分区-格式化-检验与挂载
    • 7.4 设置开机挂载
    • 7.5 内存交换空间swap创建
    • 7.6 文件系统的特殊观察与操作
    • 7.7 重点回顾
    • 7.8 本章习题
    • 7.9 参考资料与延伸阅读
  • 第八章 文件的压缩与打包
    • 8.1 压缩文件的用途与技术
    • 8.2 Linux系统常见的压缩指令
    • 8.3 打包指令-tar
    • 8.4 XFS文件系统的备份与还原
    • 8.5 光盘写入工具
    • 8.6 其他常见的压缩与备份工具
    • 8.7 重点回顾
    • 8.8 本章习题
    • 8.9 参考资料与延伸阅读
  • 第九章 vim程序编辑器
    • 9.1 vi与vim
    • 9.2 vi的使用
    • 9.3 vim的额外功能
    • 9.4 其他vim使用注意事项
    • 9.5 重点回顾
    • 9.6 本章习题
    • 9.7 参考资料与延伸阅读
  • 第十章 认识与学习BASH
    • 10.1 认识bash这个shell
    • 10.2 shell的变量功能
    • 10.3 命令别名与历史命令
    • 10.4 BashShell的操作环境
    • 10.5 数据流重导向
    • 10.6 管线命令-pipe
    • 10.7 重点回顾
    • 10.8 本章习题
    • 10.9 参考资料与延伸阅读
  • 第十一章 正则表达式与文件格式化处理
    • 11.1 开始之前-什么是正则表达式
    • 11.2 基础正则表达式
    • 11.3 延伸正则表达式
    • 11.4 文件的格式化与相关处理
    • 11.5 重点回顾
    • 11.6 本章习题
    • 11.7 参考资料与延伸阅读
  • 第十二章 学习shell scripts
    • 12.1 什么是ShellScripts
    • 12.2 简单的ShellScript练习
    • 12.3 善用判断式
    • 12.4 条件判断式
    • 12.5 循环loop
    • 12.6 ShellScript的追踪与debug
    • 12.7 重点回顾
    • 12.8 本章习题
  • 第十三章 Linux帐号管理与ACL权限控制
    • 13.1 Linux的账户与群组
    • 13.2 账号管理
    • 13.3 主机的细部权限规划-ACL的使用
    • 13.4 使用者身份切换
    • 13.5 使用者的特殊shell和PAM模块
    • 13.6 Linux主机上的使用者讯息传递
    • 13.7 CentOS7环境下大量创建账号的方法
    • 13.8 重点回顾
    • 13.9 本章习题
    • 13.10 参考资料与延伸阅读
  • 第十四章 磁盘配额(Quota)与进阶文件系统管理
    • 14.1 磁盘配额Quota的应用与实作
    • 14.2 软件磁盘阵列SoftwareRAID
    • 14.3 逻辑卷轴管理员LogicalVolumeManager
    • 14.4 重点回顾
    • 14.5 本章习题
    • 14.6 参考资料与延伸阅读
  • 第十五章 例行性工作调度(crontab)
    • 15.1 什么是例行性工作调度
    • 15.2 仅执行一次的工作调度
    • 15.3 循环执行的例行性工作调度
    • 15.4 可唤醒停机期间的工作任务
    • 15.5 重点回顾
    • 15.6 本章习题
  • 第十六章 程序管理与SELinux初探
    • 16.1 什么是程序process
    • 16.2 工作管理JobControl
    • 16.3 程序管理
    • 16.4 特殊文件与程序
    • 16.5 SELinux初探
    • 16.6 重点回顾
    • 16.7 本章习题
    • 16.8 参考资料与延伸阅读
  • 第十七章 认识系统服务(daemon)
    • 17.1 什么是daemon与服务service
    • 17.2 通过systemctl管理服务
    • 17.3 systemctl针对service类型的配置文件
    • 17.4 systemctl针对timer的配置文件
    • 17.5 CentOS7.x默认启动的服务简易说明
    • 17.6 重点回顾
    • 17.7 本章习题
    • 17.8 参考资料与延伸阅读
  • 第十八章 认识与分析登录文件
    • 18.1 什么是登录文件
    • 18.2 rsyslog.service-记录登录文件的服务
    • 18.3 登录文件的轮替logrotate
    • 18.4 systemd-journald.service简介
    • 18.5 分析登录文件
    • 18.6 重点回顾
    • 18.7 本章习题
    • 18.8 参考资料与延伸阅读
  • 第十九章 开机流程、模块管理与Loader
    • 19.1 Linux的开机流程分析
    • 19.2 核心与核心模块
    • 19.3 BootLoader-Grub2
    • 19.4 开机过程的问题解决
    • 19.5 重点回顾
    • 19.6 本章习题
    • 19.7 参考资料与延伸阅读
  • 第二十章 网络设置与备份策略
    • 20.1 系统基本设置
    • 20.2 服务器硬件数据的收集
    • 20.3 备份要点
    • 20.4 备份的种类和频率与工具的选择
    • 20.5 鸟哥的备份策略
    • 20.6 灾难复原的考虑
    • 20.7 重点回顾
    • 20.8 本章习题
    • 20.9 参考资料与延伸阅读
  • 第二十一章 软件安装:源代码与Tarball
    • 21.1 开源代码的软件安装与升级简介
    • 21.2 使用传统程序语言进行编译的简单范例
    • 21.3 用make进行宏编译
    • 21.4 Tarball的管理与建议
    • 21.5 函数库管理
    • 21.6 检验软件正确性
    • 21.7 重点回顾
    • 21.8 本章习题
    • 21.9 参考资料与延伸阅读
  • 第二十二章 软件安装:RPM,SRPM与YUM功能
    • 22.1 软件管理员简介
    • 22.2 RPM软件管理程序-rpm
    • 22.3 YUM线上升级机制
    • 22.4 SRPM的使用-rpmbuild
    • 22.5 重点回顾
    • 22.6 本章习题
    • 22.7 参考资料与延伸阅读
  • 第二十三章 X Window设置介绍
    • 23.1 什么是XWindowSystem
    • 23.2 XServer配置文件解析与设置
    • 23.3 显卡驱动程序安装范例
    • 23.4 重点回顾
    • 23.5 本章习题
    • 23.6 参考资料与延伸阅读
  • 第二十四章 核心编译
    • 24.1 编译前的任务-认识核心与取得核心源代码
    • 24.2 核心编译的前处理与核心功能选择
    • 24.3 核心的编译与安装
    • 24.4 额外-单一核心模块编译
    • 24.5 以最新核心版本编译CentOS7.x的核心
    • 24.6 重点回顾
    • 24.7 本章习题
    • 24.8 参考资料与延伸阅读
Powered by GitBook
On this page
  1. 第十一章 正则表达式与文件格式化处理

11.6 本章习题

( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 )

  • 情境仿真题一:通过 grep 搜寻特殊字串,并配合数据流重导向来处理大量的文件搜寻问题。

    • 目标:正确的使用正则表达式;

    • 前提:需要了解数据流重导向,以及通过子指令 $(command) 来处理文件名的搜寻; 我们简单的以搜寻星号 (*) 来处理下面的任务:

    • 利用正则表达式找出系统中含有某些特殊关键字的文件,举例来说,找出在 /etc 下面含有星号 (*) 的文件与内容:

      解决的方法必须要搭配万用字符,但是星号本身就是正则表达式的字符,因此需要如此进行:

      [dmtsai@study ~]$ grep '\*' /etc/* 2> /dev/null

      你必须要注意的是,在单引号内的星号是正则表达式的字符,但我们要找的是星号,因此需要加上跳脱字符 (\)。但是在 /etc/ 的那个 则是 bash 的万用字符! 代表的是文件的文件名喔!不过由上述的这个结果中,我们仅能找到 /etc 下面第一层子目录的数据,无法找到次目录的数据, 如果想要连同完整的 /etc 次目录数据,就得要这样做:

      [dmtsai@study ~]$ grep '\*' $(find /etc -type f ) 2> /dev/null
      # 如果只想列出文件名而不要列出内容的话,使用下面的方式来处理即可喔!
      [dmtsai@study ~]$ grep -l '\*' $(find /etc -type f ) 2> /dev/null
    • 但如果文件数量太多呢?如同上述的案例,如果要找的是全系统 (/) 呢?你可以这样做:

      [dmtsai@study ~]$ grep '\*' $(find / -type f 2> /dev/null )
      -bash: /usr/bin/grep: Argument list too long

      真要命!由于命令行的内容长度是有限制的,因此当搜寻的对象是整个系统时,上述的指令会发生错误。那该如何是好? 此时我们可以通过管线命令以及 xargs 来处理。举例来说,让 grep 每次仅能处理 10 个文件名,此时你可以这样想:

      1. 先用 find 去找出文件;

      2. 用 xargs 将这些文件每次丢 10 个给 grep 来作为参数处理;

      3. grep 实际开始搜寻文件内容。 所以整个作法就会变成这样:

      [dmtsai@study ~]$ find / -type f 2> /dev/null | xargs -n 10 grep '\*'
    • 从输出的结果来看,数据量实在非常庞大!那如果我只是想要知道文件名而已呢?你可以通过 grep 的功能来找到如下的参数!

      [dmtsai@study ~]$ find / -type f 2> /dev/null | xargs -n 10 grep -l '\*'
  • 情境仿真题二:使用管线命令配合正则表达式创建新指令与新变量。我想要创建一个新的指令名为 myip , 这个指令能够将我系统的 IP 捉出来显示。而我想要有个新变量,变量名为 MYIP ,这个变量可以记录我的 IP 。

    处理的方式很简单,我们可以这样试看看:

    1. 首先,我们依据本章内的 ifconfig, sed 与 awk 来取得我们的 IP ,指令为:

      [dmtsai@study ~]$ ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g'| sed 's/ *netmask.*$//g'
    2. 再来,我们可以将此指令利用 alias 指定为 myip 喔!如下所示:

      [dmtsai@study ~]$ alias myip="ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g'| \
      >   sed 's/ *netmask.*$//g'
    3. 最终,我们可以通过变量设置来处理 MYIP 喔!

      [dmtsai@study ~]$ MYIP=$( myip )
    4. 如果每次登陆都要生效,可以将 alias 与 MYIP 的设置那两行,写入你的 ~/.bashrc 即可!


简答题部分:

  • 我想要知道,在 /etc 下面,只要含有 XYZ 三个字符的任何一个字符的那一行就列出来,要怎样进行?grep [XYZ] /etc/*

  • 将 /etc/kdump.conf 内容取出后,(1)去除开头为 # 的行 (2)去除空白行 (3)取出开头为英文字母的那几行 (4)最终统计总行数该如何进行?grep -v '^#' /etc/kdump.conf | grep -v '^$' | grep '^[[:alpha:]]' | wc -l

Previous11.5 重点回顾Next11.7 参考资料与延伸阅读

Last updated 2 years ago