服务器配置jupyter步骤
问题:本地无法访问
原因:服务器防火墙开启
解决方案:
# 关闭防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
# 检查防火墙状态
firewall-cmd --state
# or
sudo ufw status
防火墙端口
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables-save > /etc/iptables.up.rules # 保存设置
iptables -L -n # 查看
服务器shell安装
(zsh安装,大大提高终端使用效率)
cat /etc/shells # 查看Zsh是否安装
sudo apt-get install zsh # 若无,则安装zsh
chsh -s /bin/zsh # 切换到Zsh
# 重启linux,出现提示信息,按1进入主菜单,然后按0生成一个空的.zshrc配置文件
echo $SHELL # 查看是否切换到Zsh
(Oh My Zsh这个框架开源简化Zsh的配置)
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)" # 安装
SSH远程管理
sudo vi /etc/ssh/sshd_config #修改允许登陆的用户
# Authentication:
AllowUsers amax
sudo service sshd restart
服务器免密登陆
以从服务器A通过ssh到服务器B免密为例:
进入服务器A
cd ~/.ssh (查看服务器是否已经配置过ssh)
# 若没有.ssh文件夹,进行一下步骤
sudo apt-get install openssh-server
ssh-keygen -t rsa
(一路回车)
再次 cd ~/.ssh,会发现多了个.ssh文件夹,文件夹中有id_rsa和id_rsa.pub分别为私钥和公钥文件
vi id_rsa.pub
把 id_rsa.pub中的字符串复制
q! # 退出
进入服务器B
cd ~/.ssh (若无.ssh,同理操作)
vi authorized_keys
把刚刚复制的字符串粘贴到authorized_keys文件中
:wq! #保存并退出
sudo service ssh restart #重启ssh服务
经过以上操作后,就能实现从服务器A到服务器B登陆免密,同理可操作B->A,从而实现相互免密
### ssh免密登录配置无效失败解决方法:
1.检查authorized_keys文件权限,并设置为700
chmod 700 authorized_keys
2.检查/etc/ssh/sshd_config文件
设置:
StrictModes no
AuthorizedKeysFile .ssh/authorized_keys
服务器迁移
sudo apt-get install apt-clone # 安装
sudo apt-clone clone backupname --with-dpkg-repack # 原来的机器备份,备份到backupname 下,当前目录会生成一个tar包
sudo apt-clone info backupname.apt-clone.tar.gz # 查看包信息
sudo apt-clone restore backupname.apt-clone.tar.gz # 在新机器安装
Linux常用指令
系统
lsb_release -a # 查看Linux版本
进程查看
last -f /var/log/wtmp # 查看每个用户的登录次数和持续时间等信息
jobs -l # 显示当前系统的任务列表(进程号)
journalctl -xb | egrep -i 'killed process' # 查看被killed进程
journalctl -xb | egrep -i 'killed process' -C 5 # 详细查看被killed进程
用户管理
# 管理员密码设置
sudo passwd root
###### 在指定目录下新建用户并指定权限
方法一:
切换为管理员用户
useradd -d /data0/username -m -s /bin/bash username
# -d: 指定用户登入时的主目录
# -m: 自动建立用户的登入目录
# -s: 用户登入后使用的shell,默认值为/bin/bash
chown -R username:username /data0/username # 指定目录的所用者
chmod 760 /data0/username # 赋予读写权限
###### 删除用户
userdel username #删除用户
userdel -f username #删除用户及用户文件
###### sudo 权限设置 ######
方法一:
pkexec chmod 0440 /etc/sudoers # 修改用户权限
useradd -m user -s /bin/bash # 添加新用户
sudo passwd user # 为新建用户添加密码
sudo adduser user sudo # 为新创建的用户添加管理员权限
cat /etc/passwd # 显示新增的用户user
方法二:
su # 切换为root用户,输入密码
visudo # 设置sudo权限
加入 user ALL=(ALL:ALL) ALL 这一条规则
su - user # 用户切换为user
# 密码修改
password -S 用户名 # 查看密码状态,仅root用户可用
passwd 用户名 # 修改用户名密码
GPU
nvidia-smi # 查看GPU使用情况
nvcc -V # CUDA版本查看
fuser -v /dev/nvidia* # 进程查看
watch --color -n1 gpustat -cpu #动态实时监控GPU
- 推荐nvtop (https://github.com/Syllo/nvtop)
文件操作
pwd # 显示工作路径
ls -l # 显示文件和目录的详细资料
ls -a # 显示隐藏文件
tree # 显示文件和目录由根目录开始的树形结构
cp file1 file2 # 复制一个文件
cp dir/* . # 复制一个目录下的所有文件到当前工作目录
ln -s file1 lnk1 # 创建一个指向文件或目录的物理链接
# 文件查找
find / -user user1 搜索属于用户 'user1' 的文件和目录
find /home/user1 -name \*.bin # 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
tar -cvfz archive.tar.gz dir1 # 创建一个gzip格式文件
tar -zxvf archive.tar.gz # 解压一个gzip格式文件
tar -xvf archive.tar # 解压tar格式文件
du -sh * | sort -nr # 查看文件大小
# 文件编码转化
sudo convmv -f GBK -t UTF-8 -r --nosmart --notest filename # GBK -> UTF-8
#硬盘挂载
sudo mount /dev/sdb1 /data0
sudo mount /dev/sdc1 /data1
sudo mount /dev/sdd1 /data2
sudo umount /data0 # 取消挂载
文件同步
rsync
-av # -a包含-rtplgoD,-v表示同步时显示一些信息
-r 同步目录时需要加上,类似cp的-r选项
-t 保持文件的时间属性
-p 保持文件的权限属性
-l 保留软链接
-g 保持文件的属组
-o 保持纯洁的属主
-D 保留设备文件信息
-e # 可以使用户自由选择想使用的shell程序来连接远端服务器,如ssh来连接
--exclude # 过滤指定文件
ssh # 通过ssh的方式同步
#Example:
rsync -av -e ssh --exclude=backup code/ JY@10.15.198.104:/data0/JY/code/ # 从本地同步到远程
网络管理
sudo vpn-connect # 网络连接
sudo vpn-connect -d # 断开连接
vi /etc/resolv.conf # 修改DNS
输入 nameserver 10.10.0.21
Java 版本管理
sudo update-alternatives --display java # 检查可用的java版本
sudo update-alternatives --config java # 选择需要的java版本
# java安装路径查找
which java
# 用ls -lrt来找到其指向的安装路径
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java
screen命令
screen # 创建screen终端
screen -ls # 显示已创建的screen终端
# 输出:
# There are screens on:
# 2276.pts-3.linux (2013年10月20日 16时48分59秒) (Detached)
screen -r 2276 # 连接screen_id为2276的screen终端
# 在 screen 终端下按 Ctrl+ D 离开
screen -D -r 2276 # 当出现 ”There is no screen to be resumed matching 2276.” 的问题时
tmux命令
tmux # 启动
# 在 tmux 终端下按 Ctrl+ D 离开
# 前缀键 Ctrl+b
tmux new -s <session-name> # 新建对话
tmux ls # 查看当前所有的tmux会话
tmux attach -t <session-name>/<session-number> # 接入会话
tmux kill-session -t <session-name>/<session-number> # 杀死会话
tmux switch -t <session-name>/<session-number> # 切换会话
Ctrl+b s # 列出所有会话
tmux split-window # 划分上下两个窗格
tmux split-window -h # 左右划分两个窗格
# 光标在不同窗口的切换
tmux select-pane -U # 光标切换到上方窗格
tmux select-pane -D # 光标切换到下方窗格
tmux select-pane -L # 光标切换到左方窗格
tmux select-pane -R # 光标切换到右方窗格
# 窗口位置移动
tmux swap-pane -U # 当前窗口上移
tmux swap-pane -D # 当前窗口下移
# 窗口切换
tmux new-window -n <window-name>
tmux select-window -t <window-name>/<window-number>
# Ctrl+d close窗口
# Ctrl+b d 退出窗口
-
一些快捷键(推荐使用)
Ctrl+b %:划分左右两个窗格。 Ctrl+b ":划分上下两个窗格。 Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。 Ctrl+b ;:光标切换到上一个窗格。 Ctrl+b o:光标切换到下一个窗格。 Ctrl+b {:当前窗格左移。 Ctrl+b }:当前窗格右移。 Ctrl+b Ctrl+o:当前窗格上移。 Ctrl+b Alt+o:当前窗格下移。 Ctrl+b x:关闭当前窗格。 Ctrl+b !:将当前窗格拆分为一个独立窗口。 Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。 Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。 Ctrl+b q:显示窗格编号。
Shadowsocks 安装
https://www.kjarbo.com/archives/148
ZJUVPN安装
https://zju-cvs.github.io/2020/09/02/Ubuntu-vpn/
VSCode远程调试
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{ "cwd": "/data0/JY/anomaly-detection/fcdd/",
"name": "Python: fcdd Train",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"args": [
"--dataset","cityscapes",
"--filter-scale","1"
]
}
]
}
Nvidia
# 驱动安装
sudo apt install nvidia-utils-440-server
sudo apt-get install nvidia-driver-440
sudo update-grub # 更新grub引导
sudo reboot # 重启系统
# 问题排查
cat /var/log/dpkg.log | grep nvidia # 查看显卡驱动所使用的内核版本
cat /proc/driver/nvidia/version # 查看驱动升级记录
# 解决内核升级问题
# 方法一:
uname -r # 查看当前内核
last reboot # 查看内核升级记录
sudo apt-get install linux-headers-`uname -r` # 内核升级
ubuntu-drivers devices # 查找合适的版本
sudo apt-get remove --purge "nvidia-*"
sudo apt-get install "nvidia-*" # '*'为选择的驱动版本
sudo modprobe nvidia # 挂载Nvidia驱动
# Problem: 服务器重启后出现nvidia驱动找不到的情况 “NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.”
# 大概率是由于内核自动升级导致,可以'last reboot'查看
# 解决方案:内核降级回原版本
dpkg --get-selections| grep linux # 查看已安装的内核
sudo apt-get install linux-image-extra-4.4.0-189-generic # 安装所需的内核(低版本的)
vim /etc/default/grub
# 将GRUB_DEFAULT=0修改为
# GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-189-generic"
update-grub # 更新grub引导
reboot # 重启系统
# 以下指令禁止更新内核
sudo apt-mark hold linux-headers-4.4.0-189
sudo apt-mark hold linux-image-4.4.0-189-generic
sudo apt-mark hold linux-modules-4.4.0-189-generic
sudo apt-mark hold linux-modules-extra-4.4.0-189-generic
sudo apt-mark hold linux-headers-4.4.0-189-generic
监控工具nvtop安装
## Ubuntu 16.04
# 安装依赖
sudo apt install cmake libncurses5-dev libncursesw5-dev git
# 下载源码
git clone https://github.com/Syllo/nvtop.git
mkdir -p nvtop/build && cd nvtop/build
cmake ..
# 如果报错"Could NOT find NVML (missing: NVML_INCLUDE_DIRS)"
# 则执行下边的语句,否则跳过
cmake .. -DNVML_RETRIEVE_HEADER_ONLINE=True
# 编译
make
sudo make install
VNC远程桌面
# 安装
sudo apt-get install xrdp vnc4server xbase-clients
sudo apt-get install xfce4 # 安装图形界面
# ubuntu下切换图形界面
sudo dpkg-reconfigure gdm3
vncserver :1 # 启动
vncserver -kill :1 # 关闭
- 解决配置Ubuntu中vnc远程显示灰屏
https://www.bbsmax.com/A/MAzAAmwez9/
git 安装
sudo apt-get install git
Docker
docker export -o container.tar <CONTAINER ID> # 导出
docker import container.tar <REPOSITORY:TAG> # 导入成镜像
docker push registry.example.net:5000/ubuntu:16.04 # 上传镜像到本地备份
docker pull registry.example.net:5000/ubuntu:16.04 # 从本地下载镜像