参考:【计算机入门专题】Step 2 环境篇
why linux?
网上有许多答案可以解答,此处不再赘述
ps:本人linux小白,整理可能有缺失,欢迎大家指正修改。
如何安装?
虚拟机,双系统,直接安装(网上有详细教程)(ubuntu、debian、centos……)
双系统比较可靠,性能也会发挥的更好,虚拟机简便易操作
PS:也可以租用轻量应用服务器,配置Linux操作系统后,即可通过网络连接(windows terminal 、MobaXterm进行ssh连接)也是目前我常用的方式
一台服务器可以用来干很多事情呢(逃
WSL2也是不错的选择(只要不在会对网卡数量进行检测的有线校园网下使用 😅 )
开始部署
保存好root密码!!!
配置编程环境,我们需要一个好用的文本编辑器,vim,Atom,emacs……各位可以自由挑选,下文将会以vim文本编辑器进行叙述,也会通过终端进行所有操作;
面对一个全新的系统,我们需要更换国内源,以保证在国内下载软件时速度与稳定性,具体操作各系统方式不同
软件安装、更新
sudo apt-get update
sudo apt-get upgrade
以上为常用的终端更新软件的方式,想要安装软件,可以通过寻找相关指令进行安装,也可以通过图形化界面下载安装包安装(安装过程可能需要命令操作)
比如安装vim,有时候我们输入vim会出现各个版本类型,通过再次输入相应版本我们便可继续安装
sudo apt-get install vim-gtk
在指令前加sudo是为了一管理员权限运行指令,我们可以通过登录root超级用户账号,省去使用他的操作(打开该终端未输入过密码时会提示输入密码)
sudo su
sudo [用户名]
搭建一个编程环境前,最重要的是文件归档
我们可以通过cd指令定位并打开文件夹,mkdir指令创建文件夹,ls显示当前目录,在终端窗口,我们能够直观的看到我们所处的位置
mkdir code
cd code
ls
ps:各个指令基本使用方式
cd 单独一个cd,切换到用户主目录
cd ~ 切换到用户主目录
cd / 切换到根目录
cd .. 切换到上级目录
cd ../.. 切换到上上级目录,可以此类推。
cd - 返回到上次命令目录(类似于命令回退)
ls 显示当前文件夹下的文件和文件夹
ls -l 显示目录内容列表
ls -F 显示文件名和文件类型标识符
rm [options] name...
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
rm -r test.cpp
新建好文件夹,我们就开始搭建编程环境(此处以c/c++为例子进行搭建)
我们需要配置gcc g++文件,如下我们通过安装build-essential来减少操作
apt-get install build-essential
安装完成后便可进行程序编写了,定位到适合文件夹后,我们可以开始新建文件,这一步需要对各语言文件类型进行了解 c++文件一般后缀为.cpp,c文件一般为.c
我们进行C++程序的编写
vim test.cpp
此操作可以作为文件新建,也可以作为打开文件的方式。进入对应界面后可能会不知所措,下面介绍一下vim编辑器的基本操作方式
vim编辑器有三种模式,命令模式,输入模式,底线命令模式,我们打开文件会进入命令模式,输入i进入输入模式(输入o也可以,会新增一行),x会删除当前光标的字符,:会切换至底线命令模式。
进入输入模式后,编写我们的第一个程序
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello,world";
return 0;
}
按esc可以回到命令模式,附一些可执行操作
字符按键以及Shift组合 输入字符
ENTER 回车键,换行
BACK SPACE 退格键,删除光标前一个字符
DEL 删除键,删除光标后一个字符
方向键 在文本中移动光标
HOME/END 移动光标到行首/行尾
Page Up/Page Down 上/下翻页
Insert 切换光标为输入/替换模式,光标将变成竖线/下划线
ESC 退出输入模式,切换到命令模式
回到命令模式后就要进行保存,这里不会像Word一样为你自动保存,不能偷懒
按下冒号:输入w(保存文件) q(退出文件)回车执行指令
:wq
附一些常用的命令
源文件完成,现在我们要对程序进行编译
g++ test.cpp -o test.out
ps: -o 后生成对应文件名,不输入-o则会默认生成 a.out 文件
程序无报错就可以进行下一步,若报错则需回到文件进行修改调试(这一步作为拓展自己搜索资料实践吧)
运行文件
./test.out
此时会在终端显示“Hello,world!”
至此,基本的C++程序编译就结束了
建议
在终端输入的命令出现问题时可以多观察一下哪里出错
多使用-help命令在命令行查看帮助指引
拓展:gdb调试
可用于观察程序运行过程,及其细节,也可用于调试错误代码
这里我们通过执行一段程序,介绍基础使用方式
需要安装gdb
apt-get install gdb
例子:test.cpp//判断素数
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int n)
{
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) return 0;
return 1;
}
int main()
{
int num;
cin>>num;
if(isPrime(num))
cout<<num<<"is a Prime number";
else
cout<<num<<"is not a Prime number";
cout<<endl;
}
生成文件后启动gdb调试
g++ test.cpp -g -o test.out
gdb test
出现
(gdb)
代表成功启动
我们生成了一个带有调试参数的文件并正式进入gdb调试,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址
此时输入run便可执行程序,
但现在我们需要设置断点,以保证能够逐步调试
break main
break isPrime
//输出
Breakpoint 1 at 0x11f0: file test.cpp, line 13.
Breakpoint 2 at 0x11a0: file test.cpp, line 6.
接下来执行run
Breakpoint 1, main () at test.cpp:13
13 cin>>num;
输入next进入输入步骤,终端会等待你输入num后继续执行(这里我输入27)
14 if(isPrime(num))
此时我们可以通过print指令观察赋值情况
print num
//输出
$1=27
输入next进入下一步
14 if(isPrime(num))
由于我们设置了关于isPrime函数的断点,下一步会进入isPrime函数内进行调试
(gdb) next
Breakpoint 2, isPrime (n=9) at test.cpp:6
6 for(int i=2;i<=sqrt(n);i++)
(gdb) print n
$1 = 27
(gdb) print i
$2 = 0
(gdb) next
7 if(n%i==0) return 0;
(gdb) print i
$3 = 2
(gdb) next
6 for(int i=2;i<=sqrt(n);i++)
(gdb) print i
$4 = 2
(gdb) next
7 if(n%i==0) return 0;
(gdb) print i
$5 = 3
(gdb) next
9 }
在此时,我们发现,当i=3时候程序退出,未执行至\sqrt{27}
(gdb) next
(gdb) next
17 cout<<num<<"is not a Prime number";
(gdb) next
18 cout<<endl;
(gdb) next
27is not a Prime number
19 }(gdb)
到现在能基本看懂gdb调试的功能了吧
退出gdb调试模式,输入quit回车即可
还有更多进阶功能等待挖掘(寻址……)
在gdb内输入help根据指引可以查阅相关内容
论坛也有可以参考的gdb 简明使用教程