生信基础——三、Linux指令之文件操作
前言
这篇文章只是针对0基础的Linux小白,可以快速上手完成一些必须使用Linux场景的任务,尤其是生信领域。本着先会用,再理解,先局部,再系统的学习方法,只对必要内容进行讲解,大佬可以在评论区补充知识点。之后所有内容会优先使用WSL下的Ubuntu-22.04终端操作进行讲解,可以查看上一篇文章进行安装:生信基础——二、安装Ubuntu-优快云博客
一、认识 Linux 的文件系统
1、路径、目录、文件
-
路径
在 Windows 系统中,我们怎么去找到一个文件?我们会使用资源管理器(如下),通过鼠标的点击,就可以层层进入文件夹,找到目标文件。而一个文件所在的位置,会用
\
反斜杠来表示层次,这就称为路径,在下面的图中,显示了 Windows 资源管理器的路径显示方式:F:\my_projects\生信教学\生信基础——三、Linux基础指令
但是在Linux的终端环境下(如下),我们并没有图形化界面去使用鼠标点击操作
这时候,就得使用键盘输入指令进行操作了,我们使用
cd {Linux路径}
命令进入某个目录(相当于Windows下的文件夹),当我在 WSL 终端中输入以下命令就可以进入刚才 Windows 资源管理器打开的F:\my_projects\生信教学\生信基础——三、Linux基础指令
路径cd /mnt/f/my_projects/生信教学/生信基础——三、Linux基础指令
大家可能会疑惑:为什么在 Windows 下的路径是
F:\my_projects\生信教学\生信基础——三、Linux基础指令
,而到了 Linux 下变成了/mnt/f/my_projects/生信教学/生信基础——三、Linux基础指令
,为什么反斜杠变成了正斜杠,开头的F:
变成了/mnt/f
呢?对比一下两个路径的区别:
(Windows) F:\my_projects\生信教学\生信基础——三、Linux基础指令 (Linux ) /mnt/f/my_projects/生信教学/生信基础——三、Linux基础指令
好的,注意,在 Linux 以及一些编程语言中,普遍使用的是正斜杠来划分路径。
/mnt/f
表示 F 盘的挂载目录。”挂载” 指由操作系统使一个存储设备(如硬盘、CD-ROM或共享资源)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。简单来说就是它能够把外部储存设备加载到 Linux 系统中供你访问,/mnt
是一个系统目录(也被称为挂载点),是英文mount
的缩写,直译就是安装,安置
的意思,不过挂载听起来更专业一点是吧,哈哈哈。我们来看看 WSL 系统的
/mnt
目录下挂载了哪些东西,同样的,使用下面的命令进入/mnt
目录(等下详细说明路径和目录的区别)cd /mnt
现在进到了
/mnt
下了,但是该怎么查看这个目录下到底有什么东西呢?好的,现在介绍一个新命令
ls
,这个命令其实是单词list
的缩写,表示列出的意思,也就是列出当前目录下的非隐藏内容,现在输入这个指令:ls
可以看到,
c
d
e
f
h
wsl
wslg
这些目录被挂载在我们的 WSL-Ubuntu 系统上,c-f 盘就是我的 Windows 电脑上的对应的盘符,其他的是 Linux 系统生成的一些被挂载的目录。通过/mnt
挂载点,你就可以很方便(相对方便)地在 Linux 环境下翻找 Windows 主机上的文件了! -
目录
上面讲了路径,其中也提到了目录,这里简要地介绍一下二者的区别:
-
目录是一个真实存在的实体(如果你不了解面向对象的概念的话,就简单理解为是一个真实存在的东西),而路径是一个描述文件位置的方法,它并不能被储存或者找到,你找不到
/home/test
这个东西,但是你能够顺着这个路径找到/home
下面的/test
目录 -
相同的,目录其实就是 Windows 下文件夹的概念,路径是一个地址的概念
-
-
文件
文件在 Linux 系统中是一个很重要的概念,有一句话叫“ Linux 下一切皆文件”,这被称为 Linux 哲学
摘自为什么说Linux下“一切皆文件”? - 知乎":在windows中是文件的东西,它们在linux中也是文件,其次一些在windows中不是文件的东西, 比如进程, 磁盘, 也被抽象成了文件.。你可以使用访问文件的方法访问它们获得信息。甚至一些很离谱的东西,比如管道,也是文件。甚至类似于socket(套接字)这样的东西, 使用的接口跟文件接口也是一致的。"
-
上面三个基础且重要的内容大致了解了,我再总结性地给出下面这张图,让大家再从宏观视角理解 Linux 的树状文件系统
2、常用特殊目录
-
/
这个是根目录,一切路径的起源 -
/mnt
这个目录通常是用于 Linux 系统默认挂载外部储存设备的目录 -
/root
这个目录是专门存放 root 用户(超级用户,拥有掌管整个系统的至高无上的权利,很厉害,但是也很危险,一般我们不用这个用户进行操作)相关文件的地方 -
/home
温暖的家目录,你以普通用户的身份登录,默认会在 home 目录出生,里面存放了所有普通用户的个人目录,比如/home/xiaoming
/home/xiaozhang
-
~
这个是主目录,使用cd ~
可以快速回到当前用户的主目录,比如/home/xiaoming
,如果是 root 用户,则回到/root
目录下 -
.
没错,一个点号也是一个特殊目录,这个代表了当前目录 -
..
两个点代表当前目录的上一级目录,比如当前在/home/xiaoming/test
,使用cd ..
命令,可以回到/home/xiaominig
,然而更多的点号并不能返回更前面的目录,最多两个点号,我们可以用下面的方法返回更上级的目录cd ../../../
-
-
这个目录表示返回上一次,对,不是上一级,是上一次的目录,比如我现在在/home/xiaoming/test/hello
,我突然需要去另一个目录/home/xiaoming/project/data
,处理完后需要回到hello/
,就不需要再输入一长串的cd /home/xiaoming/test/hello
,直接cd -
就能返回了
二、对文件进行增删改查
1、创建文件
这里秉承着 Linux 下一切皆文件的理念,将目录这个特殊的文件的创建也放在这里讲了
-
创建一个新目录(类比 Windows 创建文件夹)
这里介绍新命令
mkdir {新目录路径}
,是英文make directory
的缩写,这个指令将在当前目录下创建一个新目录new_dir
mkdir new_dir
下面的命令是在指定路径下创建新的目录
new_dir
,如果不存在这个路径是创建不了的mkdir /home/xiaooming/test/new_dir
-
创建一个新文件
使用
touch {文件名}
来创建一个空文件,例如以下命令将创建一个new_file.py
touch new_file.py
同样的,后面跟路径也能在指定路径创建一个新的文件(后面就不再说了)
touch /home/xiaoming/test/new_file.py
-
或者直接使用编辑器创建一个不存在的文件并编辑,如果文件已经存在,则直接编辑
使用
vim
编辑器创建文件vim new_file.py
使用
nano
编辑器创建文件nano new_file.py
2、更改文件
主要介绍一些文件操作:在 Linux 下进行文件的复制,移动,重命名,编辑等操作,补充一点,我尽量以根目录开始完整地给出演示路径,但是实际上我们不需要输入这么完整的路径,我们有很多方式去偷懒提高效率
-
复制文件到指定位置
使用
cp {文件名1} {文件名2} {文件名……} {指定要复制到的路径+重命名}
命令来复制一个或多个文件到指定位置 ,如下面的命令会将当前目录下的test1.txt
复制到/home/xiaoming/copy_test/
下,文件还是叫test1.txt
cp ./test1.txt /home/xiaoming/copy_test/test1.txt
当然,上面我使用
./
强调是在当前目录下,你也可以不用cp test1.txt /home/xiaoming/copy_test/test1.txt
不加重命名的文件名也是可以的,默认是原文件名称
cp test1.txt /home/xiaoming/copy_test/
你也可以一次性复制多个文件,但是一般这里就不方便重命名了,需要使用一些高级语法,超出入门范围了,不讲
cp test1.txt test2.txt /home/xiaoming/copy_test/
你也可以利用复制来拷贝一个重命名版本的文件,下面的命令就会复制
test1.txt
并且重命名为test2.txt
cp test1.txt /home/xiaoming/copy_test/test2.txt
-
复制目录到指定位置
如果你不是复制文件,而是复制一个目录,可以添加一个
-r
参数表示递归复制,将目录和目录内所有文件都复制过去,如下面的命令,会将copy_me
目录本身以及其中的所有内容都复制到/home/xiaoming/new_location/
下cp -r /home/xiaoming/copy_me /home/xiaoming/new_location/
注意 ,对比下面两条命令,有很大区别
cp -r /home/xiaoming/copy_me /home/xiaoming/new_location/ cp -r /home/xiaoming/copy_me/ /home/xiaoming/new_location/
上面的两条命令中,区别就是
copy_me
后面的斜杠,有斜杠表示不包括copy_me
这个目录,而是只将其内包含的文件复制过去,无斜杠则表示连带copy_me
一起复制过去,而目标路径最后有无斜杠不受影响,有斜杠只是强调了这是个目录,无斜杠系统也会自动找到匹配的目录,如下两条命令是一样的效果cp -r /home/xiaoming/copy_me /home/xiaoming/new_location/ cp -r /home/xiaoming/copy_me /home/xiaoming/new_location
-
移动文件或目录到指定位置
使用
mv
命令来移动文件,下面的命令将会把/home/xiaoming/test/mv_test.txt
移动到/home/xiaoming/test1/
下mv /home/xiaoming/test/mv_test.txt /home/xiaoming/test1/
移动目录
mv /home/xiaoming/test/ /home/xiaoming/new_dir/
注意 ,如果
new_dir/
这个目录不存在,则test/
目录将会直接改名为new_dir/
,如果存在new_dir/
了,才是将test/
移动到new_dir/
下,mv
命令并不会帮你创建目录 -
使用
mv
来改名下面的命令会将
test.txt
改名为test123.txt
,后面我会逐步精简路径,大家应该能明白用法了mv test.txt test123.txt
给目录改名的方法上面已经有了,且与文件改名类似,不再赘述
-
使用编辑器进行文件内容修改
常见的终端环境编辑器有
nano
vim
等,有的系统默认是nano
,因此修改文件你需要安装这些编辑器,安装部分后面的文章会提到,使用下面的命令来启动编辑器nano test.txt
vim test.txt
编辑器的使用后面也会详细出一篇文章,这里篇幅有限,关注我获取更多教程更新
3、查找文件
这里提供一些和文件系统查找有关的命令及演示
-
pwd
查看当前的路径,新手如果容易迷路,或者需要复制路径,可以使用这个命令 -
find
这个命令可以帮你在指定路径(默认当前路径)下查找指定的文件,如下find /home/xiaoming/test/ hello.txt
这个命令会帮你在
/home/xiaoming/test/
下查找名称为hello.txt
的文件,这个命令的参数和用法很多,搭配通配符有很强大的效果,但是作者使用频率不高,你只需要知道这个命令即可
三、总结本章的常用指令(基础且重要)
-
cd {path}
,change directory
的缩写,切换目录 -
ls
,list
的缩写,列出内容 -
mkdir {dir_name}
,make directory
的缩写,创建目录 -
touch {file_name}
,创建新文件 -
cp
,copy
的缩写,复制文件或目录(复制目录需要-r
参数) -
mv
,move
的缩写,移动文件或目录,或者给文件或目录改名 -
vim
,调用一个编辑器命令 -
nano
,也是调用一个编辑器的命令 -
pwd
,查看当前目录的路径 -
find
,查找相关内容
以上是对本章的重要指令的概括,这些是探索 Linux 最基本的命令,如果出现遗忘,可以直接百度用法,或者问AI