开发必备linux命令大全
引用:https://www.cnblogs.com/cscw/p/15026042.html
我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须。接下来将一一详细介绍一些常用的linux的命令
- 文件操作
- 远程登录与操作
- 磁盘挂载
- 进程管理 启动和结束
- 系统性能参数查看
- 网络数据抓取
- shell 脚本命令
- jvm 常用命令
关注公众号,一起交流,微信搜一搜: 潜行前行
1 文件操作命令
find
- find 用于在指定目录下查找文件或子目录,如果不指定查找目录,则在当前目录下查找
- 命令格式:
·find path -option [-print] [ -exec/-ok command {} \ ]
;- print: 将匹配的文件输出到标准输出
- exec:对匹配的文件作为参数 让 command 命令执行。{} 是匹配文件的占位符
- ok: 和 exec 的作用相同,但在执行命令之前,会给出提示,让用户来确定是否执行
- find 示例
touch 和 vim
- touch 可用于创建一个空文件,如果文件存在,则会更改文件的访问时间和修改时间
- touch 示例
- vim Vim是从 vi 发展出来的一个文本编辑器,是在 linux 系统交互界面进行文件查看,编写文本的首选工具
- vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)
less、cat、more、tail 和 head
- less 是linux 必不可少的查看文件工具,功能极其强大
- less 文件后可进行的动作操作和 vim 在命令模式下的操作相似;less在查看文本时的常用动作命令如下
- more 常用于显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比。命令格式:
more 文件
,more 常用操作指令如下
- cat 常用于连接文件并打印到标准输出设备上,也可用于查看文件。格式:
cat fileName [| command ]
,command 默认是 echo,cat会一次性显示整个文件的内容,不分页 - head 是显示一个文件的内容的前多少行;常用命令格式:
head -n 行数值 文件名
- tail 是显示一个文件的内容的后多少行;常用命令格式:
tail -n 行数值 文件名
grep、zgrep
- grep 一般用于在文件中查和匹配模式匹配的每一行数据。命令格式
grep [options] 'pattern' [files]
;grep 支持处理管道的输出数据; pattern 支持正则表达式;files 可以是多个文件,用空格分开 - grep 无法在压缩文件匹配查找数,此时可以用 zgrep,zgrep 适用处理压缩后的gz等格式文件
- grep 和 zgrep 示例
cp
- 文件目录复制可用使用 cp 命令。cp 格式:
cp [选项参数] fileSource... fileTarget
- cp 示例
mv
- mv 可用来移动文件夹、文件 或者 修改文件名、目录名
- mv 示例
rm
- rm 命令用于删除一个文件或者目录;命令格式
rm [options] fileName/filePath
- rm 示例
mdkir
- mdkir命令用于创建目录,
mkdir [-p] dirName
; -p 确保目录名称存在,不存在的就建一个
tar 和 jar
- tar 的命令格式:
tar [-option] fileName/filePath
;tar具有打包和压缩功能,普通文件和文件夹可以被打包成 xxx.tar,如果要压缩,则是在打包之后再压缩,格式是 xxx.tar.gz
- tar 示例
- jar 的命令格式:
jar {c t x u f }[ v m e 0 M i ][-C 目录] fileName
;其中{ ctxu }这四个选项必须选其一。[ v f m e 0 M i ]是可选选项,文件名是必须的
- jar 示例
chmod
- chmod 示例
ln
- 命令格式:
ln [options] [源文件或目录] [目标文件或目录]
;当我们需要在不同的目录,用到相同的文件时,又不想浪费空间复制相同的文件,可以用ln 链接它,相当创建一个快捷图标
- 软链接: 以路径的形式存在。类似于Windows操作系统中的快捷方式;可以对一个不存在的文件名进行链接;可以对目录进行链接;软链接可以 跨文件系统 ,硬链接不可以
- 硬链接: 以文件副本的形式存在。但不占用实际空间;不允许给目录创建硬链接;硬链接只有在同一个文件系统中才能创建
- ln 示例
2 远程登录与操作
ssh
- linux下的ssh服务是一个守护进程(demon),ssh 服务端的进程名为 sshd ,负责实时监听客户端的请求(默认22端口),包括公共秘钥等交换等信息。ssh的客户端可以用 xShell,Securecrt, Mobaxterm等工具进行连接,也可以在 linux 命令窗口使用 ssh 命令连接 ssh 服务端
- 命令格式:
ssh [-p port] user@remoteIp
或者ssh [-p port] user@remoteIp shellCommand
; 会提示输入密码 - ssh示例
sftp
- 登录sftp服务器
sftp -oPort=23 user@remoteIp
scp
- 如果是涉及不同linux系统间的文件复制则用 scp, 格式:
scp [options] fileSource fileTarget
- scp 示例
文件同步 rsync
- 与其他文件传输工具(如 FTP 或 scp)不同,和 scp 功能类似。 rsync 的最大特点是会检查发送方和接收方已有的文件
linux与客户端的上传下载命令:rz、sz
- 用 ssh 管理 linux 服务器时经常需要远程与 win 本地之间交互文件。直接用SecureCRT自带的上传下载功能无疑是最方便的。上传:rz、下载:sz
- 在 window 上使用SecureCRT、XShell 软件,用 rz、sz 进行上传下载
3 磁盘挂载
df
- df 用于查看磁盘空间占用情况:
df [-options] [file]
- df 示例
mount
- mount 命令是经常会使用到的命令,它用于挂载Linux系统外的文件
- mount 示例
4 进程管理 启动和结束
systemctl 和 service
- service 命令本身是一个shell脚本,它会在 /etc/init.d/ 目录查找指定的服务脚本,然后调用该服务脚本来完成任务;service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、查看状态(status)等。命令格式:
service 服务名 [start|stop|restart|reload|status]
- systemctl 命令兼容了 service 命令,且包含其他更强大功能
- systemctl 用来管理 linux系统的多种资源:系统服务、硬件设备、挂载点、socket等;下面则主要介绍关于 service 系统服务的相关命令使用。因为 systemctl 一般用于实现服务自启动的脚本
- xxx.service 文件的详细配置介绍请上网自行查看,下面给个简单的模板介绍
nohup 和 &
- nohup 和 & 组合可以不挂断地在后台运行进程,命令格式:
nohup command [agrs..] [&]
。& 表示程序可以在linux 后台运行,在当前 shell 界面ctrl C
退出,该程序也能继续运行,它可以忽略 SIGINT 信号,不过它会随着 shell 程序的关闭而停止,这是因为 & 运行的进程对 SIGHUP 信号不免疫 - 加上 nohup 就可以做到忽略SIGHUP信号
kill
- 如果在linux遇到需要杀死或停止某进程,可以使用 kill, 示例:
# kill -9 1211
。kill 也不单单用于停止进程,可用kill [-s <指定信号>][程序]
发送指定信号给指定程序,而# kill -l
可列出全部的信号名称。
5 系统性能参数查看
ps
- ps 命令用于显示当前进程的状态。命令格式:
ps [options]
ps -ef
各项指标解释
ps -aux
各项指标解释
lsof
- lsof(List Open Files) 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。命令格式
lsof [options] filename
- lsof 各项指标解释
- lsof 示例
pidof
- pidof 是linux系统中用来查找正在运行进程的进程号(pid)的工具。如果我们提前知道进程名,则可以根据进程名查找pid,命令格式:
pidof [options] 进程名称
- pidof 示例
top
- top 命令是用来监控Linux系统状况,比如cpu、内存,进程等资源使用情况。命令格式:
top [-options]
- top 各项输出指标解释
- top 命令下,查看信息常用快捷键
free
- free 可查看系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。命令格式:
free [-bkmg][-hlot][s delay][-c count]
mpstat
- mpstat 是 Multiprocessor Statistics 的缩写,可以查看多核心的 cpu 中每个计算核心的统计数据。命令格式:
mpstat [-P {cpu|ALL}] [delay [count]]
iostat
- iostat 主要用于输出 CPU 和磁盘 I/O 相关的统计信息,命令格式:
iostat [options] [delay [count]]
- 默认命令
iostat
的各项指标解析
iostat -x -k -d 1 2
的各项指标解析
netstat
- netstat 命令用于显示各种网络相关信息,如网络连接,路由表,网络连接状态。命令格式:
netstat [-options]
- 各项输出指标解析
- netstat 常用命令示例
vmstat
- vmstat (虚拟内存统计)可对操作系统的内存、进程、CPU,磁盘进行监控。相比top,可以看到整个机器的CPU、内存、IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)
- 命令格式
- vmstat 示例
dstat
- vmstat 是对系统的整体情况进行统计,无法对某个进程进行深入分析,所以推荐下 dstat。dstat 是一个可以取代vmstat、iostat、netstat 这些命令的多功能命令工具,执行 dstat 命令,默认情况它会收集-cpu-、-disk-、-net-、-paging-、-system-的数据,一秒钟收集一次。命令格式:
dstat [options] [delay [count]]
,其中使用 -p pid 选项可针对某一进程进行统计监控
- 输出指标解析
- 指定展示各个网卡的收发状态
- 查看全部内存都有谁在占用
- 进程最耗资源统计
sar
- sar 和 dstat 差不多,随你们各自喜好使用,可以从多方面对系统的资源进行监控,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及 IPC 有关的活动等。命令格式:
sar [options] [-A] [-o file] delay [count]
。delay 为采样间隔,count 为采样次数,默认值是1
- 查看 CPU 使用情况:
sar -u 1 2
- 查看内存使用情况
sar -r
- 查看 IO 和传递速率:
sar -b
- 网络接口信息:
sar -n DEV
- 查看磁盘使用情况:
sar -d
。相对 -b 它可以看到各个设备的信息,-b 输出的是汇总信息
- 统计socket连接信息:
sar -n SOCK 1 1
- TCP连接的统计:
sar -n TCP
pidstat
- pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。命令格式:
pidstat [options] [delay [count]]
- 查看所有进程的 CPU 使用情况:
pidstat -u
- 内存使用情况统计:
pidstat -r
- 显示各个进程的IO使用情况:
pidstat -d
- 显示每个进程的上下文切换情况:
pidstat -w
- 指定进程并( -t)显示进程的线程统计信息:
pidstat -t -p 1211
pstree
- ps 命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰,pstree 命令可以以树状图显示进程间的关系。命令格式:
pstree [-p] <pid>
strace
- strace 可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间命令格式:
strace [options] [command]
。如果指定进程pid,要去掉 command
- strace 示例
- 每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值
pmap
- pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息
pmap [options] PID
watch
- watch 可以帮助实现定时输出的命令结果,比如 netstat 没有间隔输出结果的功能。
watch [-options] <command>
- watch 示例
6 网络数据抓取
tcpdump
- tcpdump 是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于大多数的类Unix系统操作系统;tcpdump 命令格式为:
- 表达式选项 大体可以分成三种过滤条件,“类型”、“方向”和“协议”,这三种条件的搭配组合就构成了我们的过滤表达式
- 类型关键字:主要包括host,net,port, 例如 host 210.45.114.211,指定主机 210.45.114.211,net 210.11.0.0 指明210.11.0.0是一个网络地址,port 21 指明端口号是21
- 传输方向的关键字:主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.45.114.211 ,指明ip包中源地址是210.45.114.211, dst net 210.11.0.0 指明目的网络地址是210.11.0.0
- 协议的关键字:主要包括 ether,ip,ip6,arp,rarp,tcp,udp等类型,及这几个的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的(更具体的请自行查看官方文档)
第一行:“tcpdump: verbose output suppressed, use -v or -vv for fullprotocol decode”;
提示使用选项 -v 和 -vv,可以看到更全的输出内容
第二行“listening on eth0, link-type EN10MB (Ethernet), capture size 65535bytes”;
我们监听的是通过 eth0 这个NIC设备的网络包,且它的链路层是基于以太网的,要抓的包大小限制是65535字节。包大小限制值可以通过-s选项来设置
第三行”12:40:33.569037 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4, ethertypeIPv4 (0x0800),”
12:40:33.569037 分别对应着这个包被抓到的“时”、“分”、“秒”、“微妙”。 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4 表示MAC地址 00:19:e0:b5:10:94 发送到MAC地址为 00:1a:a0:31:39:d4 的主机,ethertype IPv4 (0x0800)表示Ethernet帧的协议类型为ipv4(即代码为0x0800)
第四行”length 66: 210.45.123.249.27236 > 172.16.0.11.1111: Flags [S],seq 1624463808;
length 66表示以太帧长度为66。 210.45.123.249.27236 表示这个包的源IP为210.45.123.249,源端口为27236,’>’表示数据包的传输方向, 172.16.0.11.1111, 表示这个数据包的目的端ip为172.16.0.11,目标端口为1111,1111端口是我的一个web服务器监听端口。Flags是[S],表明是syn建立连接包(即三次握手的第一次握手),seq1624463808 序号为1624463808,这个其实就是TCP三次握手的第一次握手:client(210.45.123.249)发送syn请求建立连接包
第五行” win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0”
win 8192 表示窗口大小为8192字节。options[mss 1460,nop,wscale 2,nop,nop,sackOK]为tcp首部可选字段mss 1460表示mss是发送端(客户端)通告的最大报文段长度,发送端将不接收超过这个长度的TCP报文段(这个值和MTU有一定关系)。nop是一个空操作选项, wscale指出发送端使用的窗口扩大因子为2, sackOK 表示发送端支持并同意使用SACK选
- tcpdump 示例
- 最后一命令的 tcp[13]&2!=0 可能有点怪,这里解析一下,标志位(URG,ACK,PSH,RST,SYN,FIN)在 tcp头部的第 13 个字节中,而 SYN 则在低第二位(xxxxxx10,十进制是2),和2进行与操作,即可判断报文是否 syn 报文
nc
- nc 命令实现任意TCP/UDP端口的侦听,nc可以作为 server 以TCP或UDP方式侦听指定端口。nc 也可以作为 client 发起TCP或UDP连接
- nc 示例
curl
- curl 是一款很强大的 http 命令行工具。它支持文件的上传和下载。命令格式:
curl [option] [url]
- curl 示例
wget
- wget 是一个下载文件的工具,对于Linux用户是必不可少的工具,因为我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议。命令格式:
wget [-options] [url]
- wget 示例
7 shell 脚本命令
shell 程序语法
- 要想写shell 脚本,则需要熟悉下 shell 程序基本语法
- 之前写的一篇文章:shell教程及脚本编写
sed
- 如果涉及到文本处理,可试试 sed,sed 采用的是流编辑模式,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据
- 之前写的一篇文章:sed教程-linux命令
awk
- awk 同样适合处理文本,且更强大; 和 sed 命令类似,awk 命令也是逐行扫描文件,寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理
- 之前写的一篇文章:awk教程-linux命令
xargs
- xargs 是一个强有力的命令,在 linux 命令管道传递中,它能够捕获上一个命令的输出,然后传递给另外一个命令。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代
- 命令格式:
command |xargs [-options] nextCommand
- xargs 示例
8 jvm 常用命令
jps
- java 版的 ps 命令,查看java进程及其相关的信息,如果想找到一个 java 进程的 pid,那可以用 jps 命令替代linux中的 ps 命令了,命令格式:
jps [-options] [hostIP]
。如果要查看其他 hostIP 机器上的jvm进程,需要在待查看机器上启动 jstatd
- jps 示例
jinfo
- jinfo 是用来查看JVM参数和动态修改部分JVM参数的命令;命令格式:
jinfo [-option] <pid>
- jinfo 示例
jstat
- jstat 命令是使用频率比较高的命令,主要用来查看JVM运行时的状态信息,包括内存状态、垃圾回收等;命令格式:
jstat [-option] pid [interval] [count]
,pid 是进程id,interval 是打印间隔时间(毫秒),count是打印次数(默认一直打印)
- jstat 示例
jstack
- jstack 是用来查看 jvm 线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用 jstack 命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack 还可以查看程序崩溃时生成的 core 文件中的 stack 信息;命令格式:
jstack [-Flm] <pid>
- jstack 示例,查看 pid = 1211 的线程栈
jmap
- jmap 是用来生成堆dump文件 或 查看堆相关的各类信息的命令,例如查看 finalize 执行队列,heap 的详细信息和使用情况;命令格式:
jmap [-option] <pid>
- jmap 示例,dump 出 pid=1211 java进程的内存堆文件
欢迎指正文中错误
参考文章
本文来自博客园,作者:数据驱动,转载请注明原文链接:https://www.cnblogs.com/shun7man/p/17306049.html