您现在的位置是:首页 >技术教程 >【南京大学PA】 PA0 环境配置 & lab (vim | gcc | lab)网站首页技术教程

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

CPT1024 2023-06-04 04:00:02
简介【南京大学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.

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。