> 文章列表 > 【南京大学PA】 PA0 环境配置 lab (vim | gcc | lab)

【南京大学PA】 PA0 环境配置 lab (vim | gcc | lab)

【南京大学PA】 PA0 环境配置  lab (vim | gcc | lab)

本文章学习NJU 的 PA 课程记的笔记

  • 南大PA
  • WLS空间管理

注意事项

【南京大学PA】 PA0 环境配置  lab (vim | gcc | lab)

  • whoami 指令 显示你当前的用户ID
  • sudo whoami

linux配置

  • cpp 环境

【南京大学PA】 PA0 环境配置  lab (vim | gcc | lab)

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 使用 和 环境配置

【南京大学PA】 PA0 环境配置  lab (vim | gcc | lab)


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 的所有者为 userchown user:group filename   改变 filename 的所有者为 user,组为 groupchown -R root folder        改变 folder 文件夹及其子文件的所有者为 rootls -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!\\n");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!

【南京大学PA】 PA0 环境配置  lab (vim | gcc | lab)

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可执行文件。
【南京大学PA】 PA0 环境配置  lab (vim | gcc | lab)

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.