鸟哥的Linux基础篇整理---6

来源:互联网 发布:multisim连线优化 编辑:程序博客网 时间:2024/05/21 04:21
1、查看进程信息。
     ps命令: 将某个时间点的进程运作情况撷取下来。Process Status
     选项与参数:
           -A :所有的 process 均显示出来,与 -e 具有同样的效用;
           -a :不与 terminal 有关的所有 process ;
           -u :有效使用者 (effective user) 相关的 process ;
    x:通常与 a 这个参数一起使用,可列出较完整信息。
输出格式规划:
       l :较长、较详细的将该 PID 的的信息列出; (比较常用)
       j :工作的格式 (jobs format)
      -f :做一个更为完整的输出
显示目前所有的正在内存当中的进程:: ps aux (带不带风格不同)
  1. xp022430@cnbjlx24729:~/Desktop$ ps -aux
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  3. root 1 0.0 0.0 31764 2324 ? Ss Jun01 0:01 /sbin/init
  4. root 2 0.0 0.0 0 0 ? S Jun01 0:00 [kthreadd]
  5. root 3 0.0 0.0 0 0 ? S Jun01 0:20 [ksoftirqd/0]
  6. root 5 0.0 0.0 0 0 ? S< Jun01 0:00 [kworker/0:0H]
  7. root 7 0.0 0.0 0 0 ? S Jun01 7:26 [rcu_sched]
  8. root 8 0.0 0.0 0 0 ? S Jun01 4:19 [rcuos/0]
  9. ......
观察自己的bash相关的进程: (此时最上层的父进程就是你这个bash环境)
  1. xp022430@cnbjlx24729:~/Desktop$ ps -l (注意带不带-显示的是有区别的。)
  2. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  3. 0 S 2060587593 12019 5955 0 80 0 - 6233 wait pts/4 00:00:00 bash
  4. 0 S 2060587593 25151 12019 0 80 0 - 6233 wait pts/4 00:00:00 bash
  5. 0 R 2060587593 30225 25151 0 80 0 - 2927 - pts/4 00:00:00 ps
各个列数详解:
    F:代表这个进程旗标 (process flags),说明这个进程的总结权限,常见号码有:
        若为 4 表示此进程的权限为 root ;
        若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。
    S:代表这个进程的状态 (STAT),主要的状态有:
    R (Running):该程序正在运作中;
           S)、(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
           D)、不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
           T)、停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
           Z)、(Zombie):僵尸状态,进程已经终止但却无法被移除至内存外。
    UID/PID/PPID:代表此进程被该UID所拥有;进程的PID号码;此进程的父进程 PID 号码
    C:代表 CPU 使用率,单位为百分比;
    PRI/NI:Priority/Nice 的缩写,代表此进程被 CPU 所执行的优先级,数值越小代表该进程越快被 CPU 执行。
    ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel function,指出该进程在内存的哪个部分,如果是个
                                       running 的进程,一般就会显示-;SZ 代表此进程用掉多少内存;WCHAN 表示目前进程
                                       是否运作中, 同样的, 若为 - 表示正在运作中。ADDR:address地址的缩写。
    TTY:登入者的终端机位置,若为远程登录则使用动态终端接口 (pts/n);(tty是Teletype)
    TIME:使用掉的 CPU 时间,注意,是此进程实际花费 CPU 运作的时间,而不是系统时间;
    CMD:就是 command 的缩写,造成此进程的触发程序之指令为何。
    (命令 --help不能查看时,man 命令进行查看)

命令pstree:以树状结构显示所有进程
格式:pstree [-A|U] [-up]选项与参数:
            -A :各进程树之间的连接以 ASCII 字符来连接;
            -U :各进程树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
           -p :并同时列出每个 process 的 PID;
            -u :并同时列出每个 process 的所属账号名称。
  1. init─┬─ModemManager───2*[{ModemManager}]
  2. ├─NetworkManager─┬─dhclient
  3. ├─dnsmasq
  4. └─3*[{NetworkManager}]
  5. ├─accounts-daemon───2*[{accounts-daemon}]
  6. ├─acpid
  7. ├─automount───2*[{automount}]
  8. ├─avahi-daemon───avahi-daemon
  9. ├─bluetoothd
  10. ├─cf-execd
  11. ├─colord───2*[{colord}]
  12. ├─cron
  13. ├─cups-browsed
  14. ├─cupsd───dbus
  15. ......
          显示pid和账号:
  1. cnbjlx24729:~/Desktop$ pstree -Apu
  2. init(1)-+-ModemManager(916)-+-{ModemManager}(971)
  3. | `-{ModemManager}(974)
  4. |-NetworkManager(981)-+-dhclient(1364)
  5. | |-dnsmasq(1425,nobody)
  6. | |-{NetworkManager}(982)
  7. | |-{NetworkManager}(985)
  8. | `-{NetworkManager}(989)
  9. |-accounts-daemon(1422)-+-{accounts-daemon}(1429)
  10. | `-{accounts-daemon}(1430)
  11. |-acpid(1323)
  12. |-automount(1373)-+-{automount}(1374)
  13. | `-{automount}(1375)
  14. |-avahi-daemon(950,avahi)---avahi-daemon(954)
          僵尸进程(zombie/defunct):进程已经终止但却无法被移除至内存外。该进程应该已经执行完毕,或者是因
                                                        故应该要终止了, 但是该进程的父进程却无法完整的将该进程结束掉,而造成
                                                        那个进程一直存在内存当中。如果你发现在某个进程的 CMD 后面还接上
                                                        <defunct> 时,就代表该进程是僵尸进程啦。
           就是那个最后一个列如:
  1. /usr/bin/wineserver <defunct>

命令top:持续侦测进程运作的状态,ps是看某个时间点的。
选项与参数:
       -d:后面可以接秒数,就是整个进程画面更新的秒数。预设是 5 秒;
        -b:以批次的方式执行 top ,还有更多的参数可以使用喔!通常会搭配数据流重导向来将批次的结果输出成为
               文件。
        -n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
        -p :指定某些个 PID 来进行观察监测而已。
在top执行过程当中可以使用的按键指令:(常用的)
        ? :显示在 top 当中可以输入的按键指令;
        P :以 CPU 的使用资源排序显示; 这个比较重要看谁用的CPU多。
       M :以 Memory 的使用资源排序显示;
       N :以 PID 来排序喔! 感觉这个比较常用啊。
       q :离开 top 软件的按键

2、进程的管理。
       那么进程是如何互相管理的呢?其实是透过给予该进程一个讯号(signal)去告知该进程你想要让她作什么!
常用信号如下图:

更多的讯号信息可以通过命令:(man 7 signal)来进行查看。
发送信号通过kill命令
格式:    
       1)、kill -signal %jobnumber
       2)、kill -signal PID. (pid 是直接数字的!)
查看可用signal:kill -l
  1. cnbjlx24729:~/Desktop$ kill -l
  2. 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
  3. 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
  4. 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
  5. 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
  6. 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
  7. 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
  8. 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
  9. 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
  10. 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
  11. 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
  12. 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
  13. 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
  14. 63) SIGRTMAX-1 64) SIGRTMAX
常用的就是1, 9,15。
killall:杀掉某个command。
格式:killall [-iIe] [command name]
选项与参数:
        -i :interactive 的意思,交互式的,若需要删除时,会出现提示字符给用户;
       -e :exact 的意思,表示后面接的 command name 要一致,但整个完整的指令不能超过 15 个字符。
       -I:指令名称(可能含参数)忽略大小写。

3、PRI/NI值。
      优先执行序 (priority, PRI),这个 PRI 值越低代表越优先的意思。不过这个 PRI 值是由核心动态调整的, 用户
无法直接调整 PRI值的。
     那如果我们想要调整进程的优先执行序时,就得要透过 Nice值了就是前面说的NI!
一般来说, PRI 与 NI 的相关性如下:
     PRI(new) = PRI(old) + nice 。但注意之后kernel还会有一些操作可能不是相加的值。
     所以可以看到当你想优先被处理的时候,nice值为负值时该进程就会降低PRI值,亦即会变的较优先被处理。
NI值的规范:
    1)、nice 值可调整的范围为 -20 ~ 19 ;
    2)、root 可随意调整自己或他人进程的 Nice 值,且范围为 -20 ~ 19 ;
    3)、一般使用者仅可调整自己进程的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
    4)、一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;
nice 指令:一开始执行程序就立即给予一个特定的 nice 值.
格式:nice [-n 数字] command
选项与参数:
    -n:后面接一个数值,数值的范围 -20 ~ 19。
renice 指令:已存在进程的 nice 重新调整.
格式:renice [number] PID
选项与参数:
    PID :某个进程的 ID 啊

命令free :观察内存使用情况
  1. cnbjlx24729:~/Desktop$ free
  2. total used free shared buffers cached
  3. Mem: 16344116 16022712 321404 494264 250088 10313104
  4. -/+ buffers/cache: 5459520 10884596
  5. Swap: 16683004 568100 16114904
具体参数使用的时候再查。
命令uname: 查阅系统与Kernel相关信息。
选项与参数:
        -a :所有系统相关的信息,包括底下的数据都会被列出来;
        -s :系统核心名称
       -r :核心的版本
        -m :本系统的硬件名称,例如 i686 或 x86_64 等;
        -p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
        -i :硬件的平台 (ix86)
命令uname: 查阅系统与Kernel相关信息。
选项与参数:
        -a :所有系统相关的信息,包括底下的数据都会被列出来;
        -s :系统核心名称
        -r :核心的版本
       -m :本系统的硬件名称,例如 i686 或 x86_64 等;
       -p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
        -i :硬件的平台 (ix86)
  1. cnbjlx24729:~/Desktop$ uname -s
  2. Linux
  3. cnbjlx24729:~/Desktop$ uname -r
  4. 3.13.0-119-generic
  5. cnbjlx24729:~/Desktop$ uname -m
  6. x86_64
  7. cnbjlx24729:~/Desktop$ uname -p
  8. x86_64
  9. cnbjlx24729:~/Desktop$ uname -i
  10. x86_64
  11. cnbjlx24729:~/Desktop$ uname -a
  12. Linux cnbjlx24729 3.13.0-119-generic #166-Ubuntu SMP Wed May 3 12:18:55 UTC 2017 x86_64 
  13. x86_64 x86_64 GNU/Linux
感觉缩写不太对所以:
  1. xp022430@cnbjlx24729:~/Desktop$ uname --help
  2. Usage: uname [OPTION]...
  3. Print certain system information. With no OPTION, same as -s.
  4. -a, --all print all information, in the following order,
  5. except omit -p and -i if unknown:
  6. -s, --kernel-name print the kernel name
  7. -n, --nodename print the network node hostname
  8. -r, --kernel-release print the kernel release
  9. -v, --kernel-version print the kernel version
  10. -m, --machine print the machine hardware name
  11. -p, --processor print the processor type or "unknown"
  12. -i, --hardware-platform print the hardware platform or "unknown"
  13. -o, --operating-system print the operating system
  14. --help display this help and exit
  15. --version output version information and exit

命令uptime:观察系统启动时间与工作负载
  1. cnbjlx24729:~/Desktop$ uptime
  2. 11:09:00 up 7 days, 2:03, 4 users, load average: 0.59, 0.58, 0.57

命令netstat :追踪网络或Socket文件
...

命令dmesg :分析核心产生的讯息。
        所有核心侦测的讯息,不管是开机时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记到内存中
的某个保护区段,通过这个命令读出来。

/proc/* 代表的意义:
所谓的进程都是在内存当中嘛!而内存当中的数据又都是写入到 /proc/* 这个目录下。

4、Selinux介绍
      SELinux 是透过 MAC 的方式来控管进程,他控制的主体是进程, 而目标则是该进程能否读取的文件资源。
统的Linux控制的主体是使用者。
SElinux的四个组成部分
       1)、主体 (Subject):
             SELinux 主要想要管理的就是进程,因此你可以将『主体』跟本章谈到的 process 划上等号;
       2)、目标 (Object):
           主体进程能否存取的『目标资源』一般就是文件系统。因此这个目标项目可以等文件系统划上等号;
       3)、政策 (Policy):
           由于进程与文件数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策。这些政策内还会
有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 7.x 里面仅有提供三个
主要的政策,分别是:
           targeted:针对网络服务限制较多,针对本机限制较少,是预设的政策;
            minimum:由 target 修订而来,仅针对选择的进程来保护!
            mls:完整的 SELinux 限制,限制方面较为严格。
建议使用预设的 targeted 政策即可。
       4)、安全上下文(security context):
           主体能不能存取目标除了政策指定之外,主体与目标的安全上下文必须一致才能够顺利存取 这个安全上下
(security context)  如果设定错误,你的某些服务(主体进程)就无法存取文件系统(目标资源),当然就会一直出现
权限不符的错误讯息了!
整体如下图:

          一般来说策略Policy都是有现成的规定好的一些,只需要会打开和关闭即可,但是安全上下文就需要我们
自行配置了。
        对于主体来说,主体一般就是进程,进程在内存内,所以安全性本文可以存入是没问题。
        对于目标来说,目标一般是文件,这些安全上下文就存在文件的inode当中,和rwx权限一样。
命令ls -Z用来查看上下文环境。公司的电脑还想没开启,回去用我自己的电脑试一试。

原创粉丝点击