Linux命令行与shell编程实战(第4版)

Linux命令行与shell编程实战(第4版)"

作者:[美]马克·G.索贝尔(MarkG.Sobell),马修·赫姆基(MatthewHelmke)著尹晓奇巩晓云译
ISBN:9787302510901
定价:¥128
字数:千字
页数:
出版时间:2018.10.01
开本:
版次:4-1
装帧:
出版社:清华大学出版社
简介

Linux是当今主要的Internet服务器平台。系统管理员和Web开发者需要熟谙Linux,深入掌握shell和命令行知识;由著名Linux专家Mark G. Sobell撰写的卓越经典书籍《Linux命令行与shell编程实战(第4版)》涵盖Linux的方方面面,将帮助你达成上述目标,成为Linux专家。《Linux命令行与shell编程实战(第4版)》将全面深入地介绍系统管理员、开发者以及高级用户最需要的工具,并涵盖日常工作中最常用的参考资源。合著者Matthew Helmke为《Linux命令行与shell编程实战(第4版)》增加了很多更新内容。

《Linux命令行与shell编程实战(第4版)》适用于所有Linux版本,列举了数百个紧贴实用的优质示例,从基础知识讲起,极为清晰地介绍了文件系统、shell、编辑器、实用程序、编程工具和正则表达式等最有用的Linux知识。

《Linux命令行与shell编程实战(第4版)》还向Mac用户介绍macOS命令行的相关内容,包括仅macOS可用而其他Linux/UNIX未含的工具和实用程序。

前言

前    言

Linux  《Linux命令行与shell编程实战(第4版)》阐述如何通过命令行方式使用Linux操作系统。《Linux命令行与shell编程实战(第4版)》前几章介绍Linux基础知识。后面部分则介绍更后面的主题,详细阐述相关技术。《Linux命令行与shell编程实战(第4版)》并不针对特定的Linux版本或者某个发行版,而是适用于所有近期发布的Linux版本。

macOS  《Linux命令行与shell编程实战(第4版)》还解释如何使用macOS的UNIX/Linux基本功能。这部分内容“直奔主题”,跳过了大多数人经常与Macintosh联系在一起的传统图形用户界面(GUI),讨论如何使用与macOS直接相连的强大命令行界面(CLI)。在《Linux命令行与shell编程实战(第4版)》中提到Linux之处,也隐含了macOS,并指出了这两种操作系统之间的区别。

命令行界面(CLI)  在计算机诞生之初,只有命令行(文本)界面(Command Line Interface,CLI),可通过命令行向Linux输入命令。那时还没有鼠标和图标,也就不能通过拖放方式进行操作。某些程序(如emacs)使用ASCII字符集中非常有限的图形字符实现了基本的窗口。反白显示技术可将计算机屏幕分成几个区域。

Linux就是在这样的环境中诞生和发展起来的。很自然地,早期的所有Linux实用程序都通过命令行方式调用。Linux的真正功能还体现在这样的环境中,这也是很多Linux专家非命令行不用的原因。《Linux命令行与shell编程实战(第4版)》通过清晰的阐述和详细的示例,向读者展示了如何通过命令行方式最高效地使用Linux系统。

Linux发行版  Linux发行版包括Linux内核、实用程序以及应用程序。目前已有多个发行版,包括Ubuntu、Fedora、openSUSE、Red Hat、Debian、Mageia、Arch、CentOS、Solus和Mint等。尽管这些发行版之间有各种差异,但它们都依赖于Linux内核、实用程序和应用程序。《Linux命令行与shell编程实战(第4版)》阐述的内容将基于那些在绝大多数发行版上通用的代码。因此,无论使用的Linux发行版是什么,读者都可以使用这些程序。

内容重叠  如果读者读过Mark G. Sobell撰写的其他书籍,如A Practical Guide to Fedora and Red Hat Enterprise Linux或A Practical Guide to Ubuntu Linux,或者读过Matthew Helmke撰写的Ubuntu Unleashed 或The Official Ubuntu Book,会发现这些书籍的内容和《Linux命令行与shell编程实战(第4版)》有所重叠。这些书籍介绍的一些信息是相似的,但针对每《Linux命令行与shell编程实战(第4版)》的预期读者,从不同角度、在不同深度呈现技术信息。

面向读者  《Linux命令行与shell编程实战(第4版)》面向不同层次的读者。尽管具备一些使用计算机的经验将有助于读者更好地理解《Linux命令行与shell编程实战(第4版)》的内容,但《Linux命令行与shell编程实战(第4版)》不要求读者具备编程经验。《Linux命令行与shell编程实战(第4版)》适合于下列读者:

● 学生  上课时要用到Linux或macOS。

● 高级用户  希望学习如何通过命令行探究Linux或macOS的功能。

● 专家  日常工作中使用Linux或macOS。

● Macintosh新用户  希望了解UNIX/Linux是什么,为什么每个人都说它很重要,以及如何使用它。

● 有经验的Macintosh用户  希望知道如何利用作为macOS的基础的UNIX/Linux功能。

● UNIX用户  希望把他们的UNIX技巧应用于Linux或macOS环境。

● 系统管理员  需要对Linux或macOS和可用的实用程序进行更深入的理解,包括bash、Perl和Python脚本语言。

● Web开发人员  需要透彻理解Linux,包括Perl和Python。

● 计算机系的学生  他们需要学习Linux或macOS操作系统。

● 程序员  需要理解Linux或macOS编程环境。

● 技术主管  需要学习Linux或macOS基础知识。

优势  《Linux命令行与shell编程实战(第4版)》将使读者对如何通过命令行使用Linux和macOS有深入的认识。无论读者的背景如何,《Linux命令行与shell编程实战(第4版)》都将为读者提供工作中将用到的知识:通过《Linux命令行与shell编程实战(第4版)》,读者将学会如何使用Linux/macOS,并且在未来数年中,《Linux命令行与shell编程实战(第4版)》都将是一本有用的参考书。

Macintosh系统有大量可用的免费软件。另外,Macintosh共享软件社区也非常活跃。《Linux命令行与shell编程实战(第4版)》介绍了macOS的UNIX/Linux方面,为Macintosh用户使用可用于Linux和其他类UNIX系统的大量免费或低成本软件铺平了道路。

《Linux命令行与shell编程实战(第4版)》中的Linux表示Linux和macOS 

提示 UNIX操作系统是Linux和macOS的共同祖先,尽管这两种操作系统的图形用户界面(GUI)显著不同,但命令行界面(CLI)非常类似,在许多方面都相同。《Linux命令行与shell编程实战(第4版)》描述了Linux和macOS的CLI。为便于阅读,《Linux命令行与shell编程实战(第4版)》使用Linux表示Linux和macOS,并明确标注出这两种操作系统的不同之处。

《Linux命令行与shell编程实战(第4版)》特色

《Linux命令行与shell编程实战(第4版)》经过精心组织,以便读者在不同的条件下都可以方便地阅读。例如,读者可逐页阅读《Linux命令行与shell编程实战(第4版)》,从基本内容开始学习Linux命令行。此外,一旦读者能熟练使用Linux,《Linux命令行与shell编程实战(第4版)》就会成为一本参考书:从目录中查找感兴趣的部分,然后开始阅读。也可以查阅《Linux命令行与shell编程实战(第4版)》第Ⅵ部分包含的实用程序。读者还可将《Linux命令行与shell编程实战(第4版)》作为Linux主题的目录:翻阅《Linux命令行与shell编程实战(第4版)》,直至找到想看的主题。《Linux命令行与shell编程实战(第4版)》还给出很多Web站点的链接,供读者获取其他信息:可将Internet视为《Linux命令行与shell编程实战(第4版)》内容的延伸。

《Linux命令行与shell编程实战(第4版)》具有以下特色:

● 可选章节允许读者在不同阶段阅读《Linux命令行与shell编程实战(第4版)》,当读者可解决更复杂的问题时再回头阅读。

● 针对那些容易出错的地方,《Linux命令行与shell编程实战(第4版)》将突出显示警告框,这样就可在读者遇到麻烦之前给予指导。

● 《Linux命令行与shell编程实战(第4版)》中一些突出的提示框将提示读者用不同的方式更高效地完成某个任务;或者这些内容很有用,或者仅为读者提供一些有趣的信息。

● 安全提示框指出可使系统更安全的方法。

● 每章以“本章要点”开始,其中列出阅读完该章之后读者能完成的重要任务。

● 整《Linux命令行与shell编程实战(第4版)》都穿插实例来讲解各种概念。

● 书中包含许多有用的URL(Internet地址),读者可从这些网站找到软件和相关信息。

● 每章都有“本章小结”,用于回顾相应章包含的重要知识点。

● 每章末尾都有练习题,可帮助读者巩固所学技能。在www.sobell.com网站上有偶数编号练习题的答案。

● 《Linux命令行与shell编程实战(第4版)》详细描述了一些重要的GNU工具,如gcc、GNU配置和构建系统、make、gzip以及其他很多实用程序。

● 《Linux命令行与shell编程实战(第4版)》还包含一些有用的链接,有助于读者从很多资源(包括本地系统和Internet)获取联机文档。

● 详细介绍苹果公司专门为macOS开发的重要命令行实用程序,包括diskutil、ditto、dscl、GetFileInfo、launchctl、otool、plutil和SetFile。

● 描述macOS的一些扩展属性,包括文件派生、文件属性、属性标记和访问控制列表(Access Control List,ACL)。

● 附录D列出了macOS和Linux的一些区别。

《Linux命令行与shell编程实战(第4版)》内容

下面将描述每章包含的内容,并解释这些信息如何有助于利用Linux的功能。可浏览目录以获取更详细的信息。

第1章  欢迎进入Linux和macOS世界

第1章介绍Linux和macOS的背景知识,包括Linux的历史,描述了macOS的Mach内核,阐述了GNU项目如何帮助启动Linux,并讨论Linux区别于其他操作系统的一些重要特性。

第Ⅰ部分:Linux和macOS操作系统

工作经验丰富的用户可能希望跳过第Ⅰ部分

提示 如果读者以前用过UNIX或Linux系统,可能想直接跳过第Ⅰ部分的部分章节或者全部章节。所有读者都应该看一下2.1节“《Linux命令行与shell编程实战(第4版)》约定”(其中解释了《Linux命令行与shell编程实战(第4版)》使用的排版约定)以及2.5节(可找到Linux文档的本地资源和远程资源)。

第Ⅰ部分介绍Linux并指导读者开始使用它。

第2章  入门

第2章解释《Linux命令行与shell编程实战(第4版)》使用的版式约定。这些版式使得描述更加清晰,更便于读者阅读。该章给出了一些基本知识,并解释如何登录系统和修改密码,还讲述了在shell中输入Linux命令以及查找系统文档的方法。

第3章  实用程序

第3章讲解命令行界面(CLI),并简要介绍超过30个的命令行实用程序。阅读该章,读者将对Linux有一个认识,同时该章还介绍日常使用的一些工具和实用程序。第Ⅵ部分进一步讨论实用程序。该章介绍的实用程序包括:

● grep  在文件中搜索字符串。

● unix2dos  将Linux文本文件转换成Windows格式。

● tar  创建包含其他多个文件的存档文件。

● bzip2和gzip  压缩文件以节省磁盘空间,并可在网络上更快地传输数据。

● diff  显示两个文本文件之间的差异。

第4章  Linux文件系统

第4章讨论Linux层次结构的文件系统,包括文件、文件名、路径名、使用目录、访问权限、硬链接和符号链接。理解文件系统将有助于组织数据,以便快速地查找信息。还可与其他用户共享某些文件,同时保持其他文件为私有文件。

第5章  shell

第5章阐述如何使用shell的特性,以便更高效、便捷地工作。该章讲述的所有功能可用于bash和tcsh。该章将讨论:

● 使用命令行选项改变某条命令的工作方式。

● 如何在命令行中进行少量修改就可将一条命令的输入从键盘重定向到文件。

● 如何将命令行的输出从屏幕重定向到文件。

● 使用管道将一个实用程序的输出直接发送到另一个实用程序,以便用命令行解决问题。

● 在后台运行程序,这样Linux就可在执行一个任务的情况下,同时执行另一个任务。

● 使用shell自动生成文件名,以节省输入时间,同时在用户不记得文件的精确文件名时也非常有用。

第Ⅱ部分:编辑器

第Ⅱ部分包括两个经典的强大Linux命令行文本编辑器。绝大多数Linux发行版均包含vim文本编辑器,它是广泛使用的vi编辑器和同样流行的GNU emacs编辑器的“增强版”。使用文本编辑器可创建和修改文本文件,这些文本文件包括程序、shell脚本、备忘录以及文本格式化程序的输入数据。因为Linux系统管理涉及编辑基于文本的配置文件,所以富有经验的Linux管理员应熟练使用文本编辑器。

第6章  vim编辑器

第6章首先介绍vim编辑器的使用手册,然后阐述如何使用vim的许多高级功能,包括搜索字符串中的特殊字符、通用缓冲区、命名缓冲区、参数、标记以及在vim中执行命令,该章末尾总结了vim的命令。

第7章  emacs编辑器

第7章首先介绍emacs的使用手册,然后介绍emacs编辑器的很多高级功能,还包括META、ALT和ESCAPE键的使用。该章还包括键绑定、缓冲区以及字符串和正则表达式的增量搜索和完全搜索。另外,该章详细讲解指针、光标、标记和区域的关系,同时介绍如何利用emacs的大量联机帮助功能。其他主题包括剪切和粘贴、多窗口和多帧的使用以及emacs模式的使用(特别是C模式,可辅助程序员编写和调试C代码)。第7章末尾总结了emacs的命令。

第Ⅲ部分:shell

第Ⅲ部分更详细地讲解bash的用法和TC Shell(tcsh)。

第8章  bash

第8章承接第5章,内容包括shell更高级的用法。例如,该章使用Bourne Again Shell(bash),系统shell脚本几乎只使用这种shell。第8章的内容包括:

● 使用shell启动文件、shell选项和shell特性来定制shell。

● 使用作业控制机制停止作业,将作业从前台移到后台执行,或将其从后台移到前台执行。

● 使用shell历史列表来修改和重新执行命令。

● 创建别名以定制命令。

● 在shell脚本中使用用户创建的变量和关键字变量。

● 实现本地化,包括对locale实用程序、LC_变量和国际化的讨论。

● 创建函数,这些函数类似于shell脚本,但执行速度更快。

● 编写并执行简单的shell脚本。

● 重定向错误消息,将错误消息输出到文件中而不是输出到屏幕上。

第9章  tcsh

第9章描述tcsh,并讨论bash和tcsh的异同。该章将描述:

● 运行tcsh并将默认shell改为tcsh。

● 重定向错误消息,将错误消息输出到文件中而不是输出到屏幕上。

● 使用控制结构来改变shell脚本中的控制流。

● 使用tcsh的数组和数值变量。

● 使用shell的内置命令。

第Ⅳ部分:编程工具

第Ⅳ部分涵盖Linux和macOS系统管理中广泛使用的编程实用程序和一般用途的编程。

第10章  bash程序设计

第10章承接第8章,给出使用bash编写高级shell脚本的用法,并列举详细的示例。该章将讨论:

● 控制结构,如if...then...else和case。

● 变量,讨论属性、扩展空的或未赋值的变量、数组变量和函数中的变量。

● 环境,包括环境变量与本地变量、继承和进程局部性的关系。

● 算法和逻辑(布尔)表达式。

● 一些最有用的shell内置命令,包括exec、trap和getopts。

一旦读者掌握了Linux基础知识,就可以运用已有知识,使用shell编程语言来构建更加复杂和专业的程序。

第10章首先提出两个完整的shell编程问题,然后说明如何一步步地解决这些问题。第一个问题使用递归创建一个目录层次结构。第二个问题开发一个迷宫程序,介绍如何创建shell脚本与用户进行交互,以及脚本如何处理数据(第Ⅵ部分的例子也揭示了在shell脚本中用到的实用程序的很多功能)。

第11章  Perl脚本语言

介绍流行的、功能丰富的Perl编程语言,内容包括:

● Perl帮助工具,包括perldoc。

● Perl变量和控制结构。

● 文件处理。

● 正则表达式。

● CPAN模块的安装和使用。

许多Linux管理脚本都是用Perl编写的。阅读第11章后,读者就可以更好地理解这些脚本,并开始编写自己的脚本。该章还包含Perl脚本的许多示例。

第12章  Python编程语言

介绍灵活、友好的Python编程语言。该章内容包括:

● Python列表和字典。

● 可用于读取和写入文件的Python函数和方法。

● 使用pickle在磁盘上存储对象。

● 导入和使用库。

● 定义和使用函数,包括常用函数和Lambda函数。

● 正则表达式。

● 使用列表推导。

大量Linux工具都是用Python编写的。第12章介绍Python,包括一些面向对象的基本概念,因此用户可阅读和理解Python程序,并能自己编写。该章包含许多Python程序示例。

第13章  MariaDB数据库管理系统

介绍广泛使用的MariaDB/MySQL关系型数据库管理系统(RDBMS)。该章内容包括:

● 关系型数据库的术语。

● 安装MariaDB客户端和服务器。

● 创建数据库。

● 添加用户。

● 创建和更改表。

● 向数据库添加数据。

● 备份和恢复数据库。

第14章  AWK模式处理语言

第14章描述如何使用强大的AWK语言编写程序,这些程序可过滤数据、撰写报告并从Internet上获取数据。14.7节描述了如何使用coprocess与另一个程序建立双向通信,以及如何通过网络而不是从本地文件获取数据。

第15章  sed编辑器

第15章描述sed,它是一个非交互式流编辑器,很多应用程序在shell脚本中作为过滤器。该章将讨论如何使用sed的缓冲区来编写简单但功能强大的程序,同时给出很多例子。

第Ⅴ部分:安全的网络实用程序

第Ⅴ部分描述可用于在远程系统上工作和通过网络安全地复制文件的两个实用程序。

第16章  rsync安全复制实用程序

第16章描述rsync实用程序,这是一个安全复制实用程序,它可在本地系统上复制普通文件或目录层次结构,也可在本地系统和网络上的另一个远程系统之间复制普通文件或目录层次结构。编写程序时,可使用这个实用程序把文件或目录备份到另一个系统上。

第17章  OpenSSH安全通信实用程序

讲解使用ssh、scp和sftp实用程序在Internet上安全通信的方法。该章包括认证密钥的使用——允许用户不使用密码就能安全地登录远程系统;ssh-agent——用于在工作过程中保存用户私钥;以及转发X11——使用户可远程运行图形界面程序。

第VI部分:命令参考

Linux包含数百个实用程序。第14~17章以及第Ⅵ部分列举最重要的100多个实用程序的使用范例,使用这些实用程序,用户在解决问题时就不必使用C语言编程。如果读者已经熟悉UNIX/Linux,该部分就是一个有价值且易用的参考手册。如果读者并不是一位非常有经验的用户,那么在掌握《Linux命令行与shell编程实战(第4版)》前面的章节时,这部分可以作为有用的补充。

尽管第14~17章以及第Ⅵ部分描述的实用程序采用的格式类似于Linux手册,但这部分内容更易于阅读和理解。这些实用程序是经过挑选的,因为它们是日常工作中经常使用的(如ls和cp),或者因为它们是shell脚本中特别有用的工具(如sort、paste和test),或者因为它们有助于使用Linux系统(如ps、kill和fsck),或者因为它们可用来与其他系统进行通信(如ssh、scp和ftp)。每个实用程序的描述均包括其最有用选项的完整描述,并指出macOS和Linux所支持选项的区别。“讨论”和“注意”部分呈现充分利用相应实用程序的一些提示和技巧。“示例”部分说明如何在实际工作中使用这些实用程序,单独用一个程序或与其他实用程序一起,完成诸如生成报告、汇总数据以及提取信息等任务。浏览find、ftp和sort 这三个实用程序的“示例”部分,就可以看出这些部分的信息非常丰富。一些实用程序,例如Midnight Commander(mc)和screen,包含更详细的讨论和指南信息。

第Ⅶ部分:附录

第Ⅶ部分为附录和术语表。

附录A  正则表达式

讲解如何使用正则表达式来充分利用Linux的潜在功能。很多实用程序,包括grep、sed、vim、AWK、Perl和Python,允许用正则表达式来替代简单的字符串。单个正则表达式可匹配很多简单的字符串。

附录B  获取帮助

详细描述在使用Linux系统时遇到的问题的典型解决步骤。

附录C  更新系统

讲解如何使用实用程序下载软件并更新系统。该附录包括:

● dnf  从Internet下载软件,更新系统并自动解决软件依赖性问题。

● apt-get  dnf的一个替代品,同样用于系统更新。

● BitTorrent  适于发布大量数据,如Linux的安装CD和DVD。

附录D  macOS注意事项

为一直使用Linux或其他类UNIX系统且不熟悉macOS的用户简要介绍macOS的功能和特点。

附录E  术语表

定义了与使用Linux和macOS相关的500多个术语。

补充

作者网站的首页(www.sobell.com)包含书中一些可下载的较长的程序列表,还有很多有趣和有用的与Linux和OS X相关的万维网站点的链接,包括《Linux命令行与shell编程实战(第4版)》的勘误表、偶数编号习题的答案以及意见和建议。另外,也可登录http://tupwk.com.cn/downpage或扫描《Linux命令行与shell编程实战(第4版)》封底二维码,以下载较长的程序列表。

提示 可在informit.com/register上注册,从而方便地访问下载资料、更新信息和/或勘误信息;注意,必须登录或创建新账户。输入EISBN,即9780134774602,并单击Submit。此后,可在Registered Products下看到很多附赠内容。

目录

目    录

 

第1章  欢迎进入Linux和macOS世界   1

1.1  UNIX和GNU-Linux的发展史   2

1.1.1  Linux的起源:UNIX   2

1.1.2  回顾1983年   2

1.1.3  下一场景,1991年   3

1.1.4  自由代码   3

1.1.5  享受乐趣   4

1.2  Linux的优点   4

1.2.1  Linux受到硬件公司和开发人员欢迎的

原因   5

1.2.2  Linux的可移植性   6

1.2.3  C编程语言   6

1.3  Linux概述   6

1.3.1  Linux具有内核编程接口   7

1.3.2  Linux支持多用户   7

1.3.3  Linux支持多任务   7

1.3.4  Linux支持安全的分层文件系统   7

1.3.5  shell:命令解释器和编程语言   8

1.3.6  大量有用的实用程序   9

1.3.7  进程间的通信   9

1.3.8  系统管理   9

1.4  Linux的其他特性   9

1.4.1  GUI:图形用户界面   10

1.4.2  (互联的)网络实用程序   10

1.4.3  软件开发   10

1.5  本章小结   11

练习   11

第Ⅰ部分  Linux和macOS操作系统

第2章  入门   15

2.1  《Linux命令行与shell编程实战(第4版)》约定   16

2.2  从终端或终端模拟器登录   17

2.3  在命令行中工作   18

2.3.1  识别当前运行的是哪种shell   18

2.3.2  校正错误   18

2.3.3  重复/编辑命令行   20

2.4  su/sudo:慎用root权限   20

2.5  如何查找相关文档   21

2.5.1  man:显示系统手册页   21

2.5.2  apropos:搜索关键字   22

2.5.3  info:显示实用程序的相关信息   23

2.5.4  --help选项   25

2.5.5  bash help命令   25

2.5.6  获取帮助   25

2.6  有关登录和密码的更多方面   27

2.6.1  如何处理登录失败   27

2.6.2  远程登录:终端模拟器、ssh和拨号

连接   28

2.6.3  使用虚拟控制台   28

2.6.4  退出   28

2.6.5  更改密码   28

2.7  本章小结   30

练习   30

高级练习   30

第3章  实用程序   33

3.1  特殊字符   34

3.2  基本实用程序   34

3.2.1  ls:显示文件名   35

3.2.2  cat:显示文本文件的内容   35

3.2.3  rm:删除文件   35

3.2.4  少即多:分屏显示文本文件   35

3.2.5  hostname:显示系统名   36

3.3  文件操作   36

3.3.1  cp:复制文件   36

3.3.2  mv:更改文件名   37

3.3.3  lpr:打印文件   37

3.3.4  grep:查找字符串   38

3.3.5  head:显示文件头部   38

3.3.6  tail:显示文件尾部   39

3.3.7  sort:按顺序显示文件的内容   39

3.3.8  uniq:忽略文件中重复的行   39

3.3.9  diff:比较两个文件   40

3.3.10  file:识别文件的内容   40

3.4  |(管道):实现进程间的通信   41

3.5  4个有用的实用程序   41

3.5.1  echo:显示文本   41

3.5.2  date:显示日期和时间   42

3.5.3  script:记录shell会话信息   42

3.5.4  unix2dos:将Linux文件转换为Windows

和MacOS格式   42

3.6  压缩和归档文件   43

3.6.1  bzip2:压缩文件   43

3.6.2  bzcat和bunzip2:解压缩文件   44

3.6.3  gzip:压缩文件   44

3.6.4  tar:打包和解包文件   44

3.7  定位实用程序   46

3.7.1  which和whereis:定位实用程序   46

3.7.2  locate:搜索文件   47

3.8  显示用户和系统信息   47

3.8.1  who:列出系统上的用户   48

3.8.2  finger:列出系统上的用户   48

3.8.3  uptime:显示系统负载和持续运行时间

信息   49

3.8.4  w:列出系统上的用户   49

3.8.5  free:显示内存使用信息   50

3.9  与其他用户通信   50

3.9.1  write:发送消息   50

3.9.2  mesg:拒绝或接收消息   51

3.10  电子邮件   51

3.11  本章小结   52

练习   53

高级练习   54

第4章  Linux文件系统   55

4.1  分层文件系统   56

4.2  文件和普通文件   56

4.2.1  文件名   57

4.2.2  工作   58

4.2.3  主   58

4.3  路径名   59

4.3.1  绝对路径名   59

4.3.2  相对路径名   60

4.4  操作   61

4.4.1  mkdir:创建   61

4.4.2  cd:更改工作   62

4.4.3  rmdir:删除   63

4.4.4  使用路径名   63

4.4.5  mv/cp:移动/复制文件   63

4.4.6  mv:移动   64

4.4.7  重要的标准和文件   64

4.5  访问权限   66

4.5.1  ls -l:显示访问权限   66

4.5.2  chmod:改变访问权限   67

4.5.3  setuid和setgid权限   68

4.5.4  访问权限   69

4.6  ACL:访问控制列表   70

4.6.1  启用ACL   70

4.6.2  处理访问规则   71

4.6.3  设置的默认规则   73

4.7  链接   74

4.7.1  硬链接   74

4.7.2  符号链接   76

4.7.3  rm:删除链接   78

4.7.4  解引用符号链接   78

4.8  本章小结   81

练习   82

高级练习   83

第5章  shell   85

5.1  命令行   86

5.1.1  简单命令   86

5.1.2  语法   86

5.1.3  处理命令行   88

5.1.4  执行命令行   90

5.1.5  编辑命令行   90

5.2  标准输入和输出   90

5.2.1  作为文件的屏幕   91

5.2.2  作为标准输入的键盘和作为标准输出的

屏幕   91

5.2.3  重定向   92

5.2.4  管道   96

5.2.5  链   98

5.3  在后台运行命令   99

5.4  生成文件名/扩展路径名   100

5.4.1  特殊字符“?”   100

5.4.2  特殊字符“*”   101

5.4.3  特殊字符“[ ]”   102

5.5  内置命令   104

5.6  本章小结   104

练习   105

高级练习   106

第Ⅱ部分  编辑器

第6章  vim编辑器   109

6.1  历史   110

6.2  入门:用vim创建和编辑文件   110

6.2.1  启动vim   110

6.2.2  命令模式和输入模式   112

6.2.3  输入文本   112

6.2.4  获取帮助   113

6.2.5  结束编辑会话   115

6.2.6  compatible参数   115

6.3  介绍vim的特性   115

6.3.1  联机帮助   115

6.3.2  术语   116

6.3.3  操作模式   116

6.3.4  显示   116

6.3.5  在输入模式下校正文本   117

6.3.6  工作缓冲区   117

6.3.7  行长度与文件大小   117

6.3.8  窗口   117

6.3.9  锁定文件   117

6.3.10  非正常结束编辑会话   118

6.3.11  崩溃后的文本恢复   118

6.4  在命令模式下移动光标   119

6.4.1  按字符移动光标   120

6.4.2  将光标移到某个特定字符   120

6.4.3  按字移动光标   120

6.4.4  按行移动光标   121

6.4.5  按句子和段落移动光标   121

6.4.6  在屏幕内移动光标   121

6.4.7  查看工作缓冲区的不同部分   122

6.5  输入模式   122

6.5.1  插入文本   122

6.5.2  追加文本   122

6.5.3  为输入文本打开行   122

6.5.4  替换文本   123

6.5.5  在输入模式下转义特殊字符   123

6.6  在命令模式下删除和修改文本   123

6.6.1  撤消修改   123

6.6.2  删除字符   123

6.6.3  删除文本   123

6.6.4  修改文本   124

6.6.5  替换文本   125

6.6.6  修改大小写   125

6.7  查找和替换   125

6.7.1  查找字符   126

6.7.2  查找字符串   126

6.7.3  字符串的替换   127

6.8  其他命令   129

6.8.1  连接命令   129

6.8.2  状态命令   129

6.8.3  .(句点)   129

6.9  复制、移动和删除文本   130

6.9.1  通用缓冲区   130

6.9.2  命名缓冲区   130

6.9.3  编号缓冲区   131

6.10  文件的读写   131

6.10.1  读文件   131

6.10.2  写文件   131

6.10.3  识别当前文件   132

6.11  参数设置   132

6.11.1  在vim中设置参数   132

6.11.2  在启动文件中设置参数   132

6.11.3  .vimrc启动文件   133

6.11.4  参数   133

6.12  高级编辑技巧   135

6.12.1  使用标记   135

6.12.2  编辑其他文件   136

6.12.3  宏与快捷键   136

6.12.4  在vim中执行shell命令   136

6.13  度量单位   137

6.13.1  字符   138

6.13.2  字   138

6.13.3  空白分隔字   138

6.13.4  行   138

6.13.5  句子   139

6.13.6  段落   139

6.13.7  屏幕(窗口)   139

6.13.8  重复因子   139

6.14  本章小结   140

练习   143

高级练习   144

第7章  emacs编辑器   145

7.1  历史   145

7.1.1  演化   146

7.1.2  emacs与vim   146

7.2  入门:开始使用emacs   147

7.2.1  启动emacs   147

7.2.2  退出emacs   148

7.2.3  插入文本   148

7.2.4  删除字符   149

7.2.5  移动光标   149

7.2.6  在光标处编辑   151

7.2.7  保存和检索缓冲区中的内容   151

7.3  基本编辑命令   152

7.3.1  按键的表示与使用   152

7.3.2  键序列和命令   152

7.3.3  META+x:运行不带绑定键的命令   153

7.3.4  数值参数   153

7.3.5  编辑点与光标   153

7.3.6  在缓冲区中滚动   153

7.3.7  删除文本   154

7.3.8  搜索文本   154

7.3.9  通过键盘使用菜单栏   155

7.4  联机帮助   156

7.5  高级编辑   157

7.5.1  撤消修改   157

7.5.2  编辑点、标记和区域   158

7.5.3  剪切与粘贴:移出已剪切文本   159

7.5.4  插入特殊字符   160

7.5.5  全局缓冲区命令   161

7.5.6  访问和保存文件   162

7.5.7  缓冲区   164

7.5.8  窗口   165

7.5.9  前台shell命令   166

7.5.10  后台shell命令   166

7.6  主模式:区分语言的编辑   167

7.6.1  选择主模式   167

7.6.2  自然语言模式   167

7.6.3  C模式   169

7.6.4  定制缩进   171

7.6.5  注释   171

7.6.6  专用模式   172

7.7  定制emacs   172

7.7.1  .emacs启动文件   173

7.7.2  重映射键   174

7.7.3  .emacs文件示例   175

7.8  更多信息   175

7.9  本章小结   176

练习   181

高级练习   182

第Ⅲ部分  shell

第8章  bash   187

8.1  背景知识   188

8.2  启动文件   188

8.2.1  登录shell   189

8.2.2  交互式非登录shell   189

8.2.3  非交互式shell   189

8.2.4  建立启动文件   189

8.2.5 “.”(句点)或source:在当前shell中

运行启动文件   191

8.3  符号命令   191

8.4  重定向标准错误   191

8.5  编写和执行简单的shell脚本   193

8.5.1  chmod:使文件可执行   193

8.5.2 “#!”指定shell   194

8.5.3 “#”开始一行注释   195

8.5.4  执行shell脚本   196

8.6  控制操作符:命令分隔和命令

 分组   196

8.6.1  使用分号和换行符分隔命令   196

8.6.2 “|”和“&”分隔命令及其他功能   197

8.6.3  布尔控制操作符&&和||   198

8.6.4  ( )命令分组   198

8.6.5 “”继续命令   199

8.7  作业控制   199

8.7.1  jobs:列出作业   200

8.7.2  fg:将作业移到前台运行   200

8.7.3  挂起作业   201

8.7.4  bg:将作业移到后台运行   201

8.8  操作栈   201

8.8.1  dirs:显示栈   202

8.8.2  pushd:将压入栈中   202

8.8.3  popd:将从栈中弹出   202

8.9  参数和变量   203

8.9.1  用户创建的变量   204

8.9.2  变量属性   206

8.9.3  关键字变量   207

8.10  特殊字符   212

8.11  locale   213

8.12  时间   215

8.13  进程   217

8.13.1  进程结构   218

8.13.2  进程标识   218

8.13.3  执行命令   219

8.14  历史机制   219

8.14.1  控制历史机制的变量   220

8.14.2  重新执行和编辑命令   221

8.14.3  Readline库   226

8.15  别名   230

8.15.1  别名中的单引号和双引号   231

8.15.2  别名示例   231

8.16  函数   233

8.17  控制bash的功能和选项   235

8.17.1  bash命令行选项   235

8.17.2  shell的功能   235

8.18  处理命令行   237

8.18.1  历史扩展   237

8.18.2  别名替换   238

8.18.3  解析和扫描命令行   238

8.18.4  命令行扩展   238

8.19  本章小结   244

练习   245

高级练习   246

第9章  tcsh   249

9.1  shell脚本   250

9.2  进入和退出tcsh   250

9.3  bash与tcsh的共性   252

9.3.1  命令行扩展(替换)   252

9.3.2  作业控制   255

9.3.3  文件名替换   255

9.3.4  操作栈   255

9.3.5  命令替换   256

9.4  重定向标准错误   256

9.5  操作命令行   256

9.5.1  字补全   257

9.5.2  编辑命令行   258

9.5.3  校正拼写   259

9.6  变量   260

9.6.1  变量替换   260

9.6.2  字符串变量   260

9.6.3  字符串变量数组   261

9.6.4  数值变量   261

9.6.5  花括号   263

9.6.6  特殊的变量形式   263

9.6.7  tcsh变量   264

9.7  控制结构   268

9.7.1  if   268

9.7.2  goto   270

9.7.3  中断处理   270

9.7.4  if...then...else   270

9.7.5  foreach   271

9.7.6  while   272

9.7.7  break和continue   273

9.7.8  switch   273

9.8  内置命令   274

9.9  本章小结   277

练习   277

高级练习   278

第Ⅳ部分  编程工具

第10章  bash程序设计   281

10.1  控制结构   282

10.1.1  if…then   282

10.1.2  if...then...else   285

10.1.3  if...then...elif   286

10.1.4  for...in   290

10.1.5  for   292

10.1.6  while   293

10.1.7  until   296

10.1.8  break与continue   297

10.1.9  case   298

10.1.10  select   302

10.1.11  Here文档   304

10.2  文件描述符   305

10.2.1  打开文件描述符   305

10.2.2  复制文件描述符   306

10.2.3  文件描述符示例   306

10.2.4  确定文件描述符是否与终端关联   308

10.3  参数   309

10.3.1  位置参数   309

10.3.2  特殊参数   313

10.4  变量   315

10.4.1  shell变量   315

10.4.2  环境、环境变量和继承   316

10.4.3  扩展空变量和未赋值的变量   319

10.4.4  数组变量   320

10.4.5  函数中的变量   321

10.5  内置命令   322

10.5.1  type:显示命令的相关信息   322

10.5.2  read:接收用户输入   322

10.5.3  exec:执行命令或重定向文件描

 述符   325

10.5.4  trap:捕获信号   326

10.5.5  kill:终止进程   328

10.5.6  eval:扫描、赋值并执行命令行   329

10.5.7  getopts:解析选项   329

10.5.8  部分内置命令列表   331

10.6  表达式   332

10.6.1  算术表达式   332

10.6.2  逻辑表达式(条件表达式)   333

10.6.3  字符串模式匹配   333

10.6.4  运算符   334

10.7  隐式命令行延续   337

10.8  shell程序   337

10.8.1  递归的shell脚本   338

10.8.2  shell的quiz脚本   340

10.9  本章小结   345

练习   345

高级练习   346

第11章  Perl脚本语言   349

11.1  Perl简介   350

11.1.1  更多信息   350

11.1.2  帮助   350

11.1.3  perldoc   350

11.1.4  术语   352

11.1.5  运行Perl程序   352

11.1.6  语法   353

11.2  变量   355

11.2.1  标量变量   356

11.2.2  数组变量   357

11.2.3  哈希变量   358

11.3  控制结构   359

11.3.1  if/unless   359

11.3.2  if…else   361

11.3.3  if…elsif…else   361

11.3.4  foreach/for   362

11.3.5  last和next   363

11.3.6  while/until   364

11.4  处理文件   365

11.5  排序   367

11.6  子例程   368

11.7  正则表达式   370

11.8  CPAN模块   373

11.9  示例   375

11.10  本章小结   377

练习   377

高级练习   378

第12章  Python编程语言   379

12.1  简介   379

12.1.1  调用Python   380

12.1.2  更多信息   381

12.1.3  写标准输出与读标准输入   381

12.1.4  函数和方法   382

12.2  标量变量、列表和字典   382

12.2.1  标量变量   382

12.2.2  列表   383

12.2.3  字典   386

12.3  控制结构   387

12.3.1  if   387

12.3.2  if…else   387

12.3.3  if…elif…else   388

12.3.4  while   388

12.3.5  for   389

12.4  读写文件   390

12.4.1  文件输入和输出   390

12.4.2  异常处理   391

12.4.3  pickle模块   392

12.5  正则表达式   392

12.6  定义函数   394

12.7  使用库   394

12.7.1  标准库   394

12.7.2  非标准库   394

12.7.3  SciPy和NumPy库   395

12.7.4  命名空间   395

12.7.5  导入模块   395

12.7.6  导入函数示例   396

12.8  Lambda函数   397

12.9  列表推导   398

12.10  本章小结   398

练习   399

高级练习   399

第13章  MariaDB数据库管理系统   401

13.1  注意   402

13.1.1  语法和惯例   403

13.1.2  更多信息   404

13.2  安装MariaDB服务器和客户端   404

13.2.1  Fedora/RHEL(Red Hat Enterprise

 Linux)   404

13.2.2  Debian/Ubuntu/Mint   404

13.2.3  OpenSUSE   405

13.2.4  macOS   405

13.3  客户端选项   405

13.4  配置MariaDB   405

13.4.1  为MariaDB root用户指定密码   406

13.4.2  删除匿名用户   406

13.4.3  运行安全安装脚本   406

13.4.4  ~/.my.cnf:配置MariaDB客户端   406

13.4.5  ~/.mysql_history:保存MariaDB

历史   406

13.5  创建数据库   407

13.6  添加用户   407

13.7  一些示例   408

13.7.1  登录   408

13.7.2  创建表   408

13.7.3  添加数据   409

13.7.4  获取数据   410

13.7.5  备份数据库   412

13.7.6  修改数据   412

13.7.7  创建第二个表   413

13.7.8  连接查询   413

13.8  本章小结   416

练习   417

第14章  AWK模式处理语言   419

14.1  语法   420

14.2  参数   420

14.3  选项   420

14.4  注意   421

14.5  语言基础   421

14.5.1  模式   421

14.5.2  动作   421

14.5.3  注释   422

14.5.4  变量   422

14.5.5  函数   422

14.5.6  算术运算符   423

14.5.7  关联数组   423

14.5.8  printf   423

14.5.9  控制结构   424

14.6  示例   426

14.7  gawk高级编程   438

14.7.1  getline:控制输入   438

14.7.2  协进程:双向I/O   439

14.7.3  从网络获取输入   440

14.8  本章小结   441

练习   441

高级练习   441

第15章  sed编辑器   443

15.1  语法   443

15.2  参数   443

15.3  选项   444

15.4  编辑器基础   444

15.4.1  地址   444

15.4.2  指令   445

15.4.3  控制结构   445

15.4.4  暂存空间   446

15.5  示例   446

15.6  本章小结   453

练习   453

第Ⅴ部分  安全的网络实用程序

第16章  rsync安全复制实用程序   457

16.1  语法   458

16.2  参数   458

16.3  选项   458

16.3.1  注意   459

16.3.2  更多信息   459

16.4  示例   460

16.4.1  使用source-file尾部的斜杠(/)   460

16.4.2  删除文件   460

16.4.3  在远程系统上复制文件   461

16.4.4  镜像   462

16.4.5  生成备份   462

16.4.6  恢复文件   464

16.5  本章小结   464

练习   464

第17章  OpenSSH安全通信实用程序   465

17.1  OpenSSH简介   466

17.1.1  文件   466

17.1.2  更多信息   467

17.2  运行OpenSSH客户端ssh、scp

和sftp   467

17.2.1  指南:使用ssh和scp连接到

OpenSSH服务器   467

17.2.2  配置OpenSSH客户端   467

17.2.3  ssh:登录或者在远程系统上执行

命令   469

17.2.4  scp:与远程系统互相复制文件   471

17.2.5  sftp:安全的FTP客户端   472

17.2.6  ~/.ssh/config和/etc/ssh/ssh_config

配置文件   473

17.3  设置OpenSSH服务器(sshd)   474

17.3.1  必要的前提条件   474

17.3.2  注意   474

17.3.3  指南II:启动OpenSSH服务器   474

17.3.4  认证密钥:自动登录   474

17.3.5  randomart图   475

17.3.6  ssh-agent:保存私钥   476

17.3.7  命令行选项   477

17.3.8  /etc/ssh/sshd_config配置文件   477

17.4  疑难解答   478

17.5  隧道/端口转发   478

17.5.1  转发X11   478

17.5.2  端口转发   479

17.6  本章小结   479

练习   480

高级练习   480

第Ⅵ部分  命令参考

第18章  命令参考   483

18.1  标准倍数后缀   487

18.2  常见选项   487

18.3  sample实用程序   487

18.4  sample(macOS)   488

18.5  aspell   488

18.6  at   491

18.7  busybox   494

18.8  bzip2   496

18.9  cal   497

18.10  cat   498

18.11  cd   499

18.12  chgrp   501

18.13  chmod   502

18.14  chown   505

18.15  cmp   506

18.16  comm   508

18.17  configure   509

18.18  cp   510

18.19  cpio   512

18.20  crontab   516

18.21  cut   518

18.22  date   519

18.23  dd   521

18.24  df   523

18.25  diff   524

18.26  diskutil(仅用于macOS)   528

18.27  ditto(仅用于macOS)   530

18.28  dmesg   531

18.29  dscl(macOS)   532

18.30  du   534

18.31  echo   536

18.32  expand/unexpand   537

18.33  expr   538

18.34  file   540

18.35  find   542

18.36  finger   545

18.37  fmt   547

18.38  fsck   548

18.39  ftp   551

18.40  gawk   555

18.41  gcc   555

18.42  GetFileInfo(仅用于macOS)   558

18.43  grep   559

18.44  gzip   562

18.45  head   564

18.46  join   565

18.47  kill   567

18.48  killall   568

18.49  launchctl(仅用于macOS)   569

18.50  less   571

18.51  ln   574

18.52  lpr   575

18.53  ls   577

18.54  make   581

18.55  man   585

18.56  mc   587

18.57  mkdir   592

18.58  mkfs   593

18.59  mv   594

18.60  nice   596

18.61  nl   597

18.62  nohup   598

18.63  od   598

18.64  open(仅用于macOS)   601

18.65  otool(macOS)   603

18.66  paste   604

18.67  pax   606

18.68  plutil(仅用于macOS)   609

18.69  pr   610

18.70  printf   611

18.71  ps   614

18.72  renice   616

18.73  rm   617

18.74  rmdir   618

18.75  rsync   619

18.76  scp   619

18.77  screen   620

18.78  sed   623

18.79  SetFile(仅用于macOS)   623

18.80  sleep   624

18.81  sort   625

18.82  split   632

18.83  ssh   633

18.84  sshfs/curlftpfs   633

18.85  stat   635

18.86  strings   636

18.87  stty   637

18.88  sysctl   639

18.89  tail   640

18.90  tar   642

18.91  tee   645

18.92  telnet   646

18.93  test   648

18.94  top   650

18.95  touch   652

18.96  tr   653

18.97  tty   655

18.98  tune2fs   656

18.99  umask   658

18.100  uniq   659

18.101  w   660

18.102  wc   662

18.103  which   662

18.104  who   664

18.105  xargs   665

第Ⅶ部分  附录

附录A  正则表达式   669

附录B  获取帮助   677

附录C  更新系统   681

附录D  macOS注意事项   691

附录E  术语表   699 

作者简介

编辑推荐

● 单独一章介绍MariaDB,将带你初步领略广泛应用的关系型数据库管理系统(RDBMS)

● 精辟讲解Python,为系统管理员和高级用户提供指导

● 深入讲解bash和tcsh,全面讨论环境、继承和进程本地性,介绍基础和高级shell编程知识

● 解读102个核心实用程序,如aspell、xargs、printf和sshfs/curlftpfs;还讨论macOS特有的实用程序,如ditto和SetFile等

● 关于使用rsync自动完成远程备份的专业指导

● 数十个系统安全提示,包括使用ssh和scp实现安全通信的详细步骤

● 关于定制shell的提示和技巧,包括步长值、序列表达式、eval内置命令和隐式命令行延续等

● 使用vim和emacs的高效编辑技术

● 300多页“命令参考”部分涵盖102个实用程序,如find、grep、sort和tar等

● 使用apt-get和dnf升级系统

● 还包括BitTorrent、gawk、sed、find、sort、bzip2和正则表达式等内容

作者寄语

● 单独一章介绍MariaDB,将带你初步领略广泛应用的关系型数据库管理系统(RDBMS)

● 精辟讲解Python,为系统管理员和高级用户提供指导

● 深入讲解bash和tcsh,全面讨论环境、继承和进程本地性,介绍基础和高级shell编程知识

● 解读102个核心实用程序,如aspell、xargs、printf和sshfs/curlftpfs;还讨论macOS特有的实用程序,如ditto和SetFile等

● 关于使用rsync自动完成远程备份的专业指导

● 数十个系统安全提示,包括使用ssh和scp实现安全通信的详细步骤

● 关于定制shell的提示和技巧,包括步长值、序列表达式、eval内置命令和隐式命令行延续等

● 使用vim和emacs的高效编辑技术

● 300多页“命令参考”部分涵盖102个实用程序,如find、grep、sort和tar等

● 使用apt-get和dnf升级系统

● 还包括BitTorrent、gawk、sed、find、sort、bzip2和正则表达式等内容

电子资料

www.luweidong.cn

下一个