读书笔记之:鸟哥的Linux私房菜——基础学习篇(第三版) (13-17章)

  第13章 学习Bash Shell

第14章 Linux账号管理与ACL权限设定

/etc/shadow文件

  1. Su使用

su总结一下用法是这样的:

若要完整的切换到新使用者的环境,必须要使用『 su - username 』或『 su -l username 』, 才会连同 PATH/USER/MAIL 等变量都转成新用户的环境;

 如果仅想要执行一次 root 的指令,可以利用『 su - -c "指令串" 』的方式来处理;

 使用 root 切换成为任何使用者时,并与需要输入新用户的密码;

虽然使用 su 很方便啦,与过缺点是,当我的主机是多人共管的环境时,如果大家都要使用 su 来切换成为 root 的身份,那么与就每个人都得要知道 root 的密码,这样密码太多人知道可能会流出去, 很不妥当呢!怎办?透过 sudo 来处理即可!

  1. sudo

相对于 su 需要了解新切换的用户密码 (常常是需要 root 的密码), sudo 的执行则仅需要自己的密码即可! 甚至可以设定不需要密码即可执行 sudo 呢!由于 sudo 可以让你以其他用户的身份执行指令 (通常是使用 root 的身份来执行指令),因此并非所有人都能够执行 sudo , 而是仅有规范到/etc/sudoers 内的用户才能够执行 sudo 这个指令

第十五章、磁盘配额(Quota)与进阶文件系统管理

第17章 程序管理

  • ps命令
  1.  ps :将某个时间点的程序运作情况获取下来

  2.  仅观察自己的 bash 相关程序: ps –l

    系统整体的程序运作是非常多的,但如果使用 ps -l 则仅列出与你的操作环境 (bash) 有关的程序而已,

    亦即最上层的父程序会是你自己的 bash 而没有延伸到 init 这支程序去!我们就来观察看看:

  • F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:

    o 若为 4 表示此程序的权限为 root ;

    o 若为 1 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。

  • S:代表这个程序的状态 (STAT),主要的状态有:

    o R (Running):该程序正在运作中;

    o S (Sleep):开程序目前正在睡眠状态(idle),但可以被唤醒(signal)。

    o D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)

    o T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;

    o 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表示目前程序是否运作中,同样的, 若为 - 表示正在运作中。
  •  TTY:登入者的终端机位置,若为进程登录则使用动态终端接口 (pts/n);
  •  TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运作的时间,而不是系统时间;
  •  CMD:就是 command 的缩写,造成此程序的触发程序之指令为何。

所以你看到的 ps -l 输出讯息中,他说明的是:『bash 的程序属于 UID 为 0 的使用者,状态为睡眠(sleep), 之所以为睡眠因为他触发了 ps (状态为 run) 之故。此程序的 PID 为 13639,优先执行顺序为 75 , 下达 bash 所取得的终端接口为 pts/1 ,运作状态为等待 (wait) 。』这样已经够清楚了吧?

  1.  观察系统所有程序: ps aux

    你会变现 ps -l 与 ps aux 显示的项目并不相同!在 ps aux 显示的项目中,各字段的意义为:

  • USER:该 process 属于那个使用者账号的?
  • PID :该 process 的程序标识符。
  • %CPU:该 process 使用掉的 CPU 资源百分比;
  • %MEM:该 process 所占用的物理内存百分比;
  • VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
  • RSS :该 process 占用的固定的内存量 (Kbytes)
  • TTY :该 process 是在那个终端机上面运作,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
  • STAT:该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
  • START:该 process 被触发启动的时间;
  • TIME :该 process 实际使用 CPU 运作的时间。
  • COMMAND:该程序的实际指令为何?

一般来说,ps aux 会依照 PID 的顺序来排序显示,我们还是以 13639 那个 PID 那行来说明!该行的意

义为『 root 执行的 bash PID 为 13639,占用了 0.2% 的内存容量百分比,状态为休眠 (S),该程序启

动的时间为 11:44 , 且取得的终端机环境为 pts/1 。』与 ps aux 看到的其实是同一个程序啦!

  1. top:动态观察程序的变化

    相对于 ps 是获取一个时间点的程序状态, top 则可以持续侦测程序运作的状态!使用方式如下:

    top 也是个挺不错的程序观察工具!但不同于 ps 是静态的结果输出, top 这个程序可以持续的监测整个系统的程序工作状态。 在默认的情况下,每次更新程序资源的时间为 5 秒,不过,可以使用 -d 来进行修改。 top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共有六行,显示的内容依序是:

  • 第一行(top...):这一行显示的信息分别为:

    o 目前的时间,亦即是 17:03:09 那个项目;

    o 开机到目前为止所经过的时间,亦即是 up 7days, 16:16 那个项目;

    o 已经登入系统的用户人数,亦即是 1 user项目;

    o 系统在 1, 5, 15 分钟的平均工作负载。我们在第十六章课到的 batch 工作方式为负载小于 0.8 就是这个负载啰!代表的是 1, 5, 15 分钟,系统平均要负责运作几个程序(工作)的意思。 越小代表系统越闲置,若高于 1 得要注意你的系统程序是否太过繁复了!

  • 第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个process 变成僵尸了吧?
  • 第三行(Cpus...):显示的是 CPU 的整体负载,每个项目可使用 ? 需要特别注意的是 %wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源喔! 另外,如果是多核心的设备,可以按下数字键『1』来切换成与同 CPU 的负载率。
  • 第四行与第五行:表示目前的物理内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap 的使用量要尽量的少!如果 swap 被用的很大量,表示系统的物理内存实在与足!
  • 第六行:这个是当在 top 程序当中输入指令时,显示状态的地方。

至于 top 下半部分的画面,则是每个 process 使用的资源情况。比较需要注意的是:

 PID :每个 process 的 ID 啦!

 USER:该 process 所属的使用者;

 PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;

 NI :Nice 的简写,与 Priority 有关,也是越小越早被执行;

 %CPU:CPU 的使用率;

 %MEM:内存的使用率;

 TIME+:CPU 使用时间的累加;

top 预设使用 CPU 使用率 (%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』, 若要回复则按下『P』即可。如果想要离开 top 则按下『 q 』吧!如果你想要将 top 的结果输出成为档案时, 可以这样做:

  • 系统资源的观察

    除了系统的程序之外,我们还必须就系统的一些资源进行检查啊!举例来说,我们使用 top 可以看到很多系统的资源

 (1) free :观察内存使用情况

仔细看看,我的系统当中有 725MB 左右的物理内存,我的 swap 有 1GB 左右, 那我使用 free -m 以 MBytes 来显示时,就会出现上面的信息。Mem 那一行显示的是物理内存的量, Swap 则是虚拟内存的量。 total 是总量, used 是已被使用的量, free 则是剩余可用的量。 后面的shared/buffers/cached 则是在已被使用的量当中,用来作为缓冲及快取的量。

仔细的看到范例一的输出喔,我们的 Linux 测试用主机是很平凡的,根本没有什么工作, 但是,我的物内存是几乎被用光光的情况呢!不过,至少有 132MB 用在缓冲记忆 (buffers) 工作, 287MB 则用在快取 (cached) 工作,也就是说,系统是『很有效率的将所有的内存用光光』, 目的是为了让系统的存取效能加速啦!

很多服友都会问到这个问题『我的系统明明很轻松,为何内存会被用光光?』现在瞭了吧? 被用光是正常的!而需要注意的反而是 swap 的量。一般来说, swap 最好不要被使用,尤其 swap 最好不要被使用超过 20% 以上, 如果您变现 swap 的用量超过 20% ,那举,最好还是买物理内存来插吧! 因为, Swap 的效能跟物理内存实在差很多,而系统会使用到 swap , 绝对是因为物理内存与足了才会这样做的!

Tips:

Linux 系统为了要加速系统效能,所以会将最常使用到的或者是最近使用到的档案数据快取 (cache) 下来, 这样未来系统要使用该档案时,就直接由内存中搜寻取出,而不需要重新读取硬盘,速度上面当然就加快了! 因此,物理内存被用光是正常的!

uname:查阅系统与核心相关信息

  1. uptime:观察系统启动时间与工作负载

这个指令很单纯呢!就是显示出目前系统已经开机多久的时间,以及 1, 5, 15 分钟的平均负载就是了。还记得 top 吧?没错啦!这个 uptime 可以显示出 top 画面的最上面一行!

  1.  netstat :追踪网络或插槽文件

    这个 netstat 也是挺好玩的,其实这个指令比较常被用在网络的监控方面,与过,在程序管理方面也是需要了解的啦! 这个指令的执行如下所示:基本上, netstat 的输出分为两大部分,分别是网络与系统自己的程序相关忢部分:

  1.  dmesg :分析核心产生的讯息

系统在开机的时候,核心会去侦测系统的硬件,你的某些硬件到底有没有被捉到,那就与这个时候的侦测有关。 但是这些侦测的过程要与是没有显示在屏幕上,就是很飞快的在屏幕上一闪而逝!能不能把核心侦测的讯息捉出来瞧瞧? 可以的,那就使用 dmesg 吧!

所有核心侦测的讯息,不管是开机时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记录到内存中的某个保护区段。 dmesg 这个指令就能够将该区段的讯息读出来的!因为讯息实在太多了,所以执行时可以加入这个管线指令『 | more 』来使画面暂停!

由范例二就知道我这部主机的硬盘的格式是什么了吧!没错啦!还可以查阅能与能找到网络卡喔!网络卡的代号是 eth ,所以,直接输入 dmesg | grep -i eth

 (6) vmstat :侦测系统资源变化

如果你想要动态的了解一下系统资源的运作,那举这个 vmstat 确实可以玩一玩!vmstat 可以侦测『 CPU / 内存 / 磁盘输入输出状态 』等等,如果你想要了解一部繁忙的系统到底是哪个环节最累人, 可以使用 vmstat 分析看看。底下是常见的选项与参数说明:

  • /proc/* 代表的意义

其实,我们之前提到的所谓的程序都是在内存当中嘛!而内存当中的数据又都是写入到 /proc/* 这个目录下的,所以啰,我们当然可以直接观察 /proc 这个目录当中的档案啊!

  • 查询已开启档案或已执行程序开启之档案

 (1) fuser:藉由档案(或文件系统)找出正在使用该档案的程序

有的时候我想要知道我的程序到底在这次启动过程中开启了多少档案,可以利用 fuser 来观察啦! 举例来说,你如果卸除时变现系统通知:『 device is busy 』,那表示这个文件系统正在忙碌中, 表示有某支程序有利用到该文件系统啦!那举你就可以利用 fuser 来追踪啰!fuser 语法有点像这样:

(2)  lsof :列出被程序所开启的档案文件名

相对于 fuser 是由档案或者装置去找出使用该档案或装置的程序,反过来说, 如何查出某个程序开启或者使用的档案与装置呢?呼呼!那就是使用 lsof 啰~

(3) pidof :找出某支正在执行的程序的 PID

posted @ 2012-03-02 22:36  Mr.Rico  阅读(842)  评论(0编辑  收藏  举报