Linux开发运维常用命令
一、Java开发常用命令
1、前言
一般java开发者来说,或多或少都会接触到linux,因为许多服务都需要部署等,因此一些java常用的linux命令需要每一个java开发者都了解。这里总结一波,方便后期查找。入门级常用linux命令可以参考:Linux常用命令操作
2、常用命令简介
- Linux关机,重启
- 查看系统,CPU信息
- 建立软连接
- rpm相关
- sshkey
- 命令重命名
- 同步服务器时间
- 后台运行命令
- 强制活动用户退出
- 查看命令路径
- 查看进程所有打开最大fd数
- 配置dns
- nslookup,查看域名路由表
- last, 最近登录信息列表
- 设置固定ip
- 查看进程内加载的环境变量
- 查看进程树找到服务器进程
- 查看进程启动路径
- 添加用户, 配置sudo权限
- 强制关闭进程名包含xxx的所有进程
- vim操作
- 打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)
- 查看磁盘, 文件目录基本信息
- wc命令
- 常用压缩, 解压缩命令
- 压缩命令
- 解压缩命令
- 变更文件所属用户, 用户组
- cp, scp, mkdir
- 比较两个文件
- 日志输出的字节数,可以用作性能测试
- 查看, 去除特殊字符
- 处理因系统原因引起的文件中特殊字符的问题
- tee, 重定向的同时输出到屏幕
- grep
- awk
- find检索命令
- 查看什么进程使用了该端口
- 获取本机ip地址
- iptables
- nc命令, tcp调试利器
- tcpdump
- 跟踪网络路由路径
- ss
- netstat
- top
- dmesg,查看系统日志
- iostat,磁盘IO情况监控
- free,内存使用情况
- sar,查看网络吞吐状态
- vmstat, 给定时间监控CPU使用率, 内存使用, 虚拟内存交互, IO读写
3、常用命令详解
3.1 基础命令
Linux关机,重启
1 | # 关机 |
查看系统,CPU信息
1 | # 查看系统内核信息 |
建立软连接
1 | ln -s /usr/local/jdk1.8/ jdk |
rpm相关
1 | # 查看是否通过rpm安装了该软件 |
sshkey
1 | # 创建sshkey |
命令重命名
1 | # 在各个用户的.bash_profile中添加重命名配置 |
同步服务器时间
1 | #查看当前时间 |
后台运行命令
1 | # 后台运行,并且有nohup.out输出 |
强制活动用户退出
1 | # 命令来完成强制活动用户退出.其中TTY表示终端名称 |
查看命令路径
1 | which <命令> |
查看进程所有打开最大fd数
1 | ulimit -n |
配置dns
1 | vim /etc/resolv.conf |
nslookup,查看域名路由表
1 | nslookup google.com |
last最近登录信息列表
1 | # 最近登录的5个账号 |
设置固定ip
1 | ifconfig em1 192.168.5.177 netmask 255.255.255.0 |
查看进程内加载的环境变量
1 | # 也可以去 cd /proc 目录下, 查看进程内存中加载的东西 |
查看进程树找到服务器进程
1 | ps auwxf |
查看进程启动路径
1 | cd /proc/xxx(进程号) |
添加用户, 配置sudo权限
1 | # 新增用户 |
强制关闭进程名包含xxx的所有进程
1 | ps aux|grep xxx | grep -v grep | awk '{print $2}' | xargs kill -9 |
3.2 磁盘,文件,目录相关操作
vim操作
1 | #normal模式下 g表示全局, x表示查找的内容, y表示替换后的内容 |
打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)
1 | # 在normal模式下 |
查看磁盘, 文件目录基本信息
1 | # 查看磁盘挂载情况 |
wc命令
1 | # 查看文件里有多少行 |
压缩命令
1 | tar czvf xxx.tar 压缩目录 |
解压缩命令
1 | tar zxvf xxx.tar |
变更文件所属用户, 用户组
1 | chown shawn:shawn xxx.log |
cp, scp, mkdir
1 | #复制 |
比较两个文件
1 | diff -u 1.txt 2.txt |
日志输出的字节数,可以用作性能测试
1 | # 如果做性能测试, 可以每执行一次, 往日志里面输出 “.” , 这样日志中的字节数就是实际的性能测试运行的次数, 还可以看见实时速率. |
查看, 去除特殊字符
1 | # 查看特殊字符 |
处理因系统原因引起的文件中特殊字符的问题
1 | # 可以转换为该系统下的文件格式 |
tee重定向的同时输出到屏幕
1 | awk '{print $0}' xxx.log | tee test.log |
3.3 检索相关
grep
1 | # 反向匹配, 查找不包含xxx的内容 |
awk
1 | # 以':' 为分隔符,如果第五域有user则输出该行 |
find检索命令
1 | # 在目录下找后缀是.mysql的文件 |
3.4 网络相关
查看什么进程使用了该端口
1 | lsof -i:port |
获取本机ip地址
1 | /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" |
iptables
1 | # 查看iptables状态 |
nc命令, tcp调试利器
1 | #给某一个endpoint发送TCP请求,就将data的内容发送到对端 |
tcpdump
1 | # dump出本机12301端口的tcp包 |
跟踪网络路由路径
1 | # traceroute默认使用udp方式, 如果是-I则改成icmp方式 |
ss
1 | # 显示本地打开的所有端口 |
netstat
1 | # 输出每个ip的连接数,以及总的各个状态的连接数 |
3.5 监控linux性能命令
top
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序, 然后回车。而大写的 R 键可以将当前的排序倒转
列名 | 含义 |
---|---|
PID | 进程id |
PPID | 父进程id |
RUSER | Real user name |
UID | 进程所有者的用户id |
USER | 进程所有者的用户名 |
GROUP | 进程所有者的组名 |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
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 | 最后一次写入到现在,被修改过的页面数。 |
S | 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程 |
COMMAND | 命令名/命令行 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags | 任务标志,参考 sched.h |
dmesg,查看系统日志
1 | dmesg |
iostat,磁盘IO情况监控
1 | iostat -xz 1 |
free,内存使用情况
1 | free -m |
sar,查看网络吞吐状态
1 | # sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和 |
vmstat, 给定时间监控CPU使用率, 内存使用, 虚拟内存交互, IO读写
1 | # 2表示每2秒采集一次状态信息, 1表示只采集一次(忽略既是一直采集) |
- r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
- b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
- swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
- free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
- buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
- cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多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时间。
二、Linux必备150个命令大全
命令 | 功能说明 |
---|---|
线上查询及帮助命令 (2 个) | |
man | 查看命令帮助,命令的词典,更复杂的还有 info,但不常用。 |
help | 查看 Linux 内置命令的帮助,比如 cd 命令。 |
文件和目录操作命令 (18 个) | |
ls | 全拼 list,功能是列出目录的内容及其内容属性信息。 |
cd | 全拼 change directory,功能是从当前工作目录切换到指定的工作目录。 |
cp | 全拼 copy,其功能为复制文件或目录。 |
find | 查找的意思,用于查找目录及目录下的文件。 |
mkdir | 全拼 make directories,其功能是创建目录。 |
mv | 全拼 move,其功能是移动或重命名文件。 |
pwd | 全拼 print working directory,其功能是显示当前工作目录的绝对路径。 |
rename | 用于重命名文件。 |
rm | 全拼 remove,其功能是删除一个或多个文件或目录。 |
rmdir | 全拼 remove empty directories,功能是删除空目录。 |
touch | 创建新的空文件,改变已有文件的时间戳属性。 |
tree | 功能是以树形结构显示目录下的内容。 |
basename | 显示文件名或目录名。 |
dirname | 显示文件或目录路径。 |
chattr | 改变文件的扩展属性。 |
lsattr | 查看文件扩展属性。 |
file | 显示文件的类型。 |
md5sum | 计算和校验文件的 MD5 值。 |
查看文件及内容处理命令(21 个) | |
cat | 全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。 |
tac | tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。 |
more | 分页显示文件内容。 |
less | 分页显示文件内容,more 命令的相反用法。 |
head | 显示文件内容的头部。 |
tail | 显示文件内容的尾部。 |
cut | 将文件的每一行按指定分隔符分割并输出。 |
split | 分割文件为不同的小片段。 |
paste | 按行合并文件内容。 |
sort | 对文件的文本内容排序。 |
uniq | 去除重复行。oldboy |
wc | 统计文件的行数、单词数或字节数。 |
iconv | 转换文件的编码格式。 |
dos2unix | 将 DOS 格式文件转换成 UNIX 格式。 |
diff | 全拼 difference,比较文件的差异,常用于文本文件。 |
vimdiff | 命令行可视化文件比较工具,常用于文本文件。 |
rev | 反向输出文件内容。 |
grep/egrep | 过滤字符串,三剑客老三。 |
join | 按两个文件的相同字段合并。 |
tr | 替换或删除字符。 |
vi/vim | 命令行文本编辑器。 |
文件压缩及解压缩命令(4 个) | |
tar | 打包压缩。oldboy |
unzip | 解压文件。 |
gzip | gzip 压缩工具。 |
zip | 压缩工具。 |
信息显示命令(11 个) | |
uname | 显示操作系统相关信息的命令。 |
hostname | 显示或者设置当前系统的主机名。 |
dmesg | 显示开机信息,用于诊断系统故障。 |
uptime | 显示系统运行时间及负载。 |
stat | 显示文件或文件系统的状态。 |
du | 计算磁盘空间使用情况。 |
df | 报告文件系统磁盘空间的使用情况。 |
top | 实时显示系统资源使用情况。 |
free | 查看系统内存。 |
date | 显示与设置系统时间。 |
cal | 查看日历等时间信息。 |
搜索文件命令(4 个) | |
which | 查找二进制命令,按环境变量 PATH 路径查找。 |
find | 从磁盘遍历查找文件或目录。 |
whereis | 查找二进制命令,按环境变量 PATH 路径查找。 |
locate | 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。 |
用户管理命令(10 个) | |
useradd | 添加用户。 |
usermod | 修改系统已经存在的用户属性。 |
userdel | 删除用户。 |
groupadd | 添加用户组。 |
passwd | 修改用户密码。 |
chage | 修改用户密码有效期限。 |
id | 查看用户的 uid,gid 及归属的用户组。 |
su | 切换用户身份。 |
visudo | 编辑 / etc/sudoers 文件的专属命令。 |
sudo | 以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。 |
基础网络操作命令(11 个) | |
telnet | 使用 TELNET 协议远程登录。 |
ssh | 使用 SSH 加密协议远程登录。 |
scp | 全拼 secure copy,用于不同主机之间复制文件。 |
wget | 命令行下载文件。 |
ping | 测试主机之间网络的连通性。 |
route | 显示和设置 linux 系统的路由表。 |
ifconfig | 查看、配置、启用或禁用网络接口的命令。 |
ifup | 启动网卡。 |
ifdown | 关闭网卡。 |
netstat | 查看网络状态。 |
ss | 查看网络状态。 |
深入网络操作命令(9 个) | |
nmap | 网络扫描命令。 |
lsof | 全名 list open files,也就是列举系统中已经被打开的文件。 |
发送和接收邮件。 | |
mutt | 邮件管理命令。 |
nslookup | 交互式查询互联网 DNS 服务器的命令。 |
dig | 查找 DNS 解析过程。 |
host | 查询 DNS 的命令。 |
traceroute | 追踪数据传输路由状况。 |
tcpdump | 命令行的抓包工具。 |
有关磁盘与文件系统的命令(16 个) | |
mount | 挂载文件系统。 |
umount | 卸载文件系统。 |
fsck | 检查并修复 Linux 文件系统。 |
dd | 转换或复制文件。 |
dumpe2fs | 导出 ext2/ext3/ext4 文件系统信息。 |
dump | ext2/3/4 文件系统备份工具。 |
fdisk | 磁盘分区命令,适用于 2TB 以下磁盘分区。 |
parted | 磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。 |
mkfs | 格式化创建 Linux 文件系统。 |
partprobe | 更新内核的硬盘分区表信息。 |
e2fsck | 检查 ext2/ext3/ext4 类型文件系统。 |
mkswap | 创建 Linux 交换分区。 |
swapon | 启用交换分区。 |
swapoff | 关闭交换分区。 |
sync | 将内存缓冲区内的数据写入磁盘。 |
resize2fs | 调整 ext2/ext3/ext4 文件系统大小。 |
系统权限及用户授权相关命令(4 个) | |
chmod | 改变文件或目录权限。 |
chown | 改变文件或目录的属主和属组。 |
chgrp | 更改文件用户组。 |
umask | 显示或设置权限掩码。 |
查看系统用户登陆信息的命令(7 个) | |
whoami | 显示当前有效的用户名称,相当于执行 id -un 命令。 |
who | 显示目前登录系统的用户信息。 |
w | 显示已经登陆系统的用户列表,并显示用户正在执行的指令。 |
last | 显示登入系统的用户。 |
lastlog | 显示系统中所有用户最近一次登录信息。 |
users | 显示当前登录系统的所有用户的用户列表。 |
finger | 查找并显示用户信息。 |
内置命令及其它(19 个) | |
echo | 打印变量,或直接输出指定的字符串 |
printf | 将结果格式化输出到标准输出。 |
rpm | 管理 rpm 包的命令。 |
yum | 自动化简单化地管理 rpm 包的命令。 |
watch | 周期性的执行给定的命令,并将命令的输出以全屏方式显示。 |
alias | 设置系统别名。 |
unalias | 取消系统别名。 |
date | 查看或设置系统时间。 |
clear | 清除屏幕,简称清屏。 |
history | 查看命令执行的历史纪录。 |
eject | 弹出光驱。 |
time | 计算命令执行时间。 |
nc | 功能强大的网络工具。 |
xargs | 将标准输入转换成命令行参数。 |
exec | 调用并执行指令的命令。 |
export | 设置或者显示环境变量。 |
unset | 删除变量或函数。 |
type | 用于判断另外一个命令是否是内置命令。 |
bc | 命令行科学计算器 |
系统管理与性能监视命令 (9 个) | |
chkconfig | 管理 Linux 系统开机启动项。 |
vmstat | 虚拟内存统计。 |
mpstat | 显示各个可用 CPU 的状态统计。 |
iostat | 统计系统 IO。 |
sar | 全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。 |
ipcs | 用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 |
ipcrm | 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 |
strace | 用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 |
ltrace | 命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。 |
关机 / 重启 / 注销和查看系统信息的命令(6 个) | |
shutdown | 关机。 |
halt | 关机。 |
poweroff | 关闭电源。 |
logout | 退出当前登录的 Shell。 |
exit | 退出当前登录的 Shell。 |
Ctrl+d | 退出当前登录的 Shell 的快捷键。 |
进程管理相关命令(15 个) | |
bg | 将一个在后台暂停的命令,变成继续执行 (在后台执行)。 |
fg | 将后台中的命令调至前台继续运行。 |
jobs | 查看当前有多少在后台运行的命令。 |
kill | 终止进程。 |
killall | 通过进程名终止进程。 |
pkill | 通过进程名终止进程。 |
crontab | 定时任务命令。 |
ps | 显示进程的快照。 |
pstree | 树形显示进程。 |
nice/renice | 调整程序运行的优先级。 |
nohup | 忽略挂起信号运行指定的命令。 |
pgrep | 查找匹配条件的进程。 |
runlevel | 查看系统当前运行级别。 |
init | 切换运行级别。 |
service | 启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 |
参考文章: