这些是我在近一年半的学习和服务器维护中常用的命令汇总,包括管理员常用命令和工作常用命令。

管理员常用命令

查看硬件型号或软件版本

# 查看CPU型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

# 查看ubuntu版本
cat /proc/version
uname -a
lsb_release -a

# 查看GPU型号
lspci | grep -i vga
# 输出结果末尾的四位数字,可以去网站:
# http://pci-ids.ucw.cz/mods/PC/10de?action=help?help=pci 查对应的型号,
# 比如1e02是TITAN RTX,2204是3090


# 查看显卡驱动版本
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
或者
dpkg -l | grep cudnn

#查看Python解释器
sys.executable

系统语言编码

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

设置系统时间和时区

# 查看当前系统的时间
date -R
# 选择时区
tzselect    # 然后将得到的输出添加到 ~/.profile
# 修改日期
sudo date -s 04/09/23
# 修改时间
sudo date -s 11:21:30
# 修改硬件的CMOS时间,这步是为了保证重启后,时区仍然正确
sudo hwclock --systohc

磁盘管理和查看共享内存

# 查找大文件 
find / -xdev -size +100M -exec ls -l {} \;
# 查看磁盘分区信息
sudo fdisk -l

# 查看有没有没挂载的硬盘
lsblk
# 查看磁盘大小和挂载情况
df -Th

# 弹出挂载的U盘
gio mount -e /run/media/donhost/不可移动的磁盘     //弹出指定设备(这里-e 选项只能写挂载点)

# 挂载磁盘
mount /dev/sdb1  /mnt/sdb1

# 查看共享内存的大小
df -lh | grep shm

管理用户和用户组

# 设置root密码
passwd root
# 1、创建新用户
sudo adduser username
# 其中username是你要创建的用户的名字,然后设置密码还有相关信息就可以了

# 2、赋予新用户sudo权限
# 用adduser创建后的新用户是不能使用sudo的,因为还没有赋予相关root权限,执行以下代码赋予权限
# adm是给管理员权限,sudo是给可以使用sudo的权限
sudo usermod -a -G adm [username]
sudo usermod -a -G sudo [username]

# 给所有用户使用docker的权限
sudo usermod -aG docker $USER

# 3、删除用户
# 当需要删除用户时可以使用以下指令
sudo userdel -r username

# 这个指令会删除用户username并把该用户下的所有文件(/home/username/路径下的所有文件)都删除,若要保留这些文件而仅仅删除用户,可使用以下指令
sudo userdel username

# docker新用户赋权限
sudo gpasswd -a <用户名> docker 
sudo service docker restart

# 检查特定用户属于哪个组
groups [username]
# 查看所有用户组, 第一个字段是用户组名
sudo cat /etc/group
# 查看所有用户, 开头是用户名
sudo cat /etc/shadow
# 改变文件夹所有者,其中用户组名users不必须
sudo chown -R username:users Document/

更改文件或文件夹权限

sudo chmod 600 ××× (只有所有者有读和写的权限)
sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)
sudo chmod 666 ××× (每个人都有读和写的权限)
sudo chmod 777 ××× (每个人都有读和写以及执行的权限)

其中×××指文件名(也可以是文件夹名,不过要在chmod后加 -R -ld)。

查看ip和6006端口使用情况

sudo netstat -tunlp |grep 6006
# 杀掉占用端口的进程8790
kill -9 8790

# 查看ip
ifconfig

镜像换源

apt-get 镜像换清华源

  1. 查看自己Ubuntu的版本:lsb_release -a
    获取版本号后进入https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
  2. 选取自己版本对应的镜像源,然后进入apt文件夹 cd /etc/apt/
    把之前的镜像源复制一份为001:sudo cp sources.list cources.list.001
  3. 再打开镜像源列表:sudo vim sources.list 把网站复制的镜像源粘到底下
  4. 然后更新apt:sudo apt-get update sudo apt-get upgrade

pip 换清华源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

conda 换清华源

vim ~/.condarc修改配置文件

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

然后执行 conda clean -i 清除索引缓存,保证用的是镜像站提供的索引。
(以上做法来源:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

指定默认的python

安装新版本的python:
sudo apt install python3.8
查看已有的python版本:
ls /usr/bin/python*
先删除默认的Python软链接:
sudo rm /usr/bin/python
然后创建一个新的软链接指向需要的Python版本:
sudo ln -s /usr/bin/python3.8 /usr/bin/python

运行或监控常用指令

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

monitor
# 命令行查看CPU占用情况
sudo apt-get install htop
htop
# 或者直接用top,不需要安装

# 查看内存使用情况
free -m
free -m -s 5  # 每5秒打印一次

# 查看GPU实时情况,每秒更新一次
watch -n 1 nvidia-smi

# 查找文件
sudo find [搜索路径] -name [*文件名*]
如目录下查找文件:find  ./ -name "detections.pkl"

# 查看历史指令并过滤
history | grep xxx

工作常用命令

1. 压缩与解压

.zip文件

# 感觉.zip占用空间比.tar.gz大
unzip FileName.zip          # 解压
unzip -d /temp test.zip     # 解压到指定目录
unzip -n -d /temp test.zip  # 解压时不覆盖已经存在的文件
unzip -o -d /temp test.zip  # 解压时覆盖已经存在的文件
zip FileName.zip DirName    # 将DirName本身压缩
zip -r FileName.zip DirName # 压缩,递归处理,将指定目录下的所有文件和子目录一并压缩

.gz文件

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

.tar.gz文件、 .tgz文件

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

.tar文件

tar -xvf filename.tar  # 解压到当前目录
tar -cvf /data/secret  secret.tar  # 压缩到当前目录

2. 软链接

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

3. 文件输出重定向

# 示例
./test.sh  > log.txt 2>&1
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 命令后加&,如

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

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

# 创建一个虚拟终端hello
# 如果之前有创建唯一一个同名的screen,则-R会直接进入之前创建的screen
screen -R hello
screen -S hello

# 保持这个screen到后台并回到主终端
# 先按ctrl+a,再按d

# 如果意外退出导致screen还处在attached状态,使用下命令变为detached
screen -d hello

# 回到虚拟终端
screen -r hello

# 查看虚拟终端
screen -ls

# 清除虚拟终端
# 进入对应虚拟终端,然后输入:
exit

# screen内中文乱码
# https://cloud.tencent.com/developer/article/1844735

tmux(推荐)
https://www.ruanyifeng.com/blog/2019/10/tmux.html

# 退出用 ctrl+d 或者 exit,退出但保存会话用 Ctrl+b d 或者 tmux detach
tmux new -s <session-name>
tmux ls
# tmux attach命令用于重新接入某个已存在的会话
tmux attach -t <session-name>
tmux kill-session -t <session-name>
# 切换会话
tmux switch -t <session-name> 

# 划分上下两个窗格
tmux split-window

# 划分左右两个窗格
tmux split-window -h

5. 进程管理

# 查看僵尸进程的状态、父进程、PID、命令
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

6. 查看文件夹的文件和大小

ls       # 查看路径下的文件
ls -lh   # 文件详细信息,加 h 能让文件大小以KB MB GB显示,否则默认以字节显示
ls -a    # 查看所有文件(包括隐藏文件)
du -sh                        # 显示当前文件夹总大小 
du -h --max-depth=1 ./        # 显示文件夹下每个文件的大小

# 统计文件夹内文件数量(包括子文件)
ls -lR | grep "_" | wc -l
# 统计文件夹内文件数量(不包括子文件)
ls -l | grep "_" | wc -l


# 文件详细信息解释
# -rw-r--r-- 1 kpp staff 5685 9 16 15:43 READ.md
# drwxr-xr-x 3 kpp staff   96 4 18 23:28 week01
# 第一串字符,文件夹为d,接着每三个字符为一组,分别是文件所有者、组用户、其他用户的读、写、执行权限 
# 其余是文件拥有者、所在组、文件大小、修改时间

7. 删除某种文件

xargs擅长将 stdin 转换成命令行参数

# 删除目录及子目录下的所有.log文件
find . -name "*.log" | xargs rm

8. ssh和scp

# 从本地拷贝文件到远程服务器
scp local_file remote_username@remote_ip:remote_folder 

# ssh登录
# 编辑本地的~/.ssh/config 文件,可以给ssh用户名和ip起别名,方便登录,如
Host tencent
    HostName xx.xx.xxx.xx(ip)
    User root
    Port 22

# 生成ssh密钥公钥对 ssh-keygen -t rsa -f yourkeyname -C "备注"
ssh-keygen -t rsa -C "LingyuKong"

# ssh免密登录, 命令将本地的公钥拷贝到远程服务器
# ssh-copy-id [-i [identity_file]] [user@]ip  如
ssh-copy-id root@23.25.345.34

9. 其他指令

tree ./xx       # 查看某个路径的文件结构
cd -            # 进入上个路径
pwd             # 打印当前路径
ag xxx          # 显示包括xxx内容的所有文件,只显示文件名

快捷键

在terminal跳转到行首:ctrl+a

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

标签: linux

添加新评论