Cristiano Linux学习小结

news2024/11/18 18:42:19

一、linux基础
1.1 基本概述
1、Linux组成:内核 Shell 文件系统 应用程序
2、内核(Kernel),即核心程序。实现操作系统的基本功能(进程管理、内存管理、进程间通信、虚拟文件系统和网络接口),决定着系统的性能和稳定性。

  • 在硬件方面:控制硬件设备,管理内存,提供接口,处理基本I/O。
  • 在软件方面:管理文件系统,为程序分配内存和CPU时间等。

3、Shell:Shell是系统的用户界面,提供用户与内核进行交互操作的一种接口;Shell是命令解释器;Shell是编程语言
4、Linux 文件系统

  • 文件系统是文件存放在磁盘等存储设备上组织方法。
  • 按照目录层次的方式进行组织,可以设置目录和文件的权限、文件的共享程度。
  • 每个目录可以包括多个子目录以及文件,系统以“/”为根目录,用户可以创建自己的子目录,保存自己的文件。
  • Linux能支持多种目前流行的文件系统,如ext2、ext3、fat、vfat、ISO9660、nfs等

5、 Linux 实用程序(utilities)和应用程序(Applications)
标准的Linux系统都有一套成为应用程序的程序集,包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。

1.2 用户类型——用户分为根用户(系统管理员)和普通用户两大类
1、根用户(系统管理用):又称为超级用户,用户账号为root,在系统中拥有最高权限,主要负责系统的管理工作。
2、普通用户:由根用户创建,命名时不能以数字和下划线作为第一个字符。普通用户是系统的使用者,只在自己的目录下工作,没有系统管理权限。
1.3 Linux命令特点
在这里插入图片描述
(1) Linux命令区分大小写。
(2) Tab键补齐功能(很有用)。
可以输入命令的前几个字母,然后按Tab键,如果系统只找到一个和输入相匹配的目录或文件或命令,则自动补全。如输入mou,然后按Tab键,系统将自动补全该命令为mount 。
(3) 翻查功能(很有用) 。利用向上或向下的光标键,可以翻查曾执行过的历史命令,并可再次执行。
(4) 要在一个命令行上输入多条命令,可使用分号来分隔命令。比如cd /etc; ls –l。
(5) 反斜杠“\” 将一个较长的命令分成多行表达,换行后,shell自动显示提示符“>”,表示正在输入一个长命令,此时可继续在新行上输入命令的后续部分。
Linux命令由 ‘命令+选项+参数’组成
命令 选项 参数
command [options] [parameter1] …
如:
#ls
#ls -l
#ls -l /dev

1.4 Linux基本命令
1、passwd:修改当前用户密码
2、–help选项:显示命令信息,使用方式 passwd --help
3、man:显示系统文档中的man页内容
4、info:基于菜单的超文本系统
5、who:查看当前登录到系统的用户信息 who 、who am i
6、uname:显示正在使用的Linux系统信息
7、date:显示或设置系统的时间
8、cal:在屏幕上输出日历信息
9、echo:用于回显输入内容
10、clear
11、su & exit

二、Liunx文件系统
2.1 文件系统基础
1、Linux文件系统采用的是树形结构
2、Linux的文件是无结构字符流式文件,不考虑文件内部的逻辑结构,只把文件简单地看作是一系列字符的序列。
3、Linux的文件可由文件拥有者或超级用户设置相应的访问权限而受到保护。

2.2 文件系统结构
在这里插入图片描述
1、/bin:bin是二进制(binary)英文缩写。 通常存放二进制可执行文件,包括对目录和文件操作的一些实用命令、系统实用程序、压缩工具、RPM包管理程序等,如login,date, ping, netstat, mount,unmount、su、vi、rpm等。
2、/sbin :用来存放系统管理员的系统管理程序。如fdisk,mkfs,ext3,vfat,shutdnwn,dump,route,iptables等。
3、/home:普通用户的宿主(家)目录,新建用户账户后,系统就会自动在/home中创建一个与账户同名的子目录,作为该用户的宿主目录。普通用户只能访问自己的宿主目录,无权访问其他用户的宿主目录。root用户的宿主目录为/root。
4、/lib: lib是库(library)英文缩写。这个目录主要用来存放动态链接共享库文件,类似windows的.dll文件,文件一般以结尾.a、.dll、.so(后缀不代表文件类型);也会存放与内核模块相关的文件。
5、/etc:存放系统管理时要用到的各种配置文件。包括网络配置文件,设备配置信息、X-Windows系统配置、用户信息等,如securetty,passwd、inittab, fstab。
6、/dev: dev 是设备(device)的英文缩写,此目录中存放设备文件,包括块设备文件(如磁盘)、字符设备文件(如键盘)等。并不是存放设备的驱动程序。
7、/usr:包含所有的用户程序(usr/bin)、库文件(/usr/lib)、文档(/usr/share/doc)等,是占用空间最大的目录;
8、/proc:是一个虚拟目录,该目录中的文件是当前内存中的一个映射,通过查看该目录的文件获取有关系统运行的详细信息;
9、/root:系统管理员的主目录;
10、/var:存放系统产生的经常变化文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等;
11、/mnt :这个目录在一般情况下也是空的。可以临时将别的文件系统挂载在这个目录下。

2.3 设备挂载
1、定义:Linux的文件系统只有一个根目录/,其他目录、文件以及外部设备(包括硬盘、软驱、光驱、调制解调器等)文件都是以根目录为起点,挂接在根目录下面的。所以,如果要使用USB存储设备、光盘或软盘等存储设备,必须将这些设备中的“小”目录像嫁接一样挂载(mount)到Linux系统的“大”目录树中。当存储设备挂载成功后,就可以将其作为“大”目录树中的一个目录进行访问。
2、设备挂载到哪一目录,即挂载点。Linux系统中有一个 /mnt目录,专门用作挂载点(mount Point)目录。
3、 对设备文件进行操作,实际上是操作该文件对应的物理设备,Linux中常用的外部设备文件名:

软盘 /dev/fdN (N=0,1 …)
硬盘(IDE) /dev/hdX (X=a,b,c …) hda1,hda2…
硬盘(SCSI) /dev/sdX (X=a,b,c …) sda1,sda2…
U盘 /dev/sdX (X=a,b,c …)

2.4 文件系统操作
1、文件分类:普通文件、目录文件、设备文件、符号链接文件
2、设备文件:在Linux中输入输出设备被看做特殊文件,称为设备文件。设备文件分两类,字符设备文件和块设备文件。设备文件存放在Linux的/dev目录
在这里插入图片描述

字符串“crw-rw-rw-”的第一个字符“c”表示是字符设备文件
字符串“brw-rw----”的第一个字符是“b”,表示是块设备文件

3、目录分类:工作目录、用户主目录(家目录) 、
4、用户目录:普通用户的主目录在/home下,root用户作的主目录在/root下。用户刚登录到系统中时,其工作目录便是该用户主目录,通常与用户的登录名相同
5、路径:

  • 绝对路径:Linux系统中,绝对路径是从“/”(根目录)开始的,也称为完全路径,如/home/user01、/usr/bin。
  • 相对路径:Linux系统中,相对路径是从用户工作目录或用户主目录开始的路径,如./test、…/user1、~/test。其中“.”表示用户工作目录,“…” 表示工作目录的上级目录,“~”表示用户主目录。

2.5 文件操作常用命令
1、mount指令mount [选项] 要挂载的设备名 挂载点
mount命令常用的选项有两个,分别为-t和-o:选项-t用于指定待挂载设备的文件系统类型;选项-o主要用来描述设备的挂载方式

2、cat命令cat [选项]… [文件]…
说明:把多个文本文件连接后输出到标准输出(屏幕)
有关cat命令下的输入/输出重定向和管道
系统执行一个shell命令时通常会自动打开三个标准文件,即标准输入文件(stdin),对应键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件对应显示器。
1 输出重定向>、>>:输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在显示器上,而是输出到指定文件中。
(1)一般形式为:command [参数] > 文件名
(2)“>>”为追加重定向符,即向当前文件内容后面追加内容
(3)输出重定向通常与cat命令结合使用,实现文件的创建与合并等操作。如:

  • 把当前目录下文件textfile1和textfile2内容合并,并通过重定向符“>”输出到文件testfileall中。
    在这里插入图片描述

(4)用cat > file.txt命令,还可实现将键盘输入的内容添加到指定的file.txt文件中。如下(ctrl+D表示输入完毕终止)
在这里插入图片描述
(5)错误重定向“2>”:可以把命令行出错的信息保存到指定的文件中去。
在这里插入图片描述
(6)避免文件重写:Shell提供了一种称为noclobber的功能,该功能可防止重定向时不经意地重写了已存在的文件。
在这里插入图片描述
2 输入重定向<、<<:输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。
(1)输入重定向的一般形式为:command [参数] < 文件名
3 管道管道可以把一系列命令连接起来,第一个命令的输出作为第二个命令的输入,第二个命令的输出又作为第三个命令的输入,以此类推。显示在屏幕上的是管道中最后一个命令的输出(如果命令行中未使用输出重定向)。
(1)使用管道符“|”来建立一个管道,语法格式为:command_a [参数] | command_b [参数]

3、文件内容统计命令wcwc [选项] …[文件]…
wc命令统计给定文件中的字节数、字数、行数。

4、显示文件内容命令moremore [选项] [文件…]
说明:该命令显示文本文件的内容,一次显示一屏,满屏后停下来,可按如下键继续。
(1)Space键 :默认显示文本的下一屏内容。
(2)Enter键:默认显示文本的下一行内容。
(3)d键或CTRL+D:向下显示文本半屏,默认为11行。
(4)b键或CTRL+B:默认显示文本的上一屏内容。
(5)q or Q or INTERRUPT键:退出more命令。

5、显示文件内容命令lessless [选项] [文件]…
说明:与more命令相似,分屏显示文件的内容。less命令允许用户向前(PageUp)或向后(PageDown)浏览文件。在less命令提示符下按q键退出。
more 和 less的区别:

  1. less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
  2. less不必读整个文件,加载速度会比more更快
  3. less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容

6、显示文件内容命令headhead [选项] …[文件]…
说明:head 命令用于查看一个文本文件的前N行,行数由参数值决定,默认值是10。

7、显示文件内容命令tailtail [选项] … [文件] …
说明:tail命令用于查看一文本文件的末尾若干行,行数由参数值决定,默认值是10。

8、文本搜索命令grepgrep [选项] 查找模式 [文件…]
说明: grep能在文本文件中查找符合条件的字符串,并把匹配的行打印出来。如果没有指定文件名,grep命令会搜索标准输入。

9、文本字符替换命令trtr [原始字符] [目标字符]
说明: tr命令用于替换文本文件中的字符

10、排序命令sortsort [选项] …[文件] …
说明:sort命令对指定文件中所有的排序,将结果显示在标准输出上。如不指定输入文件或使用“- ”,表示排序内容来自标准输入。缺省情况下以行为关键字按ASCII字符顺序进行排序。

11、去掉重复行命令uniquniq [选项]... [输入文件 [输出文件]]
说明:删除文本文件中相邻的重复行。

12、比较内容命令commcomm [选项]… 文件1 文件2
说明:comm命令逐行对两个已经排好序的文件进行比较,生成三列输出:仅在文件1中出现的行,仅在文件2中出现的行,在两个文件中都出现的行。

13、比较内容命令diffdiff [选项] … 文件列表
说明:diff命令逐行比较两个文本文件,并找出它们的不同。比comm命令更强大,不要求文件预先排好序。

14、创建空文件命令touchtouch[选项] [文件]
说明:touch命令用于创建空白文件或设置文件的时间

15、复制文件命令cpcp [选项] 源文件或目录 目标文件或目录
说明:cp命令完成文件或目录的复制。
如果源是普通文件,该命令把源文件复制成指定的目标文件或复制到指定的目标目录中。
cp 源文件 目标文件
cp 源文件 已存在的目录
如果源是目录,目标是一已存在的目录,该命令把源目录下的所有文件和子目录都复制到目标目录中;
如果源是目录,目标不是一已存在的目录,命令出现错误信息。
别名
1 定义别名用alias命令,其命令用法为:alias 别名=‘要代表的命令’
2 删除所定义的别名用unalias命令,其命令用法为:unalias 别名
3 用alias命令定义的别名默认仅针对当前终端有效,一旦开启新的终端窗口,之前的alias别名便会实效。

16、删除文件命令rmrm [选项] …文件或目录…
说明:rm命令可以删除文件或目录,删除目录必须要加“-r”选项。文件能否被删除并不取决于自身的权限,而是看其所在目录是否有写入权限。

17、移动文件命令mvmv [选项] 源文件或目录 目标文件或目录
说明:mv命令可移动文件或目录;更改文件或目录的名称。

18、查找文件命令findfind [路径名…] [表达式]  
说明:find命令用于查找符合条件的文件和目录。路径名是用空格隔开的要搜索的目录名清单,表达式是要寻找的文件的匹配规范。

19、文件的压缩命令bzip2bzip2 [选项] [要压缩的文件]
说明:压缩完后产生.bz2的压缩文件,并删除原始的文件。既可以压缩也可以解压缩。

20、文件的压缩命令gzipgzip [选项] [文件 …]
说明:gzip压缩会产生".gz"的压缩文件,并删除原始文件。既可以压缩也可以解压缩。

21、文件的备份命令tar(打包命令)tar [选项…] [文件或目录]…
说明:tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。

22、切换工作目录命令cdcd [目的目录]  
说明:切换目录至目的目录,前提是用户必须拥有进入目的目录的权限。 其中目的目录可为绝对路径或相对路径,若目录名称省略,则切换至使用者的主目录。

23、显示工作目录命令pwdpwd
说明:pwd命令不带任何选项或参数,查看“当前工作目录”的完整路径。

24、显示目录内容的命令lsls [选项]… [文件或目录]…
说明:ls命令列出目录中的文件信息,包括文件和子目录的名称。

25、创建目录命令mkdirmkdir [选项] … 目录名…
说明:该命令创建由目录名命名的目录,同时设置该目录的权限。要求创建目录的用户对该目录的父目录具有写权限(至少要有wx,但没有r就没有意义,所以相当于要有rwx)。

26、删除目录命令rmdirrmdir [选项]… 目录名…
说明:该命令从一个目录中删除一个或多个目录。要求删除目录的用户对该目录的父目录具有写权限,目录被删除前应该是空目录。
补(1)用户和用户组
Linux系统是一个多用户多任务的操作系统,任何一个用户,都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 Linux内部用UID标识各用户。

用户组(group)就是具有相同特征的用户的集合体,Linux系统中每个用户至少属于一个用户组,系统能对一个用户组中的所有用户进行集中管理。在Linux内部用户组用GID标识。

Linux系统规定了4种不同类型的用户,分别是文件主、同组用户、其他用户、超级用户。
(2)存取权限
存取权限就是用来确定谁可以通过何种方式对文件和目录进行访问,Linux系统规定3种访问文件和目录的方式。
(1)读(r)
对文件 : 只允许指定用户读取该文件的内容,禁止做任何更改操作;
对目录: 可以列出存储在该目录下的文件。
(2)写(w)
对文件: 允许指定用户打开并修改该文件;
对目录: 允许从该目录中删除或添加新的文件。
(3)执行(x)
对文件: 允许指定用户执行该文件;
对目录: 允许用cd命令将工作目录改为该目录

27、改变文件或目录存取权限命令—chmodchmod [who] [opt] [mode] 文件或目录名…
说明:用于改变文件或目录的访问权限。

28、改变文件主命令— chownchown [选项] … [用户][:[组]] 文件 …
说明:chown命令将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。在linux下一般只有超级用户才可以使用该命令。

29、改变用户组命令—chgrpchgrp [选项]… 所属组 文件或目录…
说明:chgrp命令改变文件所属的用户组,其中所属组可以是用户组的ID,也可以是用户组的组名。文件是以空格分开的要改变属组的文件列表,支持通配符。在Linux下一般只有超级用户才能改变文件的属组。

30、链接文件的命令lnln [选项]… 源文件或目录 目标文件或目录
说明:ln命令用来链接文件或目录。

链接是一种在共享文件和访问它的若干目录项之间建立联系的一种方法。Linux系统下的链接有两种,硬链接(Hard Link),符号链接(Symbolic Link)。
1、硬链接
硬链接指通过索引节点来进行的链接。在Linux系统中,可以让多个文件名指向同一索引节点,这样一个文件就有不同的文件名。
2、符号链接(windows下的快捷方式)
符号链接又称软链接,软链接包含了到原文件的路径名。
软链接没有硬链接的限制,可以给目录创建链接,也可以链接不同文件系统的文件。
3、软链接与硬链接有如下几点区别:
(1)硬链接的原文件和链接文件共用一个inode号,说明他们是同一个文件;而软链接原文件和链接文件拥有不同的inode号表明他们是两个不同的文件。
(2)硬链接在文件属性上体现不出来,其表示文件类型的字符处为“-”,因为在本质上硬链接文件和原文件是完全平等关系,原文件是普通文件,硬链接文件也是普通文件;而软链接表示文件类型的字符处为“l”,明确标识是链接文件。
(3)硬链接链接数目要增加,软链接的链接数目不会增加。
(4)硬链接文件大小跟原文件相同;软链接文件大小与原文件不同
(5)硬链接有自己的文件名;软链接的文件名通常是指向其链接的原文件。
在这里插入图片描述
31、改变文件默认权限掩码的命令----umask
(1)当新文件被创建时,其最初的权限由文件掩码决定

  • 文件创建时的默认权限=0666-umask
  • 目录创建时的默认权限=0777-umask
    • 系统默认root用户的掩码是0022,则root创建文件的默认权限是0666-0022=0644,创建目录的默认权限是0777-0022=0755。
    • 系统默认普通用户的掩码是0022
    • 如果普通用户的UID大于99,且UID和GID不相同,用户umask为0022

文件的特殊权限
1)文件的权限应该用四个八进制来表示,不过用 ls -l 命令时,只显示三个罢了。那个没有显示的八进制数字其实是第一个,它用来设定一些特殊权限。
2)这个八进制数字的三个位是:

  • SUID:用户置位s,SUID 只能用在可执行文件上,当用户执行该可执行文件时,会临时拥有该可执行文件所有者的权限。
  • SGID:组置位s,SGID 属性可以应用在目录或可执行文件上。当用在目录上时,任何用户在此目录下创建的文件或子目录都具有和该目录所属的组相同的组。
  • sticky-bit:粘着置位t,粘滞位,也被称作防删除位

三、Liunx系统管理
3.1 用户管理
1、用户类型:Linux系统中的用户三种类型

  • 超级用户:root (可以对系统做任何操作)
  • 普通用户:由root创建的用户
  • 特殊用户:与系统和服务相关的用户。如与进程相关的用户:bin,daemon,halt…;与服务相关的用户:mail,news,ftp,mysql,sshd…
    注意:默认情况下特殊用户无法登录。

2、用户管理的内容包括:
(1)用户账号的增加、修改和删除。
(2)组账号的增加、修改和删除。
(3)用户账号属性信息的修改,包括登录shell,用户主目录,用户注释信息等。
(4)组账号属性信息的修改,包括组内用户、组ID等
(5)用户和组账号密码的设置与修改,包括密码有效期、更改密码等。

3、了解用户管理相关配置文件
(1)/etc/passwd文件:存放用户账号相关的信息
(2)/etc/shadow文件:存放用户的加密口令,只有root用户可以读取。
(3)/etc/group文件:存放用户组相关的信息
(4)/etc/gshadow文件:存放用户组口令, 只有root用户可以读取。

4、用户和组管理相关命令
(1)useradd:添加用户:useradd [options] username
(2)usermod:改变用户属性:usermod [-options] [arguments] username
(3)userdel:删除用户:userdel [-r] username
(4)groupadd:添加组
(5)groupmod:修改组属性
(6)groupdel:删除组
(7)groups:查看属于哪个组

3.2 设备管理
1、Linux系统中设备分为

  • 字符设备:数据组织的单位为字节。
  • 块设备:数据组织的单位为块
  • 网络设备:通过通信网络传输数据的设备,一般指网络适配器(网卡)等

2、所有设备文件都放在/dev目录下

3、设备标识
设备的设备号一般由两部分构成:主设备号,次设备号。其中:主设备号代表设备的类型,可以唯一地确定设备的驱动程序,如hd表示IDE硬盘,sd表示SCSI硬盘,tty表示终端设备,lp表示打印机等;次设备号代表同类设备中的序号,如hda表示IDE主硬盘,hdb表示IDE从硬盘,tty0表示编号为0的终端,lp0表示第一个打印机等。

4、磁盘和分区管理命令
1)fdisk: fdisk命令是磁盘及分区管理工具,在硬盘设备中创建、删除、更改分区等操作通过fdisk命令进行,命令语法格式:fdisk [-l ] [设备名称]
2)mkfs:分区类型和格式化类型需要匹配,否则可能导致分区无法正常使用,使用mkfs(Make Filesystem,创建文件系统)命令可对其进行格式化。mkfs -t 文件系统类型 分区设备
3)fsck:当系统非正常关机,或其他原因破坏了文件系统时,需要对文件系统进行修复,否则文件系统将不能正常引导。该命令的命令格式:fsck [-sACR] [-t fstype] [filesysname] [fsck-options] filesys
4)df (disk free):df 命令功能是检查系统上的文件系统磁盘使用情况。df [选项]
5)du (disk usage):显示指定的目录或文件所占用的磁盘空间。du [options] [dirname]
6)quota:磁盘配额管理命令。quota命令可以显示磁盘已使用的空间与限制(限额)。

3.3 进程管理
1、进程可分为交互式进程、批处理进程和监控进程(守护进程)三种。
2、计划任务:在未来的特定时间里,自动执行一次特定的任务(任务到计划时间被调度,输出以邮件形式发送给指定用户)。有三种方法执行计划任务:
(1)一次性调度执行—at命令: 安排一个任务执行一次就结束。适合应对突发性和临时性任务。需要一个atd的系统后台进程。

  • 检查atd进程是否启动: systemctl status atd 或 systemctl status atd.service
  • 启动atd进程:systemctl start atd
  • 停止atd进程:systemctl stop atd
  • 重启atd进程:systemctl restart atd

(2)空闲时调度执行——batch命令:batch命令用低优先级运行作业,该命令几乎和at命令的功能完全相同。唯一的区别在于at命令是在指定时间,很精确地执行指定命令,而batch却是在系统负载降到0.8以下才会调度执行,用户的干预权力很小,该命令适合执行占用资源较多的命令。
(3)周期性调度执行——cron和crontab命令: 完成周期性的任务需要使用cron实现,cron的后台进程名字是crond , 可以用systemctl start|stop|status crond来启动、关闭、查看此服务。

  • 计划任务cron有系统级(root)和用户级。系统级cron任务主要负责临时文件的清理、系统信息的采集、日志的轮转(切割);用户级使用cron任务创建循环调度。
  • 系统级计划任务的实现步骤:
    • (1) root修改/etc/crontab文件
    • (2) root在/etc/cron.d目录中创建文件来实现

3、进程管理指令
1)ps命令(静态查看进程,某一时刻进程的快照):ps(process state)命令查看哪些进程正在运行、运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。最常用的还是用于监控后台进程的工作情况,因为后台进程不和屏幕键盘这些标准输入/输出设备进行通信。命令语法格式如下: ps [选项]
2)top命令(动态查看进程):实时动态显示进程 ,默认更新时间为3秒,或者按回车键立即更新。如果在前台执行,该命令将独占前台, 按”q”键退出。
3)renice命令:修改一个正在运行进程的优先权。nice的范围是-20~19,其中-20级别最高,19级别最低。renice -n number PID

  • (1)普通用户只能对自己的进程使用renice命令
  • (2)root用户可以在任何进程上使用renice命令
  • (3)只有root才能提高进程的优先权

4)wait 命令:wait命令实现对一个进程的等待。命令格式为:wait [n]
等待进程号为n的进程的完成并将报告进程的终止状态。没有参数,则等待所有后台进程的完成并返回代码0。

5)sleep命令:使进程延迟一段时间(挂起)再执行。sleep time ; command (时间单位为s)

6)kill命令

3.4 日志管理
1、Linux系统中的有三个主要的日志子系统:
(1)连接时间日志子系统:连接时间日志—由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp中,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪用户在何时登录到系统中。

  • utmp:记录当前登录的用户的信息
  • wtmp:登录和退出记录

(2)进程统计日志子系统
(3)错误日志子系统

四、Linux的网络管理及应用
4.1 Linux网络配置
4.1.1 Linux三种联网方式
1、VMWare为Linux提供三种联网方式:bridged(桥接模式);NAT(网络地址转换模式);host-only(仅主机模式)
2、虚拟网卡:

  • VMnet0:用于虚拟桥接网络下的虚拟网卡
  • VMnet8:用于虚拟NAT网络下的虚拟网卡
  • VMnet1:用于虚拟Host-Only网络下的虚拟网卡

3、桥接模式:在bridged模式下,虚拟机和物理机在局域网中处于同等地位;需要为虚拟机手工配置IP地址(和宿主机处于同一网段)、子网掩码、网关、DNS。来实现和物理机进行通信以及访问互联网。
4、NAT模式:让虚拟机借助NAT(网络地址转换)功能,通过物理机所在的网络来访问公网;NAT的网络在VMnet8提供的一个虚拟网络里,虚拟机的TCP/IP配置信息由虚拟网络的DHCP服务器提供的,故所有的虚拟机可以相互通信;只要物理机网络畅通,虚拟机就能上网;物理机中的VMnet8虚拟网卡可以让物理机和虚拟机能够互访。
5、Host-Only模式:虚拟机的TCP/IP配置信息由VMnet1虚拟网络的DHCP服务器来动态分配,故所有的虚拟机可以相互通信;物理机中的VMnet1虚拟网卡可以让物理机和虚拟机能够互访;因为Host-Only网络没有虚拟NAT,故虚拟机无法上网,对外虚拟机只能访问物理机。

4.1.2 网卡的设备名
以太网接口名称以en开头,WLAN接口名称以wl开头,WWAN接口名称以ww开头。
下一个字符表示适配器的类型,o表示在主板上,s表示热插拔插槽,p表示PCI接口设备。
数字n表示索引、Id或端口。
网卡的设备名、IP地址、子网掩码以及默认网关、DNS等配置信息保存在/etc/sysconfig/network-scripts目录下的网卡的配置文件中,一块网卡对应一个配置文件,其配置文件名具有以下格式: ifcfg-网卡类型及序号。

4.2 网络配置相关文件
1、网络配置文件/etc/sysconfig/network:/etc/sysconfig/network用于基本网络配置,在没有配置或安装网卡时,也需要设置该文件,以使本机的回环设备(Io)能够正常工作,该设备是Linux内部通信的基础。

2、网卡配置文件/etc/sysconfig/network-scripts/下的ifcfg-*:网卡的设备名、IP地址、子网掩码以及默认网关等配置信息保存在/etc/sysconfig/network-scripts目录下的网卡的配置文件中,一块网卡对应一个配置文件,其配置文件名具有以下格式:ifcfg-网卡类型以及网卡的序号;Linux支持一块物理网卡绑定多个IP地址,此时对于每个绑定的IP地址,需要一个虚拟网卡,该网卡的设备名为ensN:M,对应的配置文件名的格式为ifcfg-ensN:M,其中M为从0开始的数字,代表其序号。如第1块以太网卡上绑定的第1个虚拟网卡〔设备名为ens33:0)的配置文件名为ifcfg-ens33:0,绑定的第2块虚拟网卡(设备名为ens33:1)的配置文件名为ifcfg-ens33:1。Linux最多支持255个IP别名,对应的配置文件可通过复制ifcfg-ens33配置文件,并通过修改其配置内容来获得。

3、IP地址和主机名的映射文件/etc/hosts:/etc/hosts文件是在网络上使用的,是实现域名解析的一种方法,包含了IP地址和主机名之间的对应关系。IP地址在左,主机名以及主机的别名在右。如果想使用计算机名来访问对方的主机,需要把对方计算机的名称和IP地址写到本机的hosts文件中。

4.域名服务器配置文件/etc/resolv.conf:/etc/resolv.conf文件是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。当主机进行域名查询时,首先查找第一台域名服务器,如果第一台域名服务器没有响应,则查找第二台域名服务器,依此类推。在Linux中,最多可同时指定3个三个本地DNS服务器。一下是ifcfg-ens33和resolv.conf的对应关系。 在这里插入图片描述
5.域名解析配置文件/etc/host.conf :该文件决定进行域名解析时查找host文件和DNS服务器的顺序。
在这里插入图片描述

参数说明:
1order指明解析顺序,order hosts,bind,nis //说明先查询/etc/hosts文件,然后DNS,再是NIS
2 multi on 表示是否运行/etc/hosts文件允许主机指定多个地址 ,on表示允许

6.服务名和端口号之间的映射文件/etc/services:/etc/services中包含了服务名和端口号之间的映射

4.3 网络配置与诊断指令
4.3.1 hostname命令
1、主机名用于标识一台主机的名称,在网络中具有惟一性。
2、hostname [选项] 用于查看当前主机的名称,
3、临时设置主机名,可使用“hostname 新主机名”命令来实现,
4、该命令不会将新主机名保存到/etc/hostname配置文件中,因此,重新启动系统后,主机名将恢复为配置文件中所设置的主机名。
5、在设置了新的主机名后,“#”左边的提示符还不能同步更改,使用exit注销重新登录后,就可显示出新的主机名来。若要使主机名更改长期生效,则应该在/etc/hostname配置文件中进行修改。在这里插入图片描述
4.3.2 网卡的常用操作命令
ifconfig命令用于查看或设置网络接口(网卡),如IP地址、MAC地址、激活或关闭网络接口。

4.3.3 网络诊断命令ping命令
是最常用的网络测试命令,ping命令默认会不间断地向被测试的目的主机地址发送ICMP报文并收取回应报文,来测试当前主机到目的主机的网络连接状态。直到用户使用“Ctr+C”键来终止该命令。
ping [-c 发出报文数] 目的主机地址
当前主机与目标主机间的网络连接正常的情况下 ,若目标主机安装了防火墙软件并在防火墙规则中禁止了ICMP报文通过,或者在到达目标主机的网路中的某个三层交换机或路由器的ACL(存取访问控制列表)中,不允许ICMP报文到达目标主机,则在ping目标主机时,也会出现报告‘Destination Host Unreachable”的现象。

4.3.4 traceroute命令
数据包路由跟踪诊断命令,跟踪从当前主机到指定的主机的UDP数据报所经过的路径,从而分析出网络的故障点。traceroute IP 地址
4.3.5 netstat 命令
netstat 命令用于显示网络状态的信息,如网络连接,路由表,接口连接(Interface Statistics) 等。
4.3.6 nslookup
1、nslookup是查询DNS数据库的命令。DNS( Domain Name System,域名系统)是一个分布式的数据库,用于处理整个Internet上的域名与IP地址的映射。
2、用/etc/resolv.conf文件作为DNS服务器的来源,
3、此命令主要用于监测指定的DNS服务器工作是否正常。
4、正向解析:域名->IP地址;反向解析:IP地址->主机名
4.3.7 dig域信息搜索器
执行DNS搜索,显示从接受请求的域名服务器返回的答复。
4.3.8 route 查看和管理路由表
网络上的每台主机都有自己的路由表用于决定所发出的数据包将要转发到哪一个网络节点上。

4.4 Linux服务器配置
4.4.1 NFS
1、NFS:主要用于Linux主机间文件共享
2、NFS(Network File System)即网络文件系统,是Unix,Linux支持的文件系统中的一种。NFS允许用户像本地文件一样访问局域网NFS服务器上的文件。
3、NFS采用的是C/S体系结构,至少有两个主要部分:一台服务器和一台(或者更多)客户机。
4、数据可以存放在NFS服务器上,本地工作站可以节约更少的磁盘空间。用户不必在每个网络上机器中都有一个home目录,home目录可以被放在NFS服务器上。多个机器共享一台CDROM或其他设备,方便多台机器安装软件。

4.4.2 DNS(Domain Name System)
1、作用:管理主机的”户籍”—主机名:IP地址,是一个域名与IP地址映射关系的分布式数据库,实现用户访问网站时只输入域名即可访问的功能。
2、最早的主机解析,依靠/etc/hosts文件,后来主机数量变得非常庞大,网络越来越复杂,就产生了DNS服务器。
3、DNS设备

  • DNS服务器:提供域名解析服务的主机。
  • DNS客户机:需要查询域名信息的主机。任何联网的主机都需要查询域名,所以任意主机都是DNS客户机。DNS客户机需要知道DNS服务器在哪里,Linux靠/etc/reslov.conf指定。

4、解析方式:

  • 正向解析:根据主机域名解析IP地址。
  • 反向解析:根据IP地址解析主机域名。

5、四种分析方式
(1)本地解析:客户机平时得到的DNS查询记录都保留在DNS缓存中。当程序提出DNS查询请求时,这个请求要传送至DNS客户端程序,DNS客户端程序首先使用本地缓存信息进行解析,如果可以解析所要查询的名称,就直接应答该查询,而不需要向DNS服务器查询。
在这里插入图片描述
(2)直接解析:如果DNS客户端程序不能从本地DNS缓存回答客户机的DNS查询,它就向客户机所设定的局部DNS服务器发一个查询请求,局部DNS服务器得到这个查询请求,首先查看一下所要求查询的域名是不是自己能回答的,如果能回答,则直接给予回答,若不能回答,再查看自己的DNS缓存,如果可以从缓存中解析,则也是直接给予回应。
在这里插入图片描述(3)递归解析:当局部DNS服务器不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式,下图所示的是递归方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。
在这里插入图片描述
(4)迭代解析:局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。
在这里插入图片描述
4、有关DNS的服务器

  • 根服务器(hint):用“.”表示,位于整个域名空间的最上层,主要用来管理根域和顶级域名。目前,世界上一共有13台计算机作为根服务器。
  • 主DNS服务器 (Master/Primary Server):在特定的区域内具有唯一性,负责维护该区域内的域名与IP地址的对应关系。
  • 辅/从DNS服务器 (Slave/Seconday Server):从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况,帮助主服务器“打下手”。
  • 缓存DNS服务器 (Caching only Server): 向其他域名服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。缓存服务器不太常用,一般部署在企业内网的网关位置。

4.4.3 Samba
Linux与Windows间文件共享

4.4.4 FTP
FTP文件传送协议(File Transfer Protocol,简称FTP),是一个用于从一台主机到另一台主机传输文件的协议。

五、Shell编程
5.1 Shell简介
1、在Linux操作系统中,shell是用户与操作系统内核打交道的接口。shell是命令解释器,它接收用户输入的命令,进行分析,创建子进程,由子进程实现命令所规定的功能,shell睡眠,等子进程终止后,shell被唤醒,再显示命令提示符。
2、Shell 还可以用来进行程序设计,成为shell脚本,又叫做shell程序或shell命令文件(类似于DOS的批处理程序)。
3、shell常用类型如下:Bourne shell(sh)、C shell(csh)和Korn shell(ksh)
4、通过cat /etc/shells命令查看安装的shell
5、通过查看/etc/passwd文件可以查看用户使用的shell类型
6、type 来确定一个命令是否是内置命令

5.2 Shell基础
1、通配符
通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。常用的通配符有:
1)*代表任何字符串(包括0个)。例如:“f*”匹配以f打头的任意字符串。
2)?代表任何单个字符。
3)[]代表指定的一个字符范围,只要文件名中[]位置处的字符在[]中指定的范围之内,那么这个文件名就与这个模式串匹配。
2、引号

  • 单引号 ':由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后也会失去原有意义,而只作为普通字符解释。
  • 双引号 ":由双引号括起来的字符,除“$”、“\”、“’”、和“””这几个字符仍是特殊字符并保留其特殊功能外,其余字符作为普通字符对待。\是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可
  • 反引号 (`):反引号括起来的字符串被shell解释为命令,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。

3、注释符#:在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行
4、命令别名通常是其他命令的缩写,用来减少键盘输入。命令格式为:alias alias-name =’original-command’
5、命令历史History:Linux系统的bash提供了命令历史的功能,通过history命令可以对当前系统中执行过的所有shell命令进行显示。
若想重复执行命令历史中指定的命令,可使用如下格式:
!命令编号
6、环境变量HISTSIZE的值保存历史命令记录的总行数,该值的范围正常情况下是100~1000,当从shell中退出时,最近执行的命令将保存在HISTFILE变量指定的文件中。

5.3 Shell脚本
1、Shell脚本是用shell命令编写的文件,也称为shell script。
2、shell脚本执行方式
(1)为脚本文件加上可执行权限,然后在命令行直接输入shell脚本文件名执行。./shell脚本名
(2)sh shell脚本名
(3). shell脚本名

5.4 Shell变量
5.4.1 全局环境变量
Linux是一个多用户的操作系统,每个用户登录系统后,都会有一个专用的运行环境。
通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。
用户可以在配置文件中进行修改相应的环境变量。
全局环境变量由系统预定义并使用在bash进程及其创建的子进程中。
要想永久改变某个环境变量的,就需要修改配置文件。
/etc/profile是所有用户的环境初始化文件,只有root有权限更改。
如果只想自定义个人的环境变量,需编辑用户家目录下的.bash_profile文件(这个文件中定义的变量的作用范围在用户启动的所有shell终端进程)。
5.4.2 局部环境变量
(一般用小写)
局部环境变量由用户在shell提示符处定义或者在shell脚本中定义的变量(即局部环境变量的作用范围在对应的shell终端进程或者shell脚本进程)。
用户自定义变量的格式:
variable-name=value
注意:如果字符串里包含空格,就必须用引号把它们括起来。还要注意在等号两边不能有空格。
无论何时想要获取变量内容,必须在它前面加$字符。
用户在shell提示符处定义的局部变量属于对应终端的bash进程,由其创建的子进程并不能使用它。
在shell脚本中定义的局部变量只能在脚本进程中使用。
(2) 清除变量
设置的变量不需要时可以清除,清除变量格式如下:
unset variable-name
5.4.3 位置变量
如果脚本在执行时带有参数,系统会自动创建一些额外的变量,这些变量与它所在命令行的位置有关,因此被称为位置变量或位置参数。
shell提供的位置变量有$1、$2、$3、$4、$5、$6、$7、$8、$9,存放命令行上从左至右的参数。
$0是一个特殊的位置变量,存放脚本名。
在这里插入图片描述
当命令行上命令参数超过9个时,shell提供了shift命令可以把所有参数变量左移一个位置,使$2变成$1($1被丢弃, $0不变),$3变成$2,依此类推。
使用格式如下:
shift [n]
其中n表示向左移动参数的个数,默认值为1。

5.4.4 特殊变量
特殊变量由系统指定,不可修改,提供给程序运行时做判断和使用(特殊变量都以$开头)。

  • $#:表示传递给脚本的实际参数个数(不包括$0)。
  • $$:当前shell脚本的进程号。
  • $*:位置参数的值,各个参数之间用环境变量IFS中定义的字符分隔开。
  • $@:也表示位置参数的值,它不使用IFS环境变量,所以当IFS为空时,参数值不会结合在一起(因为结合在一起就不能确定有几个参数了)。
  • $!:后台运行的最后一个进程号。
  • $?:执行最后一条命令的退出状态,0表示没有错误,非0表示有错误。
  • 环境变量IFS,称为内部字段分隔符(internal field separator),默认情况下,bash shell会将下列字符当做字段分隔符:空格、制表符、换行符。

六、Shell编程
6.1 输入\输出
1、输入命令read:使用read命令来将用户的输入赋值给变量。命令格式如下:
read variable-name1 [variable-name2……]
2、输出命令echo:默认情况下是换行标准输出语句;echo输出多个空格时必须用引号括起,否则认为是一个空格。
3、export命令:export命令可将在shell脚本中定义的变量导出到子shell中,使之在子shell中有效。

6.2 Shell的逻辑运算
1、 条件测试:有两种条件测试命令,语法格式如下:

  • test 条件表达式
  • [ 条件表达式 ] 注:使用第二种方法进行条件测试时,必须在[ ]前后保留空格,否则shell提示error。

注意:字符串比较时“=” 两边有空格;赋值时“=”两边不能有空格

2、逻辑运算:在进行条件判断时,shell提供了复杂的逻辑运算,分别是:AND运算和OR运算。

  • 1)AND运算:AND运算符为&&,它的语法格式为:statement1 && statement2 && statement3……
  • 2)OR运算:OR允许持续执行一系列命令直到有一条命令成功为止,其后的命令将不再被执行。OR运算符为||,它的语法格式为:statement1 || statement2 || statement3……

6.3 Shell的算术运算
1、使用expr命令:expr命令将它的参数当作一个表达式来求值。语法格式:expr expression
注意:在使用expr时,运算符前后要有空格,且乘法要用“\”转义,即“\*”的形式。(*不转义的话用做通配符)
2、使用shell扩展$((expression)):该命令用于计算一个expression并返回它的值,例:
在这里插入图片描述
注意:这与x= ( . . . ) 命令不同,两对圆括号用于算术替换,而一对圆括号用于命令的执行和获取输出 . ‘ (...)命令不同,两对圆括号用于算术替换,而一对圆括号用于命令的执行和获取输出. ` (...)命令不同,两对圆括号用于算术替换,而一对圆括号用于命令的执行和获取输出.‘echo The date is ( d a t e ) ‘ 等效于 ‘ (date)` 等效于 ` (date)等效于echo The date is date `

3、使用let命令:用来求算术表达式的值,如果最后表达式的值为0,let命令返回1;否则返回0。语法格式为:let expression
示例:命令中的表达式含有空格,所以要用引号
在这里插入图片描述
注意:使用let命令时,变量前的$不是必须的,乘法也不需转义使用(let c=a*b 等效于let c=$a*$b)。
4、使用$[ 运算表达式 ](只能用于整数运算)注意运算表达式和方括号之间有空格。

6.4 条件语句
1、if
(1) 基本的if语句

if  condition
then
  statements
else
  statements
fi

(2)elif语句

if  condition1
then
  statements
elif condition2
then
  statements
elif condition3
then
  statements
……
else
  statements
fi

(3) if语句其它形式

if  condition  ; then
  if  condition ; then
     if condition ; then
statements
     fi
  fi
fi

2、case:case是一个多分支结构,根据变量与哪种模式匹配确定执行相应的语句序列。
它的语法如下所示:

case variable in
pattern1) statements;;
pattern2) statements;;
……
pattern) statements;;
*) statements;;
esac

case支持合并匹配模式,即在每一个模式中,可以使用通配符或逻辑符号。

#!/bin/bash
echo " abc is the  user's name? please answer yes or no"
read name
case "$name" in
y|Y|yes|YES)	echo "hello abc!";;
n*|N*)	echo "abc isn't the user's name?";;
*)  echo "sorry,your input isn't recognized.";;
esac
exit 0

6.5 循环语句
1、for语句:for结构可以用来循环处理一组值,这组值可以是任意字符串的集合。
for语句的语法格式如下:

2、while语句

while condition 
do
  statements
done

3、until语句
until语句与while语句一样,都是循环语句,但处理方式正好相反,即当判断条件为真时,循环停止。它的语法格式为:

until condition
do
  statements
done

4、break和continue语句
(1) break命令:break命令的功能是在控制条件未满足之前,跳出for、while或until循环。
(2) continue命令:使for、while或until循环跳到下一次循环继续执行,循环变量取循环列表中的下一个值。

七、Shell函数
shell除了可以定义变量外,还可以定义函数。
1、函数定义
定义一个shell函数,语法格式如下:

function_name ( ) {
statements
}

2、函数调用
通常将函数看成是脚本中的一段代码,在使用函数前必须先定义该函数,使用时利用函数名直接调用。

八、进程管理
8.1 进程组成
1、 存放在磁盘上的可执行文件的代码和数据的集合称为可执行映像(Executable Image)。
2、当一个程序装入系统中运行时,它就形成了一个进程。
3、某个时刻进程的内容被称为进程映像(Process Image)。
4、进程是由代码段(code segment)、用户数据段(user segment)和系统数据段、堆栈段(system segment)组成的一个动态实体。

  • 代码段:进程要执行的指令代码,具有只读的属性。
  • 用户数据段:进程在运行过程中处理的数据集合。
  • 系统数据段:存放程序的运行环境—进程控制块PCB。
  • 堆栈段:进程有两个栈,用户栈和内核栈,其中内核栈和PCB放在一起,占用8KB的内存区。

5、核心态和用户态

  • 核心态又称系统态,具有较高的特权(0级),能执行所有的机器指令,能访问所有的寄存器和存储区域,能直接控制所有的系统资源。 cpu在执行内核程序时处于核心态。
  • 用户态是进程的普通执行状态,具有较低的特权(3级),只能执行规定的机器指令,不能执行特权指令。只能访问进程的存储空间。不能与系统硬件相互作用,不能访问系统资源。cpu在执行用户程序时处于用户态。
  • 如何判断CPU当前的状态(特权级)
    CPU通过cs:eip这两个寄存器读取要执行的指令(cs是代码段寄存器,eip是偏移量寄存器)
    cs寄存器的最低两位表明了当前正在执行的代码所处的特权级CPL(Current Privilege Level)。

6、进程控制块:用task_struct结构体来描述,也叫任务描述符。定义在include/linux/sched.h中
7、进程状态state:用于表示进程当前的状态,包括
8、pid与tpid:

  • 一个线程组的所有线程使用和组长相同的PID。
  • 一个进程创建后,此时只有进程自己,他的PID和TGID是一样的,当这个进程创建了一个新的线程后,新线程有属于自己的PID,但它的TGID还是指向父进程的TGID。

9、进程只有通过中断、异常、系统调用才能切换到核心态运行,进程所使用的堆栈也要从用户栈切换到内核栈。
模式切换就是栈的切换

九、系统调用与内核
1、Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。
2、每个系统命令都是一个可执行程序,比如 ls、hostname等,
3、系统命令的实现调用了系统调用
4、系统调用是用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的。
5、每个系统调用在内核中都有一个服务例程来实现该系统调用的具体功能,其命名格式都是以“sys_”开头。
6、当用户态的进程调用一个系统调用时,会引发一个0x80(128号)软中断,CPU切换到内核态并开始执行相应的内核函数。
7、Linux系统为几百个系统调用都定义了一个唯一的编号,称为系统调用号,当用户添加自己的系统调用的时候,也必须在unistd.h文件里添加一个自己的系统调用号__NR_*****。
8、系统调用的参数传递采用寄存器传递非堆栈传递
9、系统调用表用来把系统调用号和相应的内核函数联系起来。
10、模块(Module)机制:用户可以根据需要,在不需要对内核重新编译的情况下,可以将模块动态地载入或移出内核。
11、模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行。

  • 模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
  • 内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),简称为模块。

十、文件
1、系统调用的文件I/O和标准I/O(即库函数)的区别

  • 文件I/O:在用户空间没有缓冲,在内核空间还是进行了缓冲的。用户进程的数据-----内核缓冲区----磁盘。
  • 标准I/O:是c标准库中定义的。在用户空间有缓冲区,用户进程的数据-----标准I/O缓冲区-----内核缓冲区----磁盘。
  • 文件I/O每次操作都会执行相关系统调用。好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销;
    标准I/O是在文件I/O的基础上封装了缓冲机制,先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。但是和网络通信存在不兼容的问题,不适合网络应用编程。

2、标准I/O提供了三种类型的缓冲:

  • 全缓冲:在填满标准I/O缓冲区后才进行实际I/O操作(写回磁盘)。常规文件通常是全缓冲的。
  • 行缓冲:在输入和输出中遇到换行符时,执行实际I/O操作。这允许我们一次输出一个字符,但只有在写了一行之后才进行实际I/O操作。标准输入和标准输出对应终端设备时通常是行缓冲的。
  • 不带缓冲:标准错误输出通常是无缓冲的,这样用户程序产生的错误信息可以尽快输出-到设备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

递归典型例题:汉诺塔问题

文章目录 1. 什么是汉诺塔2. 汉诺塔的解题步骤3. 代码实现汉诺塔 1. 什么是汉诺塔 1. 汉诺塔的来源 一位法国数学家曾编写过一个印度的古老传说&#xff1a;在世界中心拿勒斯的圣庙里边&#xff0c;有一块黄铜板&#xff0c;上边插着三根宝柱。印度教的主神梵天在创造世界的时…

div绑定键盘点击事件

为箭头绑定绑定键盘方向键 <div class"toggle-nav"><spanv-if"leftToggleSt"click"toggleGoods(1)"keyup.left"toggleGoods(1)"class"toggle-left"><a-icon type"left" class"icon" /&…

Linux系统设置

Linux的系统设置 01 选择“Install CentOS7” 02 选择安装界面的语言 03 选择时区&#xff0c;这里选择上海 04 选择安装类型&#xff0c;选择最小安装即可&#xff0c;不需要图形界面与其他的组件 05 选择安装位置&#xff0c;自定义分区 06 我要配置分区&#xff0c;进行…

ARS408毫米波雷达使用记录

参考&#xff1a;ARS_408毫米波雷达数据解析学习记录 感谢博主的分享&#xff08;https://blog.csdn.net/weixin_49401384&#xff09; 雷达can消息解析&#xff08;通用can解析思路&#xff09; socketcan学习can总线 毫米波雷达can协议解读RadarCfgRadarState 代码基本是关于…

Python接口自动化核心模块 - 数据库操作和日志

进行接口测试时&#xff0c;我们需要连接到数据库中&#xff0c;对数据源进行备份、还原、验证等操作。 Python连接数据库常见模块 MysqlDB python2时代最火的驱动库。基于C开发&#xff0c;对windows平台不友好。现在已经进入python3时代&#xff0c;基本不再使用 MysqlCl…

干农活太累了,尤其是对一位22女孩来说

干农活太累了&#xff0c;尤其是对一位22女孩来说。要是能够通过电商来销售农产品可以大大减轻干农活的负担。在重庆荣昌的一个小村庄里&#xff0c;一个名叫杨儿杨的00后女孩&#xff0c;正通过抖音电商&#xff0c;书写着她自己的故事。杨儿杨的生活并不容易。5岁前&#xff…

数据库 --- mysql(01)

MYSQL 1、数据库简介 数据&#xff1a;描述事物的符号记录&#xff0c; 可以是数字、 文字、图形、图像、声音、语言等&#xff0c;数据有多种形式&#xff0c;它们都可以经过数字化后存入计算机。 数据库&#xff1a;存储数据的仓库&#xff0c;是长期存放在计算机内、有组…

武大+上交提出 BatGPT:创新性采用双向自回归架构,可预测前后token

进NLP群—>加入NLP交流群 本论文介绍了一种名为BATGPT的大规模语言模型&#xff0c;由武汉大学和上海交通大学联合开发和训练。 该模型采用双向自回归架构&#xff0c;通过创新的参数扩展方法和强化学习方法来提高模型的对齐性能&#xff0c;从而更有效地捕捉自然语言的复杂…

Seata 分布式事务的中间件Seata设计和实现方案

文章目录 分布式事务的中间件SeataSeata AT 模式-默认模式前提整体机制写隔离读隔离 Seata XA 模式前提整体机制工作机制 Seata TCC 模式Seata Saga 模式概述缺点&#xff1a; Saga的实现外传 分布式事务的中间件Seata Seata 是一款开源的分布式事务解决方案&#xff0c;致力于…

element ui组件的自定义类名样式不生效

element ui中&#xff0c;类似描述列表这种组件 会提供自定义类名属性 需要注意&#xff0c;样式不能写在<style scoped>标签中&#xff0c;会被vue自动加上data-v属性&#xff0c;导致样式失效。 必须写在<style>标签里

C++进阶—红黑树详解及map、set封装(3)

目录 1. 红黑树的概念 2. 红黑树的性质 3. 红黑树节点的定义 4. 红黑树性质分析 5. 红黑树插入节点简要分析&#xff08;新插入节点的parent为红色&#xff09; 5.1 简要分析1-变色&#xff1a; 5.2 简要分析2-变色旋转 5.3 简要分析总结 6. 红黑树插入节点详细分析 …

Linux下载安装Redis(Ubuntu系统)

相比于 Windows 系统而言&#xff0c;Redis 更适合于在 Linux 系统上使用&#xff0c;这是由 Redis 的底层机制决定的。下面介绍一下如何在 Linux 发行版 Ubuntu 系统上安装 Redis 数据库。 了解Redis版本 Redis 版本号采用国际标准惯例&#xff0c;即“主版本号.副版本号.补…

Linux分布式应用 Zabbix监控软件 安装

zabbix 是什么&#xff1f; ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 ●…

第七届御网杯re的wp_Ba0

re拿了一血和二血&#xff0c;感觉挺简单的&#xff08; 1、easycpp 使用IDA进行linux动调 主要异或加密&#xff0c;还原即可 1 2 3 4 flag1[0x23,0x21,0x27,0x22,0x27,0x27,0x25,0x2B,0x2D,0x26,0x23,0x23,0x22,0x26,0x27,0x2E] flag[18,19,20,22,18,17,18,19,20,22,18,17…

visual stodio 编译

一、生成文件复制一份到其他路径 选到这里&#xff0c;添加命令&#xff1a; PlatformName 平台版本 x86/x64 Configuration 配置生成目录 Debug/Release OutputPath 生成路径 Debug/Release copy /y "$(OutputPath)$(ProjectName).dll" "E:\Project\UseDll…

LED点阵动画

23-7-6 #include<regx52.h> #include "Delay.h" #include "Matrix.h" /*点阵屏显示动画*/ unsigned char code Animation[]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x08,0x08,0x08,0xff,0x00,0x0e,0x15,0x15,0x15,0x08,0x00,0x7e,0x01,0x02,…

用户数据报协议 UDP

文章目录 一、UDP数据报格式二、UDP校验和计算1.伪报头2.伪报头结构3.检验和计算 三、UDP特点 UDP 的特点&#xff1a; 无连接、不可靠&#xff0c;运行快捷&#xff1a; 在传输报文之前不需要建立连接&#xff0c;因此减少了协议开销与传输延时。此外&#xff0c;除了对报文提…

2023年湖北成人高考学习全流,今天启程别详细给大家介绍!

2023年湖北成人高考学习全流&#xff0c;今天启程别详细给大家介绍&#xff01; 成人高考可以准备起来了&#xff0c;那么你了解成人高考的学习流程吗&#xff1f; 一、考前准备 确认好报考条件&#xff0c;准备报名资料&#xff0c;拿到书本教材开始复习备考。 湖北成人高考报…

canvas 绘制包含10个换行(‘\n’)文字例子,要求可以设置行高,文字最后整体在canvas的高度垂直居中

canvas 绘制包含10个换行(‘\n’)文字例子,要求可以设置行高,文字最后整体在canvas的高度垂直居中。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas Text Example</title><style>…

Redis锁防止重复提交

1.自定义注解方式 /*** author &#xff1a;网寻星公众号* date &#xff1a;Created in 2023/5/30 10:58* description&#xff1a;Redis锁防止重复提交* modified By&#xff1a;* version: 1.0$*/ Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Docume…