Linux基础学习笔记(随缘会更新)

本文最后更新于:2024年9月8日 下午

Linux基础学习笔记(随缘会更新)

记录一些基本的能用上的命令。之后假如遇到了什么新的命令会在这更新。

  • 第一次更新:用学校科研平台的时候发现查看资源的几个命令能用上
  • 第二次更新:更新了一些超常用的命令速查
  • 第三次更新:新增了一下命令
  • 第四次更新:新增了scp相关命令
  • 第五次更新:增加了虚拟环境相关命令和少量常用命令

超常用命令速查!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ls -alh  # 人性化显示所有文件
ll # 和ls -lsat差不多

tar -cvf xxx.tar ./data1/ ./data2/ # 打包文件,不压缩!
tar -czvf xxx.tar.gz ./data1/ ./data2/ # 压缩文件
tar -xvf xxx.tar -C ./data/ # 解压xxx.tar到指定目录
tar -xzvf xxx.tar -C ./data/ # 解压xxx.tar.gz到指定目录

du -h /data/ # 人性化显示文件占用磁盘大小
df -h # 显示磁盘分区可用空间
find /var/log/ -type f -print | wc -l # 查看目录下有多少文件
ls -l /path/to/directory | grep -v '^d' | wc -l # 查看目录下有多少文件

ps aux | grep xxx # 查看所有用户的xxx的进程

特殊符号

|:管道,上一条命令的输出作为下一条命令的参数

&:任务后台执行redis-server &

nohupnohup command > /path/to/log.log 2>&1 & 后台执行命令,并将输出写到log中

&&:前一条命令成功时执行后一条命令

||:前一条命令失败时执行下一条命令

文件与目录管理

ls : list,列出目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ls
-a # all 全部的文件,包括隐藏文件
-l # long 详细信息
-h # 配合-l以人性化的方式显示文件大小
-i # 显示inode信息
## 可以组合使用
ls -lha # 结合三个标签的效果,可以乱序

## ls及其他命令可能使用的通配符
* # 任意个数字符
? # 任意一个字符,不能多也不能少
[] # 匹配字符组中任意一个,比如下列
[abc] # 匹配abc中任意一个
[a-f] # 匹配a到f内任意一个
[1-9] # 匹配1到9内任意一个

cd: change dir,改变工作目录

1
2
3
4
5
6
7
8
9
10
cd
## Linux所有目录和文件名大小写敏感
## cd后可能用的特殊路径
cd ~ # 当前用户主目录
cd . # 当前目录
cd .. # 上级目录
cd - # 最近两次工作目录间切换
## 相对路径与绝对路径
cd /home/tmp # 绝对路径,最前面是~或者/
cd file/src # 相对路径,表示当前目录下的文件

mkdir: make dir, 创建新目录

1
2
mkdir [目录名字]
-p # 可以递归创建目录

rmdir: remove dir,删除空目录

1
2
rmdir [目录名字]
-P # 删除指定空目录,假如上一级也是空那也删除

rm: remove, 删除文件或目录

1
2
3
4
rm [文件名]
-f # 强制删除,忽略不存在的文件
-r # 删除目录
-i # 会询问一次

pwd: print working dir,显示目前所在目录

1
2
pwd
-P # 显示出真实路径而非link路径

cp: copy,复制文件

1
2
3
4
5
6
7
8
cp [参数] [来源] [目标]
-d # 若复制的文件是link,则复制link而非文件本身
-p # 复制文件的属性,备份常用
-r # 递归复制,能复制目录
-a # -pdr

-f # force,若目标已存在且无法开启,则删除后再试一次
-i # 若目标已存在,会先询问再覆盖

mv: move,移动文件或修改名称

1
2
3
4
5
mv [参数] [来源] [目标]
-f # force,若目标已存在且无法开启,则删除后再试一次
-i # 若目标已存在,会先询问再覆盖
-u # 若目标文件已存在,且来源更新,才会覆盖
mv file file2 # 重命名操作

ln: 链接

硬连接

硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。**只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。**也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

不允许给目录创建硬链接

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

1 (1)

如图,最左边一栏就是inode,a-hard是硬链接,a-light是软连接。

1
2
3
4
5
6
7
ln [参数] [来源] [目标]
## 必要参数
-b # 覆盖以前建立的连接
-f # 强制执行
-i # 存在会询问一次
-s # 软连接
-v # 显示过程

cat: category,由第一行开始显示文件内容

1
2
3
4
5
6
7
8
cat [参数] [目标]
-E # 将结尾的断行字节用$表示
-v # 列出看不出来的特殊字符
-T # 列出tab键为^|
-A # -vET

-b # 列出行号,空白行不计
-n # 列出行号,空白行计

tac: 倒过来的cat,从最后一行开始显示文件内容

nl: 显示行号

1
2
3
4
nl [参数] [文件]
-b a # 计空行
-b t # 不计空行 默认
-w [数字] # 行号栏所占位数

more: 一页一页翻动

1
2
3
4
5
space  # 向下翻一页
enter # 向下一行
/[字符] # 向下搜索字符
q # 离开
b # 回翻页

head/tail: 前/后几行

1
2
head -n [数字] [目标]
tail -n [数字] [目标]

grep命令

用于查找文件里符合条件的字符串

1
2
3
4
5
# 从文件内容查找匹配字符串的行 文件名可以用通配符*
grep [被查找字符串] [文件名]
# 也可以用正则
grep -e [被查找正则] [文件名]
# -i 不区分大小写; -c 查找匹配的行数 -v 反向查找,查找不匹配的行

查看系统相关信息

CPU使用信息

1
top  # 查看使用率等

GPU使用信息

跑深度学习模型的时候常用

1
nvidia-smi  # 查看显存、GPU使用率等

此外,可以pip install gpu-stat这个工具

1
2
gpustat  # 显示GPU的一些信息,比nvidia-smi更直观
gpustat -i # 持续刷新信息

ps命令

ps是Process Status缩写,用来列出系统进程。linux进程有这几种状态:运行R、停止T、睡眠S(Interruptible sleep)、不可中断睡眠D ( Uninterruptible sleep,通常是IO )、僵尸Z

其中,睡眠状态指的是进程在等待某些事件或外部中断发生;不可中断睡眠指的是进程不接受外来信号中断,这个过程比较短暂;僵尸状态指的是进程在退出过程中,系统回收所有资源,但留下了进程的描述符,它的父进程可能会用到。

1
2
3
4
5
6
7
8
9
10
# 显示所有进程
ps -A
# 显示某个用户进程
ps -u ubuntu
# 比较常见的组合 -au详细资讯 -aux所有人的详细资讯
ps -aux/-au
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 用户 进程ID CPU占用 内存占用 一些奇怪的东西 进程状态码 开始时间 消耗的CPU时间 启动命令
# 常用与grep组合
ps -aux|grep nginx

linux进程

  • 主进程:程序执行入口
  • 父进程:任何进程都有父进程,是子进程的创造者,可以有多个子进程但只能有一个父进程
  • 子进程:父进程创建的进程
  • 守护进程(daemon):子进程的一种状态,标识子进程与父进程同死。如果没有标记,则杀死父进程对子进程没有影响。

systemctl、service命令

systemctl用来管理linux系统上运行的服务

1
2
3
4
5
6
7
systemctl [命令] [unit]
# unit的 启动 停止 重启 状态
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx
systemctl reload nginx

service命令可以查看系统中的服务

1
2
# 查看所有服务
service --status-all

远程命令

SCP文件传输命令

scp即secure copy,类似cp指令,可以在本地和远程之间进行文件传输。

命令格式:scp [源文件地址] [目标地址]

当地址为远程时,使用这种格式:<用户名>@<IP>:<路径>,比如root@192.168.23.4:/home/test.txt

额外可以添加-r参数来复制目录。

1
2
3
4
5
# 将本地当前目录下的work目录复制到远程/home/kamino下
scp -r ./work kamino@123.123.44.44:/home/kamino

# 将远程/home/kamino/result.tar.gz复制到本地当前目录
scp kamino@123.123.44.44:/home/kamino/result.tar.gz .

虚拟Python环境相关命令

pip相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 导出requirements.txt的常用方法,下面两个都可用
pip freeze > requirements.txt
pip list --format=freeze > requirements.txt

# pipreqs,导出更简洁的requirements.txt
pip install pipreqs
pipreqs <路径> --encoding=utf-8

# 安装虚拟环境
pip install -r requirements.txt

# 安装包
pip install <包名或者含有setup.py的路径>
pip install -e <路径> # 以编辑模式安装
pip install git+https://github.com/openai/CLIP.git # 直接安装github上的库

conda相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 导出环境的YAML文件
conda env export > environment.yml

# 根据YAML创建环境
conda env create -f environment.yml

# 创建环境
conda env create \
-n <环境名字>
-p <环境路径>
python=3.10 # 指定版本

# 打包整个环境!!
pip install conda-pack
conda pack -n/-p <环境名/路径> -o <导出路径.tar.gz> # 导出是一个.tar.gz文件
tar -xzvf xxx.tar.gz # 解压出来就直接是一个可以activate的环境

# 激活
conda activate <环境名字或者环境路径>

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!