系统安装和分区设置

按以下顺序和大小安装
<1>、”交换空间”,相当于windows下的虚拟内存。建议大小:(理论值为实际内存的两倍),设置为电脑内存大小即可,选择逻辑分区,空间起始位置。

<2>、“/boot”。包含系统内核和系统启动所需的文件,实现双系统的关键所在。建议大小:200M。个人认为设置1G较好。选择逻辑分区,空间起始位置。

<3>、“/”分区(跟目录)。大致相当于windows下的系统盘(C盘),存放系统文件,当在Ubuntu下安装一些软件时,有可以选择路径的,就可以选择“/home”里面,即自定义软件安装路径,但还有一些不能选择安装路径的,就会安装到“/”分区,大部分软件是默认安装到“/”分区下的。还有一点就是这个分区下是不能像平时一样选择”删除”、”复制”、”粘贴”的,选择一个文件或文件夹,右键,是没有这些”删除”…选项的(我不确定是不是所有的文件和文件夹都是这样,毕竟我没有都试一遍)。(当然可以通过一些命令来实现”删除”、”复制”、”粘贴”、”新建”这些功能的,)。 建议大小:10-20G。个人认为大点较好,选择主分区,空间起始位置。

<4>、“/home”分区(用户的家目录)。这个就相当于windows下的非系统盘,像D盘、E盘、F盘…,除了一些特殊的文件,可以像在windows下一样,任意”删除”、”复制”、”粘贴”、”新建”,平时下载的东西都会保存在这个分区,这个分区主要就是用来存放文件。建议大小:磁盘剩余部分。选择逻辑分区,空间起始位置。

同时为了避免每次sudo都要输入密码,这里配置一下visudo:
sudo visudo
在文件最后加上一句(改为自己的用户名):
pengzhihui ALL=(ALL) NOPASSWD: ALL

目录结构

  • /usr 为系统级应用程序的目录,可以理解为C:/Windows/
  • /usr/local 为用户级应用程序的目录,可以理解为C:/Program Files/
  • /opt 主要存放手动安装的软件,可以理解为D:/Software/,用于放置大型软件,当硬盘容量不够时可以单独挂载到其他磁盘
  • 通过apt-get安装的软件
    • 下载的软件存放在:/var/cache/apt/archives
    • 安装后软件默认位置:/usr/share
    • 可执行文件位置:/usr/bin
    • 配置文件位置:/etc
    • lib文件位置:/usr/lib

      网络设置

      ubuntu18以上/etc/network/interfaces 已经不再生效
      https://www.hi-linux.com/posts/49513.html
      1. # 查看和验证ip:
      2. ip a

      管理员常用命令

      查看硬件型号或软件版本 ```bash

      查看CPU型号

      cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看ubuntu版本

cat /proc/version uname -a lsb_release -a

查看显卡驱动版本

sudo dpkg —list | grep nvidia-* lspci | grep -i nvidia

查看cuda和cudnn版本

cuda版本: cat /usr/local/cuda/version.txt cudnn: cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

查看Python解释器

sys.executable

  1. 系统语言编码
  2. ```bash
  3. # 更改系统语言编码设置:在~/.bashrc中添加
  4. export LC_ALL=C.UTF-8
  5. # 查看系统语言编码当前状态:locale ,查看支持的语言编码:locale -a

磁盘管理

  1. # 统计文件夹内文件数量(包括子文件)
  2. ls -lR | grep "_" | wc -l
  3. # 统计文件夹内文件数量(不包括子文件)
  4. ls -l | grep "_" | wc -l
  5. # 统计文件夹大小
  6. du -h --max-depth=1 ./
  7. # 查找大文件
  8. find / -xdev -size +100M -exec ls -l {} \;
  9. # 查看磁盘分区信息
  10. sudo fdisk -l
  11. # 查看有没有没挂载的硬盘
  12. lsblk
  13. # 查看磁盘大小和挂载情况
  14. df -Th
  15. # 弹出挂载的U盘
  16. gio mount -e /run/media/donhost/不可移动的磁盘 //弹出指定设备(这里-e 选项只能写挂载点)
  17. # 挂载磁盘(待整理)
  18. mount /dev/sdb1 /mnt/sdb1
  19. mount -t cifs -o username='gaofen',password='iecas`12',file_mode=0777,dir_mode=0777 //192.168.30.3/share2T/项目备份/ /mnt/Data_50_2/
  20. sudo mount -t nfs -o rw 192.168.6.83:/mnt/ExtraDisk/geoai_storage/ /mnt/ExtraDisk/geoai_storage
  21. sudo mount -t ext4 /dev/sda2 /mnt/ExtraDisk

管理用户和用户组

  1. # 设置root密码
  2. passwd root
  3. # 1、创建新用户
  4. sudo adduser username
  5. # 其中username是你要创建的用户的名字,然后设置密码还有相关信息就可以了
  6. # 2、赋予新用户sudo权限
  7. # 用adduser创建后的新用户是不能使用sudo的,因为还没有赋予相关root权限,执行以下代码赋予权限
  8. # adm是给管理员权限,sudo是给可以使用sudo的权限
  9. sudo usermod -a -G adm [username]
  10. sudo usermod -a -G sudo [username]
  11. # 给所有用户使用docker的权限
  12. sudo usermod -aG docker $USER
  13. # 3、删除用户
  14. # 当需要删除用户时可以使用以下指令
  15. sudo userdel -r username
  16. # 这个指令会删除用户username并把该用户下的所有文件(/home/username/路径下的所有文件)都删除,若要保留这些文件而仅仅删除用户,可使用以下指令
  17. sudo userdel username
  18. # docker新用户赋权限
  19. sudo gpasswd -a <用户名> docker
  20. sudo service docker restart
  21. # 检查特定用户属于哪个组
  22. groups [username]
  23. # 查看所有用户组, 第一个字段是用户组名
  24. sudo cat /etc/group
  25. # 查看所有用户, 开头是用户名
  26. sudo cat /etc/shadow
  27. # 改变文件夹所有者,其中用户组名users不必须
  28. sudo chown -R username:users Document/

更改文件或文件夹权限

  1. sudo chmod 600 ××× (只有所有者有读和写的权限)
  2. sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
  3. sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)
  4. sudo chmod 666 ××× (每个人都有读和写的权限)
  5. sudo chmod 777 ××× (每个人都有读和写以及执行的权限)
  6. 其中×××指文件名(也可以是文件夹名,不过要在chmod后加 -R -ld)。

查看ip和6006端口使用情况

  1. sudo netstat -tunlp |grep 6006
  2. # 杀掉占用端口的进程8790
  3. kill -9 8790
  4. # 查看ip
  5. ifconfig

运行或监控常用指令

可视化查看CPU和内存使用情况:gnome-system-monitor
image.png

  1. # 命令行查看CPU占用情况
  2. sudo apt-get install htop
  3. htop
  4. # 或者直接用top,不需要安装
  5. # 查看内存使用情况
  6. free -m
  7. free -m -s 5 # 每5秒打印一次
  8. # 查看GPU实时情况,每秒更新一次
  9. watch -n 1 nvidia-smi
  10. # 查找文件
  11. sudo find [搜索路径] -name [*文件名*]
  12. 如目录下查找文件:find ./ -name "detections.pkl"
  13. # 查看历史指令并过滤
  14. history | grep xxx

工作常用命令

1. 压缩与解压

.zip文件

  1. # 感觉.zip占用空间比.tar.gz大
  2. unzip FileName.zip # 解压
  3. zip FileName.zip DirName # 将DirName本身压缩
  4. zip -r FileName.zip DirName # 压缩,递归处理,将指定目录下的所有文件和子目录一并压缩

.gz文件

  1. # .gz
  2. gunzip FileName.gz # 解压1
  3. gzip -d FileName.gz # 解压2
  4. gzip FileName # 压缩,只能压缩文件

.tar.gz文件、 .tgz文件

  1. # .tar.gz 和 .tgz
  2. tar -zxvf FileName.tar.gz # 解压
  3. tar -xjvf [NAME].tar.bz2
  4. tar -zcvf FileName.tar.gz DirName # 将DirName和其下所有文件(夹)压缩
  5. tar -C DesDirName -zxvf FileName.tar.gz # 解压到目标路径
  6. sudo tar zcf - airport_data/ | split -d -b 2G - airport_data.tar.gz. # 分卷压缩

2. 软链接

  1. ln -s [实际存放路径] [链接路径]
  2. # 例如
  3. # ln -s /ssd2/other/kongly01/.vscode-server ~

3. 文件输出重定向

  1. # 示例
  2. ./test.sh > log.txt 2>&1
  3. python mainroute.py 2>&1 >log.txt

上面的调用表明将./test.sh的输出重定向到log.txt文件中,同时将标准错误也重定向到log.txt文件中。
每个程序在运行后,都会至少打开三个文件描述符,分别是0:标准输入;1:标准输出;2:标准错误。
2>&1表明将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出),为什么1前面需要&?当没有&时,1会被认为是一个普通的文件,有&表示重定向的目标不是一个文件,而是一个文件描述符。在前面我们知道,test.sh >log.txt又将文件描述符1的内容重定向到了文件log.txt,那么最终标准错误也会重定向到log.txt

4. 后台运行

nohup 命令后加&,如

  1. nohup python mainroute.py 2>&1 >log.txt &

screen(推荐)
创建出的screen有两种状态,attached和detached,前者表示用户正在使用,后者表示在后台运行。

  1. # 创建一个虚拟终端hello
  2. # 如果之前有创建唯一一个同名的screen,则-R会直接进入之前创建的screen
  3. screen -R hello
  4. screen -S hello
  5. # 保持这个screen到后台并回到主终端
  6. # 先按ctrl+a,再按d
  7. # 如果意外退出导致screen还处在attached状态,使用下命令变为detached
  8. screen -d hello
  9. # 回到虚拟终端
  10. screen -r hello
  11. # 查看虚拟终端
  12. screen -ls
  13. # 清除虚拟终端
  14. # 进入对应虚拟终端,然后输入:
  15. exit
  16. # screen内中文乱码
  17. # https://cloud.tencent.com/developer/article/1844735

tmux
https://www.ruanyifeng.com/blog/2019/10/tmux.html

  1. # 启动和退出 ctrl+d 或者 exit
  2. tmux
  3. # tmux attach命令用于重新接入某个已存在的会话
  4. tmux a

5. 软件配置

Vim

  1. # 临时显示行数
  2. # 在vim中, 按ESC键退出编辑内容模式,输入“: set number”后按回车键,就可以显示行号了
  3. # 永久显示行数
  4. vim ~/.vimrc
  5. # 在打开的vimrc文件中最后一行输入:set number ,然后保存退出。再次用vim打开文件时,就会显示行号了。

6. 其他指令

  1. # 查看某个路径的文件结构
  2. tree ./xx
  3. # 从本地拷贝文件到远程服务器
  4. scp local_file remote_username@remote_ip:remote_folder
  5. # ssh登录
  6. # 编辑本地的~/.ssh/config 文件,可以给ssh用户名和ip起别名,方便登录,如
  7. Host tencent
  8. HostName xx.xx.xxx.xx(ip)
  9. User root
  10. Port 22
  11. # 生成ssh密钥公钥对 ssh-keygen -t rsa -f yourkeyname -C "备注"
  12. ssh-keygen -t rsa -C "LingyuKong"
  13. # ssh免密登录, 命令将本地的公钥拷贝到远程服务器
  14. # ssh-copy-id [-i [identity_file]] [user@]ip 如
  15. ssh-copy-id root@23.25.345.34
  16. # 显示包括xxx内容的所有文件,只显示文件名
  17. ag xxx

快捷键

选定部分区域截图并保存到剪贴板:ctrl+shift+Prtsc

.bash_profile文件的编写规则

这个文件用来设置用户环境变量,语法遵循shell

  1. 定义变量时变量名和等号之间不能有空格,如your_name=”kly”
  2. 使用一个定义过的变量,只要在变量名前面加美元符号即可。如打印变量名:echo $your_name或者echo ${your_name}
  3. 原本应该换行的代码写到一行时,需要用分号加空格;进行分隔
  4. 使用alias命令给某个路径下的可执行程序起别名:alias [别名]=[指令名称]
  5. 使用export命令设置环境变量
    • export PATH:定义环境变量PATH
    • export CUDA_HOME=/ssd1/shared/local/cuda-10.1:定义并设置环境变量CUDA_HOME
    • export PATH=/ssd1/shared/local/anaconda3/bin:$PATH:为环境变量PATH增加一条记录(linux环境变量是用冒号隔开的)

更详细的shell语法规则见:https://www.runoob.com/linux/linux-shell.html
Linux命令大全:https://www.runoob.com/linux/linux-command-manual.html
修改完.bash_profile文件后需要运行命令source ~/.bash_profile来使文件生效

常用的配置文件

.bashrc .tmux.conf .vimrc
不显示中文,在.bashrc编辑

  1. # 先用locale命令看一下现在采用的编码
  2. # 用locale -a看一下支持的编码,然后改.bashrc
  3. export LANGUAGE="zh_CN:zh"
  4. export LANG="zh_CN.UTF-8"
  5. export LC_ALL="zh_CN.UTF-8"

.vimrc

  1. set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
  2. set termencoding=utf-8
  3. set encoding=utf-8
  4. set number "显示行号"
  5. set autoread
  6. set autowrite
  7. set nocp
  8. set ruler
  9. set autoindent
  10. set cindent
  11. set tabstop=4 "tab缩进4位"
  12. syn on
  13. color desert

好玩的东西

在ssh登录后,默认打印上一次登录的日期时间,其实可以通过设置打印自定义的内容如下图
image.png

  1. vim /etc/ssh/sshd_config
  2. # 加入下面两句话
  3. PrintMotd yes
  4. PrintLastLog no
  5. # 编辑完后重启ssh
  6. sudo service ssh restart
  7. # 或者 sudo service restart sshd
  8. # 在motd文件中写上想输出的内容即可
  9. vim /etc/motd