清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+

今天整理了一些软件测试必备之Linux 知识,希望能对你有帮助!

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第1张图片

这里赠送一套软件测试相关资源:

  • 软件测试相关工具
  • 软件测试练习集
  • 深入自动化测试
  • Python学习手册
  • Python编码规范
  • 大厂面试题和简历模板

关注我公众号:【程序员二黑】即可免费领取!
交流群:642830685


软件测试必备之Linux 知识

      • 1. Linux 概述
      • 2. linux入门须知
      • 3. 常用命令
      • 4. 磁盘管理
      • 5. 文件管理
      • 6. 系统设置
      • 7.系统管理
      • 8. 网络通信
      • 9. 文件搜索
      • 10. 文件权限管理
      • 11. 网络管理
      • 12. 进程管理
      • 13. 解压缩
      • 14. 管道命令
      • 15. vi编辑器的使用
      • 16. mysql 安装和配置
    • 面试题
    • 推荐阅读



1. Linux 概述

1.1 测试人员为什么学习linux

对于软件测试人员来说,我们测试的任何产品都是基于操作系统。比如我们每天都在使用的QQ软件,它有windows、ios、Android、Mac OS等版本,需要把QQ安装在各个平台上,才能进行相应的测试。因此,熟练使用这些操作系统和掌握一系诶操作系统对的基本知识应该是每个测试工程师必须掌握的基本功。

目前市面主流的操作系统有windows、unix、linux等,而linux作为很多软件应用的后台服务器部署所采用的操作系统,也是当下应用最多的服务器端操作系统。熟练使用linux 系统,这样的词汇经常出现在测试岗位的要求和求职人员的技能描述中。而在测试人员这个群体中,真正能熟练运用linux操作系统的、哪怕只是对常用命令比较熟悉,也是比较稀缺的!因此测试人员学习linux ,不仅可以提高测试深度,也可以增加自己的核心竞争力、拓宽自己的技能栈,让自己的测试能力有更深层次的提高。

测试人员学习linux 可以做什么呢?作为初学者,搭建测试环境应该作为学习首要目的。

1.2 什么是linux

linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中性,大型甚至是巨型项目都在使用linux。
linux 内核:redhat、红旗linux、ubuntu、suse、fedora,

它们的内核都是一样的(linux其实是一个统称)
linux 操作系统的优点很多:开源免费、支持多线程、支持多用户、安全性好、对内存和文件管理优越、适合小内核程序的嵌入系统等
linux 的缺点是使用命令行操作,因此操作相对困难,但正是这种字符级命令行的操作,占用的系统资源会更少,也减少了被攻击、出错的可能性

1.3 linux 和Windows的不同
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第2张图片

1.4 如何学习linux

测试人员学习linux 不一定非常的系统性,因为精通linux那是运维人员的工作职责,作为测试人员,学习的首要目的应该是够熟练使用常用命令、熟练搭建测试环境。因此,不断的练习命令,每个常用命令都应该去多敲几遍,验证输入命令后的反馈,最后熟能生巧,慢慢地就能把常用命令记住了。

所以,如何学习linux?一个字:练!



2. linux入门须知

2.1 文件、目录

2.2linux文件
linux 所有的内容都是以文件形式保存,包括硬件(一切内容皆文件),并且linux不靠扩展名区分文件类型。
linux有多种基本类型,常见的有如下三种:
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第3张图片
2.3 linux 目录
linux 的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/” ,然后在此目录下再创建其他的目录。

在linux 系统中,所有的文件与目录都是根目录 / 开始的,以 / 开头的目录成为绝对目录,不以根目录 / 开头的称为相对目录。

linux 系统文件目录整理如下

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第4张图片
2.4 常用快捷键

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第5张图片



3. 常用命令

用户登录linux后,可以在linux 的命令提示符后面输入命令与系统进行交互。
如下所示:
[root@localhost~]#
其中:
root:当前登录用户
localhost:主机名
:当前所在目录, 表示家目录
#:超级用户的提示符,如果是普通用户的提示符是$

linux的命令格式: 命令 [选项] [参数]
如:cp dir1 dir2 ,cp是拷贝命令,dir1 和dir2是参数,表示把dir1拷贝到dir2中

注意:
个别命令使用不遵守此格式
当有多个命令时,可以写在一起
简化选项与完整选项,如 -a 等于 -all
linux 是严格区分大小写,一般命令没有特殊说明,都是小写
linux命令和参数之间是有空格的,请不要像英文字母一样,全部挤在一块

下面就linux 使用最频繁、最常用的命令进行详述。



4. 磁盘管理

4.1 cd
cd ,切换目录(chang directory)
cd 命令可以让登录用在不同的目录间切换
语法 :cd [目标目录]
下面是一些常用的目录切换

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第6张图片
相对路径与绝对路径的区别
cd 相对路径:只要开头不是 / 就是属于相对路径的写法,会参照当前所在目录,通过该相对路径进行查找
cd 绝对路径:绝对路径是由根目录 / 开头的文件名或目录名称。如:/home/data/package,会从根目录(即顶级目录/)开始,一级一级的去进行递归查找,通过cd 命令采用绝对路径e方式,只要路径是正确的,可以在任何目录下进入指定的该目录。

4.2 ls
ls,列出目录内容
语法:ls [目标目录]
ls 指令可列出目录内容,包括文件和子目录的名称

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第7张图片
工作中使用习惯一般是cd 命令切换到某个目录后,直接输入ls 查看当前目录的内容,类似于在windows系统上点开某个文件夹。

另外一个比较常用的写法是ll ,ll 是 ls -l 的缩写,可以以列表格式列出目录内容,如:
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第8张图片
下面package 各个属性的描述:


清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第9张图片
每行最前面10个字符可以确定该文件的类型以及不同用户针对该文件的权限
第一个字符表示类型:文件(-)、目录(d),链接(l)
其余字符每3个一组(rwx)、读(r)、写(w)、执行(x)
第一组 rwx:文件所有者的权限是读、写和执行
第二组 r-x:与文件所有者同一组的用户的权限是读和执行,没有写的权限
第三组 r-x:不与文件所有者同组的其他用户的权限是读和执行,没有写的权限

读、写、执行用数字表示分别为 r=4 ,w=2,x=1。
rwx =4+2+1=7
r-x=4+0+1=5
r-x=4+0+1=5
所以该文件针对不同用户的权限可以用数值755表示

4.3 pwd
pwd,显示工作目录(print working directory)
执行pwd命令可以获得当前所在的工作目录的绝对路径。

4.4 mkdir
mkdir,建立目录(make directory)
-p:递归创建目录,即如果建立目录的上层目录没有创建,会一并建立上层目录。

4.5 rmdir
删除空目录,这条命令实际操作中用得很少,我们一般用rm
注意 rmdir 命令只能删除空目录,如果要删除目录下所有文件可用:rm -rf 路径

4.6 df
df,显示磁盘的相关信息,如文件系统的使用情况
df [-ahikHTm] [目录或文件名]
-a :列出所有的文件系统
-k:以KB为单位显示各个文件系统
-m:以MB为单位显示各个文件系统
-h:以GB、MB、KB等格式显示
-H:以M =1000K取代 M=1024K的计算方式
-T:连同该分区的文件系统名(例如 ext3 )一起列出
-i:不用硬盘容量,而以inode 的数量来显示

df [路径],查看某个目录是在哪个分区,并显示其它信息
注意df、du两个命令对于测试人员来说应用频率并不高。

4.7 du
du,显示目录或者文件的大小,du 命令显示指定的目录或文件占用的磁盘空间

语法:du [-ahskm] [文件或目录名称]
-a : 列出所有的文件与目录容量
-h:以人们易读的容量格式(G/M)显示
-s: 显示总计,不列出每个目录占用的容量
-k: 以KB列出容量显示
-m:以MB列出容量显示



5. 文件管理

5.1 touch
touch,改变文件或者目录时间,也可以建立空文档

touch [-acdmt] 文件名
-a : 修改access time
-c : 修改时间,而不建立文件
-d: 后面可以接日期,也可以使用 --date=“日期或时间”
-m:修改 mtime
-t:后面可以接时间,格式为[YYMMDDhhmm]

5.2 cp
cp 复制命令
cp 指令用于复制文件或者目录,参数必须指定两个或者两个以上的文件或目录,并且最后一个路径必须是已经存在的目录,可以把之前指定的文件或者目录复制到该目录中。
常见参数:
-a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录。
-p 复制源文件的内容,并且会复制修改时间和访问权限到新文件中
-r 若给出的源文件是一目录文件,此时cp 将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名
如:cp -r dir1 dir2 dir3,递归复制,把dir1、dir2 复制到dir3目录中

5.3 mv
mv , 移动和重命名
mv 命令可以移动文件或者目录,也可以更改文件或目录名称
语法:
mv [源文件或者目录] [目标文件或目录]
如 mv dir1 dir2 :把dir1 移动到 dir2目录中
mv /home/hello /home/world; 把/home 目录下的hello 文件重命名为world

5.4 rm
rm ,删除文件和目录
rm 命令可以删除文件或目录,使用参数“-r” 可以删除目录,否则默认是删除文件
rm -rf * ,删除所有内容,包含目录和文件
其中 -r 表示递归,-f 表示强制

5.5 cat
cat ,显示文件内容,将文件内容打印到标准输出设备上
语法 :cat fileName
常用参数:
-n : 对输出的行数进行编号

5.6 head
查看纯文本文档的前N行,写到标准输出

head -n 20 查看文本文件前20行

5.7 tail
查看纯文本文档的后N行,写到标准输出
tail -n 20 查看文本文档后20行
tail -f error.log 不断刷新,实时查看文件内容改变

5.8 more、less
more ,显示文件内容带分页
语法:more fileName
more命令类似cat ,以一页一页形式显示,方便阅读,按空格键往后翻下一页,按b键(或 ctrl + pag up 上翻) 往前翻一页

more + 10 fileName : 从第10 行显示fileName 内容

less ,显示文件内容带分页
less 与 more 类似,使用less 可以随意浏览文件

5.9 echo
echo:输出字符串
语法:echo [-ne] [字符串] 或 echo [–help][–version]
echo会将输入的字符串送往标准输出



6. 系统设置

6.1 alias
alias:有些命令很长,或者名字显得别扭,可以给命令起一个别名
命令: alias :显示系统当前定义的所有alias
【案例】 alias cp = ‘cp -i’
【案例】alias li = ‘ls -l -color=tty’
用户可利用alias , 自定指令的别名。若仅输入alias ,则可列出目前所有的别名设置。alias的效力仅基于该次登入的操作。若要每次登入是即自动设置好别名,可在/etc/profile 或自己的 ~/.bashrc 中设定指令的别名。
还有,如果你想给每一位用户都生效的别名,请把 alias la = ‘ls -al’ 一行加在/etc/bashrc最后面
bashrc 是环境变量的配置文件 /etc/bashrc 和~/.bashrc 区别就在于一个是设置给全系统一个是设置给单用户使用,如果你想给每一位用户都生效的别名,请把alias la = ‘ls -al’ 一行加在 /etc/bashrc 最后面,bashrc是环境变量的配置文件 /etc/bashrc 和~/.bashrc 区别就在于一个是设置给全系统一个是设置给单用户使用

命令的执行顺序:
1: 执行用绝对路径和相对路径的命令
2:执行别名
3:执行Bash的内部命令
4:执行按照¥PATH 环境变量定义的目录找到第一个命令

6.2 alias
unalias:删除别名
语法:unalias 别名

6.3 export
export, 设置和显示环境变量
export 命令可新增、修改和删除环境变量
export -p :列出所有的shell 赋予程序的环境变量。

6.4 man
man [command] , 帮助,类似与dos中的help ;man实际为manual(操作说明),
man的级别:
1:查看命令的帮助
2:查看可被内核调用的函数的帮助
3:查看函数和函数库的帮助
4:查看特殊文件得帮助,主要是 /dev 目录下的文件
5:查看配置文件的帮助
6:查看游戏的帮助
7:查看其它杂项的帮助
8:查看系统管理员可用命令的帮助
9:查看和内核相关文件得帮助

查看命令拥有那个级别的帮助:
man -f 命令,相当于whats命令
eg:man -5 passwd
man -4 null
man -8 ifconfig

查看和命令相关的所有帮助
man -k命令,相当于 apropos 命令



7.系统管理

7.1 shutdown
shutdown ,系统关机命令
-h:关机
-r: 重启

shutdown -h now 立即进行关机
其它关机命令还有:halt 、poweroff 、init 0

7.2 reboot
reboot,重启命令
执行reboot 指令会让系统停止运作并重新开机
其它重启命令:
shutdown -r now 现在重新启动计算机

7.3 logout
logout ,注销登录
在linux 提示符下输入logout ,即可让用户注销登录,退出系统

7.4 who
who,显示当前登录系统的用户信息
命令输出:
登录名
登录终端
登录时间(登录来源的IP地址)

7.5 whoaml
显示自身用户名称

7.6 su
su :切换用户(switch user)
语法:su userName
su 命令用于切换其他用户 ,除了切换root 外,切换其他用户都需要输入密码

7.7 w
w 用户名:
输出
USER:登录的用户名
TTY:登录终端
FROM:哪个IP地址登录的
LOGIN@:登录时间
IDLE:用户闲置时间
JCPU:指的是和该终端连接的所有进程占有的时间,这个时间里并不包括过去的后台作用时间,但却包括当前正在运行的后台作用所占用的时间
PCPU:是指当前进程所占用的时间
WHAT:当前正在运行的命令

7.8 useradd
useradd ,添加用户
语法: useradd 用户名
如添加一个名为happy的用户:useradd happy

7.9 passwd
passwd,为新用户设密码
语法:passwd 用户名
如修改happy 的密码:passwdhappy

7.10 userdel
userdel,删除用户
语法:usedel 用户名
如:userdel happy,删除用户但保存用户主目录
如:userdel -r happy,删除用户以及用户主目录

7.11 history
history :历史命令
-c:清空历史命令
-w:把缓存中的历史命令写入到历史命令保存文件:~/.bash_history
建议不用清空历史文件:1 方便,2 便于排错容灾

历史命令的使用
使用上、下箭头调用以前的历史命令
使用“!n” 重复执行第n 条历史命令
使用“!!” 重复执行上一条命令
使用“! 字符串” 重复执行最后一条以该字符串开头的命令

如 service network restart==!ser
执行最后一条包含ser 字符串的命令,方便快捷

命令补全:tab 键,一下和两下

7.12 date
date命令:显示或设置系统时间或日期
可以在直接输入“date” 命令来查看系统的时间
date + %y/%m/%d
2017/06/15
date “+%Y-%m-%d %H:%M:%S”
2017-02-27 12:37:15

利用date 命令来更改系统的时间
date MMDDHHMMCCYY.SS:月 月 日 日 时 时 分 分 年 年.秒 秒
date -s “2017-08-15 21:32:25”

7.13 clear
clear ,清除执行记录,清除屏幕



8. 网络通信

8.1 ifconfig
查看本机当前网卡配置和网络状态信息



9. 文件搜索

9.1 which
which 查找“执行文件”
Which 指令会在系统环境变量 $PATH 设置的目录里去查找符合条件的文件
-a 将所有可找到的命令均列出,否则列出第一个找到的命令名称
Which 还可以查找别名 ,如 which ll

9.2 whereis
Whereis 寻找特定文件 whereis [-bmsu] 文件或目录
常见参数:
-b: 只找二进制文件(即可执行文件)
-m:只找在帮助文件,manual 路径下的文件
-s :只找源文件
-u: 没有帮助文件的文件

9.3 grep
grep ,在文本中查询内容
语法:grep 搜索字符串 fileName
如一个文件 Hello.java 中含有Lemon 关键字,可以使用grep 命令进行查找:
Grep -n Lemon Hello.java
其中的-n 表示在第n行

9.4 find
find ,搜索文件及目录
Linux 的文件系统由级别式的结构组成,所以在linux中找到特定的文件和目录并不是件容易的事。而“find” 命令可以解决上述问题
语法:find [路径] [选项]
查找时可以使用 linux 中通配符来匹配内容:
*:匹配任意内容
?:匹配任意一个字符
[] :匹配任意一个中括号的字符
如:
在这里插入图片描述
find 还有很多个性化的操作,如按照所有者、时间、大小限制 进行搜索,作为测试人员用的频率并不高,因此这里不再详述,感兴趣自己去了解下。
find 与 grep 命令的区别:
find :在系统中搜索符合文件的文件名
grep :在文件当中弄搜索符合条件的字符串



10. 文件权限管理

10.1 权限概述
Ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
10个字符确定不同用户能对文件干什么
第一个字符代表文件(-)、目录(d)、链接(l)
其余字符每3个一组 (rwx),读(r)、写(w)、执行(x)

第一组 rwx: 文件所有者的权限是读、写和执行
第二组 rw- :与文件所有者同一组的用户的权限是读、写但不能执行
第三组 r-- :不与文件所有者同组的其他用户的权限是读不能写和执行

用数字表示为:r=4 ,w=2 ,x=1 因此 rwx =4+2+1 = 7
1 表示连接的文件数
root 表示用户
root 表示用户所在的组
1213 表示文件大小(字节)
Feb 2 09:39 表示最后修改日期
abc 表示文件名

10.2 权限的作用

10.2.1 权限对文件的作用
r :读取文件的内容,cat more head tail
w :编辑、新增、修改文件内容 vi echo
(有写权限、但是不一定有权限删除,因为写指的是对下一级写权限,二能否删除,需要看上一级目录的权限)
x : 可执行

10.2.2. 权限对目录的作用
r : 可以查询目录下的文件名
w : 具有修改目录结构的权限,如新建文档和目录,删除该目录下的文件和目录,重命名该目录下的文件和目录,剪切(touch ,rm ,mv ,cp)
x :可以进入目录(cd)

10.3 文件权限命令

10.4 chmod
chmod 改变文件或目录的权限

赋值方式:
chmod 755 abc :赋予abc 权限 rwxr-xr-x

指定方式:
chmod u = rwx ,g= rx,o=rx abc :同上 u = 用户权限,g= 组权限,o=不同组其他用户权限

增加、减去
chmod u-x ,g+w abc : 给abc 去除 用户执行的权限,增加组写的权限
chmod a+r abc :给所有用户添加读的权限

10.5 chown
改变所有者(chown)
chown xiaoming abc :改变abc 的所有者为xiaoming
chown root ./abc :改变abc 这个目录的所有者是root
chown -r root ./abc :改变abc 这个目录及其下面所有的文件和目录的所有者是root

10.6 chgrp
改变用户组(chgrp)
chgrp root abc: 改变abc 所属的组为root
Chown root:root text.txt

10.7 usermod
改变用户所在组
在天剑用户时,可以指定将用户添加到哪个组中,同样用root的管理权限可以改变某个用户所在的组
usermod -g 组名 用户名
你可以用
usermod -d 目录名 用户名,改变该用户登录的初始目录

10.8 注意点
对文件来说:最高权限是 x ,隐藏对文件要慎用执行权限
对目录来说:最高权限是 w:只有赋0、 5(rx)、 7(rwx), 因此对目录来讲要慎用写权限

案例:新建用户 user1, 组为 user2
通过root修改某文件权限,通过user1 来进行验证

尽量赋予最小的权限,避免777 权限

10.9 案例

10.9.1 综合案例1
【题1.1】 建立两个用户组group1 和group2, 以及三个用户dennis、daniel、abigale,并且将前2个用户分配在group1 用户组下,最后一个分配在group2用户组下

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第10张图片
【题1.2】 以 dennis 用户登录,创建一个Hello.java文件
【题1.3】以daniel 用户登录,观察是否可以访问 /home/dennis 目录以及读或写其创建的Hello.java文件
【题1.4】以dennis 用户登录,修改目录/home/dennis 以及Hello.java文件的读写权限(更正:修改目录权限的时候,应该使用770,而不是760,否则权限不足)

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第11张图片
【题1.6】改变abigale的用户组由group2 变为 group1

在这里插入图片描述
然后,可以使用cat /etc/passwd 查看并确定

在这里插入图片描述
【参考】
groupadd 组名 ,在linux中添加组
vi /etc/group ,查看linux中所有组信息,可以看可以编辑
cat /etc/group ,查看linux中所有组信息,只可以看不可以编辑
useradd -g 组名 用户名,创建用户的同时指定将该用户分配到哪个组下
vi /etc/passwd , 查看 linux中所有用户信息,可以看可以编辑
cat /etc/passwd ,查看linux 中所有用户信息,只可以看不可以编辑

10.9.2 综合案例2
实例:
police、terrorists组
创建组:
groupadd police
groupadd terrorists
创建用户:
useradd -g组名 用户名
添加密码:
passwd tommy
给tommy 设置密码

查看linux 中所有用户的信息
vi /etc/passwd
cat /etc/passwd

改变用户的组:
usermod -g



11. 网络管理

11.1 虚拟机配置固定ip
1:查看宿主机的网络配置信息:打开windows的cmd 窗口,输入:ipconfig /all

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第12张图片
记录下上面标记的几条信息:

网关:192.168.0.100
子网掩码:255.255.255.0

DNS:
222.246.129.80
59.51.78.210

2.打开宿主主机的网络与共享中心,禁用掉虚拟机网卡
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第13张图片
3.虚拟机网络设置:选中虚拟机 -->右键 -->设置 -->网络适配器 -->选择桥接模式

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第14张图片
4:进入虚拟机,修改网卡文件如下
Vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.188
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=222.246.129.8
DNS2=59.51.78.210

设置说明:
DEVICE=eth0 #网卡名称
BOOTPROTO=static #网卡获得ip 地址的方式,static|dhcp|bootp,分别对应静态指定ip地址,通过dhcp 协仪获得的ip 地址,通过bootp 协议获得的ip 地址
ONBOOT = yes #开机启动
TYPE = Ethernet # 网络类型
IPADDR = 192.168.0.188 #本机地址,设置一个局域网没有用到的ip地址
NETMASK = 255.255.255.0 #子网掩码,保持和宿主机同
GATEWAY = 192.168.0.1 默认网关,保持和宿主同
DNS1 = 222.246.129.8 #主DNS ,保持和宿主机同
DNS2 = 59.51.78.210 #备用DNS, 保持和宿主机同

注:也可以修改成谷歌的公共DNS:

DNS1 = 8.8.8.8
DNS2 = 8.8.4.4

5: 重启网络服务,让配置生效
Service network restart
6: 测试网络,ping 一下网关:ping 192.168.0.1
7: 测试外网连接:ping www.baidu.com
8: 测试SSH连接,使用xshell 进行远程连接

11.2 网络相关命令
11.2.1 netstat
显示网络统计信息的命令 netstat
此命令用来显示整个系统目前的网络情况。例如目前的连接、数据包传递数据、或是路由表内容,此命令直接输入即可使用
netstat -app
an,按一定顺序排列输出
p,表示显示哪个进程在调用

11.2.2 ping
检测主机连接命令 ping
是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的介质是否为断、网线是否脱落或网卡故障
Ping 对方 ip 地址

11.2.3 tranceroute
显示数据包经过历程命令 traceroute
此命令可以直接输入使用,用来检测数据包在网络上传输的过程,从本机到远程的主机完整路径,帮助管理员解决问题

11.2.4 route
显示路径由表 route
所谓路由是 指将数据由来源网络送往目的网络的操作。在大型网络中,路由是非常复杂的,因为数据包在抵目的地时,可能经过的节点有很多,路由表是存储在路由器或一些其他链接设置上的窗体。其中记录着了到指定目的的网络路径,以及这些路径的相关数值
此命令可以直接输入使用,来查看本机路由的情况



12. 进程管理

12.1 进程概述
在linux 中,每个执行的程序都称为一个进程,每一个进程都分配一个ID 号
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如 www 服务器
每个进程都可能以两种方式存在的,前台与后台。所谓前台进程就是用户目前的屏幕上可以进行操作的,后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,知道关机才结束

进程与线程
进程:就是正在执行的程序
线程
轻量级的进程
进程有独立的地址空间,线程没有
线程不能独立存在,它是由进程创建
相对讲,线程耗费的CPU 和内存要小于进程

12.2 进程的管理
12.2.1 ps —查看进程
ps 命令是用来查看目录前系统中正在执行的进程以及进程的执行情况,可以不加任何参数,显示详细的进程信息
常见参数:
ps -a :显示当前终端的所有进程信息
ps -u :以用户的格式显示进程信息
ps -x :显示后台进程运行的参数
ps 显示的信息选项:
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第15张图片
12.2.2 kill —终止进程
kill/killall, 终止进程
如果某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程,使用kill 命令可以来终止某个进程

语法:kill 进程号
如:
kill 19231:终止进程号为19231的进程
kill -9 19231:因为有些进程会捕捉某些信号,直接kill 会被系统阻塞掉,此时可以用“-9”来强制杀出
killall:杀死同名的所有进程

12.2.3 top —动态监控进程
top 命令与ps 命令很相似。它们都用来显示正在执行的进程。top 与 ps 最大的不同之处,在于top在执行一段时间可以更新正在运行的进程

监视特定用户
top: 输入此命令,按回车键,查看执行的进程
u: 然后输入“u”灰尘,再输入用户名,即可终止指定的用户
top: 输入此命令,按回车键,查看执行的进程
k: 然后输入“k”回车,再输入要结束的进程ID号,指定系统状态更新的时间
top -d 10 : 指定系统更新进程的时间为10秒
top 显示选项解释

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第16张图片
1:52 ,表示系统启动了多久
1 user ,用户数
load average : 0.00 0.00 0.00 ,当前系统负载情况,一般来说,参数越小,系统运行的越轻松,当平均数>0.6时,系统就很紧张了。
38 processes,进程数
0 zombie , 僵尸进程数,相当于这个进程没有用了,还占用资源,比如父进程来不及收回子进程
CPU states:99.3% idle ,闲置的CPU
Mem,内存
Swap,类似于虚拟内存



13. 解压缩

13.1 .tar.gz 解压缩
Linux 下常见的压缩格式:.tar.gz 、 .zip 、 .gz 、 .bz2 、.tar.bz2

本篇主要讲解 .tar.gz 和 .zip 的压缩格式

13.1.1 .tar.gz 压缩
.tar.gz 格式是先打包为 .tar 格式,再压缩为.gz 格式

语法:tar -zxvf 压缩包.tar.gz文件
命令参数详解:
-c :建立归档
-z:压缩为.tar.gz格式
-v: 显示所有过程
-f: 使用档案名字,必须项,最后一个参数,后面空格接文件名
如:将test 文件(目录)压缩成 test.tar.gz 压缩包
tar -zcvf test.tar.gz test

13.1.2 .tar.gz 解压缩
将test.tar.gz 进行解压缩
tar -zxvf 压缩包名,.tar.gz
命令参数详解:
-x: 解归档
-z: gzip格式
-v:显示所有过程
-f : 使用档案名字,必须项,最后一个参数,后面空格接文件名
如:将 test.tar.gz 进行解压缩:
tar -zxvf test.tar.gz

13.2. zip格式压缩、解压缩
zip 、unzip 以zip 和 unzip处理 .zip文件

13.2.1 zip压缩—zip
Zip命令的基本使用方法
语法:zip[-r] 压缩后文件名 .zip 需要压缩的文件

如:
zip 压缩文件名 源文件
压缩目录:
zip -r 压缩文件名 源目录

如:将 test 文件压缩成test.zip,注意使用 -r 参数 ,否则会生成一个空目录
Zip -r test.zip test

13.2.2 zip 解压缩 —unzip
以unzip命令进行.zip文件的解压缩
格式 : unzip 压缩文件
如:将test.zip进行解压
unzip test.zip



14. 管道命令

管道使用“|” 符号,可以在命令间建立管道,将第一个命令的输出作为后面命令的输入
如:ll | grep abc
管道前面的命令 ll 是显示当前目录下的文件,后面的命令 grep abc 是从列出的文件名中寻找含有abc 字符串的文件或者目录
常见的管道符如下表所示:

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第17张图片
14.1 管道命令的应用
工作中常见应用:

14.1.1 查找端口
netstat -apn | grep 3306
通过netstat -pna 显示所有端口占用信息,采用管道符号将输出作为后一个命令 grep的输入,如果查询到了则会显示占用3306 端口的 进程编号等信息,假设查找到的进程编号为5541,进一步杀掉进程:
kill -9 5541

14.1.2 查询进程
ps -ef | grep tomcat
通过ps -ef 显示所有进程信息,采用管道符号将输出作为后一个命令grep 的输入,如果查询到了则会显示包含 tomcat 字符串的进程信息,假设查找到的进程编号为5541,进一步杀掉进程:
kill -9 5541



15. vi编辑器的使用

15.1 什么是vi/vim
vi编辑器是linux 下最有名的文本编辑器,也是我们学习linux必须掌握的工具,在linux 下也可使用vi 进行程序的开发,如java 程序、c 程序等,但目前使用比较多的是vim 编辑器,相当于vi 的加强版,vim 具有程序编辑的能力,可以对各种程序进行语法高亮。

15.2 vi/vim 的使用
vi/vim 包含三种模式:分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)

15.3 命令行模式(command mode)
启动vi/vim时,就进行了命令行模式,在该模式下,敲击键盘的动作都会被识别为命令。比如在该模式下按下i 键,会被当成是一个命令,即进入insert 模式的命令。
该模式下可以控制光标移动、字符或者行的删除等,下面是常用的几个命令:

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第18张图片

15.4 插入模式(insert mode)
命令行模式下输入i ,可以进入插入模式,只有在insert mode 下,才可以做文字输入,按[ESC] 键可回到命令行模式。
进入插入模式有三种方式,区别如下:
输入i 切换到插入模式,从当前光标位置开始输入文字
输入a 切换到插入模式,从当前光标所在位置的下一个位置开始输入文字
输入o 切换到插入模式,是插入新的一行,从行首开始输入文学

15.5 底行模式(last line mode)
命令模式下,可以输入:进入底行模式,底行模式下,可以操作将文件保存或退出vi 、也可以设置编辑环境、如寻找字符串、列出行号等。
进入底行模式,有以下常用的命令:
:q! 不保存退出
:w 保存
:wq 保存退出

15.6 其他常见操作
15.6.1. 搜索
输入/和需要搜索的字符串,按enter键可以进行搜索,如果首先找到的关键字不是你想要的,可以一直按n 键向后继续搜索,直到找到要搜索的关键字。

15.6.2 显示行数
输入 :set nu,显示每一行的行数

15.6.3 定位
输入:行数,如:100 ,可以定位到100 行

15.6.4 删除
插入模式下,可以使用delete 删除
x: 每按一次,删除光标所在位置前面一个字符
dd:按dd删除光标所在行

15.6.5 vi 字符替换
vi的 几种替换功能:

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第19张图片
vi 虽然具有非常强大的编辑功能,比如替换功能。但是因为在命令行模式下编辑相对复杂,所以很多时候复杂的操作我们一般在pc 机上操作完,再将文件上传到linux。

15.7 常见快捷键
vi/vim 下移动光标快捷键:

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第20张图片
15.8 实例
在linux 使用vi 创建一个hello.txt文件,编辑内容为”Hello Lemon” ,步骤如下:
第一步,命令行下输入:vi hello.txt ,进入文档编辑器中的命令模式,vi hello.txt命令编辑或创建hello.txt,如果存在则编辑该文件,不存在则创建
第二步,按下i键,进入插入模式,输入内容”Hello Lemon”
第三步,按esc键,退出编辑模式,按: 进入底行模式,输入wq,退出编辑并保存。



16. mysql 安装和配置

Mysql 是一个关系型的数据库管理系统,并且使用结构化查询语言(SQL)进行管理。因其体积小、速度快、开源免费等诸多优点,成为当下中小型网站的首选数据库。
本节教大家在linux 下采用在线安装的方式快速搭建mysql 数据库管理系统。

16.1 yum 在线安装
yum (Yellow dog Updater,Modified) 是一个shell前端软件包管理器,基于RPM包管理,Yum仓库是为了进一步简化RPM管理软件难度而设计的。Yum可以根据用户的指令、分析出需要的软件包以及相关的依赖包,自动从指定的服务器下载软件包并进行安装,可以自动处理依赖性关系,不需要繁琐的去进行各种依赖包的下载安装,因此yum 在线安装方式较源码编译安装简单、方便,适合初学者在linux下进行软件安装。
Root用户登录linux ,输入一下命令:
yum -y install mysql-server

16.2.启动数据库
上面安装过程大家可以对在 windows机器上的软件安装。 MySQL数据库管理系统是一个软件,使用软件的前提是打开软件(启动数据库)
输入一下命令,然后按回车键,启动 MySQL数据库管理系统。
service mysqld start
当出现如下过程的时候表示数据库启动成功,第一次启动会初始化 MySQL的系统表及相关数据。

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第21张图片
Service 是linux中管理系统服务的命令,语法格式是
service 服务名 {start|stop|restart|status}
采用yum 进行mysql 在线安装后,会在linux 中生成一个mysql的服务,注意服务名最后有一个字符”d”,表示守护进程。守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务,这里不详述。
特别注意的是,如果没有设置mysql 开机启动,那么每次linux 关机再启动后,mysqld 服务会被关闭,请使用service mysqld status 命令确保 mysqld 服务是在运行状态,否则无法使用数据库服务。

16.3 命令行模式操作 mysql
启动数据库后,输入命令mysql直接进入mysql的命令行下(即登录数据库):

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第22张图片
注意该模式与linux命令行模式的区别,mysql命令行模式下只能输入SQL语句,如果要退出到linux 命令行模式下,可以输入exit、quit 或者使用快捷键ctrl+c。
登录到mysql 下后,可以使用如下命令查看关联系统中存在的数据库。
show database;
注意SQL语句需要英文的分号结尾,回车运行该语句后,列出了已经存在的三个系统自带的数据库。

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第23张图片
16.4 配置mysql 连接用户
16.4.1 linux 本机登录mysql
为什么上面输入mysql 命令能够直接登录数据库呢 ,因为没有mysql 数据库管理系统中存在一个系统库mysql,该数据库中的user 表维护了能够登录管理系统的用户、主机和密码等信息。
输入以下语句使用mysql库
use mysql;

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第24张图片
输入以下语句查看支持连接到数据库管理系统的用户、主机和密码信息
select user,host,password from user;

输入语句回车,上图显示的列表中,每一个行信息表示一个可以连接到mysql 管理系统的用户,user 列表示登录用户名称,host 表示支持连接的主机,password 表示登录密码(上面5个用户的登录密码都为空)。
输入mysql 时,没有指定用户名、主机名和密码,使用的是列表中的第4个用户进行登录,那怎么使用第一个用户进行登录呢?很简单,通过-u 参数指定用户名
mysql -u root

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第25张图片

或者加上-u 参数指定用户名,-p 参数,然后回车,会提示输入密码,第一个用户的密码为空,所以直接回车,也可以登录到数据库管理系统
mysql -u root -p

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第26张图片
16.4.2 其他主机登录mysql
同理,其它主机要登录到mysql,就需要把主机的ip 地址配置到user表中。而学习过程中,我们一般配置一个“%”的主机,表示通配所有的主机,任何主机只要网路是连通的就可以登录到mysql管理系统。

Mysql 中可以直接采用授权的方式新增支持登录的用户信息记录,赋权语句如下:
grant all privileges on . to ‘root’@’%’ identified by ‘123456’ with grand option;
表示新建一个用户,登录用户名为root 、主机名为通配符“%”、密码为“123456”,拥有对数据库的超级管理权限。
输入下面语句使授权生效:
flush privileges;
执行上面两条SQL后,我们再来 看一下user表中的信息。
select user,host,password from user;

16.4.3 远程连接mysql 服务器
采用上面新建的连接用户信息,打开Navicat For MySQL软件远程连接mysql 数据库管理系统。
点击连接,弹出输入连接信息框
在这里插入图片描述
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第27张图片
输入正确的连接信息:数据库对应服务器的ip、登录用户名root、密码123456,点击左下角的连接测试,如果弹出连接成功,表示连接信息无误。
点击确定保存连接,双击连接,可以直接连接上mysql 管理系统。
如果连接不上,检查数据库服务是否启动、连接信息是否填写正确,另外查看防火墙是否关闭,如果没有关闭,关闭掉防火墙。

16.5 Yum 方式卸载mysql

一:输入以下命令:
yum -y remove mysql*
执行完成后出现如下完成提示
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第28张图片
二:查找mysql安装文件
find / -name mysql
在这里插入图片描述
三:用 rm -rf 删除查找出mysql 文件
Rm -rf /var/lib/mysql



面试题

1.绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?

答案:
绝对路径: 如/etc/init.d
当前目录和上层目录: ./ …/
主目录: ~/
切换目录: cd

2,怎么查看当前进程?怎么执行退出?怎么查看当前路径?
答案:
查看当前进程: ps
执行退出: exit
查看当前路径: pwd

3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户 id?查看指定帮助用什么命令?

答案:
清屏: clear
退出当前命令: ctrl+c 彻底退出
执行睡眠 : ctrl+z 挂起当前进程fg 恢复后台
查看当前用户 id: ”id“:查看显示目前登陆账户的 uid 和 gid 及所属分组及用户名
查看指定帮助: 如 man adduser 这个很全 而且有例子; adduser --help 这个告诉你一些常用参数; info adduesr;

4、Ls 命令执行什么功能? 可以带哪些参数,有什么区别?
答案:
ls 执行的功能: 列出指定目录中的目录,以及文件
哪些参数以及区别: a 所有文件l 详细信息,包括大小字节数,可读可写可执行的权限等

5、建立软链接(快捷方式),以及硬链接的命令。
答案:
软链接: ln -s slink source
硬链接: ln link source

6、目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
答案:
创建目录: mkdir
创建文件:典型的如 touch,vi 也可以创建文件,其实只要向一个不存在的文件输出,都会创建文件
复制文件: cp 7. 文件权限修改用什么命令?格式是怎么样的?
文件权限修改: chmod
格式如下:
$ chmod u+x file 给 file 的属主增加执行权限
$ chmod 751 file 给 file 的属主分配读、写、执行(7)的权限,给 file 的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
$ chmod u=rwx,g=rx,o=x file 上例的另一种形式
$ chmod =r file 为所有用户分配读权限
$ chmod 444 file 同上例
$ chmod a-wx,a+r file同上例
$ chmod -R u+r directory 递归地给 directory 目录下所有文件和子目录的属主分配读的权限

7、查看文件内容有哪些命令可以使用?
答案:
vi 文件名 #编辑方式查看,可修改
cat 文件名 #显示全部文件内容
more 文件名 #分页显示文件内容
less 文件名 #与 more 相似,更好的是可以往前翻页
tail 文件名 #仅查看尾部,还可以指定行数
head 文件名 #仅查看头部,还可以指定行数

8、随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?
答案:
写文件命令:vi
向屏幕输出带空格的字符串:echo hello world

9、终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
答案:
终端 /dev/tty
黑洞文件 /dev/null

10哪个命令专门用来查看后台任务?
答案:
job -l

11、移动文件用哪个命令?改名用哪个命令?
答案:
mv mv

12、复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
答案:
cp cp -r ????

13、删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?
答案:
rm rm -r rmdir

14、Linux 下命令有哪几种可使用的通配符?分别代表什么含义?
答案:
“?”可替代单个字符。
“*”可替代任意多个字符。
方括号“[charset]”可替代 charset 集中的任何单个字符,如[a-z],[abABC]

15、用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)
答案:
wc 命令 - c 统计字节数 - l 统计行数 - w 统计字数。

16、Grep 命令有什么用? 如何忽略大小写? 如何查找不含该串的行?
答案:
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。
grep [stringSTRING] filename grep [^string] filename

17、Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
答案:
(1)、不可中断状态:进程处于睡眠状态,但是此刻进程是不可中断的。不可中断, 指进程不响应异步信号。
(2)、暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响应该信号 而进入 TASK_STOPPED 状态;当进程正在被跟踪时,它处于 TASK_TRACED 这个特殊的状态。
“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。
(3)、就绪状态:在 run_queue 队列里的状态
(4)、运行状态:在 run_queue 队列里的状态
(5)、可中断睡眠状态:处于这个状态的进程因为等待某某事件的发生(比如等待 socket 连接、等待信号量),而被挂起
(6)、zombie 状态(僵尸):父亲没有通过 wait 系列的系统调用会顺便将子进程的尸体(task_struct)也释放掉
(7)、退出状态
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程

18、怎么使一个命令在后台运行?
答案:
一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格)

19、利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息?
答案:
ps -ef (system v 输出)
ps -aux bsd 格式输出
ps -ef | grep pid

20、查看各类环境变量用什么命令?
答案:
查看所有 env
查看某个,如 home: env $HOME

21、把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?
答案:
把后台任务调到前台执行 fg
把停下的后台任务在后台执行起来 bg

22、终止进程用什么命令? 带什么参数?
答案:
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
kill-9 pid

23、怎么查看系统支持的所有信号?
答案:
kill -l

24、搜索文件用什么命令? 格式是怎么样的?
答案:
find <指定目录> <指定条件> <指定动作>
whereis 加参数与文件名
locate 只加文件名
find 直接搜索磁盘,较慢。
find / -name “string*”

25、查看当前谁在使用该主机用什么命令? 查找自己所在的终端信息用什么命令?
答案:
查找自己所在的终端信息:who am i
查看当前谁在使用该主机:who

26、使用什么命令查看用过的命令列表?
答案:
history

27、使用什么命令查看磁盘使用空间? 空闲空间呢?
答案:
df -hl
文件系统 容量 已用 可用 已用% 挂载点
Filesystem Size Used Avail Use% Mounted on /dev/hda2 45G 19G 24G 44% /
/dev/hda1 494M 19M 450M 4% /boot

28、使用什么命令查看网络是否连通?
答案:
netstat

29、使用什么命令查看 ip 地址及接口信息?
答案:
ifconfig

30、你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?

答案:

使用linux命令 ’disown -r ’可以将所有正在运行的进程移除。

31、bash shell 中的hash 命令有什么作用?

答案:

linux命令’hash’管理着一个内置的哈希表,记录了已执行过的命令的完整路径, 用该命令可以打印出你所使用过的命令以及执行的次数。

[root@localhost ~]# hash

hits command

2 /bin/ls

2 /bin/su

32、哪一个bash内置命令能够进行数学运算。

答案:

bash shell 的内置命令let 可以进行整型数的数学运算。

#! /bin/bash


let c=a+b

33、怎样一页一页地查看一个大文件的内容呢?

答案:

通过管道将命令”cat file_name.txt” 和 ’more’ 连接在一起可以实现这个需要.

[root@localhost ~]# cat file_name.txt | more

34、数据字典属于哪一个用户的?

答案:

数据字典是属于’SYS’用户的,用户‘SYS’ 和 ’SYSEM’是由系统默认自动创建的

35、怎样查看一个linux命令的概要与用法?假设你在/bin目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?

答案:

使用命令whatis 可以先出显示出这个命令的用法简要,比如,你可以使用whatis zcat 去查看‘zcat’的介绍以及使用简要。

[root@localhost ~]# whatis zcat

zcat [gzip] (1) – compress or expand files

36、使用哪一个命令可以查看自己文件系统的磁盘空间配额呢?

答案:

使用命令repquota 能够显示出一个文件系统的配额信息

【附】只有root用户才能够查看其它用户的配额。

最后,为方便大家自学软件测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第29张图片
包括,软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助……

关注我公众号:【程序员二黑】即可获取这份资料了!

关注我公众号:【万言尽书上】回复【小程序】获取其他资料

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+_第30张图片



推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救

大学毕业开始销售…不甘于现状,转行测试的自救之路

从销冠到失业,最后选择软件测试,回头看看这段路,我很幸运!

你可能感兴趣的:(linux,github,python)