学习操作系统实践-Linux 操作系统从入门到提高

简介: 前言1.操作系统作为计算机软硬件的基础2.Linux系统学习为明线,内容分层次递进,包括:(1)Linux系统基本使用(普通用户视角)(2)应用和系统编程(开发人员视角)(3)内核与应用(内核开发人员视角)(4)服务管理(网络管理人员视角)​ 操作系统原理理解为暗线,内容呼应操作系统理论课程,包括:(1)操作系统的认识与使用(2)操作系统的核心功能模块(进程、内存、通信、文件等的编程)(3)操作系统的自身结构和运行机制————————————————

第1章 认识Linux系统


1.Linux是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIX和NIX的多用户、多任务、支持多线程和多CPU的操作系统。


2.Linux继承了UXIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。


3.标志是可爱的企鹅🐧


4.GNU计划:Linux只是操作系统的一个内核,没有GNU软件环境(比如说bash,shell),Linux将寸步难行


5.开放性:Linux遵循世界标准规范,特别是遵循开放系统互联(OSI)国际标准,凡遵循OSI国际标准所开发的硬件和软件都能彼此兼容,可方便地实现互连。


6.多用户,多任务:计算机同时执行多个程序,而且各个程序的运行互相独立


7.Linux系统一般有4个主要部分:内核,Shell,文件系统和应用程序


8.Shell:是系统的用户界面,提供了用户与内核进行交互操作的一种借口。Shell接收用户输入的命令并把它送入内核去执行。是一个命令解释器,也可作为一种编程语言。


9.http://www.kernel.org 下载最新版本的Linux内核 稳定


10.仅有内核而没有应用软件的操作系统是无法使用的,所以许多公司开发出了基于Linux内核的图形界面,同时配上很多功能强大的应用软件


11.一个操作系统内核加上图形界面加上应用软件,这样一套完整的软件环境统称一个发行版本。


12.Linux内核 +各种自由软件 = 完整的操作系统


13.虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统 VMware Workstations(VMware)


14.安装位置是安装过程中重要的一步,虚拟机上的硬盘分区是利用硬盘部分空间模拟实体机可以选择“自动配置分区”,安装程序会自动根据磁盘以及内存的大小分配磁盘空间和SWAP空间,并建立合适的分区。引导分区,交换分区,根分区


15.Linux操作系统的启动过程一般分为四个阶段:BIOS启动引导阶段,GRUB启动引导阶段,内核阶段以及1号用户进程初始化阶段。(在CentOS7以前1号用户进程被称为init进程,CentOS7以后称之为systemed进程)


16.systemd进程初始化:systemd进程是在Linux系统上运行的第一个进程(PID为1),它舒适化系统并启动init(/etc/init.d)进程曾经启动的所有服务,读取配置文件,在目标runlevel.target中加载操作系。


注:默认情况下,由主要两个target,即multi-user.target(字符界面)和graphical.target(图形界面)


17.图形界面下的终端:Linux的运维服务一般是在命令行下进行的,在Linux系统的图形化桌面环境中提供了模拟终端命令行界面的方式,终端方式允许用户通过输入命令使用计算机。


18.Ctrl + C ,终端命令


exit或Ctrl+D,退出


reboot,重启系统


shutdown,关闭系统


19.[root@localhost~]# 提示符#代表超级用户(管理员)


[user@localhost~]$ 提示符$代表普通用户


20.一般通过yum安装或rpm软件包管理。RPM是一种开放的软件包管理系统,可以运行在使用rmp包的Linux系统上,可以对软件进行安装、卸载、更新和升级;yum安装可以自动检查软件包之间的依赖关系,一次性安装所有依赖的软件包,但是yum安装需要更可靠的软件仓库。


21.yum clean all ,清空缓存列表


22.只有在单用户模式下默认根文件系统是处于只读状态的


23.“虚拟机快照”是虚拟机磁盘文件(VMDK)在某个点及时的复本,保存当前点的虚拟机的数据状态

第2章 Shell命令


1.Shell是Linux的一个特殊程序,是内核与用户的接口,它是命令语言、命令解释程序及程序设计语言的总和。Shell是一个命令语言解释器,它拥有自己内建的Shell命令集,也能被系统中其他应用程序所调用。当用户成功登录Linux系统后偶,即开始了与Shell的对话交互过程,此时,不论何时键入一个命令,都被Shell解释执行,


2.采用了树形目录结构,通过目录将系统中所有的文件分级,分层地组织在一起,以根目录为起点,所有目录都从根目录里派生而来,而Linux系统把设备视为文件,设备与文件使用统一的接口进行处理,树形结构的最上层是根目录,用“/”表示


3./lib ,库目录,存放系统和应用程序的库文件


/mnt,挂在目录,另一个可移动媒体设备的常用挂载点


/etc,系统配置文件目录


/usr,用户二进制目录,大量用户级的GNU工具和数据文件存储在这里


4.常见的目录操作包括目录创建、删除、进入、切换以及查看当前所在目录


pwd 显示当前工作目录的绝对路径


mkdir 创建目录 -p 创建嵌套的多层目录结构


cd 更改工作目录路径


ls 列出目录和文件信息 -d文件属性 -F显示文件类型


rmdir 删除空目录


5.绝对路径:指从根目录(/)开始到当前目录(文件)的路径


相对路径:指从当前目录到其子目录(文件)的路径


. 代表当前所在目录


… 代表当前目录位置的上一层目录

   代表家目录(home.directory),即login时所在的目录


7.ls -la 显示当前目录下的所有文件和子目录的详细信息,包括隐藏文件


8.r 可读,w可写,x可执行


9.touch 创建空文件、更改文件时间


cp 复制文件和目录


mv 文件和目录改名、移动文件和目录路径


10.rm -rf *.*表示强制删除当前目录下的多有文件,管理员权限慎用,会删除根目录录得全部文件及其相关目录


11.find 用于查找文件或目录


switch命令,主要用来搜索二进制文件、可执行文件或者Shell命令行的位置


cat 显示文本文件、连接文件内容


12.查看一个内容较大的文件时,使用more命令。利用Ctrl+f(或空格键)是向下显示一屏;Ctrl+b向上…


13.链接文件命令是ln命令,该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件执行另外一个可用于访问的名称


14.链接的对象可以是文件,也可以是目录。不加参数默认创建的是一个硬链接,目录不能创建硬链接;-s创建一个软链接(符号链接)


15.删除硬链接:文件内容实际上还存在,只是通过硬链接文件指向过去


删除软链接:符号链接文件还是存在,但是由于源文件已经删除,所以链接文件的内容也不能查看了,软链接类似于快捷方式


16.tar,也称为打包工具,可以进行文件的压缩和解压缩


tar 通常表示使用tar命令打包数据但是没有压缩


tar.gz表示使用tar命令打包文件并进行gzip压缩


17.在Linux系统中,执行一个Shell命令时通常会自动打开三个标准文件:标准输入文件(stdin)/标准输出文件(stdout)和标准错误输出文件(stderr)


18.输入重定向的符号为“<”,一般的命令格式为“命令<文件名”


输入重定向指将命令的执行结果输出到指定的文件中,而是不是直接显示在屏幕上


19.①Shell遇到“>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件;不存在直接创建。无论左边命令执行是否成,右边文件都会变为空。


②">>"操作符,判断右边文件,如果不存在,先创建,以添加方式打开文件


20.管道操作:


将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起;另一种是Linux所提供的管道功能。这种方法比前一种方法更好。


管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。


21.more分屏命令


22.在Linux操作系统中,用户是分角色的,角色不同,用户权限和所完成的任务也不相同。用户角色是通过UID(用户ID)来识别的,每个用户都具有不同的UID。Linux用户类型分为3类:超级用户、普通用户和系统用户


超级用户:又称为root用户,UID为0,拥有计算机系统的最高权限。所有系统的设置和修改都只有超级用户才能执行


23.用户账户文件 /etc/passwd


GID:表示用户所属的组


用户密码文件/etc/shadow,该文件只有超级用户才有权限读取


24.组账户:基本组(私有组,主要组) 附加组(公共组,次要组)


25.组账户中最常用的配置文件是/etc/group,用于保存组账号基本信息,可以显示用户归属哪个组或哪几个组


把一个普通用户加入到root组群,那么这个用户就可以浏览root用户主目录的文件;如果root用户把某个文件的读写执行权限放开,root组群的所有用户就可以修改此文件


26.useradd 添加用户


userdel 删除用户


usermod 修改用户账号


groupadd 添加用户组


passwd 设置用户密码


27.su与sudo:一般变换身份的方式有两种:(1)用su直接将身份变为root,但是这个命令需要root的密码,一般用户需要root管理员的密码可以从普通用户变换为管理员用户(2)当多人同时管理一台主机时,为了root密码的保密性,可以使用sudo命令进行用户身份的切换


28.root 执行sudo时,不需要输入密码


用户通过sudo命令输入自己的密码可以临时获得root的部分权限,可以不必知道root的密码,保证系统的安全性


默认情况下,普通用户是无法使用sudo的,需要编译设置/etc/sudoers的配置文件。使用visudo去编译/etc/sudoers,其中visudo需要root身份执行


29.使用visudo命令后,通过vi打开了/etc/sudoers配置文件。在配置文件中增加一行"user ALL=(ALL)ALL",使user用户可以使用sudo命令,增加完毕,保存退出,visudo会自动检查/etc/sudoers内部的语法,避免用户输入错误的信息


30.用户对文件到底拥有何种权限,需要由访问权限和归属(所有权)共同决定。


chmod设置基本权限


u、g、o、a分别表示属主、属组、其他用户、所有用户


+,-,=增加,去除,设置权限


31.程序是保存在硬盘、光盘等介质中的可执行代码和数据,是静态保存的代码。进程是在CPU及内存中运行的程序代码,是动态执行的代码。当大量用户同时访问Web页面时,httpd程序可能会创建多个进程来提供服务


32.ps 查看进程,可监控后台进程的工作情况


33.僵死


34.-f 显示进程的所有信息


35.进程状态:R表示进行状态,S表示休眠状态;T表示暂停或终止状态机;Z表示僵死状态


PRI:进程的优先级


36.top是一个动态显示过程,通过用户按键来不断刷新当前状态


37.系统中每个进程都有一个进程号,用于系统识别和调度进程,启动一个进程主要有两个途径:手工启动和调度启动


38.Ctrl + Z:将当前进程挂起,即调入后台并停止执行


Ctrl+C:中断正在执行的命令


kill,用于终止指定PID号的进程,一般和ps指令结合使用


39.cal,显示日历信息


date,显示和设置系统日期和时间,只有超级用户有权限使用date命令设置日期和时间,普通用户只能使用date命令显示日期和时间


40.计划任务:如果要在固定的时间上触发某个作业,就需要创建计划任务,计划任务分为一次性计划任何和周期性计划任务


41.Tab,自动补齐命令


history命令可以查看执行的命令


alias 设置别名,等号两端不能空格,字符串需要加引号,设置别名永久生效


42.man命令用于获取Linux系统的帮助文档


和man命令不同的是,info命令的帮助信息更容易阅读

第3章 VI 编译器的使用


1.VI是一款UNIX系统下使用的全屏幕文本编译器,VIM是VI的加强版


使用VI编译器可以方便完成系统配置文件、编写程序、文本编译等工作


2.在VIM中,还有一些增强的功能,如撤销多行输入、参数高亮显示、命令行编译和支持图形方式VI(GVIM)的多窗口、多缓冲功能等


3.VI编译器共有三种操作模式:命令模式、插入模式、底行模式


启动VI后默认处于命令模式


4.命令模式→插入模式(a,i,o等键)


插入模式→命令模式(ESC键)


命令模式→底行模式(:键)


5.:wq 保存文件修改并退出。或“:X”也可


:recover 恢复文件


6.:set nu:显示行号


7.vimtutor VIMtutor教程的副本

第4章 Shell 脚本编程


1.Shell除了作为命令解释器,还可以作为一种编程语言,以脚本文件的形式来实现自动化处理


2.#! /bin/bash


3.在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能


4.Shell中的变量是弱类型,不需要声明类型


5.变量按照使用用途分为环境变量、预定义变量和用户变量三类


环境变量类似于高级程序语言中的全局变量,但大部分环境变量是专用的,如PATH,HOME等,是系统环境的一部分,不必去定义它们


Shell预定义变量由系统提供,与环境变量不同,用户不能修改它们,这类变量在程序中用来做出判断


用户变量又称为本地变量、局部变量,可以在Shell程序内任意使用和修改它们,给变量赋值时,等号两边不能有空格


6.通过echo关键字打印变量,通过read关键字读取变量


7.Shell中的文件判断语句通常分为三类:文件测试,数字比较和字符串比较


8.;起命令分隔符的作用,如果不加“;”,需要换行


9.until循环直到条件满足时循环结束


10.函数是一个语句块,完成相对独立的功能。是否需要参数由函数的定义和功能决定


11.需在调用函数之前声明函数,Shell脚本是逐行执行,不会预先编译,必须在使用函数前先声明函数


12.回显内容


13.&>/dev/null 指无论正确的还是错误的输出都重定向到空设备,就是不要输出信息。/dev/null表示一个空设备

第5章 Linux 下的编译开发


1.用户使用操作系统时,主要有图形界面、命令接口、编程接口三种形式


2.GCC(GNU编译工具合集),GNU是由应用程序、系统库、开发工具等程序构成的类UNIX操作系统


3.GCC诞生于Linux内核程序前,可以说它促成了Linux内核的诞生和发展


4.自由软件意味着用户可以自由地运行、拷贝、分发、学习、改进并发布该软件。“自由软件”多以GNU通用公共许可证(GNU GPL)发行。Free Software的Free不是免费,其值得是“自由言论而非免费赠饮”,软件如何定价并不影响它是否被归类为自由软件


5.网络设置是桥接或NAT方式下均可设置自动获得IP地址,本地物理实体机能连接到Internet,则虚拟机即可联网


6.gcc,g++都是GCC编译套件中的一部分,GCC基本属性是编译C语言,虽说GCC支持多语言的编译,实际上他主要起到编译器选择器的作用,对其他语言的编译是通过GCC传递给对应的编译器实现的。GCC编译C++代码只是一个壳动作,真正编译工作需要转给g++,链接C++动态库也是通过g++的


7.GCC分别调用预处理,编译,连接工具,自动完成程序的编译工作


8.#include <stdio.h>


9.Linux系统下动态库和静态库分别是.so和.a文件,Windows下则是.dll和.lib文件。静态库文件必须在编译期就连接到应用程序中,调用的库函数的索引和实现都在其中。静态编译的好处是结果程序运行时不需要再挂起动态库;缺点就是应用程序比较大,失去了动态库的灵活性,程序修改后要重新编译发布


20.与静态库不同的是,动态链接文件时运行期才被调用的动态库,应用程序编译链接时,库中的函数和数据并不复制到可执行文件中,而是通过静态库的说明编译,装入时再把程序代码和动态库文件里被调用的函数代码连接起来,从而节省了内存资源。两种库文件随应用程序一起发行,否则应用程序运行时会产生错误


21.GDB是命令行下用于调试可执行文件的调试器程序。注意,不是所有的可执行文件都能被调试,


22.辨析


23.系统调用就是用户进程进入内核的接口层


24.对文件读写操作前,一定要先执行打开文件操作,打开操作的目的是找到文件位置并登记到系统,以免每次读写操作时都要反复查找文件在哪里


25.gets()是从标准设备读入字符并存到参数s所指的内存空间,读到换行字符或文件尾为止,调用成功返回s指针,而返回NULL则表示有错误发生。gets()无法知道字符串s的大小,读取数据的写入容易造成缓冲溢出的安全性问题,一般建议用fgets()取代


26.stdin(标准输入)和stdout(标准输出)是典型的“行缓冲”代表,输入和输出的字符先存放在缓冲区,在遇到换行符时才执行真正的I/O操作,清除缓冲


26.调用scanf获得输入时,该函数不读取回车符,同样也将其遗留在缓冲中


getchar去掉缓冲区中多余的回车符


27.操作系统本质上是运行在硬件上的系统级软件,当计算机加电后,主板芯片里的基本输入/输出程序开始了星星之火的燎原之势,触发了引导程序进入内存执行,继而引导程序再把硬盘中的操作系统程序引导装入内存。


28.简单来说进程就是程序再内存的一次执行,而管理和控制进程的信息就形成了标志进程窜在的重要数据结构-进程控制块


29.fork产生的新进程和原进程这两进程各有各的执行路线,但存在父子关系


30.引入线程,主要的目的还是为了提高多道程序执行的并发性或并行性(多处理机上),从而提高处理效率。线程可以简单定义为进程内的一个执行线路,多个线路共享其所属进程的资源


31.多进程之间存在互斥和合作关系时需要同步控制以保证执行结果的逻辑正确,多个线程共享资源和合作时,也同样存在同步的问题


32.如果一个进程中的每个线程同时去修改全局内存的数据,而操作函数没有使用同步机制防止数据在共享使用中被破坏,程序执行就不是程序安全的


33.信号量本质是“一个计数器+一个互斥量+一个等待队列“


34.管道实际上就是一种特殊的临时或永久的文件,它是连接一个读进程和一个写进程以实现进程间通信的共享文件。


35.命名管道就是通过提供通信双方一个有路径名的管道文件对应的缓冲区实现通信的。即使需要通信的多进程不存在亲缘关系,但只要有权访问管道文件,也就能彼此通过管道互相通信


36.内存空间要充分利用,根据分配内存的机制形成地址映射

第6章 Linux 内核与应用


1.操作系统本质上也是软件,是系统程序的集合


2.内核是操作系统最重要的组件,用来管理计算机中所有的硬件和软件资源。安装好的Linux操作系统一般是不需要编译内核的,新的内核会修订就内核的Bug,并增加许多新的特性;当用户想要使用这些新特性,或想根据自己的系统定制一个更高效、更稳定的内核,就需要重新编译Linux内核。


3.升级内核主要有三种方法:(1)从内核源码升级(2)手动安装新版的Lernel RPM文件(3)通过yum升级


4.使用模板的形式保存驱动,可以不直接把驱动放入内核,有利于控制内核大小


5.模块的全程是动态可加载内核模块,允许启动系统后动态地加载或者卸载内核模块,用来启用或停用系统的某些功能


6.lib:函数库


7.如果是外来模块,则必须执行depmod命令

第7章 Linux 上的典型服务


1.配置主机IP可以有三种方式:图形界面配置,命令行命令配置,直接修改配置文件


2.System tools/settings/network打开网络连接设置窗口


3.查IP linux(ifconfig),windows(ipconfig)


4.网络适配器 网卡 MAC地址


5.vi /etc/sysconfig/network-scripts/ifcfg-ens33


ststemctl restart network service,重启网络服务使配置立即生效


6.=> TAB键


7.APR地址解析协议用于将IP地址映射对应的物理地址(即常说的MAC地址),通过看APR表可以查看接入的所在局域网设备的MAC地址


8.WWW服务就是已Internet为基础,允许用户在一台计算机通过Internet存取另一台计算机上相互链接的超文本文件资源,它本质上是基于网络运行的一项服务,通俗地讲就是以网页形式提供资源共享的一种服务,也常称Web服务


9.早期WWW服务最基本的组成要素有三个:服务器方组织的HTML文件资源,制定资源位置的统一资源定位符URL,以及客户端和服务器通信时遵循的协议规范HTTP


10.URL四个基本元素(传送协议,服务器地址,端口号,路径)


11.anonymous匿名


systemctl start vsftpd 启动FTP服务


systemctl stop vsftpd 停止FTP服务


systemctl restart vsftpd 重启FTP服务


13.SSH服务:基于口令的安全验证,基于密钥的安全验证


14.systemctl enable target;启动服务


15.systemctl start target 开启防火墙

阿里云的任务真的让我收益颇丰

目录
相关文章
|
3天前
|
算法 调度 UED
深入理解操作系统内存管理:原理与实践
【4月更文挑战第23天】 在现代计算机系统中,操作系统的内存管理是保证系统高效、稳定运行的关键组成部分。本文旨在深入探讨操作系统中内存管理的理论基础、关键技术以及实际操作过程,通过对内存分配策略、虚拟内存技术、分页与分段机制等核心概念的详细解析,为读者提供一个清晰、全面的内存管理视角。此外,文章还将通过案例分析,展示内存管理在解决实际问题中的应用,以期加深读者对操作系统内存管理复杂性的认识和理解。
|
17天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
30 0
|
18天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
17天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
4天前
|
Unix Linux Windows
Linux的学习之路:3、基础指令(2)
Linux的学习之路:3、基础指令(2)
28 0
|
4天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
18 1
|
4天前
|
存储 安全 Linux
Linux的学习之路:9、冯诺依曼与进程(1)
Linux的学习之路:9、冯诺依曼与进程(1)
18 0
|
11天前
|
存储 算法 Shell
操作系统(1)——学习导论(Ⅲ)
操作系统(1)——学习导论(Ⅲ)
|
13天前
|
Linux 数据安全/隐私保护
Linux基础与服务器架构综合小实践
【4月更文挑战第9天】Linux基础与服务器架构综合小实践
1242 8
|
16天前
|
Unix 大数据 Linux
linux入门
linux入门
17 1