本文最后更新于:2024年9月8日 下午
                
              
            
            
              Linux基础学习笔记(随缘会更新) 
记录一些基本的能用上的命令。之后假如遇到了什么新的命令会在这更新。
第一次更新:用学校科研平台的时候发现查看资源的几个命令能用上 
第二次更新:更新了一些超常用的命令速查 
第三次更新:新增了一下命令 
第四次更新:新增了scp相关命令 
第五次更新:增加了虚拟环境相关命令和少量常用命令 
 
超常用命令速查!! 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ls -alh   ll   tar -cvf xxx.tar ./data1/ ./data2/   tar -czvf xxx.tar.gz ./data1/ ./data2/   tar -xvf xxx.tar -C ./data/  tar -xzvf xxx.tar -C ./data/  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  
 
特殊符号 
|:管道,上一条命令的输出作为下一条命令的参数
&:任务后台执行redis-server &
nohup:nohup 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  # 结合三个标签的效果,可以乱序#  *  # 任意个数字符 ?  # 任意一个字符,不能多也不能少 []  # 匹配字符组中任意一个,比如下列 [abc]  # 匹配abc中任意一个 [a-f]  # 匹配a到f内任意一个 [1-9]  # 匹配1到9内任意一个
 
cd: change dir,改变工作目录 
1 2 3 4 5 6 7 8 9 10 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 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
如图,最左边一栏就是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 [被查找正则] [文件名]
 
查看系统相关信息 
CPU使用信息 
 
GPU使用信息 
跑深度学习模型的时候常用
1 nvidia-smi  # 查看显存、GPU使用率等
 
此外,可以pip install gpu-stat这个工具
 
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 ps -aux/-au > USER   PID  %CPU    %MEM  VSZ RSS TTY   STAT     START     TIME     COMMAND > 用户  进程ID CPU占用 内存占用 一些奇怪的东西 进程状态码 开始时间 消耗的CPU时间 启动命令 ps -aux|grep nginx
 
linux进程 
主进程:程序执行入口 
父进程:任何进程都有父进程,是子进程的创造者,可以有多个子进程但只能有一个父进程 
子进程:父进程创建的进程 
守护进程(daemon):子进程的一种状态,标识子进程与父进程同死。如果没有标记,则杀死父进程对子进程没有影响。 
 
 
systemctl、service命令 
systemctl用来管理linux系统上运行的服务
1 2 3 4 5 6 7 systemctl [命令] [unit] systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl status nginx systemctl reload nginx
 
service命令可以查看系统中的服务
 
远程命令 
SCP文件传输命令 
scp即secure copy,类似cp指令,可以在本地和远程之间进行文件传输。
命令格式:scp [源文件地址] [目标地址]
当地址为远程时,使用这种格式:<用户名>@<IP>:<路径>,比如root@192.168.23.4:/home/test.txt。
额外可以添加-r参数来复制目录。
1 2 3 4 5  scp -r ./work kamino@123.123.44.44:/home/kamino 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  pip freeze > requirements.txt pip list --format=freeze > 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  
 
conda相关 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  conda env export  > environment.yml 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 -xzvf xxx.tar.gz   conda activate <环境名字或者环境路径>