记录一下本人工作中常用到的linux指令,以便查看,随时更新。
常用命令
find -name -filename //查找文件名为filename的文件
相关参数
和时间相关参数
-atime,-ctime,-mtime,以-mtime为例:
-mtime n:n为数字,意义为在n天之前的“一天之内”被更改过的文件。
-mtime +n:列出在n天之前(不含n天本身)被更改过的文件名。
-mtime -n:列出在n天之内(含n天本身)被更改过的文件名。
-newer file:file为一个存在的文件,列出比file还要新的文件名。
用户或用户组相关参数
-uid n:n为数字,这个数字是用户的账号ID,即UID。
-gid n:n为数字,这个数字是用户组名的ID,即GID。
-user name:name为用户账号名称。
-group name:name为用户组名。
-nouser:寻找文件的所有者不存在于/etc/passwd中的文件。
-nogroup:寻找文件的所有用户组不存在于/etc/group中的文件。
常用命令
cat:由第一行开始显示文件内容。
more:一页一页的显示文件内容。
less:与more类似,查找关键字功能更完善。
head:只看头几行。
tail:只看结尾几行
相关参数
cat(concatenate)
-E:将结尾的断行字符$显示出来。
-n:打印出行号,连同空白行也会有行号。
-T:将(Tab)按键以^I显示出来。
-v:列出一些看不出来的特殊字符。
-A:相当于-vET的整合参数,可列出一些特殊字符,而不是空白而已。
more
空格键(space):代表向下翻一页。
Enter:代表向下滚动一行。
-f:立刻显示出文件名以及目前显示的行数。
q:代表立刻离开more,不再显示该文件内容。
b:代表向上翻一页,该操作只对文件有用,对管道无用。
less
操作:
空格键(space)/[PageDown]:向下翻动一页。
[PageUp]:向上翻动一页。
/字符串:向下查询“字符串”功能。
?字符串:向上查询“字符串”功能。
n:重复前一个查询。
N:反向重复前一个查询。
q:离开less这个程序。
head
head [-n number] 文件
参数:
-n:后面接数字,代表显示几行的意思。
不带参数默认显示前10行。
tail
tail [-n number] 文件
参数:
-n:后面接数字,代表显示几行的意思。
-f:表示持续检测后面所接的文件名,要等到按下ctrl+c才会结束检测。
不带参数默认显示后10行。
diff [参数] 源文件 目标文件
-b:忽略一行当中仅有多个空白的区别,例如(“about me”与“about me”视为相同)
-B:忽略空白行的区别。
-i:忽略大小写的不同。
ps -ef //使用标准语法查看系统上的每个进程
ps -aux //使用 BSD 语法查看系统上的每个进程
ps -T -p PID //查看PID进程中的所有线程
top -H -p PID //查看PID进程的占用资源排行
kill -9 pid //终止该pid进程
free -m//以MB的形式显示内存使用情况
使用-b(byte)、-m(MB)、-k(KB)和-g(GB)来显示单位
uname -a //显示所有系统相关信息
参数
-a:所有系统相关信息,包括下面的数据都会被列出来。
-s:系统内核名称。
-r:内核的版本。
-m:本系统的硬件名称,例如i686或x86_64等。
-p:CPU的类型,与-m类似,只是显示的是CPU的类型。
-i:硬件的平台(ix86)。
uptime
解释:系统现在时间是17:54,已经运行了3天20小时51分钟,共5个用户;最后是系统负载:1分钟内系统平均负载为75%,3分钟内系统平均负载为88%,15分钟内系统平均负载为84%
uptime -p //更人性化的格式显示系统运行了多长时间
uptime -s //显示系统开始运行的时间和日期
netstat -p
参数:
-a:将目前系统上所有的连接、监听、Socket数据都列出来。
-t:列出tcp网络数据包的数据。
-u:列出udp网络数据包的数据。
-n:不列出进程的服务名称,以端口号(port number)来显示。
-l:列出目前正在网络监听(listen)的服务。
-p:列出该网络服务的进程PID。
1、Proto:网络的数据包协议,主要分为TCP和UDP数据包。
2、Recv-Q:非由用户进程连接到此socket的复制的总字节数。
3、Send-Q:非由远程主机传送过来的acknowledged总字节数。
4、LocalAddress:本地的IP端口情况。
5、ForeignAddress:远程主机的IP端口情况。
6、State:连接状态,建立连接(ESTABLISED)、监听(LISTEN)。
7、PID/Program name:进程号/进程名
从LocalAddress结合State可以判断出当前服务器上哪个端口有没有被监听。
dmesg命令用于打印linux系统开机启动信息,kernel 会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用 dmesg 来查看。开机信息亦保存在 /var/log 目录中,名称为 dmesg 的文件里。
dmesg | more //用more的形式去查看dmesg信息
dmesg | grep sda //显示所有被内核检测到的硬盘设备
dmesg | grep -i hd //查看硬盘相关信息
vmstat 检测系统资源的变化
vmstat 1 3 统计目前系统资源状态,每秒1次,共计3次
vmstat 1 统计目前系统资源状态,每秒1次
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲的物理内存的大小,剩余两个多G。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用4344KB
cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用8888多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间。
iostat
iostat 1 每1秒检测一次
tps:平均每秒钟的传送次数,与数据传输的“次数”有关,非容量;
kB_read/s:开机到现在平均的读取单位;
kB_wrtn/s:开机到现在平均的写入单位;
kB_read:开机到现在总共读出来的文件单位;
kB_wrtn:开机到现在总共写入的文件单位;
df -h //列出文件系统的整体磁盘使用量
在显示的结果中要特别留意根目录的剩余容量(上图红框中的),因为所有的数据都是从根目录衍生出来的,因此当根目录的剩余容量为0时,系统的问题就很大了。
df -ih //不用硬盘容量,而以inode的数量来显示
当inode使用率达到100%时,即使硬盘空间还有剩余,也无法在目录下放置新文件了。
du -h //分别显示本路径下目录/文件大小
du -sh //显示本目录磁盘总占用
fdisk -l //查看磁盘分区情况
可以看到当前系统内有两块硬盘,磁盘文件名为/dev/sda和/dev/sdb,容量分别均为240G,如果要查看磁盘的详细内容,可以用fdisk /dev/sda命令去查看。注意/dev/sda后不要加上数字,加上数字变成该磁盘上的某一分区了,会使fdisk命令报错。
lsblk
lsblk命令的英文是“list block”,即用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系。
du主要是检查磁盘空间占用情况,统计目录或者文件大小的。
fdisk一般用来磁盘分区,也可以用来查看磁盘分区情况。
这里可以看到/dev/sdb和/dev/sda两个磁盘,但是在df命令中看不到/dev/sda,因为/dev/sda上面没有跑文件系统。
lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,这个命令很好用,因为可以让电脑上的磁盘和分区信息很清晰。
mount 或mount -l //显示目前的挂载信息
mount 设备文件名 挂载点 //将设备文件名挂载到挂载点
umount -f //设备文件名或挂载点 //强制卸载
umount -n //不更新/etc/mtab的情况下卸载
cat /etc/fstab ///etc/mtab文件记录了当前系统的挂载情况
tar -zcv -f filename.tar.gz /home/ACL //将ACL文件夹压缩并命名为filename.tar.gz
tar -zxv -f filename.tar.gz -C /home/ACL //将filename.tar.gz文件夹解压到ACL目录
ifconfig 查看所有活动网卡信息
ifconfig -a 查看所有网卡信息
ifconfig eth0 查看具体网卡信息
ifconfig eth0 up/down 激活/禁用网卡
ifup/ifdown eth0 激活/禁用网卡(重新读取配置文件)
ip //查看ip指令使用参数
查看网络接口配置情况:
ip addr
查看网络接口属性信息
ethtool bond0//查看bond0网口的配置信息
ethtool eth0//查看bond0网口的配置信息
ping 10.15.114.27 -c 4 //ping4次
route -n //以数字的形式显示路由信息
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE 网卡名称 要与配置文件名中一致
TYPE=Ethernet 以太网
ONBOOT=yes 重启操作系统后激活网卡
BOOTPROTO none 或者static是静态设置ip;dhcp是自动获取
IPADDR ip地址
GATEWAY 网关 默认路由
PREFIX 子网掩码,或使用NETMASK=255.255.255.0
cat /etc/sysconfig/network-scripts/ifcfg-bond0
iftop
参数
-i 设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n 使host信息默认直接都显示IP,如:# iftop -n
-N 使端口信息默认直接都显示端口号,如: # iftop -N
-F 显示特定网段的进出流量,如# iftop -F 121.11.1.0/24或# iftop -F 121.11.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p 使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b 使流量图形条默认就显示;
-P 使host信息及端口信息默认就都显示;
快捷键
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按N切换显示端口号或端口服务名称;
按D切换是否显示远端目标主机的端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按q退出监控
iftop -i bond0 //监控bond0的实时网络带宽信息
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
nload
nload 是一个 linux 自由软件工具,通过提供两个简单的图形来帮助linux用户和系统管理员来实时监控网络流量以及宽带使用情况:一个是进入流量,一个是流出流量。
参数:
-i:进入网卡的流量图的显示比例最大值设置,默认10240 kBit/s.
-m:不显示流量图,只显示统计数据。
-o:出去网卡的流量图的显示比例最大值设置,默认10240 kBit/s.
-t:显示数据的刷新时间间隔,单位是毫秒,默认500。
-u:设置右边Curr、Avg、Min、Max的数据单位,默认是自动变的.注意大小写单位不同!
h|b|k|m|g h: auto, b: Bit/s, k: kBit/s, m: MBit/s etc.
H|B|K|M|G H: auto, B: Byte/s, K: kByte/s, M: MByte/s etc.
-U:设置右边Ttl的数据单位,默认是自动变的.注意大小写单位不同(与-u相同)
示例:
如果不带选项来运行nload,那么它会监控所有自动检测到的设备,你可以通过左右方向键来显示其中的任何一个设备(网卡)的信息。
nload
nload 默认分为上下两块:
上半部分是:Incoming也就是进入网卡的流量,
下半部分是:Outgoing,也就是从这块网卡出去的流量,
每部分都有当前流量(Curr),
平均流量(Avg),
最小流量(Min),
最大流量(Max),
总和流量(Ttl)这几个部分,看起来还是蛮直观的
nload -u m //使用MBit/s显示流量信息
nload -t 130 //设置刷新显示事件间隔为130毫秒
nload wlan0 eth0 //同时监控wlan0和eth1