跳转至

Linux 与工具链

方法速览

任务 命令 口诀
列目录 ls list
切目录 cd 路径 change dir
建目录 mkdir 名字 make dir
显示当前路径 pwd print working dir
编译 g++ -o main main.cpp -o 在前接产物
计时 time:real 总时长、user 用户态、sys 内核态 秒表≈real

常用命令表

命令 功能 常用变体
ls 列出文件与子目录 ls -l 详细、ls -a 含隐藏
cd 切换工作目录 cd .. 上级、cd ~ 家目录
mkdir 创建目录 mkdir -p a/b/c 递归建
pwd 打印当前目录绝对路径
cp 复制 cp 源 目标
mv 移动 / 重命名
rm 删除 rm -r 目录、不可恢复
cat 查看文件内容
touch 创建空文件

g++ 编译

1
2
3
g++ -o main main.cpp     # 产物在前:main ← 源文件
g++ main.cpp -o main     # 等价:-o 后面永远跟“输出名”
g++ -O2 -std=c++14 a.cpp # 常用优化与标准

判断口诀-o下一个参数是可执行文件名,另一个 .cpp 才是源——g++ -o main.cpp main 会把 main.cpp 当产物覆盖,源文件是 main(不存在)→ 错。

time 的三行输出

1
2
3
real  0m30.721s   ← 墙钟总时长(秒表测的就是它)
user  0m24.579s   ← 用户态 CPU 时间
sys   0m6.123s    ← 内核态 CPU 时间

单核下 user + sys ≤ real;秒表对齐 real

练习题目

练习 1 · 列目录

题目

Linux 中列出当前目录内容的命令是( )

  • A. pwd
  • B. cd
  • C. ls
  • D. rm
答案与解析

答案:C

list 的缩写。

练习 2 · 切换目录

题目

切换工作目录的命令是( )

  • A. ls
  • B. mkdir
  • C. cd
  • D. cp
答案与解析

答案:C

change directory。

练习 3 · 建目录

题目

创建新目录的命令是( )

  • A. newdir
  • B. mkfolder
  • C. create
  • D. mkdir
答案与解析

答案:D

make directory。

练习 4 · 当前路径

题目

显示当前工作目录绝对路径的命令是( )

  • A. pwd
  • B. ls -l
  • C. cd
  • D. path
答案与解析

答案:A

print working directory。

练习 5 · 上级目录

题目

回到上一级目录用( )

  • A. cd .
  • B. cd ..
  • C. cd /
  • D. cd ~
答案与解析

答案:B

.. 是上级、. 是当前、/ 是根、~ 是家。

练习 6 · 编译命令

题目

main.cpp 编译成可执行文件 main,正确的是( )

  • A. g++ main -o main.cpp
  • B. g++ -o main.cpp main
  • C. g++ -o main main.cpp
  • D. g++ main.cpp -o main.cpp
答案与解析

答案:C

-o 后跟输出文件名 main;B/D 都会把 main.cpp 当输出。

练习 7 · 编译参数

题目

g++ -O2 -std=c++14 x.cpp-O2-std=c++14 分别是( )

  • A. 调试信息、链接选项
  • B. 输出文件、库路径
  • C. 警告等级、优化等级
  • D. 优化等级、语言标准
答案与解析

答案:D

-O2 开优化、-std= 指定 C++ 标准(竞赛常用 c++14/17)。

练习 8 · time 输出

题目

time 输出 real 0m10s、user 0m6s、sys 0m2s,秒表大约显示( )

  • A. \(10\)
  • B. \(6\)
  • C. \(8\)
  • D. \(2\)
答案与解析

答案:A

秒表 = real(墙钟时间);user+sys 只是 CPU 实际占用。

练习 9 · user 与 sys

题目

user 时间与 sys 时间的区别( )

  • A. 编译期与运行期
  • B. 登录时间与关机时间
  • C. 用户代码 vs 内核(系统调用)代码的 CPU 时间
  • D. 没有区别
答案与解析

答案:C

你的代码跑在 user、系统调用(读写文件等)跑在 sys。

练习 10 · 删除文件

题目

删除文件 a.txt 用( )

  • A. del a.txt
  • B. delete a.txt
  • C. rm a.txt
  • D. mv a.txt
答案与解析

答案:C

remove;del 是 Windows 的命令。

练习 11 · 复制与移动

题目

a.cpp 重命名为 b.cpp 用( )

  • A. cp a.cpp b.cpp
  • B. mv a.cpp b.cpp
  • C. rm a.cpp
  • D. touch b.cpp
答案与解析

答案:B

mv 同目录下即重命名;cp 是复制(a.cpp 还在)。

练习 12 · 查看文件

题目

不打开编辑器直接打印文件内容的命令( )

  • A. pwd
  • B. ls
  • C. cd
  • D. cat
答案与解析

答案:D

cat 文件名 一次性输出全部内容。

练习 13 · 隐藏文件

题目

ls -als 的区别( )

  • A. -a 显示绝对路径
  • B. -a 按时间排序
  • C. -a 额外显示以 . 开头的隐藏文件
  • D. 没区别
答案与解析

答案:C

all:含 .(当前)与 ..(上级)。

练习 14 · 根与家

题目

cd /cd ~ 分别到( )

  • A. 上级、根目录
  • B. 家目录、根目录
  • C. 根目录、当前用户家目录
  • D. 均为根目录
答案与解析

答案:C

/ 是整棵树的根;~/home/用户名

练习 15 · 可执行权限

题目

编译出的 main 运行方式是( )

  • A. exec main
  • B. main
  • C. run main
  • D. ./main
答案与解析

答案:D

当前目录不在 PATH 中,要 ./ 前缀指明路径。

练习 16 · 编译错误定位

题目

g++ a.cppundefined reference to func 一般是( )

  • A. 语法错误
  • B. 链接阶段找不到函数定义
  • C. 文件不存在
  • D. 权限不足
答案与解析

答案:B

编译已过、链接时缺实现——写错函数名或漏写定义。

练习 17 · 多文件编译

题目

编译 a.cpp b.cpp 产出 progg++ a.cpp b.cpp -o prog 中漏掉 b.cpp 会( )

  • A. 正常运行
  • B. 链接错误(b 中定义的符号未定义)
  • C. 语法错误
  • D. 只是变慢
答案与解析

答案:B

链接器找不到 b.cpp 提供的函数定义。

练习 18 · 重定向

题目

./main < in.txt > out.txt 的含义( )

  • A. 删除输出
  • B. 复制文件
  • C. 编译并运行
  • D. 从 in.txt 读输入、把输出写进 out.txt
答案与解析

答案:D

< 接标准输入、> 接标准输出——对拍的标准姿势。

练习 19 · 管道

题目

ls | wc -l 的作用( )

  • A. 统计当前目录下条目数
  • B. 列出所有文件内容
  • C. 编译
  • D. 切换目录
答案与解析

答案:A

管道把 ls 的输出喂给 wc -l(数行数)。

练习 20 · 编辑器与编译器

题目

VS Code 与 g++ 分别是( )

  • A. 编辑器、编译器
  • B. 编译器、编辑器
  • C. 都是编辑器
  • D. 都是编译器
答案与解析

答案:A

一个管写代码、一个管翻译成机器码。

练习 21 · 命令辨析

题目

下列命令中会递归删除目录的是( )

  • A. rm -r dir
  • B. mkdir dir
  • C. cat dir
  • D. pwd dir
答案与解析

答案:A

-r 递归——删目录必带,且不可恢复

练习 22 · Windows 对照

题目

与 Windows 的 dir 作用最接近的 Linux 命令是( )

  • A. cd
  • B. ls
  • C. rm
  • D. cp
答案与解析

答案:B

都是列目录。

练习 23 · 退出状态

题目

程序 return 0echo $? 输出( )

  • A. \(0\)
  • B. \(1\)
  • C. 随机
  • D. 程序名
答案与解析

答案:A

$? 是上一命令退出码,0 表示成功——判题机也这么判。

练习 24 · 编译产物

题目

g++ x.cpp 不加 -o 时默认产物名是( )

  • A. a.out(Linux)/ a.exe(Windows)
  • B. x
  • C. x.out
  • D. 没有产物
答案与解析

答案:A

不指定输出名就用默认 a.out

练习 25 · 头文件与编译

题目

#include <cstdio> 缺失导致 printf 未声明的报错发生在( )

  • A. 编译阶段
  • B. 运行阶段
  • C. 链接阶段
  • D. 不报错
答案与解析

答案:A

编译期就发现符号未声明;链接错误是“定义缺失”,两者要区分。

练习 26 · time 的适用

题目

多核机器上 user + sys 可能( )

  • A. 超过 real(多核并行累加 CPU 时间)
  • B. 一定小于 real
  • C. 恒等于 real
  • D. 与 real 无关
答案与解析

答案:A

多线程会把多个核的 CPU 时间都计入 user——单核才是 user+sys ≤ real。

历年真题

2021 年 · 第 1 题

题目

Linux 系统终端中,用于列出当前目录下所含的文件和子目录的命令为( )。

  • A. ls
  • B. cd
  • C. cp
  • D. all
答案与解析

答案:A

list。

2022 年 · 第 1 题

题目

Linux 系统终端中,用于切换工作目录的命令为( )。

  • A. ls
  • B. cd
  • C. cp
  • D. all
答案与解析

答案:B

change directory。

2022 年 · 第 2 题

题目

你同时用 time 命令和秒表为某个程序在单核 CPU 上的运行计时。假如 time 命令的输出如下:

1
2
3
real    0m30.721s
user    0m24.579s
sys     0m6.123s

以下最接近秒表计时的时长为( )。

  • A. \(30\text{s}\)
  • B. \(24\text{s}\)
  • C. \(18\text{s}\)
  • D. \(6\text{s}\)
答案与解析

答案:A

秒表量的是墙钟时间 real;user + sys 是 CPU 时间(\(24.579 + 6.123 \approx 30.7\) 恰好也接近 real,因为单核无等待)。

2023 年 · 第 1 题

题目

Linux 系统终端中,以下哪个命令用于创建一个新的目录?( )

  • A. newdir
  • B. mkdir
  • C. create
  • D. mkfolder
答案与解析

答案:B

make directory。

2023 年 · 第 11 题

题目

以下哪个命令能将一个名为 main.cpp 的 C++ 源文件编译并生成一个名为 main 的可执行文件?( )

  • A. g++ -o main main.cpp
  • B. g++ -o main.cpp main
  • C. g++ main -o main.cpp
  • D. g++ main.cpp -o main.cpp
答案与解析

答案:A

-o 后跟输出名 main、源文件在后;B/D 把 main.cpp 当输出会覆盖源文件。

2024 年 · 第 1 题

题目

Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?( )

  • A. echo
  • B. cd
  • C. ls
  • D. pwd
答案与解析

答案:D

print working directory(echo 打印文本、cd 切目录、ls 列目录)。

易错小结

  • 每年一道命令送分题:ls / cd / mkdir / pwd 四连背熟;
  • g++ -o 产物 源文件——-o 后面是输出,别把 .cpp 放 -o 后面;
  • time 三行:秒表对 real;user+sys 是 CPU 时间(单核 ≤ real、多核可超);
  • rm 无回收站;./main 运行要 ./< > 重定向是对拍基本功;
  • 退出码 0 = 成功;编译错误(未声明)在编译期、链接错误(未定义)在链接期。