Linux命令

Linux命令

本文总结Linux系统(主要是Arch Linux)中常用的操作和配置,以防遗忘。

软件位置

路径 内容
/opt/ 放置第三方大型软件
/usr/share/applications/ 已安装软件的可执行文件快捷方式
/usr/bin 上述快捷方式的软连接,桌面环境的已安装软件目录就是基于这个文件夹的内容来获取的

桌面快捷方式的编写规范:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Desktop Entry]
Version=
Encoding=UTF-8
Name=
Comment=
Exec=/usr/local/bin/qq
Icon=/usr/local/share/tencent-qq/qq.png
Terminal=
Type=Application
Categories=Application;Network;Tencent Software;
StartupNotify=true
Name[zh_CN]=腾讯QQ
GenericName[zh_CN]=
Comment[zh_CN]=腾讯QQ

环境变量

环境变量是一个具名对象,包含应用程序可以使用的数据。安装coreutils软件包并使用printenv命令可以显示当前环境变量的值。

在命令前可以用<key>=<value>env <key>=<value>的形式临时指定环境变量,例如:

1
2
EDITOR=vim xterm
env EDITOR=vim xterm

环境变量包括系统级环境变量用户级环境变量,原则上任何shell脚本都可以用于初始化环境变量,但按照约定应该仅在特定文件中配置环境变量,不同文件具有不同的限制。

系统级环境变量:

  • /etc/environment与shell无关,无法使用脚本和通配符展开,该文件中使用<key>=<value>的形式设置环境变量。
  • /etc/profile初始化登陆shell的变量。
  • 特定于shell的配置文件,例如Bash终端的/etc/bash.bashrc、Zsh终端的/etc/zsh/zshrc

用户级环境变量可在下面文件中定义:

  • shell的用户配置文件,例如Bash终端的~/.bashrc、Zsh终端的~/.zshrc
  • systemd用户环境变量读取自~/.config/environment.d/*.conf

各种命令

删除命令

1
2
3
rm -i # 交互式删除
rm -r # 递归删除,删除目录
rm -rf # 强制递归删除,谨慎使用

解压

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tar -zxvf xx.tar.gz # 解压.tar.gz文件格式
tar -jxvf xx.tar.bz2 # 解压.tar.bz2文件格式

unzip -l xx.zip # 列出.zip压缩文件目录
unzip xx.zip -d /path/to/dir/ # 解压到某个目录,没有该目录会自动创建
unzip -O GBK xx.zip # 指定编码方式解压
convmv -f gbk -t utf8 --notest xxx -r # 转换编码方式,-r表示递归转换

unrar <命令l,p,t,e,x> xx.zip /path/to/dir/
<命令>
l # 查看文件内容
p # 标准输出流
t # 测试文件
e # 解压文件,全部散落出来
x # 带目录解压文件

conda命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
conda --version/-v  # 获取版本号
conda --help/-h # 获取帮助
conda env -h # 环境管理
conda info --envs # 列举出当前所有环境
conda env list # 列举出当前所有环境

conda create -n new_env_name [python=3.8] [numpy] # 创建新的python虚拟环境
conda create -n new_env_name --clone old_env_name # 复制环境
conda remove -n your_env_name --all # 删除某个环境
conda activate your_env_name # 进入某个环境
conda deactivate # 退出环境

conda env export > environment.yml # 当前环境写到environment.yml配置里
conda env create -f environment.yml # 从当前配置构建环境

conda list # 列举当前环境下的所有包
conda list -n your_env_name # 列举非活跃环境下的所有包
conda install -n env_name package_name # 为某个环境安装指定的包,如果要用pip安装,需要先激活当前的conda环境
conda install -c anaconda anaconda-navigator # 安装anaconda-navigator
conda install mamba -c conda-forge # 从社区管理的conda-forge仓库中安装mamba
mamba install numpy # mamba可以替代conda,加速包安装

文件权限

chmod命令控制用户对文件的权限,该命令调用分为三级:文件所有者u、用户组g、其他用户o,每级包括三种权限:读r、写w、执行x

1
chmod [r,w,x] [r,w,x] [r,w,x]

设置方式有三种:

  • 使用三位二进制数0-7来表示每级的权限,r=4w=2x=1,例如chmod 754表示文件所有者设置rwx权限,用户组设置rx权限,其他用户设置x权限。
  • 符号设置,例如chmod u=rx为文件所有者设置rx权限。
  • 增加和删除权限,例如chmod u+x为文件所有者增加x权限。

查看系统信息

1
2
3
4
5
cat /proc/version # 查看系统版本
uname -e # 查看系统位数
cat /usr/local/cuda/version.txt # 查看cuda版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 # 查看cudnn版本
inxi -G # 查看显卡使用情况

pacman和yay

1
2
3
4
5
6
pacman -S 软件包    # 安装软件
pacman -Rns 软件包 # 卸载软件,删除依赖
yay -S 软件包 # 安装软件
yay -Ss 软件包 # 搜索软件包
yay 软件包 # 搜索并安装软件包
yay # 更新系统及所有软件包

文件查找

locate命令在数据库中查找,数据库默认每天更新一次,也可以使用updatedb命令手动更新。find不使用数据库进行查找,查找较慢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
locate <文件前几个符号> # 在数据库中搜索文件

find <选项> <文件名> # 在当前目录及其子目录下查找文件或者文件夹
<选项>
-name/iname # 指定文件名字/指定文件名字(忽略大小写)
-type # 指定文件类型,f普通文件,l符号链接,d目录,c字符设备,b块设备,f套接字,p Fifo
-maxdepth # 指定最大的查找深度
-regex/iregex # 根据正则表达式来匹配字符/忽略大小写
! # 否定,排除搜索到的文件
-size # 根据大小进行匹配,b块,c字节,w字,k千字,M兆字节,G吉字节。+表示大于,-表示小于
-delete # 删除文件
-user # 指定拥有的用户
-group # 指定拥有的组
-exec <指令> {} \; # 使用其他指令来处理找到的文件,{}表示找到的所有文件 \;表示命令结束
-ok <指令> {} \; # 同上,不过会给出提示

-atime/amin # 最后一次访问的时间,time天,min分钟,大于表示+,小于表示-
-mtime/mmin # 文件最后一次修改的时间
-ctime/cmin # 文件数据元最后一次修改的时间,例如权限等。

-empty # 文件为空
\(<文件名> -o <文件名>\) # 或者
-perm -o=r # 找到所有只读的文件,perm指定权限。

<实例>
find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空行
find . -type f -name "*" | xargs grep <内容> # 列出当前目录下,包含固定内容的文件

rsync

rsync用于在服务器之间传递文件,用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
rsync <选项> <源地址> <目标地址>
-r # 递归同步
-a # 递归同步,并同步元信息(比如修改时间、权限)
-v # 显示输出细节,-vv输出更详细的细节,-vvv输出最详细的细节
-e "ssh -p 25884" # 指定协议,用ssh时可以省略,但如果有额外的参数则必须加e参数
-n # 不确定命令执行的结果,可以使用-n参数模拟执行的结果
--progress # 显示进度条
--delete # 使目标目录成为源目录的镜像,将额外的文件删除
--exclude # 排除某些文件,多个匹配模式可以使用多次exclude参数
--include # 指定必须同步的文件模式,通常和exclude配合使用

<实例>
rsync -av -e "ssh -p 25884" root@10.184.17.2:/opt/data/private/mmyolo/work_dirs/ . --progress