16

Linux命令大全

前言

在日常开发中我们会做一些服务器部署的工作,对于开发来说,运维部署并不是我们的专项;有些命令不是经常使用,很快就会忘记;在这总结一下日常部署时常用的一些运维命令。

文件操作

tail

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

命令格式:

tail [参数] [文件]

参数:

  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示文件的尾部 n 行内容
  • --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  • -q, --quiet, --silent 从不输出给出文件名的首部
  • -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

示例

image-20191213103608175

image-20191213103723510

一般我们及时使用-f参数实时监控服务器日志。

ll命令

ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名。

Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便。

image-20191213105629006

1、文件类型

  • “-”表示普通文件;
  • “d”表示目录;
  • “l”表示链接文件;
  • “p”表示管理文件;
  • “b”表示块设备文件;
  • “c”表示字符设备文件;
  • “s”表示套接字文件;

2、文件属性

  • r(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
  • w(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • x(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。
    另外,这里还有2个很特殊的属性,平时不怎么
  • s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。
  • t或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。

3、目录/文件个数

对于目录文件,表示它的第一级子目录的个数。注意此处看到的值要减2才等于该目录下的子目录的实际个数。4

4、所有者/分组

表示该文件的所有者/创建者(owner)及其所在的组(group)。

5、文件大小

如果是文件,则表示该文件的大小,单位为字节。
如果是目录,则表示该目录符所占的大小,并不表示该目录下所有文件的大小。

6、修改日期

该文件最后修改的日期时间。

7、文件名称

权限修改

用户组权限修改

chgrp work docServer/

image-20201203143431237

拥有者权限更改

chown work docServer/

image-20201203143658616

ln命令

centos下的ln命令就相当于window下的建立快捷方式,链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的现象,链接文件甚至可以循环链接自己。 类似于编程语言中的递归。
软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。

ln -s 源文件 目标文件

ln -s /opt/soft/node-v8.9.0-linux-x64/bin/vuepress /usr/bin

-s 是代号(symbolic)的意思

  1. ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化
  2. ln的链接又软链接 和硬链接两种,软链接就是ln -s xx xx,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

参数

  • -b 删除,覆盖以前建立的链接
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程

cp命令

cp [选项] 源文件(source) 目标文件或者目录(destination)

  • -a: 是指archive的意思,也说是指复制所有的目录
  • -d: 若源文件为连接文件(link file),则复制连接文件属性而非文件本身
  • -f: 强制(force),若有重复或其它疑问时,不会询问用户,而强制复制
  • -i: 若目标文件(destination)已存在,在覆盖时会先询问是否真的操作
  • -l: 建立硬连接(hard link)的连接文件,而非复制文件本身
  • -p: 与文件的属性一起复制,而非使用默认属性
  • -r: 递归复制,用于目录的复制操作
  • -s: 复制成符号连接文件(symbolic link),即“快捷方式”文件
  • -u: 若目标文件比源文件旧,更新目标文件
cp -f package.json ./backup

mv命令

mv [选项] source destination

  • -f: force,强制直接移动而不询问
  • -i: 若目标文件(destination)已经存在,就会询问是否覆盖
  • -u: 若目标文件已经存在,且源文件比较新,才会更新

系统监控命令

内存监控

free命令

image-20191213111344785

Linux free命令用于显示内存状态。

free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

语法

free [-bkmotV][-s <间隔秒数>]

参数说明

  • -b  以Byte为单位显示内存使用情况。
  • -k  以KB为单位显示内存使用情况。
  • -m  以MB为单位显示内存使用情况。
  • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:

    B = bytes
    K = kilos
    M = megas
    G = gigas
    T = teras
  • -o  不显示缓冲区调节列。
  • -s<间隔秒数>  持续观察内存使用状况。
  • -t  显示内存总和列。
  • -V  显示版本信息。

Men:表示物理内存统计

Swap:表示硬盘上交换分区的使用情况

total:表示物理内存总数(total=used+free)
used:表示系统分配给缓存使用的数量(这里的缓存包括buffer和cache)
free:表示未分配的物理内存总数
shared:表示共享内存
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。
-/+ buffers/cache:表示物理内存的缓存统计

(-buffers/cache) 内存数: (指的第一部分Mem行中的used – buffers – cached)
(+buffers/cache) 内存数: (指的第一部分Mem行中的free + buffers + cached)
(-buffers/cache)表示真正使用的内存数, (+buffers/cache) 表示真正未使用的内存数

vmstat命令

vmstat(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。

常用命令

vmstat 2 2 【在2秒时间内进行2次采样】

image-20191213140826375

参数

Procs(进程):

  • r:运行队列中进程数量
  • b:等待IO的进程数量

Memory(内存):

  • swpd: 使用虚拟内存大小
  • free: 可用内存大小
  • buff: 用作缓冲的内存大小
  • cache: 用作缓存的内存大小

Swap:

  • si: 每秒从交换区写到内存的大小
  • so: 每秒写入交换区的内存大小

IO:(现在的Linux版本块的大小为1024bytes)

  • bi: 每秒读取的块数
  • bo: 每秒写入的块数

system(系统):

  • in: 每秒中断数,包括时钟中断。【interrupt】
  • cs: 每秒上下文切换数。 【count/second】

CPU(以百分比表示):

  • us: 用户进程执行时间(user time)
  • sy: 系统进程执行时间(system time)
  • id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
  • wa: 等待IO时间

CPU监控

top命令

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具

使用权限:所有使用者。

语法

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

参数说明

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

    image-20191213111809397

mpstat命令

mpstat是 Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

常用命令

mpstat -P ALL 2 【ALL表示显示所有CPUs,也可以指定某个CPU;2表示刷新间隔】

image-20191213141621315

参数

  • CPU:处理器ID
  • %usr 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负进程
  • %nice 在internal时间段里,nice值为负进程的CPU时间(%)
  • %sys 在internal时间段里,核心时间(%)
  • %iowait 在internal时间段里,硬盘IO等待时间(%)
  • %irq 在internal时间段里,硬中断时间(%)
  • %soft 在internal时间段里,软中断时间(%)
  • %steal 显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比
  • %guest 显示运行虚拟处理器时CPU花费时间的百分比
  • %idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)

进程监控

ps命令

ps命令用于查看进程统计信息

常用参数:

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。
  • u:使用以用户为主的格式输出进程信息。
  • x:显示当前用户在所有终端下的进程。
  • -e:显示系统内的所有进程信息。
  • -l:使用长(long)格式显示进程信息。
  • -f:使用完整的(full)格式显示进程信息。
ps -aux

最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

image-20191213112328721

列说明:

  • USER: 用户名
  • PID: 进程ID(Process ID)
  • %CPU: 进程的cpu占用率
  • %MEM: 进程的内存占用率
  • VSZ: 进程所使用的虚存的大小(Virtual Size)
  • RSS: 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
  • TTY: 与进程关联的终端(tty)
  • STAT: 进程的状态:进程状态使用字符表示的(STAT的状态码)
  • TIME: 进程使用的总cpu时间
  • COMMAND: 正在执行的命令行命令
ps -ef

image-20191213112434230

  • UID: 用户ID(User ID)
  • PID: 进程ID(Process ID)
  • PPID: 父进程的进程ID(Parent Process id)
  • STIME: 启动时间
  • TTY: 与进程关联的终端(tty)
  • TIME: 进程使用的总cpu时间
  • CMD: 正在执行的命令行命令
ps -ef | grep

| 符号,是个管道符号,表示ps 和 grep 命令同时执行;

grep 命令是查找(Global Regular Expression
Print),能使用正则表达式搜索文本,然后把匹配的行显示出来;

image-20191213112931855

ps -l

image-20191213112521888

  • F: 代表这个程序的旗标 (flag), 4 代表使用者为 super user
  • S: 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
  • UID: 用户ID(User ID)
  • PID: 进程ID(Process ID)
  • PPID: 父进程的进程ID(Parent Process id)
  • C: CPU 使用的资源百分比
  • PRI: 这个是 Priority (优先执行序) 的缩写,详细后面介绍
  • NI: 这个是 Nice 值,在下一小节我们会持续介绍
  • ADDR: 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
  • SZ: 使用掉的内存大小
  • WCHAN: 目前这个程序是否正在运作当中,若为 - 表示正在运作
  • TTY: 登入者的终端机位置
  • TIME: 使用掉的 CPU 时间。
  • CMD 所下达的指令为何
其他

查看进程的启动时间:
ps -eo lstart 启动时间

查看进程的运行时间
ps -eo etime 运行多长时间.

查看进程的pid、启动时间、运行时间
ps -eo pid,lstart,etime | grep [ pid ]

pstree命令

以树状图的方式展现进程之间的派生关

  • pstree -p 显示当前所有进程的进程号和进程id
  • pstree -a 显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。

pidof命令

查找正在运行进程的PID

image-20191213143350781

其他

uptime:显示系统总共运行了多长时间和系统的平均负载

image-20191213143707179

pmap:比较专业的查看内存与进程对应关系工具

image-20191213143920584

磁盘监控

df命令

image-20191213114301424

  • df -h查看磁盘使用情况
  • df -i 查看inode使用情况

du命令

Linux du命令用于显示目录或文件的大小。

du会显示指定的目录或文件所占用的磁盘空间。

参数说明

  • -a或-all 显示目录中个别文件的大小。
  • -b或-bytes 显示目录或文件大小时,以byte为单位。
  • -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
  • -D或--dereference-args 显示指定符号连接的源文件大小。
  • -h或--human-readable 以K,M,G为单位,提高信息的可读性。
  • -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
  • -k或--kilobytes 以1024 bytes为单位。
  • -l或--count-links 重复计算硬件连接的文件。
  • -L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
  • -m或--megabytes 以1MB为单位。
  • -s或--summarize 仅显示总计。
  • -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
  • -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
  • -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
  • --exclude=<目录或文件> 略过指定的目录或文件。
  • --max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
  • --help 显示帮助。
  • --version 显示版本信息。

iostat命令

ostat是一个用于收集显示系统存储设备输入和输出状态统计的简单工具。这个工具常常用来追踪存储设备的性能问题,其中存储设备包括设备、本地磁盘,以及诸如使用NFS等的远端磁盘。

常用命令:

iostat -x -k 2 100 # 2表示刷新间隔,100表示刷新次数

image-20191213144330124

iostat主要是用来监控磁盘I/O,首先输出了CPUs的平均数据(avg-cpu),我们可以看%iowait这一项,除此之外iostat还提供了一些更详细的I/O状态数据

参数

  • /s: 每秒完成的读 I/O 设备次数。
  • w/s: 每秒完成的写 I/O 设备次数。
  • rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节。
  • wkB/s: 每秒写K字节数.是 wsect/s 的一半。
  • avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
  • avgqu-sz: 平均I/O队列长度。
  • await: 平均每次设备I/O操作的等待时间 (毫秒)。
  • svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
  • %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。

网络监控

sar命令

SAR是一个在Unix和Linux操作系统中用来收集、报告和保存CPU、内存、输入输出端口使用情况的命令。SAR命令可以动态产生报告,也可以把报告保存在日志文件中。

常用命令

sar -n DEV 3 100

image-20191213145707669

参数

  • IFACE:网络设备的名称
  • rxpck/s:每秒钟接收到的包数目
  • txpck/s:每秒钟发送出去的包数目
  • rxkB/s:每秒钟接收到的字节数
  • txkB/s:每秒钟发送出去的字节数

netstat命令

netstat命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。

配置参数

  • -a, --all, --listening 显示所有连接中的Socket。
  • -n, --numeric 以数字形式显示地址和端口号。
  • -t, -–tcp 显示TCP传输协议的连线状况。
  • -u, -–udp 显示UDP传输协议的连线状况。
  • -p, --programs 显示正在使用socket的程序名/进程ID
  • -l, --listening 显示监控中的服务器的Socket。
  • -o, --timers 显示计时器。
  • -s, --statistics 显示每个网络协议的统计信息(比如SNMP)
  • -i, --interfaces 显示网络界面信息表单(网卡列表)
  • -r, --route 显示路由表

常用命令

netstat -aup 【输出所有UDP连接状况】

image-20191213150018810

  • netstat -aup # 输出所有UDP连接状况
  • netstat -atp # 输出所有TCP连接状况
  • netstat -s # 显示各个协议的网络统计信息
  • netstat -i # 显示网卡列表
  • netstat -r # 显示路由表信息
查看所有80端口的连接数
netstat -nat|grep -i “80”|wc -l
对连接的IP按连接数量进行排序
netstat -anp | grep ‘tcp\|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
netstat -ntu | awk ‘{print $5}’ | egrep -o “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” | sort | uniq -c | sort -nr
查看TCP连接状态
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn
netstat -n | awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’
netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]’ | sort | uniq -c
查看80端口连接数最多的20个IP
cat /www/web_logs/wzfou.com_access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100
tail -n 10000 /www/web_logs/wzfou.com_access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100
cat /www/web_logs/wzfou.com_access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -100
netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A,i}’ |sort -rn|head -n20
用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr |head -20
查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20
查找较多的SYN连接
netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more
linux下实用iptables封ip段的一些常见命令:
封单个IP的命令是:
iptables -I INPUT -s 211.1.0.0 -j DROP
封IP段的命令是:
iptables -I INPUT -s 211.1.0.0/16 -j DROP
iptables -I INPUT -s 211.2.0.0/16 -j DROP
iptables -I INPUT -s 211.3.0.0/16 -j DROP
封整个段的命令是:
iptables -I INPUT -s 211.0.0.0/8 -j DROP
封几个段的命令是:
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

重启网络

service network restart

兰俊秋雨
5.1k 声望3.5k 粉丝

基于大前端端技术的一些探索反思总结及讨论