服务器运维

随时更新...

Posted by JY on July 1, 2020

服务器配置jupyter步骤

https://blog.csdn.net/u010420283/article/details/82871367

问题:本地无法访问

原因:服务器防火墙开启

解决方案:

# 关闭防火墙
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*   # 进程查看

img

watch --color -n1 gpustat -cpu #动态实时监控GPU

img

  • 推荐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 # 从本地下载镜像