Server reference manual

记录一下服务器的个人使用习惯,仅供参考。

用户管理

服务器人员流动比较大,有时甚至多人共用同一台服务器,每个用户使用单独的用户名登陆服务器是资源管理的第一步,同时可以避免以下问题:

  • 现在是谁在用 GPU?
  • 为什么服务器这么卡?
  • 磁盘怎么突然就满了?
  • 这个大文件是谁的?
  • 谁删了我的代码?

新建用户

每次转移到一台新的服务器都应该使用登陆账户为自己新建一个用户名,不要直接使用 root 用户,甚至连登陆账户也不应该设置为 root 账户,因为 root 账户的很多操作是直接影响系统环境的,这不仅会给服务器留下可能的后遗症,导致下一个使用者无所适从,还会影响其他依赖系统环境的用户,比如上来就把 CUDA 版本给更新了,so bad!

1
2
3
sudo useradd -m -s /bin/bash foo  # 新建一个名字为foo的用户,并创建HOME目录以及使用bash作为登陆shell
sudo passwd foo # 设置foo的密码
sudo usermod -aG sudo foo # 在ubuntu系统下可以把用户加入sudo组,获得管理员权限

这样一个带管理员权限的账号就建立完成了。对于 foo 用户,它所有的文件,代码,程序都应该保留在 /home/foo/ 目录下。

用户信息

  1. 查看基本信息

    1
    2
    3
    4
    5
    6
    7
    # 每一行都是一个用户,第一个数字是uid,uid>1000才是普通用户
    # 此命令用于快速查看当前服务器存在的用户数
    cat /etc/passwd
    who # 当前ssh登陆服务器的用户,不会显示通过xrdp登陆的用户
    whoami # 当前登陆用户名
    w # 显示当前服务器负载情况,登陆用户数,每个用户的登陆时长,CPU占用时间,当前执行命令
    id # 显示当前用户uid, gid以及groups
  2. 更改密码与锁定用户

    1
    2
    3
    sudo passwd foo  # 更改foo的登陆密码
    sudo passwd -l foo # 锁定foo用户,即无法登陆
    sudo passwd -u foo # 解锁foo用户
  3. 删除用户

    1
    sudo userdel -r foo  # 删除foo用户及其HOME目录,!谨慎操作,这可没有回收站功能

    大部分情况下我们不应该修改其他用户的信息,如果发现有新增不熟悉账户可以通过 passwd -l username 锁定该用户。

磁盘管理

查看系统的磁盘使用情况

1
df -h

查看每个用户的磁盘使用情况

1
sudo du -h --max-depth=1

注意事项

  1. 绝大部分情况下不要使用 sudo pip install 进行安装,使用 sudo pip 会直接对系统的 /usr/lib/python3.x/site-packages 目录进行修改,任何依赖系统自带包的用户都将受到影响。同时,更改系统默认包也是系统出现疑难杂症的重要原因,因为 ubuntu 中很多系统程序都依赖系统本身的 python3.5 和 python2.7,因此也不要尝试升级系统的 python 版本,或者更改系统的 python 软连接。通用的做法是使用 python 环境管理工具,如 anaconda,virtualenv,pyenv 等工具进行版本管理。

    1
    2
    pip install --user bar  # 安装bar包到用户目录
    pip show bar # 显示bar包的信息

    也可以通过修改配置文件,更改 pip 的默认安装位置

    1
    2
    3
    cd  # 回到用户HOME目录
    mkdir -p .config/pip # 新建文件夹
    echo -e "[install]\nuser = true\n" >> .config/pip/pip.conf # 写入配置文件

推荐搭配

  1. 很多时候我们都可以直接在服务器上使用 pycharm 进行程序开发,但是如果服务器是多人使用且配置不佳,使用 pycharm 等程序可能导致程序抢夺或者系统缓慢,又或者网络较差导致画面实时性不佳。此时推荐服务器不要安装任何高负载程序,如 IDE,浏览器等。可以考虑使用 pycharm 的远程调试功能,调用服务器的 python 解析器进行调试。远程桌面仅用来查看图片,或运行 gedit 等轻量级应用。

  2. 对于没有远程桌面的服务器,可以使用 putty,WSL,Cygwin 等终端程序进行登陆(目前使用 WSL+cmder 的搭配),使用 screen,或 nohup 把程序放到后台运行,避免因网络中断而导致程序停止(毕竟我们的交换机很渣。