Preparation
PA0是GNU/Linux环境开发配置的指南,我们将会被引导安装GNU/Linux开发环境,所有的PA和实验都会在这个环境中完成。这个文档要仔细读,如果遇到了一些文档中没提到的问题,回来重新看。机器永远是对的。
我们将安装Ubuntu 22.04。真机地稳定性会比虚拟机相对高一些,性能也更高一些。所以还是用真机!
搜索“Ubuntu 22.04安装教程”,跟着指导继续做。(不要使用UbuntuSoftware Updater。选择语言时不要选择中文)
选择虚拟机安装,真机安装还是太麻烦了,如果有两台电脑或许可以选择真机……
First Exploration with GNU/Linux
ctrl+Alt+T 一键打开终端,显示
1 | username@hostname:~$ |
说明现在的工作目录是~
GUI似乎不见了,取而代之的是终端,全部是命令行接交互(CLI Command Line Interface).使用CLI可以做你想做的任何事情。
GUI在需要高度定义的显示的时候,比如看电影时,或许更胜一筹;其他时候或许CLI更好。
输入下面这行命令可以看看Ubuntu占用了多少空间:
1 | df -h |
关闭系统的时候,使用下面的命令
1 | poweroff |
Installing Tools
在GUN/Linus中,可以通过一行命令下载和安装软件,这在Windows上是很困难的。这是通过package manager实现的。不同的GUN/Linux发行版有不用的package manager,在Ubuntu中,package manager叫做apt
.
将会从网络镜像下载和安装PA需要的工具。使用网络镜像之前,需要检查一些系统能否上网。
Checking network state
通过下面这个命令ping一下:
1 | ping www.baidu.com -c 4 |
更改多次设置终于让虚拟机上去网了,太不容易~
Setting APT source file
运行下面的命令来更新APT源文件:
1 | sed -i "s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list" |
但权限不够。因为APT源文件为root所有。一个解决方案是切换到root账户。为了避免切换,一个可行的解决方案是使用sudo
。如果一个操作需要更高级用户许可,那么在操作前面加上sudo
。在使用sudo
之前,需要将账户加入到sudo
group中。但首先还是要进入到root账户中。
切换到root账户,后成功加入了sudo
群。root账户的密码是936042.
记得:使用需要权限的命令时加上sudo
!
Updating APT package information
输入下面命令:
1 | sudo apt-get update |
其中遇到了讲义中预料到的错误,额外运行一条命令后再次运行上面的命令即可。
Installing tools for PAs
安装了一系列工具,这些工具的用途后面会解释。
Installing Chinese input method
上网搜寻如何在Ubuntu中安装中文输入法。已经实现。
Configuring vim
1 | apt-get install vim |
vim被称为编辑器之神。后面的实验和PA的代码都会在vim中编写,其他文件也是。
Learning vim
我们将会被要求用vim
来修改一个文件。vim
中的操作和其他我们曾使用过的编辑器大有不同。学习vim
需要指导,有两种方式:
- 在终端中执行
vimtutor
命令。将会推出一个vim
的指导。这个是更推荐的 - 上网搜索“vim教程”,会搜到很多。记得使用
vim test
命令进行练习
More Exploration
Learning to use basic tools
看small tutorial for GNU/Linux written by jyy
,完成三个必做题:
- Write a “Hello World” program under GNU/Linux √
- Write a Makefile to compile the “Hello World” program √
- Learn to use GDB
a small tutorial for GDB
small tutorial for GNU/Linux
这里的很多命令在Missing Semester
里面看过了,记录一些有用的东西。
统计代码行数:
1 | find . | grep '\.c$\/\.h$' | xargs wc -l |
这里需要注意,xargs
命令的应用,搞清楚标准输入是将输入直接当作文件处理。
统计磁盘:
1 | du -sc /usr/share/* | sort -r | less |
less
命令的使用,对于较长的输出可以上下翻页。
键入命令时,如果有个目录特别长,可以用TAB
自动补全,会有奇效。
C程序编译:对于一个写好的c程序hello.c
,运行gcc
命令gcc hello.c -o hello
就能将其编译成可执行文件hello
。当然,可执行文件的名字是可以自己改的。不使用-o
选项会默认生成a.out
的文件。
Makefile管理工程:
1 | hello:hello.c |
运行命令make
执行编译,运行命令make clean
来清除已经编译好的hello
GDB:
GDB是一个历史悠久且全面的Linux debug工具。
约定:#
代表需要使用sudo
命令来执行,$
代表普通非特权用户执行。
费劲九牛二虎之力,终于能够直接在当前路径生成core
文件了
编译并执行后,得到了core
文件。这时候运行下面的命令:gdb ./test.out ./core.xxxxxx
即可打开core
文件。在这个界面可以进行很多交互的操作,查看不同帧时候的信息。
Installing tmux
tmux
:
terminal multiplexer,能够开好几个终端。这里记录一下常用命令。
tmux
:新建一个窗口tmux new -s name
:新建一个窗口,指定它的名字tmux ls
:列出所有窗口tmux attach
:连接到最近访问的一个窗口tmux kell-session -t name
:删除对应名称的窗口tmux kill-server
:中止所有tmux
对话
下面包含<CTRL>+b
的命令,都是在tmux
窗口内部进行的。省略它们前面的<CTRL>+b
。通过修改~
目录下的.tmux.conf
文件,将b
键改成了a
:
%
:水平分割窗口"
:垂直分割窗口n/p
:切换到后一个/前一个窗口d
:分离窗口,回到正常的终端而不是tmux
w
:快速切换窗口
getting source code for PAs
进行了一些配置,运行了make
make clean
等命令。等待PA1再修改这里的错误。
需要注意的是,对ysyx
学习,需要使用git log tracer-ysyx
查看代码跟踪。
使用git commit --allow-empty
命令,允许文件没有改变但需要提交的情形。