Linux ~ 系统管理。
进程管理。
进程 ~ what。
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
ls 也是进程。
进程管理的作用。
- 判断服务器的健康状态。
- 查看系统中所有进程。
- 杀死进程。
查看进程中所有进程。
- 查看系统中所有进程。使用 BSD 操作系统格式。
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19232 1404 ? Ss Feb18 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S Feb18 0:00 [kthreadd]
。。。
a ——> 所有前台进程。
x ——> 所有后台进程。
u ——> 用户。
- USER
进程是由哪个用户产生的。- PID
进程的 ID 号。- %CPU
进程占用 CPU 资源的百分比,占用越高,进程越耗费资源。- %MEM
进程占用物理内存的百分比,占用越高,进程越耗费资源。- VSZ
进程占用虚拟内存的大小,单位 KB。- RSS
进程占用实际物理内存的大小,单位 KB。- TTY
进程是在哪个终端运行的。
? ——> 不是终端执行,系统内核执行。
其中 tty1 ~ tty7 代表本地控制台终端。
tty1 ~ tty6 是本地字符界面终端。
tty7 是图形终端。
pts/0~256 代表虚拟终端。- STAT
进程状态。
R ——> 运行。
S ——> 睡眠。
T ——> 停止状态。
s ——> 包含子程序。
+
——> 位于后台。- START
该进程的启动时间。- TIME
该进程占用 CPU 的运算时间,注意不是系统时间。- COMMAND
产生此进程的命令名。
如果加 -
。(UNIX 不识别 -
)。
[root@localhost ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19232 1404 ? Ss Feb18 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S Feb18 0:00 [kthreadd]
。。。
- 查看系统中所有进程。使用 Linux 标准命令格式。
[root@localhost ~]# ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 4808 poll_s ? 00:00:01 init
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
。。。
-l ——> 详细信息。
-e ——> 所有。
查看系统健康状态。
top [选项]
-d 秒数 ——> 指定 top 命令每隔几秒更新。默认是 3 秒。
在 top 命令的交互模式当中可以执行的命令。
? 或 h ——> 显示交互模式的帮助。
P ——> 以 CPU 使用率排序。默认。
M ——> 以内存的使用率排序。
N ——> 以 PID 排序。
q ——> 退出 top。
终止进程。
kill。
# 查看可用的进程信号。
geek@geek-PC:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
- 常用信号。
信号代号 | 信号名称 | 说明 |
---|---|---|
1 | SIGNUP | 该信号让进程立即关闭,然后重新读取配置文件后重启。 |
2 | SIGINT | 程序终止信号,用于终止前台进程。 |
8 | SIGFPE | 在发生致命算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有算术错误。 |
9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于强制终止进程。 |
14 | SIGALRM | 时钟定时信号。计算的是实际的时间或时钟时间,alarm 函数使用该信号。 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试 SIGKILL 信号,也就是信号 9。 |
18 | SIGCONT | 该个信号可以让暂停的进程恢复执行,本信号不能被阻断。 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于 Ctrl - z 快捷键。本信号不能被阻断。 |
kill -1 PID ——> 重启。
kill -9 PID ——> 强制结束。
killall。
[root@localhost ~]# killall [选项] [信号] 进程名
// 按照进程名杀死进程。
选项。
-i。——> 交互式。询问是否要杀死某个进程。
-I。——> 忽略进程名的大小写。
pkill。
[root@localhost ~]# pkill [选项] [信号] 进程名
// 按照进程名终止进程。
选项。
-t 终端号。——> 按照终端号踢出用户。
# 使用 w 命令查询本机已经登录的用户。
[root@localhost ~]# w
11:54:36 up 9 min, 2 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 11:45 9:18 0.04s 0.04s -bash
root pts/0 192.168.223.1 11:45 0.00s 0.05s 0.00s w
# 强制杀死从 tty1 终端登录的进程。
[root@localhost ~]# pkill -9 -t tty1
[root@localhost ~]# w
11:56:20 up 11 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.223.1 11:45 0.00s 0.07s 0.01s w
pstree -p ——> 进程树。
[root@localhost ~]# pstree -p
init(1)─┬─auditd(1201)───{auditd}(1202)
├─crond(1393)
├─dhclient(1139)
├─login(1406)───bash(1428)
├─master(1379)─┬─pickup(1383)
│ └─qmgr(1384)
├─mingetty(1408)
├─mingetty(1410)
├─mingetty(1412)
├─mingetty(1414)
├─mingetty(1416)
├─rsyslogd(1223)─┬─{rsyslogd}(1224)
│ ├─{rsyslogd}(1226)
│ └─{rsyslogd}(1227)
├─sshd(1289)───sshd(1443)───bash(1446)───pstree(1459)
├─udevd(491)─┬─udevd(1423)
│ └─udevd(1424)
└─xinetd(1300)
工作管理。
把进程放入后台。
-
tar -zcf etc.tar.gz /etc &
// 后台继续运行。 -
[root@localhost ~]# top
// 在 top 命令执行过程中,按下 Ctrl - z 快捷键。
(后台暂停)
。
查看后台工作。
[root@localhost ~]# jobs [-l]
选项。
-l。——> 显示工作的 PID。
+
号代表最近一个放入后台的工作,也是工作恢复时,默认恢复工作。
“-” 号代表倒数第二个放入后台的工作。
[root@localhost ~]# jobs -l
[1]- 1546 Stopped (signal) top
[2]- 1548 Stopped (signal) top
将后台暂停的工作恢复到前台执行。
fg
[root@localhost ~]# fg %工作号
参数。
%工作号。——> % 号可以省略,但是注意工作号和 PID 的区别。(1, 2, 3)。
bg
[root@localhost ~]# bg %工作号
后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行。
系统资源管理。
系统资源查看。
vmstat ~ 监控系统资源。
[root@localhost ~] vmstat [刷新延时 刷新次数]
[root@localhost ~]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 842980 7612 42844 0 0 17 1 12 14 0 0 100 0 0
0 0 0 842988 7612 42844 0 0 0 0 12 13 0 0 100 0 0
0 0 0 842988 7612 42844 0 0 0 0 8 9 0 0 100 0 0
dmesg ~ 开机时内核检测信息。
[root@localhost ~]# dmesg
[root@localhost ~]# dmesg | grep CPU
free ~ 查看内存使用状态。
[root@localhost ~]# free [-b | -k | -m | -g]
选项。
-b。——> 以字节为单位显示。
-k。——> 以 KB 为单位显示,「默认」。
-m。——> 以 MB 为单位显示。
-g。——> 以 GB 为单位显示
`
缓存和缓冲的区别。
- 缓存(cache)是用来加速数据从硬盘中“读取”的。
系统第一次调用一个程序,只能从硬盘中读取,读取完后,先把数据保存在 cache 中。以后其他程序要用这个数据,直接从缓存拿。(内存读写速度 >> 硬盘读写速度)。
- 而缓冲(buffer)是用来加速“写入”硬盘的。
如果每次保存数据都直接写入硬盘——> 慢。先放在缓冲区,等到达一定量,一起写入硬盘。
查看 CPU 信息 ~ /proc/cpuinfo。
[root@localhost ~]# cat /proc/cpuinfo
uptime
查看系统与内核相关信息。
[root@localhost ~]# uname [选项]
~
-a。——> 查看系统所有相关信息。
-r。——> 查看内核版本。
-s——> 查看内核名称。
判断当前系统位数。
[root@localhost ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
uname -m
查看当前 Linux 系统的发行版本。
geek@geek-PC:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Deepin
Description: Deepin 15.11
Release: 15.11
Codename: stable
列出进程打开或使用的文件信息 ~ lsof。
[root@localhost ~]# lsof [选项]
// 列出进程调用或打开的文件的信息。
选项。
-c 字符串。——> 只列出以字符串开头的进程打开的文件。
-u 用户名。——> 只列出某个用户的进程打开的文件。
-p PID。 ——> 列出某个 PID 进程打开的文件。
[root@localhost ~]# lsof -c init
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 150352 916426 /sbin/init
init 1 root mem REG 253,0 66432 261665 /lib64/libnss_files-2.12.so
init 1 root mem REG 253,0 1924768 261649 /lib64/libc-2.12.so
init 1 root mem REG 253,0 90912 261635 /lib64/libgcc_s-4.4.7-20120601.so.1
init 1 root mem REG 253,0 44472 261677 /lib64/librt-2.12.so
init 1 root mem REG 253,0 143280 261673 /lib64/libpthread-2.12.so
init 1 root mem REG 253,0 265736 261729 /lib64/libdbus-1.so.3.4.0
init 1 root mem REG 253,0 39896 261746 /lib64/libnih-dbus.so.1.0.0
init 1 root mem REG 253,0 106016 261748 /lib64/libnih.so.1.0.0
init 1 root mem REG 253,0 159312 262040 /lib64/ld-2.12.so
init 1 root 0u CHR 1,3 0t0 4601 /dev/null
init 1 root 1u CHR 1,3 0t0 4601 /dev/null
init 1 root 2u CHR 1,3 0t0 4601 /dev/null
init 1 root 3r FIFO 0,8 0t0 9461 pipe
init 1 root 4w FIFO 0,8 0t0 9461 pipe
init 1 root 5r DIR 0,10 0 1 inotify
init 1 root 6r DIR 0,10 0 1 inotify
init 1 root 7u unix 0xffff880037bf93c0 0t0 9462 @/com/ubuntu/upstart
init 1 root 8u unix 0xffff88003d3fb8c0 0t0 13519 socket
[root@localhost ~]#
系统定时任务。
crond 服务管理与访问。
[root@localhost ~]# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
[root@localhost ~]# chkconfig crond on
用户的 crontab 设置。
[root@localhost ~]# crontab [选项]
选项。
-e。——> 编辑 crontab 定时任务。
-l。——> 查询 crontab 任务。
-r。——> 删除当前用户所有 cronyab 任务。
[root@localhost ~]# crontab -l
no crontab for root
默认使用 vi 编辑 /tmp/crontab.HeSBLh
。
[root@localhost ~]# crontab -e
"/tmp/crontab.HeSBLh" 0L, 0C
格式。
* * * * * command
项目 | 含义 | 范围 |
---|---|---|
① * | 一小时中的第几分钟 | 0~59 |
② * | 一天中的第几小时 | 0~23 |
③ * | 一个月中的第几天 | 1~31 |
④ * | 一年中的第月 | 1~12 |
⑤* | 一星期中的星期几 | 0~7(0 和 7 都代表星期日)。 |
代码 | 含义 |
---|---|
45 22 * * * 命令 | 每天 22:45 执行。 |
0 17 * * 1 命令 | 每周一的 17:00 执行。 |
0 5 1, 15 * * 命令 | 每月 1 号和 15 号 05:00 执行。 |
40 4 * * 1-5 命令 | 每周一到周五的 04:40 执行。 |
*/10 4 * * * 命令 | 每天 04:00 每隔 10 分钟执行 |
0 0 1, 15 * 1 命令 | 每月 1 号 和 15号,每周一的 00:00执行。 |
注:星期几的几号最好不要同时出现。cron 会懵逼。。。
eg.
*/5 * * * * /bin/echo “11” >> /tmp/test
5 5 * * 2 /sbin/shutdown -r now
0 5 1,10,15 * * /root/sh/autobak.sh