Linux-Command Memo
Linux-Command Memo
退出 / 关闭虚拟机:init 0
init是 Linux 系统初始化进程,运行级别0代表关机(仅 root 权限可执行),用于安全关闭虚拟机 / 服务器,区别于强制断电,会先终止进程、同步数据后关机。
-
基础用法:
init 0 -
常用示例:
1
2
3
4init 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 -
常用示例:
1
2
3
4
5init 6 # root权限重启虚拟机(普通用户:sudo init 6)
reboot # 通用重启命令(无需记运行级别,root/普通用户加sudo均可)
reboot -f # 强制重启(紧急情况使用,可能丢失未保存数据)
# 补充:shutdown也可实现重启
shutdown -r now # 立即重启
查看当前工作目录:pwd
pwd(Print Working Directory)用于显示当前 Shell 会话所在的绝对路径,解决 “不知道自己在哪个目录” 的问题,是最基础的路径定位命令。
-
基础用法:
pwd -
常用示例:
1
2pwd # 输出当前目录(如/home/ubuntu/test)
pwd -P # 显示真实路径(若当前目录是软链接,会指向链接的原始目录)
切换目录:cd
cd(Change Directory)用于切换 Shell 的工作目录,支持绝对路径、相对路径、快捷路径,是目录操作的核心命令。
-
基础用法:
cd [目标目录路径] -
常用示例:
1
2
3
4
5
6cd /usr/local # 绝对路径:切换到/usr/local目录
cd test # 相对路径:切换到当前目录下的test子目录
cd .. # 切换到上级目录(..代表父目录)
cd ~ # 切换到当前用户的家目录(如/home/ubuntu)
cd - # 切换到上一次所在的目录(快速回切)
cd / # 切换到系统根目录(最顶层目录)
列出目录内容:ls
ls(List)用于列出指定目录下的文件 / 目录,默认列出当前目录,搭配参数可显示权限、大小、隐藏文件等详细信息。
-
基础用法:
ls [参数] [目标目录] -
常用示例:
1
2
3
4
5
6
7ls # 列出当前目录的文件/目录(仅名称)
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 -
常用示例:
1
2clear # 清空终端界面
# 快捷键:Ctrl+L(无需输入命令,更快捷)
查看 / 设置系统时间:date
显示或修改系统当前时间,设置时间需 root 权限,常用于时间同步、日志排查时的时间校准。
-
基础用法:
date [参数] [时间格式/设置值] -
常用示例:
1
2
3
4
5
6date # 显示当前系统时间(如 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 -
常用示例:
1
2
3
4
5
6
7# 场景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 大小条件:查找指定大小文件
-
常用示例:
1
2
3
4
5
6
7
8
9
10# 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(非交互式) -
常用示例:
1
2
3
4
5
6
7
8
9
10# 场景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 [参数] [端口/协议] -
常用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 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/主机名 -
常用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 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 -
常用示例:
1
2
3
4
5dmesg # 输出所有内核日志
dmesg | grep -i error # 筛选包含"error"的内核错误日志(忽略大小写)
dmesg -T # 以人类可读的时间格式显示日志(默认是启动后的时间戳)
dmesg | head -20 # 仅查看前20行内核日志
dmesg | tail -10 # 仅查看最后10行(最新的内核日志)
加载脚本配置:source
在当前 Shell 会话中执行指定脚本,等价于.(点号),区别于直接执行脚本(会新建子 Shell),执行后脚本中的环境变量、别名等会立即生效。
-
基础用法:
source 脚本路径或. 脚本路径 -
常用示例:
1
2
3
4
5source ~/.bashrc # 重新加载bash配置文件,使配置修改立即生效
. /etc/profile # 等价于source,加载系统全局环境配置
# 示例:修改~/.bashrc后生效(添加别名)
echo 'alias ll="ls -lh"' >> ~/.bashrc
source ~/.bashrc # 执行后ll命令即可使用
查找命令路径:which
查找指定命令的可执行文件绝对路径,仅检索$PATH环境变量中配置的目录,用于确认命令是否安装、以及当前执行的是哪个版本。
-
基础用法:
which 命令名 -
常用示例:
1
2
3
4which python # 查找python命令的可执行路径(如/usr/bin/python3)
which ls # 查找ls命令路径(通常为/bin/ls)
which nginx # 若未安装则无输出,安装则显示nginx可执行文件路径
which -a java # 列出所有名为java的可执行文件路径(多个版本时)
网络数据传输:curl
命令行网络工具,支持 HTTP/HTTPS/FTP 等协议,可用于测试接口、下载文件、模拟 HTTP 请求,无需图形界面即可完成网络交互。
-
基础用法:
curl [参数] URL -
常用示例:
1
2
3
4
5curl 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 端口号 -
常用示例:
1
2
3
4
5
6
7
8# 先安装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 变量名=值(临时生效) -
常用示例:
1
2
3
4
5
6
7
8
9
10
11
12export 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 [参数] 目录名 -
常用示例:
1
2
3
4mkdir 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 [参数] 文件/目录 -
常用示例:
1
2
3
4rm 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 [参数] 源文件/目录 目标路径 -
常用示例:
1
2
3
4cp 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 源文件/目录 目标路径/新名称 -
常用示例:
1
2
3
4mv 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 [参数] 文件名 -
常用示例:
1
2
3
4cat 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 [参数] 关键词 文件名/命令输出 -
常用示例:
1
2
3
4
5
6grep "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 [参数] -
常用示例:
1
2
3
4
5ps # 查看当前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 -
常用示例:
1
2
3
4
5kill 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 [参数] -
常用示例:
1
2
3
4df # 查看所有文件系统磁盘占用(默认字节数)
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 [权限] 文件名/目录 -
常用示例:
1
2
3
4
5
6
7
8
9
10# 数字权限(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 权限执行命令
-
常用示例:
1
2
3
4
5
6
7
8
9
10su 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 客户端
1 | # CentOS/RHEL系统 |
2. 登录 FTP 服务器(3 种方法)
1 | # 方法1:直接登录(需后续输入用户名和密码) |
注意:root 用户权限过大,默认不允许登录 FTP 服务器,需使用普通用户。
3. 目录操作(登录后执行)
1 | # 查看FTP服务器当前工作目录 |
4. 查看 FTP 服务器文件 / 目录
1 | # 列出服务器目录/文件的详细信息(类似Linux ls -l) |
5. 文件传输模式(必设!)
FTP 支持二进制(推荐)和 ASCII 模式,二进制可传输所有文件(压缩包、图片、程序等),ASCII 仅支持文本文件。
1 | # 查看当前传输模式 |
6. 下载文件(从 FTP 服务器到本地)
1 | # 下载单个文件(get/recv通用) |
7. 上传文件(从本地到 FTP 服务器)
1 | # 上传单个文件(put/send通用) |
8. 其他常用 FTP 命令
1 | # 重命名服务器上的文件 |
注意事项
- 目录名含特殊字符(如空格)需用双引号包裹;
- 批量上传 / 下载前执行
prompt关闭确认提示,提高效率; - 本地操作权限由执行 ftp 命令的用户决定,服务器操作权限由 FTP 登录用户决定;
- 若连接失败,需检查服务器 21 端口是否开放(
firewall-cmd --list-ports)。
编译构建:make
make是基于 Makefile 的项目构建工具,自动执行编译、链接等操作,简化多文件项目的编译流程,支持并行编译、清理编译产物等核心操作。
-
基础用法:
make [参数/目标] -
常用示例:
1
2
3
4
5make # 执行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 可执行文件
-
常用示例:
1
2
3
4
5
6
7
8# 编译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 -
常用示例:
1
2
3
4
5top # 启动监控界面(默认按CPU占用降序)
# top界面常用操作:
# P:按CPU占用率排序 | M:按内存占用率排序
# 输入PID后按k,再输入9:强制终止指定进程
# q:退出top界面
文本编辑:vi/vim
vim是vi的增强版文本编辑器,支持命令模式、插入模式、末行模式,是 Linux 无图形界面下的核心编辑工具。
-
基础用法:
vim [文件名] -
常用示例:
1
2
3
4
5
6
7vim /proc/cpuinfo # 打开CPU信息文件查看/编辑
vim /etc/vsftpd.conf # 编辑FTP服务配置文件
vim file.txt # 打开当前目录的file.txt
# 核心操作:
# i:进入插入模式(输入内容) | Esc:退出插入模式
# :w:保存 | :q:退出 | :wq:保存并退出 | :q!:强制退出(放弃修改)
# /关键词:搜索关键词 | dd:删除当前行
查看日历:cal
cal用于显示系统日历,默认显示当前月份,可指定年份 / 月份查看特定日历。
-
基础用法:
cal [参数] [年份/月份] -
常用示例:
1
2
3cal # 显示当前月份日历
cal 2025 # 显示2025年全年日历
cal 12 2025 # 显示2025年12月日历
进程间通信 (IPC) 查看:ipcs
ipcs用于查看 Linux 系统中 IPC 资源(共享内存、信号量、消息队列),是排查 IPC 资源泄漏的核心工具。
-
基础用法:
ipcs [参数] -
常用示例:
1
2
3
4ipcs # 显示所有IPC资源
ipcs -m # 仅显示共享内存
ipcs -s # 仅显示信号量
ipcs -q # 仅显示消息队列
进程间通信 (IPC) 删除:ipcrm
ipcrm用于删除无用的 IPC 资源(共享内存、信号量、消息队列),释放系统资源。
-
基础用法:
ipcrm [资源类型] [资源ID] -
常用示例:
1
2
3ipcrm -m 0 # 删除ID为0的共享内存(-m=共享内存)
ipcrm -s 2 # 删除ID为2的信号量(-s=信号量)
ipcrm -q 5 # 删除ID为5的消息队列(-q=消息队列)
系统调用跟踪:strace
strace用于跟踪进程的系统调用和信号,可指定跟踪特定调用,是排查程序运行异常的核心工具。
-
基础用法:
strace [参数] 命令 -
常用示例:
1
2
3
4# 跟踪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 [参数] 操作 软件包名 -
常用示例:
1
2
3
4yum 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 [参数] 操作 软件包名
-
常用示例:
1
2
3
4sudo apt-get update # 更新软件源(必须先执行)
sudo apt install ftp # 安装ftp
sudo apt-get install vsftpd # 安装FTP服务
sudo apt remove vsftpd # 卸载软件
手册查询:man
man用于查看命令 / 系统调用 / 函数的官方手册,不同章节对应不同类型文档(1 = 用户命令,2 = 系统调用,3 = 库函数)。
-
基础用法:
man [章节] 命令/函数名 -
常用示例:
1
2
3
4man read # 查看read默认手册
man 1 read # 第1章(用户命令)的read手册
man 2 read # 第2章(系统调用)的read手册
man memcmp # 查看memcmp库函数手册
环境变量删除:unset
unset用于删除已定义的环境变量,删除后变量立即失效。
-
基础用法:
unset 变量名 -
常用示例:
1
2
3unset LD_PRELOAD # 删除动态库预加载变量
unset JAVA_HOME # 删除Java环境变量
echo $LD_PRELOAD # 验证变量是否删除(无输出则成功)
查看文件尾部:tail
tail用于查看文件尾部内容,默认显示最后 10 行,-f可实时监控日志。
-
基础用法:
tail [参数] 文件名 -
常用示例:
1
2
3tail /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 [参数] 目录 -
常用示例:
1
2
3
4
5sudo 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
-
常用示例:
1
2
3nslookup www.baidu.com # 查询百度DNS解析结果
getent hosts www.baidu.com # 查询百度主机映射
getent hosts 1.1.1.1 # 反向查询IP对应的域名
网络连通性测试:ping
ping基于 ICMP 协议测试主机连通性,默认持续发送数据包,Ctrl+C 终止。
-
基础用法:
ping [参数] 目标IP/域名 -
常用示例:
1
2
3ping www.baidu.com # 测试百度连通性
ping -c 5 192.168.1.100 # 发送5个数据包后停止
ping -W 2 192.168.0.157 # 超时2秒,测试内网主机
系统服务管理:systemctl
systemctl是 systemd 系统的服务管理工具,用于启动 / 停止 / 重启系统服务(如 vsftpd)。
-
基础用法:
systemctl [操作] 服务名 -
常用示例:
1
2
3
4systemctl restart vsftpd # 重启FTP服务
systemctl start vsftpd # 启动服务
systemctl stop vsftpd # 停止服务
systemctl status vsftpd # 查看服务状态
批量终止进程:pkill
pkill根据进程名批量终止进程,无需手动查找 PID,比kill更便捷。
-
基础用法:
pkill [参数] 进程名 -
常用示例:
1
2pkill -9 File_Protector.exe # 强制终止所有该进程
pkill -9 test_tcp_server # 终止包含该名称的进程
创建 / 写入文件:echo >/>>
echo输出字符串,结合>(覆盖)/>>(追加)可快速创建 / 修改文件。
-
基础用法:
echo "内容" > 文件名或echo "内容" >> 文件名 -
常用示例:
1
2
3echo "我是受保护文件" > /tmp/protected.txt # 创建并写入(覆盖原有内容)
echo "新增内容" >> /tmp/protected.txt # 追加内容到文件末尾
echo "" > /tmp/log.txt # 清空文件内容(保留文件)
递归修改权限:chmod -R
chmod -R递归修改目录及所有子文件 / 子目录的权限,适用于批量设置。
-
基础用法:
chmod -R 权限 目录 -
常用示例:
1
2chmod -R 777 .ssh # 递归设置.ssh目录为777权限
chmod -R 755 /home/mysql/Projects # 递归设置项目目录为755
查看目录本身权限:ls -ld
ls -ld仅显示目录本身的权限 / 属性,而非目录内文件,常用于检查目录权限。
-
基础用法:
ls -ld 目录名 -
常用示例:
1
2ls -ld .ssh # 查看.ssh目录本身权限
ls -ld /home/mysql/OL # 查看OL目录权限和所有者
动态库预加载:LD_PRELOAD
LD_PRELOAD是 Linux 环境变量,指定优先加载的动态库,可覆盖系统默认库函数。
-
基础用法:
export LD_PRELOAD=动态库路径 -
常用示例:
1
2
3
4export 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 -
常用示例:
1
2ls -l /proc/self/exe # 查看当前Shell进程的可执行路径
ls -l /proc/1234/exe # 查看PID=1234进程的可执行路径
清空 / 删除目录:rm -rf
rm -rf递归强制删除目录及所有内容(无提示),需谨慎使用。
-
基础用法:
rm -rf 目录名/文件 -
常用示例:
1
2rm -rf /home/mysql/OL/build/* # 清空build目录(保留目录)
rm -rf /home/mysql/OL/build # 删除整个build目录
网络配置查看:ifconfig(补充 ipconfig)
ipconfig是 Windows 命令,Linux 等价命令是ifconfig(需安装 net-tools),用于查看 / 配置网卡信息。
-
基础用法:
ifconfig -
常用示例:
1
2
3
4sudo 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 -
常用示例:
1
2
3cat /proc/cpuinfo # 查看所有CPU信息
cat /proc/cpuinfo | grep "model name" | uniq # 筛选CPU型号
cat /proc/cpuinfo | grep "cpu cores" | uniq # 筛选CPU核心数
文件搜索:find
find是 Linux 中功能强大的文件搜索工具,可根据文件属性(文件名、类型、大小、目录深度等)查找磁盘文件,通过指定对应参数即可实现精准搜索。
- 基础用法:find 搜索路径 [搜索参数] 搜索条件
- 常用示例:
1 | # 1. 按文件名搜索(-name):支持精确和模糊查询,模糊查询建议用引号包裹通配符 |
| 文件类型 | 类型的字符描述 |
|---|---|
| 普通文件类型 | f |
| 目录类型 | d |
| 软连接类型 | l |
| 字符设备类型 | c |
| 块设备类型 | b |
| 管道类型 | p |
| 本地套接字类型 | s |
字符串搜索:grep
grep用于查找文件中符合条件的字符串,支持递归搜索、忽略大小写、显示行号等功能,是文本内容检索的常用命令。搜索内容建议用引号包裹,避免特殊字符解析错误。
- 基础用法:grep "搜索内容" 搜索路径/文件 [参数]
- 常用参数:
- -r:递归搜索目录下的所有文件
- -i:忽略搜索内容的大小写
- -n:显示匹配内容所在的行号
- 常用示例:
1 | grep "include" a.c # 搜索a.c文件中是否包含"include"字符串 |
快速文件搜索:locate
locate是简化版find,通过搜索本地文件数据库实现快速查找(效率远高于find),数据库默认每日自动更新,新增/修改文件后需用updatedb手动更新。
- 基础用法:locate [参数] 搜索关键字
- 常用参数:
- -i:忽略文件名大小写
- -n N:仅显示前N条匹配结果
- -r:基于正则表达式匹配文件名
- 常用示例:
1 | sudo updatedb # 手动更新文件数据库(普通用户需加sudo) |