讲指令之前,我们先来了解一下文件,比如我们新建了一个空白文件,然后显示这个文件的大小是0KB,那么问题来了,既然是0KB,他会占据磁盘空间吗?答案是会,因为虽然显示大小是0KB,但 文件=内容+属性 ,新建的文件,没有内容,自然大小是0,但是属性的大小不是0,而属性包括文件的创建时间、修改时间、文件类型、打开方式、文件名称等,这些属性数据就该在磁盘占据空间。
而我们学习指令,其实也是为了对文件进行操作,要么是对内容进行操作,要么是对属性进行操作。在Linux中我们习惯用目录代替文件,即目录==文件
1.ls指令
语法: ls [选项] [⽬录或⽂件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。
常⽤选项:
• -a列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。
• -d将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。如:ls‒d指定⽬录
• -i输出⽂件的i节点的索引信息。如ls‒ai指定⽂件
• -k以k字节的形式表⽰⽂件的⼤⼩。ls‒alk指定⽂件
• -l列出⽂件的详细信息• -n⽤数字的UID,GID代替名称。(介绍UID,GID)
• -F在每个⽂件名后附上⼀个字符以说明该⽂件的类型,“*”表⽰可执⾏的普通⽂件;“/”表⽰⽬录;“@”表⽰符号链接;“|”表⽰FIFOs;“=”表⽰套接字(sockets)。(⽬录类型识别)
• -r对⽬录反向排序
• -t以时间排序
• -s在l⽂件名后输出该⽂件的⼤⼩。(⼤⼩排序,如何找到⽬录下最⼤的⽂件)
• -R列出所有⼦⽬录下的⽂件。(递归)
• -1⼀⾏只输出⼀个⽂件。
1.1 ls
ls指令用于显示文件的属性,后面可以跟上-选项,如果只有ls,则只显示当前目录下的所有非隐藏文件的文件名。
比如我现在在root目录下,使用ls指令后发现有3个文件,分别是lesson2、lesson2_backup、world.txt,这三个是我自己提前创建好的,用于演示。
1.1 ls -a
如果只有ls,则只显示当前目录下的所有非隐藏文件的文件名,如果加上-a选项,则会显示当前目录下的所有文件的文件名,即包括隐藏文件。
什么是隐藏文件?拿windows举例,我们创建一个文件夹后,我们发现里面什么都没有,但是如果你按照一下操作后就可以看见文件夹中其实是有隐藏文件的。在Linux中目录也同样有隐藏文件。
如下:我们发现了很多隐藏文件,如果我们仔细观察,我们可以从中发现规律,我们发现这些隐藏文件的前面都加上了符号:” . “ 所以说,如果一个文件是以点开头的,则它是一个隐藏文件。
然后我们也可以看见这其中有两个比较特殊的隐藏文件,就是下图圈出来的两个,我们发现他们分别是一个点和两个点,我们可以把它们理解成是两个指针,一个点的指针指向当前目录,两个点的指针直线当前目录的父目录,即上一个目录。
这两个隐藏文件我们等下会用到,现在先了解一下。
1.3 ls -l
-l选项可以显示更详细的文件属性
如下,我们可以看到更加详细的文件属性,有文件名、文件最后一次的修改时间、文件大小、文件类型(d开头的是目录、-开头的是普通文件,如txt、.c文件)
1.4 ll
1.4.1 绝对路径和相对路径
- 绝对路径
定义:从根目录(/)出发,完整描述文件 / 目录位置的路径。
例:/root/lesson2_backup/lesson2/test.c(明确指向 root 家目录下的文件)
以windows举例,每一个文件存放的位置都是唯一的,我们通过路径找到,下图就是windows的绝对路径,
windows:\是路径分隔符
Linux:/是路径分隔符
分隔符后跟的是文件名,如果一个文件在两个分隔符之间,那这个文件时目录。如果这个文件在最后,那他可能是目录,也可能是普通文件。
- 相对路径
定义:以当前工作目录为起点,简化表示文件 / 目录位置的路径。
例:当前在 ~(/root)目录时,lesson2_backup/lesson2/test.c 即相对路径(等价于 ./lesson2_backup/lesson2/test.c ,./ 可省略)。
若在 ~/lesson2_backup 目录,lesson2/test.c 就是相对路径(上级目录用 … 表示,如 …/lesson2/test.c 可跨级定位)。 - 区别:绝对路径从家目录开始找,路径写法较长。相对路径从当前目录开始找,路径写法较简洁。
1.4.2 指令真实内涵
指令其实就是一个可执行程序,而这个可执行程序放在某个路径下,我们使用指令其实就是进入了这个路径,我们可以使用which指令查看放在哪个路径。
如下我们看见指令都是存放在bin目录里的。
1.4.3 alias
alias指令我们可以理解为是用来取别名的,如下,我们看见ls其实是路径/usr/bin/ls的别名,所以我们使用ls指令就是进入了这个路径,而这个路径里的是可执行程序。
然后我们发现,ll是ls -l的别名,那是不是意味着这两个指令的执行的是同一个操作,是的。可能是开发者为了简写,所以用ll也可以表示ls -l
1.5 ls -d
-d选项可以将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件
如下图,前面我们说过,一个点表示当前目录,所以我们使用-d选项后只显示了当前目录的目录名,不显示其下文件。
1.6多选项使用
如果我们即想要显示隐藏文件,又想要文件的详细属性,那该怎么操作?
我们可以这样子使用:ls -a -l,也可以:ls -l -a,也可以:ls -al,还可以ls -la
也就是说-后面可以跟多个选项,顺序也可以不关心,我们甚至可以:ls -ald
1.7stat 指令
stat用于查看文件更加详细的属性。
2.pwd指令
pwd即process working directory,该指令用于查看当前进程工作在哪个路径下。
3.cd指令
Linux理论知识:路径的认识
• Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件
• 其中普通⽂件⼀定是⽬录树的叶⼦节点
• ⽬录可能是叶⼦(空⽬录),也可能是路上节点
• 理解路径存在的意义:树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就需要具有唯⼀性的⽅案来进⾏定位⽂件。其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬录开始,定位指定⽂件,路径具有唯⼀性
• 绝对路径:⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式
• 相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式
• 绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤
• 相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多
语法:cd ⽬录名
功能:改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下
cd即change directory,用于改变所处目录
如下是使用相对路径进行改变所处目录。
想使用绝对路径可以参考:cd /root/lesson2
3.1 cd ~
cd ~用于返回家目录
家目录即一开始登录所处的路径,如下:普通用户的家目录是/home/wsj,超级用户的家目录是/root
如果还是不理解,我们拿windows举例,我们发现每次我们打开电脑,桌面上就有了那些软件,那是因为桌面其实是个文件夹,我们登录了一个账号后,会进入C盘->用户->账号->桌面,然后桌面这个文件夹里就是我们桌面上的那些软件的图标,这个路径就是我们windows用户登录时的家目录了。只不过windows将其使用图标可视化了。
3.2vim指令
vim指令用于进入.c文件,想要退出.c文件的话,按Esc+Shift+z+z,即Esc+两次大写Z
3.3nano指令
nano指令用于进入txt文件,想要退出txt文件的话,按Ctrl+x
如果使用nano指令提示找不到该指令,需要安装,安装指令如下:
CentOS系统:yum install -y nano
Ubuntu系统:apt install -y nano
4.touch指令
Linux理论知识:⽂件类型的认识
语法: touch [选项]… ⽂件…
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。
touch指令用于创建普通文件,而并非目录,如下,我们可以一次创建一个普通文件,也可以一次创建多个普通文件,那些蓝色的文件是目录,我们使用touch创建的普通文件不是蓝色的。
5.mkdir指令
语法: mkdir [选项] dirname…
功能:在当前⽬录下创建⼀个名为“dirname”的⽬录
常⽤选项:
• -p/–parents:可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录
mkdir指令用于创建目录,如果加上-p选项,则可以创建一个路径。
5.1 tree指令
如上图我使用了tree指令,Linux的文件结果其实就是一颗从根目录开始的多叉树,每一个文件都是一个节点,我们可以使用tree指令查看从该节点开始的所有分支。
如果你使用tree指令的时候提示找不到该指令,那是因为没有安装,我们可以使用以下指令进行安装
CentOS系统:yum install -y tree
Ubuntu系统:apt install -y tree
5.1.1强制停止
因为系统中文件很多,如果我们不小心tree了根目录,即:tree /,他就会运行很久。或者我们运行了一个.c文件,但这个文件是死循环的,停不下来。这时候我们可以按Ctrl+C强制停止异常
6.rmdir指令及rm指令
6.1rmdir指令
rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除命令
语法: rmdir [-p] [dirName]
适⽤对象:具有当前⽬录操作权限的所有使⽤者
功能:删除空⽬录
常⽤选项:
• -p当⼦⽬录被删除后如果⽗⽬录也变成空⽬录的话,就连带⽗⽬录⼀起删除。
rmdir指令用于删除空目录,加上-p选项的话可以删除一段路径
6.2rm指令
rm命令可以同时删除⽂件或⽬录
语法: rm [-f-i-r-v] [dirName/dir]
适⽤对象:所有使⽤者
功能:删除⽂件或⽬录
常⽤选项:
• -f即使⽂件属性为只读(即写保护),亦直接删除
• -i删除前逐⼀询问确认
• -r删除⽬录及其下所有⽂件
rm指令既可以删除普通文件,也可以删除目录,如果不加选项的话默认只能删普通文件。
6.2.1通配符*
在 Linux 等类 Unix 系统的命令行操作中,* 是一个非常常用且功能强大的通配符(也叫文件名扩展符 ),主要用于匹配文件名、路径等,帮我们快速筛选和操作一批文件。
如下我们就可以删除当前目录下所有以txt结尾的文件。
6.2.2 rm -r
加上-r选项后,rm即可删除目录。
6.2.3 rm -f
rm -f 命令不会向用户进行任何删除确认,它会直接强制删除指定的文件或目录(删除目录需配合 -r 选项,即rm -rf)
6.3 rm -rf /*危险操作
在 Linux 中,rm -rf /* 是一个极其危险且具有毁灭性的命令,其作用是递归强制删除根目录(/)下的所有文件和目录,包括系统运行所必需的核心文件。切记不可使用。
7.man指令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助
语法:man [选项] 命令
常⽤选项
• -k根据关键字搜索联机帮助
• num只在第num章节查找
• -a将所有章节的都显⽰出来,⽐如man printf它缺省从第⼀章开始搜索,知道就停⽌,⽤a选
项,当按下q退出,他会继续往后⾯搜索,直到所有章节都搜索完毕
解释⼀下:man⼿册分为9章(不同系统可能会有差别)
• 1是普通的命令
• 2是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么
头⽂件)
• 3是库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
• 4略
• 5是指⽂件的格式,⽐如passwd,就会说明这个⽂件中各个字段的含义
• 6是给游戏留的,由各个游戏⾃⼰定义
• 7是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明
• 8是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig
• 9略
man指令是查看用户手册,默认查的是第一章的用户手册,可以查看指令的作用等,man 3加上 函数名可以查看相关函数,按q可以退出用户手册
如果提示找不到man指令,需要自己装,指令如下:
CentOS系统:yum install -y man -pages
Ubuntu系统:apt install -y man -pages
8.cp指令
语法: cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:复制⽂件或⽬录
说明:
• cp指令⽤于复制⽂件或⽬录
• 如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中
常⽤选项
• -f或–force强⾏复制⽂件或⽬录,不论⽬的⽂件或⽬录是否已经存在
• -i或–interactive覆盖⽂件之前先询问⽤⼾
• -r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号链接,则⼀律视为普通⽂件处理
cp指令用于复制源文件到目标文件
8.1目标文件不存在
当目标路径不存在时,cp会直接将源文件复制到目标路径,命名为指定的文件名。
8.2目标文件存在
在 Linux 中使用cp -rf复制文件时,若目标文件 / 目录已存在,会强制递归覆盖且不提示确认,需警惕数据丢失风险。