当前位置: 100md首页 > 电子书籍 > 资料下载2021 >
编号:46716
Linux命令行大全.pdf
http://www.100md.com 2020年11月16日
第1页
第8页
第19页
第22页
第41页

    参见附件(48857KB,452页)。

    Linux命令行大全百度云

    《linux命令行大全》主要介绍linux命令行的使用,循序渐进,深入浅出,引导读者全面掌握命令行的使用方法,适合从其他平台过渡到linux的新用户和初级linux服务器管理员阅读。感兴趣的就快来开始学习吧

    书籍部分内容预览

    内容简介

    《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.7posix基本正则表达式和扩展正则表达式的比较 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.4here文档 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年后仍然有用。换言之,命令行是能够历经时间考验的。

    如果读者没有编程经验,也不用担心,你仍然可以从本书开始学习。

    Linux命令行大全百度云截图