Linux常用命令

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
1.Linux介绍、目录结构、文件基本属性、Shell
2.Linux常用命令


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本章内容有:
Linux命令的分类、格式、用法
Linux常用命令等


提示:以下是本篇文章正文内容,下面案例可供参考

  • Linux 文件与目录管理是 Linux 操作系统中的一项基本技能,对于用户和系统管理员来说都非常重要。
  • 在 Linux 中,所有的资源都被抽象为文件,包括硬件设备、软件配置等。

1.基本概念

  1. 文件:数据的集合,可以是文本、图像、视频等。
  2. 目录(文件夹):用于组织文件的容器,可以包含其他目录和文件。
  3. 路径:用于定位文件或目录的字符串,分为绝对路径和相对路径。
    • 绝对路径:从根目录(/)开始的完整路径,例如 /home/user/documents/file.txt
    • 相对路径:从当前目录开始的路径,例如 ./documents/file.txt(如果当前目录是 /home/user)。
  4. **shell: **Linux和Unix系统中不可或缺的组成部分,它不仅是一个命令行界面,也是一个功能强大的脚本编程环境。
    • 定义
      • Shell是操作系统的用户界面,用于接收用户输入的命令并送入内核执行。
      • 它是一个命令解释器,也是一个脚本语言,支持变量、控制结构和函数。
  5. Linux内核态和用户态:
    • 概念:
      • 内核态(内核空间):操作系统中最高的运行级别,直接控制硬件资源并执行系统级别的操作。主要负责运行系统、硬件交互。
      • 用户态(用户空间):操作系统中的一个运行级别,通常指应用程序运行时的环境。主要用于执行用户程序。
    • 区别:
      • 内核态:运行程序无限制;每个内核态有单独地址空间;执行级别无限制(最高在Ring 0)
      • 用户态:运行程序有限制;每个用户态有虚拟地址空间;执行级别有限制(通常在Ring 3).
    • 小结:
      • 在Linux操作系统中,用户态和内核态之间的切换是频繁且高效的。这种切换保证了系统资源的合理使用和操作的安全性,同时也为用户提供了一个受保护的运行环境。
      • 系统调用和中断是用户态和内核态之间交互的两种主要方式。

2.Linux命令的分类、格式及使用方法

分类

  • 内部命令:集成在Shell解释器内部的命令,它们是Shell程序的一部分,执行时不需要启动另一个程序。

例如,cd(改变目录)、echo(输出文本)等。

  • 外部命令:外部命令对应于系统中独立的程序文件,执行时会启动一个新的进程。

例如,ls(列出文件)、cp(复制文件)等。

区别

image.png

格式

命令 [选项] [参数]
  • 命令:是必须指定的,用于执行特定的操作。
  • 选项:是可选的,用于调整命令的行为。选项通常以单短横线-(如-l)或双短横线--(如--help)开头。
  • 参数:是命令作用的对象,可以是文件名、目录、用户名等。

使用方法

  1. 执行命令:在终端中输入命令并按下回车键。
  2. 使用选项:可以通过添加选项来修改命令的行为。例如,ls -l会以长列表格式显示文件信息。
  3. 使用参数:将参数传递给命令以指示命令操作的对象。例如,cp file1.txt /home/user/会将文件file1.txt复制到/home/user/目录。
  4. 命令组合:使用管道|将一个命令的输出作为另一个命令的输入。例如,ls -l | grep "txt"会列出所有.txt文件。
  5. 重定向输出:使用大于号>将命令输出重定向到文件,使用双大于号>>追加到文件。例如,ls > files.txt会将文件列表写入files.txt
  6. 获取帮助
    • --help选项:许多命令支持--help选项来显示帮助信息。
    • man命令:使用man命令可以查看命令的手册页。例如,man ls会显示ls命令的手册页。
  7. 命令别名:可以为常用命令创建别名,减少输入。例如,alias ll='ls -l'会将ll定义为ls -l的别名。
  8. 命令历史:可以使用上下箭头键回顾和执行之前的命令,或者使用history命令查看历史命令列表。

3.常用命令

  1. **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`(根据文件类型自动着色)。
  1. **cd**(英文全拼:change directory):改变当前目录,用于切换当前工作目录。(是shell中的一个内置命令,而不是一个单独的程序)

    • cd [dir] 切换到指定目录, [dir] 是目标目录的路径,可以是绝对路径也可以是相对路径。
    • **cd /path/to/directory ** 用绝对路径切换到指定目录。
    • cd path/to/directory 用相对路径切换到指定目录。
    • cd ~ 切换到当前用户的主目录
    • cd - 切换到之前所在的工作目录,这通常用于在两个目录之间快速切换。
    • **cd … ** 切换到当前目录的父目录
    • **cd . ** 切换到当前目录
  2. 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	显示指定目录的总大小
  1. 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 中的快捷方式,它包含的是目标文件的路径,而不是文件的物理位置。符号链接可以跨越文件系统,也可以链接到目录。【创建快捷方式】

  • image.png

小实验

在Linux系统中,ln 命令用于创建文件的链接,包括硬链接和软链接。关于它们是否占用存储空间的问题,以下是详细解释:
链接(Hard Link) 硬链接不占用额外的存储空间。当创建一个硬链接时,实际上是创建了同一个文件内容的另一个引用(别名)。硬链接指向的是文件数据本身,而不是文件的路径。因此,硬链接不会增加文件占用的磁盘空间,它们共享相同的inode(索引节点)和文件数据块。 - 示例:如果你有一个文件file1.txt,创建一个硬链接hardlink.txt到这个文件,那么file1.txthardlink.txt将占用相同的磁盘空间。 - 命令

ln file1.txt hardlink.txt

软链接(Symbolic Link) 软链接会占用少量的存储空间。软链接是一个特殊的文件,它包含了一个指向另一个文件或目录的路径。当创建软链接时,会在文件系统中增加一个新的文件记录,这个记录包含了指向目标文件的路径信息。 - 示例:如果你有一个文件file1.txt,创建一个软链接symlink.txt到这个文件,那么symlink.txt将占用少量的磁盘空间来存储指向file1.txt的路径。 - 命令

ln -s file1.txt symlink.txt

软链接的大小通常很小,因为它只包含路径信息,而不是文件内容。在大多数情况下,这个额外空间可以忽略不计。 总结来说,硬链接不会占用额外的存储空间,而软链接会占用少量的存储空间。

  1. **pwd**(英文全拼:print work directory):显示用户当前所在的工作目录的绝对路径。

    • **pwd -l **-L:这是默认选项,如果当前目录是一个符号链接,pwd会显示符号链接的路径,而不是它指向的文件的路径。
    • pwd -p -P:这个选项告诉pwd显示实际物理路径,即使当前目录是一个符号链接,也会显示它最终指向的文件的路径。
  2. **mkdir**(英文全拼:make directory):创建新目录。

    • mkdir directoryname:在当前目录下创建新目录。
    • mkdir -p dir1/dir2/dir3:递归创建目录【 创建一个多级目录结构,如果中间的目录不存在,将会自动创建】。
  3. **rmdir**(英文全拼:remove directory):删除空目录。

    • rmdir directoryname:删除指定的空目录。
    • rmdir -p /path/to/directory : 递归删除一个目录及其所有父目录,直到没有任何父目录为止
  4. **rm**(英文全拼:remove):删除文件或目录。

    • rm file.txt:删除文件。
    • rm -r directoryname:递归删除目录及其内容。
    • rm -ri directoryname : 递归删除名为directory的目录及其所有内容,但需要确认每个步骤
    • rm -f file.txt:强制删除文件,不提示确认。
      • [危险命令]:
        - **rm -rf /etc/profile **永久删除系统级别的配置文件,可能导致系统无法正常启动或运行
        - *rm -rf / **永久删除系统级别的所有文件,可能导致系统无法正常启动或运行
  5. **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:保留源文件或目录的属性,包括修改时间和访问权限



  6. **mv**(英文全拼:move file):用于移动文件或目录,或者重命名文件和目录。

  • 基本语法如下:
mv [选项] 源文件或目录 目标文件或目录
  • mv source destination:移动文件或重命名。
  • 常用选项:
    • -b (备份):在覆盖目标文件之前,先备份原文件。
    • -f (强制):覆盖目标文件而无需提示。
    • -i (交互式):如果目标文件已存在,会询问用户是否覆盖。
    • -u (更新):如果目标文件已存在,且源文件较新,则更新目标文件。 -t (指定目录):将所有源文件移动到指定的目标目录中。
  1. df :(英文全拼:Disk Free):用于显示文件系统的磁盘空间使用情况,对于系统管理和故障排除至关重要
  • 基本语法
df [选项]					// 显示文件系统的磁盘空间使用情况
  • 选项

    • df -B 以字节为单位显示文件系统的大小
    • df -T 显示文件系统的类型
    • df -A 显示所有文件系统,包括未挂载的
    • df -i 显示文件系统的inode使用情况

  1. **which **:用于查找并返回给定命令的绝对路径。
  • 基本语法
which [选项] 命令名
  • 选项:
    • **which ls **查找并返回命令ls的绝对路径
    • **which -a ls **显示所有匹配的命令路径
  • 注意:
    • which命令通常用于查找特定命令的位置,尤其是在脚本中,以避免硬编码命令路径。
    • which命令只查找在PATH环境变量中定义的命令路径。
    • 如果命令在PATH中定义了多个路径,which将返回第一个找到的路径。
    • 使用which命令时,如果命令不存在于PATH中,它将返回一个空字符串,表示没有找到命令。
    • 在使用which时,建议检查命令的返回值,以确保命令确实存在于PATH中,并且返回的路径是预期的。

which是一个非常有用的命令,特别是在需要**动态查找命令路径时。正确使用它可以在脚本和命令行操作中提高灵活性和可维护性。
**

  1. **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命令非常灵活,可以组合使用多个选项以精确地搜索文件。
    • 使用-exec选项时,需要确保对每个文件执行的命令是正确的,避免因错误命令而导致安全问题。
    • find命令不会递归搜索目录树,如果需要递归搜索,需要在命令中明确指定。
    • find命令默认不会显示搜索到的文件的详细信息,而是使用-print选项来打印文件名。如果需要显示文件的详细信息,可以使用-ls选项。




    13. alias 用于为复杂的命令序列定义简短的别名。

  • 格式:

alias [选项] [别名] [命令]
  • 选项

-p(显示当前所有别名)、-a(显示别名及其真实命令)等

  • 举例:

    • alias ls=‘ls -al’ 设置一个别名,每次输入ls时,就会执行ls -al
    • unalias ls 删除一个别名,删除之前定义的ls别名
  • 补充:

    • 永久设置别名: 为了使别名在每次登录时都有效,可以将别名定义添加到~/.bashrc文件中。
    • 别名仅对当前的shell会话有效,若要在所有会话中永久使用别名,需要在shell配置文件中(如~/.bashrc~/.profile)设置别名。

  1. **touch**:创建空文件或更新文件时间戳。
  2. **chmod**:修改文件或目录权限。
  3. **chown**:修改文件或目录的所有者。
  4. **chgrp**:修改文件或目录的所属组。

4.补充

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
![image.png](https://img-

  • 1.通常来说一个程序只有一个主进程(master进程),可以有多个子进程和线程(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

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值