cp
cp -r dir1 dir2 表示将dir1及其dir1下所包含的文件复制到dir2下
rm
rm -rf 文件夹名 删除目录下所有文件 文件夹
grep
grep :grep 命令的全称是 "Global Regular Expression Print"。它是一个在类 Unix 系统中用于搜索文本文件中匹配正则表达式的行的工具。
基本用法:
grep [options] pattern [file ...]
options:可以是多种命令行选项,用于改变 grep 的行为。
pattern:需要搜索的文本模式。
file:要搜索的文件。如果没有指定文件,grep 会从标准输入读取数据。
常用选项:
-i:忽略大小写。
-v:显示不匹配的行。
-r 或 -R:递归地搜索目录。
-n:显示匹配行的行号。
-w:仅匹配整个单词。
-A num:打印匹配行及其后 num 行。
-B num:打印匹配行及其前 num 行。
-C num:打印匹配行及其前后 num 行。
正则表达式:
grep 支持基本正则表达式(BRE)和扩展正则表达式(ERE)。基本正则表达式使用单引号(')括起来,而扩展正则表达式使用双引号(")括起来。
示例:
搜索包含单词 "error" 的行:grep 'error' filename
忽略大小写搜索 "Error":grep -i 'Error' filename
打印不包含 "error" 的行:grep -v 'error' filename
递归搜索目录中的所有文件:grep -r 'pattern' /path/to/directory
管道(Pipe):
grep 经常与其他命令结合使用,通过管道来处理数据流。例如,使用 cat filename | grep 'pattern' 可以搜索 filename 文件的内容。
颜色输出:
grep 还可以通过 --color 选项以彩色方式高亮显示匹配的文本,这在查看大量文本时非常有用。
性能:
grep 是一个非常快速的搜索工具,特别适合于处理大型文件和日志文件。
grep 是 Unix 和类 Unix 系统(如 Linux 和 macOS)中的标准工具,也是许多程序员和系统管理员日常工作中不可或缺的工具之一。
top
启动 Top 命令: 在终端中输入 top 并按下回车键即可启动 Top 命令。
- 查看进程信息: 默认情况下,Top 命令会显示系统中所有正在运行的进程,以及它们的 CPU 使用率、内存使用率等信息。你可以通过按下键盘上的 1 键来查看每个 CPU 核心的使用情况。
- 排序进程: Top 命令默认按照 CPU 使用率进行排序。你可以按下 P (大写) 键按照 CPU 使用率排序,按下 M (大写) 键按照内存使用率排序,按下 T (大写) 键按照运行时间排序等。
- 结束进程: 如果你需要结束某个进程,可以按下**k(小写)**键,然后输入要结束的进程的 PID(进程 ID)并按下回车键。
- 改变刷新频率: 默认情况下,Top 每隔 3 秒刷新一次信息。你可以按下 d 键来改变刷新频率,然后输入你希望的刷新时间间隔(单位是秒)。
- 退出 Top: 按下 q 键即可退出 Top 命令。
我们执行top
命令后,会出现如下结果:
top
top - 14:07:53 up 256 days, 3:35, 1 user, load average: 0.07, 0.03, 0.00
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15495.8 total, 7684.9 free, 648.9 used, 7162.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 14505.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3225815 root 20 0 1211152 242716 31368 S 1.0 1.5 1216:30 YDService
3919907 root 20 0 636660 23796 5728 S 0.7 0.1 66:34.30 barad_agent
895 root 20 0 235592 7400 6568 S 0.3 0.0 15:42.06 accounts-daemon
25575 root 20 0 1749324 11644 8288 S 0.3 0.1 89:04.43 YDLive
661118 root 20 0 0 0 0 I 0.3 0.0 0:05.52 kworker/2:0-events
1981516 root 20 0 0 0 0 I 0.3 0.0 0:00.03 kworker/u16:2-events_power_efficient
1981889 ubuntu 20 0 9276 3936 3260 R 0.3 0.0 0:00.21 top
1 root 20 0 168684 12744 8376 S 0.0 0.1 13:27.41 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:09.82 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:30.34 ksoftirqd/0
10 root 20 0 0 0 0 I 0.0 0.0 56:03.90 rcu_sched
第一行:
top - 14:07:53 up 256 days, 3:35, 1 user, load average: 0.07, 0.03, 0.00
top
:当前时间up
:机器运行了多长时间users
:当前登录用户数load average
:系统负载,即任务队列的平均长度。三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。
"load average"(负载平均值)是一个非常重要的性能指标,它提供了系统在过去一段时间内的平均负载情况。通俗来说,它反映了你的系统在过去1分钟、5分钟和15分钟内平均每秒钟有多少个进程需要CPU处理。这个指标可以帮助你判断系统是否繁忙或者是否接近其处理能力的极限。
-
数值含义:
- 假设你的系统有4个CPU核心,如果负载平均值显示为3.00,这意味着在观测的时间段内,平均每个CPU核心有0.75个进程在等待处理(3除以4)。
-
高负载平均值:
- 如果负载平均值高于CPU核心数,这通常意味着系统正在处理的进程数量超过了CPU的处理能力,即系统正在排队等待CPU时间。
-
低负载平均值:
- 如果负载平均值低于CPU核心数,这意味着系统有足够的处理能力来处理当前的进程负载,CPU并不是瓶颈。
-
时间窗口:
-
top
显示的三个负载平均值分别对应过去1分钟、5分钟和15分钟的平均值。这可以帮助你了解系统负载的变化趋势:- 1分钟平均值:最近的情况。
- 5分钟平均值:稍微长期一点的情况。
- 15分钟平均值:更长期的趋势。
-
-
系统性能:
- 如果负载平均值持续高于CPU核心数,可能需要考虑优化系统性能,比如升级硬件、优化应用程序或关闭不必要的服务。
-
系统容量规划:
- 负载平均值也是系统管理员进行容量规划时的重要参考指标,帮助他们决定是否需要增加更多的硬件资源。
-
与其他指标的关系:
- 负载平均值与CPU使用率(%CPU)不同。即使CPU使用率不高,如果有很多进程在等待I/O操作,负载平均值也可能很高。
简而言之,top
命令中的负载平均值是一个快速判断系统是否过载的指标。如果这个值异常高,可能意味着需要对系统进行进一步的分析和优化。
第二行:
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
"zombie"(僵尸进程)是一个特殊的进程状态,通俗地解释如下:
-
进程生命周期:
- 一个正常的进程在其生命周期中会经历创建、运行、等待资源、退出等阶段。当一个进程完成其任务后,它会通知操作系统它已经完成,操作系统随后会回收其资源。
-
父进程的作用:
- 通常情况下,当一个子进程结束运行时,它需要通知其父进程,父进程会收集子进程的退出状态信息,然后操作系统会回收子进程的资源。
-
僵尸进程的产生:
- 如果一个子进程结束了,但是它的父进程没有收集其退出状态信息,那么子进程的进程描述符(包括进程ID等信息)仍然保留在系统中,这种状态的进程被称为"僵尸进程"。
-
僵尸进程的特点:
- 僵尸进程实际上已经不再消耗系统资源,如CPU和内存,但是它们仍然占用一个进程ID,这可能会导致系统资源(特别是进程ID)的浪费。
-
为什么需要关注:
- 如果系统中存在大量的僵尸进程,可能会耗尽可用的进程ID,从而阻止新的进程被创建。这在某些情况下可能会导致系统服务不可用。
-
如何识别僵尸进程:
- 在
top
命令的输出中,僵尸进程通常在进程状态(S)列显示为"Z"。同时,它们通常显示为父进程ID(PPID)为0,这表明它们没有父进程。
- 在
-
解决方法:
- 解决僵尸进程问题通常需要找到并修复不收集子进程退出状态的父进程。在某些情况下,可以通过重启系统或手动杀死僵尸进程来解决问题。
-
预防措施:
- 编写程序时,确保父进程能够正确地收集子进程的退出状态,或者使用像
wait()
这样的系统调用来监控子进程的状态。
- 编写程序时,确保父进程能够正确地收集子进程的退出状态,或者使用像
简而言之,僵尸进程是那些已经完成但因为父进程没有正确处理其退出状态而仍然存在于系统中的进程。它们不消耗实际资源,但可能会占用宝贵的进程ID,从而影响系统的正常运行。
进程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3225815 root 20 0 1211152 242716 31368 S 1.0 1.5 1216:30 YDService
3919907 root 20 0 636660 23796 5728 S 0.7 0.1 66:34.30 barad_agent
895 root 20 0 235592 7400 6568 S 0.3 0.0 15:42.06 accounts-daemon
25575 root 20 0 1749324 11644 8288 S 0.3 0.1 89:04.43 YDLive
PID 进程id
USER 进程所有者的用户名
PR 优先级PR 代表 "Priority"(优先级)。它显示了进程的相对优先级,这是一个决定进程获得CPU时间份额多少的数值,PR 列显示的是一个数值,这个数值越小,表示进程的优先级越高。也就是说,数值越小的进程更容易获得CPU的处理时间。操作系统会根据进程的优先级来调度CPU时间。高优先级的进程会先于低优先级的进程执行。进程的优先级可能会因为多种原因而变化,例如,当一个进程长时间占用CPU时,操作系统可能会降低其优先级,从而允许其他进程运行。
NI NI 代表 "Nice",它是一个衡量进程相对优先级的值。这里的“相对”是指进程与其他进程相比,获得CPU时间份额的优先级。NI 的值通常范围是从 -20 到 19。其中,-20 是最高优先级(实时进程),19 是最低优先级。大多数新创建的进程默认的 NI 值是 0,这意味着它们以普通优先级运行。
VIRT VIRT(Virtual Memory) 列表示进程的虚拟内存大小。VIRT 显示的是进程请求的虚拟内存总量,它包括了进程实际使用的内存以及为进程保留但尚未使用的内存。如果你在 top 命令的输出中看到某个进程的 VIRT 值为 1024M,这意味着该进程请求了1024兆字节的虚拟内存。这个数值可能远大于进程实际使用的物理内存,因为虚拟内存允许进程访问的内存空间可以大于实际的物理内存大小。
RES RES 列代表 "Resident Size",它显示了进程实际占用的物理内存大小。RES 表示进程当前在物理内存(RAM)中占用的空间大小。这是实际被进程使用,并且存储在计算机的随机存取存储器(RAM)中的内存量。RES 的单位通常是千字节(KB)、兆字节(MB)或吉字节(GB),这取决于进程占用的内存大小。
SHR SHR 列代表 "Shared Memory",它显示了进程使用的共享内存大小,SHR 表示进程使用的可以被其他进程共享的内存部分。共享内存是一种进程间通信(IPC)的方式,允许两个或多个进程访问同一块内存区域。共享内存可以提高进程间数据传输的效率,因为数据不需要在进程之间复制。它直接在内存中共享,从而减少了CPU的负载和延迟。SHR 的单位通常是千字节(KB)、兆字节(MB)或吉字节(GB),这取决于共享内存的大小。SHR 列显示的数值是进程实际使用的共享内存的大小,它可能小于或等于进程的虚拟内存(VIRT)。
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ TIME+ 列显示了进程自启动以来占用CPU的累计时间。TIME+ 表示进程自从它开始运行之后,总共占用了CPU多长时间。这个时间是所有CPU核心上运行时间的总和。这个时间通常以分钟(m)、小时(h)或天(d)为单位显示,具体取决于进程占用CPU的时间长度,
COMMAND 命令名/命令行
top
命令使用
常用参数:
-d
:指定每两次屏幕信息刷新之间的时间间隔,如希望每秒刷新一次,则使用:top -d 1
-p
: 通过指定 PID 来仅仅监控某个进程的状态-S
: 指定累计模式-s
: 使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险-i
: 使 top 不显示任何闲置或者僵死的进程-c
: 显示整个命令行而不只是显示命令名
tail
- 尾巴 的意思,
tail
最基本的功能是显示任何文件末尾的内容。默认情况下,它会显示文件的最后10行。 - 命令格式为:
tail [options] [file...]
- 其中
options
是一些可选的命令行参数,用来改变tail
命令的行为;file...
是你想要查看的文件列表。 -f
:跟随模式,tail
会持续显示文件新增的内容,常用于实时监控日志文件。-n [number]
:显示文件的最后[number]
行。例如,-n 20
会显示最后20行。-c [number]
或-c [size]
:显示文件的最后[number]
行的字节数。例如,-c 100
会显示最后100字节的内容。-F
:与-f
类似,但是适合于文件被日志轮转的情况。- 使用
-f
选项时,tail
可以作为一个实时监控工具,特别适用于跟踪日志文件的更新。 tail
经常与其他命令结合使用,通过管道来处理数据流。例如,tail -f logfile.log | grep "error"
可以实时显示包含 "error" 的日志行。
管道符"|"
管道符(|
)是一种强大的 shell 编程构造,它允许你将一个命令的输出作为另一个命令的输入。简单来说,管道符将一个命令的输出“管道化”到另一个命令。
- 管道符允许你将多个命令组合起来,形成一个命令序列。输出一个命令的结果可以作为下一个命令的输入。
- 命令格式为:
command1 | command2 | command3
这里,command1
的输出会成为command2
的输入,command2
的输出又会成为command3
的输入,以此类推。 - 例如,你可以使用
ls | grep "pattern"
来列出当前目录中所有匹配特定模式的文件。
nohup
nohup
(no hang up "不挂起")是一个在 Unix 和类 Unix 操作系统中常用的命令行工具,它允许用户在后台运行命令,即使用户注销或终端会话结束,这些命令也会继续运行。
-
用途:
nohup
用于运行那些需要长时间执行的命令,如下载大文件、运行脚本等,而不必担心终端关闭会导致命令中断。 -
工作原理:
nohup
通过忽略挂起信号(SIGHUP)来防止命令因终端关闭而被终止。当终端会话结束时,大多数进程会收到一个 SIGHUP 信号,告诉它们关闭。nohup
命令告诉操作系统忽略这个信号。 -
输出重定向:
nohup
通常与输出重定向一起使用,如nohup command > output.txt 2>&1 &
,这会将命令的标准输出和标准错误重定向到output.txt
文件,并将命令放入后台执行。 -
退出状态:即使命令成功执行,
nohup
命令本身也会以非零状态退出,因为它捕获了挂起信号。 -
通俗解释
想象你有一个需要很长时间才能完成的任务,比如下载一部电影。你不想一直坐在电脑前等待,也不想因为关闭电脑或不小心关闭了终端窗口而导致下载中断。这时候,nohup 就像是一个“不挂起”的保镖,它会告诉电脑:“即使我(用户)离开了,你(电脑)也不要因为这个原因而停止这个任务。”使用 nohup 的时候,你可以这样想:我告诉电脑,“嘿,不管发生什么,都要完成这个任务,并且把结果保存下来,不要因为任何原因而中断。”然后你就可以放心地去做其他事情,不用担心任务会因为电脑的任何小动作而中断。
-
使用示例
nohup command [arg1] [arg2] ... [argN] [> outputfile 2>&1] [&] - nohup:命令本身。 - command:你想要执行的命令或程序。 - [arg1] [arg2] ... [argN]:传递给命令的参数列表。 - [> outputfile 2>&1]:这是可选的输出重定向部分。> 将命令的标准输出(stdout)重定向到指定的文件。2>&1 表示将标准错误(stderr)重定向到标准输出,也就是同一个文件。如果你省略这部分,nohup 会默认将输出重定向到 nohup.out 文件。 - [&]:这是可选的后台执行部分。& 将命令放入后台执行。如果你的命令已经设计为在后台运行,或者你不需要立即返回命令行,可以省略这个部分。 nohup ping google.com & 这个命令会持续 ping 到 google.com,即使终端关闭。