当前位置首页 > 百科> 正文

Linux命令行大全

2020-02-02 04:56:04 百科
Linux命令行大全

Linux命令行大全

《Linux命令行大全》是2013年人民邮电出版社出版的图书,作者是William E.shotts,Jr 。

基本介绍

  • 书名:Linux命令行大全
  • 作者:William E.shotts,Jr 
  • 原版名称:The Linux Command Line: A Complete Introduction
  • 译者:郭光伟、郝记生
  • ISBN:9787115307453
  • 类别:计算机 > 作业系统 > Linux
  • 页数:428
  • 出版社:人民邮电出版社
  • 出版时间:2013年3月
  • 开本:16

内容简介

《linux命令行大全》主要介绍linux命令行的使用,循序渐进,深入浅出,引导读者全面掌握命令行的使用方法。
《linux命令行大全》分为四部分。第一部分开始了对命令行基本语言的学习之旅,包括命令结构、档案系统的导引、命令行的编辑以及关于命令的帮助系统和使用手册。第二部分主要讲述配置档案的编辑,用于计算机操作的命令行控制。第三部分讲述了从命令行开始执行的常规任务。类unix作业系统,比如linux,包含了很多“经典的”命令行程式,这些程式可以高效地对数据进行操作。第四部分介绍了shell编程,这是一个公认的初级技术,并且容易学习,它可以使很多常见的系统任务自动运行。通过学习shell编程,读者也可以熟悉其他程式语言的使用。
《linux命令行大全》适合从其他平台过渡到linux的新用户和初级linux伺服器管理员阅读。没有任何linux基础和linux编程经验的读者,也可以通过本书掌握linux命令行的使用方法。

作者简介

William E.Shotts,Jr.作为一名软体开发人员和狂热的Linux用户已经有15年之久。他在软体开发领域有深厚的背景,先后涉及过技术支持、质量保证和文档编写等工作。他还是Linux Command.org网站的创始人,该网站是一个Linux教育和宣传网站,以新闻、评论和为人们使用Linux命令行提供广泛支持而见长。

目录

《linux命令行大全》
第一部分 学习shell
第1章 shell是什幺 3
1.1 终端仿真器 3
1.2 第一次键盘输入 4
1.2.1 命令历史记录 4
1.2.2 游标移动 4
1.3 几个简单的命令 5
1.4 结束终端会话 6
第2章 导航 7
2.1 理解档案系统树 7
2.2 当前工作目录 8
2.3 列出目录内容 9
2.4 更改当前工作目录 9
2.4.1 绝对路径名 9
2.4.2 相对路径名 9
2.4.3 一些有用的捷径 10
第3章 linux系统 13
3.1 ls命令的乐趣 13
3.1.1 选项和参数 14
.3.1.2 进一步了解长列表格式 15
3.2 使用file命令确定档案类型 16
3.3 使用less命令查看档案内容 16
3.4 快速浏览 18
3.5 符号连结 20
第4章 操作档案与目录 23
4.1 通配符 24
4.2 mkdir——创建目录 26
4.3 cp——複製档案和目录 26
4.4 mv——移除和重命名档案 27
4.5 rm——删除档案和目录 28
4.6 ln——创建连结 29
4.6.1 硬连结 29
4.6.2 符号连结 30
4.7 实战演练 30
4.7.1 创建目录 30
4.7.2 複製档案 31
4.7.3 移动和重命名档案 31
4.7.4 创建硬连结 32
4.7.5 创建符号连结 33
4.7.6 移除档案和目录 34
4.8 本章结尾语 35
第5章 命令的使用 37
5.1 究竟什幺是命令 38
5.2 识别命令 38
5.2.1 type——显示命令的类型 38
5.2.2 which——显示可执行程式的位置 39
5.3 获得命令文档 39
5.3.1 help——获得shell内置命令的帮助文档 39
5.3.2 help——显示命令的使用信息 40
5.3.3 man——显示程式的手册页 40
5.3.4 apropos——显示合适的命令 41
5.3.5 whatis——显示命令的简要描述 42
5.3.6 info——显示程式的info条目 42
5.3.7 readme和其他程式文档档案 43
5.4 使用别名创建自己的命令 43
5.5 温故以求新 45
第6章 重定向 47
6.1 标準输入、标準输出和标準错误 48
6.1.1 标準输出重定向 48
6.1.2 标準错误重定向 50
6.1.3 将标準输出和标準错误重定向到同一个档案 50
6.1.4 处理不想要的输出 51
6.1.5 标準输入重定向 51
6.2 管道 53
6.2.1 过滤器 53
6.2.2 uniq——报告或忽略档案中重複的行 54
6.2.3 wc——列印行数、字数和位元组数 54
6.2.4 grep——列印匹配行 54
6.2.5 head/tail——输出档案的开头部分/结尾部分 55
6.2.6 tee——从stdin读取数据,并同时输出到stdout和档案 56
6.3 本章结尾语 57
第7章 透过shell看世界 59
7.1 扩展 59
7.1.1 路径名扩展 60
7.1.2 波浪线扩展 61
7.1.3 算术扩展 61
7.1.4 花括弧扩展 62
7.1.5 参数扩展 63
7.1.6 命令替换 64
7.2 引用 65
7.2.1 双引号 65
7.2.2 单引号 67
7.2.3 转义字元 67
7.3 本章结尾语 68
第8章 高级键盘技巧 69
8.1 编辑命令行 69
8.1.1 游标移动 70
8.1.2 修改文本 70
8.1.3 剪下和贴上(killing and yanking)文本 71
8.2 自动补齐功能 71
8.3 使用历史命令 73
8.3.1 搜寻历史命令 73
8.3.2 历史记录扩展 75
8.4 本章结尾语 76
第9章 许可权 77
9.1 所有者、组成员和其他所有用户 78
9.2 读取、写入和执行 79
9.2.1 chmod——更改档案模式 81
9.2.2 採用gui设定档案模式 84
9.2.3 umask——设定默认许可权 85
9.3 更改身份 87
9.3.1 su——以其他用户和组id的身份来运行shell 88
9.3.2 sudo——以另一个用户的身份执行命令 89
9.3.3 chown——更改档案所有者和所属群组 90
9.3.4 chgrp——更改档案所属群组 91
9.4 许可权的使用 91
9.5 更改用户密码 93
第10章 进程 95
10.1 进程如何工作 96
10.1.1 使用ps命令查看进程信息 96
10.1.2 使用top命令动态查看进程信息 98
10.2 控制进程 100
10.2.1 中断进程 100
10.2.2 使进程在后台运行 101
10.2.3 使进程回到前台运行 101
10.2.4 停止(暂停)进程 102
10.3 信号 102
10.3.1 使用kill命令传送信号到进程 103
10.3.2 使用killall命令传送信号给多个进程 105
10.4 更多与进程相关的命令 105
第二部分 配置与环境
第11章 环境 109
11.1 环境中存储的是什幺 109
11.1.1 检查环境 110
11.1.2 一些有趣的变数 111
11.2 环境是如何建立的 112
11.2.1 login和non-login shell 112
11.2.2 启动档案中有什幺 113
11.3 修改环境 114
11.3.1 用户应当修改哪些档案 114
11.3.2 文本编辑器 115
11.3.3 使用文本编辑器 115
11.3.4 激活我们的修改 117
11.4 本章结尾语 118
第12章 vi简介 119
12.1 为什幺要学习vi 119
12.2 vi背景 120
12.3 启动和退出vi 120
12.4 编辑模式 121
12.4.1 进入插入模式 122
12.4.2 保存工作 122
12.5 移动游标 123
12.6 基本编辑 124
12.6.1 添加文本 124
12.6.2 插入一行 125
12.6.3 删除文本 126
12.6.4 剪下、複製和贴上文本 127
12.6.5 合併行 128
12.7 查找和替换 128
12.7.1 行内搜寻 128
12.7.2 搜寻整个档案 129
12.7.3 全局搜寻和替换 129
12.8 编辑多个档案 130
12.8.1 切换档案 131
12.8.2 载入更多的档案 132
12.8.3 档案之间的内容複製 132
12.8.4 插入整个档案 133
12.9 保存工作 134
第13章 定製提示符 135
13.1 提示符的分解 135
13.2 尝试设计提示符 137
13.3 添加颜色 138
13.4 移动游标 140
13.5 保存提示符 141
13.6 本章结尾语 141
第三部分 常见任务和主要工具
第14章 软体包管理 145
14.1 软体包系统 146
14.2 软体包系统工作方式 146
14.2.1 软体包档案 146
14.2.2 库 147
14.2.3 依赖关係 147
14.2.4 高级和低级软体包工具 147
14.3 常见软体包管理任务 148
14.3.1 在库里面查找软体包 148
14.3.2 安装库中的软体包 148
14.3.3 安装软体包档案中的软体包 149
14.3.4 删除软体包 149
14.3.5 更新库中的软体包 150
14.3.6 更新软体包档案中的软体包 150
14.3.7 列出已安装的软体包列表 150
14.3.8 判断软体包是否安装 151
14.3.9 显示已安装软体包的相关信息 151
14.3.10 查看某具体档案由哪个软体包安装得到 151
14.4 本章结尾语 152
第15章 存储介质 155
15.1 挂载、卸载存储设备 156
15.1.1 查看已挂载的档案系统列表 157
15.1.2 确定设备名称 160
15.2 创建新的档案系统 162
15.2.1 用fdisk命令进行磁碟分区 162
15.2.2 用mkfs命令创建新的档案系统 164
15.3 测试、修复档案系统 165
15.4 格式化软碟 166
15.5 直接从/向设备转移数据 166
15.6 创建cd-rom映像 167
15.6.1 创建一个cd-rom档案映像副本 167
15.6.2 从档案集合中创建映像档案 168
15.7 向cd-rom写入映像档案 168
15.7.1 直接挂载iso映像档案 168
15.7.2 擦除可读写cd-rom 169
15.7.3 写入映像档案 169
15.8 附加认证 169
第16章 网路 171
16.1 检查、监测网路 172
16.1.1 ping——向网路主机传送特殊数据包 172
16.1.2 traceroute——跟蹤网路数据包的传输路径 173
16.1.3 netstat——检查网路设定及相关统计数据 174
16.2 通过网路传输档案 175
16.2.1 ftp——採用ftp(档案传输协定)传输档案 175
16.2.2 lftp——更好的ftp(档案传输协定) 177
16.2.3 wget——非互动式网路下载工具 177
16.3 与远程主机的安全通信 178
16.3.1 ssh——安全登录远程计算机 178
16.3.2 scp和sftp——安全传输档案 181
第17章 档案搜寻 183
17.1 locate——较简单的方式查找档案 184
17.2 find——较複杂的方式查找档案 185
17.2.1 test选项 186
17.2.2 action选项 190
17.2.3 返回到playground资料夹 194
17.2.4 option选项 196
第18章 归档和备份 197
18.1 档案压缩 198
18.1.1 gzip——档案压缩与解压缩 198
18.1.2 bzip2——牺牲速度以换取高质量的数据压缩 200
18.2 档案归档 201
18.2.1 tar——磁带归档工具 201
18.2.2 zip——打包压缩档案 205
18.3 同步档案和目录 207
18.3.1 rsync——远程档案、目录的同步 207
18.3.2 在网路上使用rsync命令 209
第19章 正则表达式 211
19.1 什幺是正则表达式 211
19.2 grep——文本搜寻 212
19.3 元字元和文字 213
19.4 任意字元 214
19.5 锚 214
19.6 中括弧表达式和字元类 215
19.6.1 否定 216
19.6.2 传统字元範围 216
19.6.3 posix字元类 217
19.7  posix基本正则表达式和扩展正则表达式的比较 220
19.8 或选项 221
19.9 限定符 222
19.9.1 ?——匹配某元素0次或1次 222
19.9.2 *——匹配某元素多次或零次 222
19.9.3 +——匹配某元素一次或多次 223
19.9.4 {}——以指定次数匹配某元素 223
19.10 正则表达式的套用 224
19.10.1 用grep命令验证号码簿 224
19.10.2 用find查找奇怪档案名称的档案 225
19.10.3 用locate查找档案 226
19.10.4 利用less和vim命令搜寻文本 226
19.11 本章结尾语 227
第20章 文本处理 229
20.1 文本应用程式 230
20.1.1 档案 230
20.1.2 网页 230
20.1.3 电子邮件 230
20.1.4 印表机输出 231
20.1.5 程式原始码 231
20.2 温故以求新 231
20.2.1 cat——进行档案之间的拼接并且输出到标準输出 231
20.2.2 sort——对文本行进行排序 232
20.2.3 uniq——通知或省略重複的行 238
20.3 切片和切块 239
20.3.1 cut——删除文本行中的部分内容 239
20.3.2 paste——合併文本行 242
20.3.3 join——连线两档案中具有相同栏位的行 243
20.4 文本比较 245
20.4.1 comm——逐行比较两个已排序档案 245
20.4.2 diff——逐行比较档案 246
20.4.3 patch——对原档案进行diff操作 248
20.5 非互动式文本编辑 249
20.5.1 tr——替换或删除字元 249
20.5.2 sed——用于文本过滤和转换的流编辑器 251
20.5.3 aspell——互动式拼写检查工具 258
20.6 本章结尾语 260
20.7 附加项 261
第21章 格式化输出 263
21.1 简单的格式化工具 264
21.1.1 nl——对行进行标号 264
21.1.2 fold——将文本中的行长度设定为指定长度 266
21.1.3 fmt——简单的文本格式化工具 267
21.1.4 pr——格式化列印文本 270
21.1.5 printf——格式化并列印数据 270
21.2 文档格式化系统 273
21.2.1 roff和tex家族 274
21.2.2 groff——文档格式化系统 274
21.3 本章结尾语 279
第22章 列印 281
22.1 列印操作简史 282
22.1.1 灰暗时期的列印 282
22.1.2 基于字元的印表机 282
22.1.3 图形化印表机 283
22.2 linux方式的列印 284
22.3 準备列印档案 284
22.3.1 pr——将文本档案转换为列印档案 285
22.4 向印表机传送列印任务 285
22.4.1 lpr——列印档案(berkeley类型) 286
22.4.2 lp——列印档案(system v类型) 287
22.4.3 另外一个参数选项:a2ps 287
22.5 监测和控制列印任务 290
22.5.1 lpstat——显示列印系统状态 290
22.5.2 lpq——显示列印伫列状态 291
22.5.3 lprm与cancel——删除列印任务 291
第23章 编译程式 293
23.1 什幺是编译 294
23.2 是不是所有的程式都需要编译 295
23.3 编译一个c程式 295
23.3.1 获取原始码 296
23.3.2 检查原始码树 297
23.3.3 生成程式 298
23.3.4 安装程式 302
23.4 本章结尾语 302
第四部分 编写shell脚本
第24章 编写第一个shell脚本 305
24.1 什幺是shell脚本 305
24.2 怎样写shell脚本 306
24.2.1 脚本档案的格式 306
24.2.2 可执行许可权 307
24.2.3 脚本档案的位置 307
24.2.4 脚本的理想位置 308
24.3 更多的格式诀窍 309
24.3.1 长选项名 309
24.3.2 缩进和行连线 309
24.5 本章结尾语 310
第25章 启动一个项目 311
25.1 第一阶段:最小的文档 311
25.2 第二阶段:加入一点数据 313
25.3 变数和常量 314
25.3.1 创建变数和常量 314
25.3.2 为变数和常量赋值 316
25.4  here文档 317
25.5 本章结尾语 319
第26章 自顶向下设计 321
26.1 shell函式 322
26.2 局部变数 325
26.3 保持脚本的运行 326
26.4 本章结尾语 328
第27章 流控制:if分支语句 329
27.1 使用if 330
27.2 退出状态 330
27.3 使用test命令 332
27.3.1 档案表达式 332
27.3.2 字元串表达式 334
27.3.3 整数表达式 335
27.4 更现代的test命令版本 336
27.5 (( ))——为整数设计 338
27.6 组合表达式 339
27.7 控制运算符:另一种方式的分支 341
27.8 本章结尾语 342
第28章 读取键盘输入 343
28.1 read——从标準输入读取输入值 344
28.1.1 选项 346
28.1.2 使用ifs间隔输入栏位 347
28.2 验证输入 349
28.3 选单 350
28.4 本章结尾语 351
28.5 附加项 352
第29章 流控制:while和until循环 353
29.1 循环 353
29.2 while 354
29.3 跳出循环 356
29.4 until 357
29.5 使用循环读取档案 358
29.6 本章结尾语 358
第30章 故障诊断 359
30.1 语法错误 359
30.1.1 引号缺失 360
30.1.2 符号缺失冗余 360
30.1.3 非预期的展开 361
30.2 逻辑错误 362
30.2.1 防御编程 363
30.2.2 输入值验证 364
30.3 测试 364
30.3.1 桩 365
30.3.2 测试用例 365
30.4 调试 366
30.4.1 找到问题域 366
30.4.2 追蹤 366
30.4.3 运行过程中变数的检验 368
30.5 本章结尾语 369
第31章 流控制:case分支 371
31.1 case 371
31.1.1 模式 373
31.1.2 多个模式的组合 374
31.2 本章结尾语 375
第32章 位置参数 377
32.1 访问命令行 377
32.1.1 确定实参的数目 378
32.1.2 shift——处理大量的实参 379
32.1.3 简单的应用程式 380
32.1.4 在shell函式中使用位置参数 381
32.2 处理多个位置参数 381
32.3 更完整的应用程式 383
32.4 本章结尾语 386
第33章 流控制:for循环 389
33.1 for:传统shell形式 389
33.2 for:c语言形式 392
33.3 本章结尾语 393
第34章 字元串和数字 395
34.1 参数扩展(parameter expansion) 395
34.1.1 基本参数 396
34.1.2 空变数扩展的管理 396
34.1.3 返回变数名的扩展 397
34.1.4 字元串操作 398
34.2 算术计算和扩展 400
34.2.1 数字进制 401
34.2.2 一元运算符 401
34.2.3 简单算术 401
34.2.4 赋值 402
34.2.5 位操作 404
34.2.6 逻辑操作 405
34.3 bc:一种任意精度计算语言 407
34.3.1 bc的使用 407
34.3.2 脚本例子 408
34.4 本章结尾语 409
34.5 附加项 409
第35章 数组 411
35.1 什幺是数组 411
35.2 创建一个数组 412
35.3 数组赋值 412
35.4 访问数组元素 413
35.5 数组操作 414
35.5.1 输出数组的所有内容 415
35.5.2 确定数组元素的数目 415
35.5.3 查找数组中使用的下标 416
35.5.4 在数组的结尾增加元素 416
35.5.5 数组排序操作 416
35.5.6 数组的删除 417
35.6 本章结尾语 418
第36章 其他命令 419
36.1 组命令和子shell 419
36.1.1 执行重定向 420
36.1.2 进程替换 420
36.2 trap 422
36.3 异步执行 425
36.4 命名管道 426
36.4.1 设定命名管道 427
36.4.2 使用命名管道 427
36.5 本章结尾语 428

前言

我想给大家讲一个故事。故事内容不是Linus Torvalds在1991年怎样编写了Linux核心的第一个版本,因为这些内容你可以在很多Linux图书中找到。我也不想告诉你,更早之前,Richard Stallman是如何开始GNU项目,设计了一个免费的类UNIX作业系统。那也是一个很有意义的故事,但大多数Linux图书也讲到了它。我想给大家讲一个如何才能夺回计算机控制权的故事。
在20世纪70年代后期,我刚开始和计算机打交道时,正在进行着一场革命,那时的我还是一名大学生。微处理器的发明使得你我这样的普通人真正拥有一台计算机成为可能。今天,人们难以想像,只有大公司和强大的政府机构才能够使用计算机的世界,是怎样的一个世界。让我说,你其实想像不出多少宋。
如今,世界已经截然不同。计算机遍布各个领域,从小手錶到大型数据中心,以及介于它们之间的每一样东西。除了随处可见的计算机之外,我们还有一个无处不在的连线所有计算机的网路。这开创了一个奇妙的个人授权和创作自由的新时代。但是在过去的二三十年里,一些事情在悄然发生。一个大公司不断地把它的控制权强加到世界绝大多数的计算机上,并且决定你对计算机的操作权力。幸运的是,世界各地的人们正在努力进行抗争。他们通过自己编写软体来争夺自己计算机的控制权。他们创造了Linux!
很多人提到Linux的时候都会讲到“自由”,但是并不是所有人都明白这种自由到底意味着什幺。自由就是能够决定计算机可以做什幺,而获得这种自由的唯一方法就是知道你的计算机正在做什幺;自由就是计算机没有秘密可言,只要你仔细地寻找,就能了解其全部内容。
为什幺使用命令行
读者之前应该注意到,电影中的“超级黑客”,就是那些能够在30秒内入侵到超级安全的军方计算机里的家伙,都是坐在计算机旁,从来不碰滑鼠的。这是因为电影製片人意识到,我们人类从本能上会明白,能够让计算机执行任何任务的唯一途径,是通过键盘输入命令来实现的。
现在,大多数计算机用户只熟悉图形用户界面(GUI),并且产品供应商和专家还在不停地灌输一种思想,那就是命令行界面(CLI)是一种很糟糕的东西,而且已经过时。这是很不幸的,因为一个好的命令行界面是一种很神奇的人机互动方式,就和我们採用书信进行交流一样。据说“图形用户界面能让简单的任务更简单,而命令行界面能够处理複杂的任务”,这句话在今天看来仍然是正确的。
由于Linux系统参照了UNIX系列作业系统,它分享了UNIX系统丰富的命令行工具。UNIX系统在20世纪80年代早期就占据了主流地位(儘管它只是在20世纪70年代才开发出来),结果,在普遍採用图形用户界面之前,开发了一种广泛使用的命令行界面。事实上,Linux开发者优先使用命令行界面(而不是其他系统,比如WindowsNT)的一个原因就是因为其强大的命令行界面,使“完成複杂的任务成为可能”。
本书内容
这是一本全面讲述如何使用Linux命令行的图书。与那些仅涉及一个程式(比如shell程式、bash)的图书不同,本书从更广泛的意义上向读者传授如何使用命令行,它是如何工作的,它有哪些功能,以及使用它的最佳方式是什幺。
这不是一本关于Linux系统管理方面的图书。任何一个关于命令行的重要讨论,都一定会涉及系统管理方面的内容,但是本书只涉及很少的管理方面的问题。本书为读者準备了其他的学习内容,帮助你为使用命令行打下坚实的基础,这可是完成一个系统管理任务所必需的至关重要的工具。
本书以Linux为中心。其他许多图书为了扩大读者群体以及自身的影响力,会在书中包含其他平台,比如通用的UNIX和Mac OS X系统。而且为了达到这个目的,它们只能“淡化”书的内容,只讲解一些通用的主题。而本书只包括当前的Linux发行版本。儘管本书95%的内容对其他类UNIX系统用户也有帮助,但是本书主要还是面向现代的Linux命令行用户。
本书读者对象
本书适合从其他平台转到Linux的新用户阅读。这些新用户很可能原来是Microsoft Windows版本的超级用户;也可能是老闆已经要求负责管理一个Linux伺服器的管理员;还有可能是厌烦了桌面系统的安全问题,想要体验一下Linux系统的用户。没关係,不管你属于哪类用户,都欢迎阅读本书。
不过一般来说,Linux的启蒙学习不存在任何捷径。命令行的学习具有挑战性而且颇费精力,这倒不是因为它太难,而是它涵盖的内容太多。一般的Linux 系统有上千个程式可以通过命令行使用,这点毫不夸张。你需要提醒自己的是,命令行可不是随便就能学会的。
另一方面,学习Linux命令行也非常值得。如果你认为自己已经是一名“超级用户”了,那幺请注意,你可能不知道什幺才是真正的“超级用户”。不同于许多其他的计算机技术,命令行的知识是经久不衰的。今天学会的技能,在10年后仍然有用。换言之,命令行是能够历经时间考验的。
如果读者没有编程经验,也不用担心,你仍然可以从本书开始学习。
内容安排
本书精心编排,内容有序,就像有一位老师坐在你身旁,耐心指导你。许多作者都採用系统化的方法来讲解本书中的内容。对作者来讲,这很合理,但是对初学者来讲,则可能摸不着头脑。
本书的另一个目的是使读者熟悉UNIX的思考方式,它与Windows的思考方式大不相同。在学习的过程中,本书还将帮助读者理解命令行的工作原理和方式。Linux不仅仅是一个软体,它还是庞大的UNIX文化中的一小部分,有着自己的语言和历史。同时,我也许会说一些过激的言语。
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net