Linux常用操作和其他

记各种Linux命令和参数很痛苦,用到时,记错又很麻烦,最好的方法就是一边记录一边学啦啦。

一天学一个命令

Linux的命令很多,不积跬步,无以至千里,所以就一天学一个2333。 (其实也不是一天一个,就是想起一个是一个)

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。像windows下的任务管理器。
top的作用是显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等。
top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果再前台执行该命令,它将独占前台,直到用户终止该程序为止。
输入top进入程序,按下q^C退出
可以通过man top显示top的具体用法

常用参数:

-b : 分批处理,各个进程的资源占用情况时动态变化的,所以top显示的也是实时变化的,加上-b可以保留上一个时间间隔的情况
-d : 指定每两次屏幕信息刷新之间的时间间隔,秒为单位
-p <pid> : 查看指定进程的资源管理情况,可多个进程pid使用逗号隔开
-u <user> : 指定用户的进程
-i : 不显示僵死进程和闲置进程
-c : 显示整个命令行,而不是只是命令名
-n : 设置更新次数,比如 -n 2就是在数据更新2次之后就退出

交互命令:

使用top命令进入交互后,就可以使用某些按键实行某些指令:
1 : 查看每个逻辑CPU的基本状况,再按1返回
P : 以CPU使用资源进行排序(默认就是以CPU占有率排序)
M : 以内存占有率进行排序(从大到小,下同)
N : 以pid的大小进行排序
T : 以该进程使用CPU的时间进行排序
<> : 向左或向右移动列,按照所在的列排序
h? : 获取帮助,显示top所有参数和命令列表
<space> : 强制刷新显示

各列含义

PID : 进程id
PPID : 父进程id
UID : 进程所有者的用户id
USER : 进程所有者的用户名
GROUP : 进程所有者的组名
TTY : 启动进程的终端名。不是从终端启动的进程则显示为?
PR : 优先级
NInice : NI值,负值表示高优先级,正值表示低优先级
P : 最后使用的CPU,仅在多CPU环境下有意义
%CPU : 上次更新到现在的CPU时间占用百分比
TIME : 进程使用的CPU时间总计,单位秒
TIME+ : 进程使用的CPU时间总计,单位1/100秒
%MEM : 进程使用的物理内存百分比
VIRT : 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP : 进程使用的虚拟内存中,被换出的大小,单位kb。
RES : 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE : 可执行代码占用的物理内存大小,单位kb
DATA : 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR : 共享内存大小,单位kb
nFLT : 页面错误次数
nDRT : 最后一次写入到现在,被修改过的页面数。
COMMAND : 命令名/命令行
WCHAN : 若该进程在睡眠,则显示睡眠中的系统函数名
S : 进程状态:
—–D : 不可中断的睡眠状态
—–R : 运行
—–S : 睡眠
—–T : 跟踪/停止
—–Z : 僵尸进程

区分PRNI
NI 是优先值,是用户层面的概念, PR是进程的实际优先级, 是给内核(kernel)看的。一般情况下,PR=NI+20。

信息统计区:

第1行任务队列信息

从左到右信息分别是:
当前时间
系统启动持续时间
当前登陆用户数
系统负载,即任务队列的平均长度

第2行进程信息(Tasks)

信息分别是:
total :进程总数
running: 运行的进程数
sleeping: 睡眠的进程数
stop: 停止的进程数
zombie: 僵死进程数

第3行CPU信息

us : 用户空间占用CPU百分比
sy : 内核空间占用CPU百分比;
ni : 用户进程空间内改变过优先级的进程占用CPU百分比
id : 空闲CPU百分比
hi : 硬中断(Hardware Interrupts)占用CPU的百分比 (硬中断是指: 由硬件设备引起的终端)
si : 软中断(Software Interrupts)占用CPU的百分比,(软中断是指:指令或由进程中断,由software引起,是一种系统层级的调用,是一种与内核交互的手段,尤其是错误或异常处理时)

第4行内存信息(Mem)–真实内存

total : 物理内存总量
used : 已使用的物理内存总量
free : 空闲内存总量
buffers : 用作内核缓存的内存量

第5行交换区信息(Swap)–虚拟内存

total : 交换区总量
used : 已使用的交换去总量
free : 空闲交换区总量
cached : 缓冲的交换区总量

nslookup

nslookup是一个命令行工具,查询DNS的命令,解析域名是否正常,在网络故障的时候,也可以用于诊断网络是否连接。

1
nslookup domain [dns-server]

如果没指定dns-server,用系统默认的dns服务器。

telnet

1
telnet — user interface to the TELNET protocol

用于登录远程主机,对远程主机进行管理。传输的内容是明文的,不安全。所以Linux不再开放telnet服务,由ssh代替。(比如,用telnet连接我自己的学生机,就直接被拒绝了233)
之前做,proxy_web_server,用的是telnet连接代理服务器然后发送请求,需要手动构造请求,比如:

1
GET www.baidu.com HTTP/1.1

有点麻烦。

find

find用于文件查找。

1
find .

列出当前目录,及子目录下的所有文件

1
find . -name "1.cpp"

-name 参数表示查找文件的名字,可以使用正则匹配,比如"*.cpp"

1
find . ! -name "*.cpp"

找出当前目录下不是以png结尾的文件

1
find . -regex <正则表达式>

(其实我不太会用正则)

1
find . -path <路径名>

当前目录下,路径中包括某文件的文件

1
find . -type <查找类型>

一般默认是普通文件

1
2
3
4
5
6
7
f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo

关于查找深度的限制

1
find . -maxdepth <最大查找深度>

最大深度

1
find . -mindepth <最小查找深度>

最小查找深度

find 可加的参数有很多:

常用的有-name, -regex, -path, -type, -root, -size, -maxpath, -minpath等。

whereis

whereis命令用于搜索程序名.

只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

1
whereis cat

type

type用来区分某个命令是由shell自带的,还是由shell外部的独立二进制文件提供的。如果是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

如:

cd 是shell内部命令

1
2
type cd
cd is a shell builtin

vim 是由外部的独立的二进制文件提供的:

1
2
type vim
vim is /usr/bin/vim

which

which 用于查询命令是否存在以及命令存放的位置

命令不存在

1
2
which hahah
hahah not found

命令存在

1
2
which nginx
/usr/local/bin/nginx