日期:2014-05-16  浏览次数:20608 次

「学习笔记——Linux」Linux程序管理与SELinux初探

Linux程序管理与SELinux初探

Table of Contents

  • 1 什么是程序
  • 2 工作管理(job control)
  • 3 程序管理
  • 4 特殊文件与程序
  • 5 SELinux初探

1 什么是程序

  • 程序文件:通常以二进制文件的形式存放在储存介质中
  • 程序与权限:程序被执行时,执行者的权限与属性,程序的代码,(二进制文件内容)等数据会被操作系统加载到内存中, 操作系统给予这个内存中的单元一个标识符(PID)。
  • 子程序与父程序:登录系统后会取得一个shell,例如bash程序。在这个bash中启动另一个bash,新启动的bash即是原来bash 的子程序,原来的bash是新bash的父程序。可以通过Parent PID(PPID)得知一个程序的父程序。 下面来看一个例子:
    minix007:~$ ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000  7538  7530  5  80   0 -  2315 wait   pts/1    00:00:00 bash
    0 R  1000  7598  7538  0  80   0 -  1177 -      pts/1    00:00:00 ps
    minix007:~$ bash
    minix007:~$ ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000  7538  7530  0  80   0 -  2315 wait   pts/1    00:00:00 bash
    0 S  1000  7599  7538  9  80   0 -  2316 wait   pts/1    00:00:00 bash
    0 R  1000  7655  7599  0  80   0 -  1177 -      pts/1    00:00:00 ps
    

    第一次输入ps -l,发现两个程序,第一个bash是我们正在使用的shell,PID为7538,第二个为ps,是我们刚刚在这个 shell中启动的程序,可以看到ps的PPID是7538,即其父程序PID为7538。 第二个命令启动了另一个bash,可以看到此bash的PID为7599。其PPID为7538,即正在使用的shell的PID 第三个命令启动了ps程序,可以看到这个ps程序的PPID为7599,即其父程序为刚刚启动的bash。

  • fork and exec 程序的启动过程:先由父程序fork一个一模一样的子程序,此子程序再以exec的方式执行真正要执行的程序
  • 常驻内存的程序: 平时执行的命令,如ls,执行一次就完了,但是有些程序需要一直执行,比如检测程序,这些程序就 常驻在内存。
  • Linux的多人多任务环境 Linux可以供多人同时登录系统,并且互不干扰,每个人像是在独立地使用计算机。Linux中默认提供了六个命令行终端和 一个图形终端:tty1~tty7。其中tty7是图形终端。Ubuntu中可以通过Ctrl+Alt+F1~F7切换这7个终端。当一个终端中程序 死掉时,可以切换到其它终端,用ps -aux查看哪个程序出错,然后kill掉.

2 工作管理(job control)

  • 将程序放入后台执行
    • 为什么:如果一个程序执行时间很长,我们在shell中执行它,就要等待它执行完以后才能输入下一个命令,Linux是多 任务的操作系统,这样一来,就变成了一个命令一个命令地执行,为了执行一个程序的同时可以继续使用终端,可以将 程序放入后台执行,这样一来就不影响终端在前台的使用。
    • 怎么做:可以在要执行的程序命令后加上 & 符号,例如:
      tar -jcv -f tctar.tar.bz2 t.c &
      
    • 注意:后台执行的程序不能和用户交互,不能用ctrl+c中断。在vim中输入Ctrl+Z可以将vim暂时调入后台,从而可在 前台执行命令,又不退出vim。
  • 观察后台程序状态: jobs
    $ jobs
    [1]+  Stopped                 vim t.c
    $ jobs -l
    [1]+  8705 Stopped                 vim t.c
    
  • 将后台程序调入前台执行:fg %num # num是job的id号
    $ fg %1
    vim t.c
    
  • 将后台程序暂停与恢复执行
    • Ctrl+z:暂停
    • bg %num:恢复后台中暂停的程序
  • 将程序停止或重启:kill
    $ kill -9 %1  #强制移除1号job
    
  • 脱机时仍然执行:nohup