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

Linux程序管理与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
    $ nohup ./foo.sh &
    

    此时,即使你注销,系统仍然会执行foo.sh程序

3 程序管理

  • 程序观察
    • ps -l :观察自己bash中的程序
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      0 S  1000  8594  8583  0  80   0 -  2318 wait   pts/1    00:00:00 bash
      0 T  1000  8828  8594  0  80   0 - 12020 signal pts/1    00:00:00 vim
      0 R  1000  8877  8594  0  80   0 -  1177 -      pts/1    00:00:00 ps
      
      • F:程序权限
      • S:程序状态
        • R:运行态,S:睡眠态,可唤醒,D:不可唤醒的睡眠态,如等待I/O
        • T:停止态,Z:僵尸态,程序已经终止但无法被移出内存
      • UID:启动程序的用户的ID
      • PID:程序标识
      • PPID:父程序标识
      • C:cpu使用率
      • PRI/NI:与优先级有关
      • ADDR/SZ/WCHAN:与内存有关,ADDR:内存哪个部分,SZ:占用内存大小,WCHAN:运行状态,-表示正在运行
      • TTY:登录的终端位置
      • TIME:使用掉的CPU时间
      • CMD:使用的命令
    • ps aux:观察系统中所有运行的程序
      USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      minix007    8828  0.0  0.2  48080  8568 pts/1    Tl   21:29   0:00 vim t.c
      root        8988  0.6  0.0      0     0 ?        S    21:40   0:03 [kworker/1:2]
      root        9045  0.2  0.0      0     0 ?        S    21:45   0:00 [kworker/1:1]
      minix007    9100  0.0  0.0   4948  1176 pts/1    R+   21:49   0:00 ps aux
      
      • VSZ:该程序占用的虚拟内存量
      • RSS:该程序占用的固定内存量
    • top:动态观察程序变化
      Tasks: 193 total,   2 running, 189 sleeping,   1 stopped,   1 zombie
      Cpu(s):  0.5%us,  1.8%sy,  0.0%ni, 97.6%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
      Mem:   3962820k total,  3283620k used,   679200k free,   400800k buffers
      Swap:  3905532k total,        0k used,  3905532k free,  1915036k cached
      
        PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND              
       9156 root      20   0     0    0    0 R    4  0.0   0:00.21 kworker/0:1          
       1900 minix007  20   0  247m  71m  32m S    3  1.8  15:53.01 compiz               
       1089 root      20   0  126m  65m 8904 S    1  1.7   7:30.94 Xorg                 
         18 root      20   0     0    0    0 S    1  0.0   0:44.87 kworker/3:0          
       1969 minix007  20   0  113m  20m  10m S    0  0.5   1:06.10 unity-panel-ser      
       6651 minix007  20   0  268m  26m 8880 S    0  0.7   0:53.59 chrome               
      
      • 操作:按P按CPU使用率排序,按M按内存使用率排序,按r修改NI值,按h帮助,按q退出。
    • pstree:显示程序树,可以看到程序之间的关系。
  • 程序管理
    • 基本原理:可以通过发送给程序一个信号,告诉程序你想让它做什么。这些信号包括SIGNUP(重新启动), SIGINT(相当于ctrl+c)等等,可用man 7 signal查询详细信息。
    • 基本方式
      • kill -signal PID
      • killall processName
        • killall emacs
  • 程序执行的优先级
    • priority(PRI):PRI越低表示越优先,由内核动态调整,用户无法改变
    • nice
      • PRI(new) = PRI(old) + nice,所以可以通过nice值调整PRI,但并不是修改后就能生效,系统还要去分析判断。
      • nice值设定方式
        • 方式一:启动程序时,用 nice -n command 设定,n为nice值,范围-20~19
        • 方式二:程序已经启动,用 renice [number] PID 设定
  • 系统资源观察
    • free: 观察内存
      $ free
                   total       used       free     shared    buffers     cached
      Mem:       3962820    2067520    1895300          0     379912     925868
      -/+ buffers/cache:     761740    3201080
      Swap:      3905532          0    3905532
      
    • uname: 查看系统和内核信息(eg: uname -a)
      $ uname -a
      Linux minix007-ubuntu-desktop 3.2.0-37-generic-pae #58-Ubuntu SMP Thu Jan 24 15:51:02 UTC 2013 i686 i686 i386 GNU/Linux
      
    • uptime: 观察系统启动时间和工作负载
      $ uptime
       15:14:15 up  4:31,  2 users,  load average: 0.23, 0.24, 0.23
      
    • netstat: 查看网络状态
      $ netstat -t #列出tcp网络封包数据
      Active Internet connections (w/o servers)
      Proto Recv-Q Send-Q Local Address             Foreign Address         State      
      tcp        1      0 minix007-ubuntu-des:44769 mistletoe.canonica:http CLOSE_WAIT 
      tcp        0      0 minix007-ubuntu-des:37063 112.90.137.192:http     ESTABLISHED
      
    • dmesg: 查看内核产生的信息 开机时,内核会检测硬件信息,运行中,内核也会产生一些信息,这些信息被放在内存中一个受保护的区域,使用 dmesg可以得到这些信息。
    • vmstat: 侦测系统资源变化
      $ vmstat 1 3 #统计系统状态,每秒1次,共3次
      procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
       1  0      0 1889048 380780 929772    0    0    17    14  160  286  2  2 96  1
       2  0      0 1889172 380780 929772    0    0     0     0  435  788  1  1 99  0
       2  0      0 1889164 380780 929772    0    0     0     0  428  767  1  1 99  0
      

4 特殊文件与程序

这一节讨论的是SUID/SGID/SBIT与程序权限的关系

  • passwd:为什么普通用户执行passwd时拥有了root权限?这是因为执行passwd时,会取得一个新的程序与PID,该PID 产生时通过SUID赋予这个程序相应权限。
  • /proc:内存中运行的程序都以文件或目录的形式存在于/proc目录下。
  • fuser:找出使用指定文件,文件系统,或目录的程序。例如使用umount时发现[device is busy],就可以使用fuser找出哪个程序在使用 文件系统。
  • lsof:找出程序使用的文件
  • pidof:找出正在执行的程序的PID
    $ pidof emacs
    7021
    

5 SELinux初探

SELinux是什么:Security Enhanced Linux,安全强化的Linux。SELinux是在进行程序,档案等细部权限设定 依据的一个核心模块。

转载于:https://www.cnblogs.com/Iambda/archive/2013/02/19/3933503.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值