在本文中,我将分享一些优化 Linux 工作环境的技巧。 我们在这里要介绍的所有内容都代表了我个人每天实施和使用的内容。 我们将探索设置多重访问 SSH
,定制我们的命令行界面 CLI
和 bash
,以及如何放弃使用 zsh
等 Oh My Zsh
。
在 Linux 环境中设置多个 SSH 访问
对于第一个技巧,我们将重点关注 SSH
。 您可能已经有多次访问权限 SSH
具有不同的登录信息,例如服务器地址、用户、私钥和公钥等。 你可能用过 SSH
通过指定所有连接信息,如下例所示:
ssh -i path-to-ssh-public-key user@host:port
如果您可以多次访问不同的服务器 SSH
,你可能需要做类似的事情:
ssh -i path-to-ssh-public-key-server-1 user-server-1@host-server-1:port-server-1 ssh -i path-to-ssh-public-key-server-2 user-server-2@host-server-2:port-server-2 ssh -i path-to-ssh-public-key-server-3 user-server-3@host-server-3:port-server-3
如果你有点懒的话,你可能已经配置了一些 aliases
。 这很好,但不是最佳的! 我们将看到如何配置我们的客户端 SSH
为了简化这一切。 开始了 !
首先,您将创建文件 .ssh/config
具有以下权限: 0600
或者,如果您愿意, - rw- --- ---
。 然后您将使用您最喜欢的编辑器对其进行编辑: 维姆。 😉
在此文件中,我们将添加配置块 ssh
如下:
Host <
> Property value Property value
你看,一点也不复杂! 让我们举一个更具体的帐户示例 Gitlab
自托管,一个帐户 Gitlab
, 一个帐户 Github
,以及对虚拟服务器的两次访问:
Host my-private-gitlab.com PreferredAuthentications publickey User git HostName my-private-gitlab.com IdentityFile ~/.ssh/id_my-private-gitlab.com Host github User git HostName github.com IdentityFile ~/.ssh/id_github.com Host gitlab PreferredAuthentications publickey User git HostName gitlab.com IdentityFile ~/.ssh/id_gitlab.com Host my-private-server-1 User root HostName my-private-server-1.com IdentityFile ~/.ssh/id_my-private-server.com Host my-private-server-2 User root HostName my-private-server-2.com IdentityFile ~/.ssh/id_my-private-server.com
在这里,我们为每个配置块设置属性 Host
, User
, HostName
, IdentityFile
并且,在这种情况下 GitLab, PreferredAuthentications
。
就这样吧! 如果我们测试连接 吉图布 等 GitLab,它给出了:
# Test de connexion github $ ssh -i ~/.ssh/id_github.com -T [email protected] Hi nicolas-grevin! You've successfully authenticated, but GitHub does not provide shell access. $ ssh -T github Hi nicolas-grevin! You've successfully authenticated, but GitHub does not provide shell access. # Test de connexion gitlab $ ssh -i ~/.ssh/id_gitlab.com -T [email protected] Welcome to GitLab, @ngrevin! $ ssh -T gitlab Welcome to GitLab, @ngrevin!
一切正常,我们可以看到该属性 Host
充当“别名” SSH
允许您使用特定的配置。 所以这个命令 ssh -i ~/.ssh/id_gitlab.com -T [email protected]
归结为做 ssh gitlab.com
。
我仍然建议输入您想要的别名,以及整个主机的地址,以避免与第三方程序出现任何连接问题。 特别是因为该属性接受多个值。
更进一步,您可以通过拆分配置块来共享配置。 这是一个例子:
Host my-private-gitlab github gitlab my-private-gitlab.com github.com gitlab.com User git Host my-private-gitlab gitlab my-private-gitlab.com gitlab.com PreferredAuthentications publickey Host my-private-gitlab my-private-gitlab.com HostName my-private-gitlab.com IdentityFile ~/.ssh/id_my-private-gitlab.com Host github github.com HostName github.com IdentityFile ~/.ssh/id_github.com Host gitlab gitlab.com HostName gitlab.com IdentityFile ~/.ssh/id_gitlab.com* Host my-private-server-1 my-private-server-2 my-private-server-1.com my-private-server-2.com User root IdentityFile ~/.ssh/id_my-private-server.com Host my-private-server-1 my-private-server-1.com HostName my-private-server-1.com Host my-private-server-2 my-private-server-2.com HostName my-private-server-2.com
这避免了每个块中的重复属性,同时保留了重写属性的可能性。 好了,现在您知道如何配置客户端了 SSH
。 如果您想进一步了解,这里是完整的 ssh_config 文档: 男人 openBSD ssh_config。
配置您的 CLI
在我们深入讨论问题的核心之前,让我们先澄清一些定义。
和 terminal
是位于计算机网络末端的物理设备(电话、计算机)。 A émulateur de terminal
是允许我们执行命令行与操作系统交互的软件。 为了简单起见,通常将其称为 terminal
。 和 shell
是提供操作系统用户界面的软件。 从字面上看,它是外壳(shell
)的核(kernel
)Linux。 它有两种形式:
- 这
CLI (Command Line Interface)
这是一个命令行界面。 - 这
GUI (Graphical User Interface)
这是一个图形界面。
因此,为了概括这一切,我们有 terminal
其中包含 kernel
Linux。 这 kernel
提供了一个 shell
与他沟通。 这 shell
可以是 GUI GUI
命令行界面 CLI
。 终端仿真器是一个图形化软件,允许您执行命令行。
flowchart LR
subgraph Terminal
subgraph Kernel
subgraph Shell
GUI
CLI
end
end
end
et[Émulateur de terminal]
GUI --> et
et --> CLI
这样就完成了小除尘工作。 适合émulateur de terminal
,我们将使用简单且常见的形式,即 terminal
。 现在,让我们进入问题的核心:配置您的 CLI
和 bash
。 我们将发现配置文件以及良好实践,以免丢失您的配置。
在 Linux 系统上,有两个文件需要了解: ~/.profile
(或者 ~/.bash_profile
)等 ~/.bashrc
。 这就是它们的用途。 文件 ~/.profile
(或者 ~/.bash_profile
取决于 Linux 发行版)在打开登录 shell 时执行。 这意味着仅当登录用户打开 shell 时才会执行该文件。 文件 ~/.bashrc
在打开非登录 shell 时执行,与文件不同 ~/.profile
。 它用于未登录的用户。
当您启动终端时,该文件 ~/.profile
被收费。 并且在文件中 ~/.profile
,您会发现以下几行表明该文件 .bashrc 如果找到则加载。 以下是这几行:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
以下是发生的情况的示意图:
flowchart LR
subgraph shell
subgraph login
direction TB
sl{{Start}}-->|1st load|pl[~/.profile]
sl-->|2nd load|bl[~/.bashrc]
end
subgraph non-login
direction TB
snl{{Start}}-->|1st load|bnl[~/.bashrc]
end
end
现在我们已经了解了它是如何工作的,这是一个“好的实践”,至少是我用来在重新安装时能够重用我的配置的实践。 我创建一个文件 ~/.bashrc
个性化,我在其中配置不同的程序,并将其包含在我的 ~/.profile
。
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
if [ -f "$HOME/.bashrc_custom" ]; then
. "$HOME/.bashrc_custom"
fi
fi
这是我的文件的开头 ~/.bashrc_custom
:
# /* vim: set filetype=sh : */
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]
then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ]
then
PATH="$HOME/.local/bin:$PATH"
fi
# set PATH so it includes user's private npm-global if it exists
if [ -d "$HOME/.npm-global" ]
then
PATH="$HOME/.npm-global/bin:$PATH"
fi
# ...
如果我们采用包含此文件的上图,则其外观如下:
flowchart LR
subgraph shell
subgraph login
direction TB
sl{{Start}}-->|1st load|pl[~/.profile]
sl-->|2nd load|bl[~/.bashrc]
sl-->|3rd load|bcl[~/.bashrc_custom]
end
subgraph non-login
direction TB
snl{{Start}}-->|1st load|bnl[~/.bashrc]
snl-->|2nd load|bcnl[~/.bashrc_custom]
end
end
正如您所看到的,没有什么非常复杂的,而是经过深思熟虑的切片逻辑。 该技术使得可以非常快速地进行版本控制和查找配置,这要归功于 要旨 来自 Github 或 片段 亚特实验室。
按照相同的除法逻辑,我们可以使用 bash 别名做同样的事情。 确实,在文件中 ~/.bashrc
,我们有几行加载文件 ~/.bash_别名。 至于我们之前的文件,我们可以对其进行版本控制并很快找到配置,这要归功于 要旨 来自 Github 或 片段 亚特实验室。
如果我们采用包含此文件的上图,则其外观如下:
flowchart LR
subgraph shell
subgraph login
direction TB
sl{{Start}}-->|1st load|pl[~/.profile]
sl-->|2nd load|bl[~/.bashrc]
bl-->|load|cal[~/.bash_aliases]
sl-->|3rd load|bcl[~/.bashrc_custom]
end
subgraph non-login
direction TB
snl{{Start}}-->|1st load|bnl[~/.bashrc]
bnl-->|load|canl[~/.bash_aliases]
snl-->|2nd load|bcnl[~/.bashrc_custom]
end
end
这就是我们的配置 CLI
和 bash
。
说停止 桀骜 等 哦我的Zsh 低Linux
经常看到很多人使用 zsh
等 Oh My Zsh
没有真正理解它是什么。
所以, zsh
或者 Z shell
是一个命令行 shell (CLI
) 作为 sh
, bash
, ksh
, ash
,以及许多其他人。 zsh
为您的产品添加功能 CLI
,包括完成订单、添加功能等等。
您真的打算使用以下功能吗 zsh
? 我怀疑是这样的! 此外,使用 zsh
编写 shell 脚本时可能会导致可移植性问题,因为您正在向命令行界面引入特定功能(CLI
)不是每个人都有。 这有点像创建一个为 Linux 系统设计但针对 Windows 用户的程序。 需要安装和使用 zsh
如果您选择的话,主要会出现 Oh My Zsh
。
如果你使用 Oh My Zsh
,然后使用 zsh
是强制性的。 Oh My Zsh
是一个配置管理框架 zsh
,并且它使用了一些特定的功能 zsh
提供扩展功能、主题和插件。 所以在这种情况下你真的别无选择,你必须使用 zsh
。 但是,如果您更喜欢使用 Bash 或任何其他 shell,则无需安装 zsh
或者 Oh My Zsh
。 这是个人喜好和具体需求的问题。
但为什么要使用 Oh My Zsh
? 拥有 300 个别名但只使用两个? 个性化您的终端?
我将向您展示两件事,让您能够以更简单的方式完成相同或更多的事情。
使用您的别名
我之前谈过。 但如果你想个性化你的 CLI
使用别名,您只需要创建一个文件 ~/.bash_aliases
并且您可以创建自己的别名。
莱斯插件 Oh My Zsh
大多数情况下,您必须学习定义别名,但实际上并不知道它们的用途。 自己看一下插件 历史。
因此,查看您最常使用的命令并在文件中创建您自己的别名 ~/.bash_aliases
。
提醒一下,别名的定义如下:
alias my_aliase_name='my_command and my args --or options'
一方面,您简化要执行的命令,另一方面,您自己定义所需的别名。 你有权力!
⚠️但是要小心别名! 太多的别名会杀死别名,并且您可能会不再了解基本命令,并且如果您必须在安装了最低限度的命令的服务器或您同事的计算机上执行操作,您就会面临迷失的风险。
使用 Starship 个性化您的终端
如果你使用 Oh My Zsh
为了个性化您的终端,您可能会使用现有的主题? 除非你是脚本专业人士 sh
或者 zsh
。 当您查看某些主题是如何完成时,您必须着迷于理解正在发生的事情(主题的示例 阿格诺斯特)。
prompt_status() {
local -a symbols
[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘"
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙"
[[ -n "$symbols" ]] && prompt_segment black default "$symbols"
}
如果您不是脚本专业人士,那么 星舰.rs 就在这里为您服务。 Starship
是一个用 Rust 开发的程序,可在 Linux、macOS 和 Windows 下使用,并且可以通过文件轻松安装和配置 TOML
。 对于 Linux,要安装 Starship
,你只需要运行几个命令:
curl -sS https://starship.rs/install.sh | sh
####
echo 'export STARSHIP_CONFIG=$HOME/.config/starship.toml' >> ~/.bashrc
echo 'export STARSHIP_CACHE=~/.starship/cache' >> ~/.bashrc
echo 'eval "$(starship init bash)"' >> ~/.bashrc
####
# Ou ajouter les lignes suivantes dans ~/.bashrc_custom
###
if command -v starship 1> /dev/null
then
export STARSHIP_CONFIG=$HOME/.config/starship.toml
export STARSHIP_CACHE=~/.starship/cache
eval "$(starship init bash)"
fi
您还需要下载图标包 书呆子前线 如果你愿意的话。
之后,您所要做的就是创建并实施该文件 ~/.config/starship.toml
,也可以对其进行版本控制。 以下是内存使用、时钟、命令执行时间和目录格式的示例配置。
[memory_usage]
format = "$symbol[${ram} - ${ram_pct}( | ${swap} - ${swap_pct})]($style) "
threshold = 0
symbol = " "
style = "bold dimmed white"
disabled = false
[time]
time_format = "%T"
format = "[](bold yellow) [$time](yellow) "
disabled = false
[cmd_duration]
min_time = 1_000
format = "[ $duration]($style) "
disabled = false
[directory]
truncation_length = 10
truncate_to_repo = true
format = "[$path]($style)[$lock_symbol]($lock_style) "
你的终端可能是这样的:
拉文档 非常丰富,已经开发出不同的模块,有很多可能性。
结论 :您已准备好改善您的 Linux 工作体验
以下是一些可以改善您在终端上的工作体验的提示。
要创造卓越的工作环境,还有很多需要探索的地方。 如果您想进一步深入研究,我建议您探索 文本编辑器 集成到您的终端中,例如 尼奥的 或者 月球病毒非盟 终端复用器 多路复用器d’探险家 l’隔离与隔离,当然,还要深入了解 脚本编写 壳。
即使您不是黑暗地下室中的大胡子男子,您也可以重新控制您的终端。 😜
来源