写在前面
由于同学们在ECE120这门课的Lab中感觉吃力,而本人恰好有一丢丢基础(约等于没有),故将同学们所遇到的问题做一个汇总,以Q&A的形式记录下来。
Lab1
Q1:这个命令行下输的东西都是什么意思啊?
A1:
下面列出一个样例:
1
[tofucurd@linux ~]$
这个界面叫做CLI(Command-line interface),它跟我们平时熟悉的图形界面一样,都是操作电脑的界面。从某种意义上,上面这一行东西就相当于下面这一个界面:

这当中,tofucurd是本地的用户名,linux是主机名,他们以@分割。注意,中括号[]不是一定存在的,依情况而定。~是当前的工作目录(~是一个变量,他代表着当前用户的主目录,超级用户(root)的话就代表着/root,普通用户(如tofucurd)就代表着/home/用户名(在这里就是tofucurd)),即当前所有执行的操作默认都在这个目录下进行,除非你指定另外的目录。$则是提示符,提示你可以在$之后输命令,值得注意的是字符$同样也不是固定的,也可能是#,%等。
我们在$后面输的就是我们的命令了,如下:
1
2
3
4
[tofucurd@linux ~]$ ls
[tofucurd@linux ~]$ touch a.txt
[tofucurd@linux ~]$ mkdir -p b/c/
[tofucurd@linux ~]$ mv a.txt b/c/
这当中,ls,touch,mkdir,mv都是应用程序,或者命令,跟我们所熟知的Word,Chrome,Genshin Impact是一类东西。当你打出这一行字的时候,意思就是你想用这个应用程序做一些事情,跟在Windows下双击打开是一个意思。而后面跟的a.txt,-p等都是参数(不是必需的),意思就是你想如何使用这一个应用程序,每个应用程序所需的参数都不一样,语法也不一样,就像是你打开Word,Ctrl+N新建文档,Ctrl+O打开旧文档和打开Chrome,Ctrl+L定位到地址栏,Ctrl+R刷新一样的。而当你输完一行按下回车后,这个应用程序就开始运行了,并且是按照你刚刚参数所指定的内容运行,这时你的窗口可能会自己输出一些东西,这也就是这个应用程序给你的反馈,就像是你在Word里点了一下右键,就跳出来一个菜单一样。而当应用程序执行完任务以后,就会自行关闭,重新回到提示符的状态,整个过程如下所示:
1
2
3
4
5
6
7
[tofucurd@linux ~]$ 命令
...
...
(应用程序的输出)
...
...
[tofucurd@linux ~]$ <--到这里你又可以输下一条命令了!
因此,执行一行命令,就相当于在图形界面下执行:打开窗口$\to$使用这个应用程序做一些事情$\to$关闭这个窗口。
Q2:目录是什么?
A2:
目录是一串字符,实际上相当于是一个文件或文件夹在整个系统中的“位置”,这样使用目录可以让我们精确地“定位”我们想要的文件或文件夹,避免歧义。如以下样例:
1
/home/tofucurd/GithubRepositories/tofucurd.github.io/_posts/2025-9-27-ECE120 Lab Q&A.md
其中home,tofucurd,_posts,tofucurd.github.io等都是文件夹的名字,而最后的这一个2025-9-27-ECE120 Lab Q&A.md则是文件的名字,这些文件夹与文件夹、文件夹与文件之间的/就是分隔符,如home/tofucurd意思就是名为home的文件夹里有一个叫做tofucurd的文件夹,而_posts/2025-9-27-ECE120 Lab Q&A.md意思就是名为_posts的文件夹里有一个叫做2025-9-27-ECE120 Lab Q&A.md的文件。在linux(或macOS、FreeBSD等类Unix系统)下,系统的最高级文件夹就是/,也称之为“根目录”,根目录不在任何文件夹里,它包含了整个系统所有的文件夹与文件,因此上述从/开始的目录也称之为绝对路径。
但是如果干什么都要从根目录开始“定位”的话,确实有点太麻烦了,我们其实可以仿照现实中的用我左边10米远的地方代替39.90403°N 116.40753°E的方法,使用相对路径代替绝对路径,如下:
1
2
./a/b/c
../d/e/f
其中.和..都是变量,.代表当前工作目录(就是[tofucurd@linux ~]$中的~所代表的部分)。..代表当前目录的父目录,比如在/a/b/c/d中,如果当前工作目录.是/a/b/c,那..就是/a/b,../..就是/a。./a/b/c意为当前目录下一个叫做a的文件夹下一个叫做b的文件夹下一个叫做c的文件或文件夹。../d/e/f意为当前目录的父目录下一个叫做d的文件夹下一个叫做e的文件夹下一个叫做f的文件或文件夹,也就是说,文件夹d是当前文件夹的兄弟文件夹,他们同属一个文件夹下。
跳转目录我们常使用两个命令:ls和cd
ls是’list’的意思,作用是列出当前目录下包含哪些东西,默认没有参数。加上参数-al可以更加详细的列出相关信息。
cd是’change directory’的意思,作用是改变工作目录,用法是cd 目标目录,目标目录可以使用相对路径或者绝对路径。
在命令行下跳转目录的操作流程可以是:在提示符(如$)前查看当前目录在哪里$\to$使用ls查看当前目录下有哪些东西$\to$使用cd跳转目录。
Q3:我怎么建不了文件夹,它显示我没有权限
A3:
原因
这种情况发生在使用WSL的同学上,这位同学一定是使用了Windows的资源管理器去在linux的目录下创建文件夹。
Solution
虽然WSL提供了在Windows的资源管理器中访问linux文件系统的功能,但是仍然不要使用Windows的应用程序去操作linux的东西。关闭资源管理器,使用命令行下的mkdir命令即可解决问题。
PS.在Lab1中,应当使用svn mkdir!!!
Q4:svn给我报错了,称stuff is not under version control
A4:
原因
这位同学在建文件夹时没有在mkdir前加上svn
Solution
不用删除stuff文件夹,执行svn add stuff即可
Q5:svn报错,称stuff is not a directory
A5:
原因
这位同学在执行svn mv baz.txt stuff之前没有创建stuff文件夹。
PS. 命令mv有两个功能:移动和重命名(虽然可以视作一个操作)。比如上述命令,lab1文件夹中本来没有一个叫做stuff的文件夹,于是mv就将stuff看作了一个文件,于是你就把baz.txt重命名为了stuff;而如果之前创建了一个文件夹,mv就会把baz.txt移动到stuff里去,名字不变。
Solution
依次执行以下命令:
1
2
3
svn revert baz.txt
svn mkdir stuff
svn mv baz.txt stuff
Q6:svn报错,称xxx is not a working copy
A6:
原因
这个报错多出现在刚刚checkout完,未进入./ece120fl25/lab1导致的
Solution
cd进lab1目录。
1
cd ./ece120fl25/lab1
PS. 如果拿不准可以先ls看看
Q7:svn commit是干什么的,-m又是干什么的?
A7:
commit意为提交,意思就是说我现在已经做完一个阶段的事了,可以确定下来一个版本并且同步到云端仓库了。-m的意思就message,即给此次commit做一个说明,比如这次commit做了哪些改动之类的。也就意为着当你做完所有操作并commit后,你的lab1也就做完了。