大家好,本期视频演示如何使用 linux 下的文件管理器 notus, 如果要在文件管理器中以管理员身份操作,就需要安装 notus admin, 输入命令安装 notus admin, 输入当前用户密码,输入 y 确认安装, 稍作等待即可完成。 点击快捷栏中的文件夹图标,即可打开 notles, 点击右上角试图图标,可在图标试图和列表试图间切换。 点击右上角下拉菜单即可切换排序方式,看一下 bin 目录的内容, 再演示一下多种排序方式的切换。 在图标上右键点击,打开右键菜单,点击属性,打开属性对话框,点击权限,查看权限情况。 左上角代星号的表示已收藏此文件,继续浏览,依次打开视频目录、录像目录,在视频文件上点击右键,打开右键菜单,查看视频文件属性。 点击视频属性可看到视频的基本情况。点击右侧的收藏栏,可以看到已被收藏的两个文件。 回到主文件夹,也就是加目录,而后依次打开文件夹, 选择一个图片文件。右键打开右键菜单,点击图像属性可查看图片基本情况。再次选择一个图片,右键打开右键菜单,选择用图像查看器打开 即可查看图片,随后演示管理员权限,在路径栏输入路径后回车打开文件夹, 浏览其中内容。这是存放系统配置文件的文件夹,可以看到文件较多个文件的用途,请期待主播的其他视频,找到 passwd 这个文件。右键,点击,打开右键菜单, 点击属性,打开属性对话框,点击权限,查看权限情况。可以看到它属于 root 用户, root 分 组,从右键菜单中选择以管理员身份编辑, 此时需输入当前用户密码,从而获得管理员权限, 此后即可看到并编辑该文件。 尝试略作编辑,而后点击保存, 而后关闭文件。再次以当前用户身份打开此文件。 可以注意到刚刚以管理员身份做的修改有效 关闭后找到 share。 普通方式无法打开它,因为当前用户没有读取该文件的权限。 重新从右键菜单中选择以管理员身份编辑,此时仍需输入当前用户密码,随后成功打开该文件,并带有保存按钮。 关注我,助你玩转 linux, 让 linux 再占桌面!
粉丝43获赞343

win 在最新的 windows 十一预览版二六零五二二中增加了对 student mini 的支持,这个 mini 以前在 linux 上可以让非 red 用户用上 red 用户才可以用的指令,比如说 reboot, apd in style 等等,方便我们在非 red 环境下也可以拥有更高的权限。 但在最近更新的 windows 十一的预览版中,就添加了对 windows 上虚度的支持。我们现在正在的这一个预览版的系统中,他默认是不支持这个指定的,我们可以来试一下, 这是非管理员的,他会提示你输入这个指令没有打开,我们需要去这个开发者页面把它打开, 看设置,里面是左边这一栏的系统,找到系统这里面的开发者选项,在里面可以找到启动速度,把它打开,点击确定。 在这里可以设置输度。它是如何运行应用程序?它有三个选项,在新窗口中,或者禁用输入,或者是内联。我这里使用的是内联, 我们可以直接在非管理员的模式中使用 sudo 加指令就可以使用,比如说 sudo 加 d i s m, 他会弹出一个 usa 的窗口,点击确定。 如果说我们直接运行 d i s m, 它会提示错误。七四零,也就是权限不足。比如说 b c, d e, d i t late e s e, s s i o n 这个指定。如果说我们不加速度直接运行的话, 它会提示拒绝访问。同样的,我们可以用这个指令去打开一些应用和脚本。比如说我们可以用 shooter 去打开一些程序。就举个例子吧,比如说打开 conque, 也就是控制面板,或者我们用 should do 去运行一些脚本,我是以编写来一个脚本,他需要输入完整的路径, 他会提示你是管理员权限。如果说我们没有管理员权限,直接去运行他, 他会提示你不是管理员权限。我们使用的时候可能会注意到刚才有这样一个 usa 的弹窗,其实我们也可以给他加入密码或者是 windows hello 的验证。我们在这里打开本地安全策略,找到本地策略,找到安全选, 在里面找到这里的用户账户,控制管理员批准模式中管理员提升权限提示的行为,双击打开,把它更改为在安全桌面上提示评剧 应用。确定接下来我们运行输入命令的时候,他就会叫我们输入密码,我们只需要输入对应我们账户的密码就行了。 好了, shed for windows 它同时也是一个开源项目,我们可以在这个页面里面提交反馈问题和查看一些使用说明。我这里只演示了一些简单的功能和步骤,也欢迎大家在评论区补充。最后,祝大家新年快乐, 对过去关注和支持我的粉丝和朋友们表示感谢,感谢有你们的支持和帮助。本期视频欢迎大家的点赞和支持哦!谢谢大家,我们下期再见!

今天是一期 linux 系统下 openclaw 的 安装教程,我们直接开始,首先这个命令是更新系统的软件包锁眼,确保后续安装的软件版本是最新的。 然后安装 q 工具用于安装 openclaw 脚本,然后输入 openclaw 官方安装命令,这个命令会自动帮我们安装 note 和其他环境。 弹出这个配置界面,表示 openclaw 已经安装完成了。接下来我们选择 yes 开始配置, 这里选择第一个快速配置,接下来选择模型,这里我选择的是 kimi 二点五的模型,大家可以根据自己的需要自行选择。 配置完模型之后,下面是对接的各种软件,我们先跳过,后面再配置,这里也选择跳过 这里是配置技能也先跳过,这里也选择。跳过, 这里是选择在哪里使用 openclaw, 我 们使用的是 open to 二四点零四的 server 版本,我是用另一台 windows 的 网页来使用它,所以选择的是第二个外部页面,我们需要在 windows 上的 partial 执行一下生成的这个命 令,输入密码执行就可以了。 接下来我们再复制这个网址, 在 windows 网页下打开这个网址就成功了,接下来就可以使用 open call 了。

每天学习一个新技能,今天我们学习 lina 的 新词盘挂载与卸载。

今天我们来聊聊未 get 这个命令,特别是它那三个超好用的功能。是不是有过这种体验,一个大文件下载到九十九趴的时候,突然就断了。其实啊, linux 自带的一个工具就能轻松解决问题,它就是 wget。 简单说, wget 就是 一个非交互式的工具,专门帮你从网上抓东西。 它最牛的一点就是为了在不稳定的网络下也能可靠下载而设计的。好。我们来看看它的三大核心用法。第一个,解决文件名太乱的问题, 你懂的。服务器默认的文件名儿又长又乱,整理起来特别麻烦。很简单,用一个大写的 o 参数,就能在下载的时候直接给他起个新名字。下一个功能绝对是所有人的福音,就是解决下载中断的问题。比如一个几 g 的 大文件,下到一半网断了,难道真要从头再来吗? 当然不用,只要在原来的命令里加个杠 c, 它就会从断掉的地方继续下。这个功能也就是断点续传,能帮你省下大把的时间和流量。 好!第三个场景,下载一个大东西的时候,难道终端就得一直站着?用 b 参数就行了,他会把下载任务直接扔到后台运行,这样你的终端就立刻解放了,可以干别的,甚至直接关到终端都没问题。更酷的是,这些参数可以组合用,实现全自动的可靠的后台下载。 说到这,肯定有人会问,那 wget 和 curl 到底有什么区别呢?记住一个简单的原则,单纯下载文件或者八网站,用 wget 就 对了。但如果需要和 api 打交道,或者做更复杂的数据传输,那就要用 curl 了, 来,我们总结一下,用 o 改名儿 c 断点续传, b 后台下载。所以说 wjet 就是 这么一个简单可靠,而且几乎哪儿都有的下载利器。那么问题来了,你打算先用它来搞定哪个凡人的下载任务呢?

嘿,大家好,今天咱们来聊个好东西,特别是如果你是管 linux ftp 服务器的,那这个小技巧啊,你可千万别错过了,咱们要聊的是一个看起来特别简单,但实际上超级强大的命令。 来,我先问你个事,就现在,此时此刻,你知道你的 ftp 服务器上都有谁吗?嗯?他们都在干嘛呢?对,这个问题对于任何一个系统管理员来说,都太重要了,对吧? 你想想啊,这么个情况,你正准备给服务器做个特关键的维护,或者打个补丁,结果呢?你两眼一抹黑,完全不知道现在有多少人连着,更不知道有没有人正在传那种特别重要的文件, 这感觉是不是就像开飞机没仪表盘,纯粹在忙飞,风险太大了。那你要是心一横,直接重启服务器,把所有人都踢下线,那完蛋了。最怕的事就来了,人家文件传到一半断了,直接损坏, 用户那边肯定得炸锅了,各种抱怨就来了,这局面咱可不想碰上,对不对?那怎么办呢?哎,别急,咱们今天的主角这不就登场了吗?它就是 ftp 户,命令有了它,你就能立马看清楚服务器上的一切。 你看,这名 ftp 户,其实特直白,你把它拆开看,不就是 ftp 和户吗?谁在 ftp 上?所以啊,它的功能就是告诉你当前 ftp 服务器上所有的绘画信息, 谁登录了,在干嘛,他都被你列的一清二楚。说白了,这个命令就是让你从瞎猜变成心里有数。他给你提供了一个最直接的方法,让你在动手之前就能清清楚楚的了解服务器的实时状态,再也不用提心吊胆了。 行,光说不练假把式对吧?咱们来点实际的,这个命令到底怎么用呢?放心,超级简单,咱们一块来看看。 你看啊,它其实就两主要的参数特别好记,一个呢是 v, v 就是 verbos, 意思是详细信息。另一个是 h, 这个大家应该很熟了, h 就是 help, 看帮助用的 好。如果你什么参数都不加,就直接在终端里敲 ftp 后,然后回车,你看,它就会给你一个标准的连接列表,这里面的信息可不少啊,每个连接的进程 id, 用户是从哪个 ip 连进来的?登录了多长时间?还有最关键的,他现在是闲着呢,还是在忙着干活儿?都闲着呢, 但有的时候吧,光知道有人在还不够。你可能想知道的更细一点,比如他到底在传哪个文件,或者在执行什么具体的命令。 这时候,杠 v 这个参数就派上用场了,它就像一个放大镜,你只要输入 f t p 呼杠 v, 哇,那出来的就是一个超级详细的列表,每个绘画在干嘛,那真是看得一清二楚。 行到这呢,咱们已经知道怎么看谁在线了,但是关键的来了,你以为就这玩意吗?不, ftp 户啊,他可不是一个人在战斗,他其实是你管理员工具箱里的一员,还有几个好兄弟呢, 咱们再来看看它另外两个好帮手,第一个, ftp count, 这个很简单, count 嘛,就是数数,告诉你现在总共在线几个人,但真正的大招是这个 ftp shot。 你再想想这个场景啊,你半夜两点得给 server 打个紧急补丁,但谁想熬夜啊,对吧?用 ftp 就 醒了,你可以提前设好,比如说十分钟后关停服务系统呢,会自动通知所有在线的用户,然后到点儿了就准时关闭,你呢,设置完就可以安心去睡觉了。 你看,把这几个命令组合起来用,你就不再是个被动的管理员了,而是个运筹帷幄的策略家了。 所以你看,现在你有了看清一切的能力,谁在线在干嘛你都没得清。那么问题来了,你的下一步是什么?是马上用 f tip shot 发个通知准备维护?还是看他正在下个大文件,多等他五分钟? 你看,这就不再是瞎擦了,而是基于信息的策略性决策。那么换成你,你会怎么做呢?

好的,咱们今天来聊一个特别有意思的话题,如果你是玩 linux 的, 那肯定绕不开一个问题,怎么才能安全又方便的管理管理员权限呢? 今天我们就来把苏和苏豆这两个命令掰开揉碎了讲清楚,看看它们到底是怎么成为你系统安全的命脉的。来想象一个场景啊,你可能就是想更新个软件,或者重写个服务,对吧?这种事太平常了,但问题是,它需要超级用户权限,那你怎么办? 这个问题其实就是我们今天整个讨论的核心。好,咱们先来看看第一种,也是最简单直接的办法,就是 so 这个命令, 你可以把它想象成一张全通通行证,有了它,系统里哪儿都能去。那么 so 到底是什么呢?它的全称 switch user 切换用户,其实已经把它的楼底都给揭了, 你用了它,可不是临时借点儿权限那么简单,你是彻底彻底地变身成了另一个人。通常呢,就是那个无所不能的 root 用户, 用起来嘛也特别直接,你就在终端里敲个宿,回车,系统就会让你输密码。注意啊,关键点来了,这里要的是 root 账户自己的密码, 一旦你输对了,好了,从这一刻起,在这个终端窗口里,你就是神,拥有了系统的最高权限。 哎,这问题就来了一个巨大的安全隐患。你想想,如果团队里有好几个人都需要做一些管理工作,难道你真的要把系统的万能钥匙,也就是 root 密码告诉每一个人吗?就像我们这写的,这事总让人心里发毛,感觉特别不踏实。 这种不踏实的感觉,其实就引出了一个更深层次的安全理念,也正是因为有了这个理念,我们才能找到一个更优雅也更安全的解决方案, 就是他了,现代系统安全的黄金法则,最小权限原则。屏幕上的这句话就是他的精髓,说白了,就是一个人、一个程序,只给他能完成自己任务的刚刚好的最小的权限多一点都不要给。 这就完美解释了为啥到处分享 root 密码是个烂主意。所以,为了能真正地实践这个最小权限原则, linux 世界里就出现了一个更现代也更精细的工具,它的名字就叫苏豆。 so do 的 全称是 super user do, 翻译过来就是让超级用户来做,你仔细频频这个用词不是让你成为超级用户,而是让超级用户帮你做一件事。这听起来有点绕,但这就是本质上的区别。 你看苏都的整个流程就完全不一样了,你只需要在你那条需要权限的命令前面加上苏都,然后神奇的地方来了,系统会提示你输入密码,但这次是你自己的用户密码,而不是 root 的。 说完之后,就只有你刚才那一条命令会以管理员权限运行,跑完就拉倒你还是那个普普通通的你。那么 soluto 背后是咋实现的呢?这张图就很有意思了,它让我们能偷看一下 soluto 的 魔法后台。 系统管理员啊,可以通过编辑一个叫 suds 的 配置文件,来精确地定义哪个用户能以 root 身份运行哪些命令。你看,比如我们可以规定用户 linux probe 只能执行重启电脑的命令,别的啥也干不了。看到了吗?这就是精细化控制。 好了,到这两个命令我们都认识了,现在是时候让他俩上擂台了,来一场终极对决。这么一比,他们的区别就真的是一目了然了。 好,这张对比图把所有东西都总结了,你看左边的苏,它的目的就是让你彻底变身,所以呢,它需要的是对方的咬式,也就是 root 密码。再看右边的苏度,它的目的只是让你办事,所以只需要证明你就是你,用你自己的密码就行了。 这就导致了最关键的安全区别。苏就像是把整个大厦的万能钥匙给了你,要么全给,要么不给,简单粗暴。而苏度呢,更像是给你一张临时门禁卡,只能在特定时间开特定的门,这种访问方式才是精细可控,还能留下记录的。 来,咱们总结一下今天的核心要点,第一,对于绝大多数日常的管理任务,速度毫无疑问是标准,配置是首选。第二,它更安全,控制的更细,而且谁干了什么都有记录,方便求后算账。 第三,它完美的体现了咱们前面说的最小权限原则。所以只有当你真的真的需要长时间完整的以另一个用户身份工作时,再去考虑用速。那么聊到这问题就留给你了, 现在你明白了,素的简单粗暴和粗度的精雕细致,在你自己的工作中,你会怎么选择来搭建一个更安全更可靠的系统环境呢?

测试工程师的日常离不开 linux 命令的高效操作,今天带大家快速学习测试工程师常用的 linux 核心命令,从而帮助大家快速搭建测试环境,定位 bug 分 析日制,让我们的测试效率翻倍。 相关的文档呢,我已经整理好,大家如果有需要可以直接找我要。我将测试工程师常用的核心命令分为以下六个模块,第一个呢就是我们了解一下 linux 的 常规的文件系统的组成, 第二个的话就是我们系统的命令,第三个文件管理命令,第四个文本内容查看命令,第五个文本查找命令,第六个文件编辑命令。 首先我们来看一下常规的 linux 文件系统,它包含的具体的目录大概是什么样子的,那我们要看到这些目录呢,我们得先连接我们远程的服务器,这里呢我使用的是 finalise 这样的一个工具来进行连接, 我们新建 s h 连接,然后在这里呢输入我们的主机,也就是我们服务器的 ip, 然后输入你的用户名密码,点击确定, 然后我们点击连接,就可以连接我们远程的服务器,这里呢我是使用的阿里云的一个服务器, 那我们来看一下在我们这个服务器里面具体的一个基本的文件目录大概有哪一些,我们会有这个并目录, ot, dv, etc 等等,然后每一个文件呢,它都一般都是用来装对应的具体的一个内容,这里呢我们在使用的时候最好就按照规范来放置的具体的一个内容。那我们第二款呢,就是来看一下我们系统的一个命令, 我们在实际的测试过程当中,经常要去看一下我们这个 ip 地址,那么看 ip 地址呢就会常用的有三个看法,一个呢是 ipa ip address, 然后 if config 是 我们用的最多的,我们来看一下这个呢,我们就可以看到具体的这个 ip 地址, 然后 ip address 也是一样,然后还有我们就是 if config 可以 看到我们具体的这一些地址的一些内容,这样的话我们就可以了解具体的一个服务它的一个地址。 那我们第二个呢就是我们要去看我们这个服务能不能拼的通,也就是看我们这个服务器有没有挂,那我们就可以通过聘领领来拼具体的这个 ip。 那 我们这里假设用一个本地幺二七点零点零零点幺来拼一下 这里呢我们可以看到它具体的一个反馈都是一个正常的,那我们这个拼是没有问题的。接下来我们可以去查看系统的一个时间, 我们可以用 date 命令这个系统的时间我们在什么场景之下会使用呢?就是我们涉及到测海外项目的时候,因为不管是像英国啊还是美国啊,它的 时区和我们都不一样,所以呢它的时间都不一样,那这里针对于服务器时区的这个使用以及它的时间的展示都会存在一个误差,那我们要准确的去判定到底是哪一块有问题的话,那我们就可以通过 date 命令看一下服务器设置的一个时区。 那第四个呢就是我们这个清屏的这个命令,我们在页面上敲的多了之后,不想展示那么多,那我们就通过 clear 把它清掉, 这个是我们几个简单的一个命令,那么接下来就来看一下我们常用的一些命令,就是我们查看服务器的一个进程信息,这个我们用的最多的是通过 ps 杠 e f, 然后再加上管道符 来去筛选我们想要筛选的具体的一个服务。比如说我们想搜索买收口,然后它就会去将买收口相关的服务的一个进程,包括它的 pid 以及它的一个进程信息给大家展示出来。 这个我们主要是来看某一个服务它有没有正常的运行,以及它运行过程当中有没有具体的一个异常。然后接下来呢就是我们这个 top 命令, top 命令呢,它可以用来实时查看系统的一个进程,同时呢它也是我们在性能测试里面 做性能监控最常用的一个命令,它可以查看具体的 cpu 内存,它的一个具体的一个占用,以及具体是哪一个服务占了多少,这样的话我们就可以清晰的看到具体是哪一个服务有性能的一个问题。 再接下来呢我们是杀死进程,这个是我们发现某一个服务,假设我们在系统的这个运营过程当中有一个服务,他频繁的占用我们的这个进程,但是呢他又没有什么作用,那我们就可以通过 kill 命令把它进程杀死。 kill 呢我们也有一个强制的,就是杠九就可以强制关闭某一个进程,这个进程呢我们后面跟着是进程的 pid, 也就是我们刚刚通过那个 ps 杠 e f 查看到的那个具体的内容。 然后再接下来我们就是更改这个系统的这个权限,这个权限呢,大家可以在下面这里可以清晰的看到, 这是它的一个具体的权限,它会分为这个啊 w 叉,也就是我们可读、可写、可执行这三个权限。如果我们 change mode 直接是 change mode 七七七,那就证明是赋予它最大权限, 这个是分组的一个具体的一个实现。然后再接下来的话,就是我们这个文件管理的一个命令,这个主要是查看文件 以及切换目录等等具体的一个命令,我们具体来看一下。第一个呢,我们通过 u s 这样的一些命令可以来查看我们具体的一个文件的一个展示,那么比如说通过 u s 杠 l 就 可以看到我们当前目录下它的具体的一个目录的一个展示,具体的一个内容, 然后我们想要切换到某一个目录,下面就通过 cd 命令进行一个切换。比如说我们要切换到这个 o p t 这样的一个目录,我们通过 cd o p t 进来之后, 然后我们这里面就可以通过 a o s 杠 u 再来查看它,就会是具体的这个目录里面它的一个内容。那么要往上的话,我们可以通过具体的 cd 报号往上一层级去进行跳转。 如果你想要查看你当前的这个层级是哪一个层级,我们就可以通过 p w、 d 来进行一个查看,这个就是 opt 这个层级,这个是简单的一个查看,那我们要新建一个文件夹 或者新建我们这个目录,那我们用到的命令呢?这两个一定要做一个区分啊,新建文件夹和新建目录,我们可以这样去记哈,因为新建文件夹文件夹呢,它的缩写呢就是其实就是一个 d i r, 那 我们 mk 呢?就是 mk e make d i r make dear, 那 我们这个就是新建文件夹, 比如说我们现在随便新建一个 s 吧,然后我们再点 s 杠 a, 大家就可以看到这里呢,我们可以刷新就可以看到这样的一个文件夹, 那我们要新建一个文件呢,就通过 touch 命令 touch, 比如说 s 点 t f t 新建一个 t f t 文档,那么 a s 杠就可以查看到最新的新建的这个文档, 这里呢也可以刷新的同步。那我们新建完之后,如果发现这个东西不是我想要的,那我们就涉及到删除的这样一个命令,我们可以通过 im 去删除我们这个 s 点具体的这个文件,这里呢它会让你去做一个确定,那我们确定了之后,我们就可以看到具体的这个文件对应的一个删除, 这里我们刚刚没有敲这个,然后我们还可以就是删除我们的这个文件夹,删除我们文件夹这个 s, 那 我们再来看一下 s 杠,哎呦,刚刚这两个文件就被删除了,这个就是我们简单的一个删除,删除呢,我们也有个强制删除 im 杠 rf, 然后我们又会涉及到就是拷贝移动或者修改文件的这个命名这样的一些操作。那么拷贝和移动呢?我们可以用 cp 一个 copy 这样的一个命令,比如说,呃,我这里先新建一个文件,然后我们将这个文件就复制, 就还是当前这个目录这里呢?如果你不给他呃切换其他的这个目录的话,那他就会提示当前有一个相同的了,那我们就可以呃去进行文件命名的一个修改, 那我们这里呢就可以通过这个 mv 命令,有时候我们把 s 点 txt 改成 s 一 点 txt, 这个呢它会是将我们这个文件名进行一个改动,那我们来刷新看一下,这里呢就变成了 s 一 点 t, s, e。 再接下来呢,我们会涉及到压缩和解压的这个命令,这里呢这个踏命令 我们是最常用的一种压缩方式。然后还有我们这个呃 ar 和 zip 命令,它的具体的一个解压这里呢? tab 命令会跟具体的一个参数,这里包括杠 z、 杠 x、 杠 b、 杠 f 具体的一个内容,杠 z 的 话就是支持这个 g zip 解压文件, 然后杠 x 的 话就是从压缩的这个文件中提取文件,然后杠 v 的 话就是显示我们的这个操作过程。杠 f 的 话就是指定压缩这个文件, 假设我们要压缩一个它包的,那我们就横杠 z、 x, v, f 进行一个解压,那我们要压缩的话就把 z 改成了 c, c 的 话就代表建立新的压缩这个文件。然后第四块的话就是我们这个文本内容的这个查看的命令, 这个我们会涉及到几个命令,都是可以进行查看的,但是呢它的这个查看分前后以及它具体的一个设置不太一样。比如说第一个这个看命令,它就是查看文件当中的全部信息, 它适合查看小文档,因为大文档它的内容比较多,你全部展示出来,你看以及翻页就比较麻烦,所以我们就会使用到这个 hit 命令, 类似命令来查看部分,这个呢 hit 呢,它可以去通过杠 n 设置查看前几行,然后类似命令呢,它是以分页的方式来查看,然后还有一个 tail 命令, tail 命令就和 hit 它是相反的, hit 呢,是显示文件的前几行,然后 tail 命令呢,它就是显示文件的最后几行, 也就是最新的一个日制,因为我们写日制肯定是最从后面新增最新的一个内容,那我们在实际的查看日制过程当中,我们用的最多的就是这个 tail 杠 f 这样的一个命令,杠 f 呢是代表实时滚动,那我们就可以实时的看到最新的一个日制,那我们这里呢,我们 往这个 s 一 里面去写一些东西,我们随便输入一些内容,然后保存退出,然后我们现在通过这个 cat 命令来查看这个文件,我们就会展示所有的一个内容。 然后我们如果是通过 hit 命令,我们加一个刚刚展示前五行,那我们就是只会展示前面一二三四五。那反过来呢,我们这个 tail 杠 f, 然后以及我们这个文件, 它就是从后面来展示,如果你不加杠 n 的 话,默认的就是后十行,黑的也是一样,不加杠 n, 它默认的是前十行。 那我们再来看一下类似这样的一个命令,它这个呢就是一个分页展示,大家就可以看到具体的一个分页,往下翻它就会进行一个分页,当然这里具体的一个内容没有那么多,它分页展示的效果就没有那么明显, 这个就是我们查看,那接下来呢,我们再来看一下文本的查找,文本的查找呢,主要是通过 find 命令或者通过管道符来进行一个筛选。 我们来看一下,就跟我们在我们 windows 目录下面,你要去找一个具体的一个文件,那我们就通过 windows 的 那个搜索功能来进行查找。那在我们 linux 下面,我们是通过这个 find 命令进行查找,比如说我现在想要查找我们这个某个路径下面,比如说 o p t, 然后名称是 s e 的, 我们这个具体的一个内容哈, 他就去展示,那我们再来看一个哈,我们找一个买收口,他就会展示出来所有的成绩里面的一个买收口,这个就是我们 find 命令去搜索对应的这个关键词的。然后再接下来呢就是我们这个管道服配合我们这个命令执行的。 我们这个管道服刚刚我们 ps 杠 e、 f 也用到了,现在呢,我们呃 ps 杠 a u x 它也是用来去查看具体的一个服务器进程的,那我们现在通过这样的一个命令来查一个 s h d 的 这样的一个进程, 看一下系统里面有没有管道服的作用呢?其实就是一个筛选的一个作用,我们就可以看到具体的一个服务的一个信息,但如果我们把这个管道服去掉,它就会展示所有的进程, 这个就是管道服的一个筛选功能。然后再接下来呢就是我们这个文件内容的一个查找,这个就是查找到具体的文件里面包含的一些内容了,那比如说我们现在我想要去看某一个文件里面是否包含 test, 那 我们先把这个文件里面去加一个,加一个 test, 然后我们就通过 group menu, 然后来搜索 test, 在 哪个文件里面搜索呢? o p t 下面的 s e 点 t s t 大家就可以看到,可以搜到这个关键的内容,那这个看的还不是很明显,那我们来搜索一个里面有多个内容的,比如说我们搜索九刚,我们那个文件里面有很多的九,大家就可以看到它会把所有的九都搜索出来, 然后如果你想要知道它到底在哪一行,我们肯定不可能说想知道这个搜索出来就这么一个数字,放在这对我们来说没什么作用,那我们要知道它的这个关键词在哪一行,那我们就加一个杠 n, 这个呢就会展示我们具体在哪一行, 为什么要做这样的一个操作呢?这个是我们要对具体的某一个配置文件进行修改的时候,我们要针对性的去找到某一个关键词,他到底在哪一行,我们才好针对性的去快速的找到。这个就是我们这个的具体的一个应用的一个场景。 那再往下的话就是我们文件的一个编辑,这个刚刚也用到了具体的这个命令,也就是我们的 vm 这样的一个命令。在我们 vm 或者 vi 命令下面呢,它总共分为三个模式,我先直接进来, 第一个模式呢叫命令模式,第二个叫输入模式,第三个叫底线命令模式。然后命令模式呢,我们是按 a 进行一个切换,然后我们输入模式,按这个 i 进行一个切换,然后底线模式就通过 esc 回退,然后通过冒号,也就是我们这样执行保存退出这样的一个 操作。那我们来看一下这个底线的这个命令模式,也就是我们刚刚保存退出的。 我们冒号之后,如果是单纯的是 q, 它只是退出程序,然后单纯的 w, 它就是保存文件,然后 wq 也是我刚刚使用的,就是保存退出。如果你在实际的保存退出过程当中发现退不出去,那我们就加一个感叹号,强制保存退出, 也就是 wq 冒号强制保存退出,这个就是我们的命令模式。那我们再接下来来看一下我们这个油标切换到输入模式, 输入模式呢,我们按这个 i、 o、 a 这样的一个字母就进行输入模式的一个切换了。切换到输入模式之后呢,我们就可以输入我们具体的一个内容了,比如说按 a, 它这里就显示成插入了,然后回退,我再按 i 又显示插入,再按这个 o 也是显示插入,我们就可以去进行具体的一个内容的一个输入了。 然后呢我们就要来给大家讲一下我们进入这个模式之后他的一些简单的操作,比如说我们光标的移动, 我们就可以通过上下具体的这个翻页来进行内容的一个切换。同时呢我们还可以通过这个 g g, 大 写的 g n g 去进行具体的一个移动,比如说我们这个他两个小 g, 他 就会直接切换到第一行, 两个小 g 直接切换到第一行,再翻到下面切换到第一行,那如果我们是大 g, 就 切换到最后一行,如果是呃我们要指定具体的某一行五大 g, 它就会切换到,直接切换到五,这个就是我们和刚刚具体的某一个功能, 就是我们通过 group 找到具体的行数在哪一行的时候,我们就可以通过刚刚这个命令直接切换过去,这样就可以快速的切换到我们具体的内容所在的地方,进行配置文件的一个修改。然后再往下呢就是我们一个简单的进阶,也就是搜索替换。 在我们 v i 命令下要进行搜索的话,它有两个常用的方式,一个是斜杠,比如说我们搜索 t x t, 它会高亮显示到这儿,然后如果我们搜索九,它就会高亮的显示这个所有的这个九,那这里它又有个冒号来去搜索冒号呢?它是代表什么意思? 它是光标向上去寻找,然后斜杠呢是光标向下去寻找,这个就是我们两者之间的一个区别, 然后我们要显示行号,我们就可以通过冒号 set n u 就 可以将我们这个文件每一行的这个行号给它展示出来。然后再往下呢就是我们要实现这个某一个内容的一个替换,快速的替换,也就是我们刚刚要去寻找到它, 寻找到它,然后将具体内容替换,那我们就可以通过这样的一个 mini 来替换,比如说我们想把第几行到第几行寻找某个制服,然后将它替换成另外一个制服,比如说我们就把刚刚那个 tft 来进行一个替换冒号,然后从第一行到最后一行, 然后我们要将 test 递换成 word, 然后我们寻找替换,大家可以看到就实时的替换成我们这个 word 了,这个就是在我们 vi 命令下的一个搜索替换,这样的一个具体的一个操作,这个是属于 vi 命令的简单的进阶, 这个大家掌握了之后,在面试过程当中就可以呃主动的去把这个进阶的东西给它输出出来,然后再接下来就是我们具体的内容的一个删除复制粘贴,这个就比较简单了,比如说我们到这个九, 我们一个小 x 就是 向后删除一个字母,然后大写的 x 向前删除一个字母,然后如果你想连续的向后删除多个字母的话,那我们就可以在这输一个二 x 去进行一个删除。然后我们如果想剪切你所在的这一行,比如说我们到这 d d, 他 就是把这个 word 这个内容给他剪切掉了, 然后就是我们复制,比如说我现在放在这个九上面刚刚剪切的内容进行具体的一个复制了, 这个就是粘贴复制,我们就将刚刚剪切的内容进行粘贴复制了,这个就是我们文件编辑涉及到的具体的一些操作。以上的话就是我们作为一个软件测试工程师常用的 linux 的 命令, 掌握了这些命令呢,测试环境的搭建,日制的排查,新增的监控都能够轻松的搞定。那么你在平时使用过程当中最常用的是哪一个 linux 命令?大家可以一起来分享一下你的实战经验。

大家好,今天我们来聊聊 journal c t l, 一个看 linux 记事日记的超强工具。在一堆日制里找东西简直是大海捞针,对吧?其实啊,有个更好的办法,答案就是 journal c t l 就 用一个命令,所有系统日制都能整整齐齐地展示出来。 好了,咱们直接上手来看一看它最实用的三个功能。先从精准定位说起,第一个技巧就是用杠 u, 它能帮你把特定服务的日历单独拎出来看,你看这对比多明显,右边儿就把所有乱七八糟的都过滤掉了,只剩下 angens 的 日历。 第二个技巧,怎么看实时的日历呢?用杠 f 就 行,它会帮你跟着日历的更新。比如这条命令,就是实时盯着 s s h 服务的日历现场调试问题的时候特别好用。那么如果这时候有人想连进来,会发生什么呢?注意看啊, 看到没,一次成功的登录马上就显示出来了,什么时候发生了什么一清二楚。同样有问题的操作,比如这种登录失败也能立刻抓住, 这功能是不是很强大?那要是想查过去的问题怎么办呢?别急,我们可以组合使用过滤器,我们可以把 p 用来筛错误级别,再用 dash sense 来筛时间。来,我们试试看, 像这样就能找出过去一小时 n g i x 的 所有报错。快速定位老问题就这么简单,咱们来快速小结一下,掌握这四个参数,你日常查日记基本就够用了。好了,现在你 get 了一个排查 linux 问题的新技能,快去你的日记里看看能发现什么吧!

用微软来跑 linux 太卡了,给大家一个更简单的方式,五分钟搞定。我们先打开命令行,输一个 power shell, 以管理员身份运行。我们先把 wsl 装上,可以在 wsl 当中再装我们的 linux, 那 先设置它的版本, wsl 刚刚 set, 我 们用 wsl 二,然后你输 wsl, 刚刚 install 就 开始安装。 接下来让我们创建一个默认的用户,比如我输 us 一, 关于它的密码一和新密码,现在我们就进入到了 linux 系统当中,我们看一下当前目录, 在这个位置你可以进到加目录 cd, 大家熟悉的这个 linux 系统来了,是哪里呢? home us 一, 我们看 home 下都有什么?大家看有你的 us 一 装完了,我们看好不好用。我们可以从这个 windows 的 这个目录当中大家看,找到你刚装的这个午饭图。 装完之后呢?大家找到这个目录不? usr 一, 是不是找到你自己了?如果你有什么程序,你要去编程,要修改,可以把它拿过来。我这 d 盘有一个网络的程序,我把它粘到 linux 当中,怎么粘呢?非常的方便,那直接在这里粘贴, 那么 cd 来看,是不是程序就已经有了?那你可以把这个程序打开,然后进行我们日常的编程了。总结一下,对于 wsl 来说,它占的资源确实是比较少的, 我们就从一个单内存的情况,如果你用 wsl 来运行 linux 系统的话,内存基本上大于四个 g, 就 可以非常流畅的运行。而如果你用 vm 二再加 linux 这种方式呢? 你至少要八个 g, 它才能够保证不卡顿。我们将来如果写一些 c 代码做 linux 应用层开发,软件开发用 wsl 加 linux 是 非常好用的,一点问题没有。当然如果你将来做底层开发驱动开发, 就还要回到微软加 linux 这种方式,因为 wsl 这种方式它是共享的 windows 内核,它没有独立的 linux 内核,所以没有办法完成内核的编页驱动的调试。

这期咱们来快速搞懂 linux 的 hostname 命令,非常简单,你可以把主机名想成是电脑在网上的一个名牌,方便大家找到它。那怎么看这个名牌,或者说给电脑换个新名字呢?往下看就知道了。好,咱们先从最基本的开始,就是看看现在的主机名叫什么, 很简单,就在终端里敲 host name, 然后回车就行了。你看它马上就告诉你现在系统叫啥名了,一目了然。那要是想看 ip 地址怎么办?别急, host name 这命令也能搞定, 操作还是一样,就下后面加个 i 参数就行,这样一来你机器的 ip 地址就出来了,配网络的时候特别方便。 好了,重点来了,怎么改名?咱们先试试临时改一下,用 pseudo host name 加上一个新名字就能改,之后再查一下,确认改成功了。 不过这里有个坑,这么改只是暂时的,电脑一重启就没了。那问题来了,怎么才能让它永久生效呢?就得用另一个工具了。现在新的 linux 系统里都推荐用 hostname ctl 这个命令,用 set hostname 就 能永久改名,改完之后检查一下状态,确认一下 它为什么能行呢?因为它直接改了配置文件,所以重启电脑也不怕了。好,咱们来总结一下这两种方法到底有啥不一样? 记住这个关键点,临时改名儿,用 host name, 想永久生效就用 host name c t o。 现在你已经会给设备起名字了,准备怎么规划你的网络世界呢?

嗨,大家好,今天我们来聊一个特别实用的东西,如果你经常和 linux 服务器打交道,尤其是那种只有命令行,没有图形界面的,那么这个工具啊,你绝对得认识一下,它能帮你大忙, 你肯定有过这种经历,对吧?面对一个全新的服务器,屏幕上只有一个光秃秃的命令行,而你的第一个任务也是最关键的一步,就是得让它先连上网,这时候心里是不是有点没底? 是的,命令行这东西,虽然我们都知道它很强大,可一旦涉及到网络配置这种核心操作,就总会有点紧张,毕竟输错一个字母,手抖一下,可能整个系统就失联了,压力还是挺大的。 但别担心,其实早就有人想到了这个痛点,有一个工具就是专门为这种情况设计的,它能把那些看起来很复杂的网络配置工作简化成几行特别清晰,特别好懂的命令。 好了,不卖官字了,他就是我们今天的主角 n c l i, 你完全可以把它想象成一把处理 linux 网络的瑞士军刀,小巧强大,而且你需要的功能它基本上都有, 它的全称 n m c l 就是 network manager command line interface, 翻译过来就是网络管理器的命令行界面,顾名思义,它就是让你用打字的方式去控制整个系统的网路服务。 而且啊, n m c y 有 一个特别牛的优点,就是你用它做的所有改动都是持久化的, 什么意思呢?就是它会直接帮你把配置写进系统文件里,所以你设置好了之后,哪怕服务器重启一百次,网络配置也都还在,不会丢,这一点真的太重要了。 那这个命令到底要怎么用呢?别急,我们先来把它拆解一下,看看它的基本语法和几个超级好用的选项。 它的语法结构特别有逻辑,就像我们在说一句话,先是 n m c o i 这个命令本身,然后告诉他你要操作哪个对象,比如说是一个连接 connection 还是一个设备 device, 最后再告诉他你要干什么,也就是具体的动作,比如显示 show 或者启动 up, 是 不是很简单? 而且它才很贴心,你可以通过一些参数来控制输出的样子,比如说你用杠 p 这个参数输出,结果就会整理的漂漂亮亮的,特别适合人眼阅读。 但如果你是要写自动化脚本呢,就用杠 t 参数,它会给你一个超级简洁,用冒号隔开的格式,方便机器处理。 好了,理论知识差不多了,咱们来点儿实际的,接下来我们看看几个最常见的场景,感受一下 n m c l i 在 实战中到底有多方便。 好,第一个任务,我怎么知道。现在的网络状态很简单,你只要敲 n m c i i connection show, 它就会把所有的网络连接都列出来给你看。 如果你想看其中某一个连接更详细的信息,比如它的 ip 地址啊, dns 服务器是什么,就在后面跟上那个连接的名字就行了。 那么最常见的需求,怎么让网卡自动获取 ip 地址上网呢?这简直是 n m c l i。 最简单的操作之一了。假设你的网卡叫 eth 零,你只需要运行 n m c l i connection up, eth zero, 然后就搞定了。 dhcp 会自动帮你把 ip 地址、网关、 dns 全都配置好。嗯,自动的确实方便,但有时候,比如在服务器上,我们可能需要一个固定的、不会变的静态 ip 地址。那这种情况要怎么办呢? 手动配静态 ip 听起来好像挺麻烦的,但用 n m c l i 逻辑特别清楚。我们用的命令是 modify, 也就是修改。 首先用 i p v 四点 method menu 告诉系统我要手动设置。然后用 i p v 四点 addresses 告诉他 ip 地址和子网掩码是什么。最后再用 i p v 四点 gateway 把网关地址也指定好,一步一步来,非常清晰, 把刚刚那几步拼在一起。你看,一个完整的命令就出来了。它可能看起来有点长,但是你仔细看,每一个部分是干嘛的都一目了然。 addresses 就是 地址, gateway 就是 网关,完全不会搞混。 最后再来一个怎么加 dns, 服务器还是一样用 modify 命令,但这里有个小技巧,你看,我们用的是加 ipv 四点 dns, 注意这个加号。 这个加号的意思是增加一个 d n s, 而不是覆盖到原来的。这就意味着你可以有好几个 d n s 服务器,非常灵活。 怎么样,通过这几个例子,是不是已经感觉到 n m c l i 的 强大和便捷了?那我们最后来总结一下,花时间掌握这个工具到底为什么这么重要? 简单来说,掌握了 n m c m i, 就 等于你有了超能力。你可以在任何只有命令行的 linux 环境里轻松搞定网络配置,你做的所有设置都能永久生效,不用担心重启就没了。你还可以把它写进脚本里,让新服务器的初使配置完全自动化, 而且当网络出问题时,它也是你排查故障的得力助手,这绝对是每个和 linux 打交道的人都应该具备的核心技能。好了,现在球传给你了,在你自己的工作里,有没有哪些每次都要手动做的很烦人的网络设置? 想一想,你第一个打算用 n m c o y 来自动化的任务会是什么呢?希望今天的分享对你有帮助。

l s mod 这个命令能让你看透 linux 系统的核心,我们就先来看看。其实啊,有个简单的命令,就像给 kernel 开了扇窗,让你看个究竟。 对,这个命令就是 l s mod, 它能给你一份超清晰的核心状态报告。这些模块说白了就是一些代码块,比如硬件驱动 kernel 需要时才会加载, 所以它就像拍了一张快照,让你清楚看到核心当前在用什么技能。那它到底是怎么工作的呢?其实啊, ls mod 本身是个很直接的工具,它做的就是去读 proc 下 modules 这个文件,然后把它整理的好看点给你,好 来看输出。你一运行 ls mod, 马上就会看到整整齐齐的三列,这是一个典型的例子, 我们一列一列的来看它们分别是什么意思。首先是模块这一列,这个很简单,就是模块自己的名字。第二列大小显示的是这个模块文件占了多大空间,单位是自己 注意啊,这里说的是文件在硬盘上的大小,不是它在内存里占了多少。最后一列使用则告诉你这个模块正在被使用多少次,而且它还会列出具体是哪些,其他的模块正在用它,一目了然。 所以你看用 ios mod, 模块名大小,谁在用都清清楚楚。好了,现在轮到你了,赶紧打开终端敲一下,看看你系统里都有啥。

嘿,今天我们用六十秒搞定超好用的 curl 命令,有没有想过不用开浏览器,直接从中端搞定数据传输来认识一下 curl, 一个能让你直接和服务器对话的命令行工具。 好,咱们先试试最基本的,抓取一个网页的内容,很简单,就 curl 夹上网址,瞧,内容直接就出来了。 那要是想把东西下载下来,存成文件呢?这个也简单,加个杠 o 就 行,它会自动用原来的名字保存文件。好,不光是下载,我们还能发送数据。这就得用 post 请求了, 看,用杠 x post 指定动作,然后用杠 d 把你的数据塞进去,搞定。 来,给你一份 curl 的 速查表,记住这几个就够用了。看获取内容、下载文件、发送数据,关键的都在这了,现在 get 和 post 你 都会了。第一个想去玩哪个 api?

大家好,这次一起来学习一下 linux 内核源码。当然本来我是想直接扣零点一一版本的代码做简化,然后裁剪关键代码 来手搓一个 linux 最小可运行的内核,但是最终启动失败了,不如就讲以下相关的 linux 内核启动和初步化代码吧。对于我们手搓内核来说,不能够只知道复制粘贴,还要明白底层的内核运行机制和原理,以及一些继承器和中断的作用。 这样当我们后续去手搓内核时,知道如何去修改原代码,裁剪出一个简化版的 linux, 然后输出一句 hello world, 甚至能够去手搓一个与 linux 完全不一样的内核。 当然也不是真的去手搓一个内核,就是说通过复制粘贴 linux 内核早期版本,给代码 简化一下,让它运行起来。当然这样做的目的是能够去通过这种复制粘贴的方式,然后一步步去学习 linux 内核的启动流程,也为深入学习 linux 源码做些准备。这次手搓指成功了一点,毕竟关键代码都裁剪出来了, 只是说运行环境不行,导致无法启动内核,毕竟代码逻辑是零点一一版本,与现代二点六版本代码逻辑相差很大。 不过在了解完 linux 内核启动流程以及初步化之后,我们也可以通过这些思路来手搓到一个更现代的 linux 内核。只用简化的代码来手搓一个简单的操作系统内核,难度也不会很高,而且不用考虑低版本内核与现代虚拟机运行环境的不兼容。 这里我先说一下做不成功的原因,分享经验,避免以后有人踩坑。这里预测有三个可能性,对于第三个远跳转没做对。我在进入十模式之前已经清空了寄存器,可以排除这种可能。 a a 二十在 setup s 中我已经设置 int 零叉十五来开启, 最后又不得不怀疑到 gdp 头上,但我没有去做修改,而且 gdp 修改起来难度较高,还要考虑内存地址对齐等等,所以也不得不去另寻思路。 然后这次手搓失败,根本原因就是我多次修改代码和调试,都发现无法进入保护模式,导致手搓失败。虽然说后面的代码已经裁剪出来了,但进入布了保护模式就无法完成印刷和寻址 内存寻址空间有限,很多东西无法完成。当然如果说内核在实模式下让它输出一个 hello world 也很简单,但这样就没有了。进入保护模式的深入对我们去学习 linux 内核源码没有太大帮助,而且我们还要忙着上班摸鱼,没有太多时间推翻重来,去重新手搓一个现代的操作系统内核。既然这样,不如分享一下内核启动初步流程的简化代码以及自己的理解, 让大家一起来学习交流。只要把这些基础的东西理解了,后面我们更容易上手深入学习各个内存管理、进程管理等模块,还能有一个很好的思路,去手搓一个现代操作系统内核, 然后输出一行 hello world。 然后这个是我之前写的文章,我觉得最难理解的部分就是内核启动流程。文章之所以要从 bios 写到 start kernel 之前,有一个很重要的原因,因为 start kernel 以及前面内核部分的代码是整个内核启动 驶驶化的最重要也是最难的过程,涉及到 linux 内核是怎么被加载到内存的,页表如何驶化等等,还有 bz image 是 怎么形成的, 很多内核整个运行过程中的数据结构是怎样被粗化的。这一部分对我们学习 linux 内核原码非常重要, 我一两句话也实在说不清楚。这篇文章呢,是二点六版本的内核,跟我们要做的零点一一版本差别很大,但是启动逻辑也有点相似,可以通过二点六的内核来学习零点一一的内核简化后的原代码。然后就是说之前的文章写到这里的原因, 在我们要手搓操作系统时,我们需要知道内核运行到哪个地方可以停下来。如果我们按照现代 linux 内核的逻辑来手搓内核,需要明白一件事, linux 源码中有一个初步数据结构和各个子模块的函数,在 main c 中,里面的关键函数是 start kernel, 其中又包含了 rest i need 函数。这个函数基本上完成了三个工作,挂载跟文件系统初步化 i need 脚本可从 run 零到 run 三切换到用户 type, run i need process 初步化 i need 实际上就是启动我们用户 type 的 第一个进程 pid 一。 这里就是我们手搓入门级别的操作系统内核时的最后一步,通过魔改 ide 程序来实现输出 hello world, 而无需挂载跟文件系统,如 lfs。 这一步就是很多人入门手搓操作系统的最后一步了。 而对于那些能做出 excel c i 界面或者能跑一些基础的网络收发包,都是在这一步上锦上添花,就是说不采用直接输出 hello world 方式,而是按照 linux 二点六之后的原码 去完善 linux 内核的各个子模块,同时要制作出一个可运行的跟文件系统,添加许多用户程协议和制作轻量级应用, 然后 mountroot 挂载跟文件系统 run iit process 去执行跟文件系统中的 iit 脚本,来真正启动第一个用户进程 pid 一 这种锦上添花,去完善内核进程和内存管理模块、文件系统模块等等许多内核模块,还要去完善用户程各种协议和 脚本,以及手搓轻量级应用的方式,属于进阶版玩法,但不管怎样,我们至少手搓到直接让 i need 输出 hello world 的 这种玩法,已经足够方便我们去后续深入学习 linux 内和源码,或者进阶搓一个功能完善的操作系统了。 所以这个视频的目的就是注视说明一下这些简化后的 linux 内核原码,让我们对内核从 bios 启动到输出 hello world 有 一个深刻的理解。当然我没办法进入保护模式,导致后续步骤无法完成, 所以这个视频仅仅分析一下简化后的代码。在开始之前,我想先分享一下 linux 运行的完整生命周期,来扒开内核是如何与用户沉浸交互的。首先是 bios 开机自检,然后不退 load, 这部分没什么可说的,当然可以参考一下我之前写的文章,了解一下 grub 如何工作的。然后就是内核启动初实化阶段最重要的部分,其中有一个 start kernel 函数,包含大部分内核初实化阶段的重要函数,如图所示,这些函数是 start kernel 中的重要函数。 start kernel 中所有函数都只完成一件事,就是初步化内核运行的数据结构,它没有其他功能,没有其他业务功能的代码。而内核中进程管理、内存管理、文件系统等等这些子模块的代码才是用来实现业务逻辑的,就是对 start kernel 粗式化的数据结构进行操作。就比如说这两个函数是属于内存管理子模块,它们具体实现了内存粗式化等相关操作,也就是说它们有完整的业务代码, 而 start kernel 则负责粗式化 task structure 等相关数据结构,供前面两个函数对相关数据结构进行操作。然后 start kernel 中有一个 rest i need 函数,就是前面提及的哪个函数是我们入门首搓操作系统的最后一步,它首先启动一个调度器 来分配 cpu 资源,然后创建一个内核进程 kernel iit, 并准备好命名空间,然后挂载跟文件系统,最后就将 cpu 权限从 run 零转变到 run 三来执行 linux 内核用户程的 iit 脚本, 启动第一个用户进程,此时内核进程变成用户太进程 pi 第一,而 rest iit 还并发创建了一个 pi 第二的内核太进程, 整个 linux 生命周期都处于内核态中,这个内核态进程负责处理消息队列、 i o 处理、内存回收、 cpu 覆盖均衡等等内核模块的功能, 最后 rest i need 就 会进入 cpu idle loop 状态,变成 pid 零。注意, pid 一 和二是并发多线程运行的。到了这里最重要的一点是标志着内核初步化完成, linux 内核可以开始正常运行,所以这里也是我们入门手搓操作系统最关键也是最重要的一步, 因为这里进入了用户太,此时大家想想用户太程序如游戏、音乐等等应用如何与内核函数交互的。这里依旧参考之前的调用流程图,可以看见通过系统调用来进入内核太元代码, 然后继续往下执行调用内核源码的内存管理模块,最后一直调用到 start kernel, 说实话,准备好的数据结构,当然这流程图有点问题,不是调用 start kernel, 而是调用它实时化好的数据结构, 关机的时候就通过系统调用和中断来完成关机操作。到了这里,我们整个 linux 的 生命周期也串联起来了, 知道用户态是如何调用到内核底层的。现在我们开始看一下那些简化的代码吧,看看用什么思路去手搓出一个可运行的操作系统。内核 开始部分就是 bios 启动自检,大家有兴趣可以看一下,就是说 bios 帮你完成很多工作,去准备硬件环境,然后一堆东西。最终关键的一步就是 跳转到一个零叉七 c 零零的地址,这个地址是 bios 启动之后 cpu 要运行的第一个地址,也就是说我们的 nbr 或其他引导程序被加载的地址。如果有兴趣的话,可以了解一下 nbr 的 原理。 当然这个是源码中的所有代码,主要是定义各种关键地址还有函数,我们只要做一下简化就行。 这些简化的代码是我用 cloud 简化的,划了几刀,然后自己大概看一遍,然后修改一下,最后给豆包注,适合修改一遍,可能改的次数太多或者自己水平不够导致无法正常运行, 但代码逻辑上不会有太大问题,可以作为学习启动流程的一个参考。首先是 boot sector, 这是简化后的 mbr, 这里先声明一下零叉七 c 零零地址给连接器看的,然后把零叉七 c 零零压站,再往上面增长, 防止代码被覆盖。这里就是利用中断把 bios 的 输出清空,然后打印一些信息,然后跳转到九千地址对应源码队的 setup s 中。这一部分的话,最重要的是零叉 k a 五十五, 作用是告诉 bios 这个整个 boot sector 是 nba, 可以 去了解一下文章中的解释。然后我们来到了零叉九千地址及 setup s 的 文件中,先来看看 setup s 的 汇编代码吧。首先依旧是告诉链接器器, 我们的汇编代码要被加载到零叉九千位置,这里直接把 a 二十拓展地址打开,然后加载 g d t, 并将 c 二零寄存器置为来远,跳转进入保护模式。 最后跳转到零 x 幺零零零零的内核地址入口。至于为什么这个地址是内核入口,我文章中有详细解释,这里只能贴张图,毕竟我也不知道怎么讲,虽然是我写的文章,过了几个月可能自己都忘了。下一步就是 head s, 这里我感觉代码地址有点对不上,可能代码有错,但我们只需要了解一下整个启动流程就好了,毕竟是简化代码,直接 call may, 使我们启动过程中会编代码部分正式解释 进入 c 语言代码。到了这一步就是进入我们前面说的 start kernel 函数了,也是 linux 内核真正开始出实质化的地方。简化后的函数还有这么多,在真实 linux 内核出实质化过程中,这些函数位置不能随意改变,毕竟后一个函数可能使用到前一个函数出实质化的数据结构。 简化版的代码,最后是输出一行 hello world, 但是在内核初步化完成后,在内核太输出的实际手搓 linux 的 时候,应该在 rest edit 最后启动 edit 用户太进程完成的,所以我们就不管这个了,就分析一下重要的函数就好。这些重要的函数已经有详细的解释了, 这里简单概括一下每个函数的作用,这里直接念稿了。概括一下函数作用就好,毕竟这些函数在 linux 内核整个声明流程中非常重要,一两句话说不完。 g d t n 虚化全区描述符表定义内核 type 与用户 type 的 代码段数据段,实现权限隔离与内存分段管理。 i d t n t 初步化中断描述浮表注册两百五十六个中断门,用于处理 cpu 异常、硬件中断及系统调用事件。 pick iit 粗化八千二百五十九 a 中段控制器重印刷硬件中段号,避免与 cpu 异常号冲突,保障外设中段正常传递。 s r 被其他函数调用完成中段处理。 m mini 粗化内存管理单元,开启分页机制,实现虚拟内存印刷与进城地址空间隔离。 ts 三一驶驶化任务状态段定义内核态站地址,实现用户态与内核态切换时的自动站管理。 i need 驶驶化系统调用接口,如 int 零叉八时,建立用户态程序访问内核服务的核心通信通道 process 这个函数要说一下,毕竟现在是零点一一代码简化版,实际上这个魔改的代码模拟了切换到用户态,还将 cpu 从 run 零到 run 三移交权限的动作,最后输出一行 hello world 到这里。实际上入门手搓操作系统内核已经算完成了。然后是 mac file, 这里完成了如何编辑和并链接 linux 内核编辑后的产物,而 mac 工具会根据 mac file 指定的链接脚本,如 link ld 来具体诗行链接规则,将 linux 链接成完整的内核。 makefile 和 ld 脚本理解起来可能会有点绕,有兴趣的话可以来看看文章中如何理解这两个脚本。把 elf 和 main o 等编码后的产物拼接成完整的 linux 内核 bz image。

嘿,网络又出问题了吗?别慌,我们来聊聊 tcpdump 这个抓包神器。你肯定也遇到过那种怎么都搞不定的网络问题,对吧? tcpdump 就 能让你直接看到最底层的网络流量,就像在偷听网络对话一样。好,那从哪下手呢?嗯,第一步得知道咱能监听哪些网卡吧,就用这个名,一下子就能列出你电脑上所有能用的耳朵了。 来,咱们试试,第一次抓爆就用杠 any 拎听所有活动的接口。不过要小心,这命令一跑起来,数据就像洪水一样,记得用 ctrl c 停下。那万一我只想看一小段流量,而不是没完没了的抓呢? 这个简单,用 c 叉参数,比如 c 十,抓满十个包就自动停。你看,默认输出的是主机名,不是 ip 地址,这有时候会有点儿慢,所以加上 n 参数,直接显示 ip 数字,又快又清楚。实时看是挺好,但有时候啊,我们得把数据存下来,回头再慢慢分析。 这就得用 w 参数里了,直接把抓到的包写进文件里了,屏幕上就不会刷屏了。 但这个文件是二进制格式,记事本课打不开。那要怎么看呢?哈哈,还是用 tcp 单步,自己加个 r 参数就能读这个文件了。 好了,现在我们把刚才学的参数串起来用一次,所以记住这四个核心参数, i、 c、 n、 w 日常排错基本就够用了。怎么样,基础用法掌握了吧?下次再遇到网络问题,你会先敲哪个命令呢?