Linux 命令备忘录
退出 / 关闭虚拟机:init 0
init是 Linux 系统初始化进程,运行级别0代表关机(仅 root 权限可执行),用于安全关闭虚拟机 / 服务器,区别于强制断电,会先终止进程、同步数据后关机。
-
基础用法:
init 0 -
常用示例:
bashinit 0 # 以root身份执行,安全关闭虚拟机(普通用户需加sudo:sudo init 0) # 补充:CentOS7+也可使用shutdown命令(更灵活) shutdown -h now # 立即关机(等价于init 0) shutdown -h 10 # 10分钟后关机
重启虚拟机:init 6 /reboot
init 6是传统运行级别重启(执行系统重启流程),reboot是通用重启命令,两者均可安全重启虚拟机,优先推荐reboot更易记。
-
基础用法:
init 6或reboot -
常用示例:
bashinit 6 # root权限重启虚拟机(普通用户:sudo init 6) reboot # 通用重启命令(无需记运行级别,root/普通用户加sudo均可) reboot -f # 强制重启(紧急情况使用,可能丢失未保存数据) # 补充:shutdown也可实现重启 shutdown -r now # 立即重启
查看当前工作目录:pwd
pwd(Print Working Directory)用于显示当前 Shell 会话所在的绝对路径,解决 "不知道自己在哪个目录" 的问题,是最基础的路径定位命令。
-
基础用法:
pwd -
常用示例:
bashpwd # 输出当前目录(如/home/ubuntu/test) pwd -P # 显示真实路径(若当前目录是软链接,会指向链接的原始目录)
切换目录:cd
cd(Change Directory)用于切换 Shell 的工作目录,支持绝对路径、相对路径、快捷路径,是目录操作的核心命令。
-
基础用法:
cd [目标目录路径] -
常用示例:
bashcd /usr/local # 绝对路径:切换到/usr/local目录 cd test # 相对路径:切换到当前目录下的test子目录 cd .. # 切换到上级目录(..代表父目录) cd ~ # 切换到当前用户的家目录(如/home/ubuntu) cd - # 切换到上一次所在的目录(快速回切) cd / # 切换到系统根目录(最顶层目录)
列出目录内容:ls
ls(List)用于列出指定目录下的文件 / 目录,默认列出当前目录,搭配参数可显示权限、大小、隐藏文件等详细信息。
-
基础用法:
ls [参数] [目标目录] -
常用示例:
bashls # 列出当前目录的文件/目录(仅名称) ls /usr/bin # 列出/usr/bin目录下的内容 ls -l # 长格式显示(包含权限、所有者、大小、修改时间,简称ll) ls -a # 显示所有文件(包含隐藏文件,以.开头的文件) ls -lh # 人性化显示文件大小(如100M、2G,替代字节数) ls -lt # 按修改时间排序(最新的在前) ls /dir1 /dir2 # 叠加目录:同时列出dir1和dir2的内容
清屏:clear
清空终端当前显示的内容,仅隐藏历史输出(并非删除),快捷键Ctrl+L等价于clear,适合终端内容过多时整理界面。
-
基础用法:
clear -
常用示例:
bashclear # 清空终端界面 # 快捷键:Ctrl+L(无需输入命令,更快捷)
查看 / 设置系统时间:date
显示或修改系统当前时间,设置时间需 root 权限,常用于时间同步、日志排查时的时间校准。
-
基础用法:
date [参数] [时间格式/设置值] -
常用示例:
bashdate # 显示当前系统时间(如 Thu Dec 18 10:00:00 CST 2025) date +"%Y-%m-%d %H:%M:%S" # 自定义格式显示(如 2025-12-18 10:05:30) date -s "2025-12-18 10:08:00" # root权限设置系统时间(普通用户:sudo date -s "...") date -s "2025/12/18 10:08:00" # 另一种日期格式,效果同上 # 补充:同步硬件时间(避免重启后时间还原) hwclock -w # 将系统时间写入硬件时钟(root权限)
终止进程 / 放弃输入:Ctrl+C
终端快捷键,核心作用有两个:① 放弃当前正在输入的命令内容;② 终止前台运行的进程(如正在执行的脚本、curl 请求、ping 命令等)。
-
基础用法:输入过程中 / 进程运行时按
Ctrl+C -
常用示例:
bash# 场景1:放弃输入(输入一半不想执行) [root@localhost ~]# ls /usr/xxx # 输入到一半,按Ctrl+C直接清空输入行 [root@localhost ~]# # 回到空白输入行 # 场景2:终止前台进程(比如持续ping百度) ping www.baidu.com # 执行后会持续输出,按Ctrl+C终止 ^C # 终端显示^C,进程停止,回到输入行
查找大文件 / 磁盘空间分析:du /find
du(Disk Usage)用于统计目录 / 文件的磁盘占用,find用于精准查找指定大小的文件,两者结合可快速定位磁盘占用过大的文件。
-
基础用法:
du [参数] 目录:统计目录占用find 路径 -type f -size 大小条件:查找指定大小文件
-
常用示例:
bash# 1. 统计当前目录下一级目录的磁盘占用(按大小降序) du -h --max-depth=1 | sort -hr # -h:人性化显示大小(K/M/G);--max-depth=1:仅显示一级目录;sort -hr:按大小降序排序 # 2. 查找当前目录下大于100M的所有文件(显示详细信息) find . -type f -size +100M -exec ls -lh {} \; # .:当前目录;-type f:仅查找文件(排除目录);-size +100M:大于100M;-exec:执行后续ls命令 # 3. 统计指定目录总占用(如/var/log) du -sh /var/log # -s:汇总总大小;-h:人性化显示
命令行计算器:bc
bc是交互式算术计算器,支持整数 / 小数运算、逻辑运算,无需图形界面即可完成简单 / 复杂计算,也可非交互式执行计算。
-
基础用法:
bc(交互式) /echo "计算式" | bc(非交互式) -
常用示例:
bash# 场景1:交互式计算(输入bc进入计算器,输入算式回车计算,quit退出) bc 10 + 20 # 输入后回车,输出30 100 / 3 # 整数除法,输出33 scale=2; 100 / 3 # 设置小数位数为2,输出33.33 quit # 退出计算器 # 场景2:非交互式计算(直接输出结果) echo "5 * 8 + 20" | bc # 输出60 echo "scale=3; (20 - 5) * 2 / 7" | bc # 输出4.285
开放端口(firewalld):firewall-cmd
firewall-cmd是 CentOS7+/RHEL7 + 默认的防火墙管理命令(firewalld),用于配置端口放行、查看防火墙状态,Ubuntu 系统需用ufw(补充在示例中)。
-
基础用法:
firewall-cmd [参数] [端口/协议] -
常用示例:
bash# 1. 放行80端口(TCP),永久生效(--permanent) sudo firewall-cmd --zone=public --add-port=80/tcp --permanent # 2. 重新加载防火墙配置(使永久规则生效) sudo firewall-cmd --reload # 3. 查看已开放的所有端口 sudo firewall-cmd --list-ports # 4. 补充:删除已开放的端口(如删除80端口) sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent sudo firewall-cmd --reload # 5. 查看防火墙状态 sudo firewall-cmd --state # 输出running(运行中)/not running(未运行) # 6. Ubuntu系统(ufw防火墙)开放端口示例 sudo ufw allow 80/tcp # 放行80端口 sudo ufw reload # 重载配置 sudo ufw status # 查看开放端口
远程连接:SSH
SSH(Secure Shell)是加密的远程登录协议,用于安全访问 Linux 服务器(替代明文传输的 Telnet),默认端口 22,是远程管理 Linux 的核心方式。
-
基础用法:
ssh [参数] 用户名@目标IP/主机名 -
常用示例:
bash# 1. 基础连接(默认端口22,需输入密码) ssh root@192.168.1.100 # 2. 指定端口连接(服务器SSH端口非22时,如端口2222) ssh -p 2222 root@192.168.1.100 # 3. 免密登录配置(无需输入密码,推荐) # 第一步:本地生成密钥对(一路回车即可,无需设置密码) ssh-keygen -t rsa # 第二步:将公钥复制到远程服务器(需输入一次服务器密码) ssh-copy-id root@192.168.1.100 # 配置完成后,直接ssh root@192.168.1.100即可免密登录 # 4. 断开SSH连接 exit # 或按Ctrl+D # 5. 后台保持SSH连接(避免超时断开,临时生效) ssh -o ServerAliveInterval=60 root@192.168.1.100 # 永久生效:编辑~/.ssh/config,添加以下内容 # Host * # ServerAliveInterval 60
查看内核日志:dmesg
用于查看 Linux 内核环形缓冲区的日志信息,包含系统启动时的硬件检测、驱动加载、内核报错 / 警告等内容,是排查硬件、驱动、内核相关问题的核心命令。
-
基础用法:
dmesg -
常用示例:
bashdmesg # 输出所有内核日志 dmesg | grep -i error # 筛选包含"error"的内核错误日志(忽略大小写) dmesg -T # 以人类可读的时间格式显示日志(默认是启动后的时间戳) dmesg | head -20 # 仅查看前20行内核日志 dmesg | tail -10 # 仅查看最后10行(最新的内核日志)
加载脚本配置:source
在当前 Shell 会话中执行指定脚本,等价于.(点号),区别于直接执行脚本(会新建子 Shell),执行后脚本中的环境变量、别名等会立即生效。
-
基础用法:
source 脚本路径或. 脚本路径 -
常用示例:
bashsource ~/.bashrc # 重新加载bash配置文件,使配置修改立即生效 . /etc/profile # 等价于source,加载系统全局环境配置 # 示例:修改~/.bashrc后生效(添加别名) echo 'alias ll="ls -lh"' >> ~/.bashrc source ~/.bashrc # 执行后ll命令即可使用
查找命令路径:which
查找指定命令的可执行文件绝对路径,仅检索$PATH环境变量中配置的目录,用于确认命令是否安装、以及当前执行的是哪个版本。
-
基础用法:
which 命令名 -
常用示例:
bashwhich python # 查找python命令的可执行路径(如/usr/bin/python3) which ls # 查找ls命令路径(通常为/bin/ls) which nginx # 若未安装则无输出,安装则显示nginx可执行文件路径 which -a java # 列出所有名为java的可执行文件路径(多个版本时)
网络数据传输:curl
命令行网络工具,支持 HTTP/HTTPS/FTP 等协议,可用于测试接口、下载文件、模拟 HTTP 请求,无需图形界面即可完成网络交互。
-
基础用法:
curl [参数] URL -
常用示例:
bashcurl https://www.baidu.com # 访问百度并输出页面内容 curl -o baidu.html https://www.baidu.com # 下载页面内容保存为baidu.html curl -X POST -d "username=test&pwd=123" https://api.example.com/login # 发送POST请求并携带参数 curl -I https://www.baidu.com # 仅获取HTTP响应头(查看状态码、服务器信息等) curl -s https://www.baidu.com # 静默模式(不输出进度条、错误信息)
端口测试 / 远程登录:telnet
基于 TCP 协议的工具,主要用于测试目标主机的端口是否开放,也可用于简单的远程登录(需先安装 telnet)。
-
基础用法:
telnet 目标IP 端口号 -
常用示例:
bash# 先安装telnet(CentOS/Ubuntu) sudo yum install telnet -y # CentOS/RHEL sudo apt install telnet -y # Ubuntu/Debian telnet 192.168.1.100 80 # 测试192.168.1.100的80端口是否开放 telnet www.baidu.com 443 # 测试百度443端口(HTTPS)是否可达 # 若端口开放:显示"Connected to www.baidu.com";关闭:显示"Connection refused" # 退出telnet:按Ctrl+],再输入quit回车
设置环境变量:export
用于定义 / 导出环境变量,使变量在当前 Shell 及子 Shell 中生效;若需永久生效,需将命令写入~/.bashrc//etc/profile等配置文件。
-
基础用法:
export 变量名=值(临时生效) -
常用示例:
bashexport PATH=$PATH:/usr/local/mybin # 新增自定义路径到PATH(临时生效) export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 设置Java环境变量 export PATH=$JAVA_HOME/bin:$PATH # 将Java命令加入PATH(可直接执行java -version) # 永久生效(追加到bash配置文件): echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc # 重新加载配置使永久变量生效 # 查看已定义的环境变量 echo $JAVA_HOME # 输出Java环境变量路径 env | grep PATH # 筛选查看PATH变量
创建目录:mkdir
mkdir(Make Directory)用于创建新目录,支持递归创建多级目录,是文件管理基础命令。
-
基础用法:
mkdir [参数] 目录名 -
常用示例:
bashmkdir test # 在当前目录创建test目录 mkdir /usr/local/test # 绝对路径创建test目录 mkdir -p a/b/c # 递归创建多级目录(a目录下的b,b下的c) mkdir -m 777 public # 创建目录并直接设置权限(777为所有用户可读可写可执行)
删除文件 / 目录:rm
rm(Remove)用于删除文件或目录,-r递归删除目录,-f强制删除(无提示),使用时需谨慎(避免误删系统文件)。
-
基础用法:
rm [参数] 文件/目录 -
常用示例:
bashrm test.txt # 删除当前目录下的test.txt文件(会提示确认,按y回车) rm -f test.txt # 强制删除test.txt(无提示) rm -r testdir # 递归删除testdir目录及其中所有内容(需确认) rm -rf testdir # 强制递归删除目录(无提示,高危!避免执行rm -rf /)
复制文件 / 目录:cp
cp(Copy)用于复制文件或目录,-r递归复制目录,是数据备份常用命令。
-
基础用法:
cp [参数] 源文件/目录 目标路径 -
常用示例:
bashcp test.txt /tmp/ # 复制test.txt到/tmp目录下 cp -r testdir /tmp/ # 递归复制testdir目录到/tmp下 cp -p test.txt /tmp/ # 复制文件并保留原文件的权限、修改时间 cp test.txt /tmp/newtest.txt # 复制并改名(目标文件名为newtest.txt)
移动 / 重命名文件:mv
mv(Move)用于移动文件 / 目录,也可用于重命名(同一目录下移动 = 重命名),移动后原路径文件消失。
-
基础用法:
mv 源文件/目录 目标路径/新名称 -
常用示例:
bashmv test.txt /tmp/ # 将test.txt移动到/tmp目录 mv test.txt newtest.txt # 同一目录下重命名(test.txt→newtest.txt) mv testdir /usr/local/ # 移动目录到/usr/local mv -f test.txt /tmp/ # 强制移动(目标存在则覆盖)
查看文件内容:cat
cat(Concatenate)用于查看文件全部内容,适合小文件;大文件推荐用less/more,-n可显示行号。
-
基础用法:
cat [参数] 文件名 -
常用示例:
bashcat test.txt # 查看test.txt全部内容 cat -n test.txt # 显示内容并标注行号 cat file1.txt file2.txt > file3.txt # 合并file1和file2内容到file3 cat /dev/null > test.txt # 清空test.txt内容(保留文件)
文本搜索:grep
grep是文本过滤工具,用于在文件 / 命令输出中查找包含指定关键词的行,支持正则表达式,是排查日志、配置文件的核心命令。
-
基础用法:
grep [参数] 关键词 文件名/命令输出 -
常用示例:
bashgrep "error" /var/log/messages # 在日志文件中查找包含error的行 grep -i "error" /var/log/messages # 忽略大小写查找 grep -n "error" /var/log/messages # 显示匹配行的行号 grep -v "error" /var/log/messages # 反向匹配(排除含error的行) # 结合管道过滤命令输出 ps -ef | grep nginx # 查找nginx相关进程
查看进程:ps
ps(Process Status)用于查看系统中运行的进程,ps -ef/ps aux是最常用的全量进程查看方式。
-
基础用法:
ps [参数] -
常用示例:
bashps # 查看当前Shell的进程 ps -ef # 全量查看所有进程(UID/PID/PPID/COMMAND等) ps aux # 以BSD格式查看所有进程(更详细的CPU/内存占用) ps -ef | grep java # 筛选java相关进程 ps -p 1234 # 仅查看PID为1234的进程
终止进程:kill
kill用于向进程发送信号,默认发送TERM(终止)信号,-9发送强制终止信号(KILL),需知道进程 PID(通过 ps 获取)。
-
基础用法:
kill [参数] 进程PID -
常用示例:
bashkill 1234 # 向PID为1234的进程发送终止信号(进程可优雅退出) kill -9 1234 # 强制终止PID为1234的进程(无法拦截,紧急使用) kill -l # 查看所有可用的信号(如1=HUP,9=KILL,15=TERM) # 批量终止进程(如终止所有nginx进程) ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs kill -9
查看磁盘空间:df
df(Disk Free)用于查看文件系统的磁盘空间使用情况,-h人性化显示大小(K/M/G),是排查磁盘满的核心命令。
-
基础用法:
df [参数] -
常用示例:
bashdf # 查看所有文件系统磁盘占用(默认字节数) df -h # 人性化显示(如/dev/sda1 50G 20G 30G 40% /) df -i # 查看inode使用情况(inode满也会导致磁盘无法写入) df -h / # 仅查看根目录(/)的磁盘占用
修改文件权限:chmod
chmod(Change Mode)用于修改文件 / 目录的访问权限,支持数字权限(777/755 等)和符号权限(u+r、g-w 等),仅文件所有者 /root 可修改。
-
基础用法:
chmod [权限] 文件名/目录 -
常用示例:
bash# 数字权限(r=4,w=2,x=1;u=所有者,g=组,o=其他) chmod 755 test.sh # 所有者可读可写可执行,组/其他可读可执行(脚本常用) chmod 644 test.txt # 所有者可读可写,组/其他仅可读(普通文件常用) chmod 777 public # 所有用户可读可写可执行(测试用,不推荐生产环境) # 符号权限 chmod u+x test.sh # 给所有者添加执行权限 chmod g-w test.txt # 移除组的写入权限 chmod o+r test.txt # 给其他用户添加读取权限 chmod -R 755 testdir # 递归修改目录及所有子文件权限
切换用户:su /sudo
su(Switch User)用于切换到其他用户(默认切换到 root),sudo用于以 root 权限执行单条命令(无需切换用户),是权限管理核心命令。
-
基础用法:
su [用户名]:切换用户sudo [命令]:以 root 权限执行命令
-
常用示例:
bashsu root # 切换到root用户(需输入root密码) su - root # 切换到root并加载root的环境变量(推荐) su ubuntu # 从root切换到普通用户ubuntu(无需密码) exit # 退出切换后的用户,回到原用户 sudo ls /root # 以root权限查看/root目录(普通用户默认无权限) sudo -i # 切换到root Shell(等价于su - root) sudo passwd ubuntu # 重置ubuntu用户密码(root权限) # 配置sudo免密(需修改/etc/sudoers) sudo visudo # 编辑sudo配置,添加:ubuntu ALL=(ALL) NOPASSWD: ALL
FTP 文件传输:ftp
FTP(File Transfer Protocol)是用于服务器与本地之间文件传输的协议,ftp命令是 Linux 下的 FTP 客户端工具,支持文件上传、下载、目录管理等操作,需先安装客户端,默认使用 21 端口。
- 基础用法:
ftp [参数] 服务器IP(登录 FTP 服务器),登录后执行内部命令操作文件 - 常用示例:
1. 安装 FTP 客户端
bash
# CentOS/RHEL系统
sudo yum install ftp -y
# Ubuntu/Debian系统
sudo apt install ftp -y
2. 登录 FTP 服务器(3 种方法)
bash
# 方法1:直接登录(需后续输入用户名和密码)
ftp 192.168.126.131
# 按提示输入用户名(Name)和密码(Password),登录成功后进入ftp>交互模式
# 方法2:先启动ftp,再连接服务器
ftp
ftp> open 192.168.126.131 # 连接目标IP
# 输入用户名和密码登录
# 方法3:免交互前置登录(直接指定用户和密码)
ftp -n 192.168.126.131
ftp> user oracle pwdoracle # 格式:user 用户名 密码,直接登录
注意:root 用户权限过大,默认不允许登录 FTP 服务器,需使用普通用户。
3. 目录操作(登录后执行)
bash
# 查看FTP服务器当前工作目录
ftp> pwd
# 切换FTP服务器上的目录(目录名含空格需用双引号包裹)
ftp> cd /freecplus # 切换到服务器的/freecplus目录
ftp> cd "test dir" # 切换含空格的目录
# 切换本地(自己电脑)的工作目录(下载/上传的默认路径)
ftp> lcd /tmp # 本地文件操作默认路径改为/tmp
4. 查看 FTP 服务器文件 / 目录
bash
# 列出服务器目录/文件的详细信息(类似Linux ls -l)
ftp> ls /freecplus # 查看/freecplus目录详情
ftp> dir /freecplus # 与ls功能一致,用法相同
# 仅列出文件名(不显示详细信息)
ftp> nlist /freecplus/*.h # 列出服务器/freecplus下所有.h文件
# 列出文件名并保存到本地文件
ftp> nlist /freecplus/*.h /tmp/freecplus.list # 结果输出到本地/tmp/freecplus.list
5. 文件传输模式(必设!)
FTP 支持二进制(推荐)和 ASCII 模式,二进制可传输所有文件(压缩包、图片、程序等),ASCII 仅支持文本文件。
bash
# 查看当前传输模式
ftp> type
# 切换为二进制模式(优先使用,适配所有文件)
ftp> bin
# 切换为ASCII模式(仅传输.txt/.htm等文本文件)
ftp> ascii
6. 下载文件(从 FTP 服务器到本地)
bash
# 下载单个文件(get/recv通用)
ftp> get /freecplus/_ftp.h # 下载到本地当前目录(lcd设置的路径)
ftp> recv /freecplus/_ftp.h /tmp/ftp.h # 下载并指定本地保存路径+文件名
# 下载多个文件(支持通配符)
ftp> prompt # 关闭逐一确认提示(批量下载必备)
ftp> mget /freecplus/*.h # 下载服务器/freecplus下所有.h文件到本地
7. 上传文件(从本地到 FTP 服务器)
bash
# 上传单个文件(put/send通用)
ftp> put /tmp/test.txt # 上传本地/tmp/test.txt到服务器当前目录
ftp> send /tmp/test.txt /freecplus/newtest.txt # 上传并指定服务器保存路径+文件名
# 上传多个文件(支持通配符)
ftp> prompt # 关闭逐一确认提示
ftp> mput /tmp/*.txt # 上传本地/tmp下所有.txt文件到服务器
8. 其他常用 FTP 命令
bash
# 重命名服务器上的文件
ftp> rename oldname.txt newname.txt
# 删除服务器上单个文件
ftp> delete test.txt
# 批量删除服务器上的文件
ftp> mdelete *.txt # 删除服务器当前目录下所有.txt文件
# 在服务器上创建目录
ftp> mkdir newdir
# 删除服务器上的目录
ftp> rmdir newdir
# 查看FTP命令帮助(不输入命令名则显示所有帮助)
ftp> help # 显示所有FTP命令帮助
ftp> help get # 查看get命令的具体用法
# 退出FTP连接
ftp> bye # 或quit,断开连接并退出ftp模式
注意事项
- 目录名含特殊字符(如空格)需用双引号包裹;
- 批量上传 / 下载前执行
prompt关闭确认提示,提高效率; - 本地操作权限由执行 ftp 命令的用户决定,服务器操作权限由 FTP 登录用户决定;
- 若连接失败,需检查服务器 21 端口是否开放(
firewall-cmd --list-ports)。
编译构建:make
make是基于 Makefile 的项目构建工具,自动执行编译、链接等操作,简化多文件项目的编译流程,支持并行编译、清理编译产物等核心操作。
-
基础用法:
make [参数/目标] -
常用示例:
bashmake # 执行Makefile默认目标(通常编译生成可执行文件) make -j4 # 并行编译(4线程,加快速度,j后接CPU核心数) make clean # 清理编译生成的目标文件、可执行文件等产物 make all # 执行Makefile中all目标(编译所有产物) make test # 执行Makefile中test目标(运行测试用例)
C/C++ 编译:gcc/g++
gcc是 C 语言编译器,g++是 C++ 编译器,支持编译、链接、生成动态库 / 静态库,可指定编译标准、链接第三方库等参数。
-
基础用法:
gcc [参数] 源文件 -o 可执行文件g++ [参数] 源文件 -o 可执行文件
-
常用示例:
bash# 编译C++程序(链接pthread线程库,指定C++17标准) g++ -o test_ol_ThreadPool test_ol_ThreadPool.cpp -lpthread -std=c++17 # 生成动态共享库(-shared:共享库,-fPIC:位置无关代码,-ldl:链接动态链接库) gcc -shared -fPIC -o libfile_hook.so file_hook.c -ldl # 查看gcc版本 gcc -v # 编译C程序生成可执行文件 gcc -o test_unlink test_unlink.c
系统资源监控:top
top是交互式系统监控工具,实时显示进程的 CPU、内存、PID 等资源占用情况,支持排序、筛选、终止进程,是排查资源占用的核心工具。
-
基础用法:
top -
常用示例:
bashtop # 启动监控界面(默认按CPU占用降序) # top界面常用操作: # P:按CPU占用率排序 | M:按内存占用率排序 # 输入PID后按k,再输入9:强制终止指定进程 # q:退出top界面
文本编辑:vi/vim
vim是vi的增强版文本编辑器,支持命令模式、插入模式、末行模式,是 Linux 无图形界面下的核心编辑工具。
-
基础用法:
vim [文件名] -
常用示例:
bashvim /proc/cpuinfo # 打开CPU信息文件查看/编辑 vim /etc/vsftpd.conf # 编辑FTP服务配置文件 vim file.txt # 打开当前目录的file.txt # 核心操作: # i:进入插入模式(输入内容) | Esc:退出插入模式 # :w:保存 | :q:退出 | :wq:保存并退出 | :q!:强制退出(放弃修改) # /关键词:搜索关键词 | dd:删除当前行
查看日历:cal
cal用于显示系统日历,默认显示当前月份,可指定年份 / 月份查看特定日历。
-
基础用法:
cal [参数] [年份/月份] -
常用示例:
bashcal # 显示当前月份日历 cal 2025 # 显示2025年全年日历 cal 12 2025 # 显示2025年12月日历
进程间通信 (IPC) 查看:ipcs
ipcs用于查看 Linux 系统中 IPC 资源(共享内存、信号量、消息队列),是排查 IPC 资源泄漏的核心工具。
-
基础用法:
ipcs [参数] -
常用示例:
bashipcs # 显示所有IPC资源 ipcs -m # 仅显示共享内存 ipcs -s # 仅显示信号量 ipcs -q # 仅显示消息队列
进程间通信 (IPC) 删除:ipcrm
ipcrm用于删除无用的 IPC 资源(共享内存、信号量、消息队列),释放系统资源。
-
基础用法:
ipcrm [资源类型] [资源ID] -
常用示例:
bashipcrm -m 0 # 删除ID为0的共享内存(-m=共享内存) ipcrm -s 2 # 删除ID为2的信号量(-s=信号量) ipcrm -q 5 # 删除ID为5的消息队列(-q=消息队列)
系统调用跟踪:strace
strace用于跟踪进程的系统调用和信号,可指定跟踪特定调用,是排查程序运行异常的核心工具。
-
基础用法:
strace [参数] 命令 -
常用示例:
bash# 跟踪ls命令的stat/open等系统调用 strace -e trace=stat,statat,lstat,open,openat /usr/bin/ls /tmp/protected.txt 2>&1 # 详细输出并保存跟踪结果到文件 strace -v -o ls_trace.log /usr/bin/ls /tmp
包管理(CentOS/RHEL):yum
yum是 RHEL/CentOS 的包管理工具,自动解决依赖,用于安装 / 更新 / 卸载软件包。
-
基础用法:
yum [参数] 操作 软件包名 -
常用示例:
bashyum install -y strace coreutils # 安装软件(-y:自动确认) sudo yum install -y ftp # 普通用户加sudo获取权限 yum remove -y ftp # 卸载软件 yum update -y # 更新所有软件包
包管理(Ubuntu/Debian):apt/apt-get
apt(apt-get简化版)是 Ubuntu/Debian 的包管理工具,需先更新源再安装软件。
-
基础用法:
apt [参数] 操作 软件包名apt-get [参数] 操作 软件包名
-
常用示例:
bashsudo apt-get update # 更新软件源(必须先执行) sudo apt install ftp # 安装ftp sudo apt-get install vsftpd # 安装FTP服务 sudo apt remove vsftpd # 卸载软件
手册查询:man
man用于查看命令 / 系统调用 / 函数的官方手册,不同章节对应不同类型文档(1 = 用户命令,2 = 系统调用,3 = 库函数)。
-
基础用法:
man [章节] 命令/函数名 -
常用示例:
bashman read # 查看read默认手册 man 1 read # 第1章(用户命令)的read手册 man 2 read # 第2章(系统调用)的read手册 man memcmp # 查看memcmp库函数手册
环境变量删除:unset
unset用于删除已定义的环境变量,删除后变量立即失效。
-
基础用法:
unset 变量名 -
常用示例:
bashunset LD_PRELOAD # 删除动态库预加载变量 unset JAVA_HOME # 删除Java环境变量 echo $LD_PRELOAD # 验证变量是否删除(无输出则成功)
查看文件尾部:tail
tail用于查看文件尾部内容,默认显示最后 10 行,-f可实时监控日志。
-
基础用法:
tail [参数] 文件名 -
常用示例:
bashtail /home/mysql/Projects/File_Protector/test/prot.txt # 显示最后10行 tail -n 20 /tmp/log.txt # 显示最后20行 tail -f /var/log/vsftpd.log # 实时跟踪日志(Ctrl+C退出)
目录树查看:tree
tree以树形结构显示目录层级,直观展示文件 / 子目录,需先安装。
-
基础用法:
tree [参数] 目录 -
常用示例:
bashsudo yum install tree -y # CentOS安装 sudo apt install tree -y # Ubuntu安装 tree # 查看当前目录树 tree /home/mysql/Projects/File_Protector # 查看指定目录树 tree -d /home/mysql/OL # 仅显示目录(不显示文件)
DNS 解析:nslookup/getent
nslookup查询域名 DNS 解析结果,getent hosts查询主机名 / IP 映射(优先 /etc/hosts)。
-
基础用法:
nslookup 域名/IPgetent hosts 域名/IP
-
常用示例:
bashnslookup www.baidu.com # 查询百度DNS解析结果 getent hosts www.baidu.com # 查询百度主机映射 getent hosts 1.1.1.1 # 反向查询IP对应的域名
网络连通性测试:ping
ping基于 ICMP 协议测试主机连通性,默认持续发送数据包,Ctrl+C 终止。
-
基础用法:
ping [参数] 目标IP/域名 -
常用示例:
bashping www.baidu.com # 测试百度连通性 ping -c 5 192.168.1.100 # 发送5个数据包后停止 ping -W 2 192.168.0.157 # 超时2秒,测试内网主机
系统服务管理:systemctl
systemctl是 systemd 系统的服务管理工具,用于启动 / 停止 / 重启系统服务(如 vsftpd)。
-
基础用法:
systemctl [操作] 服务名 -
常用示例:
bashsystemctl restart vsftpd # 重启FTP服务 systemctl start vsftpd # 启动服务 systemctl stop vsftpd # 停止服务 systemctl status vsftpd # 查看服务状态
批量终止进程:pkill
pkill根据进程名批量终止进程,无需手动查找 PID,比kill更便捷。
-
基础用法:
pkill [参数] 进程名 -
常用示例:
bashpkill -9 File_Protector.exe # 强制终止所有该进程 pkill -9 test_tcp_server # 终止包含该名称的进程
创建 / 写入文件:echo >/>>
echo输出字符串,结合>(覆盖)/>>(追加)可快速创建 / 修改文件。
-
基础用法:
echo "内容" > 文件名或echo "内容" >> 文件名 -
常用示例:
bashecho "我是受保护文件" > /tmp/protected.txt # 创建并写入(覆盖原有内容) echo "新增内容" >> /tmp/protected.txt # 追加内容到文件末尾 echo "" > /tmp/log.txt # 清空文件内容(保留文件)
递归修改权限:chmod -R
chmod -R递归修改目录及所有子文件 / 子目录的权限,适用于批量设置。
-
基础用法:
chmod -R 权限 目录 -
常用示例:
bashchmod -R 777 .ssh # 递归设置.ssh目录为777权限 chmod -R 755 /home/mysql/Projects # 递归设置项目目录为755
查看目录本身权限:ls -ld
ls -ld仅显示目录本身的权限 / 属性,而非目录内文件,常用于检查目录权限。
-
基础用法:
ls -ld 目录名 -
常用示例:
bashls -ld .ssh # 查看.ssh目录本身权限 ls -ld /home/mysql/OL # 查看OL目录权限和所有者
动态库预加载:LD_PRELOAD
LD_PRELOAD是 Linux 环境变量,指定优先加载的动态库,可覆盖系统默认库函数。
-
基础用法:
export LD_PRELOAD=动态库路径 -
常用示例:
bashexport LD_PRELOAD=/home/mysql/Projects/File_Protector/4/libfile_protector.so # 仅当前命令生效的预加载 LD_PRELOAD=./libfile_hook.so /usr/bin/cat /tmp/protected.txt unset LD_PRELOAD # 取消预加载
查看进程可执行路径:/proc/self/exe
/proc/self/exe是指向当前进程可执行文件的符号链接,用于排查进程来源。
-
基础用法:
ls -l /proc/self/exe -
常用示例:
bashls -l /proc/self/exe # 查看当前Shell进程的可执行路径 ls -l /proc/1234/exe # 查看PID=1234进程的可执行路径
清空 / 删除目录:rm -rf
rm -rf递归强制删除目录及所有内容(无提示),需谨慎使用。
-
基础用法:
rm -rf 目录名/文件 -
常用示例:
bashrm -rf /home/mysql/OL/build/* # 清空build目录(保留目录) rm -rf /home/mysql/OL/build # 删除整个build目录
网络配置查看:ifconfig(补充 ipconfig)
ipconfig是 Windows 命令,Linux 等价命令是ifconfig(需安装 net-tools),用于查看 / 配置网卡信息。
-
基础用法:
ifconfig -
常用示例:
bashsudo yum install net-tools -y # CentOS安装 sudo apt install net-tools -y # Ubuntu安装 ifconfig # 查看所有网卡信息 ifconfig eth0 # 查看eth0网卡信息
查看 CPU 信息:/proc/cpuinfo
/proc/cpuinfo是伪文件,存储 CPU 硬件信息(核心数、型号等),通过cat/vi查看。
-
基础用法:
cat /proc/cpuinfo或vi /proc/cpuinfo -
常用示例:
bashcat /proc/cpuinfo # 查看所有CPU信息 cat /proc/cpuinfo | grep "model name" | uniq # 筛选CPU型号 cat /proc/cpuinfo | grep "cpu cores" | uniq # 筛选CPU核心数
文件搜索:find
find是 Linux 中功能强大的文件搜索工具,可根据文件属性(文件名、类型、大小、目录深度等)查找磁盘文件,通过指定对应参数即可实现精准搜索。
-
基础用法:
find 搜索路径 [搜索参数] 搜索条件 -
常用示例:
bash
# 1. 按文件名搜索(-name):支持精确和模糊查询,模糊查询建议用引号包裹通配符
find /root -name "*.txt" # 模糊查询:搜索/root目录下后缀为txt的文件
find /root -name "onepiece.txt" # 精确查询:搜索/root目录下名为onepiece.txt的文件
# 2. 按文件类型搜索(-type):常用类型字符:f(普通文件)、d(目录)、l(软链接)
find /root -type l # 搜索/root目录下的软链接文件
# 3. 按文件大小搜索(-size):单位:k(小写)、M(大写)、G(大写);+大于、-小于、无符号则是区间(大小-1, 大小]
find ./ -size +3M # 搜索当前目录下大于3M的文件
find ./ -size -3M # 搜索当前目录下小于等于2M的文件(区间:[0M, 2M])
find ./ -size 3M # 搜索当前目录下2M~3M的文件(区间:(2M, 3M])
find ./ -size +1M -size -4M # 搜索当前目录下1M~3M的文件
# 4. 按目录层级搜索:-maxdepth(最多层级)、-mindepth(最少层级),需配合其他条件使用
sudo find / -maxdepth 5 -name "*.txt" # 从根目录开始,最多搜索5层,查找txt文件
sudo find / -mindepth 5 -name "*.txt" # 从根目录开始,至少从第5层开始,查找txt文件
# 5. 搜索后执行后续操作:exec(直接执行)、ok(交互式执行)、xargs(高效批量执行)
find ./ -maxdepth 2 -name "*.txt" -exec ls -l {} \; # 查找2层内txt文件并查看详细信息
find ./ -maxdepth 1 -name "*.txt" -ok rm -rf {} \; # 交互式删除1层内txt文件(需确认)
find ./ -maxdepth 1 -name "*.cpp" | xargs ls -l # 用xargs批量查看1层内cpp文件详细信息
| 文件类型 | 类型的字符描述 |
|---|---|
| 普通文件类型 | f |
| 目录类型 | d |
| 软连接类型 | l |
| 字符设备类型 | c |
| 块设备类型 | b |
| 管道类型 | p |
| 本地套接字类型 | s |
字符串搜索:grep
grep用于查找文件中符合条件的字符串,支持递归搜索、忽略大小写、显示行号等功能,是文本内容检索的常用命令。搜索内容建议用引号包裹,避免特殊字符解析错误。
-
基础用法:
grep "搜索内容" 搜索路径/文件 [参数] -
常用参数:
- -r:递归搜索目录下的所有文件
- -i:忽略搜索内容的大小写
- -n:显示匹配内容所在的行号
- 常用示例:
bash
grep "include" a.c # 搜索a.c文件中是否包含"include"字符串
grep "INCLUDE" a.c -i # 忽略大小写,搜索a.c文件中的"INCLUDE"(含小写include)
grep "include" ./ -rn # 递归搜索当前目录下所有文件,显示含"include"的文件路径和行号
快速文件搜索:locate
locate是简化版find,通过搜索本地文件数据库实现快速查找(效率远高于find),数据库默认每日自动更新,新增/修改文件后需用updatedb手动更新。
-
基础用法:
locate [参数] 搜索关键字 -
常用参数:
- -i:忽略文件名大小写
- -n N:仅显示前N条匹配结果
- -r:基于正则表达式匹配文件名
- 常用示例:
bash
sudo updatedb # 手动更新文件数据库(普通用户需加sudo)
locate test # 搜索所有以"test"开头的文件
locate /home/robin/test # 精确搜索/home/robin/目录下以"test"开头的文件
locate TEST -i # 忽略大小写,搜索以"TEST"或"test"开头的文件
locate test -n 5 # 搜索以"test"开头的文件,仅显示前5条结果
locate -r "\.cpp$" # 用正则表达式搜索以".cpp"结尾的文件