> For the complete documentation index, see [llms.txt](https://cifar.gitbook.io/note/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cifar.gitbook.io/note/fu-wu/linux-yun-hang-shi-ming-ling.md).

# Linux 相关知识

## 电脑相关知识

### [CPU 核数与线程数的关系](https://mp.weixin.qq.com/s/Tp680dfOB7Zb6xlXSay7XA) <a href="#activity-name" id="activity-name"></a>

## bash 命令行

> [《Bash 脚本教程》](https://www.ruanyifeng.com/blog/2020/04/bash-tutorial.html)
>
> [Fish shell 入门教程](https://www.ruanyifeng.com/blog/2017/05/fish_shell.html)
>
> [命令行常用工具的替代品](https://www.ruanyifeng.com/blog/2022/01/cli-alternative-tools.html)
>
> * hexdump 二进制查看命令， notepad vscode 存在各种插件，替换010 editer，查看二进制

<details>

<summary>bash</summary>

echo \\$date     与      echo -e "a\tb" 的[区别](https://wangdoc.com/bash/quotation.html#%E8%BD%AC%E4%B9%89)

Bash 变量名区分大小写，大小写敏感，`HOME`和`home`是两个不同的变量

[创建变量](https://wangdoc.com/bash/variable.html#%E5%88%9B%E5%BB%BA%E5%8F%98%E9%87%8F)           等号两边不能有空格。

[读取变量](https://wangdoc.com/bash/variable.html#%E8%AF%BB%E5%8F%96%E5%8F%98%E9%87%8F)           1、如果变量不存在，Bash 不会报错，而会输出空字符。2、事实上，读取变量的语法`$foo`，可以看作是`${foo}`的简写形式。3、如果**变量的值本身也是变量**，可以使用`${!varname}`的语法，读取最终的值。

[export 命令](https://wangdoc.com/bash/variable.html#%E8%BE%93%E5%87%BA%E5%8F%98%E9%87%8Fexport-%E5%91%BD%E4%BB%A4) ：为了把变量传递给子 Shell，需要使用`export`命令

【[特殊变量](https://wangdoc.com/bash/variable.html#%E7%89%B9%E6%AE%8A%E5%8F%98%E9%87%8F)】

[source 命令](https://wangdoc.com/bash/script.html#source-%E5%91%BD%E4%BB%A4) ：`source`命令执行脚本时，不需要`export`变量。

</details>

### [常见命令](https://www.runoob.com/linux/linux-command-manual.html)

| 命令                                                                    | 作用                                                                                |
| --------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| set                                                                   | set[命令用来修改 Shell 环境的运行参数](https://www.ruanyifeng.com/blog/2017/11/bash-set.html)  |
| ls -lR\|grep ".mp4"\|wc -l                                            | 统计某类型文件个数                                                                         |
| du -sh   \*                                                           | 查看当前目录下各个文件及目录占用空间大小                                                              |
| du -h --max-depth=1                                                   | 同上（建议用上一个）                                                                        |
| chown -R jiarui : jiarui ../\*                                        | 添加组，赋权限                                                                           |
| su - root                                                             | 切换到root权限                                                                         |
| ps -aux \| grep 3000                                                  | 查看端口占用情况                                                                          |
| lsof +D \[ path ]                                                     | <p>（现象：Linux无法删除文件夹 Device or resource busy）</p><p>查看资源占用进程，然后kill 进程</p>         |
| chown -R jiarui:jiarui /data/gitlab/                                  | [指定文件的拥有者改为指定的用户或组](#dian-nao-xiang-guan-zhi-shi)                                 |
| usermod -aG docker jiarui                                             | [添加 docker 用户组](http://c.biancheng.net/view/849.html)     -a  补加                  |
| tail -f notes.log                                                     | Linux tail 命令 [查阅正在改变的日志文件](https://www.runoob.com/linux/linux-comm-tail.html)    |
| lsblk                                                                 | [列出所有可用块设备的信息](https://blog.csdn.net/carefree2005/article/details/115464610)      |
| mount /dev/hda1 /mnt                                                  | [mount命令](https://www.runoob.com/linux/linux-comm-mount.html)                     |
| <p>umount -v /dev/sda1 通过设备名卸载<br>umount -v /mnt/mymount/ 通过挂载点卸载</p> | [umount 命令](https://www.runoob.com/linux/linux-comm-umount.html)                  |
| unzip    file.zip    -d  tar\_folder                                  | [unzip命令](https://www.runoob.com/linux/linux-comm-unzip.html)  -d<目录> 解压缩后要存储的目录。 |
|                                                                       | Linux[打印显示时间](https://blog.csdn.net/qq_27547737/article/details/99230563)         |
|                                                                       | `xargs`[将标准输入转为命令行参数](https://ruanyifeng.com/blog/2019/08/xargs-tutorial.html)。   |
|                                                                       |                                                                                   |
|                                                                       |                                                                                   |

> ctrl + r : 搜索命令行历史命令

| 附加参数    | 解释                                             |
| ------- | ---------------------------------------------- |
| ll -alt | <p>-a 全部（all）</p><p>-l  （list）</p><p>-t 倒叙</p> |
|         |                                                |
|         |                                                |
|         |                                                |

### 查看单个进程相关信息

| 命令                                                           | 解释                                                                 |
| ------------------------------------------------------------ | ------------------------------------------------------------------ |
| <p>cat /proc/PID/status</p><p>eg： cat /proc/51006/status</p> | [进程状态](https://blog.csdn.net/jiankunking/article/details/86010256) |
| <p>top -p PID</p><p>eg: top -p 51006</p>                     | 查看单进程相关信息                                                          |
| lscpu                                                        | ubuntu 查看cpu信息                                                     |
|                                                              |                                                                    |

![](/files/-Mi5DCFj8oGAXl0uhvCv)

htop 同命令行命令相同的【白色PID行】为 进程。其他绿色PID为该进程的线程性能信息。

### find 查找命令

centos 安装一个c++库后，为了配置LD\_LIBRARY\_PATH，如何查找安装位置

find /usr -name libopenblas.so.0   <img src="/files/DVEyufztx14u0UYRCTWF" alt="" data-size="line">

yum install openblas-devel （安装了这个版本便可找到）

### shell文件操作

&#x20;1.覆盖    echo  "" >文件名

&#x20; 2.追加   echo ""  >>文件名

### ip地址与域名快速解析

[etc/hosts文件详解](https://www.cnblogs.com/isme-zjh/p/11553165.html)

### 终端&#x20;

如 tmux 不同于生产环境的supervisor，不能自动程序重启，所以仅作为开发环境下工具

* [Tmux](https://www.ruanyifeng.com/blog/2019/10/tmux.html) 是一个终端复用器（terminal multiplexer）进程同窗口进程分离，常用开发工具 ，同Linux screen 命令
* tee 命令 ， 记录终端输出结果，eg：python3 train.py | tee log.txt
* [byobu](https://www.byobu.org/)&#x20;

<details>

<summary><a href="https://www.runoob.com/linux/linux-comm-screen.html">screen</a></summary>

创建：screen -S ###&#x20;

查看有多少会话：screen -ls&#x20;

离开 screen 会话：（在 screen 终端 下） 按下 Ctrl+a      d 键

恢复：screen -r ###&#x20;

如果不能恢复：先screen -d ###&#x20;

再screen -r ###&#x20;

删除 screen -S ### -X quit

</details>

### source 同 sh 等的区别。

> sh为开启子shell，对父shell 脚本，export 导入的环境变量不起作用。
>
> source 命令为在当前shell 窗口执行。

### [运行可执行程序](https://www.runoob.com/linux/linux-shell.html)

> &#x20;注意，一定要写成 ./test.sh，而不是 **test.sh**，运行其它二进制的程序也一样，直接写 test.sh，linux 系统会去 PATH 里寻找有没有叫 test.sh 的，而只有 /bin, /sbin, /usr/bin，/usr/sbin 等在 PATH 里，你的当前目录通常不在 PATH 里，所以写成 test.sh 是会找不到命令的，要用 ./test.sh 告诉系统说，就在当前目录找。

### [ln 软连接](https://zhidao.baidu.com/question/590820491.html)

> 创建软连接，命令如下：
>
> ln -s / /home/good/linkname
>
> ln的链接分软链接和硬链接两种：
>
> 1、软链接就是：“ln –s 源文件 目标文件”，只会在选定的位置上生成一个文件的镜像，不会占用磁盘空间，类似与windows的快捷方式。
>
> 2、硬链接ln源文件目标文件，没有参数-s， 会在选定的位置上生成一个和源文件大小相同的文件，无论是软链接还是硬链接，文件都保持同步变化。
>
> 软链接又叫符号链接，这个文件包含了另一个文件的路径名。可以是任意文件或目录，可以链接不同文件系统的文件。
>
> 链接文件甚至可以链接不存在的文件，这就产生一般称之为”断链”的现象，链接文件甚至可以循环链接自己。类似于编程语言中的递归。
>
> 软链接文件只是其源文件的一个标记，当删除了源文件后，链接文件不能独立存在，虽然仍保留文件名，但却不能查看软链接文件的内容了。
>
> 用ln -s 命令可以生成一个软连接，如下:
>
> \[root\@linux236 test]# ln -s source\_file softlink\_file
>
> 在对符号文件进行读或写操作的时候，系统会自动把该操作转换为对源文件的操作，但删除链接文件时，系统仅仅删除链接文件，而不删除源文件本身。
>
> 删除硬/软链接用rm softlink\_file 或者 unlink softlink\_file

### scp src-path tar-path

当只有一台配置了scp时，可以反向操作。如芒果项目，内网只给 gpu2机器配置了 scp。从c1服务器传从文件到gpu2 时，可以在 gpu2 上：scp root\@10.50.21.101:/root/data.tar  ./     (反向操作)

### [rsync 用法教程 : 替代cp和mv命令](https://www.ruanyifeng.com/blog/2020/08/rsync.html)  &#x20;

> 断点续传
>
> rsync -P -av pixabay\_pictures.tar.gz root\@39.105.33.147:/data/rmzk\_draw

### 文件交互  [linux lrzsz 命令](https://woyard.com/2143.html)

服务器与本地文件交互下载：[Linux命令之rz命令与sz命令](https://www.cnblogs.com/leeyongbard/p/9356760.html)

> yum install lrzsz &#x20;

### [常用解压与压缩命令](https://blog.csdn.net/songbinxu/article/details/80435665)

### chmod  权限

[linux命令——ll详解](https://www.cnblogs.com/zongyl/p/10062739.html)

### [Linux Crontab 定时任务](https://www.runoob.com/w3cnote/linux-crontab-tasks.html)

## vim编辑器

Vim 从入门到精通    [github](https://github.com/wsdjeg/vim-galore-zh_cn)    [gitlab](https://gitlab.com/wsdjeg/vim-galore-zh_cn)

#### [精通 VIM ，此文就够了](https://zhuanlan.zhihu.com/p/68111471) （文章中下部分介绍了常用命令）

> &#x20;        :set nu                 显示行号
>
> &#x20;        :set nonu             取消行号
>
> &#x20;        :n                         定位到 n 行
>
> &#x20;        `h,j,k,l`            这几个按键主要是用来快速移动光标的
>
> &#x20;               在当前行上移动光标：`0` 移动到行头   `$` 移动到行尾
>
> &#x20;               跨行移动光标：`gg` 光标定位到第一行的行首 `G` 光标定位到最后一行的行首
>
> &#x20;               当前屏幕移动光标：`H` 光标定位到当前屏幕的第一行行首， `M` 屏幕的中间，`L` 屏幕的尾部
>
> &#x20;               翻页操作：`ctrl+f` 查看下一页内容              `ctrl+b` 查看上一页内容
>
> &#x20;               VIM 的复制，黏贴 ，删除：  `yy` 复制一行  `p` 在光标后开始黏贴  `dd` 删除一整行
>
> &#x20;               撤销操作和恢复 **：** `u` 撤销刚才的操作 `ctrl + r` 恢复撤销操作

## 环境变量相关

### LD\_LIBRARY\_PATH   C++ 运行时动态链接库。

LD\_LIBRARY\_PATH是Linux环境变量名，该环境变量主要用于指定查找[共享库](https://baike.baidu.com/item/%E5%85%B1%E4%BA%AB%E5%BA%93/5101825)（动态链接库）时除了默认路径之外的其他路径。

python 解释器基于C++，通过swig转换后，必要时同样需要配置   LD\_LIBRARY\_PATH

### 代码乱码。编码问题，export LC\_ALL=en\_US.utf-8

### PKG\_CONFIG\_PATH

> $ pkg-config --libs libavutil

pkg-config  访问 PKG\_CONFIG\_PATH 环境变量下的 .pc 文件

### 变更环境变量

linux：\~/.bashrc                  mac：\~/.bash\_profile

设置好后需要 ：source \~/.bashrc  才可以真正生效

## Linux 性能分析

### [火焰图](https://www.ruanyifeng.com/blog/2017/09/flame-graph.html)

## 硬件

### 网口相关

> 引 ：bolean服务器 ifconfig 不显示 ip v4 地址
>
> ubuntu系统通过[ifconfig查看eth0只有ipv6没有ipv4的解决方案](https://blog.csdn.net/clearhlj/article/details/125453481)

【解决方案】 [Ubuntu 18 LTS netplan 网络配置](https://www.cnblogs.com/abeen/p/9355493.html)

[关于 Ubuntu Server 18.04 的网络](https://blog.csdn.net/wlf_go/article/details/103959119)  （查看网口是否连接网线）

> 列出所有正在使用的端口号和对应的进程 （按照端口号进行排序）
>
> netstat -tulnp |  sort -k 4 -n

### 磁盘相关

常用命令

> df -h
>
> fdisk -l&#x20;

mount 遇到的问题 ：[unknown filesystem type 'LVM2\_member'.](https://blog.csdn.net/weixin_44863237/article/details/122101318)

**原因**：  mount直接挂载硬盘设备是不行的，系统不能设别。硬盘设备需要通过文件管理系统在Linux系统上才能使用。

> lsblk，查看分区和磁盘

LVM是逻辑卷管理（Logical Volume Manager）

> 使用LVM管理硬盘的基本过程如下：
>
> 1. 将硬盘创建为物理卷
> 2. 将多个物理卷组合成卷组
> 3. 在卷组中创建逻辑卷
> 4. 在逻辑卷之上创建文件系统

【重点】 [lvm逻辑卷扩容缩容（ext4）](https://www.cnblogs.com/0329linux/p/7047768.html)

> 具体操作 ：lvresize [调整LVM逻辑卷的空间大小，可以增大空间和缩小空间](https://www.cnblogs.com/yizhipanghu/p/10189027.html)
>
> 物理卷  查看物理卷：pvs                 physics  \['fɪzɪks]
>
> 查看卷组：vgs
>
> 查看逻辑卷：lvdisplay                     Logical Volume

Linux[挂载（永久）硬盘](https://blog.csdn.net/qq_38633110/article/details/114259253)

### 排除磁盘IO问题：内存映射出一个硬盘，直接写到内存里

[Linux tmpfs 文件系统（基础概念）](https://blog.51cto.com/u_11495268/2424414)

## Linux目录结构

ubuntu ： **ext4** 日志文件系统 :cherries:&#x20;

> 春雨在装服务器时，他的操作

| 操作                      | 解释                                                           | 备注                                               |
| ----------------------- | ------------------------------------------------------------ | ------------------------------------------------ |
| 服务器安装 CentOs 而不是 Ubuntu | ubuntu自动更新，是我们不想要的                                           | 安装后 ubuntu 5g 左右，centos  3g 左右，文件多就可能有其他的东西，例如后门 |
| 增大 var 目录               | docker 目录，默认不修改的话，docker在这个文件夹                               | 服务器上部署很多docker 适合增大此目录                           |
| swap 交换                 | 当内存不够用时，从硬盘拿点用                                               | 一半装好系统后会手动关闭，也可以不用管                              |
| arm x86                 | <p>cpu 区别：指令集不同 <br> 功耗等arm占优势，省电等等其他方面  <br> arm 开源 ，国产</p> |                                                  |
