Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版

编辑点评:Linux系统命令及Shell脚本实践指南pdf

linux系统命令及shell脚本实践指南》由浅入深、全面、系统地介绍了linux系统的基础命令和shell脚本的开发。作为一本面向linux入门用户的书籍,小编今天为大家带来了Linux系统命令及Shell脚本实践指南pdf,有需要的就快来下载吧

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图

内容简介 

《linux系统命令及shell脚本实践指南》由浅入深、全面、系统地介绍了linux系统的基础命令和shell脚本的开发。作为一本面向linux入门用户的书籍,本书力求语言通俗易懂,

用例简单明了,便于读者阅读领会。同时,全书穿插了不少要求读者动手实践的内容,不但可加深读者对内容的理解和消化,同时也可通过动手实践激发读者对linux系统和shell编程的兴趣,从而更好地驱动读者学习。

全书共计18章,从知识结构上分为三部分。第一部分为前8章,全面介绍了linux的基础知识和常用命令;第二部分为第9章和第10章,主要是linux下交互和非交互编辑器的使用;

第三部分为第11~18章,主要是shell脚本开发。这三部分内容各有偏重,读者可以根据实际需要选择阅读。

《linux系统命令及shell脚本实践指南》根据作者多年来linux环境运维管理工作的经验编著而成,内容丰富,且注重实践讲解,非常适合linux初学者和基于linux平台的软件开发者学习或查阅。

从内容结构上来看,本书摒弃了各章独立的写作风格,而是采取了各章有机结合的方式,自上而下自成一体,既加深了读者对单个知识点的理解,也有利于从全局把控linux系统和shell编程的精髓。

相关内容部分预览

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(1)

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(2)

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(3)

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(4)

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(5)

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(6)

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(7)

作者简介 

王军,拥有近8年系统工程师、网络工程师工作经验。2006年年初开始从事信息技术相关工作,先后参与过校园交换网、公司办公网以及大中型互联网公司的高可用网络架构设计,

有丰富的网络实战经验。2008年进入linux系统运维领域,并相继在国内多家著名企业(易趣、51job、阿里云)就职,从事网络工程师、系统工程师工作,工作内容涉及大规模商用云计算虚拟化平台运维、

系统架构、企业网络设计。自行设计和部署过国内多家大型网站的高可用集群。对系统、网络、数据库都有深刻的理解,多次在国内一些技术论坛和博客中发表技术文档,颇受关注。现任国家电网某子公司资深技术顾问。

目录  

《linux系统命令及shell脚本实践指南》
推荐序1
推荐序2
前 言
第1章 linux简介 1
1.1 linux的发展历史 1
1.2 linux的特点 2
1.3 系统安装 3
1.3.1 安装前的规划 3
1.3.2 安装redhat 4
1.3.3 安装centos 11
1.4 系统登录 16
1.4.1 第一次登录系统的设置 16
1.4.2 使用图形模式登录 21
1.4.3 使用终端模式登录 23
1.4.4 开始学习使用linux的命令 24
1.5 系统启动流程 25
1.5.1 系统引导概述 25
1.5.2 系统运行级别 26
1.5.3 服务启动脚本 27
.1.5.4 grub介绍 29
1.6 获得帮助 31
1.6.1 使用man page 31
1.6.2 使用info page 32
1.6.3 其他获得帮助的方式 32
第2章 linux用户管理 33
2.1 linux用户和用户组 33
2.1.1 uid和gid 33
2.1.2  /etc/passwd和/etc/shadow 34
2.2 linux账号管理 36
2.2.1 新增和删除用户 36
2.2.2 新增和删除用户组 39
2.2.3 检查用户信息 39
2.3 切换用户 40
2.3.1 切换成其他用户 40
2.3.2 用其他用户的身份执行命令:sudo 41
2.4 例行任务管理 43
2.4.1 单一时刻执行一次任务:at 43
2.4.2 周期性执行任务:cron 44
2.4.3 /etc/crontab的管理 45
第3章 linux文件管理 46
3.1 文件和目录管理 46
3.1.1 绝对路径和相对路径 47
3.1.2 文件的相关操作 48
3.1.3 目录的相关操作 51
3.1.4 文件时间戳 53
3.2 文件和目录的权限 54
3.2.1 查看文件或目录的权限:ls -al 54
3.2.2 文件隐藏属性 55
3.2.3 改变文件权限:chmod 56
3.2.4 改变文件的拥有者:chown 56
3.2.5 改变文件的拥有组:chgrp 57
3.2.6 文件特殊属性:suid/sgid/sticky 57
3.2.7 默认权限和umask 58
3.2.8 查看文件类型:file 60
3.3 查找文件 60
3.3.1 一般查找:find 61
3.3.2 数据库查找:locate 61
3.3.3 查找执行文件:which/whereis 62
3.4 文件压缩和打包 63
3.4.1 gzip/gunzip 63
3.4.2 tar 63
3.4.3 bzip2 63
3.4.4 cpio 64
第4章 linux文件系统 65
4.1 文件系统 65
4.1.1 什么是文件系统 65
4.1.2 ext2文件系统简介 65
4.1.3 ext3文件系统简介 66
4.2 磁盘分区、创建文件系统、挂载 66
4.2.1 创建文件系统:fdisk 66
4.2.2 磁盘挂载:mount 69
4.2.3 设置启动自动挂载:/etc/fstab 70
4.2.4  磁盘检验:fsck、badblocks 70
4.3 linux逻辑卷 71
4.3.1 什么是逻辑卷 71
4.3.2 如何制作逻辑卷 72
4.4 硬链接和软链接 76
4.4.1 什么是硬链接 76
4.4.2 什么是软链接 77
第5章 字符处理 79
5.1 管道 79
5.2 使用grep搜索文本 79
5.3 使用sort排序 80
5.4 使用uniq删除重复内容 82
5.5 使用cut截取文本 82
5.6 使用tr做文本转换 83
5.7 使用paste做文本合并 84
5.8 使用split分割大文件 84
第6章 网络管理 86
6.1 网络接口配置 86
6.1.1 使用ifconfig检查和配置网卡 86
6.1.2 将ip配置信息写入配置文件 87
6.2 路由和网关设置 88
6.3 dns客户端配置 89
6.3.1 /etc/hosts 89
6.3.2 /etc/resolv.conf 90
6.4 网络测试工具 90
6.4.1 ping 90
6.4.2 host 91
6.4.3 traceroute 91
6.4.4 常见网络故障排查 92
第7章 进程管理 94
7.1 什么是进程 94
7.2 进程和程序的区别 95
7.3 进程的观察:ps、top 95
7.4 进程的终止:kill、killall 98
7.5 查询进程打开的文件:lsof 99
7.6 进程优先级调整:nice、renice 101
第8章 linux下的软件安装 103
8.1 源码包编译安装 103
8.1.1 编译、安装、打印helloworld程序 103
8.1.2 使用源码包编译安装apache 106
8.2 rpm安装软件 108
8.2.1 什么是rpm 108
8.2.2 rpm包管理命令:rpm 109
8.2.3 包依赖关系 110
8.2.4 使用rpm包安装gcc 110
8.2.5 使用rpm包安装apache 112
8.3 yum安装软件 114
8.3.1 yum命令的基本用法 114
8.3.2 使用yum安装apache 115
8.3.3 redhat使用yum的问题 115
8.3.4 自建本地yum源 118
8.3.5 自建网络yum源 121
8.4 三种安装方法的比较 123
8.5 重建rpm包 124
8.5.1 创建重建环境 124
8.5.2 快速重建rpm包 124
8.5.3 以spec文件重建rpm包 125
8.5.4 spec文件简介 126
第9章 vi和vim编辑器 129
9.1 vi和vim编辑器简介 129
9.2 vi编辑器 129
9.2.1 模式介绍 129
9.2.2 案例练习 130
9.3 vim编辑器 134
9.3.1 多行编辑 134
9.3.2 多文件编辑 134
9.3.3 使用vimtutor深入学习vim 136
9.4 gedit编辑器 137
9.4.1 gedit编辑器简介 137
9.4.2 启动gedit编辑器 138
第10章 正则表达式 139
10.1 正则表达式基础 139
10.1.1 什么是正则表达式 139
10.1.2 基础的正则表达式 140
10.1.3 扩展的正则表达式 143
10.1.4 通配符 144
10.2 正则表达式示例 146
10.3 文本处理工具sed 150
10.3.1 sed介绍 150
10.3.2 删除 151
10.3.3 查找替换 152
10.3.4 字符转换 153
10.3.5 插入文本 153
10.3.6 读入文本 154
10.3.7 打印 154
10.3.8 写文件 154
10.3.9 sed脚本 155
10.3.10 高级替换 155
10.3.11 sed总结 156
10.4 文本处理工具awk 157
10.4.1 打印指定域 158
10.4.2 指定打印分隔符 158
10.4.3 内部变量nf 159
10.4.4 打印固定域 159
10.4.5 截取字符串 159
10.4.6 确定字符串的长度 160
10.4.7 使用awk求列和 160
第11章 shell编程概述 161
11.1 shell简介 161
11.1.1 shell是什么 161
11.1.2 shell的历史 163
11.1.3 shell的功能 164
11.1.4 shell编程的优势 164
11.2 第一个shell脚本 164
11.2.1 编辑第一个shell脚本 164
11.2.2 运行脚本 165
11.2.3 shell脚本的排错 166
11.3 shell的内建命令 169
第12章 bash shell的安装 184
12.1 确定你的shell版本 184
12.2 安装bash 184
12.3 使用新版本的bash shell 186
12.4 在windows中安装bash 187
第13章 shell编程基础 191
13.1 变量 191
13.1.1 局部变量 191
13.1.2 环境变量 191
13.1.3 变量命名 197
13.1.4 变量赋值和取值 198
13.1.5 取消变量 199
13.1.6 特殊变量 199
13.1.7 数组 200
13.1.8 只读变量 202
13.1.9 变量的作用域 203
13.2 转义和引用 205
13.2.1 转义 205
13.2.2 引用 206
13.2.3 命令替换 207
13.3 运算符 208
13.3.1 算术运算符 209
13.3.2 位运算符 209
13.3.3 自增自减 211
13.4 其他算术运算 211
13.4.1 使用$[]做运算 211
13.4.2 使用expr做运算 212
13.4.3 内建运算命令declare 212
13.4.4 算术扩展 213
13.4.5 使用bc做运算 213
13.5 特殊字符 215
13.5.1 通配符 215
13.5.2 引号 215
13.5.3 注释符 215
13.5.4 大括号 216
13.5.5 控制字符 217
13.5.6 杂项 217
第14章 测试和判断 218
14.1 测试 218
14.1.1 测试结构 218
14.1.2 文件测试 219
14.1.3 字符串测试 220
14.1.4 整数比较 222
14.1.5 逻辑测试符和逻辑运算符 223
14.2 判断 224
14.2.1 if判断结构 224
14.2.2 if/else判断结构 225
14.2.3 if/elif/else判断结构 226
14.2.4 case判断结构 227
第15章 循环 229
15.1 for循环 229
15.1.1 带列表的for循环 229
15.1.2 不带列表的for循环 231
15.1.3 类c的for循环 232
15.1.4 for的无限循环 233
15.2 while循环 234
15.2.1 while循环的语法 234
15.2.2 使用while按行读取文件 235
15.2.3 while的无限循环 236
15.3 until循环 237
15.3.1 until循环的语法 237
15.3.2 until的无限循环 238
15.4 select循环 238
15.5 嵌套循环 239
15.6 循环控制 241
15.6.1 break语句 241
15.6.2 continue语句 241
第16章 函数 243
16.1 函数的基本知识 243
16.1.1 函数的定义和调用 243
16.1.2 函数的返回值 244
16.2 带参数的函数 246
16.2.1 位置参数 246
16.2.2 指定位置参数值 247
16.2.3 移动位置参数 248
16.3 函数库 249
16.3.1 自定义函数库 249
16.3.2 函数库/etc/init.d/functions简介 249
16.4 递归函数 251
第17章 重定向 255
17.1 重定向简介 255
17.1.1 重定向的基本概念 255
17.1.2 文件标识符和标准输入输出 255
17.2 i/o重定向 255
17.2.1 i/o重定向符号和用法 255
17.2.2 使用exec 260
17.2.3 here document 262
第18章 脚本范例 263
18.1 批量添加用户脚本 263
18.2 检测服务器存活 266
18.3 使用expect实现自动化输入 268
18.4 自动登录ftp备份 270
18.5 文件安全检测脚本 272
18.6 ssh自动登录备份 273
18.7 使用rsync备份 275
18.8 使用netcat备份 277
18.9 使用iptables建立防火墙 279
18.10 自定义开机启动项的init脚本 282
18.11 使用脚本操作mysql数据库 286
18.12 基于lvm快照的mysql数据库备份 288
18.13 页面自动化安装lamp环境 291

linux 的基本操作(编写shell 脚本)

终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。

到现在为止,你明白什么是shell脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shell脚本。首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:1)进入到/tmp/目录;2)列出当前目录中所有的文件名;3)把所有当前的文件拷贝到/root/目录下;4)删除当前目录下所有的文件。简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。

Shell脚本能帮助我们很方便的去管理服务器,因为我们可以指定一个任务计划定时去执行某一个shell脚本实现我们想要需求。这对于linux系统管理员来说是一件非常值得自豪的事情。现在的139邮箱很好用,发邮件的同时还可以发一条邮件通知的短信给用户,利用这点,我们就可以在我们的linux服务器上部署监控的shell脚本,比如网卡流量有异常了或者服务器web服务器停止了就可以发一封邮件给管理员,同时发送给管理员一个报警短信这样可以让我们及时的知道服务器出问题了。

有一个问题需要约定一下,凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护。

【shell脚本的基本结构以及如何执行】

Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。’#’表示注释,在前面讲过的。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的,如果你懒的很,可以省略掉,但是笔者不建议省略。因为随着你工作时间的增加,你写的shell脚本也会越来越多,如果有一天你回头查看你写的某个脚本时,很有可能忘记该脚本是用来干什么的以及什么时候写的。所以写上注释是有必要的。另外系统管理员并非你一个,如果是其他管理员查看你的脚本,他看不懂岂不是很郁闷。该脚本再往下面则为要运行的命令了。

Shell脚本的执行很简单,直接”sh filename “ 即可,另外你还可以这样执行

默认我们用vim编辑的文档是不带有执行权限的,所以需要加一个执行权限,那样就可以直接使用’./filename’ 执行这个脚本了。另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。

该shell脚本中用到了’date’这个命令,它的作用就是用来打印当前系统的时间。其实在shell脚本中date使用率非常高。有几个选项笔者常常在shell脚本中用到:

%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%S表示秒

注意%y和%Y的区别。

-d 选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月/年前或者后的日期。

另外星期几也是常用的

【shell脚本中的变量】

在shell脚本中使用变量显得我们的脚本更加专业更像是一门语言,开个玩笑,变量的作用当然不是为了专业。如果你写了一个长达1000行的shell脚本,并且脚本中出现了某一个命令或者路径几百次。突然你觉得路径不对想换一下,那岂不是要更改几百次?你固然可以使用批量替换的命令,但是也是很麻烦,并且脚本显得臃肿了很多。变量的作用就是用来解决这个问题的。

在test2.sh中使用到了反引号,你是否还记得它的作用?’d’和’d1’在脚本中作为变量出现,定义变量的格式为 “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号,这跟前面讲的在shell中自定义变量是一致的。下面看看脚本执行结果吧。

下面我们用shell计算两个数的和。

数学计算要用’[ ]’括起来并且外头要带一个’$’。脚本结果为:

Shell脚本还可以和用户交互。

这就用到了read命令了,它可以从标准输入获得变量的值,后跟变量名。”read x”表示x变量的值需要用户通过键盘输入得到。脚本执行过程如下:

我们不妨加上-x选项再来看看这个执行过程:

在test4.sh中还有更加简洁的方式。

read -p 选项类似echo的作用。执行如下:

你有没有用过这样的命令”/etc/init.d/iptables restart “ 前面的/etc/init.d/iptables 文件其实就是一个shell脚本,为什么后面可以跟一个”restart”? 这里就涉及到了shell脚本的预设变量。

实际上,shell脚本在执行的时候后边是可以跟变量的,而且还可以跟多个。不妨笔者写一个脚本,你就会明白了。

执行过程如下:

在脚本中,你会不会奇怪,哪里来的$1和$2,这其实就是shell脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,

当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字。不妨把脚本修改一下。

执行结果想必你也猜到了吧。

【shell脚本中的逻辑判断】

如果你学过C或者其他语言,相信你不会对if 陌生,在shell脚本中我们同样可以使用if逻辑判断。在shell中if判断的基本语法为:

1)不带else

if 判断语句; then

command

fi

在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可。执行结果为:

2)带有else

if 判断语句 ; then

command

else

command

fi

执行结果为:

3)带有elif

if 判断语句一 ; then

command

elif 判断语句二; then

command

else

command

fi

这里的 && 表示“并且”的意思,当然你也可以使用 || 表示“或者”,执行结果:

以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,

要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。

再看看if中使用 && 和 ||的情况。

shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:

-e :判断文件或目录是否存在

-d :判断是不是目录,并是否存在

-f :判断是否是普通文件,并存在

-r :判断文档是否有读权限

-w :判断是否有写权限

-x :判断是否可执行

使用if判断时,具体格式为: if [ -e filename ] ; then

在shell 脚本中,除了用if来判断逻辑外,还有一种常用的方式,那就是case了。具体格式为:

case 变量 in

value1)

command

;;

value2)

command

;;

value3)

command

;;

*)

command

;;

esac

上面的结构中,不限制value的个数,*则代表除了上面的value外的其他值。下面笔者写一个判断输入数值是奇数或者偶数的脚本。

$a 的值或为1或为0,执行结果为:

也可以看一下执行过程:

case脚本常用于编写系统服务的启动脚本,例如/etc/init.d/iptables中就用到了,你不妨去查看一下。

【shell脚本中的循环】

Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的。常用到的循环有for循环和while循环。下面就分别介绍一下两种循环的结构。

脚本中的seq 1 5 表示从1到5的一个序列。你可以直接运行这个命令试下。脚本执行结果为:

通过这个脚本就可以看到for循环的基本结构:

for 变量名 in 循环的条件; do

command

done

循环的条件那一部分也可以写成这样的形式,中间用空格隔开即可。你也可以试试,for i in `ls`; do echo $i; done 和 for i in `cat test.txt`; do echo $i; done

再来看看这个while循环,基本格式为:

while 条件; do

command

done

脚本的执行结果为:

另外你可以把循环条件忽略掉,笔者常常这样写监控脚本。

while :; do

command

done

【shell脚本中的函数】

如果你学过开发,肯定知道函数的作用。如果你是刚刚接触到这个概念的话,也没有关系,其实很好理解的。函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,

当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样就节省了时间还节省了空间。

fun.sh 中的sum() 为自定义的函数,在shell脚本中要用

function 函数名() {

command

这样的格式去定义函数。

上个脚本执行过程如下:

有一点笔者要提醒你一下,在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。

Shell脚本大体上就介绍这么多了,笔者所举的例子都是最基础的,所以即使你把所有例子完全掌握也不代表你的shell脚本编写能力有多么好。所以剩下的日子里你尽量要多练习,

多写脚本,你写的脚本越多,你的能力就越强。希望你能够找专门介绍shell脚本的书籍深入的去研究一下它。随后笔者将给你留几个shell脚本的练习题,你最好不要偷懒。

1. 编写shell脚本,计算1-100的和;

2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;

3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;

4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组;

5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

6. 编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255,="" 0<n3<255,="" 0<n4<255<="" span="">)。

Linux系统命令及Shell脚本实践指南pdf截图

Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(8)Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(9)Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(10)Linux系统命令及Shell脚本实践指南豆瓣免费阅读-Linux系统命令及Shell脚本实践指南pdf完整版插图(11)

评分及评论

无用户评分

来评个分数吧

  • 5 分
    0
  • 4 分
    0
  • 3 分
    0
  • 2 分
    0
  • 1 分
    0

Comments