系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
1.Linux介绍、目录结构、文件基本属性、Shell
2.Linux常用命令
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
本章内容有:
Linux命令的分类、格式、用法
Linux常用命令等
提示:以下是本篇文章正文内容,下面案例可供参考
- Linux 文件与目录管理是 Linux 操作系统中的一项基本技能,对于用户和系统管理员来说都非常重要。
- 在 Linux 中,所有的资源都被抽象为文件,包括硬件设备、软件配置等。
1.基本概念
- 文件:数据的集合,可以是文本、图像、视频等。
- 目录(文件夹):用于组织文件的容器,可以包含其他目录和文件。
- 路径:用于定位文件或目录的字符串,分为绝对路径和相对路径。
- 绝对路径:从根目录(
/
)开始的完整路径,例如/home/user/documents/file.txt
。 - 相对路径:从当前目录开始的路径,例如
./documents/file.txt
(如果当前目录是/home/user
)。
- 绝对路径:从根目录(
- **shell: **Linux和Unix系统中不可或缺的组成部分,它不仅是一个命令行界面,也是一个功能强大的脚本编程环境。
- 定义:
- Shell是操作系统的用户界面,用于接收用户输入的命令并送入内核执行。
- 它是一个命令解释器,也是一个脚本语言,支持变量、控制结构和函数。
- 定义:
- Linux内核态和用户态:
- 概念:
- 内核态(内核空间):操作系统中最高的运行级别,直接控制硬件资源并执行系统级别的操作。主要负责运行系统、硬件交互。
- 用户态(用户空间):操作系统中的一个运行级别,通常指应用程序运行时的环境。主要用于执行用户程序。
- 区别:
- 内核态:运行程序无限制;每个内核态有单独地址空间;执行级别无限制(最高在Ring 0)
- 用户态:运行程序有限制;每个用户态有虚拟地址空间;执行级别有限制(通常在Ring 3).
- 小结:
- 在Linux操作系统中,用户态和内核态之间的切换是频繁且高效的。这种切换保证了系统资源的合理使用和操作的安全性,同时也为用户提供了一个受保护的运行环境。
- 系统调用和中断是用户态和内核态之间交互的两种主要方式。
- 概念:
2.Linux命令的分类、格式及使用方法
分类
- 内部命令:集成在Shell解释器内部的命令,它们是Shell程序的一部分,执行时不需要启动另一个程序。
例如,cd
(改变目录)、echo
(输出文本)等。
- 外部命令:外部命令对应于系统中独立的程序文件,执行时会启动一个新的进程。
例如,ls
(列出文件)、cp
(复制文件)等。
区别
格式
命令 [选项] [参数]
- 命令:是必须指定的,用于执行特定的操作。
- 选项:是可选的,用于调整命令的行为。选项通常以单短横线
-
(如-l
)或双短横线--
(如--help
)开头。 - 参数:是命令作用的对象,可以是文件名、目录、用户名等。
使用方法
- 执行命令:在终端中输入命令并按下回车键。
- 使用选项:可以通过添加选项来修改命令的行为。例如,
ls -l
会以长列表格式显示文件信息。 - 使用参数:将参数传递给命令以指示命令操作的对象。例如,
cp file1.txt /home/user/
会将文件file1.txt
复制到/home/user/
目录。 - 命令组合:使用管道
|
将一个命令的输出作为另一个命令的输入。例如,ls -l | grep "txt"
会列出所有.txt
文件。 - 重定向输出:使用大于号
>
将命令输出重定向到文件,使用双大于号>>
追加到文件。例如,ls > files.txt
会将文件列表写入files.txt
。 - 获取帮助:
--help
选项:许多命令支持--help
选项来显示帮助信息。man
命令:使用man
命令可以查看命令的手册页。例如,man ls
会显示ls
命令的手册页。
- 命令别名:可以为常用命令创建别名,减少输入。例如,
alias ll='ls -l'
会将ll
定义为ls -l
的别名。 - 命令历史:可以使用上下箭头键回顾和执行之前的命令,或者使用
history
命令查看历史命令列表。
3.常用命令
**ls**
(英文全拼:list files):列出目录内容。- 基本用法
ls [选项] [文件或目录] //列出当前工作目录中的所有文件和目录。
常用选项 :
- `**ls**` - 列出当前目录下的文件和目录(不包括隐藏文件)。
- `**ls -l**` - 以长列表格式显示当前目录下的文件和目录的详细信息,包括权限、链接数、所有者、所属组、大小和最后修改日期。
- `**ls -a**` - 列出当前目录下的所有文件和目录,包括隐藏文件(以`.`开头的文件)。
- `**ls -h**` - 以可读的格式(如KB、MB)显示文件大小,与`-l`选项结合使用。
- `ls -S` - 按文件大小排序。
- `ls -t` - 按文件修改时间排序。
- `**ls -r**` - 反转排序结果,与`-S`、`-t`等选项结合使用。
- `**ls -d**` - 仅列出目录本身,而不是目录的内容。
- `**ls -i**` - 显示每个文件的inode号。
- `ls -n` - 以数字形式显示用户和组ID。
- `ls -F` - 在目录名称后添加`/`,在可执行文件名称后添加`*`,以区分不同类型的文件。
- `**ls -R**` - 递归列出所有子目录下的文件。
- `ls --color` - 以颜色高亮显示不同类型的文件。可以指定颜色模式,如`auto`(根据文件类型自动着色)。
-
**cd**
(英文全拼:change directory):改变当前目录,用于切换当前工作目录。(是shell中的一个内置命令,而不是一个单独的程序)- cd [dir] 切换到指定目录,
[dir]
是目标目录的路径,可以是绝对路径也可以是相对路径。 - **cd /path/to/directory ** 用绝对路径切换到指定目录。
- cd path/to/directory 用相对路径切换到指定目录。
- cd ~ 切换到当前用户的主目录
- cd - 切换到之前所在的工作目录,这通常用于在两个目录之间快速切换。
- **cd … ** 切换到当前目录的父目录
- **cd . ** 切换到当前目录
- cd [dir] 切换到指定目录,
-
du(英文全拼:Disk Usage):用于估计文件系统的磁盘量,它会显示每个文件或目录所占用的磁盘空间,对于理解和管理磁盘空间的使用非常有用。
- 基本格式
du [选项] [文件或目录...]
du -h 使用`-h`或`--human-readable`选项,`du`命令会以可读的格式(如KB、MB、GB)显示文件和目录的大小。
du -s /path/to/directory 使用`-s`或`--summarize`选项,`du`命令会仅显示每个目录的总大小,而不是详细的每个文件或子目录的大小。
du -a /path/to/directory 使用`-a`或`--all`选项,`du`命令会显示目录中所有文件和目录的大小,包括隐藏文件。
du -c /path/to/directory 使用`-c`或`--total`选项,`du`命令会显示每个文件或目录的大小,并在最后显示总和。
du -k /path/to/directory 使用`-k`或`--kilobytes`选项,`du`命令会以KB为单位显示文件和目录的大小。
du -m /path/to/directory 使用`-m`或`--megabytes`选项,`du`命令会以MB为单位显示文件和目录的大小。
du -b /path/to/directory 使用`-b`或`--bytes`选项,`du`命令会以字节为单位显示文件和目录的大小。
du --max-depth=2 /path/to/directory 使用`--max-depth=N`选项,`du`命令会限制显示的深度到N级目录。
du -x /path/to/directory 使用`-x`或`--one-file-system`选项,`du`命令会仅查看指定文件系统中的文件和目录,忽略其他文件系统上的文件和目录。
du -sh /path/to/directory 显示指定目录的总大小
- ln(英文全拼:link):在 Linux 系统中用于创建文件链接,也就是文件的别名。
1.基本用法
ln [选项] 源文件 目标文件
- 链接分为两种类型:硬链接(hard link)和软链接(symbolic link),它们在管理和组织文件时非常有用。
- 硬链接(hard link)【默认】 硬链接实际上是指向同一文件系统中的同一文件的另一个名字。创建硬链接后,两个或多个文件名将指向相同的文件数据: ln [源文件] [链接名]
示例:在当前目录下创建一个名为 hardlink.txt
的硬链接,指向 file1.txt
。
ln file1.txt hardlink.txt
-
软链接(symbolic link) 软链接,也称为符号链接,类似于 Windows 系统中的快捷方式。它包含了一个引用到另一个文件的路径,而不是直接指向文件数据: ln -s [源文件或目录] [链接名]
示例:在当前目录下创建一个名为
symlink.txt
的软链接,指向/path/to/file1.txt
。
ln -s /path/to/file1.txt symlink.txt
- `-h` 或 `--help`:显示帮助信息。
- `-v` 或 `--verbose`:在创建链接时显示详细信息。
- `-n` 或 `--no-dereference`:创建链接时不跟随符号链接。
- `-f` 或 `--force`:如果链接名已存在,则覆盖它。
- `-d` 或 `--directory`:创建一个目录的硬链接(通常硬链接不能用于目录,除非使用此选项)。
具体来说:
-
硬链接(Hard Link)是文件系统中指向同一数据块的链接。这意味着创建硬链接不会增加文件的大小,且原始文件和硬链接指向相同的 inode。硬链接不能跨文件系统创建,也不能为目录创建。【取别名】
-
符号链接(Symbolic Link)类似于 Windows 中的快捷方式,它包含的是目标文件的路径,而不是文件的物理位置。符号链接可以跨越文件系统,也可以链接到目录。【创建快捷方式】
-
小实验
在Linux系统中,ln
命令用于创建文件的链接,包括硬链接和软链接。关于它们是否占用存储空间的问题,以下是详细解释:
链接(Hard Link) 硬链接不占用额外的存储空间。当创建一个硬链接时,实际上是创建了同一个文件内容的另一个引用(别名)。硬链接指向的是文件数据本身,而不是文件的路径。因此,硬链接不会增加文件占用的磁盘空间,它们共享相同的inode(索引节点)和文件数据块。 - 示例:如果你有一个文件file1.txt
,创建一个硬链接hardlink.txt
到这个文件,那么file1.txt
和hardlink.txt
将占用相同的磁盘空间。 - 命令:
ln file1.txt hardlink.txt
软链接(Symbolic Link) 软链接会占用少量的存储空间。软链接是一个特殊的文件,它包含了一个指向另一个文件或目录的路径。当创建软链接时,会在文件系统中增加一个新的文件记录,这个记录包含了指向目标文件的路径信息。 - 示例:如果你有一个文件file1.txt
,创建一个软链接symlink.txt
到这个文件,那么symlink.txt
将占用少量的磁盘空间来存储指向file1.txt
的路径。 - 命令:
ln -s file1.txt symlink.txt
软链接的大小通常很小,因为它只包含路径信息,而不是文件内容。在大多数情况下,这个额外空间可以忽略不计。 总结来说,硬链接不会占用额外的存储空间,而软链接会占用少量的存储空间。
-
**pwd**(英文全拼:print work directory)
:显示用户当前所在的工作目录的绝对路径。- **pwd -l **
-L
:这是默认选项,如果当前目录是一个符号链接,pwd
会显示符号链接的路径,而不是它指向的文件的路径。 - pwd -p
-P
:这个选项告诉pwd
显示实际物理路径,即使当前目录是一个符号链接,也会显示它最终指向的文件的路径。
- **pwd -l **
-
**mkdir**(英文全拼:make directory)
:创建新目录。mkdir directoryname
:在当前目录下创建新目录。mkdir -p dir1/dir2/dir3
:递归创建目录【 创建一个多级目录结构,如果中间的目录不存在,将会自动创建】。
-
**rmdir**(英文全拼:remove directory)
:删除空目录。rmdir directoryname
:删除指定的空目录。- rmdir -p /path/to/directory : 递归删除一个目录及其所有父目录,直到没有任何父目录为止
-
**rm**(英文全拼:remove)
:删除文件或目录。rm file.txt
:删除文件。rm -r directoryname
:递归删除目录及其内容。- rm -ri directoryname : 递归删除名为
directory
的目录及其所有内容,但需要确认每个步骤 rm -f file.txt
:强制删除文件,不提示确认。- [危险命令]:
- **rm -rf /etc/profile **永久删除系统级别的配置文件,可能导致系统无法正常启动或运行
- *rm -rf / **永久删除系统级别的所有文件,可能导致系统无法正常启动或运行
- [危险命令]:
-
**cp**(英文全拼:copy file)
:复制文件或目录。cp source destination
:复制文件。cp -r source destination
:递归复制一个目录及其所有子目录和文件到另一个目录- cp -a directory1 directory2:复制文件并保留链接、文件属性,并递归地复制目录
- cp -i file1.txt file2.txt: 在覆盖目标文件之前询问用户是否继续
- cp -p file1.txt file2.txt:保留源文件或目录的属性,包括修改时间和访问权限
-
**mv**(英文全拼:move file)
:用于移动文件或目录,或者重命名文件和目录。
- 基本语法如下:
mv [选项] 源文件或目录 目标文件或目录
mv source destination
:移动文件或重命名。- 常用选项:
-b
(备份):在覆盖目标文件之前,先备份原文件。-f
(强制):覆盖目标文件而无需提示。-i
(交互式):如果目标文件已存在,会询问用户是否覆盖。-u
(更新):如果目标文件已存在,且源文件较新,则更新目标文件。-t
(指定目录):将所有源文件移动到指定的目标目录中。
- df :(英文全拼:Disk Free):用于显示文件系统的磁盘空间使用情况,对于系统管理和故障排除至关重要
- 基本语法:
df [选项] // 显示文件系统的磁盘空间使用情况
-
选项:
- df -B 以字节为单位显示文件系统的大小
- df -T 显示文件系统的类型
- df -A 显示所有文件系统,包括未挂载的
- df -i 显示文件系统的inode使用情况
- **which **:用于查找并返回给定命令的绝对路径。
- 基本语法:
which [选项] 命令名
- 选项:
- **which ls **查找并返回命令
ls
的绝对路径 - **which -a ls **显示所有匹配的命令路径
- **which ls **查找并返回命令
- 注意:
which
命令通常用于查找特定命令的位置,尤其是在脚本中,以避免硬编码命令路径。which
命令只查找在PATH
环境变量中定义的命令路径。- 如果命令在
PATH
中定义了多个路径,which
将返回第一个找到的路径。 - 使用
which
命令时,如果命令不存在于PATH
中,它将返回一个空字符串,表示没有找到命令。 - 在使用
which
时,建议检查命令的返回值,以确保命令确实存在于PATH
中,并且返回的路径是预期的。
which
是一个非常有用的命令,特别是在需要**动态查找命令路径时。正确使用它可以在脚本和命令行操作中提高灵活性和可维护性。
**
**find**
:用于在文件系统中搜索文件或目录。
- 基本语法:
find [搜索路径] [选项] [动作]
- 选项:
-name
:按文件名搜索。-path
:按路径搜索。-type
:按文件类型搜索,例如f
表示普通文件,d
表示目录。
1.-type b
:块特殊文件(block special file)
2.-type c
:字符特殊文件(character special file)
3.-type d
:目录(directory)
4.-type p
:FIFO(first-in-first-out)特殊文件
5.-type l
:符号链接(symbolic link)
6.-type f
:普通文件(regular file)
7.-type s
:套接字(socket)
8.-type v
:命名管道(Named pipe)
使用-type
选项时,可以单独使用,也可以与其他选项组合使用,以指定搜索的特定文件类型。
-
-size
:按文件大小搜索,例如+10k
表示大于10KB的文件。 -
-mtime
:按文件修改时间搜索,例如-7
表示7天内的文件。 -
-atime
:按文件访问时间搜索。 -
-ctime
:按文件状态变化时间搜索。 -
-print
:搜索到的文件打印出来。 -
-ls
:搜索到的文件执行ls -l
命令。 -
-exec
:对搜索到的每个文件执行后面的命令。 -
举例:
- find . -name “file1.txt” 在当前目录及其子目录下查找所有名为
file1.txt
的文件 - find . -type f -size +10M 查找当前目录下所有大于10MB的文件
- find . -type f -mtime -7 查找当前目录下7天内修改过的所有文件
- find . -type f -print 在当前目录及其子目录下查找所有普通文件,并打印出它们的完整路径
- find . -type d -ls 在当前目录及其子目录下查找所有目录,并使用
ls -l
命令显示它们的详细信息 - find . -type f -exec gzip {} ; 在当前目录及其子目录下查找所有普通文件,并使用
gzip
命令将它们压缩
- find . -name “file1.txt” 在当前目录及其子目录下查找所有名为
-
补充:
find
命令非常灵活,可以组合使用多个选项以精确地搜索文件。- 使用
-exec
选项时,需要确保对每个文件执行的命令是正确的,避免因错误命令而导致安全问题。 find
命令不会递归搜索目录树,如果需要递归搜索,需要在命令中明确指定。find
命令默认不会显示搜索到的文件的详细信息,而是使用-print
选项来打印文件名。如果需要显示文件的详细信息,可以使用-ls
选项。
13. alias 用于为复杂的命令序列定义简短的别名。 -
格式:
alias [选项] [别名] [命令]
- 选项
-p
(显示当前所有别名)、-a
(显示别名及其真实命令)等
-
举例:
- alias ls=‘ls -al’ 设置一个别名,每次输入
ls
时,就会执行ls -al
- unalias ls 删除一个别名,删除之前定义的
ls
别名
- alias ls=‘ls -al’ 设置一个别名,每次输入
-
补充:
- 永久设置别名: 为了使别名在每次登录时都有效,可以将别名定义添加到
~/.bashrc
文件中。 - 别名仅对当前的shell会话有效,若要在所有会话中永久使用别名,需要在shell配置文件中(如
~/.bashrc
或~/.profile
)设置别名。
- 永久设置别名: 为了使别名在每次登录时都有效,可以将别名定义添加到
**touch**
:创建空文件或更新文件时间戳。**chmod**
:修改文件或目录权限。**chown**
:修改文件或目录的所有者。**chgrp**
:修改文件或目录的所属组。
4.补充
- Linux命令大全:Linux 命令大全 | 菜鸟教程 (runoob.com)
- Linux 链接概念
1.
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为软连接,也叫符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。
硬连接
- 硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
- 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接
- 另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
通过实验加深理解
[oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 9797648,然而符号连接文件的 inode 节点不同。
[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory
通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f3 文件无效
3.总结
依此可以做一些相关的测试,可以得到以下全部结论:
- 1).删除符号连接f3,对f1,f2无影响;
- 2).删除硬连接f2,对f1,f3也无影响;
- 3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
- 4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
<br /!>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimgblog.csdnimg.cn%2Fimg_convert%2Ffc54ae9249bf1fbc215900712d28db2d.png&pos_id=img-lQr4cJ9A1fbc215900712d28db2d.png7
,可以有多个子进程和线程(PS:进程是怎么创建出来的,主要是以fork方式派生出来的)主要消耗的是CPU资源。
-
2.进程之间进行通讯,可以通过管道的方式,管道符为“|”
-
3.以“find abc/ -type f | wc -l”为例, | 的作用是,将find xxx 进程的标准输出传递给 wc -l 这个进程,作为标准输入,最后将 wc -l这个进程的标准输出,打印在终端上。
在Linux系统中,文件的时间戳有三个,分别是: -
access time(访问时间),通常缩写为
atime
,记录的是文件最后一次被访问或读取的时间。但现代Linux系统中,出于性能考虑,默认情况下不会实时更新atime
,除非特别设置了相应的系统参数。 -
modify time(修改时间),通常缩写为
mtime
,记录的是文件内容最后一次被修改的时间。无论是对文件内容的编辑还是更新,只要文件的大小发生了改变,mtime
就会更新。 -
change time(改变时间),通常缩写为
ctime
,记录的是文件元数据最后一次被改变的时间。这包括文件的属性、权限等的修改。在Linux中,ctime
通常也会随着mtime
的改变而改变,因为文件的元数据的改变通常伴随着文件内容的改变。
简单来说:
atime
关注的是文件何时被读取或访问。mtime
关注的是文件内容何时被修改。ctime
关注的是文件的元数据(如权限、所有权、链接数等)何时被修改。
在实际使用中,find
命令可以通过这些参数来过滤文件:
-atime
后跟数字,表示查找指定天数内没有被访问过的文件。-mtime
后跟数字,表示查找指定天数内没有被修改过的文件。-ctime
后跟数字,在某些Linux系统中,可以用来自定义的行为,查找指定天数内元数据没有被改变过的文件。
这些参数在系统管理和数据恢复中非常有用,可以帮助用户快速定位到需要处理的文件。
– 本章的Xmind导图与笔记如下,需要自取:
链接:https://pan.baidu.com/s/1PZgJAhJjTzgat64AzpZFJw?pwd=1234
提取码:1234