02-linux基础

Linux用户

Linux 用户是指使用基于 Linux 操作系统的人群,他们涵盖了广泛的领域和不同的使用目的,下面从用户类型、使用场景、面临的挑战等维度为你详细介绍:

image-20250306160458142

用户类型

  • 个人开发者:利用 Linux 系统进行软件开发,Linux 提供了丰富的开发工具,如 GCC 编译器、GDB 调试器等,并且开源的特性使得开发者可以深入了解系统底层,便于进行定制开发。例如,很多 Python、C、C++ 开发者会在 Linux 环境下编写和调试代码。
  • 系统管理员:负责企业或数据中心中 Linux 服务器的管理和维护。他们需要安装和配置服务器操作系统、管理用户账户、监控系统性能、进行备份和恢复等工作。比如,在一个大型企业中,系统管理员要确保 Linux 服务器 24 小时稳定运行,以支持企业的业务应用。
  • 科研人员:在科研领域,Linux 被广泛用于高性能计算和数据分析。例如,天文学、物理学等领域的科研人员会使用 Linux 集群进行大规模的数据处理和模拟计算。
  • 普通个人用户:将 Linux 作为日常办公和娱乐的操作系统。他们使用 Linux 系统进行上网浏览、文档处理、观看视频等操作。对于那些注重隐私和安全,且对操作系统定制有一定需求的用户来说,Linux 是一个不错的选择。

使用场景

  • 服务器领域:Linux 在服务器市场占据主导地位,许多互联网公司的网站服务器、数据库服务器等都运行在 Linux 系统上。例如,全球知名的网站如 Google、Facebook 等,其后台服务器大量采用 Linux 操作系统,因为 Linux 具有高稳定性、高安全性和低能耗等优点。
  • 云计算和虚拟化:在云计算和虚拟化环境中,Linux 是主要的操作系统之一。像 OpenStack 等开源云计算平台,以及 VMware、KVM 等虚拟化技术,都广泛支持 Linux 系统。用户可以在 Linux 系统上创建和管理虚拟机,实现资源的高效利用和弹性扩展。
  • 嵌入式系统:Linux 因其内核可裁剪、占用资源少等特点,被广泛应用于嵌入式设备中,如智能家居设备、工业控制设备、智能车载系统等。例如,许多智能电视和路由器都运行着基于 Linux 的操作系统。

面临的挑战

  • 软件兼容性:虽然 Linux 软件生态系统日益丰富,但仍然存在一些商业软件或特定行业软件无法在 Linux 系统上运行的情况。这对于一些有特定软件需求的用户来说,可能会限制他们使用 Linux 系统。
  • 学习曲线较陡:与 Windows 等操作系统相比,Linux 的操作和管理相对复杂,需要用户具备一定的技术知识和操作经验。对于初学者来说,学习和掌握 Linux 系统的使用方法可能需要花费较多的时间和精力。
  • 硬件支持:部分硬件设备的厂商可能对 Linux 系统的支持不够完善,导致在 Linux 系统上安装和使用这些硬件设备时可能会遇到兼容性问题,如某些新型显卡、打印机等。

对 Linux 用户的支持和社区

  • 社区论坛:有众多活跃的 Linux 社区论坛,如 Reddit 的 r/linux 板块、Linux 中国论坛等。用户可以在这些论坛上交流使用经验、解决遇到的问题、分享技术文章等。
  • 官方文档:各个 Linux 发行版都提供了详细的官方文档,帮助用户进行系统安装、配置和管理。例如,Ubuntu 的官方文档涵盖了从入门指南到高级系统管理的各个方面。
  • 商业支持:除了社区支持外,一些公司还提供商业的 Linux 技术支持服务。例如,Red Hat 为其企业级 Linux 产品提供专业的技术支持和维护服务,确保企业用户的系统稳定运行。

终端

在 Linux 环境中,终端(Terminal)是用户与操作系统进行交互的重要工具,它允许用户通过输入命令来执行各种操作。以下为你详细介绍:

image-20250306160650734

基本概念

终端是一种字符界面,它提供了一个命令行环境,用户可以在其中输入文本命令,操作系统会解释并执行这些命令,然后将执行结果返回给用户显示。在 Linux 中,终端模拟了传统的物理终端设备,如电传打字机(Teletypewriter,简称 Teletype 或 TTY)。

常见类型

  • 虚拟终端(Virtual Terminal)
    • 在 Linux 系统中,通常可以通过快捷键(如 Ctrl + Alt + F1 - F6)切换到不同的虚拟终端。每个虚拟终端都是一个独立的命令行会话,用户可以在不同的虚拟终端上同时运行不同的任务。
    • 例如,你可以在虚拟终端 1 上进行系统管理操作,在虚拟终端 2 上编译代码。
  • 图形终端模拟器(Terminal Emulator)
    • 当使用图形用户界面(GUI)时,需要借助图形终端模拟器来提供命令行界面。常见的图形终端模拟器有 GNOME Terminal(用于 GNOME 桌面环境)、Konsole(用于 KDE 桌面环境)和 Xterm 等。
    • 这些终端模拟器提供了丰富的功能,如标签页、分屏、自定义字体和颜色等,方便用户同时管理多个命令行会话。

基本操作

image-20250306160710249

  • 命令输入与执行:打开终端后,会看到一个命令提示符,通常包含用户名、主机名和当前工作目录等信息。在提示符后面输入命令,然后按下回车键即可执行该命令。例如,输入 ls 命令可以列出当前目录下的文件和文件夹。
  • 命令历史记录:终端会保存用户输入过的命令历史记录。可以使用上下箭头键在历史记录中切换,重复执行之前输入过的命令,提高操作效率。
  • 快捷键使用:终端支持许多快捷键,如 Ctrl + C 用于中断当前正在执行的命令,Ctrl + D 用于退出当前终端会话,Ctrl + L 用于清屏等。

终端的应用

  • 系统管理:系统管理员可以通过终端执行各种系统管理任务,如用户账户管理、文件权限设置、服务启动和停止等。例如,使用 useradd 命令创建新用户,使用 chmod 命令修改文件权限。
  • 软件开发:开发者可以在终端中使用各种开发工具,如编译器、调试器等。例如,使用 gcc 编译器编译 C 语言程序,使用 gdb 调试程序。
  • 脚本编写与自动化:终端支持脚本语言,如 Bash 脚本。用户可以编写脚本文件,将一系列命令组合在一起,实现自动化任务。例如,编写一个备份脚本,定期备份重要文件。

自定义配置

  • 个性化设置:可以通过修改终端的配置文件来实现个性化设置,如更改字体、颜色方案、提示符样式等。以 GNOME Terminal 为例,可以在其设置中选择不同的主题和字体。
  • 环境变量配置:环境变量用于定义系统的运行环境,用户可以通过修改 ~/.bashrc~/.bash_profile 文件来配置自己的环境变量。例如,设置 PATH 环境变量,将自定义的脚本目录添加到系统的可执行路径中。

交互式终端

交互式终端是一种允许用户与计算机系统进行实时交互的界面,用户可以输入命令,系统会立即处理并返回相应的输出结果,以下从原理、特点、使用场景、与非交互式终端的对比等维度为你详细介绍:

工作原理

  • 输入处理:用户在交互式终端中输入命令,这些命令通常以文本形式呈现。终端会捕获用户的输入,并将其发送给操作系统的命令解释器(如 Linux 中的 shell)。
  • 命令执行:命令解释器接收到用户输入的命令后,会对其进行解析,确定要执行的程序或操作。然后,它会调用相应的程序,并将必要的参数传递给它。
  • 输出显示:程序执行完成后,会将输出结果返回给命令解释器。命令解释器再将输出结果发送给终端,终端将其显示给用户。

特点

  • 实时交互:用户可以即时输入命令并获得反馈,能够根据系统的响应及时调整操作。例如,在 Linux 终端中输入 ls 命令,系统会立即列出当前目录下的文件和文件夹。
  • 命令历史:大多数交互式终端会保存用户输入过的命令历史记录,用户可以使用上下箭头键快速访问之前输入的命令,方便重复执行或修改。
  • 可编辑输入:在输入命令时,用户可以使用编辑键(如删除、插入、移动光标等)对输入内容进行修改,避免重新输入整个命令。

使用场景

  • 系统管理:系统管理员可以通过交互式终端执行各种系统管理任务,如创建用户账户、配置网络、监控系统性能等。例如,在 Linux 系统中,管理员可以使用 useradd 命令创建新用户,使用 top 命令监控系统资源使用情况。
  • 软件开发:开发者在交互式终端中进行代码编译、调试和版本控制等操作。例如,使用 gcc 编译器编译 C 语言代码,使用 git 进行代码版本管理。
  • 数据处理与分析:数据分析师可以在交互式终端中使用各种数据处理工具和脚本语言进行数据清洗、转换和分析。例如,使用 awksed 等工具处理文本数据,使用 Python 脚本进行数据分析。

常见类型

  • 本地终端:直接连接到本地计算机的终端,用户可以在本地计算机上进行交互操作。例如,在 Linux 系统中,通过 Ctrl + Alt + F1 - F6 切换到的虚拟终端就是本地终端。
  • 远程终端:通过网络连接到远程计算机的终端,用户可以在本地通过网络远程操作远程计算机。常见的远程终端协议有 SSH(Secure Shell),用户可以使用 ssh 命令连接到远程服务器,并在远程服务器的交互式终端中进行操作。

与非交互式终端的对比

  • 交互性:交互式终端强调用户与系统的实时交互,用户可以随时输入命令并获得响应;而非交互式终端通常用于执行预先编写好的脚本或程序,不需要用户实时干预。
  • 使用目的:交互式终端主要用于需要用户实时决策和调整操作的场景,如系统管理和软件开发;非交互式终端则更适合批量处理任务,如自动化脚本执行和定时任务。

shell

Linux Shell

Shell 是用户与操作系统内核之间的接口程序,它为用户提供了一个操作界面,使用户能够方便地向操作系统内核发送指令,并获取相应的执行结果。以下从概念、类型、工作方式、常见命令和脚本编写等方面进行详细介绍:

概念

Shell 本质上是一个命令解释器,它接收用户输入的命令,对命令进行解析和处理,然后将处理后的指令传递给操作系统内核执行。同时,它还负责接收内核的执行结果,并将结果显示给用户。

常见类型

  • Bash(Bourne Again SHell)
    • 是 Linux 和 macOS 系统中最常用的 Shell,它是 Bourne Shell 的增强版,兼容 Bourne Shell 的语法,同时增加了许多新的特性和功能。
    • 提供了丰富的命令历史记录、命令补全、别名等功能,极大地提高了用户的操作效率。
  • Zsh(Z Shell)
    • 结合了多种 Shell 的优点,具有强大的自动补全功能、主题定制和插件系统。
    • 例如,在输入命令时,它可以根据上下文智能地补全命令、参数和文件名。
  • Fish(Friendly Interactive SHell)
    • 以用户友好和交互性强著称,具有语法高亮、自动建议等特性。
    • 当用户输入命令时,它会实时显示可能的命令补全建议,帮助用户更快地输入命令。
  • Sh(Bourne Shell)
    • 是最早的 Unix Shell,很多其他 Shell 都兼容它的语法。
    • 虽然功能相对较少,但在一些对资源要求较低的系统或脚本中仍然被广泛使用。

工作方式

  • 交互式:用户直接在 Shell 中输入命令,Shell 立即执行并返回结果。例如,在终端中输入 ls 命令,Shell 会列出当前目录下的文件和文件夹。
  • 非交互式:通过脚本文件的方式批量执行一系列命令。用户将多个命令编写在一个脚本文件中,然后让 Shell 执行该脚本文件。例如,编写一个备份脚本,定期执行文件备份操作。

image-20250306161217813

常见命令

  • 文件和目录操作
    • ls:列出目录内容。
    • cd:切换工作目录。
    • mkdir:创建新目录。
    • rm:删除文件或目录。
    • cp:复制文件或目录。
    • mv:移动或重命名文件或目录。
  • 系统信息查看
    • uname:显示系统信息。
    • df:显示磁盘使用情况。
    • top:实时监控系统资源使用情况。
  • 文本处理
    • cat:显示文件内容。
    • grep:在文件中查找指定的字符串。
    • sed:流编辑器,用于文本替换和处理。
    • awk:强大的文本处理工具,可用于数据提取和分析。

Shell 脚本编写

  • 脚本基础:Shell 脚本是由一系列 Shell 命令组成的文本文件,通常以 .sh 为扩展名。脚本文件的第一行通常指定使用的 Shell 类型,例如 #!/bin/bash
  • 变量和参数:可以在脚本中定义变量来存储数据,并通过参数传递数据给脚本。例如:
    #!/bin/bash
    name="John"
    echo "Hello, $name!"
    
  • 控制结构:支持条件语句(如 if-else)、循环语句(如 forwhile)等控制结构,用于实现复杂的逻辑。例如:
    #!/bin/bash
    for i in {1..5}; do
      echo $i
    done
    
  • 函数:可以在脚本中定义函数,将一些常用的代码封装起来,提高代码的复用性。例如:
    #!/bin/bash
    function add() {
      result=$(($1 + $2))
      echo $result
    }
    sum=$(add 3 5)
    echo "The sum is $sum"
    

主机名

image-20250306161356829

在 Ubuntu 系统中,主机名是用来标识计算机的名称,在网络通信、系统管理等方面发挥着重要作用。下面为你详细介绍 Ubuntu 主机名的相关内容,包括查看、临时修改、永久修改等操作。

查看主机名

在 Ubuntu 中有多种方式可以查看当前主机名:

  • 使用 hostname 命令:在终端中输入 hostname 并回车,系统会直接显示当前主机名。
    hostname
    
  • 查看 /etc/hostname 文件:这个文件专门存储了主机名信息。使用 cat 命令查看该文件内容,就能得到主机名。
    cat /etc/hostname
    

临时修改主机名

如果你只是想临时改变主机名,在本次系统运行期间生效,重启后恢复原来的主机名,可以使用 hostname 命令。

sudo hostname new_hostname

在上述命令中,将 new_hostname 替换为你想要设置的新主机名。不过要注意,这种修改方式在系统重启后会失效。

永久修改主机名

若要永久修改主机名,需要同时修改 /etc/hostname 文件和 /etc/hosts 文件,以下是具体步骤:

  1. 修改 /etc/hostname 文件:该文件存储了主机名,使用文本编辑器(如 nanovim)打开它并替换其中的内容为新的主机名。
    sudo nano /etc/hostname
    
    打开文件后,删除原有的主机名,输入新的主机名,然后按 Ctrl + X 组合键,接着按 Y 键确认保存,最后按回车键退出编辑器。
  2. 修改 /etc/hosts 文件:这个文件将主机名映射到 IP 地址,需要把其中旧的主机名替换为新的主机名。
    sudo nano /etc/hosts
    
    找到包含原主机名的行,将其替换为新的主机名。例如,原内容为 127.0.1.1 old_hostname,将其修改为 127.0.1.1 new_hostname。修改完成后,同样按 Ctrl + XY 和回车键保存并退出。
  3. 重启系统:完成上述两个文件的修改后,重启系统使新的主机名生效。
    sudo reboot
    

验证修改结果

系统重启后,再次使用 hostname 命令查看主机名,确认是否已成功修改为新的主机名。

hostname

注意事项

  • 在修改主机名时,要确保新的主机名符合命名规范,通常只能包含字母、数字、连字符,且不能以连字符开头或结尾。
  • 若你的 Ubuntu 系统连接到了网络域环境,修改主机名可能还需要在域控制器上进行相应的配置,以确保网络服务的正常运行。

命令提示符

image-20250306161549152

在 Ubuntu 系统中,命令提示符是用户在终端中输入命令时看到的提示信息,它能提供关于当前用户、主机以及工作目录等重要信息。以下为你详细介绍其相关内容:

命令提示符的组成

在默认情况下,Ubuntu 使用的是 Bash shell,其命令提示符通常包含以下几个部分:

  • 用户名:显示当前登录用户的名称,这能让用户清楚知道是以哪个身份在操作系统中进行操作。例如,若用户名为 john,那么在命令提示符中会显示 john
  • 主机名:标识当前所在的计算机名称。它有助于在多台计算机组成的网络环境中,用户明确自己操作的是哪一台主机。比如主机名为 ubuntu-pc,命令提示符里就会出现 ubuntu-pc
  • 当前工作目录:指示用户当前所在的文件系统目录。这对于文件操作非常重要,用户可以根据这个信息知道自己在文件系统中的位置。例如,当前处于 home 目录下的 john 文件夹,会显示为 ~(代表用户主目录)或者 /home/john
  • 提示符符号:一般情况下,普通用户的提示符符号是 $,而超级用户(root 用户)的提示符符号是 #。这用于区分不同的用户权限,普通用户只能进行一些受限的操作,而 root 用户拥有最高权限,可以对系统进行全方位的管理和修改。

默认的命令提示符格式看起来类似这样:

john@ubuntu-pc:~$

修改命令提示符

用户可以根据自己的需求修改命令提示符的显示格式,这主要通过修改环境变量 PS1 来实现。以下是具体的操作方法:

临时修改

在当前终端会话中临时修改命令提示符,只需在终端中直接输入 PS1 变量的新值。例如,将命令提示符修改为只显示当前工作目录和提示符符号:

PS1="\w$ "

在这个例子中,\w 是一个转义序列,表示当前工作目录。输入上述命令后,命令提示符会立即改变,但这种修改只在当前终端会话中有效,关闭终端后就会恢复到原来的设置。

永久修改

若要永久修改命令提示符,需要编辑用户主目录下的 .bashrc 文件。以下是具体步骤:

  1. 使用文本编辑器(如 nanovim)打开 .bashrc 文件:
    nano ~/.bashrc
    
  2. 在文件中找到设置 PS1 变量的部分,或者在文件末尾添加新的 PS1 设置。例如,添加以下内容可以让命令提示符显示当前时间、用户名、主机名、工作目录和提示符符号:
    PS1="[\t] \u@\h:\w$ "
    
    在这个新的 PS1 设置中,\t 表示当前时间,\u 表示用户名,\h 表示主机名,\w 表示当前工作目录。
  3. 保存并关闭文件。在 nano 编辑器中,按 Ctrl + X,然后按 Y 确认保存,最后按回车键退出。
  4. 使修改生效。可以通过重新加载 .bashrc 文件或者重新启动终端来实现:
    source ~/.bashrc
    

常用的转义序列

在设置 PS1 时,可以使用各种转义序列来显示不同的信息,以下是一些常用的转义序列: | 转义序列 | 含义 | | -------- | -------------------------------------------- | | \d | 显示日期,格式为“星期 月 日” | | \h | 显示主机名的第一部分 | | \H | 显示完整的主机名 | | \j | 显示当前 shell 中的作业数量 | | \l | 显示当前终端设备名 | | \n | 换行符 | | \s | 显示 shell 的名称 | | \t | 显示 24 小时制的时间,格式为“HH:MM:SS” | | \T | 显示 12 小时制的时间,格式为“HH:MM:SS” | | \@ | 显示 12 小时制的时间,格式为“HH:MM AM/PM” | | \u | 显示当前用户名 | | \v | 显示 bash 的版本号 | | \V | 显示 bash 的版本号(包括补丁级别) | | \w | 显示当前工作目录的完整路径 | | \W | 显示当前工作目录的最后一个文件夹名 | | \\$ | 若为普通用户显示 $,若为 root 用户显示 # |

PS1变量

普通用户

parallels@ansible-01:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

root用户

root@ansible-01:~# echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

在 Ubuntu 系统里,PS1 变量用于定义命令提示符的显示格式。下面为你提供不同风格和功能需求的 PS1 变量设置案例。

简约风格

若你追求简洁,希望命令提示符仅显示当前工作目录和提示符符号,可以使用如下设置:

PS1="\w$ "
  • 解释\w 是转义序列,代表当前工作目录的完整路径;$ 是普通用户的提示符符号;空格用于分隔内容。
  • 效果示例:若当前工作目录是 /home/user/Documents,命令提示符会显示为:
    /home/user/Documents$
    

包含时间信息

如果你需要在命令提示符中显示当前时间,方便记录操作时间,可以这样设置:

PS1="[\t] \u@\h:\w$ "
  • 解释[\t] 表示将当前 24 小时制的时间(格式为 HH:MM:SS)用方括号括起来显示;\u 代表当前用户名;\h 表示主机名的第一部分;: 是分隔符;\w 是当前工作目录;$ 是普通用户的提示符符号。
  • 效果示例:假设当前时间是 14:30:15,用户名是 user,主机名是 ubuntu-pc,当前工作目录是 /home/user,命令提示符会显示为:
    [14:30:15] user@ubuntu-pc:/home/user$
    

彩色显示

为了让命令提示符更加醒目,可以使用 ANSI 转义序列来设置颜色。以下是一个彩色显示用户名、主机名和工作目录的设置示例:

PS1="\[\e[32m\]\u\[\e[0m\]@\[\e[36m\]\h\[\e[0m\]:\[\e[33m\]\w\[\e[0m\]$ "
  • 解释
    • \[\e[32m\] 表示将后续文本颜色设置为绿色,\u 是用户名,\[\e[0m\] 用于恢复默认颜色。
    • @ 是分隔符。
    • \[\e[36m\] 把主机名颜色设置为青色,\h 是主机名,再用 \[\e[0m\] 恢复默认颜色。
    • : 是分隔符。
    • \[\e[33m\] 将工作目录颜色设置为黄色,\w 是工作目录,最后用 \[\e[0m\] 恢复默认颜色。
    • $ 是普通用户的提示符符号。
  • 效果示例:用户名 user 显示为绿色,主机名 ubuntu-pc 显示为青色,工作目录 /home/user 显示为黄色,提示符符号为默认颜色。

显示 Git 分支信息

如果你经常使用 Git 进行版本控制,希望在命令提示符中显示当前 Git 仓库的分支信息,可以借助 git-prompt.sh 脚本。首先,确保系统中安装了 Git,然后按以下步骤操作:

  1. 下载并启用 git-prompt.sh 脚本:
    wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
    echo "source ~/.git-prompt.sh" >> ~/.bashrc
    
  2. 修改 PS1 变量:
    PS1='\[\e[32m\]\u\[\e[0m\]@\[\e[36m\]\h\[\e[0m\]:\[\e[33m\]\w\[\e[0m\]$(__git_ps1 " (%s)")\$ '
    
  3. 解释$(__git_ps1 " (%s)") 会调用 git-prompt.sh 脚本中的函数,若当前目录是一个 Git 仓库,会显示当前的分支名,并用括号括起来。
  4. 效果示例:在一个名为 project 的 Git 仓库的 master 分支下,命令提示符可能显示为:
    user@ubuntu-pc:/home/user/project (master)$
    

远程连接ubuntu

image-20250306162003455

image-20250306162020087

在Ubuntu系统中,可通过openssh-server实现远程连接,以便在本地计算机上对远程的Ubuntu服务器进行操作。以下详细介绍如何配置和使用openssh-server进行远程连接:

安装 openssh-server

若Ubuntu系统尚未安装openssh-server,可按以下步骤进行安装:

  1. 更新软件包列表:打开终端,执行以下命令更新软件包列表,确保能获取到最新的软件包信息。
    sudo apt update
    
  2. 安装 openssh-server:运行以下命令安装openssh-server
    sudo apt install openssh-server
    
  3. 验证服务状态:安装完成后,可使用以下命令验证openssh-server服务是否已启动。
    sudo systemctl status ssh
    
    若服务已启动,会看到类似“Active: active (running)”的信息。若服务未启动,可使用以下命令启动它:
    sudo systemctl start ssh
    
    若希望openssh-server在系统启动时自动启动,可执行以下命令:
    sudo systemctl enable ssh
    

配置防火墙

若系统启用了防火墙(如ufw),需要开放SSH服务的端口(默认为22),以允许远程连接。执行以下命令开放端口:

sudo ufw allow ssh

或者指定端口号开放(若SSH服务使用了非默认端口):

sudo ufw allow 2222/tcp  # 假设SSH服务使用2222端口

然后重新加载防火墙规则:

sudo ufw reload

客户端远程连接

使用 SSH 命令(适用于 Linux、macOS 或 Windows 10 及以上版本的 PowerShell 或 WSL)

  1. 获取远程服务器的 IP 地址:在远程Ubuntu服务器的终端中,使用ip addr命令查看其 IP 地址。
  2. 在客户端执行连接命令:打开本地终端,输入以下命令进行远程连接,将username替换为远程服务器的用户名,server_ip替换为远程服务器的 IP 地址。
    ssh username@server_ip
    
    例如,若用户名是ubuntu,服务器 IP 地址是192.168.1.100,则命令为:
    ssh ubuntu@192.168.1.100
    
  3. 输入密码:首次连接时,系统会提示确认服务器的 SSH 密钥指纹,输入yes确认。然后输入远程服务器用户的密码,验证通过后即可成功连接。

使用 PuTTY(适用于 Windows 系统)

  1. 下载并安装 PuTTY:从 PuTTY 官方网站 下载并安装 PuTTY。
  2. 配置连接信息:打开 PuTTY,在“Host Name (or IP address)”字段中输入远程服务器的 IP 地址,在“Port”字段中输入 SSH 端口号(默认为 22),在“Connection type”中选择“SSH”。
  3. 保存配置(可选):若希望下次连接时方便使用,可以在“Saved Sessions”中输入一个名称,然后点击“Save”保存配置。
  4. 开始连接:点击“Open”按钮,首次连接时会弹出确认 SSH 密钥指纹的窗口,点击“是”确认。然后输入远程服务器用户的密码,验证通过后即可连接到远程服务器。

使用密钥对认证(可选)

为了提高远程连接的安全性,可使用密钥对认证替代密码认证。以下是具体步骤:

  1. 生成密钥对:在客户端终端中,使用ssh-keygen命令生成密钥对。
    ssh-keygen -t rsa
    
    按照提示操作,可选择保存密钥的位置和设置密码(可选)。生成的密钥对包括私钥(默认为~/.ssh/id_rsa)和公钥(默认为~/.ssh/id_rsa.pub)。
  2. 将公钥复制到远程服务器:使用ssh-copy-id命令将公钥复制到远程服务器。
    ssh-copy-id username@server_ip
    
    输入远程服务器用户的密码,验证通过后,公钥会被复制到远程服务器的~/.ssh/authorized_keys文件中。
  3. 使用密钥对进行连接:之后再次连接远程服务器时,无需输入密码,系统会自动使用私钥进行认证。
    ssh username@server_ip
    

执行命令过程

在 Ubuntu 系统中,当用户在终端输入命令并按下回车键后,系统会经历一系列步骤来处理和执行该命令。下面详细介绍这个过程:

1. 命令读取

  • 终端捕获输入:用户在终端中输入命令,终端程序会捕获用户敲击键盘输入的字符序列。例如,当你在终端输入 ls -l 时,终端会将这串字符记录下来。
  • 缓冲区处理:输入的命令会先存储在终端的输入缓冲区中,直到用户按下回车键。按下回车键表示用户完成了命令输入,终端会将缓冲区中的内容传递给 shell 进行处理。

2. 命令解析

  • shell 接收命令:shell(如 Bash)是 Ubuntu 中默认的命令解释器,它接收到终端传递过来的命令字符串后,会对其进行解析。
  • 分词处理:shell 首先会根据空格、制表符等分隔符将命令字符串分割成多个单词(token)。对于 ls -l 这个命令,shell 会将其分割为两个单词:ls-l
  • 识别命令和参数:shell 会判断分割后的第一个单词为要执行的命令,后续的单词为该命令的参数。在 ls -l 中,ls 是要执行的命令,-l 是传递给 ls 命令的参数,用于指定以长格式显示文件和目录信息。

3. 命令查找

  • 内置命令检查:shell 会首先检查输入的命令是否为内置命令。内置命令是 shell 自身实现的命令,无需调用外部程序。例如,cd(切换目录)、echo(输出文本)等都是内置命令。如果是内置命令,shell 会直接执行相应的代码逻辑。
  • 路径查找:如果命令不是内置命令,shell 会根据 PATH 环境变量指定的路径来查找该命令对应的可执行文件。PATH 环境变量是一个由多个目录路径组成的列表,目录之间用冒号分隔。例如,常见的 PATH 变量可能包含 /usr/bin/bin 等目录。shell 会按照 PATH 中目录的顺序依次查找是否存在与命令名称匹配的可执行文件。对于 ls 命令,shell 会在 PATH 指定的目录中找到 /bin/ls 这个可执行文件。

4. 命令执行

  • 创建子进程:一旦找到要执行的命令对应的可执行文件,shell 会创建一个新的子进程来执行该命令。子进程是父进程(shell)的一个副本,拥有独立的内存空间和执行环境。
  • 加载可执行文件:子进程会使用 exec 系列系统调用将指定的可执行文件加载到自己的内存空间中,并替换掉原来的程序代码,开始执行新的程序。例如,对于 ls 命令,子进程会加载 /bin/ls 可执行文件并开始执行其中的代码。
  • 传递参数:在执行命令时,子进程会将之前解析得到的命令参数传递给可执行文件。这些参数会作为程序的输入,影响程序的行为。例如,ls -l 中的 -l 参数会让 ls 程序以长格式显示文件和目录信息。

5. 结果输出

  • 标准输出和标准错误输出:命令执行过程中产生的正常输出会发送到标准输出(stdout),错误信息会发送到标准错误输出(stderr)。默认情况下,标准输出和标准错误输出都会显示在终端上。例如,ls -l 命令执行后,会将当前目录下的文件和目录的详细信息输出到终端。
  • 重定向和管道:用户可以使用重定向符号(如 >>><)和管道符号(|)来改变输出的流向或对输出进行进一步处理。例如,ls -l > files.txt 会将 ls -l 命令的输出重定向到 files.txt 文件中;ls -l | grep ".txt" 会将 ls -l 命令的输出通过管道传递给 grep 命令,只显示包含 .txt 的行。

6. 进程状态和返回值

  • 等待子进程结束:父进程(shell)会等待子进程执行完毕。在子进程执行期间,父进程可以继续执行其他任务(如处理其他输入),也可以选择阻塞等待子进程结束。
  • 获取返回值:子进程执行完毕后,会返回一个退出状态码给父进程。这个状态码通常用于表示命令执行的结果,0 表示命令执行成功,非 0 值表示命令执行过程中出现了错误。父进程可以通过检查这个返回值来判断命令是否执行成功,并根据需要进行相应的处理。例如,在脚本中可以根据命令的返回值来决定后续的执行流程。

内置,外置命令

你想问的可能是 Ubuntu 系统的内置命令和外置命令,下面为你详细介绍它们的相关信息:

内置命令

定义

内置命令是 shell 程序本身所包含的命令,它们是 shell 解释器的一部分,无需借助外部的可执行文件就能运行。当你在终端输入内置命令时,shell 会直接执行其内部预先编写好的代码逻辑。

特点

  • 执行速度快:由于不需要创建新的进程来加载外部程序,内置命令的执行速度相对较快。
  • 依赖 shell 环境:内置命令的功能和行为与具体的 shell 紧密相关,不同的 shell 可能对内置命令的实现有所差异。

常见内置命令及示例

  • cd:用于切换当前工作目录。
    cd /home/user/Documents  # 切换到指定目录
    cd ..  # 返回上一级目录
    
  • echo:用于在终端输出文本信息。
    echo "Hello, Ubuntu!"  # 输出指定的字符串
    
  • export:用于设置或修改环境变量。
    export PATH=$PATH:/usr/local/bin  # 将 /usr/local/bin 添加到 PATH 环境变量中
    
  • alias:用于创建命令别名,简化复杂命令的输入。
    alias ll='ls -l'  # 创建一个名为 ll 的别名,执行 ll 相当于执行 ls -l
    

外置命令

定义

外置命令是独立于 shell 之外的可执行文件,它们通常存放在系统的特定目录中,如 /bin/usr/bin/sbin/usr/sbin 等。当你输入外置命令时,shell 需要在系统的文件系统中查找对应的可执行文件,并创建新的进程来加载和执行它。

特点

  • 功能丰富多样:外置命令可以是各种不同类型的程序,能够实现各种复杂的功能,如文件压缩、网络通信、系统管理等。
  • 需要查找可执行文件:shell 在执行外置命令前,需要根据 PATH 环境变量指定的路径来查找对应的可执行文件。

常见外置命令及示例

  • ls:用于列出目录中的文件和文件夹。
    ls -l  # 以长格式列出当前目录下的文件和文件夹
    ls -a  # 列出包括隐藏文件在内的所有文件
    
  • grep:用于在文件中查找指定的字符串。
    grep "example" file.txt  # 在 file.txt 文件中查找包含 "example" 的行
    
  • tar:用于文件的打包和压缩。
    tar -cvf archive.tar files/  # 将 files 目录打包成 archive.tar 文件
    tar -xvf archive.tar  # 解包 archive.tar 文件
    
  • ping:用于测试网络连接。
    ping www.google.com  # 向 www.google.com 发送 ICMP 数据包,测试网络连通性
    

区分内置命令和外置命令的方法

  • 使用 type 命令type 命令可以显示一个命令是内置命令还是外置命令。
    type cd  # 输出 "cd is a shell builtin",表明 cd 是内置命令
    type ls  # 输出 "ls is /bin/ls",表明 ls 是外置命令,其可执行文件位于 /bin 目录下
    
  • 查看命令文件位置:如果能在系统的文件系统中找到对应的可执行文件,那么该命令通常是外置命令;如果找不到对应的文件,且 type 命令显示为内置命令,则说明它是 shell 的内置命令。

Linux命令格式

在 Linux 系统中,命令是用户与操作系统进行交互的重要方式,大多数 Linux 命令都遵循一定的格式,通常由命令名、选项(可选)和参数(可选)三部分组成,下面为你详细介绍:

基本格式

command [options] [arguments]
  • command:这是必须要有的部分,代表要执行的具体命令名称,它对应着系统中的一个可执行程序或者 shell 内置命令。例如 ls 用于列出目录内容,cp 用于复制文件等。
  • [options]:选项是可选的,用来修改命令的默认行为或提供额外的功能。选项通常以一个或两个连字符开头,一个连字符后跟单个字符选项,两个连字符后跟长选项(通常是完整的英文单词)。例如,ls -l 中的 -l 就是一个选项,它让 ls 命令以长格式显示文件和目录信息;ls --all 中的 --all 是长选项,作用与 -a 相同,用于显示所有文件,包括隐藏文件。
  • [arguments]:参数也是可选的,它是命令操作的对象,比如文件、目录或其他数据。例如,cp file1.txt file2.txt 中,file1.txtfile2.txt 就是 cp 命令的参数,分别表示源文件和目标文件。

示例

单选项和单参数示例

ls -l Documents
  • 命令名ls,用于列出目录内容。
  • 选项-l,以长格式显示文件和目录信息,包括文件权限、所有者、大小、修改时间等。
  • 参数Documents,指定要列出内容的目录为 Documents

多选项和多参数示例

cp -r -v source_folder/ destination_folder/
  • 命令名cp,用于复制文件或目录。
  • 选项
    • -r:递归复制,用于复制目录及其包含的所有子目录和文件。
    • -v:详细模式,在复制过程中显示每个复制操作的信息。
  • 参数
    • source_folder/:源目录,即要复制的目录。
    • destination_folder/:目标目录,即复制到的目标位置。

长选项示例

grep --ignore-case "example" file.txt
  • 命令名grep,用于在文件中查找指定的字符串。
  • 选项--ignore-case,长选项,忽略大小写进行搜索。
  • 参数
    • "example":要查找的字符串。
    • file.txt:要在其中进行查找的文件。

特殊符号和通配符

  • 通配符:在参数部分,经常会使用通配符来匹配多个文件或目录。常见的通配符有:
    • *:匹配任意数量(包括零个)的任意字符。例如,ls *.txt 会列出当前目录下所有扩展名为 .txt 的文件。
    • ?:匹配单个任意字符。例如,ls file?.txt 会列出当前目录下文件名以 file 开头,后面跟一个任意字符,扩展名为 .txt 的文件。
    • []:匹配方括号内指定的任意一个字符。例如,ls [abc]* 会列出当前目录下文件名以 abc 开头的所有文件。
  • 管道符号 |:用于将一个命令的输出作为另一个命令的输入。例如,ls -l | grep ".txt" 会先使用 ls -l 命令列出当前目录下的文件和目录信息,然后将这些信息通过管道传递给 grep 命令,只显示包含 .txt 的行。
  • 重定向符号
    • >:将命令的输出重定向到一个文件中,如果文件已存在则会覆盖其内容。例如,ls > files.txt 会将 ls 命令的输出保存到 files.txt 文件中。
    • >>:将命令的输出追加到一个文件的末尾。例如,echo "Hello" >> message.txt 会将 "Hello" 追加到 message.txt 文件的末尾。
    • <:将文件内容作为命令的输入。例如,sort < numbers.txt 会对 numbers.txt 文件中的内容进行排序。

常用命令

Linux 系统有丰富的命令,可满足不同场景下的使用需求,以下从文件与目录管理、文件内容查看与编辑、权限管理、系统管理、网络管理等方面为你介绍常用的命令:

文件与目录管理

  • ls:列出目录内容。
    • -l:以长格式显示,能查看文件的权限、所有者、大小、修改时间等详细信息。
    • -a:显示所有文件,包括隐藏文件(以 . 开头的文件)。
    • 示例:ls -la 会以长格式显示当前目录下的所有文件和文件夹。
  • cd:切换当前工作目录。
    • cd /path/to/directory:切换到指定的绝对路径目录。
    • cd ..:返回上一级目录。
    • cd ~:回到当前用户的主目录。
  • mkdir:创建新目录。
    • mkdir new_directory:创建名为 new_directory 的目录。
    • -p:可以递归创建目录,即如果父目录不存在也会一并创建。例如 mkdir -p a/b/c 会依次创建 aa/ba/b/c 目录。
  • rm:删除文件或目录。
    • rm file.txt:删除名为 file.txt 的文件。
    • -r:递归删除目录及其内容,如 rm -r directory 会删除 directory 目录及其包含的所有子目录和文件。
    • -f:强制删除,不提示确认信息。
  • cp:复制文件或目录。
    • cp source_file destination_file:将 source_file 复制为 destination_file
    • cp -r source_directory destination_directory:递归复制目录及其内容。
  • mv:移动文件或目录,也可用于重命名。
    • mv file.txt new_location/:将 file.txt 移动到 new_location 目录下。
    • mv old_name.txt new_name.txt:将 old_name.txt 重命名为 new_name.txt

文件内容查看与编辑

  • cat:显示文件内容。
    • cat file.txt:将 file.txt 的内容一次性全部输出到终端。
    • 还可用于合并文件,如 cat file1.txt file2.txt > combined.txt 会将 file1.txtfile2.txt 的内容合并到 combined.txt 中。
  • moreless:分页查看文件内容。
    • more file.txt:以分页方式显示 file.txt 的内容,按 Space 键翻页,按 Enter 键逐行向下查看。
    • less file.txt:功能比 more 更强大,支持向前和向后翻页,还可使用搜索功能。按 / 键后输入关键词可进行搜索。
  • grep:在文件中查找指定的字符串。
    • grep "pattern" file.txt:在 file.txt 中查找包含 "pattern" 的行。
    • -i:忽略大小写进行搜索;-r:递归搜索目录下的所有文件。
  • nanovim:文本编辑器。
    • nano file.txtnano 是一个简单易用的文本编辑器,适合初学者。打开文件后可直接编辑,按 Ctrl + X 组合键退出,按提示选择是否保存修改。
    • vim file.txt:功能强大但学习曲线较陡。vim 有命令模式、插入模式和底行模式。进入文件后默认是命令模式,按 i 键进入插入模式进行编辑,编辑完成后按 Esc 键回到命令模式,输入 :wq 保存并退出,输入 :q! 不保存直接退出。

权限管理

  • chmod:修改文件或目录的权限。
    • chmod u+x file.sh:为文件所有者添加可执行权限。
    • 权限分为读(r)、写(w)、执行(x),可使用数字表示权限,如 chmod 755 file.sh 表示所有者有读、写、执行权限,群组用户和其他用户有读和执行权限。
  • chown:更改文件或目录的所有者和所属群组。
    • chown user:group file.txt:将 file.txt 的所有者更改为 user,所属群组更改为 group

系统管理

  • ps:查看当前运行的进程。
    • ps aux:显示所有用户的所有进程信息。
    • 结合 grep 可筛选特定进程,如 ps aux | grep firefox 可查看与 firefox 相关的进程。
  • tophtop:实时监控系统资源使用情况。
    • top:显示系统中各个进程的资源占用情况,按 q 键退出。
    • htop:界面更友好,功能更丰富,需要先安装(部分系统默认未安装)。
  • df:查看磁盘使用情况。
    • df -h:以人类可读的格式显示磁盘分区的使用情况,如以 KMG 为单位。
  • du:查看文件或目录的磁盘使用情况。
    • du -sh directory:以人类可读的格式显示 directory 目录及其子目录的总大小。

网络管理

  • ping:测试网络连接。
    • ping www.google.com:向 www.google.com 发送 ICMP 数据包,测试与该主机的网络连通性。
  • ifconfigip:查看和配置网络接口信息。
    • ifconfig:可显示网络接口的详细信息,如 IP 地址、子网掩码等。不过在一些较新的 Linux 系统中,逐渐被 ip 命令取代。
    • ip addr show:显示网络接口的 IP 地址信息;ip link set eth0 up 可启用名为 eth0 的网络接口。
  • ssh:远程连接到其他 Linux 主机。
    • ssh user@host:以 user 身份连接到 host 主机。如果需要使用非默认端口,可使用 -p 选项,如 ssh -p 2222 user@host
Copyright © www.yuchaoit.cn 2025 all right reserved,powered by Gitbook作者:于超 2025-03-06 16:43:06

results matching ""

    No results matching ""