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++ 编译¶
判断口诀:-o 的下一个参数是可执行文件名,另一个 .cpp 才是源——g++ -o main.cpp main 会把 main.cpp 当产物覆盖,源文件是 main(不存在)→ 错。
time 的三行输出¶
单核下 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 -a 与 ls 的区别( )
- 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.cpp 报 undefined reference to func 一般是( )
- A. 语法错误
- B. 链接阶段找不到函数定义
- C. 文件不存在
- D. 权限不足
答案与解析
答案:B
编译已过、链接时缺实现——写错函数名或漏写定义。
练习 17 · 多文件编译¶
题目
编译 a.cpp b.cpp 产出 prog:g++ 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 0 后 echo $? 输出( )
- 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 命令的输出如下:
以下最接近秒表计时的时长为( )。
- 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 = 成功;编译错误(未声明)在编译期、链接错误(未定义)在链接期。