02-linux基础
Linux用户
Linux 用户是指使用基于 Linux 操作系统的人群,他们涵盖了广泛的领域和不同的使用目的,下面从用户类型、使用场景、面临的挑战等维度为你详细介绍:
用户类型
- 个人开发者:利用 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)是用户与操作系统进行交互的重要工具,它允许用户通过输入命令来执行各种操作。以下为你详细介绍:
基本概念
终端是一种字符界面,它提供了一个命令行环境,用户可以在其中输入文本命令,操作系统会解释并执行这些命令,然后将执行结果返回给用户显示。在 Linux 中,终端模拟了传统的物理终端设备,如电传打字机(Teletypewriter,简称 Teletype 或 TTY)。
常见类型
- 虚拟终端(Virtual Terminal)
- 在 Linux 系统中,通常可以通过快捷键(如 Ctrl + Alt + F1 - F6)切换到不同的虚拟终端。每个虚拟终端都是一个独立的命令行会话,用户可以在不同的虚拟终端上同时运行不同的任务。
- 例如,你可以在虚拟终端 1 上进行系统管理操作,在虚拟终端 2 上编译代码。
- 图形终端模拟器(Terminal Emulator)
- 当使用图形用户界面(GUI)时,需要借助图形终端模拟器来提供命令行界面。常见的图形终端模拟器有 GNOME Terminal(用于 GNOME 桌面环境)、Konsole(用于 KDE 桌面环境)和 Xterm 等。
- 这些终端模拟器提供了丰富的功能,如标签页、分屏、自定义字体和颜色等,方便用户同时管理多个命令行会话。
基本操作
- 命令输入与执行:打开终端后,会看到一个命令提示符,通常包含用户名、主机名和当前工作目录等信息。在提示符后面输入命令,然后按下回车键即可执行该命令。例如,输入
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
进行代码版本管理。 - 数据处理与分析:数据分析师可以在交互式终端中使用各种数据处理工具和脚本语言进行数据清洗、转换和分析。例如,使用
awk
、sed
等工具处理文本数据,使用 Python 脚本进行数据分析。
常见类型
- 本地终端:直接连接到本地计算机的终端,用户可以在本地计算机上进行交互操作。例如,在 Linux 系统中,通过 Ctrl + Alt + F1 - F6 切换到的虚拟终端就是本地终端。
- 远程终端:通过网络连接到远程计算机的终端,用户可以在本地通过网络远程操作远程计算机。常见的远程终端协议有 SSH(Secure Shell),用户可以使用
ssh
命令连接到远程服务器,并在远程服务器的交互式终端中进行操作。
与非交互式终端的对比
- 交互性:交互式终端强调用户与系统的实时交互,用户可以随时输入命令并获得响应;而非交互式终端通常用于执行预先编写好的脚本或程序,不需要用户实时干预。
- 使用目的:交互式终端主要用于需要用户实时决策和调整操作的场景,如系统管理和软件开发;非交互式终端则更适合批量处理任务,如自动化脚本执行和定时任务。
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 执行该脚本文件。例如,编写一个备份脚本,定期执行文件备份操作。
常见命令
- 文件和目录操作
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
)、循环语句(如for
、while
)等控制结构,用于实现复杂的逻辑。例如:#!/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"
主机名
在 Ubuntu 系统中,主机名是用来标识计算机的名称,在网络通信、系统管理等方面发挥着重要作用。下面为你详细介绍 Ubuntu 主机名的相关内容,包括查看、临时修改、永久修改等操作。
查看主机名
在 Ubuntu 中有多种方式可以查看当前主机名:
- 使用
hostname
命令:在终端中输入hostname
并回车,系统会直接显示当前主机名。hostname
- 查看
/etc/hostname
文件:这个文件专门存储了主机名信息。使用cat
命令查看该文件内容,就能得到主机名。cat /etc/hostname
临时修改主机名
如果你只是想临时改变主机名,在本次系统运行期间生效,重启后恢复原来的主机名,可以使用 hostname
命令。
sudo hostname new_hostname
在上述命令中,将 new_hostname
替换为你想要设置的新主机名。不过要注意,这种修改方式在系统重启后会失效。
永久修改主机名
若要永久修改主机名,需要同时修改 /etc/hostname
文件和 /etc/hosts
文件,以下是具体步骤:
- 修改
/etc/hostname
文件:该文件存储了主机名,使用文本编辑器(如nano
或vim
)打开它并替换其中的内容为新的主机名。
打开文件后,删除原有的主机名,输入新的主机名,然后按sudo nano /etc/hostname
Ctrl + X
组合键,接着按Y
键确认保存,最后按回车键退出编辑器。 - 修改
/etc/hosts
文件:这个文件将主机名映射到 IP 地址,需要把其中旧的主机名替换为新的主机名。
找到包含原主机名的行,将其替换为新的主机名。例如,原内容为sudo nano /etc/hosts
127.0.1.1 old_hostname
,将其修改为127.0.1.1 new_hostname
。修改完成后,同样按Ctrl + X
、Y
和回车键保存并退出。 - 重启系统:完成上述两个文件的修改后,重启系统使新的主机名生效。
sudo reboot
验证修改结果
系统重启后,再次使用 hostname
命令查看主机名,确认是否已成功修改为新的主机名。
hostname
注意事项
- 在修改主机名时,要确保新的主机名符合命名规范,通常只能包含字母、数字、连字符,且不能以连字符开头或结尾。
- 若你的 Ubuntu 系统连接到了网络域环境,修改主机名可能还需要在域控制器上进行相应的配置,以确保网络服务的正常运行。
命令提示符
在 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
文件。以下是具体步骤:
- 使用文本编辑器(如
nano
或vim
)打开.bashrc
文件:nano ~/.bashrc
- 在文件中找到设置
PS1
变量的部分,或者在文件末尾添加新的PS1
设置。例如,添加以下内容可以让命令提示符显示当前时间、用户名、主机名、工作目录和提示符符号:
在这个新的PS1="[\t] \u@\h:\w$ "
PS1
设置中,\t
表示当前时间,\u
表示用户名,\h
表示主机名,\w
表示当前工作目录。 - 保存并关闭文件。在
nano
编辑器中,按Ctrl + X
,然后按Y
确认保存,最后按回车键退出。 - 使修改生效。可以通过重新加载
.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,然后按以下步骤操作:
- 下载并启用
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
- 修改
PS1
变量:PS1='\[\e[32m\]\u\[\e[0m\]@\[\e[36m\]\h\[\e[0m\]:\[\e[33m\]\w\[\e[0m\]$(__git_ps1 " (%s)")\$ '
- 解释:
$(__git_ps1 " (%s)")
会调用git-prompt.sh
脚本中的函数,若当前目录是一个 Git 仓库,会显示当前的分支名,并用括号括起来。 - 效果示例:在一个名为
project
的 Git 仓库的master
分支下,命令提示符可能显示为:user@ubuntu-pc:/home/user/project (master)$
远程连接ubuntu
在Ubuntu系统中,可通过openssh-server
实现远程连接,以便在本地计算机上对远程的Ubuntu服务器进行操作。以下详细介绍如何配置和使用openssh-server
进行远程连接:
安装 openssh-server
若Ubuntu系统尚未安装openssh-server
,可按以下步骤进行安装:
- 更新软件包列表:打开终端,执行以下命令更新软件包列表,确保能获取到最新的软件包信息。
sudo apt update
- 安装
openssh-server
:运行以下命令安装openssh-server
。sudo apt install openssh-server
- 验证服务状态:安装完成后,可使用以下命令验证
openssh-server
服务是否已启动。
若服务已启动,会看到类似“Active: active (running)”的信息。若服务未启动,可使用以下命令启动它:sudo systemctl status ssh
若希望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)
- 获取远程服务器的 IP 地址:在远程Ubuntu服务器的终端中,使用
ip addr
命令查看其 IP 地址。 - 在客户端执行连接命令:打开本地终端,输入以下命令进行远程连接,将
username
替换为远程服务器的用户名,server_ip
替换为远程服务器的 IP 地址。
例如,若用户名是ssh username@server_ip
ubuntu
,服务器 IP 地址是192.168.1.100
,则命令为:ssh ubuntu@192.168.1.100
- 输入密码:首次连接时,系统会提示确认服务器的 SSH 密钥指纹,输入
yes
确认。然后输入远程服务器用户的密码,验证通过后即可成功连接。
使用 PuTTY(适用于 Windows 系统)
- 下载并安装 PuTTY:从 PuTTY 官方网站 下载并安装 PuTTY。
- 配置连接信息:打开 PuTTY,在“Host Name (or IP address)”字段中输入远程服务器的 IP 地址,在“Port”字段中输入 SSH 端口号(默认为 22),在“Connection type”中选择“SSH”。
- 保存配置(可选):若希望下次连接时方便使用,可以在“Saved Sessions”中输入一个名称,然后点击“Save”保存配置。
- 开始连接:点击“Open”按钮,首次连接时会弹出确认 SSH 密钥指纹的窗口,点击“是”确认。然后输入远程服务器用户的密码,验证通过后即可连接到远程服务器。
使用密钥对认证(可选)
为了提高远程连接的安全性,可使用密钥对认证替代密码认证。以下是具体步骤:
- 生成密钥对:在客户端终端中,使用
ssh-keygen
命令生成密钥对。
按照提示操作,可选择保存密钥的位置和设置密码(可选)。生成的密钥对包括私钥(默认为ssh-keygen -t rsa
~/.ssh/id_rsa
)和公钥(默认为~/.ssh/id_rsa.pub
)。 - 将公钥复制到远程服务器:使用
ssh-copy-id
命令将公钥复制到远程服务器。
输入远程服务器用户的密码,验证通过后,公钥会被复制到远程服务器的ssh-copy-id username@server_ip
~/.ssh/authorized_keys
文件中。 - 使用密钥对进行连接:之后再次连接远程服务器时,无需输入密码,系统会自动使用私钥进行认证。
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.txt
和file2.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]*
会列出当前目录下文件名以a
、b
或c
开头的所有文件。
- 管道符号
|
:用于将一个命令的输出作为另一个命令的输入。例如,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
会依次创建a
、a/b
和a/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.txt
和file2.txt
的内容合并到combined.txt
中。
more
和less
:分页查看文件内容。more file.txt
:以分页方式显示file.txt
的内容,按Space
键翻页,按Enter
键逐行向下查看。less file.txt
:功能比more
更强大,支持向前和向后翻页,还可使用搜索功能。按/
键后输入关键词可进行搜索。
grep
:在文件中查找指定的字符串。grep "pattern" file.txt
:在file.txt
中查找包含"pattern"
的行。-i
:忽略大小写进行搜索;-r
:递归搜索目录下的所有文件。
nano
和vim
:文本编辑器。nano file.txt
:nano
是一个简单易用的文本编辑器,适合初学者。打开文件后可直接编辑,按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
相关的进程。
top
和htop
:实时监控系统资源使用情况。top
:显示系统中各个进程的资源占用情况,按q
键退出。htop
:界面更友好,功能更丰富,需要先安装(部分系统默认未安装)。
df
:查看磁盘使用情况。df -h
:以人类可读的格式显示磁盘分区的使用情况,如以K
、M
、G
为单位。
du
:查看文件或目录的磁盘使用情况。du -sh directory
:以人类可读的格式显示directory
目录及其子目录的总大小。
网络管理
ping
:测试网络连接。ping www.google.com
:向www.google.com
发送 ICMP 数据包,测试与该主机的网络连通性。
ifconfig
和ip
:查看和配置网络接口信息。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
。