这篇博客主要记录自己在使用Linux服务器时,常使用的一些命令以及需要掌握的知识。其中部分内容参考了一些博主的总结,并附上了参考链接,后续内容会根据自己的学习历程持续更新。
top 命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。为了显示详细的进行命令,这里输入:
1 | top -c |
下面进行分析:
第一行 系统信息
显示信息 | 含义 |
---|---|
03:02:19 | 系统时间 |
up 175 days,21:01 | 已运行时间 |
1 user | 当前登录用户,包含系统用户 |
47.94,36.10,30.82 | 负载均衡-load average,即1,5,15分钟的负载情况 |
负载均衡数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行 进程信息
显示信息 | 含义 |
---|---|
Task:794 total | 总进程数 |
6 running | 正在运行的进程数 |
389 sleeping | 睡眠的进程数 |
4 stopped | 停止的进程数 |
109 zombie | 僵尸进程数 |
第三行 CPU使用情况
显示信息 | 含义 |
---|---|
Cpu(s):20.2%us | CPU占用率-用户进程占cpu百分比,user space |
7.1%sy | 系统占用CPU百分比,sysctl |
0.0%ni | 改变过优先级的进程占CPU百分比 |
72.6%id | 空闲CPU百分比,idolt |
0.0%wa | IO等待占用CPU百分比,wait |
0.0%hi | 硬中断占用CPU的百分比,Hardware IRQ |
0.0%si | 软中断占用CPU的百分比,Software Interrupts |
0.0%st | 窃取时间,与虚拟化有关,你的虚拟机中系统花了百分之多少等待得到真正的cpu资源,steal time |
第四行 内存状态
显示信息 | 含义 |
---|---|
522616916k total | 内存总量 |
380851436k used | 内存使用量 |
141765480k free | 内存空闲量 |
1814552k buffers | 缓存的内存量 |
第五行 swap交换分区信息
显示信息 | 含义 |
---|---|
0k total | 交换分区总量 |
0k used | 交换分区使用量 |
0k free | 交换分区空闲量 |
107261708k cached | 缓冲的交换分区总量 |
备注:
可用内存 = free + buffer + cached
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。
- 纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
第六行 空行
第七行 各进程(任务)的状态监控
显示信息 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级 |
NI | nice值。越小优先级越高,最小-20,最大20(用户设置最大19) |
VIRT | 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态,D = 不可中断的睡眠状态,R = 运行,S = 睡眠,T = 跟踪/停止,Z = 僵尸进程 |
%CPU | 进程占用CPU百分比 |
%MEM | 进程占用物理内存百分比 |
TIME+ | 进程运行时间 |
COMMAND | 进程命令 |
备注:
- PR 越低,优先级越高,PRI(new)=PRI(old)+nice;改变优先级:进入top后按”r”–>输入进程PID–>输入nice值
top后使用的命令
命令 | 含义 |
---|---|
P | 以占据CPU百分比排序 |
M | 以占据内存百分比排序 |
T | 以累积占用CPU时间排序 |
q | 退出top查看页面命令 |
s | 修改刷新时间间隔。按下s键,然后按下数字,即可修改刷新时间间隔为你输入的数字,单位为秒。例如:按下s键,在按数字1键,即可实现每秒刷新一次 |
k | 终止指定的进程。按下k键—>再输入要杀死的进程的pid—>按enter键—>(选择信号类型,以数字标示,默认15为杀死)本步可省略按enter键(常用为-9) |
参考
孤儿进程和僵尸进程
在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。每当出现 孤儿进程的时候,内核会把孤儿进程的父进程设为init进程(进程号为1),并由init进程对它们完成状态收集工作。因此孤儿进程不会有什么危害。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,内核释放该子进程所有的资源,而父进程并没有调用wait()或waitpid()获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程,比如会一直占用进程号等。若一个父进程,定期产生一个子进程,但对子进程退出之后的事一概不问,便产生了大量僵尸进程。我们可以通过kill命令杀死僵尸进程 ,但僵尸进程并非问题根源,罪魁祸首是产生监视进程的父进程,因此我们只需要kill掉那个父进程,僵尸进程便会由init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源,进而完成状态收集工作。因此僵尸进程是有危害的。
参考
pip和pip3命令
pip3只有在安装了python3.x之后才会有,比如安装flask库,分情况说明:
- 此时,若安装了python2.x和python3.x:
pip install flask
,会安装在目录python2.x/site-packages/
下;pip3 install flask
,会安装在目录python3.x/site-packages/
下;- 若使用python3.x执行程序,那么就不能
import python2.x/site-packages/
来使用python2.x的库。
- 只安装python2.x:
- 只能用
pip install flask
命令安装,会安装在目录python2.x/site-packages/
下;
- 只能用
- 只安装了python3.x:
pip install flask
和pip3 install flask
,都会安装在目录python3.x/site-packages/
下;
常用的一些安装命令:
1 | # pip 安装超时问题 |
Vim命令
Vim有四种模式:
- 正常模式:可以使用快捷键命令,或按:输入命令行。
- 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
- 可视化模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
- 替换模式:正常模式下,按R进入。
查找
正常模式下:
- /something: 在后面的文本中查找something。
- ?something: 在前面的文本中查找something。
定位到某一行
正常模式下:
- 输入:n,定位到第n行。
调到最后一行
- 跳到文本的最后一行:按“G”,即“shift+g”
- 跳到最后一行的最后一个字符 :先重复1的操作即按“G”,之后按“$”键,即“shift+4”。
- 跳到第一行的第一个字符:先按两次“g”,
- 跳转到当前行的第一个字符:在当前行按“0”。
- 需要按行快速移动光标时,可以使用键盘上的编辑键Home,快速将光标移动至当前行的行首。除此之外,也可以在命令模式中使用快捷键”^”(即Shift+6)或0(数字0)。
- 如果要快速移动光标至当前行的行尾,可以使用编辑键End。也可以在命令模式中使用快捷键“$”(Shift+4)。与快捷键”^”和0不同,快捷键”$”前可以加上数字表示移动的行数。例如使用”1$”表示当前行的行尾,”2$”表示当前行的下一行的行尾。
- I是定位到行首,A是定位到行末。
参考
git命令
克隆
1 | git clone https://github.com/KunchiLiu/deep_pay |
提交
1 | git add . |
本地修改,pull最新
本次修改后无法pull,应先还原,再pull
1 | git checkout . |
删除已push的文件/文件夹
1 | git rm -r --cached notes.md |
强制覆盖
1 | git fetch -all |
版本回退
1 | git log |
Mac下github.com无法访问
参考如下解决方案
kill命令
kill所有python进程
killall方式
1
killall python
pkill方式
1
sudo pkill python
ps方式(脚本)
1
ps -ef | grep "python train_mini_batch.py" | grep -v grep | awk '{print $2}' | xargs kill -9
命令 | 含义 |
---|---|
ps -ef | 是Red Hat 里查看所有进程的命令。检索结果作为下一条命令的输入。 |
grep “python train_mini_batch.py” | 是所有含有关键字“LOCAL=NO”的进程。 |
grep -v grep | 从列出的进程中去除含有关键字“grep”的进程。 |
awk ‘{print $2}’ | 列出检索出所有的进程号PID。 |
xargs kill -9 | xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该令。 |
参考
Shell 脚本
/bin/bash/^M错误
有时候编写脚本时会出现类似标题列出的错误,这个问题大多数是因为你的脚本文件在windows下编辑过。windows下,每一行的结尾是\n\r
,而在linux下文件的结尾是\n
,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r
,用cat -A file.sh
时你可以看到这个\r
字符被显示为^M
,如下:
1 | #!/bin/bash^M$ |
这时候只需要删除这个字符就可以了,可以使用命令sed -i 's/\r$//' file.sh
,删除后如下:
1 | #!/bin/bash$ |