linux上下文
㈠ 同步、异步阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。
本文讨论的背景是linux环境下的network IO。
本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”,Stevens在这节中详细说明了各种IO的特点和区别,如果英文够好的话,推荐直接阅读。Stevens的文风是有名的深入浅出,所以不用担心看不懂。本文中的流程图也是截取自参考文献。
Stevens在文章中一共比较了五种IO Model:
blocking IO
nonblocking IO
IO multiplexing
signal driven IO
asynchronous IO
由于signal driven IO在实际中并不常用,所以我这只提及剩下的四种IO Model。
再说一下IO发生时涉及的对象和步骤。
对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel)。当一个read操作发生时,它会经历两个阶段:
1 等待数据准备 (Waiting for the data to be ready)
2 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)
记住这两点很重要,因为这些IO Model的区别就是在两个阶段上各有不同的情况。
在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样:
当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。
所以,blocking IO的特点就是在IO执行的两个阶段都被block了。
linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子:
从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存,然后返回。
所以,用户进程其实是需要不断的主动询问kernel数据好了没有。
IO multiplexing这个词可能有点陌生,但是如果我说select,epoll,大概就都能明白了。有些地方也称这种IO方式为event driven IO。我们都知道,select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。它的流程如图:
当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。
这个图和blocking IO的图其实并没有太大的不同,事实上,还更差一些。因为这里需要使用两个system call (select 和 recvfrom),而blocking IO只调用了一个system call (recvfrom)。但是,用select的优势在于它可以同时处理多个connection。(多说一句。所以,如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。)
在IO multiplexing Model中,实际中,对于每一个socket,一般都设置成为non-blocking,但是,如上图所示,整个用户的process其实是一直被block的。只不过process是被select这个函数block,而不是被socket IO给block。
Asynchronous I/O
linux下的asynchronous IO其实用得很少。先看一下它的流程:
用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先它会立刻返回,所以不会对用户进程产生任何block。然后,kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal,告诉它read操作完成了。
到目前为止,已经将四个IO Model都介绍完了。现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪。
先回答最简单的这个:blocking vs non-blocking。前面的介绍中其实已经很明确的说明了这两者的区别。调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回。
在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义。Stevens给出的定义(其实是POSIX的定义)是这样子的:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;
An asynchronous I/O operation does not cause the requesting process to be blocked;
两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义,之前所述的blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO。有人可能会说,non-blocking IO并没有被block啊。这里有个非常“狡猾”的地方,定义中所指的”IO operation”是指真实的IO操作,就是例子中的recvfrom这个system call。non-blocking IO在执行recvfrom这个system call的时候,如果kernel的数据没有准备好,这时候不会block进程。但是,当kernel中数据准备好的时候,recvfrom会将数据从kernel拷贝到用户内存中,这个时候进程是被block了,在这段时间内,进程是被block的。而asynchronous IO则不一样,当进程发起IO 操作之后,就直接返回再也不理睬了,直到kernel发送一个信号,告诉进程说IO完成。在这整个过程中,进程完全没有被block。
各个IO Model的比较如图所示:
经过上面的介绍,会发现non-blocking IO和asynchronous IO的区别还是很明显的。在non-blocking IO中,虽然进程大部分时间都不会被block,但是它仍然要求进程去主动的check,并且当数据准备完成以后,也需要进程主动的再次调用recvfrom来将数据拷贝到用户内存。而asynchronous IO则完全不同。它就像是用户进程将整个IO操作交给了他人(kernel)完成,然后他人做完后发信号通知。在此期间,用户进程不需要去检查IO操作的状态,也不需要主动的去拷贝数据。
最后,再举几个不是很恰当的例子来说明这四个IO Model:
有A,B,C,D四个人在钓鱼:
A用的是最老式的鱼竿,所以呢,得一直守着,等到鱼上钩了再拉杆;
B的鱼竿有个功能,能够显示是否有鱼上钩,所以呢,B就和旁边的MM聊天,隔会再看看有没有鱼上钩,有的话就迅速拉杆;
C用的鱼竿和B差不多,但他想了一个好办法,就是同时放好几根鱼竿,然后守在旁边,一旦有显示说鱼上钩了,它就将对应的鱼竿拉起来;
D是个有钱人,干脆雇了一个人帮他钓鱼,一旦那个人把鱼钓上来了,就给D发个短信。
㈡ LINUX的上下文是什么意思
楼上的回答好搞笑呀。
LINUX上下文是指LINUX进程上下文:
当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。
当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。
㈢ Linux里面kmp是什么
kmp是在系统崩溃、死锁或者死机的时候用来转储内存运行参数的一个工具和服务。
打个比方,如果系统一旦崩溃那么正常的内核就没有办法工作了,在这个时候将由kmp产生一个用于capture当前运行信息的内核,该内核会将此时的内存中的所有运行状态和数据信息收集到一个mp
core文件中以便于Red
Hat工程师分析崩溃原因,一旦内存信息收集完成,系统将自动重启。这和以前的diskmp,netmp是同样道理。只不过kmp是RHEL6特有的。
查看Linux系统是否打开kmp:
执行命令:ulimit -c 如果输出为 0 ,则代表没有打开。如果为unlimited则已经打开。
㈣ Linux基本命令-2021-0717
[root@localhost ~]# ls -l
总用量 44
-rw------. 1 ---- root ---- root --------1207 1 月14 18:18 anaconda-ks.cfg
权限--引用计数 所有者 -- 所属组--- 大小-- 文件修改时间 文件名
ls [选项] [文件名或目录名]
选项:
-a :显示所有文件
--color=when:支持颜色输出
-d :显示目录信息,而不是目录下的文件
-h :人性化显示﹐按照我们习惯的显示文件大小
-i :显示文件的i节点号
-l:长格式显示
pwd 命令是查询当前所在的目录的绝对路径
选项:
-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。
-P 打印当前工作目录的物理位置。
mkdir 是创建目录的命令
选项:
-Z:设置安全上下文,当使用SELinux时有效;
-m或--mode:建立目录的同时设置目录的权限;
-p或--parents:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
rmdir 是删除空目录的命令
-p: 递归删除目录
touch 是 创建空文件或修改文件的时间戳
[root@localhost ~]# touch [选项] 文件名
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间戳
选项:
-L:支持符号连接;
-f:显示文件系统状态而非文件状态;
-t:以简洁方式输出信息;
cat 命令用来查看文件内容
选项:
-A: 相当于-vET 选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-n: 显示行号
-T: 把 Tab 键用^I显示出来
-v: 列出特殊字符
more 是分屏显示文件的命令
less 是分行显示文件的命令
用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。
选项:
-e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异;
-N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符。
head 是用来显示文件开头的命令
选项:
-c --bytes=[-]NUM 显示前NUM字节;如果NUM前有"-",那么会打印除了文件末尾的NUM字节以外的其他内容。
-n, --lines=[-]NUM 显示前NUM行而不是默认的10行;如果NUM前有"-",那么会打印除了文件末尾的NUM行以外的其他行。
-q, --quiet, --silent 不打印文件名行。
-v, --verbose 总是打印文件名行。
-z, --zero-terminated 行终止符为NUL而不是换行符。
tail 是用来显示文件末尾的命令
选项:
-c, --bytes=NUM 输出文件尾部的NUM(NUM为整数)个字节内容。
-f, --follow[={name|descript}] 显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。
-F 与 “--follow=name --retry” 功能相同。
-n, --line=NUM 输出文件的尾部NUM(NUM位数字)行内容。
--pid=<进程号> 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令。
-q, --quiet, --silent 当有多个文件参数时,不输出各个文件名。
--retry 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“--follow=name”连用。
-s, --sleep-interal=<秒数> 与“-f”选项连用,指定监视文件变化时间隔的秒数。
-v, --verbose 当有多个文件参数时,总是输出各个文件名。
ln 是用来为文件创建链接的命令
[root@localhost ~]# ln [选项] 源文件 目标文件
选项:
-s: 建立软链接文件。如果不加“-s”选项,则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 覆盖既有文件之前先询问用户
-L, --logical 取消引用作为软链接的目标
-n, --no-dereference 把软链接的目的目录视为一般文件
-P, --physical 直接将硬链接到软链接
-r, --relative 创建相对于链接位置的软链接
-s, --symbolic 对源文件建立软链接
硬链接特征:
源文件和硬链接文件拥有相同的 Inode 和 Block
修改任意一个文件,另一个都改变
删除任意一个文件,另一个都能使用
硬链接标记不清,很难确认硬链接文件位置,不建议使用
硬链接不能链接目录
硬链接不能跨分区
软链接特征:
软链接和源文件拥有不同的 Inode 和 Block
两个文件修改任意一个,另一个都改变
删除软链接,源文件不受影响;删除源文件,软链接不能使用
软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文
件权限
软链接可以链接目录
软链接可以跨分区
软链接特征明显,建议使用软连接
rm 是强大的删除命令,不仅可以删除文件,也可以删除目录
[root@localhost ~]# rm [选项] 文件或目录
选项:
d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
cp 是文件或目录用于复制的命令
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制软链接时,把目标文件或目录也建立为软链接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立软链接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
mv 是用来对文件或目录重新命名,或者将文件移动至其他目录
[root@localhost ~]# mv [选项] 源文件 目标文件
选项:
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“ / ”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 24772 1 月 14 18:17 install.log
第一列的权限位如果不计算最后的“.”,则共有 10 位。
第 2~4 位代表文件所有者的权限。
chmod 用来变更文件或目录的权限
[root@localhost ~]# chmod [选项] 权限模式 文件名
选项:
-c, --changes:当文件的权限更改时输出操作信息。
--no-preserve-root:不将'/'特殊化处理,默认选项。
--preserve-root:不能在根目录下递归操作。
-f, --silent, --quiet:抑制多数错误消息的输出。
-v, --verbose:无论文件是否更改了权限,一律输出操作信息。
--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
用户身份
首先,读、写、执行权限对文件和目录的作用是不同的。
目录的可用权限其实只有以下几个。
chown 是修改文件和目录的所有者和所属组的命令
[root@localhost ~]# chown [选项] 所有者:所属组 文件或目录
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对软链接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行
普通用户可以修改所有者是自己的文件的权限
chgrp 是修改文件和目录的所属组的命令
[root@phato ~]# chgrp [选项] 所属组 文件或目录
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-H如果命令行参数是一个通到目录的软链接,则遍历软链接
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-L:遍历每一个遇到的通到目录的软链接
-P:不遍历任何符号链接(默认)
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
umask 是显示或设置创建文件的权限掩码。我们需要先了解一下新建文件和目录的默认最大权限。
我们在这里按照权限字母来讲解 umask 权限的计算方法。我们就按照默认的 umask 值是 022来分别计算一下新建文件和目录的默认权限吧。
㈤ Linux用户如何更改身份
•su - 用于以 root 用户身份创建新 shell •sudo command 用于以 root 用户身份运行 command •要求系统管理员预先配置 • id 用于显示有关当前用户的信息 通常,sudo将提示您输入密码。请求的密码是指您的密码,而不是 root 用户的密码。这是为了防止其他人潜入您的终端并滥用您的sudo权限。 鉴于所有这些可更改您的身份的选项,能够查看您是谁以及您所在的组将变得非常有用。可以通过 id 命令实现这一目的。该命令可以识别SELinux,而且会显示将分配到您所创建的过程的默认SELinux上下文。
㈥ LINUX系统管理的人民邮电出版社最新出版图书
书名Linux系统管理
丛 书 名--
标准书号ISBN 978-7-115-27356-7
编目分类TP316.89
作者董良 宁方明 主编
译者--
责任编辑刘博
开本16 开
印张22.25
字数581 千字
页数344 页
装帧平装
版次第1版第1次
初版时间2012年3月
本 印 次2012年3月
首 印 数-- 册
定价43.00 元 本书内容详尽、实例丰富、结构清晰、通俗易懂,使用了大量的截图进行讲解和说明,对重点操作给出了详细的操作步骤,便于读者学习和查阅,具有很强的实用性和参考性。
本书不仅可以作为高等院校相关专业的授课教材,还可以作为RHCSA(红帽认证系统管理员)的培训教材,同时也可供广大Linux的爱好者自学使用。 第1部分Linux的基础知识
第1章Linux概述2
1.1Linux简介2
1.1.1Linux系统的产生2
1.1.2Linux系统发展历程3
1.1.3Linux系统的应用4
1.2Linux的特点和组成5
1.2.1Linux特点5
1.2.2Linux系统的组成6
1.2.3Linux与其他操作系统的区别6
1.3Linux的版本介绍8
1.3.1Linux内核的版本8
1.3.2Linux发行版本10
1.3.3RedHat Enterprise Linux 6.0简介12
第2章Linux系统的安装18
2.1通过Anaconda进行图形安装18
2.1.1使用Anaconda安装18
2.1.2获取Linux的安装软件18
2.1.3确定安装硬件19
2.1.4启动Anaconda安装程序20
2.2安装后的初始化配置26
2.3使用KickStart进行自动安装30
2.3.1KickStart介绍30
2.3.2产生KickStart配置文件31
2.3.3开始自动安装33
2.3.4KickStart文件的实例34
2.4PXE网络安装35
第3章X Window图形用户界面和应用软件40
3.1X Window简介40
3.1.1X Window工作原理40
3.1.2X Window桌面环境41
3.2GNOME桌面环境41
3.2.1桌面与系统面板41
3.2.2Nautilus文件管理器43
3.2.3GNOME首选项44
3.2.4GNOME系统设置45
3.2.5登录窗口切换46
3.3Linux下的常用应用软件47
3.3.1OpenOffice简介47
3.3.2图像处理软件GIMP49
3.3.3看图软件Gwenview50
3.3.4文件查看器Document Viewer50
3.3.5网页浏览器FireFox51
3.3.6电影播放机52
第4章Shell的基本应用53
4.1Shell命令概述53
4.1.1Shell简介53
4.1.2Shell的启动54
4.1.3Shell命令格式55
4.1.4常用Shell命令56
4.2Bash的应用61
4.2.1命令补齐61
4.2.2命令历史记录62
4.2.3命令别名63
4.2.4通配符63
4.3正则表达式、管道与重定向64
4.3.1正则表达式64
4.3.2管道与重定向67
4.4文本编辑器vim69
4.4.1vim简介69
4.4.2vim的3种模式70
4.4.3vim的进入与退出71
4.4.4vim的基本操作命令72
4.4.5vim的高级命令76
第2部分Linux的系统管理
第5章用户和组管理80
5.1什么是用户80
5.1.1用户账号文件/etc/passwd80
5.1.2用户影子文件/etc/shadow82
5.1.3组账号文件/etc/group83
5.1.4用户组影子文件/etc/gshadow84
5.2用户管理85
5.2.1添加用户85
5.2.2删除用户87
5.2.3修改用户信息87
5.3组管理87
5.3.1创建用户组87
5.3.2删除用户组88
5.3.3修改用户组信息88
5.4使用用户管理器管理用户和组89
5.4.1启动Red Hat用户管理器89
5.4.2添加用户90
5.4.3修改用户属性90
5.4.4添加用户组91
5.4.5修改用户组属性92
第6章磁盘与文件系统管理93
6.1磁盘的识别与分区93
6.1.1磁盘的分类93
6.1.2磁盘的组成95
6.1.3管理分区97
6.2建立和管理文件系统99
6.2.1管理文件系统99
6.2.2文件系统类型101
6.2.3文件系统结构103
6.3文件系统操作命令104
6.3.1文件与目录操作命令104
6.3.2压缩和解压缩命令106
6.3.3文件和目录权限管理命令111
6.4文件系统的挂载113
6.4.1使用命令行挂载文件系统113
6.4.2永久挂载文件系统116
6.4.3卸载文件系统118
6.5管理交换空间118
6.6磁盘配额121
6.6.1磁盘配额的作用121
6.6.2创建磁盘配额122
第7章逻辑卷管理125
7.1通用LVM概念和术语125
7.1.1LVM简介125
7.1.2LVM基本术语126
7.2建立LVM卷127
7.2.1创建分区127
7.2.2创建物理卷128
7.2.3创建卷组128
7.2.4创建逻辑卷128
7.2.5创建文件系统129
7.2.6挂载文件系统129
7.3管理LVM卷130
7.3.1卸载卷130
7.3.2查看卷信息130
7.3.3调整LVM卷132
7.4LVM高级应用134
7.4.1卷快照134
7.4.2移动卷136
7.5LVM图形化管理工具138
7.5.1管理物理卷138
7.5.2管理与配置逻辑卷139
第8章进程管理142
8.1什么是进程142
8.1.1进程的概念142
8.1.2进程的状态142
8.1.3进程的类型143
8.2进程管理143
8.2.1启动进程143
8.2.2管理进程144
8.2.3终止进程148
8.2.4桌面环境下管理进程149
8.3系统监视工具150
8.3.1桌面环境下监视系统150
8.3.2系统监视命令151
8.4计划任务152
8.4.1一次性计划任务——at调度152
8.4.2周期性计划任务——cron调度153
第9章软件管理155
9.1使用YUM155
9.1.1Linux下的可执行文件155
9.1.2传统管理软件的方法156
9.1.3RPM156
9.1.4YUM157
9.2安装RPM软件164
9.2.1RPM的介绍164
9.2.2RPM软件包文件165
9.2.3RPM命令166
9.3源代码安装170
9.3.1获得软件170
9.3.2编译前的准备工作171
9.3.3开始编译173
9.3.4安装与部署174
9.4软件包管理175
9.4.1启用软件包管理工具175
9.4.2查看软件175
9.4.3安装与卸载软件177
第10章服务的管理178
10.1管理服务178
10.1.1服务的介绍178
10.1.2服务的启动管理179
10.2服务的可用性181
10.2.1设置独立服务的开机启用181
10.2.2使用chkconfig管理服务启动182
10.3服务管理工具183
10.3.1ntsysv183
10.3.2服务设置184
第3部分Linux的网络配置
第11章网络基础188
11.1网络配置基础188
11.2网络的基本配置193
11.2.1基本配置193
11.2.2高级配置194
11.3系统网络配置文件195
11.4网络设置工具197
11.4.1设置主机名称命令hostname197
11.4.2配置网络接口命令ifconfig197
11.4.3设置路由命令route199
11.4.4检查网络状况命令netstat199
11.4.5ping命令201
11.4.6nslookup命令202
11.4.7traceroute命令203
第12章访问网络文件共享服务204
12.1网络文件系统NFS204
12.1.1NFS服务简介204
12.1.2配置NFS服务205
12.1.3NFS服务配置实例206
12.2SMB/CIFS通用网络文件系统207
12.2.1Samba服务概述207
12.2.2配置Samba208
12.2.3创建Samba服务器209
12.3自动挂载网络存储服务213
12.3.1自动挂载(autofs)服务概述213
12.3.2配置autofs服务213
12.3.3autofs服务配置实例215
第13章管理常用网络服务217
13.1管理NTP服务217
13.1.1NTP服务简介217
13.1.2配置NTP服务218
13.1.3NTP的创建实例219
13.2管理CUPS打印服务220
13.2.1CUPS的介绍220
13.2.2CUPS的组件221
13.2.3管理CUPS服务222
13.3管理SSH服务224
13.3.1SSH服务简介224
13.3.2配置SSH服务225
13.3.3SSH的管理226
13.4管理VNC服务228
13.4.1VNC概述228
13.4.2配置VNC服务229
13.3.3VNC的创建实例230
第14章常用网络服务器配置233
14.1Web服务配置233
14.1.1Apache服务器233
14.1.2配置Apache服务器234
14.1.3创建Apache服务器235
14.2ftp服务配置236
14.2.1FTP服务器概述236
14.2.2配置vsftpd237
14.2.3创建FTP服务器237
14.3DNS服务配置238
14.3.1DNS介绍238
14.3.2DNS配置文件239
14.3.3创建DNS服务器242
14.3.4DNS测试命令244
14.4DHCP服务配置245
14.4.1DHCP服务器介绍245
14.4.2配置DHCP服务245
14.4.3创建DHCP服务器247
14.5Mail服务配置248
14.5.1SMTP服务器介绍248
14.5.2配置postfix服务248
14.5.3创建postfix服务器250
第4部分Linux的安全设置
第15章Linux安全设置254
15.1文件的安全设置ACL254
15.1.1什么是ACL254
15.1.2配置使用ACL255
15.1.3ACL配置实例255
15.1.4文件系统的特殊权限:SUID/SGID/Sticky Bit257
15.2磁盘的安全加密259
15.2.1通过加密分区启用数据保密259
15.2.2使用图形工具加密分区261
15.3日志管理263
15.3.1日志系统概述264
15.3.2管理日志服务265
15.3.3日志的格式267
15.3.4集中式日志服务267
第16章LDAP网络用户配置269
16.1LDAP简介269
16.1.1LDAP的特性269
16.1.2常用名称解释270
16.1.3OpenLDAP介绍270
16.2建立LDAP域服务器271
16.2.1安装软件包271
16.2.2配置LDAP服务器271
16.2.3初始化LDAP数据库272
16.2.4启动LDAP服务273
16.3使用LDAP服务器进行网络身份认证274
16.3.1准备工作274
16.3.2加入LDAP域275
16.4网络挂载主目录276
第17章防火墙基本设置278
17.1Linux下防火墙的基本设置278
17.1.1Linux防火墙概述278
17.1.2iptables防火墙内核模块280
17.1.3iptables命令格式281
17.2主机防火墙283
17.2.1iptables防火墙的运行与管理283
17.2.2管理主机防火墙规则285
17.2.3常用的主机防火墙规则286
17.2.4使用图形界面管理主机防火墙规则287
17.3NAT网络地址转换289
17.3.1NAT简介289
17.3.2使用iptables配置源NAT290
17.3.3使用iptables配置目的NAT291
第18章管理SELinux294
18.1基本SELinux安全性概念294
18.1.1SELinux介绍294
18.1.2SELinux的优点294
18.1.3SELinux的词汇295
18.1.4SELinux初始化过程296
18.2SELinux模式297
18.2.1SELinux两种状态297
18.2.2查看SELinux的状态298
18.2.3改变SELinux的状态298
18.2.4手工修改SELinux模式300
18.3SELinux上下文300
18.3.1安全上下文的格式300
18.3.2查看对象的安全上下文301
18.3.3修改对象的安全上下文301
18.3.4安全上下文与程序控制302
18.4SELinux布尔值303
18.4.1查看SELinux布尔值303
18.4.2修改SELinux布尔值304
18.4.3SELinux布尔值访问实例304
18.5监控SELinux冲突305
第5部分Linux系统的故障排除
第19章Linux引导过程与内核管理310
19.1引导过程310
19.1.1BIOS310
19.1.2启动加载程序311
19.1.3载入内核311
19.1.4执行init进程312
19.1.5初始化系统环境312
19.1.6建立用户接口314
19.2运行级别Runlevel315
19.2.1Runlevel315
19.2.2查看与切换Runlevel317
19.2.3管理init服务317
19.3GRUB的更改319
19.3.1关于GRUB的简介319
19.3.2使用GRUB319
19.3.3配置GRUB321
19.4内核管理322
19.4.1内核的版本323
19.4.2内核的组件323
19.4.3升级内核324
19.5内核模块管理326
19.5.1内核模块的位置326
19.5.2查看模块信息327
19.5.3查看已加载模块328
19.5.4自动加载模块328
19.6配置内核参数329
19.6.1/proc目录329
19.6.2使用sysctl修改内核参数332
19.6.3修改GRUB修改内核参数333
第20章系统恢复与故障排除335
20.1系统故障排除基础335
20.1.1故障排除的基本原则335
20.1.2故障排除的常用方法336
20.1.3故障排除的技巧336
20.2修复引导问题337
20.2.1系统的启动过程337
20.2.2单用户模式338
20.3救援模式341
20.3.1救援模式介绍341
20.3.2启动救援模式341
20.3.3切换硬盘环境344
㈦ linux中使用screen实现用多用户登入是屏幕共享
如果您的系统引导进入文本模式(为了降低服务开销,服务器通常是这样配置的),那么您在以文本形式登录后就已经在终端中了。在典型的 Linux 系统中,通过组合键 Ctrl + Alt + (F1 - F6) 您可以切换到另外的终端。每一个终端是系统中一个完全独立的会话,不同的用户可以同时使用。
这一多终端的特点与 Windows 中的多桌面不同。在 Linux 中,每一个终端可以分别由完全不同的用户来控制。例如,您可能在终端 1 中以 root身份登录,而在终端 2 中以 joeuser 身份登录。两个终端在各自的用户空间中运行不同的程序。与此类似,不同的用户可以远程登录到同一个 Windows 系统中。就这一点来说,Linux 更像是主机而不是简单的服务器或工作站。
如果您是在图形模式下,那么您可以打开一个 虚拟终端 (terminal)以进入终端窗口。通常在桌面的任务条上会有终端的按钮。您也可以从上下文菜单(在桌面上单击右键)打开终端 。
㈧ CPU的运算核心是不是内核
内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。我们将操作系统的代码分成2部分。内核所在的地址空间称作内核空间。而在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和界面操作。外部管理程序与用户进程所占据的地址空间称为外部空间。通常,一个程序会跨越两个空间。当执行到内河空间的一段代码时,我们称程序处于内核态,而当程序执行到外部空间代码时,我们称程序处于用户态。
从UNIX起,人们开始用高级语言(UNIX上最具有代表性的就是UNIX的系统级语言C语言)编写内核代码,使得内核具有良好的扩展性。单一内核(monolithic kernel)是当时操作系统的主流,操作系统中所有的系统相关功能都被封装在内核中,它们与外部程序处于不同的内存地址空间中,并通过各种方式(在Intel IA-32体系中采用386保护模式)防止 外部程序直接访问内核结构。程序只有通过一套称作系统调用(system call)的界面访问内核结构。近些年来,微内核(micro kernel)结构逐渐流行起来,成为操作系统的主要潮流。1986年,Tanenbaum提出Mach kernel,而后,他的minix和GNU的Hurd操作系统更是微内核系统的典范。
在微内核结构中,操作系统的内核只需要提供最基本、最核心的一部分操作(比如创建和删除任务、内存管理、中断管理等)即可,而其他的管理程序(如文件系统、网络协议栈等)则尽可能的放在内核之外。这些外部程序可以独立运行,并对外部用户程序提供操作系统服务,服务之间使用进程间通信机制(IPC)进行交互,只在需要内核的协助时,才通过一套接口对内核发出调用请求。
微内核系统的优点时操作系统具有良好的灵活性。它使得操作系统内部结构简单清晰。程序代码的维护非常之方便。但是也有不足之处。微内核系统由于核心态只实现了最基本的系统操作,这样内核以外的外部程序之间由于独立运行使得系统难以进行良好的整体优化。另外,进程间互相通信的开销也较单一内核系统要大许多。从整体上看,在当前的硬件条件下,微内核在效率上的损失小于其在结构上获得的收益,故而选取微内核成为操作系统的一大潮流。
然而,Linux系统却恰恰使用了单一内核结构。这是由于Linux是一个实用主义的操作系统。Linux Tovarlds以代码执行效率为自己操作系统的第一要务,并没有进行过一个系统的设计工作,而是任由Linux在使用中不断发展。在这样的发展过程中,参与Linux开发的程序员大多为世界各地的黑客们。比起结构的清晰,他们更加注重功能的强大和高效的代码。于是,他们将大量的精力放在优化代码上,而这样的全局性优化必然以丧失结构精简为代价,导致Linux中的每个部件都不能轻易被拆除。否则必然破坏整体效率。
虽然Linux是单一内核体系,但是它与传统的单一内核UNIX操作系统不同。在普通的单一内核系统中,所有的内核代码都是被静态编译联入的,而在Linux中,可以动态装入和卸载内河中的部分代码。Linux将这些代码段称为模块。(mole),并对模块给予了强有力的支持。在Linux中,可以在需要时自动装入和卸载模块。
Linux不支持用户态线程。在用户态中,Linux认为线程就是共享上下文(Context)的进程。Linux通过LWP(light weight thread)的机制来实现用户态线程的概念。通过系统调用clone()创建新的线程。
Linux的内核为非抢占式的。即,Linux不能通过改变优先权来影响内核当前的执行流程。因此,Linux在实现实时操作时就有问题。Linux并不是一个“硬”实时操作系统。
在Linux内核中,包括了进程管理(process management)、定时器(timer)、中断管理(interrupt management)、内存管理(memory management)、模块管理(mole management)、虚拟文件系统接口(VFS layer)、文件系统(file system)、设备驱动程序(device driver)、进程间通信(inter-process communication)、网络管理(network management)、系统启动(system init)等操作系统功能的实现。
㈨ linux调度是基于进程还是线程
在LINUX系统之中,被调度的应该是进程。因为只有进程才拥有一个独立的上下文环境,是分配系统资源的最小单位……而线程在SMP体系中加速了执行的效率……
在LINUX之中,线程也可称作轻量级进程,它能享有自己的堆栈,线程ID等独立资源,但大多还是要依赖其创建进程,比如地址空间,信号,文件句柄……
㈩ LINUX的上下文是什么意思
当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。