效果如图所示:
首先先问大家一个问题:在磁盘上建一个空文件,这个文件会占据磁盘的储存空间吗?
实践出真知,我们发现新建一个文本文档,它的大小是0kB,这时有小伙伴就会认为既然它的大小是0KB,那么它当然也就不会占用磁盘空间咯。然而真的是这样吗?
我们打开这个文件的属性来一探究竟:
我们发现系统不仅记录了这个空文件的大小,同时还有它的文件名、文件类型、所在位置、创建时间等信息,难道这些信息不要占用系统空间吗,当然要!
因此我们可以得出结论:
ls -l
可以写成ll
,两个命令完全等效.
命名ls -l -a
, ls -la
, ls -al
, 四种写法完全等效如图所示:
根据上图,我们可以得出以下结论:
“叶子节点”一定是一个空目录或者一个普通文件
“非叶子节点”一定是一个非空目录
从一个目录到另一个目录,其路径具有唯一性
路径的本质就是这颗多叉树的搜索路径
而路径又分为绝对路径和相对路径:
绝对路径是从文件系统的根目录(/)开始指定文件或目录的路径。
它提供了完整的路径信息,不依赖于当前工作目录。
例如,/home/user/documents/file.txt
是一个绝对路径,可以精确地找到文件 file.txt。
.
表示当前目录,符号..
表示上一级目录(父目录)/home/user/documents/
,那么file.txt
就是一个相对路径,表示文件 file.txt 位于当前工作目录下。cd 路径(绝对路径或者相对路径)
进入路径对应的目录cd
的特殊用法:cd -
或者cd ~
表示回到最近一次所在目录,cd -
同时会显示出回退到的目录名称,而cd ~
不会
touch 文件名
用来新建一个文件mkdir 目录名
用来在当前目录下新建一个目录mkdir -p 路径
,用来在当前目录下递归建立目录mkdir dirname1 dirname2 ...
,表示同时建立多个同级空目录mdir
相对,rmdir 目录名
用来删除对应的目录rmdir
只能删除空目录,当目录中存在目录或者其他文件时,就不能删除rmdir -p 目录名
,如果子目录被删除后,父目录为空,那么就递归删除父目录rm -f -i -r 文件/目录名
,用于删除目录或者文件*
常用作通配符,代表该目录底下的所有目录和文件(不包含隐藏文件),因此,如果我们要删除prac.1
目录里的所有目录和文件,可以使用指令rm -rf prac.1/*
root
账号删除文件或目录时,只要不加-f
,系统都会先询问再删除,如果是普通账号,如果不加-i
,系统就不会询问。
-r
,只有带上这个才可以删除目录,用于删除该目录及其以下的所有文件和子目录
-i
,删除前逐一询问确认
-f
, 加上后,不要确认,直接删除
man 指令
,用来查看该指令的操作手册如,输入man ls
,就会得到如下信息:
man man
查看man
的操作手册用man
查找命令的操作手册时,应注意以下细节:
1-9
的顺序,进行顺序查找,找到结果便显示相应的信息cp 文件名 路径
,表示将文件拷贝到该路径底下
rm
一样,加上指令-r
即可cp 文件名 新文件名
*
,来拷贝目录里的所有内容(隐藏文件除外),而不拷贝目录本身mv src(目标文件/目录) dst(目的地)
,用来剪切目录或者文件
cp
一样,也可以在剪切的过程中对目录或者文件重命名*
,剪切目录里的内容而不剪切目录本身。mv
指令来实现对文件或目录的重命名:如果dst(目的地)
是一个不存在的目录,那么src(目标文件/目录)
的名字就会被修改为dst
的名字nano是一种文本编辑器,我们可以用命令**nano fileName
在Linux中编辑文本**
我们可以向文件中写入内容,自然也可以用某种命令来查看文件的内容。
cat -n/-s/-b fileName
,用于查看文件的内容。
-n
,显示文件的内容同时显示行号-s
,不输出多行空行(当连续多行空行时,只输出一行空行)-b
,不输出空行行号tac fileName
,用于将文件的内容逆向打印输出
实际上,cat
也可以读取键盘的内容,并打印到显示器文件上:
而要改变cat
的读入源,就可以使用输入重定向<
来实现:cat < fileName
这时有些小伙伴就有疑问了,cat < fileName
的功能和cat fileName
都是查看文件的内容,这二者有什么区别吗?
区别:
cat < filename
和cat filename
是两种不同的方式来使用cat
命令查看文件内容,它们之间有一些区别:
cat filename
:
- 此命令将
cat
命令与文件名filename
直接结合在一起。cat
命令会尝试打开名为filename
的文件,并将其内容显示在终端上。- 这种用法将文件名作为命令行参数传递给
cat
命令。
cat < filename
:
- 此命令使用了输入重定向符号
<
,它将文件filename
的内容重定向为cat
命令的输入。cat
命令不会直接指定要打开的文件名,而是等待从标准输入中读取内容,然后显示在终端上。- 这种用法将文件内容传递给
cat
命令的标准输入。总的来说,两者的效果是相似的,都可以用来查看文件的内容。但使用
<
的方式可以用于将文件内容重定向到其他命令的输入,而cat filename
只是将文件内容直接显示在终端上。
首先我们需要认识一点:
**大部分的硬件设备,都可以看做有读写方法,只不过有些方法可以为空。**例如对于屏幕,我们可以向屏幕进行写操作,但是不能进行读操作;对于键盘,我们可以进行读操作,但是不能进行写操作。
而对于文件,我们也有读写操作。因此我们可以将屏幕、键盘等硬件设备也看做文件。
Linux下,一切皆文件——减少Linux系统的编码维护成本
echo 字符串
,默认将字符串内容写到屏幕显示器文件(自动换行)
例如:
如果我们想向一个指定的文件里写入一段字符串,那我们就可以使用输出重定向>
来实现
>
向文件中输出内容时,都会将原来的内容清空。> NewFileName
那么如何利用echo
,向文件原来的内容新增数据,而不删除原来的内容呢?
这时,我们就要用追加重定向>>
来实现:
应该清楚如果我们要查看一个有着上千上万行数据的文件,用cat filename
就会出现刷屏的现象:
那么,我们可不可以让它先只填充屏幕,然后利用键盘的⬆
、⬇
键,来实现逐条的显示呢?
这时,我们就要用我们的指令:less
:
同时,在通过less
查看文件的过程中,可以利用/ 查找对象
来快速定位对象所在的位置:
head/tail -num filename
用来查看文件的前num
行或者后num
行
可以直接用date
指令查看当前时间:
如果觉得这样显示的时间不太直观,也可以指定具体的格式:
%H
:展示具体小时(24小时制)%M
:展示具体分钟%S
:展示具体秒数%X
:相当于%H:%M:%S
。(这里的小时是10小时制)%Y
:展示年份%m
:展示月份%d
:展示日期%F
:相当于%Y-%m-%d
%s
:展示当前时间戳(s为小写)
注:如果要指定格式,相应的指令为date +option
,同时,我们时分秒之间需用:
连接,年月日需用_
连接至于时分秒和年月日之间的连接符,没有具体要求,如:
关于时间戳:
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数
我们可以用date +%s
来查看当前时间戳:
也可以用指令:date -d@时间戳
,将时间戳转换为对应的时刻:
命令cal
可以查看当时所在年份的月份的日历和当日所在的日期:
也可以指定年份,查看全年日历:cal year
find
是一个强大的 Linux/Unix 命令行工具,用于在文件系统中查找文件和目录。find
涉及的操作选项有很多,且大多数都值得我们学习,但作为一个简单的Linux常用指令合集,我们这里只介绍一种关于fand
的指令:
find pathname -name filename
:该命令用于在指定目录下查找含有该名字的文件。
其中:
pathname
是希望在其中查找文件的起始目录的路径。
-name
是是 find
命令的选项,用于指定要匹配的文件名
filename
就是要查找的文件名
例如:
需要注意:尽管find
指令的功能十分强大,但是仍存在许多缺陷:
- 性能开销:
find
可能会消耗大量系统资源,特别是在大型文件系统上执行深度搜索时。这可能导致命令运行时间较长,尤其是在慢速存储设备上。- 递归搜索: 默认情况下,
find
会递归搜索指定的目录及其子目录,这可能导致搜索结果变得非常庞大。必须小心以避免搜索整个文件系统。- 速度: 在某些情况下,
find
可能不如专门为文件搜索优化的工具(如locate
或grep
)快速,特别是在搜索文件内容时。
which
指令用于查找命令所在的路径,例如:
在系统中查找安装过的文档、手册、库等。例如:
grep
被称为文本行过滤工具,它可以从一个文件总快速筛选出我们所需要的信息。
其指令格式为:
grep -option string filename
其中option
包括:
-i
:筛选时忽略字母的大小写
-n
:展示信息时显示展示内容所在文件的第几行
-v
:反向展示。即将不包含所需内容的信息展示出来。
例如:
我们创建一个文件code
,其内容为:
下面展示效果:
sort filename
,用于按照字典顺序,以文件的行为单位,对文件进行排序。
字典顺序:
在字典顺序中,排序是按照字符的出现顺序进行的,从左到右逐个字符进行比较。首先比较第一个字符,如果它们不相等,则根据其ASCII值确定它们的相对位置。如果第一个字符相同,则继续比较下一个字符,以此类推,直到找到差异或到达字符串的末尾
例如:
uniq -option filename
用于删除文件中的相邻重复行
例如:
我们发现确实将文件的相邻重复内容给删除了,但总感觉这样做的还不够,有没有什么办法可以将文件中所有的重复项删除呢?
当然有,我们可以将sort
指令和uniq
指令结合起来:
其中,符号|
称为管道
竖线符号
|
用于将两个或多个命令连接在一起,以创建一个称为管道(pipe)的特殊通信机制。通过管道,命令的输出可以直接成为另一个命令的输入,从而实现数据流的传递和处理
此外,option可以是:
-i
:展示文件中的相邻重复项
-c
:展示重复项出现的次数
打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的。
压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间。
将大文件或者目录压缩之后再进行传输可以大大提高网络传输时的效率,节省时间
下面介绍两种Linux打包压缩的方法:
注:为了能够演示打包压缩的过程,我们先创建一个较大的目录,该目录的树形结构如图所示:
要用这两个指令,首先要确保自己的Linux系统中安装了zip
,可以用下面的指令进行安装:
yum install -y zip
基本语法:
zip 压缩包名.zip 被压缩的目录或文件
unzip 压缩包名
需要注意,由于zip
命令不会默认打包目录和目录底下的文件和子目录,例如:
要解决这个问题,我们通常要再加入一个选项:-r
表示递归处理,将该目录底下的所有文件和子目录一并处理。
例如,要使上面的演示得到正确结果,要将压缩指令改为:
zip -r prac.zip prac.10.14
如果在解压缩时要改变解压文件的路径,可以加上选项-d
,后面加上路径。例如:
unzip prac.zip -d /root/test_1
就是将解压缩后的目录放在新的路径/root/test_1
下。
tar
命令也可以用来打包压缩文件。其基本语法为:
tar option 压缩名.tgz src_dir
tar
命令的option选项有很多种,但作为一个简单的Linux入门指令教程,这里仅展示一个最常用的组合:
一般来说,压缩文件时可以这样写:
tar -czf prac.tgz prac.10.14
其中:
-c
表示创建一个新的压缩包-z
表示具有zip
属性,即在打包的同时进行压缩-f
表示可以重新定义压缩包的名字,而不用原来的而解压缩时,一般用指令:
tar -xzf prac.tgz
-x
就表示解包-z
就表示解压-f
就表示要解压缩那个目录解压缩时,解压好的目录默认放到原路径,如果要指定解压路径,就要加上选项-C
(注意C
是大写)。例如:
tar -xzf prac.tgz -C /root //将解压好的目录放在root下
补充:
还有一个选项较为常用:
-v
:这个选项在压缩和解压时都可用,它可以在解压缩的过程中显示被解压缩的内容。unmae -a
:用于查看当前系统的详细信息。例如:
uname -r
:用于查看计算机软硬件的体系结构。例如:
语法:
shutdown -option
常见的option选项包括:
-h
:立即关机-r
:立即重启。也可以使用reboot
指令直接进行重启-t
:后面加描述,表示多少秒之后关机本篇完。