文章目录

    • 前言
    • 1. 终极命令
    • 2. 基础命令
      • 2.1 C系
      • 2.2 E系
      • 2.3 F系
      • 2.4 K系
      • 2.5 L系
      • 2.6 M系
      • 2.7 N系
      • 2.8 P系
      • 2.9 R系
      • 2.10 T系
      • 2.11 W系
    • 3. 文件与文档
    • 4. 压缩与解压
    • 5. 系统设置与管理
    • 6. 命令组合
    • 补充:bash脚本
    • 结束语

前言

  本篇文章主要汇总了项目开发过程中常用的linux命令,以便后续查询。

1. 终极命令

  man 为用户查询指令的使用手册。

	# 查询指令ls
	man ls

  为便于查询man输出的指令手册,下面给出一些快捷键:

按键功能
Space下一页
Enter下一行
PgUp下一页
PgDn上一页
Home跳转到手册开头
End跳转到手册末尾
^下一行
v上一行
/从上到下搜索手册中某个关键词,比如/is就是在手册中搜索关键词is
?从下到上搜索手册中某个关键词,?is
n定位到下一个搜索到的关键词
N定位到上一个搜索到的关键词
q退出手册

2. 基础命令

2.1 C系

  cat 在终端设备上输出文件的内容

	# 输出main.py文件中的内容
	cat main.py

  cd 切换目录

	# 切换到Documents目录
	cd Documents/

  cp 复制文件

	# 复制文件main.py到Documents目录中
	cp main.py Documents/
	# 复制文件main.py到Documents目录中,并重命名为xiayouran.py
	cp main.py Documents/xiayouran.py
	# 复制Documents目录中所有的文件到Downloads目录中
	cp Documents/* Downloads/
	# 复制pywork文件夹及其所有的文件到Documents目录中
	cp -r pywork/ Documents/

	-f	# 若目标文件已存在, 则会直接覆盖原文件
	-i	# 若目标文件已存在, 则会询问是否覆盖
	-r	# 递归复制文件和目录
	-v	# 详细显示命令执行的操作

2.2 E系

  echo 在终端设备上输出字符串或变量的值

	# 输出字符串
	echo "hello world!"
	# 输出变量PATH的值
	echo $PATH

2.3 F系

  find 查找文件

	# 在pywork目录下搜索所有以.py为后缀名的文件
	find /pywork -name "*.py"

2.4 K系

  kill 终止某个指定PID的服务进程

	# 终止PID为32519的进程
	kill 32519
	# 若上述指令无效, 可使用最高级别地指令强制杀死进程
	kill -9 32519

2.5 L系

  ls 列出目前工作目录所含之文件及子目录

	# 列出当前目录下的所有子目录即文件名
	ls
	# 详细列出文件名称、文件类型、权限、拥有者、文件大小等信息
	ls -l file.txt
	
	-a	# 显示所有文件及目录(包括以.为开头的隐藏文件)
	-r	# 将文件以相反次序显示(原定依英文字母次序)
	-t	# 将文件依建立时间之先后次序列出
	-A	# 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)

  ls 命令列出的信息中,开头为d的表示文件夹,开头为-的表示文件。

  lscpu 查看本机CPU信息。

2.6 M系

  mkdir 创建文件夹

	# 创建名为pywork的文件夹
	mkdir pywork
	# 创建多级目录
	mkdir -p pywork/work1

  more 在终端设备上输出文件的内容

	# 输出main.py文件中的内容, 若内容过多, 会自动进行分屏展示
	more main.py
	
	# 为了方便查看文件内容, 一般根据文件内容量来选择合适的指令
	# 如果内容较少, 可使用cat; 如果内容较多, 可使用more

  mv 移动文件或重命名

	# 移动文件到pywork文件夹
	mv mian.py pywork/
	# 重命名mian.py为test.py
	mv mian.py test.py

	-i	# 若存在同名文件, 则向用户询问是否覆盖
	-f	# 覆盖已有文件时, 不进行任何提示

2.7 N系

  nvidia-smi 查看GPU的使用情况

	# 查看服务器上的GPU信息
	nvidia-smi

	# 
	NVIDIA-SMI 418.67
	Driver Version: 418.67	# 显卡驱动版本
	CUDA Version: 10.1		# CUDA版本

	GPU				# 服务器上GPU编号(从0开始编号)	0
	NAME			# GPU类型	Tesla V100-SXM2-32GB
	Persistence-M	# 持久模式	On 打开 Off 关闭
	FAN				# 风扇的转速(0%-100%)	N/A表示没有风扇
	Temp			# GPU的温度	54C(摄氏度)
	Perf			# GPU的性能状态, 从P0到P12	P0(性能最大)
	Pwr:Usage/Cap	# 能耗, 212W / 300W
	Bus-Id			# GPU总线相关显示 00000000:06:00.0
	Disp.A			# Display Active, 表示GPU的显示是否初始化 Off
	Memory-Usage	# 显存使用情况 4000MiB / 16384MiB
	Volatile GPU-Util	# GPU使用率
	Uncorr. ECC		# 是否开启错误检查和纠正技术, 0 disabled 1 enabled
	Compute M.		# 计算模式, 0 DEFAULT 1 EXCLUSIVE_PROCESS 2 PROHIBITED

2.8 P系

  pwd 显示当前路径

	# 显示当前路径
	pwd

2.9 R系

  reboot 重启系统

	# 重启系统
	reboot

  rm 删除文件或目录

	# 删除main.py文件
	rm main.py
	# 删除pywork文件夹下所有的文件及文件夹
	rm -rf pywork/*
	# 删除pywork文件夹及其所有的文件和文件夹
	rm -rf pywork/

	-i	# 删除前会询问用户是否操作(默认)
	-r	# 递归删除
	-f	# 删除前不询问用户是否操作

2.10 T系

  top 实时显示系统中各个进程的资源占用状况

	# 查看系统各个进程的运行情况
	top

  大致说一下如何查看各个进程的信息:

	# 系统时间, 系统已运行时间, 登陆人数, 系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
	top - 19:59:39 up 9:20,  1 user,  load average: 0.07, 0.03, 0.01
	
	# 进程总数, 运行中的进程数, 睡眠中的进程数, 停止的进程数, 僵死的进程数
	Tasks: 308 total,   3 running, 305 sleeping,   0 stopped,   0 zombie
	
	# 用户(user)占用CPU的百分比, 系统内核(system)占用CPU的百分比, 改变过优先级的进程占用CPU的百分比, 空闲CPU的百分比, IO等待占用CPU的百分比, 硬中断占用CPU的百分比, 软中断占用CPU的百分比
	%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
	
	# 物理内存总量, 空闲内存量, 内存使用量, 内核缓存的内存量
	# 可用内存 = free + buff/cache
	MiB Mem :   1966.1 total,    102.7 free,   1254.0 used,    609.3 buff/cache
	
	# 虚拟内存总量, 虚拟内存空闲量, 虚拟内存使用量, 已被提前加载的内存量
	MiB Swap:   2048.0 total,   2047.7 free,      0.3 used.    538.9 avail Mem 

	# 按F键可查看具体含义
	PID		# Process Id 进程ID
	USER	# Effective Use 进程所有者
	PR		# Priority 进程优先级
	NI		# Nice Value, 负值表示高优先级, 正值表示低优先级
	VIRT	# Virtual Memory Usage 进程使用的虚拟内存总量, 单位kb. VIRT = SWAP + RES
	RES		# Resident Memory Usage 进程使用的、未被换出的物理内存大小(常驻内存), 单位kb. RES = CODE + DATA
	SHR		# Shared Memory 共享内存, 单位kb
	S		# 进程状态, D: 不可中断的睡眠状态 R: 运行 S: 睡眠 T: 跟踪/停止 Z: 僵尸进程
	%CPU	# 进程使用的CPU百分比
	%MEM	# 进程使用的物理内存百分比
	TIME+ 	# 进程使用的CPU时间, 单位1/100s
	COMMAND	# 进程名称(进程运行的指令)
	# 查看指定user(xiayouran)的进程信息
	top -u xiayouran

2.11 W系

  wget 从网络上下载文件

	# 从GitHub上下载代码
	wget https://github/xiayouran/Musicer.git
	# 下载代码到指定目录
	wget -P /home/xiayouran/pywork/ https://github/xiayouran/Musicer.git

	-b	# 后台下载模式
	-P	# 下载到指定目录
	-t	# 最大尝试次数
	-c	# 断点续传
	-p	# 下载页面内所有资源,包括图片、视频等
	-r	# 递归下载

3. 文件与文档

  scp linux系统与linux系统间的文件复制

	# 将本地的main.py文件复制到xiayouran@192.168.3.100主机上的
	scp main.py xiayouran@192.168.3.100:/home/xiayouran/pywork
	# 将xiayouran@192.168.3.101主机上的pywork文件夹复制到本地
	scp -r xiayouran@192.168.3.101:/home/xiayouran/pywork/ .

  wc 统计并显示指定文件中的行数、字数、字节数

	# 统计main.py文件中的行数、字数、字节数
	wc main.py
	# 统计main.py文件中的行数
	wc -l main.py
	# 统计main.py文件中的字数
	wc -w mian.py
	# 统计main.py文件中的字节数
	wc -c mian.py

  du 显示目录或文件的大小

	# 显示当前目录下各文件夹总大小
	du -sh *
	# 显示pywork文件夹大小
	du -sh pywork/
	# 以易读方式显示文件大小(所谓易读, 就是自动以KB/MB/GB的形式显示)
	du -h pywork/
	# 显示pywork文件夹及所有文件的大小
	du -a pywork/
	
	-k	# 以KB为单位显示文件大小
	-m	# 以MB为单位显示文件大小
	-g	# 以GB为单位显示文件大小
	-s	# 显示目录总大小

  touch 创建新的空文件

	# 创建file.txt文件
	touch file.txt

  stat 显示文件的详细信息

	# 显示file.txt文件的创建时间等信息
	stat file.txt
	
	# 主要输出结果
	Access time(atime):	# 最后一次访问文件的时间
	Modify time(mtime): # 最后一次修改文件的时间
	Change time(ctime): # 最后一次对文件属性改变的时间

  grep 在文件中搜索指定字符串

	# 搜索data目录下所有含'haha'的文件
	grep -r 'haha' data/*
	# 搜索test.txt文件中'haha'所在的行及行号
	grep -n 'haha' test.txt
	
	-c	# 只输出匹配行的数量
	-l	# 只列出符合匹配的文件名,不列出具体的匹配行
	-n	# 列出所有的匹配行,显示行号
	-s	# 不显示不存在、没有匹配文本的错误信息
	-v	# 显示不包含匹配文本的所有行
	-w	# 匹配整词
	-x	# 匹配整行
	-r	# 递归搜索

# 除此之外,prep 还可以和正则表达式一起使用
grep "^-"	# 匹配所有以 - 开头的行

  chmod 设置文件/文件夹权限

# 将文件夹data的权限设置为所有人都可以读、写和执行
chmod 777 data

# 对data目录下的所有文件与子目录进行相同的权限变更
chmod -R 777 data

# 在linux中将权限人分为owner、group和others
# 具体权限是r(read, 4)、w(write, 2)和x(execute, 1)
# owner/group/others三种身份各有自己的read/write/execute权限
# 7 = 4 + 2 + 1,即拥有rwx三种权限
# 777表示owner、group和others都拥有rwx三种权限

  md5sum/sha1sum 文件完整性校验

md5sum xxx.txt
sha1sum xxx.txt

# windows:
certutil -hashfile xxx.txt md5
# 支持的算法有:MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512

4. 压缩与解压

  zip.zip格式压缩文件

	# 把当前目录下的data文件夹打包成data.zip
	zip -r data.zip data
	
	-q	# 不显示指令执行过程
	-r	# 递归处理,将指定目录下的所有文件和子目录一并处理
	-z	# 替压缩文件加上注释
	-v	# 显示执行命令时详细的信息

  unzip 解压.zip格式的压缩文件

	# 在当前文件夹下解压data.zip
	unzip data.zip
	# 将data.zip解压到当前目录下的data文件夹中
	unzip data.zip -d data
	# 检查data.zip是否完整
	unzip -t data.zip
	
	-l	# 显示压缩文件内所包含的文件
	-v	# 显示执行命令时详细的信息
	-n	# 解压缩时不要覆盖原有的文件
	-t	# 校验

  tar 压缩/解压.tar.tar.gz格式的文件

	# 解压data.tar到当前目录下
	tar -xvf data.tar
	# 解压data.tar到当前目录下的data文件夹
	tar -xvf data.tar -C data
	# 解压data.tar.gz到当前目录下的data文件夹
	tar -zxvf data.tar.gz -C data
	# 将data文件夹中的所有.txt文件打包到data.tar
	tar -cvf data.tar data/*.txt
	# 查看压缩包内容(不解压)
	tar -tvf data.tar

	-x	# 从压缩包中提取文件
	-z	# 压缩/解压缩.tar.gz格式的文件
	-v	# 显示操作过程
	-r	# 添加文件到已经压缩的文件
	-c	# 建立新的备份文件
	-t	# 查看压缩包里面的文件
	-C	# 切换工作目录
	--remove-files	# 压缩之后删除源文件

5. 系统设置与管理

  export 设置环境变量,用于将shell变量输出为环境变量,或者将shell函数输出为环境变量

	# 列出当前所有的环境变量
	export -p
	# 或者直接不加参数
	export

	# 设置python的环境变量(在后面追加)
	export PYTHONPATH=$PYTHONPATH:/home/xiayouran/python/

	# 设置python的环境变量(在前面追加)
	export PYTHONPATH=/home/xiayouran/python/:$PYTHONPATH

	# 设置python的环境变量(覆盖掉以前的)
	export PYTHONPATH=/home/xiayouran/python/

	# 取消环境变量PYWORK
	unset PYWORK

  但上述的配置操作在关闭终端之后会自动失效,下面有两种方式来进行永久配置,可根据不同的工作环境进行选择使用:

	# method 1: 用户级添加环境变量(只影响当前user)
	# 打开.bashrc文件(在当前用户的根目录下, 直接cd就是了)
	vim .bashrc
	# 在最末尾添加
	export PYTHONPATH=$PYTHONPATH:/home/xiayouran/python/
	# 保存文件并退出, 再进行source使其生效
	source .bashrc
	
	# method 2: 系统级添加环境变量
	# 打开bash.bashrc文件(不同的系统可能不大一样)
	vim /etc/bash.bashrc
	# 在最末尾添加
	export PYTHONPATH=$PYTHONPATH:/home/xiayouran/python/
	# 保存文件并退出, 再进行source使其生效
	source /etc/bash.bashrc

  环境变量的值以 : 进行分割

  ln 为文件或目录创建链接

	# -s 创建软连接(符号链接)
	ln -s /home/xiayouran/pywork/data/imagenet/val /home/xiayouran/data
	# 软连接就相当于是一个快捷方式, 此时的data就相当于是imagenet下的val

	# 删除软连接
	rm -rf /home/xiayouran/data
	# 注意!!!
	# 不是rm -rf /home/xiayouran/data/哦, 没有最后面的 / , 否则数据就没了哦(链接文件的同步性)

  date 显示系统的时间与日期

	# 查看当前系统的时间与日期
	date
	# 格式化显示系统的时间与日期
	date "+%Y-%m-%d %H:%M:%S"
	# 将系统时间设置为2021-09-03 17:30:00
	date -s "2021-09-03 17:30:00"
参数功能
%Y年份
%m月份(1~12)
%d本月的第几天
%H时钟(00~23)
%I时钟(01~12)
%M分钟(00~59)
%S秒钟(00~59)
%A完整的工作日名称
%a缩写的工作日名称
%B完整的月份名称
%b缩写的月份名称
%p显示AM和PM
%q季度(1~4)
%j今年的第几天

  timedatectl 设置系统的时间

	# 查看当前时区的时间状态
	timedatectl status
	# 列出所有时区
	timedatectl list-timezones
	# 设置时区
	timedatectl set-timezone Asia/Shanghai
	# 设置系统日期
	timedatectl set-time 2021-09-03
	# 设置系统时间
	timedatectl set-time 17:30:00 

  ps 查看系统中的进程状态

	# 查看系统中的进程状态
	ps -aux

  pstree 以树状图的形式展示进程之间的关系

	# 以树状图的形式展示进程之间的关系
	pstree

  pidof 查询某个服务进程的pid

	# 查询sshd进程的pid
	pidof sshd

  nice 用于调整进程的优先级

	# 数字越低(-20~19), 优先级越高
	nice -n -20 bash

  ifconfig 查看网卡配置与网络状态等信息

	# 查看网卡信息
	ifconfig

  uname 查看系统内核版本与系统架构等信息

	# 查看系统所有相关信息
	uname -a

	-m	# 显示计算机硬件架构
	-n	# 显示主机名称
	-r	# 显示内核发行版本号
	-s	# 显示内核名称
	-v	# 显示内核版本
	-p	# 显示主机处理器类型
	-o	# 显示操作系统名称
	-i	# 显示硬件平台

  uptime 查看系统的负载信息

	# 查看系统的负载信息
	uptime

  free 显示系统中内存的使用信息

	# 查看看=系统的内存信息
	free -h

  df 显示系统中磁盘的使用信息

	# 查看看=系统的内存信息
	df -h

	Filesystem	# 文件系统
	Size		# 分区大小
	Used		# 已使用容量
	Avail		# 还可以使用的容量
	Use%		# 已用百分比
	Mounted on	# 挂载点

  who 查看当前主机的用户终端信息

	# 查看当前主机的用户终端信息
	who

  which 在变量PATH指定的路径中,搜索某个系统命令的位置

	# 搜索python的位置·
	which python

  last 查看主机被访的记录

	# 查看主机被访的记录
	last

6. 命令组合

  下面介绍通过管道符 | 进行命令组合:

# 统计当前目录下文件的个数(不包括目录)
ls -l | grep "^-" | wc -l

# 统计当前目录下文件的个数(包括子目录)
ls -lR| grep "^-" | wc -l

# 统计当前目录下文件夹(目录)的个数(不包括子目录)
ls -l | grep "^d" | wc -l

# 统计当前目录下文件夹(目录)的个数(包括子目录)
ls -lR | grep "^d" | wc -l

  有关更多更详细的指令信息可以参阅 Linux命令大全(手册)。

补充:bash脚本

# #! 表示脚本的声明,用来告诉系统使用哪种shell解释器来执行该脚本(该声明需放在第一行)
#!/bin/bash

# or in file.py
#!/usr/bin/env python3
# 意思是在 /usr/bin/env 中找到 python 的安装路径,然后去执行它
# 然后可以直接执行file.py而不必python file.py这样运行
# env 是在系统的 PATH 目录中查找解释器

#!/usr/bin/python3
# 意思是说去 /usr/bin/ 目录下找 python 去执行,没有上述方式灵活

set -ex
# set -e 当脚本中的任何一行执行失败就退出
# set -x 打印已经成功执行的脚本,每一行前面会有一个 + 号

# BASH_SOURCE[0] 等价于 BASH_SOURCE,表示取得当前执行的 shell 文件所在的路径及文件名
# dirname 表示去除文件名中的非目录部分,仅显示与目录有关的部分
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

echo $0, $1, $2
# $0 当前脚本名称
# $1 输入的第一个参数

# 条件判断,注意[]里两端各有一个空格
# 其中添加了 x 是防止输入参数为空
if [ x$1 == x ]; then
  echo "Error: $0 model_name"
  # exit 0 代表正常运行程序并退出程序
  # exit 1 代表非正常运行导致退出程序
  # 用户可以 echo $? 来查看是 0 还是 1, 从而达到检测程序是正常结束退出还是产生错误而退出的目的
  exit 1
fi

if [ -f $model_path ]; then
  echo $model_path
elif [ -f $model_path2 ]; then
  echo $model_path2
else
  echo "Error: can't find model file for ${model_name}"
  exit 1
fi
# ==	比较字符串内容是否相同
# !=	比较字符串内容是否不同
# -z	判断字符串内容是否为空

# -d	测试文件是否为目录类型
# -e	测试文件是否存在
# -f	判断是否为一般文件
# -r	测试当前用户是否有权限读取
# -w	测试当前用户是否有权限写入
# -x	测试当前用户是否有权限执行

# -eq	是否等于
# -ne	是否不等于
# -gt	是否大于
# -lt	是否小于
# -le	是否等于或小于
# -ge	是否大于或等于

# @ 将所有命令行参数做为一个字符串数组,每个参数为一个成员变量,存入此变量
for net in ${model_list_all[@]}
do
  echo "======= $net ====="
done

结束语

更多推荐

Linux常用命令汇总