您现在的位置是:首页 >技术教程 >【南京大学PA】 PA0 环境配置 & lab (vim | gcc | lab)网站首页技术教程
【南京大学PA】 PA0 环境配置 & lab (vim | gcc | lab)
本文章学习NJU 的 PA 课程记的笔记
注意事项
- whoami 指令 显示你当前的用户ID
- sudo whoami
linux配置
- cpp 环境
apt-get install build-essential # build-essential packages, include binary utilities, gcc, make, and so on
apt-get install man # on-line reference manual
apt-get install gcc-doc # on-line reference manual for gcc
apt-get install gdb # GNU debugger
apt-get install git # revision control system
apt-get install libreadline-dev # a library used later
apt-get install libsdl2-dev # a library used later
apt-get install llvm llvm-dev # llvm project, which contains libraries used later
apt-get install llvm-11 llvm-11-dev # only for ubuntu20.04
vim 使用 和 环境配置
cp /etc/vim/vimrc ~/.vimrc
cd ~
ls -a #.vimrc 属于隐藏文件
vim .vimrc
// 加上
setlocal noswapfile " 不要生成swap文件
set bufhidden=hide " 当buffer被丢弃的时候隐藏它
colorscheme evening " 设定配色方案
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=2 " 设定 << 和 >> 命令移动时的宽度为 2
set softtabstop=2 " 使得按退格键时可以一次删掉 2 个空格
set tabstop=2 " 设定 tab 长度为 2
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
set backupcopy=yes " 设置备份时的行为为覆盖
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
set matchtime=2 " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline= %<%F[%1*%M%*%n%R%H]%= %y %0(%{&fileformat} %{&encoding} Ln %l, Col %c/%L%) " 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为 1
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR> " 用空格键来开关折叠
补linux指令
ln
主要用于在两个文件中创建链接,链接又分为Hard Links
(硬链接)和Symboli Links
(符号链接或软链接),其中默认为创建硬链接,使用-s
参数指定创建软链接。
硬链接主要是增加一个文件的链接数,只要该文件的链接数不为 0
,该文件就不会被物理删除,所以删除一个具有多个硬链接数的文件,必须删除所有它的硬链接才可删除。
软链接简单来说是为文件创建了一个类似快捷方式的东西,通过该链接可以访问文件,修改文件,但不会增加该文件的链接数,删除一个软链接并不会删除源文件,即使源文件被删除,软链接也存在,当重新创建一个同名的源文件,该软链接则指向新创建的文件。
硬链接只可链接两个文件,不可链接目录,而软链接可链接目录,所以软链接是非常灵活的。
mkdir 用于新建文件夹。
$ cp source dest ### 将 source 复制到 dest
$ cp folder/* dest ### 将 folder 下所有文件(不含子文件夹中的文件)复制到 dest
$ cp -r folder dest ### 将 folder 下所有文件(包含子文件夹中的所有文件)复制到 dest
$ mv source folder ### 将 source 移动到 folder 下,完成后则为 folder/source
$ mv -i source folder ### 在移动时,若文件已存在则提示 **是否覆盖**
$ mv source dest ### 在 dest 不为目录的前提下,重命名 source 为 dest
$ cat /etc/locale.gen ### 输出 locale.gen 的内容
$ cat -n /etc/locale.gen ### 输出 locale.gen 的内容并显示行号
# 用 more 逐行显示内容。
$ more /etc/locale.gen
$ more +100 /etc/locale.gen ### 从 100 行开始显示
reboot 为重启命令。
poweroff ### 马上关机
$ grep PATTERN filename ### 返回所有含有 PATTERN 的行
$ grep zh_CN /etc/locale.gen ### 返回所有含 zh_CN 的行
$ tar -cvf filename.tar . ### 将当前目录所有文件归档,但不压缩,注意后面有个 ’.‘ ,不可省略,代表当前目录的意思
$ tar -xvf filename.tar ### 解压 filename.tar 到当前文件夹
$ tar -cvjf filename.tar.bz2 . ### 使用 bzip2 压缩
$ tar -xvjf filename.tar.bz2 ### 解压 filename.tar.bz2 到当前文件夹
$ tar -cvzf filename.tar.gz ### 使用 gzip 压缩
$ tar -xvzf filename.tar.gz ### 解压 filename.tar.gz 到当前文件夹
$ tar -tf filename ### 只查看 filename 归档中的文件,不解压
$ ln source dest ### 为 source 创建一个名为 dest 的硬链接
$ ln -s source dest ### 为 source 创建一个名为 dest 的软链接
#ln 连接文件 用于 防止误删操作
#一个文件名和这个i结点 建立链接
#ln都是指向同一个i结点 ln不可夸约分区 不能连接目录
# 符号链接(软链接 跨分区用) 记录路径 i结点标号都是不同的
# chown 用于改变一个文件的所有者及所在的组
chown user filename ### 改变 filename 的所有者为 user
chown user:group filename ### 改变 filename 的所有者为 user,组为 group
chown -R root folder ### 改变 folder 文件夹及其子文件的所有者为 root
ls -l # 查询文件权限 所有者 、 用户组 、 其他 读取r 、 写入w 、 执行x
# chmod +x filename ### 为 user ,group ,others 添加执行权限
# chmod -x filename ### 取消 user , group ,others 的执行权限
# chmod +w filename ### 为 user 添加写入权限
# chmod ugo=rwx filename ### 设置 user ,group ,others 具有 读取、写入、执行权限
# chmod ug=rw filename ### 设置 user ,group 添加 读取、写入权限
# chmod ugo=--- filename ### 取消所有权限
useradd 用于添加一个普通用户。
# useradd -m -g users -G audio -s /usr/bin/bash newuser
### -m 创建 home 目录, -g 所属的主组, -G 指定该用户在哪些附加组, -s 设定默认的 shell ,newuser 为新的用户名
passwd 用于改变用户登录密码。
$ passwd ### 不带参数更改当前用户密码
# passwd newuser ### 更改上述新建的 newuser 的用户密码
#whereis 用于查找文件、手册等。
$ whereis bash
bash: /usr/bin/bash /etc/bash.bashrc /etc/bash.bash_logout /usr/share/man/man1/bash.1.gz /usr/share/info/bash.info.gz
$ whereis -b bash ### 仅查找 binary
bash: /usr/bin/bash /etc/bash.bashrc /etc/bash.bash_logout
$ whereis -m bash ### 仅查找 manual
bash: /usr/share/man/man1/bash.1.gz /usr/share/info/bash.info.gz
# find 也用于查找文件,但更为强大,支持正则,并且可将查找结果传递到其他命令。
$ find . -name PATTERN ### 从当前目录查找符合 PATTERN 的文件
$ find /home -name PATTERN -exec ls -l {} ; # 从 /home 文件查找所有符合 PATTERN 的文件,并交由 ls 输出详细信息
lab
Write a “Hello World” program under GNU/Linux
Write a “Hello World” program, compile it, then run it under GNU/Linux. If you do not know what to do, refer to the GNU/Linux tutorial above.
Here’s a simple “Hello World” program in C:
Copy
#include <stdio.h>
int main() {
printf("Hello World!
");
return 0;
}
To compile this program, save it to a file called hello.c
and open a terminal. Navigate to the directory where the file is saved and type the following command:
Copy
gcc -o hello hello.c
This will compile the program and create an executable file called hello
. To run the program, type:
Copy
./hello
This should output:
Copy
Hello World!
Congratulations, you’ve successfully written and run your first program under GNU/Linux!
Write a Makefile to compile the “Hello World” program
Write a Makefile to compile the “Hello World” program above. If you do not know what to do, refer to the GNU/Linux tutorial above.
以下是一个简单的Makefile,用于编译C语言中的“Hello World”程序:
Makefile
文件名的文件 和hello.c
必须在同一目录文件下
CC=gcc 指定用gcc编译器进行编译
CFLAGS=-Wall 第二行指定了编译选项 -wall 表示开启 所有警告信息 (去了也不影响)
hello: hello.c 编译目标程序是hello 依赖于 hello.c 文件
$(CC) $(CFLAGS) -o hello hello.c 输入make就会执行行命令
clean: // 输入make clean 执行
rm -f hello
将此代码保存到名为Makefile
的文件中,与你的hello.c
文件在同一个目录下。
要使用此Makefile,请打开终端并导航到文件保存的目录。然后输入以下命令:
make
这将使用Makefile中定义的规则编译程序。要运行程序,请输入:
./hello
这应该会输出:
Hello World!
要清理已编译的文件,请输入: (不然没办法继续编译)
make clean
这将删除hello
可执行文件。
Learn to use GDB
Read the GDB tutorial above and use GDB following the tutorial. In PA1, you will be required to implement a simplified version of GDB. If you have not used GDB, you may have no idea to finish PA1.