linux基础知识回顾

Linux基础:启动流程

##0. 启动流程一览
我们先给出 Linux 启动流程的总览图,然后再每一个模块展开说明。

1. BIOS

当我们按下电源按键后,计算机硬件会自动读取主板上的BIOS(Basic Input/Output System)来加载硬件信息以及硬件系统的自我测试。BIOS也是一套程序,它知道如何与硬件进行交互。BIOS首先会对硬件进行检查,判断计算机硬件是否能满足运行的基本条件,这叫做“硬件自检”(Power-On Self-Test,简称 POST)。

硬件自检后,BIOS 会将控制权交给下一段启动程序。这时,BIOS需要知道,”下一阶段的启动程序”具体存放在哪一个设备。也就是说,BIOS需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做”启动顺序”(Boot Sequence)。

因此,BIOS按照”启动顺序”,把控制权转交给排在第一位的存储设备。

2. MBR

系统读取位列第一的可启动存储设备。计算机先读取该设备的第一个扇区,也就是读取最前面的512个字节。这最前面的512个字节,就叫做”主引导记录”(Master boot record,缩写为MBR)。MBR 只有512字节,放不了太多东西,它主要告诉计算机从该设备的哪一个分区(partition)来装载引导加载程序(boot loader)。Boot Loader 储存有操作系统(OS)的相关信息,比如操作系统名称,操作系统内核(kernel)所在位置等。它的主要功能就是加载内核到内存中去执行。常用的 boot loader 有 GRUB 和 LILO 。

那我们经常说到的多操作系统是怎么回事呢?其实每个文件系统(或分区)的最前面会保留一个引导扇区(boot selector),这个引导扇区可以安装 boot loader。这样我们在每个 boot loader 中对应不同的操作系统,在读取 MBR 的时候选择我们需要启动的 boot loader 即可。

3. kernel

随后,boot loader 会帮助我们加载内核,内核就会开始检测硬件与加载驱动程序。没错,内核会以自己的功能重新检测一遍硬件,而不一定会使用 BIOS 检测到的硬件信息。也就是说,内核此时才开始接管 BIOS 后的工作。

Kernel 实际上是一个用来操作计算机的程序,它是计算机操作系统的内核,主要的任务是管理计算机的硬件资源,充当软件和硬件的接口。操作系统上的任何操作都要通过 kernel 传达给硬件。

4. init process

在内核加载完毕以后,此时内核会主动调用第一个进程,那就是 /sbin/init,它的作用就是初始化系统环境。使用pstree命令会发现init的进程编号(PID)是1,也就是说init是第一个运行的程序,其他所有进程都从它衍生,都是它的子进程。

许多程序需要开机启动。它们在Windows叫做”服务”(service),在 Linux 就叫做”守护进程”(daemon)。

init 进程的一大任务,就是去运行这些开机启动的程序。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动 Apache,用作桌面就不需要。Linux 允许为不同的场合,分配不同的开机启动程序,这就叫做”运行级别”(run level)。也就是说,启动时根据”运行级别”,确定要运行哪些程序。

基本上,依据有无网络与有无 X Window ,Linux 将 run level 划分为7个等级(0-6)。其中0是关机,1是单用户模式,6是重启。而 2-5,一般来说都是多用户模式。

Linux 在启动各个服务前会先执行一系列的初始脚本(rc.sysinit)。这些脚本执行如下功能:设置计算机名称,时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……
之后会根据运行级别的不同,系统会运行 rc0.d 到 rc6.d 目录中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。rc*.d目录中存放的是该运行级别中需要执行的服务脚本的软链接文件(即快捷方式)。

除此之外,Linux 还会运行一些其他的初始脚本。运行完后,操作系统已经完全准备好了,只是,还没有人可以登录!!!init 会给出登录(login)对话框,或者是图形化的登录界面。

5. login

输入用户名密码登录成功后,系统会为用户分配一个用户 ID(UID),和一个组 ID(GID)。这两个 ID 就好像身份证一样会一直伴随用户,用于检测用户执行程序时的身份验证。

当用户登录成功后,一个完整的操作系统就展现在用户的面前了。哈哈!

总结

结合一开始给出的流程图,Linux 的启动流程可以概括为以下几个主要步骤:

  1. 加载 BIOS 的硬件信息与硬件自检,并依据设置取得第一个可启动的设备;
  2. 读取并执行第一个启动设备内的MBR的 boot loader;
  3. 依据 boot loader 的设置加载内核,内核会开始检测硬件与加载驱动程序;
  4. 在内核 Kernel 加载完毕后,Kernel 会主动调用 init 进程,而 init 会取得 run-level 信息;
  5. init 执行 rc.sysinit 初始化系统的操作环境(网络、时区等);
  6. init 启动 run-level 的各个服务;
  7. 用户登录

要注意在一开始的流程图中 init 虽然只用了一个模块展现出来,但其实在启动过程中 init 占了很大的比重。

参考文献


Linux基础:权限与文件

用户与用户组

Linux 是一个多用户、多任务的系统,常常有多人同时使用一台机工作,为了保护每个人的隐私权,“文件所有者”的角色就显得相当重要了。

当Linux用户登录系统之后,就会携带一个用户身份(User ID,UID)和一个用户组身份(Group ID,GID),相当于自己的名片。当需要访问文件或程序时,刷一下名片就能知道是否能读、写、执行了。

一般来说,Linux的用户信息保存在/etc/passwd中,组信息保存在/etc/group中,文件的每一行代表一个用户/组。早期的Linux将密码以明文的形式保存在/etc/passwd中,而现在则多以暗码(也就是加密之后的形式)的形式保存在/etc/shadow中。将密码存储在/etc/shadow中提高了密码的安全性,因为/etc/passwd允许所有人查看,而/etc/shadow只允许root用户查看。

文件属性

要了解Linux的权限控制就必须学习Linux的文件权限和属性。可以用ls命令查询文件信息($ls -l),得到如下结果:

        
        
$ ls -l ~/ input
总用量 36
drwxrwxr-x 2 wuchong wuchong 4096 710 21: 45 ./
drwxr-xr-x 30 wuchong wuchong 4096 712 08: 58 ../
-rw-rw-r-- 1 wuchong wuchong 46 616 20: 31 a .txt
lrwxrwxrwx 1 wuchong wuchong 4 616 16: 03 b .txt -> a .txt
[ 权限 ][连接数][拥有者][用户组][文件容量][ 修改日期 ] [文件名]

我们以 a.txt 文件为例介绍各个部分的含义:

  1. 第一列代表文件权限。它由十个字符组成。首先介绍第一个字符的-,它表示文件类型,说明 a.txt 是常规文件(如果是目录文件则应显示 d,如果是 l 则是软链接文件)。随后有九个字符,为rw-rw-r--,它们用于表示文件权限。这九个字符分为三组,rw-,rw-r--,分别对应拥有者(owner),所属用户组(owner group)和所有其他人(other)。回顾  Linux 的启动流程,登录后,我们会有一个用户身份和一个组身份, 相当于我的身份证。第一组表示,如果我的身份证上的用户身份证明我是该文件的拥有者,那么我就可以对该文件有读取(r),写入(w)该文件的权限,但不拥有执行(x)该文件的权限。如果不拥有某项权限,会在对应的位置上出现减号(-)。第二组表示,如果我的名片上的组身份证明我所在的组是该文件的所属用户组的一员,那么我有从该文件读入和写入的权限。第三组表示,如果我的名片显示我既不是拥有者,也不是拥有组的一员,那么我只有读入的权限。当我想要进行一个读取操作时,Linux会先看我是否是拥有者。
  2. 第二列代表有多少文件名连接到此节点(i-node)。每个文件都将它的权限和属性记录到文件系统的 inode 中,不过文件名却是存放在目录文件中的。因此会有多个文件名连接到一个 inode 的情况,这就是硬链接,而该列就是指的硬链接数。
  3. 第三列表示这个文件(或目录)的拥有者。
  4. 第四列表示这个文件(或目录)的所属用户组。
  5. 第五列表示这个文件的大小,单位为字节(byte)。其中软链接文件(上面的 b.txt 文件)的大小正好是目标文件的字符数。至于目录也是一种文件,有趣的是大部分目录所占的大小都是 1K、2K、4K 的倍数。
  6. 第六列表示文件的最近修改时间。其实文件属性中还包括创建时间和最近读取时间,只是并未显示出来。
  7. 第七列为该文件的文件名。

改变文件属性和权限

我们已经知道文件权限对于一个系统的重要性了,但如何对文件的属性和权限进行修改呢?这里主要用到三个命令:chgrpchownchmod,分别对应修改用户组、拥有者和文件权限。

  • 改变所属用户组:chgrp

              
              
    $ chgrp 组名 文件或目录
    $ chgrp users a.txt
  • 改变文件所有者:chown

              
              
    $ chown 账号名称 文件或目录
    $ chown 账号名称 :组名 文件或目录
    $ chown root:root a.txt
  • 改变文件权限:chmod
    Linux中的每种身份(own、group、other)拥有一个权限三元组(rwx)。每一个权限组可以用一个三位的二进制来表示,拥有对应权限的则在相应位上置1。例如-rw-rw-r--即代表 664 的意思。如果我们想将该文件改成-rwxrwx---的权限,就将其权限分数改成 770 即可。

              
              
    $ chmod 770 a .txt
    $ ls -l a .txt
    -rwxrwx--- 1 root root 46 616 20: 31 a.txt

默认权限umask

当我们创建文件的时候,比如使用touch,它会尝试将新建文件创建为权限666,也就是 rw-rw-rw-。但操作系统要参照权限 mask 来看是否真正将文件创建为666。权限 mask 表示操作系统不允许设置的权限位,比如说037(—-wxrwx)的权限 mask 意味着不允许设置设置 group 的 wx 位和 other 的 rwx 位。如果是这个权限 mask 的话,最终的文件权限是 rw-r—– ( group 的 w 位和 other 的 rw 位被 mask )。

我们可以通过

        
        
$umask 022

的方式改变权限mask。仅输入umask是查询默认 mask 的意思。

总结

Linux 中的权限管理非常复杂,尤其是涉及进程的时候,有时会有权限的切换。这部分待到以后再说。不过Linux的权限管理都是基于文件的属性和权限的,因此学习了解 Linux 的文件系统非常重要。

参考资料



Linux基础:文件系统

我们知道不同的操作系统所使用的文件系统是不一样的。举例来说,Windows 98 以前所使用的是文件系统是 FAT,Windows 2000 以后的版本有所谓的 NTFS 文件系统。至于 Linux 的正规文件系统则为 Ext2(Linux second extended file system,Ext2fs)。之后又出现了改进版的 Ext3 和 Ext4 ,总体上变化不大。

文件系统的对比

我们经常听说 Windows 需要磁盘碎片整理,而 Linux 却不需要。这是为什么呢?

我们可以先看看 Ext2 文件系统的数据访问方式,如下图所示。



假设一个文件的属性和权限信息是存放在 3 号的 inode 上,而文件的实际数据是存放在 1、4、6、11 这四个 block 中,那么当操作系统要访问该文件时,就能据此来排列磁盘的阅读顺序,可以扫描一次就将 4 个 block 内容读出来。这种访问方式称为索引式文件系统(indexed allocation)。而且 ext 在每两个文件之间都留有相当巨大的空闲空间。当文件被修改、体积增加时,它们通常有足够的空间来扩展。因此在一定程度上保证了 block 的访问范围不会跨度很大,减小了磁头的移动距离。

那 Windows 的文件系统是怎样的呢? 我们以 FAT 为例说明。

在往 FAT 文件系统中存入一个文件时,系统会尽量存放在靠近磁盘开始的地方。当你存入第二个文件时,它会紧挨着第一个文件。当进行频繁的删除修改后,block 就会分散的特别厉害。FAT 文件系统没有 inode 的存在,所以不能一下子将文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中,形成一个 block 链。当我们需要读取文件的时候,就必须一个一个地将 block 读出,例如上图的读出顺序为 1、6、3、12 。这就会导致磁头无法在磁盘转一圈就获得所有数据,有时候需要来回转好几圈才能读取到这个文件,导致文件读取性能极差。这就是 Windows 经常需要碎片整理的原因——使离散的数据汇合在一起

而 NTFS 文件系统虽然智能了一点,在文件周围分配了一些“缓冲”的空间,但经过一段时间的使用后, NTFS 文件系统还是会形成碎片。由于 ext 是索引式文件系统,所以基本上不太需要经常进行磁盘碎片整理。

ext2/ext3 文件系统

我们知道文件数据除了文件的实际内容外,通常还包括非常多的属性,例如 Linux 中的文件权限(rwx)和文件属性(拥有者、用户组、时间、大小等)。ext 文件系统将这两部分存放在不同的块,权限和属性存放在 inode 中,至于文件的实际数据则存放在 block 块中。另外还有一个超级块(super block)会记录整个文件系统的整体系统。每个 inode 和 block 都有自己的编号。

ext 文件系统在格式化的时候基本上是区分为多个块组(block group)的,每个块组都有独立的 inode/block/super block 系统。其整体展示图如下所示:

其中各个块的含义如下:

  • super block:记录此文件系统的整体系统,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统类型等。
  • file system description:文件系统描述说明。描述每个 block group 的开始与结束的 block 号码。
  • block bitmap:块对照表。用来快速寻找可用的 block 块。
  • inode bitmap:inode对照表。用来快速寻找可用的 inode 块。
  • inode table:存放 inode 块的地方。它们是文件系统的关键。记录了文件的属性,一个文件占用一个 inode,同时包含多个指针,指向了属于该文件的各个 data block 块
  • data block:真正存放数据的地方。文件太大会占用多个 block 。

总结

本节主要讲述了 ext2/ext3 与其他文件系统的区别,以及不用磁盘碎片整理的原理。然后对 ext 文件系统的体系结构进行了剖析,说明了各个数据块的意义。重点是了解 inode 和 block 在 Linux 中所扮演的不同角色以及重要意义。

Linux 是一个文件王国,一切都以文件的形式存在。了解Linux的文件系统,是深入了解操作系Linux原理的重要一步。

参考资料


Linux基础:文件管理

在 Linux 下,所有的文件与目录都是由根目录(/)开始的。然后再一个一个分支下来,形成一棵繁杂的树。因此我们也称这种目录配置方式为“目录树”。那目录树与文件系统有什么关系,目录树是怎么实现的呢?

目录

在 Linux 系统中,目录也是一种文件。我们可以使用 $ls -li来查看一个目录的属性。

        
        
$ls -li /home/wuchong
141494 drwxr-xr-x 18 wuchong wuchong 4096 12月 2 2013 hadoop-1.1.1
1715845 drwxrwxr-x 2 wuchong wuchong 4096 7月 12 09:07 input
1718481 -rw-rw-r-- 1 wuchong wuchong 0 7月 12 16:11 test.txt
1718478 -rw-r--r-- 1 root root 1780292 6月 16 19:04 etc.jar.bz2
……

其中-i参数是显示文件的 inode 号。可以看到第一列就是目录/文件的 inode 号。因此 ext 文件系统对于目录也会像对待文件一样分配其 inode 块和 block 块。只不过,在目录中 inode 块记录的是该目录的相关权限与属性以及分配到的 block 块号码,而 block 则记录的是这个目录下的/文件名/与该文件名占用的 inode 号码数据。

没错,在 Linux 中文件的 inode 中是不记录文件名的,文件名是记录在目录的 block 中。因此在新增/删除/重命名文件的时候,与目录的w权限有关。另一个直观的感受就是,你可以对正在使用的文件改名,换目录,甚至放到废纸篓,都不会影响当前文件的使用,这在 Windows 里是无法想象的。比如你打开个 Word 文件,然后对其进行重命名操作,Windows 会告诉你先给我关闭文件!

当我们读取一个文件时,实际上是在目录中找到了这个文件的 inode 编号,然后根据 inode 中的 block 指针,把各个 block 数据块组合起来,放入内存供进一步的处理。当我们写入一个文件时,是分配一个空白inode给该文件,将其inode编号记入该文件所属的目录,然后选取空白的数据块,让inode的指针指像这些数据块,并放入内存中的数据。

硬链接与软链接

当文件出现在一个目录文件中时,我们就把文件接入到文件系统中(在目录中写入该文件的文件名和 inode 号),我们称建立一个到文件的硬链接(hard link)。一个文件允许出现在多个目录中,这样,它就有多个硬链接。当硬链接的数目(link count)降为0时,文件会被 Linux 删除。所以很多时候,unlink 与 remove 在 Linux 操作系统中是一个意思。引入硬链接的目的是为了“安全”,如果你将任何一个“文件名”删除,其实 inode 与 block 都还是存在的。此时可以通过另一个“文件名”来读取到正确的文件数据。此外,不论你使用哪个“文件名”来编辑,最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改。

至于软链接(soft link),其实就是 Windows 上的快捷方式。基本上,软链接就是在创建一个新的独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。由于只是利用文件来作为指向的操作,所以,当源文件被删除后,软链接的文件会打不开。由于软链接(soft link)的广泛使用不会影响 link count,而且可以跨越文件系统,现在较少手动建立硬连接。

创建硬链接与软链接使用 ln 命令即可。

        
        
$ln [-s] 源文件 目标文件
-s : 如果不加任何参数就是硬链接,加上 -s 就是软链接
~$ln -s /etc/crontab .
~$ln /etc/crontab crontab2
~$ ll -i /etc/crontab ~/crontab ~/crontab2
1310870 -rw-r--r-- 2 root root 722 6月 15 2012 /etc/crontab
1310870 -rw-r--r-- 2 root root 722 6月 15 2012 /home/wuchong/crontab2
1718696 lrwxrwxrwx 1 wuchong wuchong 12 7月 12 16:42 /home/wuchong/crontab -> /etc/crontab

可以看到硬链接文件的 inode 是同一个,并且连接数变成了 2。而软链接是一个新的文件,拥有自己的 inode 号。

文件系统管理命令

        
        
$df
列出文件系统的整体磁盘使用量
- h 以人们容易阅读的 GB MB KB 等格式自行显示
- i 不使用硬盘容量,而以 inode 的数量显示
$du file/dir
评估目录所占容量
- h 以人们容易阅读的 GB MB KB 等格式自行显示
- s 仅显示总计,不列出每个子目录的占用容量
- m 以 M 为单位

例如:

        
        
$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 29G 4.2G 23G 16% /
udev 1001M 4.0K 1001M 1% /dev
tmpfs 404M 792K 403M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1009M 152K 1009M 1% /run/shm
none 100M 28K 100M 1% /run/user
$ du -sh /home/wuchong/
1.1G /home/wuchong/

总结

主要概括性总结了目录文件的构成,以及与普通文件之间的关系。讲解了硬链接和软链接,以及 df du 命令。

Linux 是一个文件王国,一切都以文件的形式存在。了解 Linux 的文件系统,是深入了解操作系 Linux 原理的重要一步。

参考资料



Linux基础:进程管理

进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的类型存在。在 Linux 系统当中:触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个 ID,称为 PID,同时根据触发这个进程的用户,给予这个 PID 一组有效的权限设置。

进程是什么样的

程序运行起来后,我们看不到也摸不着。因此 Linux 为我们提供了一系列方便的命名来查看正在运行的进程。首先是 ps 命令,比如 ps -l命令能查看当前 bash 下的相关进程全部信息。如下:

        
        
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 2552 2538 0 80 0 - 1945 wait pts/0 00:00:00 bash
0 S 1000 9352 2552 0 80 0 - 1926 wait pts/0 00:00:00 bash
0 R 1000 9478 9352 0 80 0 - 1598 - pts/0 00:00:00 ps

另外,我们还可以用 pstree 命令来显示整棵进程树。

可以看到这里 init 进程是所有进程的根节点,使用ps命令还能看到 init 的 PID 为 1 。当Linux启动的时候,init 是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。所有其他的进程都是由 init 进程衍生出来的。

父进程 & 子进程

上面提到所谓的“衍生出来的进程”正是 Linux 的父子进程的概念。当我们登录系统后,会取得一个 bash shell,然后我们利用这个 bash 提供的接口去执行另一个命令,例如 bash 或者 ps 等。那些另外执行的命令也会被触发成为 PID,那个后来执行的命令产生的 PID 就是“子进程”,而原本的 bash 环境下,就称为“父进程”了。

老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。一个进程除了有一个PID之外,还会有一个PPID(parent PID)来存储的父进程 PID。如果我们循着 PPID 不断向上追溯的话,总会发现其源头是 init 进程。所以说,所有的进程也构成一个以 init 为根的树状结构。

我们使用 ps -o 命令来看一看现有的进程。

        
        
$ ps -o pid,ppid,comm
PID PPID COMMAND
2552 2538 bash
9352 2552 bash
9625 9352 ps

我所做的操作是在原来的 bash shell 中执行了 bash 命令,然后又执行了 ps 命令。我们可以看到,第二个进程 bash 是第一个进程 bash 的子进程,而第三个进程ps是第二个进程的子进程。

fork & exec

当计算机开机的时候,内核(kernel)只建立了一个 init 进程。Linux kernel 并不提供直接建立新进程的系统调用。剩下的所有进程都是 init 进程通过 fork 机制建立的。新的进程要通过老的进程复制自身得到,这就是 fork。fork 是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (内存空间,包含栈、堆、全局静态区、文本常量区、程序代码区)。当一个程序调用 fork 的时候,实际上就是将上面的内存空间,又复制出来一个,构成一个新的进程,并在内核中为该进程创建新的附加信息 (比如新的 PID,而 PPID 为原进程的 PID)。此后,两个进程分别地继续运行下去。新的进程和原有进程有相同的运行状态(相同的变量值,相同的指令…)。我们只能通过进程的附加信息来区分两者。
程序调用 exec 的时候,进程清空自身的内存空间,并根据新的程序文件重建程序代码、文本常量、全局静态、堆和栈(此时堆和栈大小都为 0),并开始运行。

工作管理

这个工作管理(job control)是用在 bash 环境下的,也就是说,当我们登录系统取得 bash shell 之后,在单一终端机下可以同时进行多个工作的行为管理。

假如我们只有一个终端,因此在可以出现提示符让你操作的环境就成为前台(foreground),至于其他工作就可以放在后台(background)去暂停或运行。

工作管理的意义在于将多个工作囊括在一个终端,并取其中的一个工作作为前台,来直接接收该终端的输入输出以及终端信号。 其他工作在后台运行。

  • 直接将命令丢到后台执行:&

              
              
    $ping localhost > log &

    此时终端显示:

              
              
    [ 1] 9800

    括号中的 1 表示工作号,而 9800 为 PID

  • 将目前的工作丢到后台中“暂停”: [ctrl]+z

              
              
    $vim ~/.bashrc

    在vim的普通模式下,按下[ctrl]+z的组合键

              
              
    [2]+ 已停止 vim ~/.bashrc
  • 查看目前的后台工作状态:jobs
    其各个参数的含义如下
    -l :同时列出PID的号码
    -r:仅列出正在后台run的工作
    -s:仅列出在后台stop的工作

    例如我们执行

              
              
    $ jobs -l
    [ 1]- 9800 运行中 ping localhost > log &
    [ 2]+ 9905 停止 vim ~/.bashrc

    能看到目前有多少个工作在后台中,并且能看到这些工作的 PID。紧跟在 job number 后面的 + 代表最近放到后台的工作,- 代表最近最后第二个放到后台的工作,直接执行fg的话会先取+

  • 将后台工作拿到前台来处理:fg %jobnumber

              
              
    $cat > log &
    $fg %1

    当我们运行第一个命令后,由于工作在后台,我们无法对命令进行输入,直到我们将工作带入前台,才能向 cat 命令输入。在输入完成后,按下 CTRL+D 来通知 shell 输入结束。

  • 让工作在后台下的状态变成运行中:bg %jobnumber

  • 管理后台工作中的工作:kill
    信号可以通过 kill 传递给进程,信号值以下三个比较重要。
    -1 重新加载 (SIGHUP)
    -9 立刻删除 (SIGKILL)
    -15 正常终止(SIGTERM)

    可以使用 

              
              
    $kill -SIGTERM 9800

    或者

              
              
    $kill -15 %1

    的方式来发送给工作。上面的两个命令,一个是发送给信号给 PID 9800 ,一个是发送信号值给工作号1,两者等价。

  • 监控进程的变化:top
    top 是一个很不错的程序查看工具,但不同于 ps 的静态结果输出,top 可以持续监测整个系统的进程工作状态,而且功能非常丰富,可以在 top 中输入?查看更多功能按键。常用的有 P 以CPU使用资源排序,M以物理内存使用排序。

    常用的参数有 -d 可以修改进程界面更新的秒数,-p可以指定某些个 PID 来进行查看监测。




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值