在 Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。
也就是说在LINUX系统中有一个重要的概念:一切都是文件。
Linux支持的5种文件类型:
文件类型 | 描述 | 示例 |
---|---|---|
普通文件 | 用来在辅助设备(如磁盘)上存储信息和数据 | 包含程序源代码、可执行程序、图片、声音、图像等 |
目录文件 | 用于表示和管理系统中的文件,目录文件中包含一些文件名和子目录名 | /root、/home |
链接文件 | 用于不同目录下文件的共享 | 当创建一个已存在文件的符号链接时,系统就创建一个链接文件,这个链接文件指向已存在的文件 |
设备文件 | 用来访问硬件设备 | 包括键盘、硬盘、光驱、打印机等 |
命名管道(FIFO) | 是一种特殊类型的文件、Linux系统下,进程之间通信可以通过该文件完成 |
运行级别就是操作系统当前正在运行的功能级别。
级别是从0
到6
,具有不同的功能。这些级别定义在/ect/inittab
文件中。
这个文件是init
程序寻找的主要文件,最先运行的服务是那些放在/ect/rc.d
目录下的文件。
Linux
下的7个运行级别:
0
: 系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。1
: 单用户工作状态,root
权限,用于系统维护,禁止远程登陆,就像Windows
下的安全模式登录。2
: 多用户状态,没有NFS
支持。3
: 完整的多用户模式,有NFS
,登陆后进入控制台命令行模式。4
: 系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。5
: X11
控制台,登陆后进入图形GUI
模式,XWindow
系统。标准的Linux运行级别为5或者3
总结:
/etc/rc.d/init.d
下有许多服务器脚本程序,一般称为服务(service)
/etc/rc.d
下有7个名为rcN.d
的目录,对应系统的7个运行级别rcN.d
目录下都是一些符号链接文件,这些链接文件都指向init.d
目录下的service
脚本文件,命名规则为K+nn+
服务名或S+nn+
服务名,其中nn
为两位数字。K(Kill)
开头的文件,系统将终止对应的服;对于以S(Start)
开头的文件,系统将启动对应的服务runlevel
init N
,如果init 3
则进入终端模式,init 5
则又登录图形GUI
模式init 0
为关机,init 6
为重启系统 标准的Linux
运行级别为3或5,如果是3的话,系统就在多用户状态;如果是5的话,则是运行着XWindow
系统。不同的运行级别有不同的用处,也应该根据自己的不同情形来设置。例如,如果丢失了root
口令,那么可以让机器启动进入单用户状态来设置。在启动后的lilo
提示符下输入: init=/bin/shrw
这样就可以使机器进入运行级别1,并把root
文件系统挂为读写。它会路过所有系统认证,让你使用passwd
程序来改变root
口令,然后启动到一个新的运行级。
Linux
中进程有哪几种状态?在 ps
显示出来的信息中,分别用什么符号表示的?
SIGSTOP
信号,它就会因响应该信号 而进入 TASK_STOPPED
状态;当进程正在被跟踪时,它处于 TASK_TRACED
这个特殊的状态。“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作;run_queue
队列里的状态;run_queue
队列里的状态; socket
连接、等待信号量),而被挂起;zombie
状态(僵尸):父亲没有通过 wait
系列的系统调用会顺便将子进程的尸体(task_struct)
也释放掉;符号:
一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
孤儿进程将被 init 进程(进程号为 1)所收养,并由 init
进程对它们完成状态收集工作。
由于孤儿进程会被 init
进程收养,所以孤儿进程不会对系统造成危害。
一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait()
或 waitpid()
获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait()
或 waitpid()
,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。
僵尸进程通过 ps
命令显示出来的状态为 Z(zombie)
。
系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。
要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时所有的僵尸进程就会变成孤儿进程,从而被 init
所收养,这样 init
就会释放所有的僵死进程所占有的资源,从而结束僵尸进程。
kill -9
发送SIGKILL
信号给进程,将其终止,但对于以下两种情况不适用
STAT z
),此时进程已经释放所有的资源,但是没有被父进程释放。僵尸进程要等到父进程结束,或者重启系统才可以被释放。kill
只能杀死处于用户状态的进程。
kill -l
查看可用的信号(15是TERM,即终止信号)。
只有第9种信号(SIGKILL
)才可以无条件终止进程,其他信号进程都有权利忽略。
下面是常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
内核负责管理四个方面:
Linux
大部分操作都是发生在用户空间。id
来管理用户的。最关键的是root
用户,意思超级用户,他不受各种权限限制,可以终止其他用户进程,读取系统中的任何文件。进程管理涉及进程的启动、暂停、恢复与终止。一个进程让出CPU
使用权给另一个进程称为CPU
的上下文切换。
内核是在上下文切换的时间段间隙中运行。
通常设备只能在内核模式中被访问,如用户进程请求内核关闭系统电源。