Linux进阶二

Get Started. It's Free
or sign up with your email address
Linux进阶二 by Mind Map: Linux进阶二

1. history

1.1. 用途

1.1.1. 查看用户所有历史操作记录

1.2. 列出最近的 n 笔命令行表

1.2.1. history n

1.3. 再次执行历史命令里的第n个命令

1.3.1. !n

1.4. 设置让history记录更多记录,并且记录详细时间

1.4.1. vi /etc/bashr(centos) vi ~/.bashrc(Ubuntu) 在最后面增加 HISTFILESIZE=4000 HISTSIZE=4000 HISTTIMEFORMAT='%F %T' export HISTTIMEFORMAT

2. 文件搜索

2.1. whereis (寻找特定文件)

2.1.1. 例如:whereis ifconfig

2.2. locate

2.2.1. 直接在后面输入『文件的部分名称』后,就能够得到结果

2.2.2. -i :忽略大小写的差异;

2.3. find

2.3.1. 最全最耗时的搜索

2.3.2. 选项与参数

2.3.2.1. 1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明 -mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件; -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名; -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。 -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名

2.3.2.2. 2. 与使用者或群组名称有关的参数: -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。 -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在 /etc/group,相关的介绍我们会第四篇说明~ -user name :name 为使用者帐号名称喔!例如 dmtsai -group name:name 为群组名称喔,例如 users ; -nouser :寻找文件的拥有者不存在 /etc/passwd 的人! -nogroup :寻找文件的拥有群组不存在於 /etc/group 的文件! 当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者, 这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。

2.3.2.3. 3. 与文件权限及名称有关的参数: -name filename:搜寻文件名称为 filename 的文件; -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有: c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是『 -size +50k 』 -type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。 -perm mode :搜寻文件权限『刚好等於』 mode 的文件,这个 mode 为类似 chmod 的属性值,举例来说, -rwsr-xr-x 的属性为 4755 ! -perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说, 我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744, 当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来, 因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。 -perm +mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻 -rwxr-xr-x ,亦即 -perm +755 时,但一个文件属性为 -rw------- 也会被列出来,因为他有 -rw.... 的属性存在!

2.3.2.4. 4. 额外可进行的动作: -exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到 的结果。 -print :将结果列印到萤幕上,这个动作是默认动作!

2.3.3. 例如:找出 /etc 底下档名包含 httpd 的文件

2.3.3.1. find /etc -name '*httpd*'

2.4. 根据进程id

2.4.1. ps -ef |grep 对应的程序,获取得到该程序pid

2.4.2. cd /proc/pid

2.4.3. ls -al |grep exe 就可以看到对应的目录

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

3.1. 整个程序画面升级的秒数

3.1.1. top [-d 数字] 默认是 5 秒

3.2. 以 CPU 的使用资源排序显示

3.2.1. 输入大写 P

3.3. 以 Memory 的使用资源排序显示

3.3.1. 大写 M

3.4. 显示参数解释

3.4.1. 第一行(top...):这一行显示的资讯分别为: 目前的时间 启动到目前为止所经过的时间 已经登陆系统的使用者人数 系统在 1, 5, 15 分钟的平均工作负载。代表的是 1, 5, 15 分钟,系统平均要负责运行几个程序(工作)的意思。 越小代表系统越闲置,若高於 1 得要注意系统程序是否太过繁复了!

3.4.2. 第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧?

3.4.3. 第三行(Cpus...):显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要特别注意的是 %wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源喔! 另外,如果是多核cpu的设备,可以按下数字键『1』来切换成不同 CPU 的负载率。

3.4.4. 第四行与第五行:表示目前的实体内存与虚拟内存 (Mem/Swap) 的使用情况。 要注意的是 swap 的使用量要尽量的少!如果 swap 被用的很大量,表示系统的实体内存实在不足!

3.4.5. PID :每个 process 的 ID 啦! USER:该 process 所属的使用者; PR :Priority 的简写,程序的优先运行顺序,越小越早被运行; NI :Nice 的简写,与 Priority 有关,也是越小越早被运行; VIRT(虚拟内存用量), RES(物理内存用量), SHR(共享内存用量), S(进程状态); %CPU:CPU 的使用率; %MEM:内存的使用率; TIME+:CPU 使用时间的累加; COMMAND :进程;

4. 侦测系统资源变化

4.1. vmstat

4.1.1. 一个十分有用的Linux系统监控工具,可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。

4.2. 每几秒探测一次

4.2.1. vmstat n

4.3. 总共探测多少次

4.3.1. vmstat 几秒一次 共几次

4.4. 显示参数解释

4.4.1. 内存栏位 (procs) 的项目

4.4.1.1. r :等待运行中的程序数量; r: The number of runnable processes (running or waiting for run time). b:不可被唤醒的程序数量。 b: The number of processes in uninterruptible sleep. 这两个项目越多,代表系统越忙碌 (因为系统太忙, 所以很多程序就无法被运行或一直在等待而无法被唤醒之故

4.4.2. 内存栏位 (memory) 项目

4.4.2.1. swpd:虚拟内存被使用的容量; swpd: the amount of virtual memory used. free:未被使用的内存容量; free: the amount of idle memory. buff:用於缓冲内存; buff: the amount of memory used as buffers. cache:用於高速缓存。 cache: the amount of memory used as cache

4.4.3. 内存置换空间 (swap) 的项目

4.4.3.1. si:由磁碟中将程序取出的量; si: Amount of memory swapped in from disk (/s). so:由於内存不足而将没用到的程序写入到磁碟的 swap 的容量。 so: Amount of memory swapped to disk (/s). 如果 si/so 的数值太大,表示内存内的数据常常得在磁碟与主内存之间传来传去, 系统效能会很差!

4.4.4. 磁碟读写 (io) 的项目

4.4.4.1. bi:由磁盘写入的区块数量; bi: Blocks received from a block device (blocks/s) bo:写入到磁盘去的区块数量。 bo: Blocks sent to a block device (blocks/s). 如果这部份的值越高,代表系统的 I/O 非常忙碌!

4.4.5. 系统 (system) 的项目

4.4.5.1. in:每秒被中断的程序次数; in: The number of interrupts per second, including the clock. cs:每秒钟进行的事件切换次数;  cs: The number of context switches per second. 这两个数值越大,代表系统与周边设备的沟通非常频繁!  这些周边设备当然包括磁碟、网络卡、时间钟等。

4.4.6. CPU 的项目

4.4.6.1. us:非核心层的 CPU 使用状态; us: Time spent running non-kernel code.  (user time, including nice time) sy:核心层所使用的 CPU 状态; sy: Time spent running kernel code.  (system time) id:闲置的状态; id: Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time. wa:等待 I/O 所耗费的 CPU 状态; wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.

5. 例行性工作排程

5.1. at

5.1.1. 仅运行一次就结束排程的命令,可以同时输入多个命令,输入 ctrl + d 结束

5.1.2. 5分钟后执行

5.1.2.1. at now + 5 minutes

5.1.3. 指定时刻执行

5.1.3.1. at 23:00 2014-12-20

5.1.4. 三天后的下午 5 点

5.1.4.1. at 5pm+3 days

5.1.5. 明天17点钟

5.1.5.1. at 17:20 tomorrow

5.1.6. 查询有什么任务未执行

5.1.6.1. atq

5.1.7. 查看未执行任务的详细命令

5.1.7.1. cd /var/spool/cron/atjobs

5.1.8. 删除已经设置执行的任务

5.1.8.1. atrm n(对应的数字)

5.2. crontab

5.2.1. 所配置的工作将会循环的一直进行下去,可循环的时间为分钟、小时、每周、每月或每年等

5.2.2. 查看任务列表

5.2.2.1. crontab -l

5.2.3. 编辑任务列表

5.2.3.1. crontab -e

5.2.4. 格式例子

5.2.4.1. 分  时  日  月  周  命令

5.2.5. 数字代表意义

5.2.5.1. 代表意义 分钟 小时 日期 月份 周 命令 数字范围 0-59 0-23 1-31 1-12 0-7 命令

5.2.6. 特殊字符意义

5.2.6.1. 特殊字符 代表意义 *(星号) 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思! ,(逗号) 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是: 0 3,6 * * * command 时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用! -(减号) 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作: 20 8-12 * * * command 仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思! /n(斜线) 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则: */5 * * * * command 很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!