在 UNIX 系统中,有三种类型的账户:root 帐户:这也被称为超级用户,这类用户对系统拥有完整的和不受约束的控制权。超级用户可以运行任何命令,而不受任何限制。这类用户应该承担作为一个系统管理员的任务。系统账户:系统账户是为操作系统特定组件的需要提供的,例如邮件账户和 sshd 账户。
文件系统是一个分区或磁盘上的文件的逻辑集合。一个分区是一个信息的容器,如果需要可以跨整个硬盘。你的硬盘可以有不同的分区,但通常只包含一个文件系统,如一个文件系统涵盖 /file 系统,另一个包含 /home 文件系统。一个文件系统分区允许不同文件系统的逻辑维护和管理。UNIX 中一切都被认为是一个文件,包括物理设备,如 DVD-ROMs、USB 设备、软盘驱动器等等。
正则表达式是一个字符串,可以用来描述几个字符序列。UNIX 的这些命令中会用到正则表达式,包括 ed、sed、awk、grep,以及 vi。本教程将教你如何使用正则表达式和 sed。这里 sed 代表的流编辑器是一个面向流的编辑器,是专门为执行脚本创建的。因此你的所有输入都会被送到 STDOUT 并且它不改变输入文件。
UNIX 命令都有许多可选的和强制性的选项,而忘记这些命令的完整语法是很常见的事情。因为没有人能记住每个 UNIX 命令及其所有选项,所以在 UNIX 的最早版本中,用户就可以获得在线帮助。UNIX 版本的帮助文件被称为 Manpage。如果你知道所有命令的名称,但你不知道如何使用它,这时 Manpage 可以在每一步中帮助你。
元字符UNIX Shell 提供有特殊意义的各种元字符,同时利用他们在任何 Shell 脚本,并导致终止一个字,除了引用。举个例子,在列出文件中的目录时 ? 匹配一个一元字符,并且 * 匹配多个字符。下面是一个 Shell 特殊字符(也称为元字符)的列表: * ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab在一个字符前使用 \ ,它可能被引用(例如,代表它自己)。
到目前为止你已经学习过创建循环以及用循环来完成不同的任务。有时候你需要停止循环或跳出循环迭代。在本教程中你将学到以下语句用于控制 Shell 循环:break 语句continue 语句无限循环所有循环都有一个有限的生命周期。当条件为假或真时它们将跳出循环,这取决于这个循环。一个循环可能会由于未匹配到适合得条件而无限执行。一个永远执行没有终止的循环会执行无数次。
每一种 Shell 都支持各种各样的操作符。我们的教程基于默认的 Shell(Bourne),所以在我们的教程中涵盖所有重要的 Bourne Shell 操作符。下面列出我们将讨论的操作符:算术运算符。关系运算符。布尔操作符。字符串运算符。文件测试操作符。最初的 Bourne Shell 没有任何机制来执行简单算术运算,它使用外部程序 awk 或者最简单的程序 expr。
之前的教程就在命名变量时,使用某些非字符数值作为字符变量名提出警告。这是因为这些字符用于作为特殊的 UNIX 变量的名称。这些变量是预留给特定功能的。例如,$ 字符代表进程的 ID 码,或当前 Shell 的 PID: $echo $$以上命令将输出当前 Shell 的 PID: 29949下面的表列出了一些特殊变量,可以在你的 Shell 脚本中使用它们:变量描述$0当前脚本的文件名。
如果用户在 UNIX 操作系统上执行了一个程序,那么操作系统会为这个程序创建一个运行它的特定环境。这个环境包含系统运行该程序所需的一切资源,使得好像系统中没有运行其他程序一样。 用户如果在 UNIX 操作系统中输入一个指令,操作系统就会创建(启动)一个相应的进程。比如,如果用户希望使用 ls 指令来列出目录内的文件列表时,系统就启动了一个进程来完成这个任务。
你可以连接两个命令在一起,这样一个程序的输出就可以作为下一个程序的输入。两个或两个以上的命令以这种方式连接形成一个管道。为了形成管道,在同一行中利用一个竖线(|)将两个命令隔开。如果一个程序将另一个程序的输出作为输入数据,接着对输入的数据执行一些操作,并将结果写入标准输出,它就称为一个过滤器。grep 命令grep 程序用固定的模式搜索一个文件或多个文件。
文件所有权是 UNIX 的一个重要的组成部分,提供了一种安全的方法来存储文件。在 UNIX 中每个文件有以下属性:所有者权限:所有者的权限决定文件的所有者可以对文件执行的操作。组权限:组权限决定了属于该组的成员对他所拥有的文件能够执行的操作。其他人权限:其他人权限表示其他所有人对于该文件能够进行的操作。
配置构建环境Gradle 提供几个选项,使它容易配置将用于执行构建的 Java 进程。同时可以通过 GRADLE_OPTS 或 JAVA_OPTS 配置这些在你本地环境,包含的设置包括比如 JVM 内存设置,Java home,守护进程开/关,它们可以和你的项目在你的版本控制系统中被版本化的话,将会更有用,这样整个团队就可以使用一致的环境了。在你的构建当中,建立一致的环境,就和把这些配置放进 gradle.
走进守护进程Gradle 守护进程(有时也称为构建守护进程) 的目的是改善 Gradle 的启动和执行时间。我们准备了几个守护进程非常有用的用例。对于一些工作流,用户会多次调用 Gradle,以执行少量的相对快速的任务。举个例子:当使用测试驱动开发时,单元测试会被执行多次。当开发一个 web 应用程序中,应用程序会被组装多次。
Gradle 提供了对 Ant 的优秀集成。可以在你的 Gradle 构建中,使用单独的 Ant 任务或整个 Ant 构建。事实上,你会发现在 Gradle 中使用 Ant 任务比使用 Ant 的 XML 格式更容易也更强大。你甚至可以只把 Gradle 当作一个强大的 Ant 任务脚本的工具。Ant 可以分为两层。第一层是 Ant 的语言。它提供了用于 build.xml,处理的目标,特殊的构造方法比如宏,还有其他等等的语法。
大多数构建工作都要使用到文件。Gradle 添加了一些概念和 API 来帮助您实现这一目标。定位文件使用 Project.file() 方法来定位相对于 project 目录相关的文件。Example 16.1. Locating filesbuild.gradle // Using a relative path 使用相对路径 File configFile = file('src/config.
本章介绍了 Gradle 命令行的基本知识。正如在前面的章节里你所见到的, 调用 gradle 命令来执行构建。执行多 task同个构建可以执行多个 task ,通过再命令行 列出每个 task。举例,命令gradle compile test 将会执行 compile 和 test 两个 task。Gradle 将会按顺序执行 命令行每个列出的 task,并且执行每个 task 的依赖。
下面的例子中有一些重要的自定义选项例25.2.定制War插件build.gradleconfiguration{ moreLibs}respositories{ faltDir {dirs "lib"} mavenCentral()}dependencies{ compile module(":compile:1.0") { dependency ":compile-transitive-1.0@jar" dependency ":providedCompile-transitive:1.0@jar" } providedCompile "javax.
War任务默认会把src/main/webapp的内容复制到归档目录的根目录.webapp文件夹下会包含一个WEB-INF子文件夹,里面可能会有一个web.xml文件.编译后的class文件会在WEB-INF/classes下,所有runtime[13]的依赖配置会被拷贝至WEB-INF/lib下.API文档中有更多关于War的信息.[13]runtime配置扩展了compile配置.
表25.4.War插件-目录配置属性名称类型默认值描述webAppDirNameStringsrc/main/webapp在项目目录的web应用的资源文件夹名webAppDirFile (read-only)projectDir/webAppDirNameWeb应用的资源路径这些属性由一个WarPluginConvention公共对象提供
War插件增加了名为providedCompile和providedRuntime的两个依赖配置.这两个配置有相同的作用域在编译或者运行时的配置,不同之处在于是否会将war文件归档.很重要的一点是它们都会提供配置传递.比如在任意的provided配置中添加了commons-httpclient:commons-httpclient:3.0,该依赖依赖于commons-codec,因为这个一个"provided"
关注时代Java