Linux运维速查宝典

常用命令

查看当前进程状态:【ps】

ps aux|grep ktin 
//查看包含"ktin"字眼的进程的信息,其中第2列为PID

ps -ef|grep srm-esb-*
//查看以srm-esb-开头的进程的信息

查看磁盘占用情况:【df】

df -h

查看负载、内存、进程:【top】

示例:

# 该行跟命令uptime显示的内容相同。
# up 2 days:已使用2天
# 3 users:有3个当前用户
# load average:1分钟内、10分钟内、15分钟内系统的平均负载。
#
top - 16:14:33 up 2 days, 4:27, 3 users, load average: 0.00, 0.01, 0.02

Tasks: 199 total, 1 running, 198 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

MiB Mem : 5959.4 total, 3277.3 free, 776.4 used, 1905.8 buff/cache

MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4878.4 avail Mem

 

# PID — 进程id
# USER — 进程所有者
# PR — 进程优先级
# NI — nice值。负值表示高优先级,正值表示低优先级
# VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
# RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATASHR — 共享内存大小,单位kb
# S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
# %CPU — 上次更新到现在的CPU时间占用百分比
# %MEM — 进程使用的物理内存百分比
# TIME+ — 进程使用的CPU时间总计,单位1/100秒
# COMMAND — 进程名称(命令名/命令行)

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

23026 alvin 20 0 46340 7820 6504 S 0.0 0.1 0:00.05 systemd

23033 alvin 20 0 149660 3140 72 S 0.0 0.1 0:00.00 (sd-pam)

23125 alvin 20 0 63396 5100 4092 S 0.0 0.1 0:00.00 sshd

23128 alvin 20 0 16836 5636 4284 S 0.0 0.1 0:00.03 zsh

查看端口占用情况:【netstat】

#查看某个端口
lsof -i:8080

#查看所有端口
netstat -tunlp

文件查找:【find】

# 默认从当前目录查找;查找时默认包括子目录;

# 1.按文件名查找  
find test.txt  
# 在当前目录下查找test.txt文件  
find / -name httpd.conf  
# 在根目录下查找文件httpd.conf  
find /etc -name '\*httpd\*'  
# 在etc目录下查找名字含有"httpd"的文件

# 2.**查询大文件**  
find . -type f -size +500M  
# 找出目录下(包括子目录)所有大小大于500M的文件

已删除文件但未释放空间:【lsof】

# 查看被删除但是未释放空间的文件,其中第2列为pid
lsof | grep deleted

# 查看未释放空间文件在该pid下的文件句柄 (返回值类似: 3 -> /delete.tmp,“3”就是文件句柄)
ll /proc/[pid]/fd | grep delete.tmp

# 将文件句柄置空,完成。
echo > /proc/PID/fd/[文件句柄]

文件上传、下载:【curl】

文本编辑:【vim】

vim systemOut.log

i #进入编辑模式

编辑模式下:

  • ESC #退出编辑模式
  • x #删除后面的字符
  • X #删除前面的字符
  • u #回滚

非编辑模式下:

  • :wq #保存并退出
  • :q! #直接退出不保存
  • :w [filename] #另存为
  • / [关键字] #查找关键字(然后输入n搜索下一个)
  • Ctrl+F #下一页
  • Ctrl+B #上一页

查看Linux版本:【hostnamectl】

全文检索:【grep】

grep --help   
# 查看帮助

grep -lr 'string' /etc/  
# -l: 找出含有该字符串的文件  
# -r: 同时从子目录查找  
# -i: 忽略大小写

执行某段shell脚本:【source】

假设有以下shell脚本:

# test.sh
echo 'hello world'

可通过source命令执行该脚本。

source ./test.sh

以管理员身份运行命令:【sudo】

# 以管理员身份浏览yum文件
sudo vim /usr/bin/yum

文件操作:【touch、rm等】

touch <filename>   
# 创建文件

mkdir <uriname>  
# 创建目录

rm -f <filename>  
# 强行删除文件或目录(不包括子目录)

rm -rf <filename>  
# 强行删除文件或目录(包括子目录)

cp <source> <target>  
# 拷贝文件

cp -r <source> <target>  
# 拷贝目录

mv <source> <target>  
# 移动文件/文件重命名

在后台运行脚本:【nohup】

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

#【错误用法】后面没有带上 &
nohup pwd 
#nohup.out文件内容:nohup: ignoring input


#打印当前路径到nohup.out
nohup pwd &
#nohup.out文件内容:/apps/svr

#在后台运行Test.jar,生成日志文件Test_2022-01-01.log并打印日志到里面(终端里仍会看到日志)
nohup java -jar Test.jar > Test_$(date +%Y-%m-%d).log &

#在后台运行test.sh,生成日志文件out.txt并打印日志到里面(终端不会看到日志)
nohup ./test.sh > out.txt 2>&1 &

下载、安装、卸载软件:【yum、rpm、apt-get】

Debian系:(Debian, Ubuntu, Xandros, Linspire)

下载并安装:apt-get install [package-name]

#同步/etc/apt/sources.list中最新安装包的来源(docker容器一般需要先执行该命令,然后再install)
apt-get update
#安装ifconfig、netstat命令
apt-get install net-tools
#安装ping命令
apt-get install iproute2
#安装telnet命令
apt-get install telnet

RedHat系:(Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS)

没有安装yum的情况下:

#查看所有已安装的软件
rpm -qa
#查看某个软件是否有安装
rpm -qa|grep [软件名(模糊搜索)]
#卸载某个软件
rpm -e [软件名]
#强制卸载某个软件
rpm -e --nodeps [软件名]

使用yum:

#查看是否有安装yum包
rpm -qa|grep yum
#升级系统的所有软件以及系统内核
yum update
#查看仓库中某个package的所有版本
yum list [package-name] --showduplicates | sort -r
#下载并安装
yum install [package-name]

查看Linux的路由表:【route】

[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
10.139.128.0    0.0.0.0         255.255.224.0   U     0      0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-0ab63c131848
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-bccbfb788da0
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-7485db25f958

防火墙操作:【firewalld】

firewall-cmd--version

查看环境变量:【env】

#显示所有环境变量
$ env
#查看某个环境变量
$ env |grep JAVA_HOME
#查看某个环境变量
$ echo $JAVA_HOME

文件内容检索、修改:【cat】

#查看text.txt的所有内容
cat text.txt 

#显示行数
cat -n text.txt

#查看所有内容,通过翻页由上到下
#(空格:下一页  Ctrl+C 或者q:退出  Enter:下一行)
cat text.txt | more

#查看所有内容,通过翻页由上到下
#(空格:下一页  q:退出   上下箭头:下一行)
cat text.txt | less



#查看有“异常”两字的行的后100行
cat text.txt |grep '异常'-A 100 

#查看有“异常”两字的行的前100行
cat text.txt |grep '异常'-B 100

#查看有“异常”两字的行的前、后100行
cat text.txt |grep '异常'-C 100

#从第100行开始,翻页向下查看
cat -n text.txt|tail -n +100|more


滚动查看文件:【less】

#进入并查看文件
LESS text.txt

查看文件后,若文件过大,打通过以下命令滚动文件:
j    下一行
k    上一行
f    向下滚动一屏幕
b    向上滚动一屏幕
g    定位到文档头部
G    定位到文档最尾部
q    退出less模式


查看日志:【tail】

#滚动式查看日志
tail -f ./2022-10-10.log

#显示日志文件最末尾的200行内容
tail -n 200 ./2022-10-10.log

#滚动式查看日志,并且只查看有'ERROR'字符串的行
tail -f ./2022-10-10.log | grep 'ERROR'

Linux文件系统结构

/ :根目录
/usr/bin :系统安装的可执行程序(如ping、ls、man等)
/usr/local :用户级应用(如TOMCAT、MYSQL),类比C:/Progrem Files/
/usr/lib :可执行程序的共享库(如JAVA、PYTHON),类比C:/Windows/System32
/opt :临时上传到Linux里的软件,类别D:/Sotfware/
/etc :系统的配置文件(包括host文件)

Shell脚本语法

#!/bin/bash
#指此脚本使用/bin/bash来解释执行
#脚本解析器除了bash,还有sh、ksh、tsh...
#不写则脚本会默认当前用户登录的shell,为脚本解释器

#打印语句
echo "hello world!" #打印hello world

#打印当前时间
echo "$(date)"
echo "$(date+%F)" #格式化显示年月日(yyyy-MM-dd)
echo "$(date+%Y/%m/%d)" #格式化显示年月日(yyyy/MM/dd)
echo "$(date +%H:%M:%S)" #格式化显示时分秒(hh:mm:ss)

#定义一个参数并打印
myname="jack"
echo "hello $myname!"

#条件语句
if["$myname"!=""];then
  echo "hello $myname!"
fi

#执行命令并返回结果
pids = `ps -ef|grep springboot-*|grep -v grep|awk '{print $2}'` #查询名字带"springboot"的进程id

#执行命令并打印结果
echo `ps -ef|grep springboot-*|grep -v grep|awk '{print $2}'`
echo `pwd` #显示当前目录的路径



查看系统配置

#CPU个数、核数
lscpu

#CPU核数、进程数
cat /proc/cpuinfo

#内存情况
free -m

#磁盘总量
df -h

#linux发行版本
cat /etc/redhat-release

#linux内核版本
uname -a

Last Updated:
Contributors: dongyz8