记录 Linux (Ubuntu) 一些使用方法
Ubuntu 环境配置
C++ 环境安装配置
Java、maven3 环境配置
# ----- Java -----
# Ubuntu
sudo apt install openjdk-16-jdk
# CentOS
sudo yum install java-1.8.0-openjdk* -y
java -version
javac -version
# 查看 java 安装位置
which java
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java
# JAVA_HOME 变量配置
sudo vim /etc/profile
# 添加:
# jdk 1.8
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-3.el8.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# jdk 16
export JAVA_HOME=/usr/lib/jvm/java-16.0.1-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
# ----- maven3 -----
# Ubuntu
sudo apt-get install maven
# CentOS
wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
tar zxf apache-maven-3.9.9-bin.tar.gz
mv apache-maven-3.9.9 maven3
# 当前路径为 /home/frank
# maven3 路径为 /home/frank/maven3
# 编辑 maven3/conf/settings.xml
# 指定源
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
# 指定版本
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
# 配置 maven 环境变量
sudo vim /etc/profile
export MAVEN_HOME=/home/frank/maven3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
source /etc/profile
配置 root 密码
中文包
删除桌面回收站、用户文件图标
gsettings set org.gnome.shell.extensions.desktop-icons show-trash false
gsettings set org.gnome.shell.extensions.desktop-icons show-home false
添加监视器 system monitor
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get install -y indicator-sysmonitor
sudo 不输入密码
软件安装
数据库
点击查看
sudo apt install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev
sudo vim /etc/mysql/debian.cnf
mysql -u debian-sys-maint -p
flush privileges;
alter user 'root'@'localhost' identified with caching_sha2_password by '123456frank'
flush privileges
quit
service mysql restart
安装 deb 软件包
vim
主菜单编辑软件
gnome-tweak-tool
copyQ
indicator & stickynotes
# indicator stickynotes
sudo add-apt-repository ppa:umang/indicator-stickynotes
sudo apt-get update
sudo apt-get install indicator-stickynotes
jetbrains IDE
# jetbrains (idea & clion)
sudo snap install intellij-idea-ultimate --classic
sudo snap install clion --classic
systemback
# systemback
sudo sh -c 'echo "deb [arch=amd64] http://mirrors.bwbot.org/ stable main" > /etc/apt/sources.list.d/systemback. list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key 50B2C005A67B264F
sudo apt-get update
sudo apt-get install systemback
timeshift
nvm, node
# 通过 nvm 安装 nodejs npm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
nvm install node
conda
# anaconda3
wget -P /tmp https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
sudo gedit ~/.bashrc
# .bashrc
export PATH="/home/用户名/anaconda3/bin:$PATH"
source ~/.bashrc
screen
管理会话,SSH 时断开连接也不中断进程
# 安装 screen
sudo apt install screen
# 新建 screen
screen -S <name>
# 进入 screen
screen -r <name>
# 退出当前 screen
# 在当前 screen 下
Ctrl+A,Ctrl+D
# 显示 screen list
screen -ls
# 删除指定 screen
# 在当前 screen 下
Ctrl+D
# 不在当前 screen 下
screen -S <name> -X quit
VirtualBox
EasyConnect
EasyConnect 在 Ubuntu 20.04 以上因为依赖问题无法正常打开。
# 安装软件
sudo dpkg -i ./EasyConnect.deb
# 查看安装路径
dpkg -L easyconnect
# /usr/share/sangfor/EasyConnect
# cd
cd /usr/share/sangfor/EasyConnect
sudo su
# 查看依赖
ldd ./EasyConnect | grep pango
# 下载缺失依赖文件
# http://kr.archive.ubuntu.com/ubuntu/pool/main/p/pango1.0/
# libpangocairo-1.0-0_1.40.14-1_amd64.deb
# libpangoft2-1.0-0_1.40.14-1_amd64.deb
# libpango-1.0-0_1.40.14-1_amd64.deb
# 对这三个文件进行解压缩,提取出 data.tra.xz -> usr -> lib -> x86_64-linux-gnu 下面的所有文件
# 将得到的 6 个文件全部复制到安装目录下
cp ./* /usr/share/sangfor/EasyConnect
# 启动 EasyConnect
安装 VMware 17.5.2 虚拟机
常用命令 / 解决方案
显示内存
screen
管理会话,SSH 时断开连接也不中断进程
# 安装 screen
sudo apt install screen
# 新建 screen
screen -S <name>
# 进入 screen
screen -r <name>
# 状态显示 Attached,但无法进入
screen -D -r <session-id>
# 退出当前 screen
# 在当前 screen 下
Ctrl+A,Ctrl+D
# 显示 screen list
screen -ls
# 删除指定 screen
# 在当前 screen 下
Ctrl+D
# 不在当前 screen 下
screen -S <name> -X quit
增加虚拟内存交换空间
未开启交换空间:
sudo su
# 查看内存使用情况
free -h
# 创建 swap 文件
# 单位 bs 为 G,大小 count 为 20,创建 20G 交换空间
dd if=/dev/zero of=/swapfile bs=1G count=20
# 激活 swap 文件
chmod 600 swapfile
mkswap swapfile
# 开启 swap
swapon swapfile
free -h
# 查看已开启的交换空间
swapon --show
已开启交换空间,重新修改 swap 大小:
# 查看内存使用情况
free -h
# 关闭指定 swap
swapoff /swapfile
# 重新分配
fallocate -l 30G /swapfile
chmod 600 swapfile
mkswap swapfile
swapon swapfile
动态库无法链接 cannot open shared object file
sudo vim /etc/ld.so.conf
# 在 ld.so.conf 中加入 *.so 的绝对路径,如
# /usr/local/lib
# 对配置文件 /etc/ld.so.conf 中定义的路径下的程序库重新建立必要的链接
sudo ldconfig
挂载、卸载 img 镜像
使用 mount
、umount
命令。挂载 nsg_server.img
文件为例子。
# NSG_SERVER.img
# 1. 查看 NSG_SERVER.img 的分区情况,是为了看需要挂载哪个分区
fdisk ./NSG_SERVER.img
# result:
# Disk NSG_SERVER.img:20 GiB,21474836480 字节,41943040 个扇区
# 单元:扇区 / 1 * 512 = 512 字节
# 扇区大小(逻辑/物理):512 字节 / 512 字节
# I/O 大小(最小/最佳):512 字节 / 512 字节
# 磁盘标签类型:gpt
# 磁盘标识符:D85F133D-8179-4557-86F6-6DF45C769770
# 设备 起点 末尾 扇区 大小 类型
# NSG_SERVER.img1 2048 4095 2048 1M BIOS 启动
# NSG_SERVER.img2 4096 41940991 41936896 20G Linux 文件系统
# 2. 挂载 .img2 分区到本机 /mnt/nsg_server
# 注意其中 offset = 4096 * 512,因为扇区大小为 512 字节
mkdir /mnt/nsg_server
sudo mount -o loop,offset=2097152 NSG_SERVER.img /mnt/nsg_server
# 3. 卸载 .img2 分区
sudo umount /mnt/nsg_server
VirtualBox 挂载共享文件夹
在本地中创建共享的文件夹,我的共享文件夹为:/mnt/nsg_server/home/icecream
,想要挂载到虚拟机中的 /mnt/nsg_server
中。
本地电脑中设置共享文件夹路径(如上)以及共享文件夹名称 icecream
,注意不要勾选自动挂载,会出现权限问题;
虚拟机中:
# 创建挂载点
sudo mkdir /mnt/nsg_server
# 挂载命令
# mount -t vboxsf <共享文件夹名称> <挂载目录>
sudo mount -t vboxsf icecream /mnt/nsg_server/
# 开机自动挂载
sudo gedit /etc/sftab
# 文末添加
# <共享文件夹名称> < 挂载目录> vboxsf defaults 0 0
icecream /mnt/nsg_server/ vboxsf defaults 0 0
vim 操作
img、vdi 格式转换
通过 VirtualBox 的 VBoxChange 工具进行转换
# vdi to img
VBoxManage clonehd test.vdi test.img --format raw
# img to vdi
VBoxManage convertfromraw test.img test.vdi --format vdi
彻底删除 Snap
# 1. 删掉所有的已经安装的 Snap 软件
for p in $(snap list | awk '{print $1}'); do
sudo snap remove $p
done
# 直到出现:No snaps are installed yet. Try 'snap install hello-world'.
# 2. 删除 Snap 的 Core 文件
sudo systemctl stop snapd
sudo systemctl disable --now snapd.socket
for m in /snap/core/*; do
sudo umount $m
done
# 3. 删除 Snap 的管理工具
sudo apt autoremove --purge snapd
# 4. 删除 Snap 的目录
rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd
sudo rm -rf /var/cache/snapd
关闭 systemd-resolved
自启动且会占用 53 端口。
# 停用 systemd-resolved 并取消开机自动启动
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
# 修改 NetworkManager 配置,让它能自动获取 dns
sudo vim /etc/NetworkManager/NetworkManager.conf
# 添加一行 dns=default
dns=default
# [main]
# plugins=ifupdown,keyfile
# dns=default
# [ifupdown]
# managed=false
# [device]
# wifi.scan-rand-mac-address=no
# 删除 /etc/resolv.conf
sudo unlink /etc/resolv.conf
sudo touch /etc/resolv.conf
# 重启 NetworkManager
sudo systemctl restart NetworkManager
# 查看 /etc/resolv.conf 中新的 dns
cat /etc/resolv.conf
重装网卡
重装网卡后还需要修改 DNS。
设置 DNS
# 1. 修改 /etc/systemd/resolved.conf
sudo vim /etc/systemd/resolved.conf
# 修改:DNS=114.114.114.114 8.8.8.8
# 2. 重启 systemd-resolved
systemctl restart systemd-resolved
systemctl enable systemd-resolved
mv /etc/resolv.conf /etc/resolv.conf.bak
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
网卡消失
问题:
解决方案:
sudo service NetworkManager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo vi /etc/NetworkManager/NetworkManager.conf
# 打开 .conf 文件后,将 managed=false 改为 managed=true
sudo service NetworkManager start
ip link show
命令可以查看所有网卡。
文件分割 sh 脚本
已知文件大小,利用 dd
命令
# Create split_file.sh:
# 获取文件大小
size=$(stat -c%s "/dataset/bigann/bigann_learn.bvecs")
# 计算一半的大小
half=$((size / 2))
# 提取前半部分
dd if=filename of=part1.bvecs bs=1 count=$half
# 提取后半部分
dd if=filename of=part2.bvecs bs=1 skip=$half
sftp 大文件断点续传
# sftp user@hostname
sftp root@hust-server
# cd 到指定目录
sftp> cd /root.....
# -a 表示使用增量续传的方式
sftp> get -a nsg_100G.img
# 上传
sftp> put -a nsg_100G.img
将命令放至后台
&
放后台nohup
命令&>/dev/null &
重定向输出重定向、完全挂后台