当前位置: 首页 > 原理解释

linux原理视频教学-Linux 原理视频教学

说实话,刚拿到 Linux 原理这门课的时候,我是真晕。
看着那些教科书上规整划一的目录,我脑子里的弹幕全是:这日子如何过?故此我就拍板,别上来就背定义,咱们得把那些枯燥的概念揉碎了嚼,得把黑匣子里的机器当成个有血有肉的兄弟,推开门跟他唠嗑。 刚启动接触的时候,最让我头疼的就是“文件系统”。书本上说分父目录、子目录、根目录,听着挺学术,实际上就像是家里人的辈分难题。根目录就是那大哥,哪位也不服哪位,哪位也不认哪位;父目录就是大哥的孩子,只能听大哥的话;子目录就是孙子,得听大哥和大哥孩子的。我那天在虚拟机里折腾,建了一个新的小屋,结局出于没搞懂权限规则,想让隔壁老张进,结局他连门都打不开,就连一松手就摔坏了我的地板。
那一刻我才明白,Linux 里的人不能互相干,这就是“所有权”。
要是我想改那个文件夹的名字,我得先问问他意见,要么给他打个招呼,这背后实际上是文件系统的 inode 和链接数在打架。 说到 inode,这玩意儿简直是我编程生涯里的噩梦,也是我最想搞明白的东西。在命令行里,那些数字密密麻麻像蚂蚁搬家,我就连想把它们变成象棋坑眼。为了搞清楚它到底是个啥,我用了个 Python 小脚本,自己挖了个坑。在 Linux 系统底层,每个文件都有一个唯一的 ID,叫 inode,它跟文件名彻底没关系。文件名只是告诉电脑这文件的名字叫啥,但真正的 ID 藏在硬盘里的某个小盒子里。我通过写个脚本遍历磁盘,发现每个目录下的文件都有一个对应的 inode 路径,并且这些路径是固定的,不管你如何重命名、如何移动,这个 ID 一辈子在那个盒子里不动。
这就好比你在街上找一个人,你叫一个名字,但他却叫另一个名字,只要 ID 对上了,你就能找到他。 这一搞,我彻底明白了,为啥要区分文件名和 inode。文件名负责的是“哪位”,它负责权限管住,哪位有权限改这个文件,哪位不能。而 inode 负责的是“物”,它记录着文件长啥样,多大,多大没满,多大没填,还有里面的零件排列得咋样。
比如我写个程序处理文件,我需求根据 inode 里的内容来拍板如何读,不能只看文件名当作是自己写的文件。
要是文件名改成别的,但 inode 不变,那原本的逻辑还在持续跑。
故此,文件名是临时给电脑的,而 inode 才是这个东西的身份证。 在 Linux 的权限模型里,owner、group 和 other 这三个角色,实际上就是把复杂的权限分配好办化了。Owner 是文件的主人,也就是创建它的用户;Group 是某个兴趣圈层,大家归于同一个圈层;Other 就是所有人了,包含 Guest 和用户。
你想调用这个函数时,你得知道是哪位在调用,你是归于哪个圈层的。
这就像进小区门禁,你知道你是业主,你是租户,还是路人,系统自动帮你判断权限。
要是我想把文件给组级管理,我就把 owner 设为空,group 设为组名,让它自动分配给那个组。 说到报错,Linux 的报错信息有时候比 Excel 还让人头大。
比如你运行个命令,结局啥也没形成,系统直接告诉你 "Failed" 要么 "No such file",这种时候我就不知道是不是我的语法错了,还是进程死了。为了搞清楚,我尝试了无数种排查方式。
起初是看报错信息的最终一行,那是最关键的一行,上面列出了具体的毛病代码,比如埃特鲁斯克斯毛病、权限不足毛病、地址无效毛病,这些代码对应的报错都不一样。我拿打印输出 `cat /etc/passwd` 试试看,结局系统提示 "No such file or directory",这行字根本不能乱猜。 这时候就得用到环境变量了。有些报错是出于路径不对,比如我想查某个文件的属性,但路径写成了 absolute path(绝对路径),系统却告诉我这是个相对路径毛病。
这时候环境变量就显得挺关键了。
要是你设置了 `PATH` 环境变量,系统就能自动拼接路径。
比如 `export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin`,这样我就不用管具体路径了,直接 `./script.sh` 就能找到脚本。
要是环境变量没设好,要么设错了,系统就没法自动拼凑路径,那就只能手动去拼了。我那天在调试时,特意把 PATH 设成了空,结局发现每次运行脚本都得先手动输入 `/usr/bin`,这种操作忒痛苦了,便我重新设了,这才好受些。 还有那个 "No such file" 要么 "No such process",这俩时常放在一起让人抓狂。前者是出于文件根本不存有,比如你试图访问一个虚拟目录,系统直接告诉你没找到;后者是指进程已经挂了,比如你杀了一个僵尸进程,它还在占资源,系统就告诉你它不存有。
区别在于,前者是文件的难题,后者是进程的难题。
要是我想让进程动起来,我给它一个 ID,比如 PID 1,然后让它执行命令,这时候系统会检查它的 inode 是否存有,要是不存有,它就不会执行。
这就是为啥有时候杀个进程,没啥反应,出于它被系统默默锁死了。 最终还得提提命令行里的 History。
有时候你不小心敲了错命令,系统会提示你,但要是你没输入 `!!` 要么 `!`,它就不会显示历史记录,你得从头启动猜。
这时候加上 `history` 命令就能看到你之前敲过啥,还有你编辑过的脚本。别看它不是最完美的,但起码能让你知道那会儿犯过啥错,下次就能避坑。 Linux 原理这东西,光读文献是学不会的,你得在命令行里瞎折腾。我每次敲一个命令,脑子里都得转一圈,想这玩意儿到底在干啥,它跟文件系统、权限、进程到底扯哪些关系。希望看完这篇,那些枯燥的术语能变成我脑子里的图灵机,我不跟它们打架了,而是能跟它们对话。
毕竟,理解 Linux,就是理解操作系统如何管理这个世界,而不只是是记住那些参数和命令。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站