linux-19 根文件系统(一)
之前提到过,linux的目录是一个倒置的树,它通过层次性的方式来组织,管理整个系统的文件,而这本身实际上是通过文件系统。文件系统,大家记得文件系统是内核的主要功能之一,
它的主要目的就是实现本机上的某一个分区上的文件管理,最后,要记得,对于文件系统一条条的磁盘来说,它通常指的是以分区来进行标识的,但是在整个系统上,所有的文件系统都必须同属于,这样的整个系统级别的一个东西,它有个名字叫根文件系统,叫rootfs,对于linux而言,每一个文件都必须是根文件系统下的某一个路径,或者是都必须要通过文件系统才能够进行访问的。如下图,
我们这整个称为是文件系统,当然A是根,叫root,用 / 来表示,在每一个路径下,还可以有子目录或者文件,文件的都是叶子节点,否则它就是目录,当然,无论是特殊文件,块设备也好,字符设备也好,都是文件,所以从这个角度来讲,可能文件只分为目录和文件,除了目录都是文件,而所有的文件都存放在目录当中,或者能够通过查找得到,对于linux系统而言,他们有一个专门的规范和标准来定义,因为发行版有很多,centos、debian、ubuntu等等有许许多多的发行版,如果每一个发行版的组织随便起一个名字,那么,我们发现整个linux是比较混乱的,因此,标准委员会就专门制定了一个标准,叫FHS,叫文件系统层级标准,它规定的一个linux发行版应该创建哪些目录用于存储特定的文件,所以,无论是外表看着suse或者debian,他们基本上都会具有这个目录,
而且他们所包含的文件几乎都是近似的。所以总体ls一下,ls /,如下图,
就可以查看我们整个系统上根目录下的所有的一级子目录,这些子目录并非完全都是标准,只是在有些绝大多数的发行版上都会提供,我们一个一个来介绍,首先,/boot是用来干什么的,ls /boot 看一下,如下图
看它里面所存放的文件,关键性的文件有两个一个叫做vmlinuz,一个叫做initrd,那么但是在红帽六以上的版本,这块需要注意,这个initrd被命名为initramfs,名称可能有所不同,但功能是相同的,我们就以红帽五为例,这两个文件其实是我们操作系统启动时候所要用到的,以及暂时性的小微的linux系统,initrd是一个映像文件,类似于虚拟空间的文件系统一样,像一个假的硬盘,甚至还可以给它进行分区的,实际上,这里只有一个分区,它里面具有了一个传统linux所具备的很多基本目录,而且是独立的,但是它的主要目的在咱们系统使用的时候再详细介绍。由此可见,boot的作用主要用是跟我们系统启动相关的文件,如内核、initrd,initrd叫RAM磁盘或者叫内存。当然,还包括 grub,这是一个bootloader,它叫引导加载器,所以boot目录如果不存在或者对应的分区不存在,没有这几个文件根本没法处理,好,这就是boot目录。再看下一个,这个叫/dev,顾名思义指的是device的缩写,所以这是设备的,这里面都是设备文件,我们说过linux的重要哲学思想之一叫一切皆文件,那因此,所有的硬件设备也被识别成各个文件,比如我们的光盘在DEV目录下,如果是DVD设备的话,它可能显示为DVD,我们来看看,ls /dev,我们来看有没有DVD,如下图,
是不是有个dvd呀?但事实上,除了DVD,还有另外一个叫cdrom,发现了吗?还有cdrom、cdrom-sr0、cdrw、cdrw-sr0、cdwriter、cdwriter-sr0,这实际上都是同一种文件,它们是符号链接文件,我们使用ls -l来看,如下图,
这些相关的文件都指向谁了?sr0了,是不是这就表示它是个符号链接?这是个链接文件,或者说你在Windows上就理解为叫快捷方式,对吗?好,他们都指向了同一个位置,事实上,它无论起多少名字,指的都是同一个文件而已,那为什么有这么多名字呢?因为不同的用户,他的引用机制不一样,大多数情况下,我们都使用cdrom来引用它,而之所以这里还显示为cdrw,你的可能没有,我这个有,因为我的是一个可刻录的光驱,所以在这里有叫cdwriter,如果直接装在物理设备上的话,现在很多的光驱很有可能指向的不是sr0,很有可能是别的什么,以后会详细的讲,现在大概知道就行了,所以这些都是我们所谓的叫设备文件。而且将来我们去引用这些设备的时候,也都到这底下去找,一般说来,只要我能记得cdrom,就能够找到我们的光驱,因为在大多数的发行版上,他们都会为光驱自动创建一个链接,叫cdrom,好,其他内容我们就不再一个一个去说,先知道这底下都是设备文件就好了。好,那么这里需要再做一个进一步说明的是,设备文件有两种类型,块设备和字符设备,它俩有什么区别?什么是块设备?什么是字符设备?简单来说,块设备指的是随机设备,可以实现随机访问的设备,而字符设备则是线性设备,要完成线性访问的。什么是线性?理解成有次序的,比如像键盘,敲个ABC,它如果在我们的显示器上显示为BCA可能就麻烦了,像这种通常是按一个字符一个字符的输入的,一个字符一个字符的进行输入读取的设备也叫字符设备,它的访问是线性访问模型,所以是逐个字符访问或者叫按字符为单位,而随机访问设备或者叫块设备,它是随机访问的,无所谓先后,你放在什么位置,我可以随意找到任何一个地方的数据,像我们的磁盘,像我们的硬盘。存了三个文件A、B、C,如果打开A以后才能打开B,那就麻烦大了,是不是?所以我们可以直接访问C文件,而不用经过A、B这两个文件,那因此,像这种我们都称为叫随机访问的设备,而且它的访问是按照组织层对应的数据块进行访问的,数据块首先数据都被分割成一个一个的块了叫,所以它也被称为叫块设备。
那想一下,鼠标应该是什么设备啊?那显示器应该是什么设备?它们都是线性的,显示器看上去显示的一满屏,对吧?其实字符也是逐个显示出来的,如果知道什么是CRT显示器,这个很容易理解,整个满屏显示的所有内容都是在显存当中按位存储的,而且是逐个显示的,当然,早期的显示器最容易理解了,现在液晶显示器,很难想明白这个道理,对吧?这里不做过多的解释了,以后慢慢去深入了解,要知道这两种设备文件类型就成了。而且发现设备文件的颜色非常独特,背景为黑色,前景为黄色,看到了吗?这就告诉你,这是特殊文件,以后我们但凡看到这种类型的文件,就知道它是特殊文件。特殊在什么地方?你有没有发现这个文件的非常独特?这个位置看到了吗?如下图,
不再是大小了,而是两个数字,而且中间用逗号隔开了,我们说过以前的文件类型,我讲ls的时候是不是都是文件大小啊?这里没有大小,所以我们说特殊文件是没有大小的,他们直接存储为原数据,没有数据,只有原数据,而且是作为设备的访问入口存在的。这两个数字是设备的设备号,或者是我们硬件的设备号,曾经提到过这个概念,叫主设备号和次设备号,同一种类型下的不同设备的,比如说,我装了两块硬盘,那这两块硬盘属于同一总线,同一种类型。这是dev目录设备文件,一个设备只有有了设备文件,通常才能被linux所访问的,所以以后但凡要在我们的主机上接入一个新设备,比方插一个U盘上来,要想访问你的U盘,首先在dev目录下得给他创建一个设备文件,当然这个在大多数情况下,我们的系统会自动完成,好,这是设备文件,将来我们还要深入的去解释,因为这里边所涉及到的问题是非常复杂的。
再看下一个目录,下一个叫/etc是吧?etc这也就是我们配置文件所存放的位置,我们系统上大多数程序或者服务程序的配置文件都在这个目录下,或这个目录下创建一个子目录目录下,像之前看到的/etc/passwd,记得吧,这是psswd的配置文件,对吗?甚至也是全系统用户账号的配置文件,所以我们说这是配置文件的主要存放路径。那因此,这里边绝大多数都是纯文本文件,我们上次说过linux的重要哲学思想之一就是将程序的配置文件保存为纯文本格式,还记得吗?好,这是/etc目录,当然/etc目录还有许许多多的子目录,将来用到的时候再一个一个解释,因为他们都是纯文本的,不必要再做额外的说明了。
再看下一个,home,顾名思义,上次就解释过,每一个用户都有一个家对吧,这是用户的家目录,但是需要注意,每一个用户的家目录肯定跟其他用户是不能重复的,对吗?所以每个用户的家目录通常默认为home下有一个跟用户名同名的目录,通常默认为home下的username,比如说像student,我们ls /home,如下图,
是不是有个用户叫student目录,这就是student用户的家目录,所以我们切换到student,su - student,它的家就是home下的student,看到了吗?如下图,
返回我们的root用户,但是各位需要注意root用户是一个非常独特的用户,root用户的家目录不在home下,而是直接在根文件系统上,并且它的名称就叫root,我们还需要注意这一点。在传统的unix系统上,root用户是没有加目录的,因为root用户从来都不需要登录操作系统,事实上,在linux上也遵循此法则,现在是学习,为了使用方便,所以通常都拿root直接登录了,但各位一定要记得,一般情况下,将来在工作的时候,你千万不要拿root用户直接登录,因为任何一个误操作都有可能是致命的,root用户有所有权限,在Windows上,应该知道我们要格式化C盘,Windows通常是不允许的,试过吗?但是在linux不是如此,你要删除根下的所有文件都能删除掉,大家知道,对linux而言,所有文件都在根下,对不对?你把根删除了都能做到,所以它是不阻止你自杀的,那因此,这样一个误操作将会导致致命的后果,所以我们不建议使用root直接登录,再强调一遍,在生产环境中一定要记得啊,我们现在只是为了学习方便,不然的话我们要做一个操作,老是得切换用户,那我在生产环境中,将来就是使用一个普通用户登录进来,只有在用到管理功能的时候才切换到管理员,好,这是管理员的家目录,知道就好了。
好,再继续看下一个目录,下一个叫lib,这是某一个单词的简写是吧?叫什么?library,
库文件和内核模块文件目录,内核模块文件在这个路径下/lib/modules目录下,顾名思义,大家知道,modules是不是就是模块的意思,是内核模块文件,这是lib的一个子目录,这里的库文件通常都有两种类型,有静态库和动态库。好,我们的库文件有两类,有静态库和动态库两种,
动态库,上次提到过,叫动态链接库,在Windows上叫什么?dll,.dll在linux上表现为.so,叫共享对象,shared object,我们称叫共享对象。另外,还有静态库,静态库在linux上通常叫什么?.a,Windows上好像叫.lib,那动态和静态有什么区别?大家发现我们动态库在linux上叫做共享库,是这样子吧?它叫共享对象,它为什么被称为叫共享对象呢?库是用来干什么的?库就是一些被调用的封装好的某些功能是不是,那一旦有这个功能了,我们程序在开发的时候直接调用这个功能就好了,不用再自己写这程序,对吧,那他们在系统上执行的时候怎么执行呢?为什么被称为叫共享库?任何程序和数据都必须要载入内存以后才能被程序所使用,对不对?那共享库的好处就在于第一个程序启动以后,他如果用到某个共享库,他把共享库直接载入内存中就使用了,那在内存中存放这个共享库,而我们启动第二个程序的时候,如果第二个程序也用到这个共享库的话,它就不用再载入了,因为内存直接有,拿来就用,能明白吗?所以把它称为叫共享库,所以这个库文件在内存当中,甚至只用存储一份即可,也能大大节约内存空间的,静态库并非如此,静态库是直接链接到程序的地址空间中去,而且是作为程序的一部分而运行的,所以静态方式便于程序单个文件管理,我要把一个程序从一个linux主机挪到另外一个linux主机上,如果它是个静态的文件,编译的时候或者说使用静态编译方式的文件,使用的是静态库文件的话,那么这个时候,只需要把文件从a主机复制到b主机就能直接运行的,但是如果要使用动态链接库的方式的话,那就意味着它自己的运行还要依赖于库的,对不对?那就意味着我把这个程序从a主机挪到b主机还不够,还必须要保证b主机上有它运行所依赖的共享对象才行。假如我们的ls命令运行的时候链接到了某个动态对象上,它依赖于某个库,注意这个库跟ls没关系,但是ls运行的时候要用到它,它存储的时候是单独放在lib下的,能理解这个概念吗?这些都是.so文件,所以这就意味着将来我想把这个ls在另外一个主机上运行。另外一个主机没有ls,我只把这个文件复制过去,请问它能运行起来吗?不能,为什么?因为ls的运行要依赖于什么?扩文件,是不是这道理?所以我们必须要把ls和它依赖的扩文件一并复制过去,是不是才行啊?就是这个道理,但是如果我们要静态编译的话,一定要记得这个库是不是独立的,如果我们要使用静态编译,ls就直接把这个库直接就包含进来了,ls中就直接有,所以我们以后想在另外一个主机上运行,直接复制ls过去了,这叫静态编译。哪一种方式更好啊?如果所有程序都依赖于这个库,每个程序编译的时候都包含自身,可以想象这个个头有多大?如果都运行起来,需要占用多少内存?有多少是重复和浪费的?明白了吗?我们系统为什么会做成这样子?为什么有库?为什么称为叫动态共享对象?需要真正去理解他们,事实上,无论是库文件还是可执行程序,它们本身得能运行才行,比如,各位来看,我们看一下,ls /lib,如下图,
看这些文件是不是都是显示为绿颜色的,我们说过这就表示什么?有执行权限对吗?来看一下lib,ls -l /lib,如下图,
看些绿色的文件是不是都有x权限,看到没有?这说明它是有执行权限的,而且我们随便找一个文件,看它的类型,比如就看这个libc-2.5,看它的格式,elf 32位,可执行的共享对象,是不是跟我们的bin下的ls格式的可执行程序是一样的,file /bin/ls,如下图,
elf的格式对吗?只不过一个是可执行格式,一个是叫动态共享对象,libc-2.5.so这里为什么没显示叫可执行格式呢?不能单独执行,库文件是不能单独执行的,它因为没有程序的访问入口,或者叫没有执行入口,它只能被调用,好,那么这就是我们的库文件,lib主要就是用于存放库文件的。但是除了lib之外,还有其他路径也可以存放库文件,稍后再做说明。
好,继续往下看,下一个目录,lost+found,这不算,这是任何一个新建的分区上都会有的目录,它通常跟我的文件系统相关,适用于存储那些文件系统在突然间断电的时候,尚未保存的文件,所以它是为了能够实现丢失然后重新找回的这个目的的,所以叫lost+found,这跟我们系统没关系,不用管它。
下面一个media,还有一个叫mnt,这两个是挂载点,media和mnt叫挂载点目录,什么叫挂载点?在Windows上,我们要想访问光盘中的内容,怎么访问?比如我拿了一张光盘,想访问,放进光驱双击打开,是不是就可以访问了?就这么简单,在linux上不是你把光盘放进光驱以后,必须要将这个设备关联到当前整个文件系统树上的某一个节点上,才能进行访问的,而这个过程,把某个设备跟当前文件系统上的某一个目录相建立关联关系的过程,就叫挂载的过程。所以我们把光盘放进光驱,并不是说你找到dev下的cdrom,你就能访问了,不是这么回事,这是设备文件,你不能双击打开,或者甚至我们也不支持鼠标,对不对?不能双击打开进去的,你也不能cd进去,它不是个目录,它是个文件,你也不能使用其他目录命令去查看,因为它是个设备文件,它只是设备上数据的访问入口,那到底怎么访问?那就要建立关联关系,我们必须要把cdrom给它关联到一个位置,比如说,我把它关联到media就可以,然后我们通过这个目录就可以访问这里面的内容,这个过程就叫挂载的过程。那哪些地方专门用于挂载的,像media就是,但是media通常用于挂载移动设备的,比如你的U盘,光盘等等,而mnt通常用来挂载额外的文件,文件系统额外的临时文件系统,比如说我有第二块硬盘,第二块硬盘的数据,想访问也得挂载,只要跟我们当前根建立关系都得挂载,当然,这里并没有严格规定,事实上,你无论挂在移动设备也好,挂在额外设备也好,
只要是这两个目录下的某一个目录,一般而言都可以,只是fhs规定media是移动设备的挂载点,
mnt是额外临时文件系统的挂载点。注意这些目录,我们将来都会反反复复的使用,好。
再看下面一个叫misc,这个其实是比较独特的,说过这叫杂项,这默认是个空目录,那些不便于归类的都在这里头,实际上也没用它,所以你把它理解成叫杂项即可。
再看后面这个opt,顾名思义opt是什么?叫optional,叫可选的,所以这是个可选目录,那既然可选了,这是一个可选目录,早期,它通常用于安装第三方程序的,什么意思啊?我系统运行的好好的,但是有个软件,我想装这个软件跟我系统没有任何关系,是我自己想装的,所以它会装在这个文件夹,比如说早期oracle就装在这个文件夹,还有像系统漏洞扫描工具,所以这些第三方非关系的软件通常都装在这里,所以叫第三方程序安装目录,但是现在约定俗成已经不把它放在opt下了,通常放在另外一个路径下,我们后面会有介绍,叫/usr/local,好,这是opt。
下一个比较独特,叫proc,这是一个伪文件系统,事实上,这个目录中没有任何内容,是不是呢?我们打开看看,我们ls /proc,如下图,
有没有,一大堆是吧?那什么叫没有任何内容呢?你要记得这个目录其实是空的,但系统启动起来以后,它就不空了,如果我们的系统不启动,打开硬盘,你看看在你的硬盘这个目录是空的,那这个目录绝对是空的。但启动以后就不空了,为什么?因为这里边所显示出的所有文件,实际上是内核的映射文件。所以你可以把它理解成叫内核映射,或者内核映像文件都行。所以这里边儿大多数的文件都是内核中很多的可调参数或者内核的工作的统计数据。我们要想看一看内核当前工作它的工作属性,比如说像我的网卡,大家知道网卡是个设备,要想访问是不是只有内核才能访问啊?那这个网卡到底接收了多少个数据包?发送了多少个数据包?这些统计数据都在这,还有我们的内核支不支持IPV4协议,大家知道IPV4不?支不支持路由功能等等等,都在这里,所以我们要想改变操作系统的根本工作属性,通常都是改变这个目录下的某个文件来完成的,因为事实上你改的不是文件而是内核属性。他们只不过被映射成了文件,都是假文件,事实上不是文件,再说一遍,
他们只不过表现出了文件的样子而已。这就是为什么把它称为叫伪文件系统的原因,有些东西觉得很奇怪,你可能理解不了,那么不是文件还能写这个文件?的确如此,这是通过软件的方式模拟出来的,我们不是硬盘,还还能使用虚拟机创建一个假文件是不是,很多设备都是可以模拟的?更何况有文件。好,这叫proc,是内核映射,那我们最后讲的内容叫系统调优,其实调优中的绝大部分内容都跟这个有关,我们整个系统的性能,数据的监控也跟这个目录相关。所以事实上,这是个非常重要的目录,但是也是最难理解的目录。
好,除了它之外,还有另外一个伪文件系统叫sys,一个目录叫sys,sys这是另外一个伪文件系统,里边本来也没有任何内容,系统启动起来以后才有,只不过它不是内核映射文件,一般是跟硬件设备相关的属性映射文件,事实上,跟内核也相关,只不过把它独立出来了,只不过把它独立出来,当做一个独立的文件系统来使用。通常用于实现硬件设备管理的,尤其是这像硬盘这样的存储设备。还是那句话,既然跟内核相关,我们的很多调优工作都要通过它来进行,比如我们修改磁盘调度队列或者叫IO磁盘IO调度队列的时候都在里边进行修改,简单来看,我们来看这个目录sys,ls sys,如下图,
这里边有很多目录,像block,块设备,bus,这是总线,class不管它了,devices这是设备是不是,firmware这是固件,fs就是文件系统,kernel内核,module是模块以及power电源相关的内容。还是那句话,关机以后这个目录也是空的,它也是映射出来的信息而已好。
我们继续看,还有什么目录呢?tmp是吧?顾名思义,这是什么目录啊?这是个临时文件系统,
很多用户登录进来系统以后都要存放临时文件的,对吗?所以一些公共的临时文件可以被其他用户查看到的临时文件都放在这个路径下,既然是临时的,它的主要目的是不需要长久存储的,对吗?所以这个目录一般而言,每隔一个月,如果这个文件一个月之内再也没有被访问过,会被自动清除的,这是系统上定义的一些脚本完成的任务,而且这个目录还非常独特,每一个人在里边都可以创建文件,谁都有权限,普通用户也好,管理员也好,但是每一个人只能删自己的文件。却删不了别人的,那因此我们来看这个目录,它格式非常独特,我们ls -ld /tmp,如下图,
看它的底色是绿色的,看到了吗?底色是绿色的,前景是黑色的,而且它的权限很独特,展现为t,不再是x了,那这些都是什么?后面讲到权限管理的时候,会细说,知道就行。好,这是临时文件的存放位置,事实上,我们系统还有另外一个路径也能存放临时文件的,它在另外一个目录下,我们等会再说。
/var,叫经常发生变化的,刚装完系统,这个目录很小,但是你会发现,当你的系统运行半年以后,这个目录就非常大了,因为随着系统的运行,这里边的文件会越来越多,内容也越来越多,数据量也越来越大,来看看这底下都有什么子目录吗?ls /var,如下图,
有许多的子目录是不是?有些都是非常关键性的子目录,比如说像cache,这是什么?缓存对吗?
再看这个叫lock,这是什么?锁文件,还有这个log,日志,还有mail,用户的邮件转存位置,还有像run,run在我们Linux系统上,每一个进程运行起来以后,都有一个进程号码,而很多服务需要存储的进程号码在某一个单独的文件当中,这个文件就在run下,而且通常是什么点PID,ls run,如下图,
里面是不是有很多的.pid文件,看到了吗?这叫进程ID号,我讲到进程管理的时候,我会再提到,
var下还有一个tmp,看到了吗?这是另外一个临时文件目录。
再说两个非常关键的路径,一个叫bin,一个叫sbin,bin叫做binary,什么意思?二进制是吗?二进制所以bin路径下面是什么?可执行文件,所有的命令都在这个路径下,但是这里边放的都是用户命令,而sbin放的都是管理命令。s可以理解成叫super,所以这两个里边放程序,lib放的是库,这些程序运行的时候可能依赖于lib下的库,而且每一个程序都有可能有用到配置文件,配置文件在哪啊?/etc,这就是他们的关联关系。
还没说一个非常关键的路径叫做usr,usr指的是什么?user是不是?是不是理解为它是user的简写?显然不是的,首先s指的叫shared,shared什么意思啊?共享的,r叫read-only,只读的,
所以通常是在用户之间,或者在整个系统级别上叫全局的共享的只读文件,所以这里边放的是只读文件,可能让你想象不到的是,在usr下还有很多独特的路径,比如在usr下有bin,猜这是什么?usr下有sbin,usr下还有lib,如下图,
刚才说过,bin和sbin放的是可执行程序对不对,lib放的是什么?库。为什么要多这么一个路径呢?为什么不都放在/bin下或者/sbin下?我们可以简单理解成/bin和/sbin这些程序跟我们系统自身启动相关的命令或者可执行程序,而/usr/bin或者/usr/sbin通常是系统自身启动起来以后,为了提供一些基本功能,所应该具备的命令或者可执行程序,所以一个是跟系统系统启动相关的,一个是跟系统自身的正常提供基本功能相关的。当然,这只是为了方便认识才有意这样做的分类,但不管怎么讲,在/usr/bin下和/usr/sbin下的程序所依赖的库,如果不是公共库,不是lib下的这些共享库,
它就必须要放在/usr/lib下来,所以这也是库文件存放路径,不但如此,在usr下,还有一个独特的路径叫local,如下图,
这又是一个独立的文件系统,它底下也有bin,也有sbin,也有lib,这是第三方软件的安装路径,它底下甚至还有etc或者com目录的,专门用来存放配置文件。对于一个操作系统来讲,通常/bin /sbin /lib /usr/bin /usr/sbin /usr/lib就这几个路径对于一个操作系统来讲是必须的,而 /usr/local 并非是必须的,因为它是第三方软件,跟系统运行没有关系,只是为了提供外围其他功能的,所以就算这个目录底下没有任何文件,把它卸载掉,我一不小心把它格式化了,并不影响系统的启动,这能理解吗?但/bin /sbin /lib /usr/bin /usr/sbin /usr/lib 不行,一定要理解,什么叫第三方软件,虽然这样归类未必精确,足以说明问题,可以这么理解它,就是第三方的意义就是非关键性的程序。当然,这里虽然把它称为叫非关键系统,但是对业务来讲,很可能非常关键,比如把oracle装在这底下了,oracle可能是非常非常关键,没有oracle,系统正好能启动,但没有oracle业务可能执行不了。所以我们这里都是站在系统的立场或者角度来进行说明的。
好,那我们关键性的路径其实就这么多,那要注意这些路径,每一个路径的基本意义和它的名称,一定要熟悉熟练的掌握。还是那句话,我们只要理解了这些路径的意义,并且理解了对一个系统来讲,哪些程序是最基本的,我们完全可以拿一块硬盘,或者拿个U盘在里边创建了这样几个目录,在里面拷贝几个文件进来,然后这个U盘就可以启动起来。文件系统就这么简单,所以它并不需要特别多的额外的其他东西。当然,那之所以能这么做,那是因为我们的linux没有注册表的概念,对吧?所以把程序在这台主机上装,附到另外一台主机上,这样很轻松的跑起来,从来不需要注册表。
相关文章:
linux-19 根文件系统(一)
之前提到过,linux的目录是一个倒置的树,它通过层次性的方式来组织,管理整个系统的文件,而这本身实际上是通过文件系统。文件系统,大家记得文件系统是内核的主要功能之一, 它的主要目的就是实现本机上的某一…...
kotlin中泛型中in和out的区别
概念含义 in关键字(逆变) 在Kotlin泛型中,in关键字主要用于定义逆变(Contravariance)。它表示一个泛型类型参数可以是指定类型或者它的超类型。简单来说,就是对于类型A和B,如果A是B的子类型&…...
Spring学习(一)——Sping-XML
一、Spring的概述 (一)什么是Spring? Spring是针对bean对象的生命周期进行管理的轻量级容器。提供了功能强大IOC、AOP及Web MVC等功能。Spring框架主要由七部分组成:分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 S…...
设计模式——桥接模式
文章目录 1. 定义2. 结构组成3. 桥接模式结构4. 示例代码5. 模式优势6. 总结 1. 定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的主要目的是将抽象部分与它的实现部分分离,使它们都可以独立地变化。 2. 结构组成 桥接模…...
python Enum类介绍及cls关键字用法详解
文章目录 Enum 类基本用法定制枚举枚举方法枚举类方法 cls 关键字类方法工厂方法总结 在 Python中, Enum 类和 cls 关键字有一些特定的用法和含义。下面我将详细解释它们的用法: Enum 类 Enum 类是Python标准库中的一个类,用于创建枚举&a…...
模型的多GPU并行训练,DDP
DDP全称是DistributedDataParallel, 在torch.nn.parallel里面。 今天总结一下用DDP进行多GPU并行训练的方法, 内容来自build gpt2加上自己的补充。 如果你有多块GPU,就可以充分利用它们。 DDP会创建多个process(进程,不是线程哦&…...
直流有刷电机多环控制(PID闭环死区和积分分离)
直流有刷电机多环控制 提高部分-第8讲 直流有刷电机多环控制实现(1)_哔哩哔哩_bilibili PID模型 外环的输出作为内环的输入,外环是最主要控制的效果,主要控制电机的位置。改变位置可以改变速度,改变速度是受电流控制。 实验环境 【 !】功能简介: 按下KEY1使能电机,按下…...
LabVIEW软件开发的未来趋势
LabVIEW软件开发的未来趋势可以从以下几个方面来分析: 1. 与AI和机器学习的深度结合 趋势:LabVIEW正在向集成AI和机器学习方向发展,尤其是在数据处理、预测性维护和自动化控制领域。 原因:AI技术的普及使得实验和工业场景中的…...
ChatGPT之父:奥尔特曼
奥尔特曼 阿尔特曼一般指萨姆奥尔特曼,他是OpenAI的联合创始人兼首席执行官,被称为“ChatGPT之父”.以下是其具体介绍: 个人经历 1985年4月22日出生于美国芝加哥,8岁学会编程,9岁拥有电脑,对信息技术和互联网产生兴趣.高中就读于约翰巴勒斯中学,后进入斯坦福大学主修计…...
MySQL8.0后的double write有什么变化
什么是double write? 一部分是内存中的double write buffer ,大小为2MB(16k一个页,一共128个页)。 第二部分是磁盘共享表空间的128个数据页,在对脏页进行落盘的时候,并不是直接进行落盘&#x…...
wsl ubuntu Unexpected error from cudaGetDeviceCount
wsl ubuntu Unexpected error from cudaGetDeviceCount 在这里插入图片描述 参考资料: Quad (4x) A6000 WSL2 CUDA Init Errors...
渐开线齿轮和摆线齿轮有什么区别?
摆线齿形与渐开线齿形的区别 虽然在比对这两种齿形,但有一个事情希望大家注意:渐开线齿轮只是摆线齿轮的一个特例。 (1)摆线齿形的压力角在啮合开始时最大,在齿节点减小到零,在啮合结束时再次增大到最大…...
状态图的理解和实践
状态图(State Diagram)是软件工程和系统设计中的一种重要工具,主要用于描述对象在其生命周期中的动态行为。通过状态图,我们可以清晰地看到对象所经历的状态序列、引起状态转移的事件(event)以及因状态转移…...
mysql(基础语法)
准备一张员工表 /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80037 (8.0.37)Source Host : localhost:3306Source Schema : studymysqlTarget Server Type : MySQLTar…...
openjdk17 从C++视角看 String的intern的jni方法JVM_InternString方法被gcc编译器连接
symbols-unix 文件部分内容 JVM_IHashCode JVM_InitClassName JVM_InitStackTraceElement JVM_InitStackTraceElementArray JVM_InitializeFromArchive JVM_InternString 要理解在 symbols-unix 文件中包含 JVM_InternString 方法的原因,我们需要从构建过程、符号…...
金融保险行业数字化创新实践:如何高效落地自主可控的企业级大数据平台
使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…...
一键打断线(根据相交点打断)——CAD c# 二次开发
多条相交线根据交点一键打断,如下图: 部分代码如下: finally namespace IFoxDemo; public class Class1 {[CommandMethod("ddx")]public static void Demo(){//"ifox可以了".Print();Database db HostApplicationServices.Workin…...
flask基础
from flask import Flask, requestapp Flask(__name__)# app.route(/) # def hello_world(): # put applications code here # return Hello World!app.route(/) # 路由 当用户访问特定 URL 时,Flask 会调用对应的视图函数来处理请求 def index():return …...
Springboot基于Web的高校志愿者服务管理系统81559
Springboot基于Web的高校志愿者服务管理系统81559 本系统(程序**源码数据库调试部署开发环境)带论文文档1****万字以上,文末可获取,系统界面在最后面。** 系统程序文件列表 项目功能: 志愿者,团队,招募机构,团队信息…...
各种网站(学习资源及其他)
欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...
熊军出席ACDU·中国行南京站,详解SQL管理之道
12月21日,2024 ACDU中国行在南京圆满收官,本次活动分为三个篇章——回顾历史、立足当下、展望未来,为线上线下与会观众呈现了一场跨越时空的技术盛宴,吸引了众多业内人士的关注。云和恩墨副总经理熊军出席此次活动并发表了主题演讲…...
Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
安装 1.拉取项目 项目地址: chatgpt-on-wechat 2.安装依赖 pip3 install -r requirements.txt pip3 install -r requirements-optional.txt3、获取API信息 当前免费的有百度的文心一言,讯飞的个人认证提供500万token的额度。 控制台-讯飞开放平台 添加链接描述…...
独一无二,万字详谈——Linux之文件管理
Linux文件部分的学习,有这一篇的博客足矣! 目录 一、文件的命名规则 1、可以使用哪些字符? 2、文件名的长度 3、Linux文件名的大小写 4、Linux文件扩展名 二、文件管理命令 1、目录的创建/删除 (1)、目录的创建 ① mkdir…...
达梦数据库-读写分离集群部署
读写分离集群部署 读写分离集群由一个主库以及一个或者多个(最多可以配置 8 个)实时备库组成,基于实时归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能,还具有读写操作自动分离、负载均衡等特性。同时可以配置确认监视…...
C#(事件)2
一、事件的使用步骤 定义委托(如果需要): 如果没有合适的预定义委托,就需要定义一个委托来匹配事件处理程序的签名。例如,public delegate void MyEventHandler(int value);定义了一个名为MyEventHandler的委托&…...
Linux xargs 命令使用教程
简介 xargs 是一个功能强大的 Linux 命令,用于从标准输入构建和执行命令。它接受一个命令的输出,并将其作为参数提供给另一个命令。它在处理大量输入时特别有用,其含义可以解释为:extended arguments,使用 xargs 允许…...
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
GitLab停止为中国大陆、香港和澳门地区提供服务,要求用户在60天内迁移账号,否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息: 1. 背景介绍:GitLab是一家全球知名的软件开发平台,提供代码托…...
Centos下的OpenSSH服务器和客户端
目录 1、在 IP地址为192.168.98.11的Linux主机上安装OpenSSH服务器; 2、激活OpenSSH服务,并设置开机启动; 3、在IP地址为192.168.98.33的Linux主机上安装OpenSSH客户端,使用客户端命令(ssh、scp、sftp)访…...
赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例
在工业4.0蓬勃发展的当下,工业机器人作为制造业转型升级的中流砥柱,正朝着超精密、极速响应的方向全力冲刺。然而,为其适配理想的望获实时Linux系统,却犹如寻找开启宝藏之门的关键钥匙,成为众多企业在智能化进程中的棘…...
我的JAVA-Web基础(2)
1.JDBC 防止sql注入 2.JSP JSP的基本语法 基本语法是 <% %> Java代码 <% %> 输出变量 可以转换成${变量}的EL表达式 <%! %>定义变量 JSP的基本语法包括以下几个主要部分: 1. 表达式(Expression) 表达式用于将…...
OMG DDS 规范漫谈:分布式数据交互的演进之路
一、由来与起源脉络 OMG DDS(Object Management Group Data Distribution Service)的发展是计算机科学和技术进步的一个缩影,它反映了对高效、可靠的数据共享需求的响应。DDS 的概念萌生于20世纪90年代末,当时分布式计算已经从理…...
JVM系列(十二) -常用调优命令汇总
最近对 JVM 技术知识进行了重新整理,再次献上 JVM系列文章合集索引,感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…...
人的心理特征
一、心理特征 通过心理学实验揭示了人类在认知、情感、行为等方面的一些普遍规律。 1. 社会性与从众心理 实验例子:阿什的从众实验(Asch Conformity Experiment)结论:人类天生具有从众的倾向,尤其是在群体中&#x…...
Python(二)str、list、tuple、dict、set
string name abcdefprint(name[0]) #a # 切片:取部分数据 print(name[0:3]) # 取 下标为0,1,2的字符 abc print(name[2:]) # 取 下标为2开始到最后的字符 cdef print(name…...
【CryptoJS库AES加密】
当涉及到前端加密时,通常需要使用加密算法来保护用户的敏感信息。下面是一个使用Vue 2和Vue 3的前端加密方法的示例: Vue 2版本的前端加密方法: // 安装crypto-js库 // npm install crypto-js --save// 导入CryptoJS模块 import CryptoJS f…...
FSW3410 双通道差分器2:1/1:2USB 3.1高速模拟切换 替代ASW3410
FSW3410 是 mux 或演示系统配置中的高速双向 被动交换机,适用于USBType-C™ 应用程序, 支持 USB3.1Gen1 和 Gen2 的数据速率。基于控 制引 脚SEL ,该 设备提供 在 PortA 或 PortB 到 PortCOM 之间的差分通道切换。 FSW3410 是一 种通用的模…...
【蓝桥杯——物联网设计与开发】基础模块8 - RTC
目录 一、RTC (1)资源介绍 🔅简介 🔅时钟与分频(十分重要‼️) (2)STM32CubeMX 软件配置 (3)代码编写 (4)实验现象 二、RTC接口…...
多摩川编码器协议
多摩川编码器是一种常用的绝对值编码器,其协议基于485硬件接口的标准NRZ协议,通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明: 硬件接口 多摩川编码器使用RS485接口进行通信,接口定义如下: 5V供电&…...
Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)
1、概述 在传统的单体应用中,事务管理相对简单,通常使用数据库的本地事务(如MySQL的BEGIN和COMMIT)来保证数据的一致性。然而,在微服务架构中,由于每个服务都有自己的数据库,跨服务的事务管理变…...
活着就好20241225
亲爱的朋友们,大家早上好!🌞 今天是25号,星期三,2024年12月的第二十五天,同时也是第51周的第三天,农历甲辰[龙]年十一月初二十一日。在这晨光熹微的美好时刻,愿那和煦而明媚的阳光照…...
navicat在pg数据库中设置自增
navicat在pg数据库中设置自增 问题来源: 在springboot的mubatisplus的插入数据操作时,我们设置了id为自增,但是由于数据库那边没有设置自增,导致数据id为null,插入失败,但是发现navicat设置pg数据库自增不…...
在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南
在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…...
2025年PMP项目管理考试时间一览表
PMP认证是全球项目管理领域公认的权威认证,它不仅能证明你在项目管理方面的专业水平,还能大大提升你的职场竞争力! 随着企业对项目管理人才的需求不断增长,获得PMP认证将为你带来更多的职业机会和高薪职位。 为了帮助大家合理安排…...
NS3学习——tcpVegas算法代码详解(1)
目录 一、源码 二、详解 1.定义日志和命名空间 2.注册Typeld类:TcpVegas和GetTypeId方法的实现 3.构造函数和析构函数 4.TcpVegas类中成员函数 (1) Fork函数 (2) PktsAcked函数 (3) EnableVegas函数 (4) DisableVegas函数 一、源码 /* -*- Mode:C; c-file-style:&qu…...
【RAII | 设计模式】C++智能指针,内存管理与设计模式
前言 nav2系列教材,yolov11部署,系统迁移教程我会放到年后一起更新,最近年末手头事情多,还请大家多多谅解。 上一节我们讲述了C移动语义相关的知识,本期我们来看看C中常用的几种智能指针,并看看他们在设计模式中的运…...
亚马逊云科技re:Invent:2025年将发生新变化
自从2006年推出Simple Storage Service(S3)和Elastic Compute Cloud(EC2)云计算服务以来,亚马逊云科技在过去的18年中,一直都是全球云计算技术的开创者和引领者。而随着人工智能技术的飞速发展和生成式AI时…...
某集团GIF动态验证码识别
注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/other/16 最近某集团更新了验证码,采用gif验证码,部分数据集展示如下...
llama.cpp:PC端测试 MobileVLM -- 电脑端部署图生文大模型
llama.cpp:PC端测试 MobileVLM 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考,也可尝试其他版本。 (1)PC:Ubuntu 22.04.4 (2)软件环境:如下表所示 工…...
美国加州房价数据分析01
1.项目简介 本数据分析项目目的是分析美国加州房价数据,预测房价中值。 环境要求: ancondajupyter notebookpython3.10.10 虚拟环境: pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…...
聚类算法DBSCAN 改进总结
目录 1. HDBSCAN (Hierarchical DBSCAN) 2. OPTICS (Ordering Points To Identify the Clustering Structure) 3. DBSCAN++ (DBSCAN with Preprocessing) 4. DBSCAN with k-distance 5. Density Peaks Clustering (DPC) 6. Generalized DBSCAN (GDBSCAN) 总结 是的,DBS…...