无管理员权限软件安装
约 2206 个字 380 行代码 预计阅读时间 12 分钟
没有
sudo权限,就这样从源码编译直到厌烦
1 开发环境
Git
- 撤销上一次 Commit(修改的代码还是会存在)
- 远端存在修改:先拉取,再推送
git pull origin <branch>
# 存在冲突的话,这里需要 merge
# 例如:CONFLICT (content): Merge conflict in .gitignore
git push origin <branch>
VSCode
持续显示 “正在下载服务器”
# 1 获取 commit id
cd ~/.vscode-server/bin
ls # 如果有多个就 rm -rf * 再重新开一下本地的 VSCode
# 2 下载对应版本的 VSCode Server
wget \
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable \
-O vscode-server-linux-x64.tar.gz
# 3 解压
tar -zxf vscode-server-linux-x64.tar.gz
# 4 重命名
mv vscode-server-linux-x64 ${commit_id}
重启 VSCode 远程连接窗口,然后摆脱命令行神教吧
Claude Code
参考 官方文档
-
纯终端
-
安装 Claude Code
```bash # macOS / Linux / WSL curl -fsSL https://claude.ai/install.sh | bash # macOS (by homebrew) brew install --cask claude-code ```-
开始使用
-
常用命令
命令 功能 示例 claude启动交互模式 claudeclaude "task"运行一次性任务 claude "fix the build error"claude -p "query"运行一次性查询,然后退出 claude -p "explain this function"claude -c在当前目录中继续最近的对话 claude -cclaude -r恢复之前的对话 claude -rclaude commit创建 Git 提交 claude commit/clear清除对话历史 /clear/help显示可用命令 /helpexit/Ctrl+C退出 Claude Code exit
-
-
在 VSCode 中使用
不需要 安装 Claude Code CLI,除非需要 tool-using(使用 MCP 协议)
-
安装
Claude Code for VS Code -
展开 GUI:点击文件右上角的皮燕子 / 在命令面板(
Cmd+Shift+P)中搜索Claude Code -
开启终端模式:在设置(
Cmd+,)中勾选 "扩展-ClaudeCode-使用终端" -
使用第三方服务商
- 在插件市场点击右下角齿轮 - 设置 - Environment Variables - 在 settings.json 中编辑
- 重启后,即可无登录使用 Claude
-
Codex
Codex 依赖于 NodeJS,需要提前安装
-
安装 & 验证
-
配置文件
Codex CLI 将自动读取
~/.codex下的配置信息、重启终端后 生效:-
auth.json:存放 API KEY -
config.toml:存放模型与网关配置wire_api = "responses" model_provider = "rightcode" model = "gpt-5.2-codex" # 根据需求替换 model_reasoning_effort = "xhigh" network_access = "enabled" disable_response_storage = true windows_wsl_setup_acknowledged = true model_verbosity = "high" # 需要和 model_provider 对应 [model_providers.rightcode] name = "rightcode" base_url = "https://right.codes/codex/v1" wire_api = "responses" requires_openai_auth = true
-
-
使用
-
CLI:
-
VSCode 插件:搜索
codex进行安装,随后会在左侧出现对应 icon会自动从
~/.codex读取配置,不用重新写了
-
Miniconda
具体方式可以参照 文档,这边选用了比较手动的方式
这玩意儿不支持挪动路径(安装路径已经硬编码进去了)
若不慎清空 ~/.bashrc, 可以通过 ./bin/conda init 重新初始化
-
在比较方便的位置创建一个名为
miniconda3的文件夹 -
下载安装脚本
-
运行安装脚本
-
删除脚本文件
找不到 Pip
-
下载
get-pip脚本 -
运行脚本,安装
Pip
Hugging Face
Huggin Face 的主干库分为三部分:
-
Transformer 模型库
可通过以下命令引入 & 校验版本号,从而验证是否成功安装
-
Dataset 数据集库:提供了下载 & 预处理
-
Tokenizer 分词库:将 Seq 转换为 ID 序列
加载 Tokenizer 的时候需要传与预测模型一致的 name(每个预测模型均对应了单独的 Tokenizer)
以
bert-base-chinese的使用为例
模型下载
下载支持两种方式:
-
手动下载:在 链接 中找到 Files 选项卡(但好像得把里面的文件全都下过来 ...)
-
通过官方命令行工具下载:需要额外安装依赖,以及得注册登录(需要用到 token)
用于下载的脚本import os from huggingface_hub import snapshot_download # 设置国内镜像 os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" model_name = "google-bert/bert-base-chinese" while True: # 防止断联 try: snapshot_download( repo_id=model_name, local_dir_use_symlinks=True,# 在local-dir指定的目录中都是一些“链接文件” ignore_patterns=["*.bin"], # 忽略下载哪些文件 # 实际此处不能忽略 .bin(不然只有 tensorflow 权重) local_dir='./model', # 储存路径 token="*******", # huggingface的token resume_download=True ) break except: pass
分词器
-
简单编码器(
tokenizer.encode)-
BERT 只接受一次输入 1 或 2 个句子
-
由于人为设置
maxLen=30,所以每句话都会被 Pad 到len=30(超出被截断)
from transformers import BertModel, BertTokenizer # load from local tokenizer = BertTokenizer('./model/vocab.txt') # use Tokenizer sentences = [ '窗前明月光', '疑是地上霜'] outputs = tokenizer.encode( text=sentences[0], text_pair=sentences[1], truncation=True, # > maxLen, cut padding='max_length', # pad => maxLen add_special_tokens=True, max_length=30, return_tensors=None ) print(tokenizer.decode(outputs)) """ 开头标识为 [CLS]、结尾为 [SEP],填充的统一为 [PAD] [CLS] 窗 前 明 月 光 [SEP] 疑 是 地 上 霜 [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] """ -
-
增强编码器(
tokenizer.encode_plus)支持指定返回的 tensor 类型、token 的标识类型、mask 类型、特殊标识类型、返回长度 etc
# use Tokenizer sentences = [ '窗前明月光', '疑是地上霜'] outputs = tokenizer.encode_plus( text=sentences[0], text_pair=sentences[1], truncation=True, padding='max_length', add_special_tokens=True, max_length=30, return_tensors=None, # 可选 tf: tensorflow, pt: pytorch, np: numpy, None return_token_type_ids=True, # 1st Sentence & special_token = 0, 2nd Sentence = 1 return_attention_mask=True, # padding = 0, else = 1 return_special_tokens_mask=True, # special_token = 1, else = 0 return_length=True # 返回长度 ) for k,v in outputs.items(): print(k,';', v) # 若选择 return_tensors='pt' ,这一步会 bug print(tokenizer.decode(outputs['input_ids'])) -
批量编码器(
tokenizer.batch_encode_plus)一次一句/两句的编码还是太慢了,我们能不能搞点批发(能的)
主要是将传入参数
(text, text_pair)修改为batch_text_or_text_pairssentences = [ '窗前明月光', '疑是地上霜', '举头望明月', '低头思故乡'] outputs = tokenizer.batch_encode_plus( # 定义了 两个 Single+ 一对 Pair batch_text_or_text_pairs=[ sentences[0], (sentences[1], sentences[2]), sentences[3] ], truncation=True, padding='max_length', add_special_tokens=True, max_length=30, return_tensors=None, return_token_type_ids=True, return_attention_mask=True, return_special_tokens_mask=True, return_length=True ) for k,v in outputs.items(): print(k,';', v) for idx in range(len(outputs['input_ids'])): print(tokenizer.decode(outputs['input_ids'][idx]))
字典编辑
BertCN 在训练时是以 单个汉字 作为 token 的、这回导致一些词语被拆开
我们可以通过在词典中增加 token 来解决这一问题
tokenizer = BertTokenizer('path/to/vocab.txt')
vocabDict = tokenizer.get_vocab() # 包含 token + special_token
tokenizer.add_tokens(new_tokens=['月光']) # 普通 token
tokenizer.add_special_tokens({ # 特殊 token
'eos_token': '[EOS]'
})
换源
Pip
-
创建配置文件
-
写入清华源
-
验证
Conda
-
Conda 的配置文件是
~/.condarc,可以先通过以下命令备份为.condarc.bak: -
写入清华源
channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ # 如需 PyTorch - defaults # 保留 defaults, 避免某些包在镜像中缺失 show_channel_urls: true ssl_verify: true -
验证
2 网盘同步
bypy(百度网盘下载)
-
安装
-
授权:随便输入一个命令,比如
bypy info,随后会出现一个百度网盘登录网址 => 复制粘贴登录后获得的 token,敲击回车即可 -
基本操作
bypy能够同步的数据位于我的应用数据/bypy下bypy help # 显示帮助(基本都能在这里看) bypy list # 列出网盘上对应位置下的所有文件 ## 上传 bypy upload [localpath] [remotepath] [ondup] # 上传文件/递归上传路径 bypy syncup [localdir] [remotedir] [deleteremote] # 上传本地的整个文件夹 ## 下载 bypy downdir [remotedir] [localdir] # 递归下载指定路径 bypy downfile <remotefile> [localpath] # 下载指定文件 bypy download [remotepath] [localpath] # 下载指定文件/递归下载路径 bypy syncdown [remotedir] [localdir] [deletelocal] # 把远程所有东西拉下来其中,下载可以通过指定
--downloader aria2进行加速(可以通过conda install aria2安装) -
报错处理
-
Slice MD5 mismatch(小文件没问题,见 Issue#741)-
原因:
bypy默认会在文件上传后执行 MD5 校验(比较本地计算和百度服务器回传结果),但百度方面的实现变了 -
解决:建议该用 BaiduPCS-Go
-
Rclone(Google Drive)
-
安装(略)
-
配置 Google Drive
rclone config # 运行配置向导
[输入] n # New Remote
[输入] GDrive # 起个名字
[输入] 22 # 可能发生变动,对应 Google Drive (drive)
[输入] 回车 # 默认 client_id
[输入] 回车 # 默认 client_secret
[输入] 1 # Full access
[输入] 回车 # 默认 service_account_file
[输入] n # 不对 advanced config 进行配置
[输入] n # 远程服务器无法直接使用 Web Browser 进行验证
# 见 Step 3 的验证操作
[输入] y # Keep(保存)此次配置
[输入] q # 退出 Config 编辑
- 在主力机安装
rclone,并运行以下指令
需要提前开启终端代理,否则会因超时失败
随后,将显示的整个 JSON 粘贴到服务器上
Got code
Paste the following into your remote machine --->
{"access_token": "", ..., "expires_in":xxxx}
- 上传文件:可以用
--progress显示实时进度
# 上传整个目录:copy 只会复制新文件,但 sync 会删除多余文件
rclone copy /local/path GDrive:remote/path
# 上传单个文件
rclone copy /paht/to/local/file GDrive:remote/path/
3 DBMS
MySQL
-
下载:请至 官网 选择合适版本,此处选用 v5.7.29(OS 需要选
Linux Generic)emmmmm
v8.0.18以上才支持EXPLAIN ANALYSEwget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.29-linux-glibc2.12-x86_64.tar # 解压 & 重命名 tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar # 报 gzip: stdin: not in gzip format 可以改成 -xvf,得到: # - 主程序:mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz (<- 继续处理这个) # - 测试套件:mysql-test-5.7.29-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql -
编写配置文件:将 $INSTALL_PREFIX 替换为实际安装路径
因为 MySQL 不会扫描自定义路径下的配置文件,最好创建在 HOME 目录下:
~/.my.cnfmysql/my.cnf[client] port=3306 socket=$INSTALL_PREFIX/mysql/mysql.sock [mysqld] port=3306 basedir=$INSTALL_PREFIX/mysql datadir=$INSTALL_PREFIX/mysql/data pid-file=$INSTALL_PREFIX/mysql/mysql.pid socket=$INSTALL_PREFIX/mysql/mysql.sock log_error=$INSTALL_PREFIX/mysql/error.log server-id=100 lower_case_table_names=1 # 设置大小写不敏感 -
安装:不打印任何消息即为安装成功,此处的 USER_NAME 为系统用户名
-
启动服务
-
设置环境变量(把
bin加入$PATH变量) -
获取初始密码:
-
随机密码在
error.log文件中,可通过以下命令进行查看 -
你可以在登录后通过以下 SQL 指令进行修改
-
-
报错处理
-
若通过
mysql -u [User] -p登录报错:Command 'mysql' not found,则将$INSTALL_PREFIX/mysql/bin加入环境变量$PATH -
登录报错:
Can't connect to local MySQL server through socket '/tmp/mysql.sock'最好通过
mysql --print-defaults检验一下客户端配置是否生效(打印为空说明未生效)-
临时:指定连接使用的 socket 文件
-
长期:先 kill 掉所有 mysql 相关进程,然后把
my.cnf挪到 HOME 目录后重启服务
-
-
-
(温和的)关闭服务
卡顿处理
-
表现:可以登录,但执行
show databases/use DB等基本命令均无响应 -
处理:
-
注意,执行
KILL不会立刻 杀死线程(Command 已标记为killed,但 Satate 仍为executing) 只有在达到特定的 safe point,这些线程才会真正退出 - 你可以关注其中的 Time 是否增长进行确认(不行就重启吧)
重装系统后无法正常登录
-
表现:在通过
error.log提供的初始密码登录时,一直提示 -
修复过程
-
使用安全模式重启、跳过密码验证
-
无密码登录
-
修改
root的密码此时依然报错:
Operation ALTER USER failed for 'root'@'localhost',进一步排查 -
创建
root@localhost -
随后退出无密码模式
pkill mysqld,并重新启动普通服务
SQLite3
SQLite 依赖于 gcc 和 make,请确保已经安装
-
下载源码
-
编译并安装到指定目录
# 创建安装目录 => 之会清理 mkdir -p $INSTALL_PREFIX/sqlite3 # 在解压路径下编译静态库 gcc -o sqlite3 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 \ -I. shell.c sqlite3.c -lpthread -lm -ldl mkdir -p $INSTALL_PREFIX/sqlite3/include mkdir -p $INSTALL_PREFIX/sqlite3/lib cp sqlite3 $INSTALL_PREFIX/sqlite3/bin/ # 复制可执行文件 # [可选] 编译共享库 gcc -shared -fPIC -o libsqlite3.so sqlite3.c -lpthread -ldl cp sqlite3.h $INSTALL_PREFIX/sqlite3/include/ cp libsqlite3.so $INSTALL_PREFIX/sqlite3/lib/ -
编辑环境变量
PostgreSQL
-
下载安装包并解压
-
配置安装路径
-
编译:该命令将在
$INSTALL_PREFIX/bin下生成/bin & /share -
添加环境变量(以支持直接通过
psql命令进行连接) -
初始化数据库(集群)
其中,参数
-D用于指定 DB 存储路径(必填),-U用于指定管理员用户名(默认为当前的系统用户名),-W用于指定管理员账户密码(默认为空) -
启动服务
-
连接数据库
-
当用户名并非
postgres时,将报错database doesn't exist -
需要先连接至
psql postgres,随后创建其他数据库
-
PGLoader
最麻烦的一集
-
本体安装三部曲(倒是简单)
-
剩下会有千奇百怪的依赖报错,看下面几个小节吧
SBCL
-
最终选择 v2.1.0 版本进行安装
- 这东西对本地的 GCC 版本有要求,最新版要求
glibc >= 2.32 pgloader需要的DEFINE-ALIEN-CALLABLE要求sbcl >= 2.1.10
- 这东西对本地的 GCC 版本有要求,最新版要求
-
可能的报错:
Unable to load libsybdb.solibsybdb.so是 FreeTDS 库的一部分,需要全装上# 下载 wget -c http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz tar -zxvf freetds-stable.tgz # 安装 cd freetds-0.91 ./configure 、 --prefix=$INSTALL_PREFIX/freetds \ --with-tdsver=8.0 --enable-msdblib make && make install # 添加到环境变量 LD_LIBRARY_PATH="$INSTALL_PREFIX/freetds/lib:$LD_LIBRARY_PATH" -
本体安装
LibPQXX
-
下载源码
libpqxx对 g++ 版本有一定要求,可以通过git checkout [Version]进行切换 -
试一下 configue + 安装
-
设置环境变量(但 LD 好像一直找不到)
注意一下格式,在
~/.bashrc里需要加" -
安装验证
-
可能会报错:
No package 'libpq' found -
从 PostgreSQL 源码进行编译(仅 客户端
libpq部分) -
将
libpq安装到指定目录此时:
libpq头文件安装在 (1) 中指定目录的include下libpq库安装在 (1) 中指定目录的lib/libpq.so
-
配置环境变量
-
验证是否可用
用对话搞 Git Commit 真的很智障啊 ...