测试
文章平均质量分 89
我乐了.
这个作者很懒,什么都没留下…
展开
-
持续集成体系--Jenkins
接下来,我们看下持续集成、持续交付、持续部署这三者的区别,如图所示,从图中我们可以发现,从开发、构建到测试,如果整个阶段频繁地进行集成、测试,这个阶段就称之为 CI 持续集成。持续集成有非常多的管理工具,在这里我推荐你使用 Jenkins,大家可以在维基百科中查看相关的总结,这份总结中把目前行业里流行的各种各样的工具进行了统计和分析,你可以发现其中 Jenkins 是功能最全的,使用人群基数最大的,当然随着技术的发展进步,除 Jenkins 之外,还会涌现出越来越多的优秀的持续集成工具。原创 2024-01-22 14:39:10 · 763 阅读 · 0 评论 -
接口测试演练
删除操作也是类似的,删除操作依赖上一次添加成功,如果上一步添加失败了删除也必定受影响,所以通常情况下我们不会依赖上一步的操作结果,除非对上一个操作的结果依赖很重,比如说无法便捷重复的执行依赖步骤,所以大多数情况下会独立创建一个 case,以 delete 为例,我们把添加的代码复制过来,然后为了避免数据冲突我们先添加一个 demo05,因为 deme05 会多次使用,所以我们把它改写成一个 name 参数并完成改造,这样就算上个 case 添加失败也不会影响 delete 操作。原创 2024-01-22 14:36:58 · 743 阅读 · 0 评论 -
接口测试框架
综上所提到的能力,我为大家推荐目前行业里知名度最高的http请求框架 requests,requests 可以非常完备地进行 HTTP 的接口测试,它对 HTTP、HTTPS 的支持非常全面,使用也非常简单,不需要关心底层的细节,系统已经做了很好的封装,同时它的定制性也非常强,可以提供各种进阶功能,帮你完成一些通用的流程处理,接下来我们看下这个框架应该如何使用。我们可以利用这个办法,去加一个断言,使用 r.json,它就会取出来里面的 JSON 对象,对 JSON 对象的具体结构进行访问。原创 2024-01-22 14:35:54 · 394 阅读 · 0 评论 -
Seion 与 Cookie 的区别
然后再看 session,我们刚才设置了一堆数据,session 也设置了,session 传过来之后会发现,它没有 cookie 的前缀,因为刚才加的是 cookie 特有的,所以它也是个 cookie,只不过是服务端自动生成的一个指令,从而指定的 cookie,它不是我们手工设置的,是写死的一个东西,即 session=“……当你要以 API 的形式进行访问时,需要有一个认证,也就是需要知道你是谁,在生成认证的时候,会发现它这儿需要你填一个东西,比如我们这次填的是 hogwards2020。原创 2024-01-22 14:34:18 · 314 阅读 · 0 评论 -
代理工具与高级 Mock 使用(上)
通过造一个假的网站,然后客户端程序会发一个认证请求到远程网站,如果你知道它的交互协议,抓到它的交互内容,接下来就可以拦截它,然后把限制的内容改成通过的状态,这样就可以实现一定程度上的破解。同样我也有一个 App,比如刚刚说的菜品,每次重大修改也很困难,那么我可以把这些数据提前填好,这样不管是 100 个菜品还是 1000 个菜品的,在每次修改之前,都可以提前存到一个目录里面,当你的网络请求开始访问某个域名时,强行把这个网络访问请求直接转向本地的文件。第 2 个是限速的模拟。我们用的比较多的还是正常的代理。原创 2024-01-22 14:32:40 · 897 阅读 · 0 评论 -
接口常用协议讲解
Tcpdump 是 Linux 下非常经典的一个工具,如图所示我给你做一个简单的展示,因为监听网络层的数据是比较敏感的,所以我们需要 root 权限,并配置对应的主机,然后 Tcpdump 会帮你去监听发送的数据包。接下来,我们再来看看与 Tcpdump 配合的另外一个叫作 WireShark 的工具,它可以在桌面监控数据包的发送,同时还可以分析 Tcpdump 产生的日志文件,它本身的 UI 设计非常好,可以把数据包的细节分析的非常透彻。了解了这些常见的协议后,接下来我们看下如何分析这些协议。原创 2024-01-22 14:29:49 · 962 阅读 · 0 评论 -
App 自动化测试演练
我们来具体看下,如果我们的 Appium 要运行在某一台具体的设备上,通常需要设置一个 udid 的标记,udid 代表了设备的名字,既然在运行的过程中它需要根据一定的条件去跑不同的设备,自然就需要有一个能控制它的地方,采用多进程方式我们可以使用环境变量的方法,比如在代码中使用 os.getenv 就可以从 环境变量里读取传进来的 udid 变量,然后 Appium 在运行的过程中就可以发现 udid,它会运行在 udid 指定的设备上,那 udid 是如何传递的呢?原创 2024-01-22 14:27:37 · 816 阅读 · 0 评论 -
iOS 自动化测试
你可以根据本地的条件进行选择,最后一个参数叫作 app,app 就是刚才构建完成后的包地址,配置完这些参数一个 iOS 模拟器的自动化测试就完成了,接下来的流程就是驱动模拟器完成相应的操作,我们的 case 步骤是打开 UICatalog App,然后点击 Alert Views,随后点击 Text Entry 模拟一个输入操作,然后点击 OK 按钮。iOS 里面通常通过 ID 和。在这里我创建了一个文件叫 test_ios,专门用来测 iOS 包,在 iOS 文件里我们看下怎么去写 iOS 的测试用例。原创 2024-01-22 14:26:03 · 787 阅读 · 0 评论 -
WebView 自动化测试
第一个重要的配置项叫作 chromedriverExecutableDir,这个配置项主要用来解决ChromeDriver的版本问题,比如雪球内嵌了一个自带的 WebView 内核,但是还有一些诸如微信小程序的工具,它可能自己内嵌一个完整的 Chrome 内核,这个时候内嵌的内核的版本可能与系统自带的版本不同,这样每个 App 可能需要不同版本的 ChromeDriver,这种情况下,chromedriverExecutableDir 可以存放所有用到的 ChromeDriver 版本。原创 2024-01-22 14:23:05 · 942 阅读 · 0 评论 -
Android 自动化测试
接下来我们就看来一下该怎么去完成它。我们先进入 case。setup class里需要有 stock_select() 和 clear_all()。接下来定义一个 testcase,在 case 内调用它的 select 方法,然后再调用 get_stocks() 取出所有的股票,接着断言,最后使用 Pytest 的一个参数化方法,它可以帮我们完成多个 testcase,这样就可以增加各种各样的 case 了。case 已经有了,接下来我们看一下我们的 PO 是怎么定义的?原创 2024-01-22 14:14:32 · 750 阅读 · 0 评论 -
Page Object 模式(移动端)(上)
首先打开 App 进行搜索,点击搜索栏后会进入一个新的页面,我们在该页面输入搜索的内容,比如搜索阿里巴巴,输入完后会跳转到搜索结果页。PO 模式前面也已经讲过了,当时主要针对 Selenium,但是其实它是完全可以应用到 Appium 上的,因为无论是 Appium 还是 Selenium,都有 UI 端的自动化,它们的设计理念和所面临的问题,在本质上是一样的。比如雪球行情底部的按钮,当你进入页面时,它其实是在中间的位置,但想要点击时会发现这个位置是错的,因为在列表加载完成的时候,它的位置会动态变化。原创 2024-01-22 14:11:34 · 897 阅读 · 0 评论 -
Appium 框架常用自动化 API
然后我要获取它的价格,这个时候我们就要用 text, text 获取的内容其实是一个文本,我们要断言这个文本大于 100,但如果你直接 aseert 大于 100,肯定会报错的。我截出 Android App 的某一个界面的page source,你可以看到它里面包含了很多层级结构,每一层里面有一个控件,它会将一个标签设置为控件的类名,里面有各种属性、有是否可选、是否已经选中,以及它实现的类,除此之外,还有 content-desc、clickable 等, 所有这些内容其实都是它的基本属性。原创 2024-01-22 14:08:30 · 781 阅读 · 0 评论 -
Appium 自动化测试框架
因为它的底层横跨两个框架体系,巧妙的借助 Android 的两个自动化测试体系生态,一个是 Instrumentation,一个是 Automator,借助这两个技术栈,它就可以实现 Android 所有版本的自动化支持。我们再深入拆解一下 Appium 框架的技术架构,如图所示,你会发现你的安卓脚本,比如 Java 测试脚本和 Python 测试脚本会跟 Selenium 一样,通过 HTTP 请求发给 Appium 的一个 server,Appium Server 会把你的请求再转发给底层各个手机上。原创 2024-01-22 14:03:38 · 935 阅读 · 0 评论 -
Web 自动化测试演练
然后还有一个是 Allure 框架,它也提供了一个非常漂亮的 HTML 报告,我们在前面的课程里面给你讲过,你要把它应用在你的框架里面,这样你的框架才会更易用,更易于维护,同时也能够更健壮,可以处理好各种异常处理流程。这次我根据作者进行搜索。搜索完成之后仍然是当前的结果页,注意,这个时候它也是 PO,只不过 return 的是它自己self。接着运行用例,解决完一些细节问题后, case就可以运行通过了,你可以看到,我们搜 wayyt,搜出来他所发的几个帖子,然后每一个结果也都是符合我们的预期的。原创 2024-01-21 17:59:52 · 806 阅读 · 0 评论 -
Page Object 模式(Web 端)
那么封装的逻辑首先以页面为单位去建模,然后隐藏内部的实现细节,本质上是一个面向抽象的编程,优点是大量的 find、click 在测试用例里看不到了,提高了测试用例的易读性,因为修改对测试用例的影响非常小,通过 PO 封装就可以实现修改范围可控,只需要在底层修改一个地方,就可以保证原有测试用例本身没有什么变化,因为修改也是在 PO 层面进行的,测试用例基本是保持不变,这就是 PO 模式的一个优点。不需要建模 UI 内的所有元素,一个页面有非常多的控件你也不需要将所有控件都表示出来,用到那个就写那个。原创 2024-01-21 17:51:48 · 911 阅读 · 0 评论 -
Selenium 常用自动化 API
输入完成之后就会进入搜索结果页面,在结果页中我们想断言第一个搜索结果的标题中是否匹配我的关键字,这个时候就可以继续使用检查找到它的 selector,我们继续使用 CSS 定位符,然后需要断言它的内容,我们看下它的定位符“ember377”,很明显定位符里面包含数字,如果下次跑 case 时数字变化了,case 就会失败,通常情况下如果我们发现定位符写的不够精准就需要去找到正确的稳定的定位符。在平时写代码时我们也会尽量使用 find_element 方法, 然后在方法中设置我们需要定位控件的定位符。原创 2024-01-21 17:47:19 · 818 阅读 · 0 评论 -
Selenium 显式等待与隐式等待
显式等待通常用于解决隐式等待不足以解决的问题场景,比如说有的时候元素本身已经存在但是我想捕捉的是元素的状态切换,比如可点击或可见状态,这个时候控件已经存在,如果不利用显式等待就不是很好处理这样的需求,这个时候我们就需要使用显式等待,它可以用来捕捉元素的转态改变。,顾名思义,死等就是一直等待,死等对于新手比较友好,比如我发现某个控件没有出现,就通过 sleep 等待 5 秒钟,这样 sleep 就会让控件强行进入等待,显然这样会拖长我们的测试用例运行时间,所以通常情况下不建议你去使用死等。原创 2024-01-21 17:45:12 · 1021 阅读 · 0 评论 -
Selenium 框架安装与使用
我们回到项目中,给你看下 case 的基本结构,这是我们已经录制好的 case,你可以看到类名叫作 TestSearch,然后 setup、teardown 方法中都有完整的对浏览器 Driver 的初始化及退出处理,中间代码是测试的 case,这基本上就符合我们的测试用例结构的,首先是导入依赖,接着是创建Driver,然后执行你的 case,最后在加一个断言就可以了,断言你可以使用 assert 去获取某一个控件的内容或者属性。Windows的同学可以使用Git Bash。原创 2024-01-21 17:40:02 · 883 阅读 · 0 评论 -
Redis高性能缓存数据存储
除了这个方法之外,还有一个方法是我们的 Redis Python 客户端,在 Redis 官网上可以看到提供了很多的客户端连接工具,我们现在已经完成了部署,那么怎么去连接呢,你可以从官网的 Clients 里面查找各个语言的客户端,比如 Python语言,Python 语言下有很多的库,你可以自行查找自己想要使用的库,比如它推荐使用 redis-py,我们就可以直接使用 redis-py 来进行连接。这里我们没有把它放到后台而是放到了前台,你可以使用 docker的-d 参数实现后台启动。原创 2024-01-21 17:35:08 · 842 阅读 · 0 评论 -
SQL 语法与关键知识点
在查询出结果之后,有的时候我们就需要在结果中筛选一个特定条件的子集,这个时候就需要使用条件查询,条件查询语句就是在 select 语句之后,甚至是 updata、delete 语句之后,添加上一个至关重要的 where 语句,它可以限定一些你想要的条件,那么条件都包含哪些呢?除此之外,最后我们来学习一个聚合查询,聚合查询在我们的工作中也非常有用,通常它用来统计一些特定数据,比如说统计员工表中男女员工的人数,你就可以使用 group by 来对某一个字段进行分类,从而计算表中的一些相关数据。原创 2024-01-21 17:22:53 · 750 阅读 · 0 评论 -
MySQL 数据库搭建与操作
以上就是行业中经常会用到的数据库,本课时我们就以 MySQL 为例,来学习和使用数据库。我们先看下 MySQL 的介绍,我们打开 MySQL 的官网,官网上对我们最有用的就是文档了,MySQL 的所有知识点都在文档内,你还可以看到 MySQL 下的所有产品,除了数据库、存储引擎外还有连接客户端程序、工作台等都可以在官网中下载。然后打开文档,MySQL 的所有基础知识就都包含在内了,你可以课下学习它们的官方手册,现在 MySQL 的最新版本是 8.0,但是行业中使用最多的还是 5.0 版本。原创 2024-01-21 17:17:02 · 915 阅读 · 0 评论 -
名企算法真题剖析(上)
接下来,通过 pre 在当前的节点进行插入,插入一个节点和以前的逻辑一样,首先创建一个节点,然后把当前节点的 next 指针等于 5 这个节点,然后定义一个新的节点 node.new 等于 LinkNode 并传入 data,最后让 node_next.nex 等于现在的 item,并让上一个节点 pre.next 等于 node_new,通过这样的方法节点就被正确的插入链表,然后运行 case。我们接下来剖析链表的考题,这里需要你创建一个有序的链表,并做有序的数据插入。原创 2024-01-21 17:04:31 · 797 阅读 · 0 评论 -
树结构及经典考题剖析
这样就完成了一个递归思路,通过这个办法,我们可以先打印核心的根节点,然后再打印 left 和 right,而在打印 left 的时候,left 可能又有新的子节点,所以又把它传递一次递归,这样就打印了左节点的数据,接着再打印左节点下面的左节点。首先,我们先来看下什么是树结构,树结构的定义是如果有一种数据,它既有自己的核心字段,同时又有指向它的若干个子节点,其中子节点下面又可以嵌套更多的子节点,这样便形成了一定的层级关系,这种结构看起来像是一颗翻转过来的树,所以被称为树结构。如果不是的话,就直接打印数据。原创 2024-01-21 16:58:27 · 767 阅读 · 0 评论 -
链表及经典考题剖析
那到底什么是链表呢?我们从最简单的单链表开始学习。单链表首先有一个数据字段,用来存储数据;其次它还有一个指针,但这个指针不同于 C++ 中的指针,这里的指针是指向下一个节点,它用来标记并链接下一个节点,然后下一个节点的 next 字段再链接到它的下一个节点,依次类推,便形成一个单链表。除了单链表之外,常见的还有单向循环链表,可以让链表尾部节点的 next 指针指向头节点。然后是双向链表,增加了一个 pre 字段,它既可以向前指也可以向后指。我们今天就先以单链表为例,来给你演示如何定义和使用链表。原创 2024-01-21 16:51:34 · 780 阅读 · 0 评论 -
栈与队列及考题剖析
通过前面的讲解我们知道,栈本身是后进先出用来存储数据的,并且可以进行压栈和弹栈操作,即通过 push 操作压栈,通过 pop 操作弹栈。那么栈具体是怎么实现的呢?我们接下来通过代码演示栈的实现,首先创建一个 test_struct 测试文件,创建完测试文件后创建一个数据结构来模拟栈的压栈/弹栈操作。原创 2024-01-21 16:47:03 · 901 阅读 · 0 评论 -
排序算法考题与经典冒泡排序算法剖析
我们通过动图已经了解了冒泡排序的原理,接下来我们来编写一个冒泡排序算法,首先我们创建一个 TestSort 的测试用例,并在测试用例中创建一个 TestSort 的测试类,然后给定一个 setup 数据,setup 数据会在每个 case 执行之前生成一组数据,比如我们使用 self.data=[3,1,5,2,4],这个数据排完序的期望值 self.except_data=[1,2,3,4,5],这样我们的初始数据就有了。比如你的某个算法的时间复杂度是 O(1),也就表示代码执行中没有任何循环;原创 2024-01-21 16:42:05 · 799 阅读 · 0 评论 -
Java 语言在测试行业的地位及知识梳理
然后,我们再来看下开发工程师的语言体系,开发工程师的语言体系和测试工程师就不太一样了,Java 是开发领域中使用最多的一个语言,其次是 C/C++,以及后面新起的 Go 语言,国内大多数的搜索、商城、推荐、交付、消息管道等系统都是构建在 Java、C/C++ 之上的,目前国内使用 Python 来构建自己完整技术栈的公司并不多,只有豆瓣和知乎。但如果你想要有更高的发展,就需要掌握如何去构建与公司技术架构相适应的测试体系,其中最为重要的是测试的左移和右移。那么作为一个测试工程师该如何构建自己的技术栈呢?原创 2024-01-20 14:24:57 · 296 阅读 · 0 评论 -
Python 面试考点梳理+真题剖析
在数据结构与算法中还会考察你对基础数据的分析和统计能力,比如有一个几十万行的日志,我们如何从中统计出错的日志,以及它的基本数据情况是什么的,这里涉及一系列的数据查找汇总知识,具体的内容我们会在数据结构与算法课时进行详细讲解。在语法知识中,面试官会考察你对基本语言的掌握程度,这里会问你一些最经常用到的编程语法,比如 super、self、cls 等如何使用,以及异常处理、循环相关的语法知识,主要考察你在实际工作中有没有具体用过这些语法。,但是因为列表只有 5 个元素,所以使用切片的结果为空。原创 2024-01-20 14:23:48 · 369 阅读 · 0 评论 -
Python 测试框架使用
pytest 还有一个功能是参数化,参数化也是一个很有趣的特性,它使用的是pytest.mark.parametrize,可以给 parametrize 传入一个列表,这个列表里中定义了一个数据,每个列表中是一个集合,这个集合会被拆分给函数,我们结合演示在语法上可以看得更清楚一点,首先进行参数化,第一个参数是参数的名字,第二个参数是一个数组,也就是你需要传多个 case 的数据,每个数据之间需要用元祖切分。设置完成之后你就可以发现三角箭头,点击运行测试用例,此时系统会报错,这是为什么呢?原创 2024-01-20 14:22:52 · 885 阅读 · 0 评论 -
Python 语法知识
我们首先定义了一个列表并往里面进行赋值,然后可以使用 for in 结构的语句来进行循环遍历,在 interviewee 中判断 age 的范围,然后根据 age 的范围进行一个初始化的判断并输出不同的结果,for 遍历循环的特点是 for in 结构使用非常简单,可遍历的数据结构都可以使用 for in 结构来遍历数据。第一种方式通过 def 语句定义函数,def 后定义一个函数名,函数名后括号里的是传入函数的参数,函数体内只简单打印相应的参数,通过这种方式创建的函数通常叫作命名函数。原创 2024-01-20 14:21:06 · 823 阅读 · 0 评论 -
Python 数据结构剖析
我们最后看下词典,词典在测试领域应用的非常多,我们创建一个命名为 element_dict 的词典,词典定义时使用 {},它允许你根据内容做一个 key-valve,比如 "a":1、"b":bcd,打印结果你可以看到它也是一个序列,只是序列中的元素变成了 key-valve 形式,我们也可以通过 element_dict["mn"]=mmmmmm 语句往词典中追加内容。我们也可以简单的将集合理解为列表,但它与列表最大的区别在于集合是无序的,它只关注数据本身是否在集合中但并不关注数据的顺序。原创 2024-01-20 14:03:26 · 865 阅读 · 0 评论 -
Python 安装以及使用 PyCharm 新建项目
除此之外,我们可能会遇到一些特殊情况需要添加依赖库,这时便可以在项目设置中进行添加,目前默认使用的是 pip 和 setuptools 工具,如果你想增加一些第三方库,可以在搜索栏中进行搜索,搜索完成之后添加到项目中,此时加载速度比较慢是因为大部分三方库的服务器都在海外,如果你想加载更快一些可以把豆瓣和阿里云的镜像添加进去,这样安装速度就会快很多。输入 python 指令,会自动进入 Python 环境,你可以看到这个环境是一个交互式的环境,在这个环境中你可以运行 Python 的相关语法。原创 2024-01-20 14:01:59 · 970 阅读 · 0 评论 -
Linux 与 Shell 名企面试考点梳理与真题剖析
以上这些只是列举了面试过程中面试官经常问到的问题,当然在实际面试中你可能还会遇到各种各样的考题,但万变不离其宗,只要你对 Linux 与 Shell 的基础知识掌握的够扎实,并能够在日常的工作中多总结经验,灵活运用所掌握的知识,一定能够很好地回答面试中的考题,如果你对如何解答问题没有把握,也要将你的解题思路阐述给面试官,让面试官看到你对问题的思考能力。最后是进阶问题,如何进行性能分析,前面的两关,第一关是摸底,第二关是考察你对具体命令的熟悉程度,第三关则重点考察你的综合能力,以及对性能的分析能力。原创 2024-01-20 14:00:07 · 868 阅读 · 0 评论 -
Shell 编程核心技术(下)
执行脚本,传入一个参数 java,没有任何显示,再传入一个 python 仍没有反应,直到传入 python java 两个参数后,才输出 java 测试开发,因为 hogwarts 接收的是整个脚本的第二个参数。比如第二个参数是包含空格的,将 "m n" 作为一个完整的参数传递给脚本并执行,你会发现第二个参数是 m n,但其实 $@ 与 $* 的值已经发生了变化,$* 会将参数打散,而 "$@" 则不会。想要编写一个 Shell 脚本,首先需要掌握的是注释,注释以 # 开头,用于增加脚本可读性;原创 2024-01-20 13:59:04 · 759 阅读 · 0 评论 -
Linux 三剑客(下)
grep "hogwarts" 指令,你会发现什么都没有显示,继续输入 xxx、dddd 仍没有任何反应,直到输入 hogwarts 时,系统才会输出 hogwarts,我们看到如果不传递输入文件,grep 会默认从当前输入读取内容。接下来,我们学习管道在整个输入输出过程中发挥的作用,以及管道的具体用法。我们来简单总结一下,输入文件就是标准输入 0,如果当没有输入文件时会获取当前输入窗口中的数据,读到数据后可以对数据进行一系列的操作,标准输出 1 就是一个输出文件,而如果错误输出文件就是标准错误 2。原创 2024-01-20 13:57:36 · 801 阅读 · 0 评论 -
Shell 编程核心技术(上)
在变量的使用中还有几个方法需要注意,echo $a、echo "$a" 都可以表示变量输出,但如果你想使用中更严谨建议使用双引号,还有就是多个字符串串联使用时,使用 {} 对内容括起来表示该内容是变量,避免与后面的其他字符混淆。首先来看下算数判断,通常算数判断可以用来比较两个变量间的关系,比如两个数字的大小比较,字符串的匹配关系,等等。然后是布尔类型,布尔的基本表示表现形式是 true 和 false,需要注意的是在 Shell 中有一个特殊的用法,如果是某个命令返回的是 0,则表示这个进程是正常工作的。原创 2024-01-20 13:56:46 · 851 阅读 · 0 评论 -
Linux 三剑客(上)
你可以发现,grep 和 awk 可以进行组合使用,来达到查找数据并对数据进行分割的目的,grep 也可以与 sed 组合使用,达到查找数据并修改的目的,它们三个还可以组合在一起使用来完成一系列的操作,就相当于大数据处理中的 Map-Reduce,我们接下来看如何具体的使用它们。可以看到,hello 指定为 $1,from 指定为 $2,并将默认的空格分隔符替换为 -,我们可以通过 $ 获取具体字段并对其进行相关操作,接下来我们学习 awk 的字段分隔。接下来,学习 awk 的字段数据处理。原创 2024-01-20 13:55:06 · 836 阅读 · 0 评论 -
Linux 常用命令
但往往只能阅读文件是不能够满足需求的,我们需要有对文件有进行编辑的能力。我们可以通过 netstat -tlnp 命令查看 TCP 协议进程端口,-t 指的是 TCP 协议,-l (listen)指哪几个进程开启了对外的链接,负责监听端口,-n 指不需要解析远程服务器的名字,以加快运行速度,-p 指打印进程,我们看下执行效果,可以看到当前机器的第一条端口信息开放了 22 端口,这时我就可以通过 ssh 登录这个服务器,如果系统没有开放任何端口,外部是无法进行任何操作的,也就是此时机器对外是完全封闭的。原创 2024-01-20 13:51:25 · 838 阅读 · 0 评论 -
Linux 与 Shell 的环境搭建
最后,带你演示如何完成我们的第一行命令,我自己的演示电脑是 Mac 系统,并安装了 iTerm2,我们先输入一个简单的 echo 指令,echo指令用于回显,你输入什么系统就输出什么 ,我们输入一个 echo hello world,你可以看到输出显示了 hello world,你也可以使用 Terminal 终端,虽然与 iTerm2 界面不一样,但本质是一样的。如果你的系统是 Mac,那么恭喜你,Mac 系统自带了 Terminal,你还可以安装 iTerm2,它们都是标准的 Shell 环境。原创 2024-01-20 13:46:52 · 694 阅读 · 0 评论