Linux读书笔记
- 格式:docx
- 大小:56.73 KB
- 文档页数:6
郑重声明:未经本人允许,不得用于商业或非商业的转载和使用,如有需要请联系:yrj1978@hotmail.com引子为什么要写这个笔记:1,这本书的中文版翻译了太垃圾,没法阅读。
阅读英文原版,可以很好的理解作者的思路。
作此笔记备忘2,一直以来学习LINUXkernel的知识缺乏系统化,借对这本书的学习,系统化的学习一下LINUXkernel。
3,自己一直在做一个toosmall,toosimple的单进程,特权模式,64bit保护模式的称不上OS的OS,已经做完了bootloader,构思kernel的实现的时候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。
4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700多页的巨著。
不足:我不可能完全理解LINUX内存管理的精髓,肯定有很多地方理解错误。
希望大家能够指正,以便提高,谢谢。
学习方法:可能您第一次阅读的时候很多地方都不理解,不用担心。
那您可能需要阅读一些文件系统的知识。
或者阅读全部笔记后,再回头阅读,有些地方您就理解了。
言归正传:一、概要可用工具CodeViz:生成代码调用关系图的工具,这个工具我现在还没有去使用,有兴趣的可以自己试试去建立调用关系图。
http://www.csn.ul.ie/ ̄mel/projects/codeviz/Linuxcrossreference(LXR):以web的方式阅读和查找LINUX内核源代码的工具。
这个工具安装相当麻烦,我建议直接到它的官方网站直接读代码。
http://lxr.linux.no/linux+v2.6.24/模块LINUX内存管理代码模块主要分为4个部分:1.Outofmemory代码在mm/oom_kill.c貌似用于杀进程的时候对内存的操作2.虚拟内存的分配代码在mm/vmalloc.c3.物理内存页面分配代码在mm/page_alloc.cVMA(virtualmemoryaddresses)的创建和进程内的内存区域的管理4.这些模块,贯穿与其他kernel代码之中,形成更复杂的系统模块,如页面替换策略,buffer的输入输出等中间插段广告Linux文化T恤,淘宝销售,有兴趣的可以购买。
linux笔记全(⽆图版)1、ls 查看当前⽬录下的所有内容⿊⾊的是⽂件,蓝⾊的是⽂件夹,也就是⽬录2、rm -f anaconda-ks. cfg 彻底删除⽂件(如不确定,则需要先保存备份,也就是快照)3、ifconfig 查看⽹卡的配置信息(ip地址等)4、ifconfig ens33 192.168.18. 201 /24(⽹络地址/⼦⽹掩码)更改ip地址5、systemctl restart network 重启⽹络服务6、桥接模式,直接可以进⾏通信(同⼀⽹段,配置ip)7、能不能通信的2个条件:在同⼀个物理⽹络内,ip地址也在同⼀⽹段内8、仅主机模式,虚拟机和物理机不能进⾏通信,相当于虚拟机和物理机进⾏了隔离与笔记本(真机)通信截图9、NAT模式,⾃动分配⽹络地址和⽹关,以及dns,可以直接上⽹可以访问互联⽹内的主机,但互联⽹内的主机不能访问本机(max特点)10、route -n 查看⽹关11、cat /etc/resolv. conf 查看dns(注意cat后⾯有⼀个空格,空格不可少)12、验证nat模式可以直接上⽹13、shell:通常指linux的字符界⾯,图形界⾯和字符界⾯都属于shell,但图形界⾯的shell常称为gui,字符界⾯的shell常称为cli14、cat /etc/shells 查看⽂件内容(linux⾥⾯提供的所有的shell)15、linux默认使⽤的shell是bash的shell16、echo $SHELL 查看当前使⽤的shell17、shell默认指的是bash,它的应⽤是最⼴泛的18、linux是彻底的多⽤户多任务,它可以直接多个⽤户同时进⾏操作19、ctrl+alt+f2-f6 对应5个shell ctrl+alt+f1 开始图形界⾯shell 作⽤:如何开始shell(也就是如何打开命令界⾯)20、虚拟终端的缩写为tty, 在字符界⾯下执⾏“tty"命令就可以显⽰⽤户⽬前所在的终端编号(终端名称)。
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础今天的笔记主要是关于Linux操作系统根底的相关学问。
那就从我⾯前的电脑开端讲起。
计算机和操作系统计算机主要包括五个部分:运算器,控制器,存储器,输⼊设备和输出设备。
通常,运算器,控制器再加上其他⼀些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。
运算器,控制器和存储器可以实现数据的处理.但是数据从何⽽来,运算之后的结果去往哪⾥?这就需要输⼊设备和输出设备(I/O设备)。
我们通常⽤到的输⼊设备包括键盘⿏标等,输出设备为屏幕,打印机等。
值得⼀提的是,计算机中有个叫做硬盘的东西,它并不是存储器,⽽是⼀个I/O设备。
在将数据读取到内存时,它是⼀个输⼊设备;⽽将结果保存到磁盘时,它就变成了⼀个输出设备。
这么多设备整合在⼀起,就成了⼀台计算机。
它可以接收我们的指令(键盘⿏标),通过运算(CPU),把结果展⽰给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作⽤,共同完成⼀个任务⽽不会我⾏我素地乱来呢?我们需要⼀个东西,它可以控制硬件有序地⼯作,各⾃执⾏⾃⼰的任务,这个东西就是操作系统(Operating System)。
操作系统是⼀个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的⼏乎⼀切。
假如⼀台电脑没有操作系统,它可能只是⼀个艺术品,或者⼀堆废铁。
⼀个完整的操作系统包括内核和⼀些辅助软件。
内核的主要任务就是进⾏硬件管理,它是⼀个操作系统最基础最底层的东西。
内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的⼀对,全都仰仗于驱动的帮忙。
驱动是硬件的灵魂,它向操作系统提供了访问和使⽤硬件的接⼝,以便在某项任务中最⾼效地调⽤硬件。
什么是LinuxLinux就是⼀个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。
RAID阅读笔记前言 (1)1 RAID概述 (1)1.1RAID在linux内核中的位置 (2)1.2 mdadm (3)1.3参考文献 (3)2 RAID-5(一)基础 (3)2.1stripe, strip 与 P (4)2.2RAID-5基本原理 (5)3 RAID-5(二)数据结构 (5)3.1bio 与 stripe_head (5)4 RAID-5(三)简单的读写 (8)4.1一次简单的读处理 (8)4.2一次简单的写处理 (9)5 RAID-5(四)make_request (10)6 RAID-5(五)rmw与rcw (12)7 RAID-5(六)延迟写 (13)8 RAID-5(七)Error处理 (14)8.1错误处理 (14)8.2Bad Sector Remapping(BSR) (15)9 RAID-5(八)失效处理 (16)10 RAID-5(九)handle_stripe (17)11 RAID-5(十)raid5d线程 (19)12 RAID-5(十一)stripe_head的管理 (20)13 RAID-5(十二)resync与recovery (22)14 RAID-5(十三)其它 (24)15 Multiple Device (25)16 MD(一)数据结构 (27)17 MD(二)resync和recovery概论 (28)18 MD(三)resync和recovery的调度 (29)18.1resync和recovery的调度(上) (29)18.2resync和recovery的调度(下) (31)19 MD(四)进入syncd内部 (33)20 MD(五)MD中的线程 (37)21 MD(六)小议superblock (38)22 MD(七)In_sync标志与resync (39)23 RAID5 Write Hole (41)24 Zone in RAID0 (43)25 Data flow in Raid0 (45)26 Chunk Aligned Read (46)前言转载自:/,吴素贞整理。
目录第一章 LINUX简介及安装 (2)一、LINUX介绍 (2)二、LINUX安装 (2)三、LINUX目录 (2)四、总结来说: (4)第二章常用命令及帐户管理 (4)一、linux命令格式 (4)二、常用命令 (4)三、用户管理命令 (5)使用技巧: (7)第三章 vi 编辑器 (8)一、Linux 系统中的编辑器知识 (8)二、vi 的模式 (8)三、命令: (8)第四章 SHELL的使用 (8)一:Shell的环境 (8)二、Bash的主要功能 (9)三、Shell变量 (9)第五章、应用程序安装与管理 (11)一、Linux应用程序组成 (11)二、RPM(Redhat Package Manager)包管理 (11)三、应用程序的编译安装 (11)第六章Linux系统管理 (12)一、启动过程: (12)二、运行级别: (12)三、系统服务的启动状态: (13)四、磁盘空间配额: (14)五、压缩命令: (14)第7章Linux基本网络配置 (15)第八章 NFS文件系统: (15)一、NFS的概述和安装 (15)二、NFS服务器的配置 (16)三、图形界面的NFS服务器配置工具: (16)第一章 LINUX简介及安装一、LINUX介绍1Linux:Linux是由芬兰大学的Linus Torvalds 李納斯发起创建的开源软件项目。
2版本号xx.yy.zz :①.xx表为主版本号,yy为次版本号,zz为修订的版本号。
②.次版本号中,单数代表测试版,双数代表正式发行版3开源软件:①源代码开放。
②GPL协议:主要是以源代码形式发布,任何人都可以得到源代码,但是不提供任何的担保,不限制商业性质的发行和包装。
③LGPL许可协议:允许在使用者自己的应用程序中使用程序库,即使不公开自己的源代码。
二、LINUX安装1RHEL4是由RED HAT公司发布的2Linux硬盘概念:①可以分为主分区、扩展分区、逻辑分区。
154页linux学习笔记,Linux大神超详细全面总结,学完快速掌握之前一直以为Linux和Windows差不多,但是学习了Linux基础入门之后才发现两种操作系统之间差距非常大。
Linux只是在硬件之上的内核和系统调用,就连我们在Windows 里习以为常的图形界面都是Linux上的软件。
在使用Linux的时候,我们都习惯于使用终端和命令行进行操作,而不是像Windows那样的图形界面里的鼠标键盘的共同操作。
近年来,Linux 系统已经渗透到 IT 领域的各个角落,作为一名 IT 从业人员,不管你是专注于编程,还是专注于运维,都应该对Linux 有所了解,甚至还要深入学习,掌握核心原理。
今天给大家分享一份精心整理的154页《linux笔记》,这份入门笔记最大的特点是通俗易懂,并且非常详细,学习完这份笔记即可快速了解 Linux,建议收藏保存。
目录展示•一、常用命令•二、磁盘管理•三、用户管理•四、文件权限•五、目录结构•六、软件安装•七、时间管理•八、启动引导•九、运行级别•十、进程管理•十一、资源监控•十二、系统服务•十三、环境管理•十四、网络管理•十五、配置文件•十六、计划任务•十七、 VI/VIM编辑器•十八、压缩打包•十九、常见问题一、常用命令•终端快捷键•gnome快捷键•窗口操作快捷键•文件浏览器•关机和重启命令•grep和管道符三、用户管理•1、用户和用户组操作命令•2、finger 工具:用来查询用户信息,侧重用户家目录、登录SHELL 等;•3、查询登录主机的用户工具:w 、who 、users•4、groups 用户所归属的用户组查询;四、文件权限•1、文件类型•2、文件权限•3、超级权限控制•4、权限命令五、目录结构六、软件安装•1.RPM•2.YUM。
Linux学习笔记整理Linux笔记第一部分:基础一、概述登录::root 密码或普通用户登陆后用su - 来切换成系统管理员身份注销:logout开始X桌面:startx (可以在X桌面上注销切换到终端)关机:shutdown -h now重启:shutdown -r now 或reboot切换到超级用户(切换root到帐号):su (效果:[root@localhost zsj]# ,#为管理员级别)su - (效果:[root@localhost ~]$ ,$为用户级别)登出超级用户:logout(回到当前用户)-----------------------------------------------------------------------------------------------------Vi编辑器 (可编辑java 、c、cpp程序)Ⅰ编辑Java1.新建进入Vi: Vi Hello.java2.进入到插入模式:i3.编辑(比如 HelloWorld.java)4.保存: [Esc]键进命令模式输入:冒号保存(写入)退出:wq 不保存退出q!5.列(列表)出文件ls参数-l 详细看ls -l6.编译:Javac HelloWorld.java //这个通用(此时可ls再看,可看到HelloWrold.class)7.运行:java HelloWorldⅡ编辑C命令:vi Hello.cpp //new file编程:#includeint main(){Printf("hello!");Return 0;}编译(gcc):gcc hello.cpp(默认编译生成a.out)gcc -o my1 hello.cpp (编译生成的文件叫my1) 运行: ./a.out (绿色的那个) ./my1二、文件目录:/ (根目录)/root (存放root用户的相关文件)/home (存放普通用户的相关文件)/ bin (存放常用命令的目录)/boot (存放引导相关的文件)/sbin (要具有一定权限才可以使用的命令)/mnt(默认挂载光驱和软驱及其他文件系统的目录)/etc (存放配置相关文件)/var (存放经常变化的文件)/usr (软件默认安装的地方,相当于win的program files文件夹) 做个例子来说明文件目录结构cd / (切换到根目录)ls (查看) (dir命令也可以在Linux下用)cd bin/ (或cd bin)ls -l (详细查看)ls -a (查看隐藏项目)显示当前绝对路径:pwd 命令(Print Work Directory)三、用户管理添加用户(useradd命令):只有root或具有root权限的用户才可以操作例:(1)创建用户 useradd star (添加用户star)(2)设密码/ 改密码(好习惯) passwd star (设密码passwd,对象为star)若没有指定用户,则是给当前用户设密码(3)新密码(new password,输两次)删除用户(userdel命令):例:userdel star (删除用户star,但文件夹和文件保留)userdel -r star (删除用户star及star用主目录)文件夹(目录)名按“Tab”可补全四、常用命令指定运行级别0:关机1. 单用户2.多用户状态无网络服务3.多用户状态有网络服务(常用)4.系统未使用保留给用户5.图形界面(常用)6.系统重启常用运行级别是3和5,要修改默认的运行级别可改文件:/etc/inittab的id:5:initdefault:这一行中的数字例:把运行级别设为6,则系统会不断重启。
学习Linux的心得学习Linux的心得「篇一」Windows操作系统是目前世界上使用最广泛的操作系,但是在企业级服务应用上则是Linux系统更为专业与出名,也许听到Linux操作系统会觉得陌生,Android操作系统(安卓)就是基于Linux平台的开源手机操作系统,在个人电脑桌面操作系统有ubuntu、centos、Fedora等都是基于linux。
这个号称“全地球人的操作系统”,以其免费、安全、稳定等优点获得人们的广泛好评。
作为计算机专业的学生,Linux是一门值得深入学习的课程。
我们身处网络发达的年代,网络科技发展速度非常之快,所以,我们的学习范围不应只局限于课本局限于校园,不断学习新的知识,接触新的环境,才能更全面地了解网络发展的新趋势。
4月,我们有幸参加了学校与华清远见教育集团组织的“Linux课程实训”。
实训主要内容为嵌入式Linux服务器搭建,本次实训课程我们学习了部分Linux的基本操作命令,了解了服务器的主要工作原理和流程,在Linux操作系统上如何搭建服务器,服务器与客户端之间如何建立连接,数据的访问读取,上传和下载文件等。
尽管课程安排紧凑,老师讲课速度较快,同学们跟着老师的思路走,还是会有很多收获。
纸上得来终觉浅,绝知此事要躬行。
在学校的课堂上,我们所学的更多的是课本上的理论知识,实训课程中,老师除了讲解理论知识外,还会简单介绍自己的工作和实战经验,这样的实训课程除了强化我们所学的理论知识外,还让我们粗略了解到我们所学的知识能够用在什么地方;如果从事这方面的的工作,在企业里我们还需要掌握哪些技能等。
由此可见,实战经验很重要,就如在给我们讲课的时侯,老师编译程序时也会出现问题,可实战经验丰富,就能快速地找出问题并解决。
很感谢学校提供这样的一次机会,让我们更深刻地了解到,希望今后会有更多实训机会,让我们能够用所学的理论知识去开展更多的实践,学以致用,格物致知。
学习Linux的心得「篇二」学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
1.Linux中“一切皆文件”的含义是什么?它的优势和不足在哪些方面有所表现。
看了一些资料,总结一下大致有这么几个说法:
①Linux所有的内容都是以文件形式存在的,普通文件本身就是文件,目录也是文件,硬件也抽象为文件,套接字、网络通信也是文件。
②对于所有的文件(包括目录等内容)使用的都是同一套函数处理,屏蔽了硬件的细节,将设备抽象为了文件。
优势:
对系统资源的读写,可以使用一套函数操作,因为Linux已经屏蔽了设备细节。
其次,我个人觉得很好的地方在于路径访问很方便,不区分盘符,所有不用管文件是不是都挤在c盘而不是其他非系统盘;也不用记忆软件到底安装再c盘的program目录还是d 盘的program目录中。
不足:
查阅了一些资料是这么说的----使用任何硬件设备都必须与根目录下某一目录执行挂载操作,否则无法使用。
我们知道,本身Linux 具有一个以根目录为树根的文件目录结构,每个设备也同样如此,它们是相互独立的。
如果我们想通过Linux 上的根目录找到设备文件的目录结构,就必须将这两个文件系统目录合二为一,这就是挂载的真正含义。
我对这句话的理解就是Linux的文件系统的起源就是一个从“/”开始,设计者依据不同的功能,将文件区分在不同的文件夹中,然后为了实现增加设备的功能,Linux留了一些空位置接纳新的设备(我觉得是类似指针的一个东西吧),当新设备加入时,这个“指针”就指向这个设备,就类似于在一颗树中的某个节点再接入一颗树形成一个更大的树一样。
2.Linux系统中,构成文件的数据结构有哪些?各自的作用是什么?它们之间存在哪些逻辑上的联系?
2.Linux系统中,构成文件的数据结构有哪些?各自的作用是什么?它们之间存在哪些逻辑上的联系?
此处所提的主要是VFS虚拟文件系统,主要有四个类型对象(其实也不是对象,只是使用到了面向对象的思想进行设计),分别是:
1.超级块对象:一个超级块对应一个具体的文件系统(已经安装的文件系统类型如ext2,此处是实际的文件系统,不是VFS)。
2.索引节点对象iNode:inode是内核文件对象的元数据,inode 仅仅只是保存了文件对象的属性信息,包括:权限、属组、数据块的位置、时间戳等信息。
3.目录项对象(并不是目录文件):目录项对象是一个纯粹的内存结构,由文件系统在提供文件访问的过程中在内存中直接建立。
dentry 中包含了文件名,文件的iNode 号等信息。
4.文件对象:注意file 对象描述的是进程已经打开的文件。
因为一个文件可以被多个进程打开,所以一个文件可以存在多个文件对象。
但是由于文件是唯一的,那么iNode 就是唯一的,目录项也是确定的。
关系:
1. 超级块对象和iNode对象分别对应有物理数据,在磁盘上有静态信息。
2. 目录项对象和文件对象描述的是一种关系,前者描述的文件与文件名的关系;后者描述的是进程与文件的关系,所以没有对应物理数据。
例如有三个不同的进程打开同一个文件,其中有两个进程使用了相同的硬链接。
三个进程拥有各自的文件对象,而只有两个目录项对象(同一个硬链接对应一个目录项对象,目录项对象不随进程打开文件而增加或改变)。
两个目录项对象都指向同一个iNode。
3. 进程每打开一个文件,就会有一个文件对象结构与之对应。
同一个进程可以多次打开同一个文件而得到多个不同的文件对象结构,文件对象结构描述被打开文件的属性,如文件的当前偏移量等信息。
4. 两个不同的文件对象结构可以对应同一个目录项对象结构。
进程多次打开同一个文件时,对应的只有一个目录项对象结构。
5. 在存储介质中,每个文件对应唯一的inode结点,但是每个文件又可以有多个文件名。
即可以通过不同的文件名访问同一个文件。
这里多个文件名对应一个文件的关系在数据结构中表示就是目录项对象和inode的关系。
6. Inode中不存储文件的名字,它只存储节点号;而目录项对象则保存有名字和与其对应的节点号,所以就可以通过不同的目录项对象访问同一个inode。
7. 不同的目录项对象则是同个文件链接(ln命令)来实现的
图解,图片来自网上
3.在Linux内核实现内核的过程中,如何使用C语言实现面向对象的基本特点的,请用代码举例并附加文字说明的形式解释
面向对象的主要三个特征,封装、继承、多态,c语言虽然没原生支持面向对象,但是通过各种数据结构以及数据类型可以实现这三个特征。
封装:封装定义是在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
对于这个问题上的语言缺陷可以使用函数表。
假设我们有类A,其内含有a、b、c三个成员变量,并有操作方法 op_a(a)、op_b(b)、op_c(c)、op_ab(a, b)等。
struct Ops {
void (*op_a) (struct A *, loff_t, int);
void (*op_b) (struct A *, char __user *, size_t, loff_t *);
void (*op_ab) (struct A *, const char __user *, size_t, loff_t *);
…
};
首先这是一个只含有方法的结构体,我们称之为函数表,传递的结构体参数A为c++中默认编译器为类传递的this对象,这样,我们将结构体ops内嵌到结构体A中,如下:
Struct A{
Int a;
Int b;
Int c;
Struct Ops ops;
}
将方法封装到了结构体中。
在这里结构体A相当于一个父类,而ops是作为父类公开给子类的接口
多态:是允许将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
由多态的定义,最关键的地方在于运行时切换即在编译期不能确定需要执行的代码。
这里我们声明两个子操作表 ops1 、ops2,当需要使用ops2时,
将 A->ops = ops2,即将子类实例化到父类,下面类A的具体操作就会采用ops2操作表中的方法。
如图:
代码示例:
Struct A a;
a-> ops = ops1;
a->ops->op_a(a);
//切换
a->ops = ops2;
a->ops->op_a(a);
继承:特殊类(或子类、派生类)的对象拥有其一般类(或称父类、基类)的全部属性与服务,称作特殊类对一般类的继承。
继承的本质是保留父类的一些成员和函数,实质上是保留父类的存储区及跳转函数表,继承在C语言中也是采用内嵌结构体的方式来实现的。
这里举内核中的链表结构体来说明,
我们通常所使用链表结构如下:
Struct A_LIST{
Int a;
Int b;
Struct A_LIST* next;
}
在这里我们发现,每一个特定类型的链表机构都需要为其增加一个next或者prev字段来保持链表的结构。
还需要为每一个特定的链表类实现脱链、入链操作等。
我们需要抽象出一个“基类”来实现链表的功能,其他链表类只需要简单的继承这个链表类就可以了。
Linux 内核的链表结构:
struct hst_head{
struct list_head *next, prey;
);
在这个结构体中,链表及作为一个单独的结构体,不再依附与任何对象。
同上面的例子,我们只需要声明
Struct A_LIST{
Int a;
Int b;
Struct hst_head T* list;
}
这样A_LIST即可作为一个链表对象,其链表操作均由其成员list代为实现,起到了继承基类的可复用方法的作用。
实际过程如下图:
其作为一个连接件,只对本身结构体负责,而不需要关注真正归属的结构体。
正如继承的特性,父类的方法无法操作也不需要操作子类的成员。
至此,C在面向对象的三大特性的实现过程就结束了。