Ubuntu 22.04 C++ 开发机的安装配置
前言
记录了一台全新安装的 Ubuntu 22.04 搭建开发环境的过程,其中命令行工具
大多是可选项,按需安装。
桌面软件
ShadowSocks
由于是基于 Electron 很自然的可以跨平台使用,比命令行形式的好用很多。
Github 地址 : nojsja/shadowsocks-electro,下载地址 shadowsocks-electron/releases 。
如果没看到 deb 包,注意点击 show all assets 下拉按钮。
使用 sudo dpkg -i shadowsocks-electron_1.2.3_arm64.deb
安装。
安装后,先复制 SSR 订阅链接地址,点击左下角 “+” 号添加URL订阅地址,从剪切板解析添加。
添加后,启动连接,并设置好 IP 端口,尽量别用1080,可能会和一些网络管理软件冲突,选个其他的端口,比如 10811。
proxychains
命令行的代理工具 proxychains 堪称神器,可以在 http_proxy 失效的时候补位,甚至可以直接代替 http_proxy 的设置, 安装方式: sudo apt install proxychains
。
配置文件在:/etc/proxychains.conf
,在配置文件最末尾编辑如下:
|
|
如何使用:
|
|
更多详细信息可以参考 知乎:Linux命令行代理神器-proxychains
Chrome 浏览器
只要执行以下 2 条命令即可:
|
|
安装后可以点击图标运行,或者命令行运行 google-chrome
安装。
Switch Omega插件
下载地址为: FelisCatus/SwitchyOmega/releases。
直接使用 chrome 浏览器下载可能一下载就被删掉了,可以鼠标右键复制下载地址,然后使用 wget 或 curl 命令行终端下载:
|
|
如何安装:
新版chrome 已经不能直接拖拽到 chrome 安装了,需要解压后再加载:
- 先重命名下载的 crx 文件为 zip 文件;
- 再解压zip文件;
- 使用chrome 浏览器打开开发者模式,手动加载;
其中步骤 1,2 需要运行命令如下:
|
|
剩下步骤3:
- 访问:
chrome://extensions
,右上角 “开发者模式” 点击启用; - 左上角出现的 “加载已解压的扩展程序”,然后选中☑️ 上述解压的 SwitchyOmega_Chromium 文件夹。
远程桌面控制
参考本站另外一篇文章:Mac 远程桌面控制Ubuntu 22.04 (RDP)
飞书
访问官网飞书Download ,对得到的 deb 包使用 dpkg 安装即可。
SmartGit
Smart Git 官网 SmartGit 下载, 可以下载 tar.gz 或 deb 包,官网推荐 tar.gz 方式安装。
|
|
Visual Studio Code
前往官方网站 [Visual Studio Code下载](下载页面 https://code.visualstudio.com/download) deb 包,假设包名为 code_1.77.3-1681292746_amd64.deb ,执行下述命令安装:
|
|
配置方式可以参考官网:Using C++ on Linux in VS Code.
简单说就是需要配置得到 3 个 json 文件,分别是,tasks.json
、launch.json
、c_cpp_properties.json
,具体步骤如下:
-
首先
gcc -v
,g++ -v
确认安装了 gcc/g++ (Ubuntu 22.04 默认安装了)。然后安装插件 C++ extension for VS Code; -
创建新工程以及添加新文件 helloworld.cpp ,点击右上角 run 运行,选择“g++ 构建与调试活动文件”,则在 .vscode 目录下生成了
tasks.json
文件;如果编译目录下多个 cpp 文件,可以考虑将 json 文件中的
${file}
换成${workspaceFolder}/*.cpp
; -
类似步骤 2, 点击右上角三角形旁边下拉框调试,选择“g++ 构建与调试活动文件”,则在 .vscode 目录下生成了
launch.json
文件,负责管理调试的命令选项;args 设置命令行参数,env 设置环境变量;
-
按下快捷键 shift ⇧ + command/win ⌘ + P,并输入"C/C++",选择弹出来的待选项 “C/C++编辑配置(UI)”,则在 .vscode 目录下生成了
c_cpp_properties.json
文件。
⚠️注意:当前的 3 个json 文件在当前目录的 .vscode 目录内,只对当前工程生效。
如何复用上述的设置呢?
拷贝 .vscode 文件夹📁到指定的项目工程目录即可,或者定义 alias 命令,快速拷贝。
那么,除了上述的 3 个 json 文件,还有其他方式吗,那当然是 CMake 了,具体的就不赘述了,也比较简单。
Android Studio
方式1: 命令行安装最新版
除了下载官网的 tar.gz 的包去运行 /studio.sh ,更推荐的是使用命令行直接安装,在菜单栏还能点击,用起来也更稳定。
|
|
还有 snap 方式也能安装,不喜欢也不推荐。
如果有需要的可以参考 Install latest Android Studio on Linux Mint 20 and Ubuntu 20.04 的 Method2 自行安装。
方式2: 官网下载安装指定版本
首先安装 64 位 linux 需要的一些开发组件:
|
|
可以去官网 :https://developer.android.com/studio/archive 下载指定版本的 tar.gz 的包。
解压后拷贝到 /usr/local 或 /opt 目录下,假设拷贝到/opt 目录,运行 /opt/android-studio/bin/studio.sh
提示:如需使 Android Studio 出现在应用列表中,请从 Android Studio 菜单栏中依次选择 Tools > Create Desktop Entry。
上述步骤也可以直接参考官网:android developer :android studio linux 版安装
挂载磁盘
开机挂载磁盘,需要编辑 /etc/fstab
文件,使用磁盘 UUID 进行指定,blkid
获取磁盘的 UUID。
如果没打印想要的 UUID,可能是磁盘未识别,可以先打开 gparted 软件,然后再执行 blkid
查询。
添加如下示例:
|
|
挂载网盘
先安装 cifs 工具:
|
|
然后再挂载网盘:
|
|
命令行工具
在安装下述命令之前,最好先更新一下软件源,使用国内源会少很多问题。
oh my zsh
Ubuntu 默认是没有 zsh 的,要先安装 sudo apt install zsh
;
可以看下默认的 Shell 应该是bash :echo $SHELL
;
其次 修改下终端 shell 为 zsh : chsh -s /bin/zsh
;
再次检查下 shell ,如果没生效,重启试下。
下载安装 oh my zsh :
|
|
如果遇到网络 443 端口拒绝访问的问题,别犹豫,就是梯子有问题。
如果用梯子,使用神器 proxychains 工具吧 ,我的网络就是有问题,上述在 wget 最前面加上 proxychains 前置即可。
实测参考:同样是 wget 下载 smartgit 的安装包,使用 proxychains 和不使用的对比速度是 88 KB/s 和 4.4MB/s
oh-my-zsh 的默认会将已有的 ~/.zshrc
拷贝并改名为 .zshrc.pre-oh-my-zsh
,并将所有 oh-my-zsh 的配置文件写于 ~/.zshrc
。我不是很喜欢这样,我更喜欢将配置文件改名。
|
|
按照上述修改后,ohMyZsh 的配置文件为 ~/.oh_my_zsh.rc
,Theme 变量为 ZSH_THEME。
有非常多的主题样式可以选择,具体效果可以参考: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
cmake
一行命令安装:sudo apt install -y cmake
adb
执行一句即可: sudo apt -y install adb
。
安装后可以愉快的使用 adb 命令了😊。
scrcpy
一款非常优秀的 Android 投屏 + 控制 软件,名字 scrcpy 是 “screen copy” 的缩写。
在 Linux/Mac/Windows 均可用,Github 地址:Genymobile/scrcpy,安装非常简单:
|
|
安装好之后,在命令行执行 scrcpy
即可启动连着 PC 的 Android 机,可以投屏+鼠标键盘控制输入。
如果连着多台 Andriod,使用 adb devices
打印设备id,然后 scrcpy -s <设备id>
控制指定设备。
ncdu
可以在终端很方便的查看指定的文件夹/磁盘的文件磁盘空间占比。
安装方式 : sudo apt install -y ncdu
更多使用时的命令选项和快捷键可以参考:https://linuxpip.org/install-ncdu-ubuntu/
htop
终端查看系统当前状态,包括 CPU,内存等资源的占用,是对系统命令 top
的加强和补充。
安装较为简单 sudo apt install htop
。
fanyi
是一个非常好用的终端翻译软件,只能支持中英互译,Linux / Mac 都能用,github 地址: afc163/fanyi
先安装 node.js 和 npm :
|
|
一行语句安装:
|
|
如何使用:在命令行终端使用 fy 命令即可。
|
|
这个翻译软件还能与时俱进,可以配置 OpenAI 的 Key,接入 ChatGpt 助力翻译,🐮。
ag
silver search,也叫 ag
,是一个非常高效的命令行搜索工具(目录内定位那些指定文本内容的文件),是比 ack
命令更快的代替品,Linux / Mac/ Windows 都能用,github 地址 ggreer/the_silver_searcher .
如何安装:
|
|
如何使用:
命令格式如下:
|
|
除了 ag -h
查看命令行选项之外,介绍几个常用用法备忘:
|
|
fzf
Fuzzy,一个根据关键词模糊搜索文件/文本的终端工具,可用于 Linux/Mac/Windows,并可以插件形式组合 vim 等编辑器使用,github 地址: junegunn/fzf 。
何为模糊搜索:假设最终我们要搜的是 app/src/main/cpp/core/decode.cc ,那么我们搜 appcodeco,也可以找到该文件。
安装方式:
|
|
如何使用:
基本使用方式:可以直接 fzf
在当前目录模糊搜文件,也可以组合其他命令使用,如下
|
|
常用的快捷键:
Ctrl + J
/ Ctrl + K
:移动鼠标下一行/上一行;
Page Up
/ Page Down
: 上一页/下一页;
Ctrl + C
: 退出;
常用的命令选项使用方式:
fzf -e
: 精确指定关键词;
fzf -i
:忽略大小写;
fzf +s
: 不对输出结果排序;
fzf -m
: 多选模式,multi select,使用 tab 键选中多个;
更多用法直接看 help 信息: man fzf
。
ffmpeg
ffmpeg 是鼎鼎大名的音视频处理的开源工具/开源库。
对于音视频/图像领域开发者,处理一些简单的媒体文件,使用命令行非常方便。
执行一行命令安装:
|
|
安装完后,我的电脑对 ffmpeg 命令无法自动补全,并且会优先提示 _ffmpeg 命令,所以我直接写 alias 好了:
|
|
axel
是支持多线程下载的终端工具,大多数情况下,比 wget 和 curl 都要更快速高效。
一行语句安装:sudo apt -y install axel
tldr
tldr –> 即 too long don’t read, “太长不看”的意思。
用于简化命令行的 ManPage 解释的,对纷繁复杂的 man <command>
的内容做了简化输出,让每个人都能快速上手命令。
安装和使用:
|
|
FAQ
扩容根分区
安装的时候没有分配好根分区的大小,只有 50G,旁边有 150G 是未挂载到文件系统。不想用挂载形式,而是想并入根分区。
⚠️:我这里遇到的情况比较简单,是同一块磁盘,相邻分区,而且是向右扩容。
本来使用 gparted 是个不错的选择,不过我这边一直报 gtk 的错,可能是远程桌面原因吧,那就使用 parted 工具吧。
⚠️:后来才知道,远程桌面使用 gparted 是可能会打不开,去真机连显示器就可以了。
先看看磁盘的情况:
|
|
fdisk 内容太多了不贴了,我这边 df -h
的打印内容是:
|
|
可以看到根分区基本满了(96% 的占用),然后 fdisk 查看到的信息是 /dev/sdc6 这个相邻分区有140G,但是没挂载到文件系统。
执行:
|
|
进入 parted 模式,可以输入 help
看看帮助信息打印如下:
|
|
并且可以输入 print
查看 /dev/sdc 这块盘的细节:
|
|
需要做的简述如下:
- 删掉 /dev/sdc6;
- resize /dev/sdc5 扩容;
- 更新分区列表信息以及文件系统;
继续在parted 命令模式下依次执行如下:(parted)是命令模式前缀,命令内容是后面的。
|
|
退出了parted 之后,执行下述2句,刷新分区列表和文件系统信息,让文件系统知道分区改变了:
|
|
此时再使用系统的df, fdisk ,或磁盘工具、磁盘占用分析助手等软件查看,分区扩容成功!
|
|
扩容 home 目录
安装Ubuntu 系统的时候,根分区和 home 给的大小都不够,这下眼看要满了。
因为我是双系统,ubuntu 是安装在windows 的 F 盘(一块 1T 的三星SSD)。
目前打算这么做:
-
在 ubuntu 系统下,从同一块盘的 windows SSD 那儿切 300 GB 出来;
-
这 300 GB新建个 ext4 格式的分区;
-
编辑 /etc/fstab 设置开机挂载该磁盘到 /home/USER_NAME/data ;
其中,USER_NAME 是用户名,data 随便取;
-
这样挂载出来的目录应该是从属于root 用户的,chown 到自己用户,例如我的用户名是 benjamin;
具体的操作如下:
-
Ubuntu 安装一下 gparted,执行
sudo apt install gparted
即可,然后 sudo gparted 即可启动界面管理器,使用方法很简单,和一般的磁盘管理助手差不多,切个空闲分区出来,假设叫/dev/sdc6
吧;注意,远程桌面操作时会打不开 gparted,去真机连接显示器即可。
-
前面我们知道了新建的分区是 /dev/sdc6,那么执行
sudo blkid | grep sdc
,得到如下信息:1 2 3 4 5 6
/dev/sdc4: UUID="cd7caf9b-4785-4e61-acc3-b75bc8ee945b" TYPE="swap" PARTUUID="5bf679ac-850f-46e2-b9d4-26c6fb50a3a7" /dev/sdc5: UUID="90ec6ddb-b262-4375-9b48-620f5eb584a1" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="11372470-1ba0-49eb-afd1-d386cbc7964b" /dev/sdc2: LABEL="SSD" BLOCK_SIZE="512" UUID="1822F6E122F6C2B4" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="df0e569e-25e3-47d2-9ac2-01bc3ee0af97" /dev/sdc3: UUID="7386-BF96" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="460a5a51-e590-4a39-8435-408cc4f330f4" /dev/sdc1: PARTLABEL="Microsoft reserved partition" PARTUUID="ec079113-2f27-4fc9-b175-57e73e7bb85e" /dev/sdc6: UUID="5e2aa47a-34b2-46f2-84ef-640a57cacabd" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="/dev/sdc6" PARTUUID="ffb8b3e1-a8f4-4cc7-88d1
-
创建挂载目录
mkdir /home/benjamin/data
, 然后编辑文件系统表,sudo vim /etc/fstab
或 界面编辑sudo gedit /etc/fstab
,末尾添加如下内容:1
UUID=5e2aa47a-34b2-46f2-84ef-640a57cacabd /home/benjamin/data ext4 defaults 0 2
含义分别是:分区UUID、挂载目录、磁盘格式、挂载选项、是否备份dump、磁盘检查顺序等。后面三项 defaults 0 2 是比较符合我们个人日常使用的。
更详细的参数含义可以参考: 博客园:Linux之/etc/fstab文件讲解 。
-
重启机器。会发现 挂载目录下有个 lost+found 目录了,不过可以看到目录所有者是root,改一下owner.
1 2
# 我的用户名是 benjamin sudo chown -R benjamin:benjamin /home/benjamin/data
大功告成。
Git Credential 凭证
Linux 平台不像win 和 mac 那么方便,对 credential 的管理可能还是需要手动配置一下。
具体问题:在 git 同步远端代码时(https仓库地址,比如 submodule 同步),总会被要求输入 username 和 password 。
原理:crendential 可以cache方式暂存,也可以文件形式永久存储,对 https 形式访问仓库时需要身份认证。后者干脆不用https形式,该用ssh形式的仓库地址亦可。
方法一
:改远程仓库地址为 ssh 形式:
|
|
方法二
:新建 credential 文件保存 git 仓库账号密码 :
我遇到的是子仓库用的 https 地址,不去手动改为 ssh 形式地址了,而是采用 file 形式保存账号密码。
|
|
编辑桌面菜单栏
假设安装了一款软件 (假设 android-studio 4.1) ,之后升级重装了另外一个版本 4.2,会发现开始菜单图标点击失效了。
需要手动编辑图标链接信息:
|
|
找到文件为:android-studio.desktop , 编辑该配置文件,其中执行路径变量 Exec
尤其需要注意,软件升级后主要是可能这个执行路径变了。
Android Studio Sync Failed
考虑是不是被全局的代理配置影响了,有些工程不需要代理就能跑,挂了代理反而不行。
全局代理文件 ~/.gradle/gradle.properties
,检查是否对 system.proxy 是否有设置,如果需要关掉,使用 # 号注释掉。