C++ 程序员应该了解的 Linux 命令

Linux 相关命令、gcc 工具链、Linux 特有 API、Makefile 以及 CMake,命令有基础命令和程序员专用命令,总共就是这几个部分:

  • Linux 常用命令,例如 pwd/cd/grep/rm/mv 等,选最常用的 20 个左右
  • 编译器相关的工具链,主要是 gcc,熟悉常用的选项,如 -O/-o/-S 等
  • 熟悉调试和性能测评相关的常用命令,如 strace/tcpdump/iostat 等
  • 熟悉 Linux 的 API,主要是 C++ 没有的,像 thread、filesystem 之类的 C++ 已经有了可以不学,但是 socket 相关,epoll/io_uring 需要学,还有就是共享内存、进程的 fork 之类的
  • Makefile 以及 CMake 相关

1. Linux 常用基础命令

知识点 说明 示例
pwd 显示当前工作目录 pwd
cd 切换目录 cd /home/user
ls 列出目录内容 ls -la(显示详细列表,包括隐藏文件)
cp 复制文件或目录 cp src.txt dest.txt
mv 移动或重命名文件 mv old.txt new.txt
rm 删除文件或目录 rm -rf dir/(强制递归删除目录)
cat 查看文件内容 cat file.txt
grep 文本搜索工具 grep "error" log.txt
find 查找文件 find / -name "*.cpp"
chmod 修改文件权限 chmod 755 script.sh
chown 修改文件所有者 chown user:group file.txt
ps 查看进程状态 ps aux | grep nginx
top/htop 实时监控进程和系统资源 top(按 CPU 排序)
kill 终止进程 kill -9 1234(强制终止 PID 1234)
tar 打包/解压文件 tar -czvf archive.tar.gz dir/
ssh 远程登录服务器 ssh [email protected]
scp 安全复制文件 scp file.txt user@host:/path/
curl/wget 下载文件或测试HTTP请求 curl -O example.com/file.zip
man 查看命令手册 man ls
| 管道用于将前一个命令的输出作为下一个命令的输入 cat log.txt | grep "error"

2. 编译器工具链(GCC 常用选项)

知识点 说明 示例
-o 指定输出文件名 gcc -o hello hello.c
-O1/-O2/-O3 优化级别(代码性能优化) gcc -O2 main.c
-g 生成调试信息(用于GDB) gcc -g program.c
-Wall 启用所有警告 gcc -Wall main.c
-I 添加头文件搜索路径 gcc -I/usr/local/include main.c
-L 添加库文件搜索路径 gcc -L/usr/local/lib -lmylib main.c
-l 链接库文件 gcc -lpthread main.c
-D 定义宏 gcc -DDEBUG main.c
-S 生成汇编代码 gcc -S main.c
-E 仅执行预处理 gcc -E main.c > preprocessed.c
-shared 生成动态库(.so) gcc -shared -o libfoo.so foo.c
-static 静态链接 gcc -static main.c

3. 调试与性能测评工具

知识点 说明 示例
gdb 调试工具(设置断点、查看变量) gdb ./a.out → break main → run
strace 跟踪系统调用和信号 strace -e open,read ./program
valgrind 内存泄漏检测和性能分析 valgrind --leak-check=yes ./a.out
perf 性能分析工具(CPU、缓存等) perf record ./a.out → perf report
lsof 列出打开的文件和网络连接 lsof -i :8080(查看占用8080端口的进程)
netstat 查看网络状态 netstat -tuln(显示监听中的端口)
vmstat 监控系统资源(CPU、内存、IO) vmstat 1(每秒刷新一次)
iostat 监控磁盘I/O iostat -x 2(每2秒显示详细磁盘统计)
tcpdump 抓取网络数据包 tcpdump -i eth0 port 80

4. Linux 特有 API(C++ 标准库未覆盖的部分)

知识点 说明 示例
fork() 创建子进程 pid_t pid = fork();
exec 系列 执行外部程序 execl("/bin/ls", "ls", "-l", NULL);
pipe() 进程间通信(无名管道) int fd[2]; pipe(fd);
shmget() 共享内存操作 shmget(IPC_PRIVATE, size, 0666);
epoll 高效 I/O 多路复用(替代 select) epoll_create1(0); → epoll_ctl()
io_uring 异步 I/O 框架(高性能场景) 需包含 liburing 库并调用 io_uring_setup
socket() 网络通信(TCP/UDP) int sockfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl() 控制文件描述符属性(非阻塞 I/O 等) fcntl(fd, F_SETFL, O_NONBLOCK);
signal() 信号处理(如 SIGINT、SIGSEGV) signal(SIGINT, handler_func);
inotify 监控文件系统事件 inotify_init() → inotify_add_watch()
syslog() 系统日志记录 syslog(LOG_ERR, "Error: %s", msg);
mmap() 内存映射文件 void* addr = mmap(..., fd, 0);

5. 构建工具(Makefile/CMake)

Makefile 基础语法:

规则定义 目标: 依赖 → 命令 app: main.cpp utils.cpp g++ -o app main.cpp utils.cpp
变量定义与引用 使用 VAR = value 和 $(VAR) CC = g++ CFLAGS = -Wall -O2
自动变量 $@(目标)、$^(所有依赖)、$<(第一个依赖) app: main.o utils.o $(CC) $^ -o $@
伪目标(Phony Target) 声明不生成文件的命令(如 clean) .PHONY: clean clean: rm -f *.o app
条件判断 使用 ifeq/else/endif ifeq ($(DEBUG),1) CFLAGS += -g endif
函数调用 如 $(wildcard *.cpp) 获取文件列表 SRC = $(wildcard src/*.cpp)

CMake 基础语法:

项目声明 project()和cmake_minimum_required() cmake_minimum_required(VERSION 3.10) project(MyApp)
生成可执行文件 add_executable() add_executable(app main.cpp utils.cpp)
生成库文件 add_library() add_library(mylib STATIC mylib.cpp)
链接库 target_link_libraries() target_link_libraries(app mylib pthread)
设置变量 set() 和 option() set(CMAKE_CXX_STANDARD 17) option(BUILD_TESTS "Build tests" ON)
包含目录 target_include_directories() target_include_directories(app PUBLIC include/)
条件语句 if()/else()/endif() if(UNIX) add_definitions(-DLINUX) endif()
查找依赖包 find_package() find_package(OpenSSL REQUIRED)
安装规则 install() install(TARGETS app DESTINATION bin)
相关推荐
奕天者11 分钟前
C++学习笔记(十六)——函数重载
c++·笔记·学习
tan180°14 分钟前
版本控制器Git(4)
linux·c++·git·后端·vim
龙雨LongYu1230 分钟前
Go执行当前package下的所有方法
开发语言·后端·golang
程序员小刚37 分钟前
基于springboot + vue 的实验室(预约)管理系统
vue.js·spring boot·后端
IT 古月方源39 分钟前
linux centos 忘记root密码拯救
linux·运维·centos
程序员小刚39 分钟前
基于SpringBoot + Vue 的校园论坛系统
vue.js·spring boot·后端
苏言の狗1 小时前
R格式 | 第十五届蓝桥杯C++B组
c++·职场和发展·蓝桥杯
Hamm1 小时前
MCP 很火,来看看我们直接给后台管理系统上一个 MCP?
后端·llm·mcp
bobz9651 小时前
软件 ipsec 对接 h3c 防火墙 ipsec 对上了一半
后端
神里流~霜灭1 小时前
贪心算法简介(greed)
c语言·数据结构·c++·链表·贪心算法·动态规划·顺序表