一.文件与目录的基础操作

  下面我来对相关知识和历史进行补充:

    在 Linux 这种多用户、多任务操作系统中,为了实现对用户权限的精准管控和资源访问的有序管理,系统引入了 UID(User Identifier,用户标识号)和 GID(Group Identifier,组标识号)这两个核心概念,它们本质上是系统内部用于区分不同用户、不同用户组的数字编号,是 Linux 权限机制得以正常运行的 “底层身份证”,系统在处理用户操作、文件访问等请求时,并非依赖易于记忆的用户名或组名,而是通过这两个数字标识来确认身份并匹配对应的权限。
        UID 是 Linux 系统为每个创建的用户分配的唯一非负整数,其核心作用是让系统能够准确识别不同用户身份 —— 即便存在用户名重复的情况(实际 Linux 系统不允许创建用户名相同的用户),只要 UID 不同,系统就会将其视为两个完全独立的用户,赋予不同的权限和资源访问范围。在 UID 的分配规则中,不同数值范围对应不同类型的用户,有着明确的功能划分:其中 UID 为 0 的用户是超级用户(即 root 用户),拥有系统的最高权限,能够执行任何操作,包括修改系统核心配置、删除任意文件、管理其他用户等,是系统管理员进行维护操作的关键账户;UID 范围在 1~999 之间的是系统用户(也称为伪用户),这类用户并非为实际登录使用而创建,而是系统自身运行某些服务或程序时所需的 “虚拟账户”,比如运行 Web 服务的 apache 用户、运行数据库服务的 mysql 用户,它们的存在是为了确保服务进程在特定权限范围内运行,避免因使用 root 权限而带来的安全风险;UID 范围在 1000 及以上的则是普通用户,这类用户是为实际使用系统的人员创建的,其权限受到严格限制,只能在自己的家目录(如 /home/ 用户名)下执行大部分操作,若要访问其他用户的文件或系统级目录,需要获得相应的权限授权。
        GID 则是 Linux 系统为每个用户组分配的唯一非负整数,其核心作用是实现 “用户组级别的权限管理”—— 通过将多个用户归为同一个用户组,系统可以一次性为该组内所有用户分配相同的权限,无需对每个用户单独设置,极大简化了多用户场景下的权限管理操作。与 UID 类似,GID 也有明确的数值范围划分:GID 为 0 的用户组是 root 组,该组内的用户通常拥有较高的系统权限,与 root 用户的权限体系紧密关联;GID 范围在 1~999 之间的是系统组,这类组主要用于与系统用户(伪用户)配套,确保系统服务或程序在运行时能够通过组权限访问所需资源,比如 apache 用户对应的 apache 组、mysql 用户对应的 mysql 组,其作用是进一步限制服务进程的访问范围,提升系统安全性;GID 范围在 1000 及以上的是普通用户组,这类组通常是为了管理普通用户而创建,比如可以创建一个 “开发组”(dev),将所有开发人员加入该组,然后为该组分配项目目录的访问权限,使得组内所有成员都能协同操作项目文件,同时避免非组内用户访问这些资源。
        在 Linux 系统中,每个用户都有一个 “主组”(初始组)和可以有多个 “附加组”(补充组):主组是用户创建时默认分配的组,通常与用户名同名,用户的所有新创建文件(如通过 touch 指令创建的文件)默认会归属到主组;附加组则是用户后续被加入的其他组,用户可以通过附加组获得该组所拥有的额外权限。例如,用户 user1 的主组是 user1(GID 1001),同时被加入到 dev 组(GID 1005),那么 user1 不仅拥有主组 user1 的权限,还拥有 dev 组的权限,能够访问 dev 组有权限的文件或目录。
        通过 UID 和 GID,Linux 系统构建了一套清晰、高效的权限管理体系:当用户执行某个操作(如读取文件、修改目录)时,系统首先通过 UID 确认用户身份,再通过 GID 确认用户所属的用户组,然后根据文件或目录自身的权限设置(如 r 读、w 写、x 执行权限,分别对应所有者、所属组、其他用户三个层级),判断该用户是否有权执行该操作,最终实现对资源访问的严格控制,保障系统的安全性和稳定性。

-F 在每个文件名后附加上一个字符以说明该文件的类型,“*”表示可执行的普通文件“/”表示普通的文件“@”表示的是符号链接,“|”表示FLFOs“=”表示套接字

-r对目录进行反向排序

-t以时间排序

-s能够以|文件名后输出该文件的大小

-R能够列出所有子目录下的文件

-1 便是一行只输出一个文件

[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ ls -a
. .. dir file.txt
[whb@bite-alicloud test]$ ls -a -l
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 .
drwx------ 22 whb whb 4096 Jan 11 14:21 ..
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -a -l -F
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 ./
drwx------ 22 whb whb 4096 Jan 11 14:21 ../
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -alFn
total 12
drwxrwxr-x 3 1003 1003 4096 Jan 11 15:01 ./
drwx------ 22 1003 1003 4096 Jan 11 14:21 ../
drwxrwxr-x 2 1003 1003 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 1003 1003 0 Jan 11 14:22 file.txt

2.pwd指令

  用于定位当前工作空间。显示用户的当前所在目录

3.cd :目录导航

        在 Linux 系统中,磁盘上的文件和目录被组织成一棵目录树,这棵树中的每个节点要么是目录,要么是文件。其中,普通文件一定是这棵目录树的叶子节点,而目录则有所不同,它既可能是叶子节点(也就是空目录),也可能是树中的路径节点。我们需要理解路径存在的意义,这种树状的组织方式,本质上都是为了保证能够快速定位并查找到指定的文件,而要准确定位文件,就必须有一种具备唯一性的方案。在这棵目录树中,任何一个节点都只有一个父节点,所以从根目录开始去定位指定文件时,所形成的路径就具有了唯一性,这也是路径能够精准定位文件的核心原因。
        在 Linux 的路径体系中,主要分为绝对路径和相对路径两种。绝对路径通常从根目录 “/” 开始,它不依赖于用户当前所处的目录,能够直接定位到目标文件;而相对路径则是相对于当前用户所在的目录来定位文件的路径方式。从使用场景和特性来看,绝对路径的优势在于其唯一性不会随着用户当前目录的变化而改变,因此在特定服务的配置文件中经常会使用绝对路径,以确保配置指向的文件始终准确无误;相对路径则因为使用起来更加便捷,不需要输入完整的路径信息,所以在命令行操作中被广泛使用,能有效提升用户在命令行下的操作效率。

基本操作是:

# 返回上级⽬录
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home

# 绝对路径定位⽬录或者⽂件
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test

# 相对路径定位⽬录或者⽂件
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp

# 每⼀次新建⼀个⽤⼾都会在/home⽬录下为新⽤⼾创建新的⼯作⽬录,⽬录以新⽤⼾名称命名
# root⽤⼾在安装操作系统的时候,就已经内置了⼯作⽬录: /root
[whb@bite-alicloud temp]$ ls /home# 返回上级⽬录
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home

# 绝对路径定位⽬录或者⽂件
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test

# 相对路径定位⽬录或者⽂件
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp

# 每⼀次新建⼀个⽤⼾都会在/home⽬录下为新⽤⼾创建新的⼯作⽬录,⽬录以新⽤⼾名称命名
# root⽤⼾在安装操作系统的时候,就已经内置了⼯作⽬录: /root
[whb@bite-alicloud temp]$ ls /home
bss gaobo luojie whb wudu

# 快速进⼊⾃⼰的家⽬录
[whb@bite-alicloud test]$ whoami
whb
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ~
[whb@bite-alicloud ~]$ pwd
/home/whb

# 返回到最近访问⽬录
[whb@bite-alicloud ~]$ pwd # 当前在/home/whb⽬录下
/home/whb
[whb@bite-alicloud ~]$ cd / # 进⼊/⽬录
[whb@bite-alicloud /]$ pwd
/ [
whb@bite-alicloud /]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/home/whb
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/
/ [
whb@bite-alicloud /]$ pwd
/ [
whb@bite-alicloud /]$ cd - # 同上
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb

二。文件与目录的创建

Linux 系统的文件类型并非仅通过文件名后缀区分,而是有内在标识机制,可通过ls -l命令查看文件类型信息。
普通文件:最常见的文件类型,用于存储文本、图像、程序等各类数据,在终端中以 “-” 符号开头标识。
目录文件:用于存放其他文件和子目录(类似文件夹),标识符号为 “d”。
字符设备文件:与硬件设备相关,以字符为单位进行数据传输(如键盘、鼠标等),标识为 “c”。
块设备文件:与硬件设备相关,以块为单位处理数据(如硬盘、U 盘等),标识为 “b”。
管道文件:主要用于进程间通信,分为匿名管道和命名管道,标识符号为 “p”。
套接字文件:用于网络通信中不同进程间的数据交换,标识为 “s”。
符号链接文件:也称软链接,类似 Windows 的快捷方式,用于指向另一个文件或目录,标识为 “l”。
每种文件类型都有特定用途和操作方式,了解这些类型对理解 Linux 文件组织结构和系统管理非常重要。

touch指令:

  touch命令的参数可以改变文档或者目期时间,包括存取时间和更改时间,或者创建一个更本不存在的文档

-a 只是改变进入时间

-c 只是改变登陆时间

三.我们来对一些指令进行介绍

1.ls指令

  ls是文件探索的起点, ls [选项] [⽬录或⽂件]可以实现请准信息提取。有以下常用的选项:

-a 列出目录的所有文件,其中包含以.开头的隐含文件

-b 能将目录像文件一样展示,ls-d 指定目录

-i 能输出文件i节点的索引信息。ls-ai来指定文件

-k 能以k字节的形式表示文件的大小

-l 能够列出文件的详细信息

-n 能够列出数字的UID GID 名称来代替

2.pwd指令

用来显示用户当前所在的目录

3.cd指令

我们先来对路径进行一些认识

  树状组织方式,是为了快速查找到我们所需要的文件。对于其中的任何一个文件,都只有一个父节点,也就能够保证了路径的唯一性。

  绝对路径:  一般从/开始,不依赖来其他文件的定位位置

  相对路径: 相对于当前用户所处的目录,定位文件的路径方式

  绝对路径不会因为用户的路径变化而丧失他的唯一性,相对路径则有他的便利性,在一般的命令

的命令中使用较多。

  而cd指令的作用是改变工作目录。

4.touch指令

  可以更改文档或者目录的日期和时间,包括存取时间和更改时间,或者建立一个根本不存在的文件。

  -a:只改变进入时间

  -c:该变更改的时间 

5.mkdir指令

  在当前文件下创建一个目录

  -p:可以是一个路径名称,在这个路径中,如果有一些文件不存在,系统将自动创建。

  这样我们就可以用tree来看内容

6.rmdir指令

  这个指令与上一个指令为相反的指令删除命令

  创建的目录变删除了。

7.rm指令

  可以用来删除文件或者目录

8.man指令                 

  对一些指令进行功能的查找                                                                  这是对内容进性补充。

  9.cp指令

用来复制文件或者目录

-f: 强行复制文件或者目录

-i:覆盖之前的询问用户

-r:进行递归处理

10.mv指令

作用是移动文件或者将文件名进行更改

-f:是强制执行

-i:进行覆盖的意思

11.cat指令

查看目标文件的内容

-b:对非空输出行进行编号

-n:对所有输出行进行编号

-s:不输出多行空行

12.more指令‘

-n:输出指定行

q退出more

13.less指令

可以随意的浏览文件,more只能向前看,而less可以双向

-i:搜索时忽略大小写

-N:显示每行的行号

14.head指令

用来显示文件开头处的文字区块

15.tail指令

从指定位置将文件写入标准流。

-f:循环读取

-n<行数>显示行数

16.date指令

date+%Y:%m:%d

具体如图:

17 cal:指令

用来显示日历,

-3:显示前一个月当月和下一个月的

-j: 显示当年中的第几天

-y:显示当年月份的日历

18.fing指令

搜索文件,并进行指定的文件

-name 加文件名

查找文件名

19.which指令

搜索系统指定的命令

20.whereis指令

用于找到程序的源、二头文件或手册

21.alias指令

设置命令的别名

22.grep指令

搜索字符串,将找到的行打印出来

-i:忽略大小写的不同

-n:输出行号

-v:反向选择,显示没有改内容的一行

23.zip/unzip文件

将目录或者文件进行压缩

-r:递归处理

24.tar指令

打包或者解开

1. 最常见

.tar.gz / .tgz

bash

运行

tar -zxvf 文件名.tar.gz

.tar.bz2

bash

运行

tar -jxvf 文件名.tar.bz2

.tar.xz

bash

运行

tar -Jxvf 文件名.tar.xz

2. 普通压缩包

.zip

bash

运行

unzip 文件名.zip

.rar

bash

运行

unrar x 文件名.rar

3. 单个压缩文件

.gz

bash

运行

gzip -d 文件名.gz
# 或
gunzip 文件名.gz

.bz2

bash

运行

bzip2 -d 文件名.bz2

.xz

bash

运行

xz -d 文件名.xz

4. 通用万能写法

现在 tar 基本能自动识别,直接:

bash

运行

tar -xvf 文件名

.tar.gz/.bz2 /.xz 都能解压。

  最后我对shell的原理进行自己的简单总结:(希望有所启发)Shell 就是一个负责 “翻译 + 调度” 的程序,你敲命令 → 它解析 → 找程序 → 让内核跑 → 回显结果

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐