红联Linux门户
Linux帮助

快乐的Linux命令行 PDF版

发布时间:2014-11-19 16:27:34来源:红联作者:qlboo
这本书非常的棒,建议阅读。

这本书介绍如何生存在Linux 命令行的世界。不像一些书籍仅仅涉及一个程序,比如像shell 程序,bash。这本书将试着向你传授如何与命令行界面友好相处。它是怎样工作的?它能做什么?使用它的最好方法是什么?

这不是一本关于Linux 系统管理的书。然而任何一个关于命令行的深入讨论,都一定会牵涉到系统管理方面的内容,这本书仅仅提到一点儿管理方面的知识。但是这本书为读者准备好了学习更多内容的坚实基础,毕竟要胜任系统管理工作也需要良好的命令行使用基本功。

这本书是围绕Linux 而写的。许多书籍,为了扩大自身的影响力,会包含一些其它平台的知识,比如Unix, MacOS X 等。这样做,很多内容只能比较空泛的去讲了。另一方面,这本书只研究了当代Linux 发行版。虽然,对于使用其它类似于Unix 系统的用户来说,书中95%的内容是有用的,但这本书主要面向的对象是现代Linux 命令行用户。
文章评论

共有 228 条评论

  1. liaojiaao 于 2014-12-04 23:41:09发表:

    哈哈哈,谢谢了

  2. wangweimin 于 2014-12-04 21:24:27发表:

    阿斯顿撒

  3. wangweimin 于 2014-12-04 21:24:23发表:

    车道上非常大师傅

  4. wangweimin 于 2014-12-04 21:24:15发表:

    热舞热舞v

  5. madcat3000 于 2014-12-04 18:49:25发表:

    (6)m:b
    没钱,下载不了!
    (6)m:b

  6. 空降兵 于 2014-12-03 22:38:15发表:

    感谢分享

  7. sdq2003 于 2014-12-03 10:47:20发表:

    感谢楼主

  8. qdfc 于 2014-12-01 21:03:00发表:

    好教程,要分享,分享过后要阅读,且看且下

  9. micku 于 2014-12-01 12:33:27发表:

    积分不足.回复顶起

  10. gongjinsi 于 2014-11-29 13:48:05发表:

    谢谢分享

  11. hbsywl 于 2014-11-28 15:42:01发表:

    菜鸟路过,学习下

  12. jxzhanght 于 2014-11-26 11:13:34发表:

    真的是非常的感谢啊!!!

  13. 即虚 于 2014-11-26 09:52:52发表:

    谢谢分享

  14. 不只听说 于 2014-11-25 19:10:19发表:

    很全的样子

  15. 不只听说 于 2014-11-25 19:08:05发表:

    我是菜鸟,正好可以看看:0)1

  16. qinqiulin1984 于 2014-11-25 10:18:52发表:

    学习学习

  17. lailisha 于 2014-11-25 10:17:49发表:

    看着还不错的样子~

  18. 17095041171 于 2014-11-24 21:22:37发表:

    :0w5ty(1 mhhhhhhhhhhhhhhh

  19. xuexuejudy 于 2014-11-24 20:06:18发表:

    看着目录感觉就不错!

  20. 506649264 于 2014-11-24 17:21:11发表:

    我要下载啊 啊啊啊啊

  21. california 于 2014-11-24 08:44:56发表:

    很强大

  22. wolfxl320 于 2014-11-22 23:59:01发表:

    非常感谢分享!!!

  23. zishu 于 2014-11-22 13:21:40发表:

    得好好学习了

  24. 826 于 2014-11-21 23:04:08发表:

    :0)1

  25. dontfly1986 于 2014-11-20 23:21:16发表:

    要好好学习了

  26. 瑞恩1975 于 2014-11-20 21:02:40发表:

    要好好学习了

  27. shinesha 于 2014-11-20 15:25:19发表:

    菜鸟必看。

  28. qlboo 于 2014-11-19 16:29:24发表:

    目录
    1 引言15
    1.1 为什么使用命令行. . . 15
    1.2 这本书讲什么. . . . . . 16
    1.3 谁应该读这本书. . . . . 16
    1.4 这本书的内容. . . . . . 17
    1.5 怎样阅读这本书. . . . . 17
    1.5.1 前提条件. . . . 18
    1.6 拓展阅读19
    2 什么是shell 20
    2.1 终端仿真器. . . . . . . 20
    2.2 第一次按键. . . . . . . 20
    2.3 命令历史21
    2.4 移动光标21
    2.5 关于鼠标和光标. . . . . 21
    2.6 试试运行一些简单命令. 22
    2.7 结束终端会话. . . . . . 23
    2.8 幕后控制台. . . . . . . 23
    2.9 拓展阅读23
    3 文件系统中跳转24
    3.1 理解文件系统树. . . . . 24
    3.2 当前工作目录. . . . . . 25
    3.3 列出目录内容. . . . . . 26
    3.4 更改当前工作目录. . . 26
    3.5 绝对路径26
    1
    3.6 相对路径27
    3.7 有用的快捷键. . . . . . 28
    4 探究操作系统30
    4.1 ls 乐趣. . 30
    4.2 选项和参数. . . . . . . 31
    4.3 深入研究长格式输出. . 32
    4.4 确定文件类型. . . . . . 33
    4.5 用less 浏览文件内容. . 34
    4.6 less 就是more(禅语:色即是空) . . 36
    4.7 旅行指南36
    4.8 符号链接39
    4.9 硬链接. . 40
    4.10 拓展阅读40
    5 操作文件和目录41
    5.1 通配符. . 41
    5.2 cp --复制文件和目录. . 45
    5.3 有用的选项和实例. . . 45
    5.4 mv --移动和重命名文件46
    5.5 有用的选项和实例. . . 47
    5.6 有用的选项和实例. . . 48
    5.7 ln --创建链接. . . . . . 49
    5.8 硬链接. . 49
    5.9 符号链接50
    5.10 创建游戏场(实战演习) . . . . . . . 50
    5.11 创建目录50
    5.12 复制文件51
    5.13 移动和重命名文件. . . 52
    5.14 创建硬链接. . . . . . . 53
    5.15 创建符号链接. . . . . . 54
    5.16 移动文件和目录. . . . . 55
    5.17 总结. . . 57
    2
    6 使用命令58
    6.1 到底什么是命令? . . . 58
    6.2 识别命令59
    6.3 type -显示命令的类型59
    6.4 which -显示一个可执行程序的位置. 59
    6.5 得到命令文档. . . . . . 60
    6.6 help -得到shell 内部命令的帮助文档60
    6.7 --help - 显示用法信息. 61
    6.8 man -显示程序手册页61
    6.9 apropos -显示适当的命令. . . . . . . 62
    6.10 whatis -显示非常简洁的命令说明. . 63
    6.11 info - 显示程序Info 条目. . . . . . . 63
    6.12 README 和其它程序文档. . . . . . 64
    6.13 用别名(alias)创建你自己的命令. . 64
    6.14 拜访老朋友. . . . . . . 67
    6.15 拓展阅读67
    7 重定向68
    7.1 标准输入,输出,和错误. . . . . . . 68
    7.2 重定向标准输出. . . . . 69
    7.3 重定向标准错误. . . . . 70
    7.4 重定向标准输出和错误到同一个文件. 71
    7.5 处理不需要的输出. . . 72
    7.6 重定向标准输入. . . . . 72
    7.7 cat -连接文件. . . . . 72
    7.8 管道线. . 75
    7.9 过滤器. . 75
    7.10 uniq - 报道或忽略重复行75
    7.11 wc -打印行,字和字节数. . . . . . . 76
    7.12 grep -打印匹配行. . . 76
    7.13 head / tail -打印文件开头部分/结尾部分. . . . . . 77
    7.14 tee -从Stdin 读取数据,并同时输出到Stdout 和文件. . . . . . 78
    7.15 总结归纳78
    3
    8 从shell 眼中看世界80
    8.1 echo -显示一行文本. . 80
    8.2 (字符) 展开. . . . . . . 80
    8.3 路径名展开. . . . . . . 81
    8.4 波浪线展开. . . . . . . 82
    8.5 算术表达式展开. . . . . 83
    8.6 花括号展开. . . . . . . 84
    8.7 参数展开86
    8.8 命令替换86
    8.9 引用. . . 87
    8.10 双引号. . 88
    8.11 单引号. . 89
    8.12 转义字符90
    8.13 总结归纳91
    8.14 拓展阅读91
    9 键盘高级操作技巧92
    9.1 命令行编辑. . . . . . . 92
    9.2 移动光标92
    9.3 修改文本93
    9.4 剪切和粘贴文本. . . . . 93
    9.5 自动补全94
    9.6 利用历史命令. . . . . . 96
    9.7 搜索历史命令. . . . . . 96
    9.8 历史命令展开. . . . . . 98
    9.9 总结归纳99
    9.10 拓展阅读99
    10 权限100
    10.1 拥有者,组成员,和其他人. . . . . . 101
    10.2 读取,写入,和执行. . 102
    10.3 chmod -更改文件模式103
    10.4 借助GUI 来设置文件模式. . . . . . . 106
    10.5 umask -设置默认权限. 106
    4
    10.6 更改身份109
    10.7 su -以其他用户身份和组ID 运行一个shell . . . . . 109
    10.8 sudo -以另一个用户身份执行命令. . 111
    10.9 chown -更改文件所有者和用户组. . 112
    10.10chgrp -更改用户组所有权. . . . . . . 113
    10.11练习使用权限. . . . . . 113
    10.12更改用户密码. . . . . . 116
    10.13拓展阅读117
    11 进程118
    11.1 进程是怎样工作的. . . 118
    11.2 查看进程119
    11.3 用top 命令动态查看进程. . . . . . . 121
    11.4 控制进程123
    11.5 中断一个进程. . . . . . 123
    11.6 把一个进程放置到后台(执行) . . . . . 123
    11.7 进程返回到前台. . . . . 124
    11.8 停止一个进程. . . . . . 125
    11.9 通过kill 命令给进程发送信号. . . . . 126
    11.10通过killall 命令给多个进程发送信号. 129
    11.11更多和进程相关的命令. 129
    12 shell 环境131
    12.1 什么存储在环境变量中? . . . . . . . 131
    12.2 检查环境变量. . . . . . 131
    12.3 一些有趣的变量. . . . . 132
    12.4 一些有趣的变量. . . . . 134
    12.5 如何建立shell 环境? . 135
    12.6 一个启动文件的内容. . 136
    12.7 修改shell 环境. . . . . 138
    12.8 我们应该修改哪个文件? . . . . . . . 138
    12.9 文本编辑器. . . . . . . 138
    12.10使用文本编辑器. . . . . 139
    12.11激活我们的修改. . . . . 142
    5
    12.12总结. . . 142
    12.13拓展阅读142
    13 vi 简介143
    13.1 为什么我们应该学习vi . 143
    13.2 一点儿背景介绍. . . . . 144
    13.3 启动和停止vi . . . . . . 144
    13.4 编辑模式145
    13.4.1 插入模式. . . . 146
    13.4.2 保存我们的工作. 146
    13.5 移动光标147
    13.6 基本编辑148
    13.6.1 追加文本. . . . 148
    13.6.2 打开一行. . . . 149
    13.6.3 删除文本. . . . 150
    13.6.4 剪切,复制和粘贴文本. . . . . 151
    13.6.5 连接行. . . . . . 152
    13.7 查找和替换. . . . . . . 153
    13.7.1 查找一行. . . . 153
    13.7.2 查找整个文件. . 153
    13.7.3 全局查找和替代. 154
    13.8 编辑多个文件. . . . . . 155
    13.8.1 文件之间转换. . 156
    13.8.2 从一个文件复制内容到另一个文件. . . . . . 157
    13.8.3 插入整个文件到另一个文件. . 158
    13.9 保存工作159
    13.10拓展阅读159
    14 自定制shell 提示符161
    14.1 解剖一个提示符. . . . . 161
    14.2 试试一些可替代的提示符设计. . . . . 163
    14.3 添加颜色164
    14.4 移动光标166
    14.5 保存提示符. . . . . . . 168
    6
    14.6 总结归纳168
    14.7 拓展阅读169
    15 软件包管理170
    15.1 打包系统170
    15.2 软件包管理系统是怎样工作的. . . . . 171
    15.3 包文件. . 171
    15.4 资源库. . 171
    15.5 依赖性. . 172
    15.6 上层和底层软件包工具. 172
    15.7 常见软件包管理任务. . 172
    15.8 查找资源库中的软件包. 173
    15.9 从资源库中安装一个软件包. . . . . . 173
    15.10通过软件包文件来安装软件. . . . . . 173
    15.11卸载软件174
    15.12经过资源库来更新软件包. . . . . . . 175
    15.13经过软件包文件来升级软件. . . . . . 175
    15.14列出所安装的软件包. . 176
    15.15确定是否安装了一个软件包. . . . . . 176
    15.16显示所安装软件包的信息. . . . . . . 176
    15.17查找安装了某个文件的软件包. . . . . 177
    15.18总结归纳177
    15.19拓展阅读178
    16 存储媒介180
    16.1 挂载和卸载存储设备. . 181
    16.2 查看挂载的文件系统列表. . . . . . . 182
    16.3 确定设备名称. . . . . . 186
    16.4 创建新的文件系统. . . 189
    16.5 用fdisk 命令操作分区. 189
    16.6 用mkfs 命令创建一个新的文件系统. 192
    16.7 测试和修复文件系统. . 193
    16.8 格式化软盘. . . . . . . 193
    16.9 直接把数据移入/出设备194
    7
    16.10创建CD-ROM 映像. . 195
    16.10.1 创建一个CD-ROM 的映像拷贝195
    16.10.2 从文件集合中创建一个映像. . 195
    16.11写入CD-ROM 镜像. . 196
    16.11.1 直接挂载一个ISO 镜像. . . . 196
    16.11.2 清除一张可重写入的CD-ROM 197
    16.11.3 写入镜像. . . . 197
    16.12拓展阅读197
    16.13友情提示197
    17 网络系统199
    17.1 检查和监测网络. . . . . 200
    17.2 网络中传输文件. . . . . 203
    17.3 与远程主机安全通信. . 205
    17.4 拓展阅读211
    18 查找文件212
    18.1 locate -查找文件的简单方法. . . . . 212
    18.2 find -查找文件的复杂方式. . . . . . 214
    18.2.1 Tests . . . . . . . 214
    18.2.2 操作符. . . . . . 217
    18.3 预定义的操作. . . . . . 220
    18.4 用户定义的行为. . . . . 222
    18.5 提高效率223
    18.5.1 xargs . . . . . . . 223
    18.6 返回操练场. . . . . . . 224
    18.6.1 选项. . . . . . . 227
    18.7 拓展阅读228
    19 归档和备份229
    19.1 压缩文件229
    19.2 归档文件233
    19.3 同步文件和目录. . . . . 241
    19.3.1 在网络间使用rsync 命令. . . 243
    8
    19.4 拓展阅读244
    20 正则表达式245
    20.1 中括号表达式和字符类. 250
    20.2 传统的字符区域. . . . . 251
    20.3 POSIX 字符集. . . . . 252
    20.4 POSIX 基本的Vs. 扩展的正则表达式255
    20.5 限定符. . 257
    20.5.1 ? - 匹配一个元素零次或一次. 257
    20.5.2 + - 匹配一个元素一次或多次. 259
    20.5.3 { } - 匹配一个元素特定的次数259
    20.6 让正则表达式工作起来. 260
    20.6.1 通过grep 命令来验证一个电话簿. . . . . . . 260
    20.6.2 用find 查找丑陋的文件名. . . 262
    20.6.3 用locate 查找文件. . . . . . . 262
    20.6.4 在less 和vim 中查找文本. . . 263
    20.7 总结归纳265
    20.8 拓展阅读265
    21 文本处理266
    21.1 文本应用程序. . . . . . 267
    21.2 比较文本284
    21.3 运行时编辑. . . . . . . 289
    21.4 总结归纳303
    21.5 拓展阅读304
    21.6 友情提示304
    22 格式化输出305
    22.0.1 nl -添加行号. . 305
    22.0.2 fold -限制文件列宽. . . . . . 308
    22.0.3 fmt -一个简单的文本格式器. 309
    23 打印311
    23.1 打印简史311
    23.1.1 早期的打印. . . 311
    9
    23.1.2 基于字符的打印机. . . . . . . 312
    23.1.3 图形化打印机. . 313
    23.2 在Linux 下打印. . . . 313
    23.3 为打印准备文件. . . . . 314
    23.3.1 pr ----转换需要打印的文本文件. . . . . . . 314
    23.4 将打印任务送至打印机. 315
    23.4.1 lpr----打印文件(Berkeley 风格) . . . . . . 315
    23.4.2 lp----打印文件(System V 风格) . . . . . . 316
    23.4.3 另一种选择:a2ps . . . . . . . 317
    23.5 监视和控制打印任务. . 320
    23.5.1 lpstat----显示打印系统状态. . 320
    23.5.2 lpq----显示打印机队列状态. . 321
    23.5.3 lprm 和cancel----取消打印任务. . . . . . . 321
    24 编译程序323
    24.1 什么是编译? . . . . . . 323
    24.1.1 所有的程序都是可编译的吗? . 324
    24.2 编译一个C 语言. . . . 325
    24.2.1 得到源码. . . . 325
    24.3 检查源码树. . . . . . . 327
    24.3.1 构建程序. . . . 329
    24.3.2 安装程序. . . . 333
    24.4 总结. . . 333
    24.5 拓展阅读334
    25 编写第一个Shell 脚本335
    25.1 什么是Shell 脚本? . . 335
    25.2 怎样编写一个Shell 脚本335
    25.3 脚本文件格式. . . . . . 336
    25.4 脚本文件位置. . . . . . 337
    25.4.1 脚本文件的好去处. . . . . . . 339
    25.5 更多的格式技巧. . . . . 339
    25.5.1 长选项名称. . . 339
    25.5.2 缩进和行继续符. 339
    10
    25.6 总结归纳341
    25.7 拓展阅读341
    26 启动一个项目342
    26.1 第一阶段:最小的文档. 342
    26.2 第二阶段:添加一点儿数据. . . . . . 345
    26.3 变量和常量. . . . . . . 345
    26.3.1 给变量和常量赋值. . . . . . . 348
    26.4 总结归纳352
    26.5 拓展阅读353
    27 自顶向下设计354
    27.1 局部变量358
    27.2 保持脚本运行. . . . . . 359
    27.3 总结归纳363
    27.4 拓展阅读363
    28 流程控制:if 分支结构364
    28.1 退出状态365
    28.2 测试. . . 367
    28.2.1 文件表达式. . . 367
    28.2.2 字符串表达式. . 370
    28.2.3 整型表达式. . . 371
    28.3 更现代的测试版本. . . 372
    28.4 (( )) - 为整数设计. . . 374
    28.5 结合表达式. . . . . . . 375
    28.6 控制操作符:分支的另一种方法. . . . 377
    28.7 总结. . . 378
    28.8 拓展阅读379
    29 读取键盘输入380
    29.1 read -从标准输入读取数值. . . . . . 381
    29.1.1 选项. . . . . . . 383
    29.2 校正输入387
    29.3 菜单. . . 388
    11
    29.4 总结归纳390
    29.4.1 友情提示. . . . 390
    29.5 拓展阅读390
    30 流程控制:while/until 循环391
    30.1 循环. . . 391
    30.2 跳出循环394
    30.3 使用循环读取文件. . . 396
    30.4 总结归纳397
    30.5 拓展阅读397
    31 疑难排解398
    31.1 语法错误398
    31.1.1 丢失引号. . . . 398
    31.1.2 丢失或意外的标记. . . . . . . 399
    31.1.3 预料不到的展开. 400
    31.2 逻辑错误402
    31.2.1 防错编程. . . . 402
    31.2.2 验证输入. . . . 404
    31.3 测试. . . 404
    31.3.1 测试案例. . . . 405
    31.4 调试. . . 406
    31.4.1 找到问题区域. . 406
    31.4.2 追踪. . . . . . . 407
    31.4.3 执行时检查数值. 409
    31.5 总结. . . 410
    31.6 拓展阅读410
    32 流程控制:case 分支411
    32.1 case . . . 411
    32.2 模式. . . 413
    32.3 执行多个动作. . . . . . 415
    32.4 总结. . . 417
    32.5 拓展阅读417
    12
    33 位置参数418
    33.1 访问命令行. . . . . . . 418
    33.1.1 确定参数个数. . 419
    33.1.2 shift - 访问多个参数的利器. . 420
    33.1.3 简单应用. . . . 422
    33.1.4 Shell 函数中使用位置参数. . . 422
    33.2 处理集体位置参数. . . 423
    33.3 一个更复杂的应用. . . 425
    33.4 总结. . . 428
    33.5 拓展阅读431
    34 流程控制:for 循环432
    34.1 for: 传统shell 格式. . . 432
    34.2 for: C 语言格式. . . . . 435
    34.3 总结. . . 436
    34.4 拓展阅读438
    35 字符串和数字439
    35.1 参数展开439
    35.1.1 基本参数. . . . 439
    35.1.2 管理空变量的展开. . . . . . . 440
    35.2 返回变量名的参数展开. 442
    35.2.1 字符串展开. . . 442
    35.2.2 大小写转换. . . 445
    35.3 算术求值和展开. . . . . 447
    35.3.1 数基. . . . . . . 448
    35.3.2 一元运算符. . . 448
    35.3.3 简单算术. . . . 448
    35.3.4 赋值运算符. . . 450
    35.3.5 位运算符. . . . 452
    35.3.6 逻辑运算符. . . 453
    35.4 bc --一种高精度计算器语言. . . . . . 455
    35.4.1 使用bc . . . . . 456
    35.4.2 一个脚本实例. . 457
    13
    35.5 总结. . . 458
    35.6 额外加分458
    35.7 拓展阅读459
    36 数组460
    36.1 什么是数组? . . . . . . 460
    36.2 创建一个数组. . . . . . 460
    36.3 数组赋值461
    36.4 访问数组元素. . . . . . 462
    36.5 数组操作464
    36.5.1 输出整个数组的内容. . . . . . 464
    36.5.2 确定数组元素个数. . . . . . . 465
    36.5.3 找到数组使用的下标. . . . . . 465
    36.5.4 在数组末尾添加元素. . . . . . 466
    36.5.5 数组排序. . . . 466
    36.5.6 删除数组. . . . 467
    36.6 关联数组468
    36.7 总结. . . 468
    36.8 拓展阅读469
    37 奇珍异宝470
    37.1 组命令和子shell . . . . 470
    37.1.1 进程替换. . . . 474
    37.2 陷阱. . . 476
    37.3 异步执行479
    37.3.1 等待. . . . . . . 480
    37.4 命名管道481
    37.4.1 设置一个命名管道. . . . . . . 482
    37.4.2 使用命名管道. . 482
    37.5 总结. . . 483
    37.6 拓展阅读483