Ubuntu修改系统时间

1 Ubuntu的时间分类
    1.Ubuntu时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。
    2.查看系统时间:date -R
    3.查看硬件时间: sudo hwclock --show



2 修改Ubuntu系统时间
2.1 修改时间
    1. tzselect
    2. 依次选择4->9->1->1 #Asia->China-> Beijing->yes


2.2 复制文件到/etc目录下
sudo cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

2.3 查看修改结果
date -R

3 修改Ubuntu硬件时间
sudo date -s MM/DD/YY //修改日期
sudo date -s hh:mm:ss //修改时间
sudo hwclock --systohc //修改生效

apt-get install -y tzdata
dpkg-reconfigure tzdata

新版timedatectl
timedatectl set-time ’16:10:40 2015-11-20′
timedatectl set-time 15:58:30
timedatectl set-time 20151120
将你的硬件时钟设置为协调世界时(UTC):
timedatectl set-local-rtc 0
要开始自动时间同步到远程NTP服务器,在终端键入以下命令。
timedatectl set-ntp true
要禁用NTP时间同步,在终端键入以下命令。
timedatectl set-ntp false
查看状态
timedatectl status

timedatectl 和 timesyncd 用来获取时间的 nameserver 可以通过 /etc/systemd/timesyncd.conf 来指定,另外在 /etc/systemd/timesyncd.conf.d/ 下还有灵活的附加配置文件

老的同步
apt install ntp ntpdate -y
选择一台服务作为 ntp 时间服务器,修改/etc/ntp.conf文件,删除:
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
改为 pool
server ntp3.aliyun.com iburst
其它服务 pool
server 178.100.101.6 prefer
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
去掉#打开注释,并将其ip修改服务器所在网段,
restrict 178.100.0.0 mask 255.255.0.0 nomodify notrap

在集群中的其他服务器上,也要修改此文件,删除掉:
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
加入:
server 192.168.210.101 prefer

集群中的所有服务器上执行如下命令:
service ntpd restart /etc/init.d/ntp restart
systemctl disable chronyd.service
chkconfig –level 345 ntpd on

集群中192.168.210.101以外的服务器上执行:
ntpq -p

ntpdate 178.100.101.6
sudo hwclock -w
客户端同时时出现:no server suitable for synchronization found 错误提示
在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误

如何知道何时ntp server完成了和自身同步的过程呢?
  在ntp server上使用命令:
  #ntpq -p
查看所有服务
service –status-all

Ubuntu系统常用配制

  • 配制超级管理员
    sudo passwd root
  • 切换用户
    su – root / su root 区别是否切换到用户目录
  • 更改计算机名
    buntu Server 18.04直接进入/etc/hostname修改主机名的时候,重启后发现没有修改成功,这是因为Ubuntu18.04与之前的版本有些不同,需要先做一些额外的操作
    sudo vim /etc/cloud/cloud.cfg,将preserve_hostname设置为true
    sudo vim /etc/hostname,修改主机名
    重启服务器
  • 支持exfat
    sudo apt-get install exfat-utils
  • 安装UnZip exFat
    sudo apt-get install exfat-utils

创建用户有两条命令:adduser和useradd,对应着两条删除用户的命令:deluser和userdel。
这两种命令之间的区别:
adduser:会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
sudo adduser sweet

如果需要让此用户有root权限,执行命令:
root@ubuntu:~# sudo vim /etc/sudoers
修改文件如下:
User privilege specification
root ALL=(ALL) ALL
sweet ALL=(ALL) ALL
保存退出时候须在保存命令加!号,例如(:wq!),linuxidc用户就拥有了root权限。

用户属于sudo组,用户就是管理员用户了,可以使用sudo命令提升权限了。增加sudo用户组的命令如下:
sudo usermod -G sudo sweet

deluser
只删除用户:sudo deluser tt
连同用户的主目录和邮箱一起删除:sudo deluser –remove-home tt
连同用户拥有的所有文件删除:sudo deluser –remove-all-files tt

userdel
只删除用户:sudo userdel tt
连同用户主目录一起删除:sudo derlser -r tt
如果创建时主目录已经存在,即主目录不属于当前要删除的用户,则无法删除主目录。

Ubuntu 常用安装软件

常用软件下载:
jenins: wget http://ftp-chi.osuosl.org/pub/jenkins/war/2.208/jenkins.war

mediasoup安装

下载

git clone https://github.com/versatica/mediasoup-demo.git

cd mediasoup-demo

git checkout v3

 app客户端
broadcasters广播推流
server服务器端,媒体服务(管道通信)与信令服务

配置服务器

cd server

npm install

cp config.example.js config.js

// Listening hostname (just for gulp live task).
domain : process.env.DOMAIN || ‘localhost‘,
// Signaling settings (protoo WebSocket server and HTTP API server).
https :
{
listenIp : ‘0.0.0.0’,
// NOTE: Don’t change listenPort (client app assumes 4443).
listenPort : process.env.PROTOO_LISTEN_PORT || 4443,
// NOTE: Set your own valid certificate files.
tls :
{
cert : process.env.HTTPS_CERT_FULLCHAIN || ${__dirname}/certs/<strong><span style="color: #ff0000;">fullchain.pem</span></strong>,//证书
key : process.env.HTTPS_CERT_PRIVKEY || ${__dirname}/certs/<span style="color: #ff0000;"><strong>privkey.key</strong></span> //证书
}
},

// See https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions
webRtcTransportOptions :
{
listenIps :
[
{
ip : process.env.MEDIASOUP_LISTEN_IP || ‘1.2.3.4′,  //服务器IP或0.0.0.0,浏览器的传输
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
}
],
initialAvailableOutgoingBitrate : 1000000,
minimumAvailableOutgoingBitrate : 600000,
maxSctpMessageSize : 262144,
// Additional options that are not part of WebRtcTransportOptions.
maxIncomingBitrate : 1500000
},

// See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainRtpTransportOptions
plainRtpTransportOptions :
{
listenIp :
{
ip : process.env.MEDIASOUP_LISTEN_IP || ‘1.2.3.4‘, //普通的传输
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
},
maxSctpMessageSize : 262144
}

/启动server
npm start

//客户端安装 app目录
npm install
npm install -g gulp-cli
gulp live //客户端
gulp dist //生成发布目录/server/public

启动nodejs服务
node app.js
nohup node app.js &
forever start app.js 推荐此方式

调试
node –inspect-brk server.js
chrome://inspect
再根据需要设置断点

ubuntu wget安装和使用

sudo apt-get install wget

wget –version -> wget -V

 

1、使用wget下载单个文件

以下的例子是从网络下载一个文件并保存在当前目录

wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

2、使用wget -O下载并以不同的文件名保存

wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
错误:下面的例子会下载一个文件并以名称download.php?id=1080保存

wget http://www.centos.bz/download?id=1
即使下载的文件是zip格式,它仍然以download.php?id=1080命令。
正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:

wget -O wordpress.zip http://www.centos.bz/download.php?id=1080

3、使用wget –limit -rate限速下载
当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。

wget –limit-rate=300k http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

4、使用wget -c断点续传
使用wget -c重新启动下载中断的文件:

wget -c http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。

5、使用wget -b后台下载
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。

wget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
Continuing in background, pid 1840.
Output will be written to `wget-log’.
你可以使用以下命令来察看下载进度

tail -f wget-log

6、伪装代理名称下载
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。

wget –user-agent=”Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″ 下载链接

7、使用wget –spider测试下载链接
当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加–spider参数进行检查。

wget –spider URL
如果下载链接正确,将会显示

wget –spider URL
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response… 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled — not retrieving.
这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误

wget –spider url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response… 404 Not Found
Remote file does not exist — broken link!!!
你可以在以下几种情况下使用spider参数:

定时下载之前进行检查
间隔检测网站是否可用
检查网站页面的死链接

8、使用wget –tries增加重试次数
如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。

wget –tries=40 URL

9、使用wget -i下载多个文件
首先,保存一份下载链接文件

cat > filelist.txt
url1
url2
url3
url4
接着使用这个文件和参数-i下载

wget -i filelist.txt

10、使用wget –mirror镜像网站
下面的例子是下载整个网站到本地。

wget –mirror -p –convert-links -P ./LOCAL URL
–miror:开户镜像下载
-p:下载所有为了html页面显示正常的文件
–convert-links:下载后,转换成本地的链接
-P ./LOCAL:保存所有文件和目录到本地指定目录

11、使用wget –reject过滤指定格式下载
你想下载一个网站,但你不希望下载图片,你可以使用以下命令。

wget –reject=gif url

12、使用wget -o把下载信息存入日志文件
你不希望下载信息直接显示在终端而是在一个日志文件,可以使用以下命令:

wget -o download.log URL

13、使用wget -Q限制总下载文件大小
当你想要下载的文件超过5M而退出下载,你可以使用以下命令:

wget -Q5m -i filelist.txt
注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。

14、使用wget -r -A下载指定格式文件
可以在以下情况使用该功能

下载一个网站的所有图片
下载一个网站的所有视频
下载一个网站的所有PDF文件
wget -r -A.pdf url

15、使用wget FTP下载
你可以使用wget来完成ftp链接的下载。
使用wget匿名ftp下载

wget ftp-url

使用wget用户名和密码认证的ftp下载

wget –ftp-user=USERNAME –ftp-password=PASSWORD url

wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:

(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
(3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
(4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
(5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的;

wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。

1、下载整个http或者ftp站点。
wget http://place.your.url/here
这个命令可以将http://place.your.url/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。

wget -r http://place.your.url/here
这 个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同 样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。

要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。

2、断点续传。
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
wget -c http://the.url.of/incomplete/file
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。

3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)

4、选择性的下载。
可以指定让wget只下载一类文件,或者不下载什么文件。例如:
wget -m –reject=gif http://target.web.site/subdirectory
表示下载http://target.web.site/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件类型,–reject=LIST拒绝接受的文件类型。

5、密码和认证。
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。

6、利用代理服务器进行下载。
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
这两个参数。
使用参数–proxy=on/off 使用或者关闭代理。
wget还有很多有用的功能,需要用户去挖掘。

附录:

命令格式:
wget [参数列表] [目标软件、网页的网址]

-V,–version 显示软件版本号然后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND 执行一个 “.wgetrc”命令

-o,–output-file=FILE 将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet 不显示输出信息;
-i,–input-file=FILE 从文件中取得URL;

-t,–tries=NUMBER 是否下载次数(0表示无穷次)
-O –output-document=FILE下载文件保存为别的文件名
-nc, –no-clobber 不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS 设置超时时间
-Y,–proxy=on/off 关闭代理

-nd,–no-directories 不建立目录
-x,–force-directories 强制建立目录

–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码

-r,–recursive 下载整个网站、目录(小心使用)
-l,–level=NUMBER 下载层次

-A,–accept=LIST 可以接受的文件类型
-R,–reject=LIST拒绝接受的文件类型
-D,–domains=LIST可以接受的域名
–exclude-domains=LIST拒绝的域名
-L,–relative 下载关联链接
–follow-ftp 只下载FTP链接
-H,–span-hosts 可以下载外面的主机
-I,–include-directories=LIST允许的目录
-X,–exclude-directories=LIST 拒绝的目录

中文文档名在平常的情况下会被编码, 但是在 –cut-dirs 时又是正常的,
wget -r -np -nH –cut-dirs=3 ftp://host/test/
测试.txt
wget -r -np -nH -nd ftp://host/test/
%B4%FA%B8%D5.txt
wget “ftp://host/test/*”
%B4%FA%B8%D5.txt

由 於不知名的原因,可能是为了避开特殊档名, wget 会自动将抓取档名的部分用 encode_string 处理过, 所以该 patch 就把被 encode_string 处理成 “%3A” 这种东西, 用 decode_string 还原成 “:”,并套用在目录与档案名称的部分,decode_string 是 wget 内建的函式。

wget -t0 -c -nH -x -np -b -m -P /home/sunny/NOD32view/ http://downloads1.kaspersky-labs.com/bases/ -o wget.log

npm/cnpm安装

npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系

允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:
没有的话 apt install npm
https://www.npmjs.cn/
http://www.runoob.com/nodejs/nodejs-npm.html

安装cnpm
执行命令 sudo npm install -g cnpm –registry=https://registry.npm.taobao.org
使用npm的国内镜像(npm 国内镜像 https://npm.taobao.org/)cnpm 命令代替默认的npm命令,增加依赖包加载速度且避免资源限制。

更新
sudo npm i -g npm

安装
# 安装但不写入package.json; 
$ npm install xxx

# 安装并写入package.json的"dependencies"中;
$ npm install xxx –S 

# 安装并写入package.json的"devDependencies"中;
$ npm install xxx –D

# 全局安装
$ npm install xxx -g

# 安装特定版本
$ npm install xxx@1.0.0

 -S(等同于--save)表示项目打包时会将该依赖包一并打包;-D(等同于--save-dev)表示该依赖包仅在开发环境下使用,正式打包不会加到项目中。

删除
# 删除xxx模块;
$ npm uninstall xxx 

# 删除全局模块xxx;
npm uninstall -g xxx

更新
检查可以更新的模块,可以使用命令行:

$ npm outdated
需要更新模块,首先得更新package.json文件,可使用npm-check-updates依赖包:

# 安装"npm-check-updates"模块
$ npm install -g npm-check-updates

# 安装后,检查可更新的模块
$ ncu
# 或
$ npm-check-updates

# 更新package.json的依赖包到最新版本
$ ncu -u
package.json 更新后,为了保险起见,可删除整个node_modules目录并重新初始化项目。

不建议一次全部更新所有依赖包,可根据实际需求更新即可。全部更新有可能导致项目不稳定,甚至运行不起来,开发项目以稳定合适优先。

如若只需更新某个单一依赖包,可使用命令行:
# 可根据包作用范围在后面加上 -D、-S 或 -g
$ npm update xxx
该更新命令,只能按照package.js中标注的版本号进行更新,故更新前记得先修改package.json中所需更新的依赖包版本号。

快速删除项目中node_modules目录
# 安装"rimraf"模块
$ npm install rimraf -g

# 删除操作
$ rimraf node_modules

Nodejs安装

API http://nodejs.cn/api

  • 下载地址
    https://nodejs.org/en/download/
    http://nodejs.cn/download
    二进制安装 ubuntu/Mac/centos
    apt/brew/yum install nodejs
    apt/brew/yum install npm
    查找是否安装
    apt-cache search nodejs
    下载二进制安装
    tar -zvxf node-v12.13.0.tar.gz
    sudo mv node_v12.13.0-linux-x64 /usr/local/nodejs/

  • 添加环境变量
    /etc/profile #全局环境变量配置文件
    ~/.bashrc #当前用户环境变量配置文件
    #node
    export NODE_HOME=/opt/nodejs
    export PATH=$NODE_HOME/bin:$PATH
    #npmexport NODE_PATH=/opt/nodejs/lib/node_modules
    source 你配置的那个文件让他生效

或者通过软连接的形式将node和npm链接到系统默认的PATH目录下,以下仅介绍软链接方式;
分别执行
sudo ln -s /opt/node/bin/node /usr/local/bin/node
sudo ln -s /opt/node/bin/npm /usr/local/bin/npm

源码安装
wget -c https://npm.taobao.org/mirrors/node/v12.13.0/node-v12.13.0.tar.gz
tar -zvxf node-v12.13.0.tar.gz
生成makefile
./configure –prefix=/user/local/nodejs//要安装的路径
python tools/gyp_node.py –no-parallel -f make-linux
make -j 4 && sudo make install
个性环境变量
vi ~/.bashrc
使生效
source ~/.bashrc
确认环境变量
env | grep PATH

在后台执行
npm install forever -g
forver start/stop server.js

Ubuntu18 VsCode搭建C++编译环境

安装C++插件


  • 安装一系列C++的插件,我安装的有:
    C/C++
    C/C++ Intellisense
    

重点


两种方法编译C++文件

第一种:安装C/C++ Compile Run插件(简单,推荐)

  • 人生苦短,何必浪费时间在环境搭建上~
  • 虽然只支持单文件(single file)的编译和运行,但是日常使用足够了啊
  • 打开C++文件F6即可运行
  • 官方使用手册:

    Requirements
    If you are on linux you must install gcc
    If you are on window you must install mingw
    How to use
    Make sure you have .c or .cpp file open and press “F6”, this will compile the file. If you want to register gcc/g++ path manually you can set it under settings. You can also set to save file before compiling.

第二种:手动添加task.json和launch.json

  • 打开C++文件,切换到Debug下,运行一次,他会创建一个默认文件,改成如下即可:
    {
      "version": "0.2.0",
      "configurations": [
          {
              "name": "(gdb) Launch",
              "type": "cppdbg",
              "request": "launch",
              "program": "${workspaceRoot}/${fileBasenameNoExtension}.o",
              "args": [],
              "stopAtEntry": false,
              "cwd": "${workspaceRoot}",
              "environment": [],
              "externalConsole": true,
              "preLaunchTask": "build",  
              "MIMode": "gdb",
              "setupCommands": [
                  {
                      "description": "Enable pretty-printing for gdb",
                      "text": "-enable-pretty-printing",
                      "ignoreFailures": true
                  }
              ]
          }
      ]
    }
    
  • 然后切回C++文件,Ctrl + Shift + B build >> 选择other新建一个 >> 修改tasks.json如下:
    {  
      "version": "0.1.0",  
      "showOutput": "always",  
      "tasks": [
          {
              "taskName": "build",
              "command": "g++",
              "isShellCommand": true,
              "showOutput": "always",
              "args": [
                  "-g",
                  "${file}",
                  "-o",
                  "${workspaceRoot}/${fileBasenameNoExtension}.o"
              ],
              "problemMatcher": [
                  "$g++"
              ]
          }
      ]  
    }
    

最后

  • Ctrl + Shift + B build
  • 点击debug下的绿色箭头即可运行