Linux 入门指南:从零掌握基础文件与目录操作命令
目录
- 前言
- 一、Linux下基本指令
- 1.1 ls指令
- 1.2 pwd和cd命令
- 1.2.1 pwd指令
- 1.2.2 cd命令
- 1.3 touch指令
- 1.4 mkdir指令
- 1.5 tree指令
- 1.6 rmdir指令&&rm指令
- 1.6.1 rmdir指令
- 1.6.2 rm命令
- 结语
前言
大家好啊,我是云泽Q,一名热爱计算机技术的在校大学生。近几年人工智能技术飞速发展,为了帮助大家更好地抓住这波浪潮,在开始正文之前,我想先为大家推荐一个非常优质的人工智能学习网站)。它提供了从基础到前沿的系列课程和实战项目,非常适合想要系统入门和提升AI技术的朋友,相信能对你的学习之路有所帮助。
一、Linux下基本指令
指令是控制Linux系统的基本方法,这里快速演示几个指令,下面再细说
首先先说几个简单的命令:
clear
:清屏
pwd
:显示当前工作路径
ls
:查看当前路径下所有的文件
ls -l
:显示该文件更多的内容
mkdir+空格+文件名
:创建一个文件夹
cd+空格+文件名
:进入文件夹,cd类似于change directory,更改工作路径
cd+空格+..
:退出当前文件夹
1.1 ls指令
在理解这条指令之前,要先理解文件
如果在windows新建一个空文件,尽管属性大小为0字节,但仍然是占磁盘空间的。因为文件并不等同于文件内容。一个空文件仍然有文件名,文件创建时间,文件类型,文件大小。这些信息都是要记录到操作系统当中的
这一部分信息叫做文件的属性数据,也叫元信息,这些和文件里的信息一样,也是数据,是数据就要保存,也就是我们每次开机能看到这些属性信息的原因。
也就是说一个文件在磁盘上占据的空间包括文件的内容和文件的属性。
举个例子,C语言对文件的操作fopen打开文件之后,向文件里写,从文件里读,这就是在读写文件的内容。修改文件的读写位置,从开头、中间,结尾读,这就是修改文件读写位置的属性
ls可以理解为list,罗列的意思,ls的作用是罗列当前路径下的所有的文件详情(文件的属性)
只使用裸的ls命令,就只显示文件名
ls+空格+-xxx
,叫做选项,其可以使用指定命令的扩展功能
再说一下为什么在Linux操作系统下会存在路径
路径是具有唯一性的,路径存在的原因就是需要在诺大的硬盘中访问指定文件。在xshell中输入pwd
就会显示当前文件所在的路径,文件默认所处的路径,叫做当前路径
ls就是默认罗列出当前路径下的所有文件,ls也可以罗列出指定路径下的文件,方式就是ls+空格+指定路径
语法:ls[选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件(ls默认不显示隐藏文件)。对于文件,将列出文件名以及其他信息。
常用选项:
-
-a 列出目录下的所有文件(包括隐藏文件),可以把a当all记忆
如图,touch .hello
是在当前路径下创建一个文件.hello
和test.c
,cd yunze
是进入云泽这个文件,这些指令后面会讲,先结合来看
创建了.hello
直接ls是看不到.hello
的,此时ls -a
就能看到.hello
了
.hello
以.开头的文件在Linux中称为隐藏文件,.hello前面的.和…也是两个文件名,这两个文件名也是.开头,所以默认看不到。在windows中也有隐藏文件,不过并不一定是以.开头的文件,而是属性方面的设置
由于选项可以进行组合,所以上面可以显示隐藏文件并且显示更详细的文件属性信息 -
-d 将目录像文件一样显示,而不是显示其下的文件。如:
ls -d
指定目录 -
-i 输出文件的i节点的索引信息。如
ls -alk
指定文件 -
-k 以k字节的形式表示文件的大小。
ls -alk
指定文件 -
-l 列出文件的详细信息(root后依次是文件大小,文件时间,文件时间),等价于
ll
-
-n 用数字的UID,GID代替名称(介绍UID,GID)
-
-F 在每个文件名后附上一个字符以说明该文件的类型,“ * ”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
-
-r 对目录反向排序
-
-t 以时间排序
1.2 pwd和cd命令
1.2.1 pwd指令
语法:pwd
功能:显示用户当前所在的目录(路径)
常用选项:无
windows:D:\影刀\ShadowBot\installer --- 当前路径
Linux:/root/9_29_01
windows当中反斜杠为路径分割符,Linux路径下的路径分割符为斜杠
1.2.2 cd命令
可以看到在ls -al
可以看到在当前路径下,存在一个点和两个点非常奇怪的文件,这里先说两个点这个文件
这两个点是标识上级路径的,在windows中在这个路径下
想要返回上一级路径就要点左上角,而..
就相当于这个回退
这里就使用cd …回退到上级路径
语法:cd 目录名
功能:改变工作目录(路径切换)。将当前工作目录改变到指定的目录下
Linux下一直回退也是可以的,但是回退到一定程度,就不再允许回退了,就像windows当中一样
Linux最后就会处在一个/的路径下
这最后一个/称为Linux的根目录
/root/9_29_01
无论是在Linux还是在windows中,两个斜杠之间就是一个目录,斜杠本质上也是目录。
在Linux当中,组织管理所有的文件结构,统一使用的是树形结构来管理所有的文件的
windows当中,目录就是文件夹,文件夹里可以套文件夹,在Linux当中,把文件夹叫目录,目录也可以套目录。文件夹和目录的本质就相当于,文件夹本身,就是实现树形结构的最基础的一个功能
这种树形结构的叶子节点只有两种情况,一种就是普通文件(例如记事本),普通文件无法在内部新建各种其他文件。第二种就是目录(空文件夹)
树形结构除了叶子节点(要找的文件,如图中hello.txt),剩下的就都是路上节点(一定有左或者右孩子,或各种各样的其他结构),路上节点一定是一个目录
总结下来也就是因为有了树形结构,在定位文件的时候,就必然会有路径。
树形结构有一个特点,任意一个父节点(如bin)可以有多个孩子,但任意一个子节点(如hello.txt),只有一个父节点,这就是路径具有唯一性的原因
所以下面也可以根据路径找到对应文件
这种从根目录开始进行路径定位的路径叫做绝对路径,所有的操作系统的目录(文件夹)都是如此的树形结构
虽然Windows分D盘和C盘,或者你的电脑上装了很多硬盘。但是总的来说,在我看来,整个计算机当中,此电脑就可以看作是根目录,一台电脑上只有一块硬盘,这些C盘D盘叫做分区,C盘D盘可以当文件夹来看
这里说完了..
,再说一下.
,.
就代表当前路径
在这补充另一个作用,我们的在vs上写的源代码就是一个文件,当编译形成可执行程序的时候,就会在电脑当中形成一个.exe文件,exe文件是在磁盘上的,当双击的时候,这个文件会从磁盘加载到内存当中,随后运行起来。这一系列操作的前提是,要先找到这个文件,.
的作用就是要快速进行路径定位,如果这个可执行程序在一个非常深的路径之下,用绝对路径执行一个可执行程序就非常的麻烦
这句代码的意思是执行当前路径下的test.exe。这里.
表示的就是当前路径
这种不从根目录开始,以相对于当前位置开始的这种路径称之为相对路径
这是..
的另一种用法,ls .. -d
先不用看
这里..
就表示/root
,也就是这里找test.c
不用从根目录开始,而是从当前位置开始定位一个文件,这也称为相对路径
相对路径还有另外一种用法
综上,在Linux系统中
- 相对路径通常是用来进行命令行操作的
- 绝对路径传路径从根目录开始,不管在Linux系统中的任何目录下,访问任何一个子目录,使用绝对路径都是可以访问的,通常会在配置文件中使用,我后面会写
相对路径和绝对路径的本质是相对于根目录开始,相对路径的本质是从当前所处的路径作为路径参考点,然后访问系统指定任意路径。绝对路径也可以认为是一种特殊的相对路径
任何一个节点,都只有一个父节点,所以相对路径..
回退时,不管回退几次,这个路径是唯一的。所以相对路径具有多个,但是每一个相对路径也是具有唯一性的
./root/118/test.exe
,这是一个相对路径。当前目录是 /root
,因此 ./root/118/test.exe
会被解析为 /root/root/118/test.exe
。但 /root/root
目录不存在,所以报错。
cd /
,改变当前目录到根目录 /
,当前目录是根目录 /
,因此 ./root/118/test.exe
被解析为绝对路径 /root/118/test.exe
。文件存在,执行成功
再补充一个小指令whoami
,显示账号名,这里就用一个Linux路径的方式,表示指定的一个用户,在Linux系统当中的哪一个路径下
这里再介绍cd这个指令的一个特殊用法cd -
,这里的-
可以理解为当前用户上一次所处的路径,也可以理解为撤销上一次的cd
此指令的应用场景就是:在两个高频访问的目录下,进行快速切换
这里我再另外登陆一个普通账号,这里涉及多用户创建的内容,对此有疑问的可以看我的上一篇文章Linux内核探秘:从源代码获取到云环境多用户部署
这里把一个用户登陆进去的默认所处路径叫做当前用户的家目录,这里发现用root账号和普通账号刚登陆进去的默认所处路径不同
windows也是有家目录的概念的,windows下也可以创建很多个登陆用户(多用户操作系统),每个用户使用不同的账号登陆,桌面上的内容都是不同的(即每个用户都有一个桌面),在windows当中新建用户时,其实在C盘有一个叫用户的文件夹,用户文件夹就有一个公用文件夹和其他的东西,除公用外文件夹外有桌面上的快捷方式的文件夹名就是当前windows上登陆的用户名
C:\Users\23927
这个就是当前windows用户的家目录,也就是说当用户在进行登陆系统的时候,windows系统会直接拿着用户的用户名,在Users目录下找上面的路径,然后在路径中找到桌面文件夹,将桌面文件夹当中所有的快捷方式以图形化界面的方式显示在桌面上,所以用户就能看到桌面,而如果多用户的话,每一个账户都会有一个桌面的文件夹,所以大家看到的都不一样
而我们平时在浏览器上下载的内容,如果没有指定下载路径,就会默认下载到C盘当前对应的用户家目录的下载所对应的文件夹
所以家目录的本质就是要给Winodws/Linux加载桌面,下载软件提供当前用户的默认路径
超级用户也可以进入普通用户的家中,也可以再回去,这里就有一个快捷的指令了cd ~
cd ~
:当前用户的家目录
1.3 touch指令
想在操作系统磁盘上创建一个普通文件,就会使用touch
命令
语法:touch [选项]… 文件…
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件
这里再补充一个命令,如果想查看一个文件更详细的属性(如大小),就使用该命令stat+文件名
可以看到展示的文件信息中有三种时间,其中Modify time是文件最近被修改的时间
1.4 mkdir指令
语法:mkdir[选项]dirname…
功能:在当前目录下创建一个名为“dirname”的目录,可以理解为制作路径
区分touch
和mkdir
就可以将touch
理解为创建一个文本文件,新建文件夹就是mkdir
下面让我们区分一下Linux的文件类型,好让自己清楚新建的是一个普通文件还是一般文件呢
Windows当中要区分一个文件对应的文件类型是通过后缀名区分的
- Linux区分文件类型是不关心文件后缀的(并不代表不可以用)
- Linux通过文件的属性来区分文件类型
Linux中文件的属性是从第一列的第一个字母开始区分
- d开头:叫做目录,对应单词directory
- -:普通文件(可执行程序,文本文件,动静态库等等)
这里提前讲一个重命名的指令,计算机的这些内容就是前后连在一起的,想彻底讲清楚一个前面的点,后面的内容也要加进来辅助验证,但是不用纠结理解,懂意思就行
mv+文件名1+文件名2
:将文件名1改为文件名2
如图就将一个可执行程序改为C语言文件了
可以看到照样可以运行,也就是文件后缀是什么样子,Linux系统并不关心,而Windows会关心,但是Linux不用并不代表没用,可以让可读性更好
但是如果将test.c改名为test.txt,然后在Linux中使用gcc编译器就编译不通过了,这只能说明gcc!=Linux操作系统,Linux操作系统是不关心后缀的,但gcc这个命令是关心后缀的,gcc是个C语言编译器,其对后缀有要求
再回来说一下mkdir
,之前使用mkdir
一次只能创建一个文件夹,但是他还可以创建一串路径(mkdir -p a/b/c/d
)
1.5 tree指令
tree+路径名
就会把当前路径以树形结构的形式体现出来,也可以显示普通用户下的路径
这个tree命令
不是Linux自带的命令,如果你不能使用tree命令,就需要安装tree命令
如果你是在CentOs系统下的root账号
安装tree命令使用下面这串命令
yum install -y tree
如果是ubuntu系统下的root账号:
apt install -y tree
输入这串指令之后它就会加载查找下载安装对应的tree命令,因为我已经安装了tree命令,所以这里显示nothing to do
1.6 rmdir指令&&rm指令
1.6.1 rmdir指令
rmidr
是一个与mkdir
相对应的命令,mkdir
是建立目录,而rmdir
是删除命令
语法:rmdir [-p] [dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项:
- -p当子目录被删除后如果父目录也变为空目录的话,就连带父目录一起删除
可以发现,如果不是空目录的话是无法删除的
1.6.2 rm命令
语法:rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
-
-f即使文件属性为只读(即写保护),亦直接删除
-
-i删除前逐一询问确认(此命令通常是给普通用户用的)
只要你是root用户,无论是直接使用rm
删除还是使用rm -i
删除,操作系统都会提醒你是否要删除
但是作为普通用户就直接删除了
-
-r删除目录及其下所有文件
这里目录里面套了目录本质上是一个树形结构,所以目录本身就是一个子树。树形结构是递归式的建立的,删除时也要递归式的删除,进入最内层把里面的文件全删掉,然后回退删外面,删除就要用rm -r(递归单词的首字母) a
这样每次都要确定也很麻烦,所以使用rm -rf a
,f 叫做force,强制删除
最后扩展一个骚操作:
由于Linux整体是一棵多叉树树形结构,/
根目录也是目录,使用rm -rf /
,这样就把Linux操作系统从根目录开始全部删除了,如果你不小心把自己的Linux操作系统以这样的方式搞挂了,就要去云服务器重装系统了
有人就说了,这种低级的问题我怎么可能干呢,那还真不一定,如果是使用绝对路径来删除某个文件的时候,这样输入了指令rm -rf / home/yunze
,多加了一个空格,/
就和前面的rm -rf
相结合,就把操作系统直接干掉了。
博主之前也是听闻有程序员就以这样的方式直接把公司Linux机器的根目录给干掉了
这样从根目录删除时,有时候操作系统不一定会挂掉,因为有些文件可能正在被操作系统使用,就像在Windows当中正在访问的文件是删不掉的,即使是root用户也不可以。但是由于是递归删除,它会把自己能删的全部删掉。而且相比操作系统挂掉,不挂掉最害怕,你并不知道具体删除了什么东西,可能在日后使用的时候突然掉链子,还是建议重装系统
由于Linux系统是没有回收站的,所以删了就是直接没了,所以要尤其注意
如果工作后你真的直接把公司的操作系统干掉了,如果这个Linux机器上还运行着各种网络服务和数据库代码,就需要向上面的领导汇报评估损失了,但是作为一个实习生和新人,这个锅也不能全背,公司也没有最好对应的权限管控,公司也有责任