菜单
本页目录

命令行界面(CLI)与图形用户界面(GUI)📇

​ 在理解 Linux 系统的操作方式时,首先需要了解两种主要的用户接口:命令行界面(Command Line Interface,CLI)和图形用户界面(Graphical User Interface,GUI)。

图形用户界面(GUI)

​ 图形用户界面是许多用户熟悉的操作方式,它提供了视觉化的方式来与计算机系统进行交互。在 GUI 中,使用者可以通过鼠标点击、拖拽等操作来执行任务,例如打开文件、运行程序、浏览网页等。GUI 以直观和用户友好的方式展示信息,使得用户无需记忆大量的命令和选项就能进行操作。

命令行界面(CLI)

​ 与 GUI 不同,命令行界面是通过键入文本命令来与计算机系统进行交互的方式。在 CLI 中,用户需要键入特定的命令以执行任务,例如创建文件、安装软件、管理系统服务等。CLI 的操作方式可能需要一定的学习成本,但是它具有很多 GUI 无法比拟的优势。

CLI 的优势和使用场景

​ 尽管 CLI 的操作方式可能需要一定的学习成本,但是它在许多场景下具有明显的优势:

  1. 效率:CLI 可以通过简洁的命令快速完成任务。一旦熟悉了命令行操作,用户可以比使用 GUI 更快地完成许多任务。

  2. 自动化:CLI 可以很容易地进行任务自动化。用户可以编写脚本将一系列的命令自动执行,从而简化重复的任务。

  3. 远程操作:CLI 是远程管理 Linux 服务器的主要方式。通过 SSH(Secure Shell)连接,用户可以在任何地方通过命令行接口远程操作服务器。

  4. 灵活性和控制力:CLI 提供了对系统的深度控制。许多高级的系统管理任务只能或者最好通过命令行来完成。

  5. 资源占用:CLI 通常比 GUI 使用更少的计算机资源(如 CPU 和内存)。这在资源有限或者需要优化性能的场景下是非常重要的。

​ 因此,虽然 GUI 对于日常使用和初学者来说可能更加友好,但 CLI 的强大功能和灵活性使其在系统管理、开发操作和高级任务中成为必不可少的工具。在 Linux 环境中,熟练使用 CLI 是一项重要的技能。

基本概念

终端和 Shell

​ 在 Linux 系统中,终端和 Shell 是进行命令行操作的关键组件。理解这两个概念有助于更好地掌握命令行操作。

终端

​ 终端,也被称为终端模拟器或控制台,是用户与计算机系统交互的界面。在图形用户界面(GUI)的环境中,终端通常表现为一个窗口,用户可以在这个窗口中输入命令并查看命令的输出结果。

​ 在早期的计算机系统中,终端是一个物理设备,包括一个显示屏和一个键盘,用于与主机计算机进行交互。在现代的系统中,终端大多是软件模拟的,但仍然保留了原始硬件终端的一些特性和行为。

Shell

​ Shell 是一个命令行解释器,它在用户和操作系统内核之间起到了桥梁的作用。当用户在终端中输入命令时,Shell 负责接收这些命令,然后解释和执行这些命令,最后将命令的执行结果返回给用户。

​ Shell 不仅可以执行单个的命令,还可以执行包含多个命令的脚本。这使得用户可以将一系列的命令自动化,从而简化重复的任务。

常见的 Shell 类型

​ Linux 系统中有多种不同类型的 Shell,每种 Shell 都有自己的特性和优点。以下是两种最常见的 Shell:

  • Bash(Bourne Again Shell):Bash 是最常用的 Shell 类型,它是许多 Linux 发行版的默认 Shell。Bash 提供了许多高级功能,包括命令行编辑、命令历史、命令别名、Shell 脚本编程等。

  • Zsh(Z Shell):Zsh 是一种扩展性强的 Shell,它包含了 Bash 的大部分特性,并添加了许多新的功能,例如改进的命令补全、主题和插件支持等。Zsh 的这些高级功能使得它在开发者中非常受欢迎。

​ 总的来说,终端和 Shell 是 Linux 命令行操作的基础。理解这两个概念以及它们的工作方式,将有助于更好地掌握 Linux 命令行的使用。

浪浪云某个开发的终端

微信截图_20240330105900.png

Linux 文件系统结构详解

​ Linux 文件系统的设计遵循了文件系统层次结构标准(Filesystem Hierarchy Standard,FHS),这样设计的目的是为了确保软件包的一致性,让用户和程序都能找到文件和目录。以下是 Linux 文件系统结构中一些关键目录的详细描述:

根目录及其直接子目录

  • /(根目录): 所有文件和目录的起点。在 Linux 中,只有一个根目录,其他所有的目录都是这个根目录的子目录。

  • /bin(用户二进制文件): 存储基本的用户命令的二进制文件,如 ls, cp, mv, cat, grep 等。这些命令对系统管理员和普通用户都是必需的。

  • /boot(启动文件): 包含启动系统时使用的文件,如 Linux 内核、初始内存映像、引导加载程序(如 GRUB)的配置文件等。

  • /dev(设备文件): 存放设备文件,这些特殊文件代表硬件设备,如硬盘(/dev/sda)、终端(/dev/tty)、打印机(/dev/lp0)等。

  • /etc(配置文件): 包含所有系统级的配置文件和子目录。这些文件通常由系统管理员维护,控制系统的各种参数和初始设置。

  • /home(用户家目录): 通常每个用户会有一个对应的目录,位于 /home/用户名,用于存储用户的个人文件和设置。

  • /lib(库文件): 包含系统和应用程序运行所需的共享库文件,以及内核模块。

  • /media(可移动媒体): 用于挂载可移动存储设备,如 USB 驱动器、CD-ROMs。

  • /mnt(挂载点): 临时挂载文件系统的目录。

  • /opt(可选的应用软件包): 存放可选的第三方应用程序。

  • /proc(进程信息): 虚拟文件系统,包含运行中的内核和进程信息。它通常不占用磁盘空间,而是在内存中动态生成。

  • /root(根用户的家目录): 系统管理员(root 用户)的家目录。

  • /sbin(系统二进制文件): 存储重要的系统管理命令,如 fdisk, fsck, init 等。

  • /tmp(临时文件): 用于存储临时文件,系统可能会在重启或根据配置的清理策略后删除这些文件。

  • /usr(用户二进制文件、文档和源代码): 包含用户应用程序和文件的第二层次结构,它有若干重要的子目录:

    • /usr/bin:对所有用户都可用的非必需命令。
    • /usr/sbin:非必需的系统管理命令。
    • /usr/lib:非必需的库文件。
    • /usr/local:本地安装的软件。这里通常包含那些不是由系统包管理器安装的程序。
    • /usr/share:架构无关的(共享)数据。
  • /var(可变文件): 用于存储经常变化的文件,如日志文件(/var/log)、包含邮件队列的目录(/var/mail)和打印队列的目录(/var/spool)等。

重要的可变数据目录

  • /var/log:存放日志文件,包括系统日志、应用程序日志等。
  • /var/spool:存放等待处理的任务,如打印作业和邮件队列。
  • /var/tmp:用于存放需要在系统重启之间保留的临时文件。
  • /var/cache:用于存放应用程序的缓存数据。
  • /var/lib:存放应用程序状态信息,一般是数据库或包管理器的数据。

​ 理解这些目录和它们的用途对于有效地使用和管理 Linux 系统非常重要。管理员和用户可以依据这些标准目录的用途来存放和查找文件,保证系统的整洁和有序。

常见文件操作命令

Linux 文件系统导航

​ 在 Linux 系统中,有一些基本的命令用于导航和操作文件系统。以下是一些最常用的命令:pwdls,和 cd

pwd 命令

pwd(Print Working Directory)命令用于显示当前工作目录的绝对路径。无论用户在文件系统的哪个位置,都可以使用 pwd 命令来确定当前的位置。这个命令没有参数。

示例:

$ pwd
/home/username

​ 在这个示例中,pwd 命令显示用户当前在 /home/username 目录下。

ls 命令

ls(List)命令用于列出当前目录下的所有文件和目录。如果没有指定目录,ls 命令默认列出当前目录的内容。用户也可以指定目录来列出其内容。

示例:

$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

​ 在这个示例中,ls 命令列出了当前目录下的所有文件和目录。

ls 命令有许多参数可以用来修改其行为。例如,-l 参数可以以长格式列出文件和目录的详细信息,-a 参数可以显示隐藏文件,-h 参数可以以易读的格式显示文件大小。

示例:

$ ls -l
total 44
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Desktop
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Documents
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Downloads
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Music
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Pictures
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Public
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Templates
drwxr-xr-x 2 username username 4096 Mar 30 11:11 Videos

​ 在这个示例中,ls -l 命令以长格式列出了当前目录下的所有文件和目录。每一行的输出包括文件权限、所有者、大小、修改日期和文件或目录名。

cd 命令

cd(Change Directory)命令用于改变当前工作目录。用户可以指定要切换到的目录,或者使用特殊的路径名,如 ~(指代用户的家目录)和 ..(指代当前目录的父目录)。

示例:

$ cd Documents

​ 在这个示例中,cd 命令将当前工作目录切换到 Documents 目录。

​ 再次使用 pwd 命令,可以看到当前工作目录已经改变。

$ pwd
/home/username/Documents

文件和目录的创建与删除

​ 在 Linux 系统中,文件和目录的创建与删除是常见的操作。以下是一些用于创建和删除文件及目录的基本命令:touch, mkdir, rm, 和 rmdir

touch 命令

touch 命令用于创建一个空文件,如果指定的文件已经存在,它会更新文件的访问和修改时间戳。

创建文件

$ touch filename

​ 在这个命令中,touch 将创建一个名为 filename 的空文件。如果 filename 文件已存在,那么它的时间戳将被更新。

更新时间戳

$ touch existingfile

​ 这个命令将更新名为 existingfile 的文件的时间戳,不会更改文件内容。

mkdir 命令

mkdir(Make Directory)命令用于创建新的目录。

创建目录

$ mkdir directoryname

​ 这个命令将创建一个名为 directoryname 的新目录。

创建多级目录

$ mkdir -p path/to/directory

使用 -p 参数,mkdir 命令可以创建路径中所有不存在的目录。

rm 命令

rm(Remove)命令用于删除文件和目录。

删除文件

$ rm filename

​ 这个命令将删除名为 filename 的文件。

删除目录及其内容

$ rm -r directoryname

​ 使用 -r 参数,rm 命令可以递归地删除 directoryname 及其包含的所有文件和子目录。

强制删除

$ rm -f filename

​ 使用 -f 参数,rm 命令将强制删除名为 filename 的文件,即使它是只读的。

rmdir 命令

rmdir(Remove Directory)命令用于删除空的目录。

删除空目录

$ rmdir directoryname

​ 这个命令将删除名为 directoryname 的空目录。如果目录不为空,将显示一个错误。

删除多级空目录

$ rmdir -p path/to/directory

​ 使用 -p 参数,rmdir 命令可以删除 path/to/directory 及其父目录,只要它们都是空的。

​ 在使用 rmrmdir 命令时,务必谨慎,因为删除操作是不可逆的。在默认情况下,Linux 系统不提供回收站或垃圾箱功能,所以一旦文件或目录被删除,就无法恢复。

文件的复制和移动

​ 在 Linux 系统中,处理文件的常见操作包括复制和移动,这可以通过 cpmv 命令来实现。

cp 命令

cp(Copy)命令用于复制文件或目录。

复制文件

$ cp sourcefile targetfile

​ 这个命令将复制一个名为 sourcefile 的文件,并将副本命名为 targetfile。如果 targetfile 已经存在,它将被 sourcefile 的副本覆盖。

复制目录

$ cp -r sourcedir targetdir

​ 使用 -r 参数,cp 命令可以递归地复制目录及其内容。这个命令将复制 sourcedir 及其所有子目录和文件,并将副本命名为 targetdir

mv 命令

mv(Move)命令用于移动或重命名文件和目录。

移动文件

$ mv sourcefile targetdirectory

​ 这个命令将 sourcefile 移动到 targetdirectory 中。如果 targetdirectory 中已经存在一个名为 sourcefile 的文件,它将被覆盖。

重命名文件

$ mv oldfilename newfilename

​ 这个命令将 oldfilename 重命名为 newfilename。如果 newfilename 已经存在,它将被覆盖。

移动目录

$ mv sourcedir targetdir

​ 这个命令将 sourcedir 移动到 targetdir 中。如果 targetdir 中已经存在一个名为 sourcedir 的目录,它将被覆盖。

​ 在使用 cpmv 命令时,需要注意目标位置是否已经存在同名的文件或目录。在默认情况下,这些命令将覆盖目标位置的同名文件或目录,如果不希望这样,可以使用 -i 参数来在覆盖前询问用户。例如,cp -i sourcefile targetfilemv -i sourcefile targetfile 将在覆盖 targetfile 前询问用户。

文件的查找

​ 在 Linux 系统中,查找文件是常见的操作,这可以通过 findlocate 命令来实现。

find 命令

find 命令用于在文件系统中查找文件或目录。

查找文件

$ find path -name filename

​ 这个命令在指定的 path 中查找名为 filename 的文件或目录。-name 参数表示按照名称进行搜索。

查找文件并忽略大小写

$ find path -iname filename

​ 使用 -iname 参数,find 命令可以忽略大小写地查找文件或目录。

查找文件并按类型过滤

$ find path -type f -name filename

​ 使用 -type 参数,find 命令可以按类型过滤搜索结果。在这个例子中,-type f 表示只查找文件,不包括目录。

locate 命令

locate 命令用于在文件系统中快速查找文件。它使用一个预先构建的数据库(通常由 updatedb 命令维护)来查找文件。

查找文件

$ locate filename

​ 这个命令查找名为 filename 的文件或目录。

查找文件并限制结果数量

$ locate -n 10 filename

​ 使用 -n 参数,locate 命令可以限制显示的结果数量。在这个例子中,-n 10 表示只显示前 10 个匹配结果。

​ 在使用 findlocate 命令时,需要注意它们的区别。find 命令在文件系统中实时查找文件,而 locate 命令使用预先构建的数据库进行查找。因此,locate 命令通常更快,但可能无法找到最新创建的文件。如果需要查找最新的文件,或者需要按照更复杂的条件进行查找(例如按照文件类型、大小、修改时间等),则应使用 find 命令。

文件链接

​ 在 Linux 系统中,可以通过 ln 命令创建链接(Link)来引用文件或目录。链接有两种类型:硬链接(Hard Link)和软链接(Symbolic Link 或 Symlink)。

硬链接

​ 硬链接是一个文件系统中的文件或目录的引用或别名。硬链接指向的是文件的 inode(文件系统中的数据结构,存储了文件的元数据)而非文件名。因此,硬链接与其原始文件在文件系统中是等价的。

创建硬链接的命令如下:

$ ln sourcefile linkname

​ 这个命令创建了一个名为 linkname 的硬链接,该链接指向 sourcefile。硬链接与其原始文件共享相同的 inode 和数据块,因此对硬链接的任何修改都会反映到原始文件上,反之亦然。

​ 需要注意的是,硬链接不能跨文件系统,也不能链接到目录。

软链接

​ 软链接(也被称为符号链接或 symlink)是一个特殊类型的文件,该文件包含了另一个文件或目录的路径。软链接可以看作是对其目标的直接引用。

​ 创建软链接的命令如下:

$ ln -s targetfile linkname

​ 这个命令创建了一个名为 linkname 的软链接,该链接指向 targetfile。软链接仅仅是一个指向其目标的引用,因此删除或移动软链接不会影响其目标,但如果删除或移动了目标,软链接将变为失效(称为“悬挂链接”)。

​ 软链接可以跨文件系统,也可以链接到目录。

​ 在使用 ln 命令创建链接时,需要注意链接类型的选择。硬链接和软链接虽然在功能上相似,但在底层实现和使用限制上有所不同。在大多数情况下,软链接是更常用的选择,因为它可以跨文件系统并链接到目录。