在Linux中使用.bashrc文件

某个时候,你肯定觉得你的 Linux 使用体验可以加点调味料。也许你遇到了重复的任务,或者希望命令行界面更流畅。那么,你知道吗?你的系统掌握了关键:`.bashrc` 文件,静静地藏在你的主目录中!

通过本教程深入了解`~/.bashrc` 文件的基本方面,改变你与 Linux 系统互动的方式。你正在正确的道路上,从定制命令提示符到自动化任务和设置个性化快捷方式。

告别单调的任务,拥抱更高效、更愉快的 Linux 使用体验!

先决条件

在玩弄`~/.bashrc` 文件之前,请确保具备以下条件以便跟随教程:

  • A Linux distribution is installed on your machine – This tutorial uses Ubuntu 20.04 LTS, but any other distribution works.
  • A non-root user with sudo privileges.

在 Linux 中,Bash 运行命令(.bashrc)文件是什么?

想象一下,在 Linux 中`~/.bashrc`文件就像是你房间里的一个秘密玩具盒。当你打开盒子时,这个玩具盒会为你准备并设置你喜欢的玩具。

但是因为`~/.bashrc`是一个秘密文件,所以当你运行ls命令时,它不会显示。除非你也指定显示隐藏文件,使用-la参数,如下所示。

ls -la

以下是列出的 .bashrc 文件,以及其他一些也是隐藏的文件。

Listing all files, including hidden ones, in the working directory (home)

定義自訂別名以快速執行命令

A short definition wouldn’t cut into realizing the ~/.bashrc file’s role in customizing your Linux experience. So, how does this file work exactly? When you crack open that ~/.bashrc file, one of the powerful tricks it lets you achieve is defining custom aliases for your favorite commands.

例如,不需要輸入 sudo apt-get update 來更新系統的本地套件索引,可以在 .bashrc 文件中定義一個具有相同功能的別名。

? 注意:本教程使用 root 帳戶運行命令(不推薦),以示系統配置等管理任務。但出於安全原因,確保在系統上執行類似操作時使用具有 sudo 權限的非 root 用戶。

要定義命令的別名,請按照以下步驟進行:

1. 通過您喜歡的編輯器(如 nanovim)打開您的家目錄(~/)中的 .bashrc 文件。

? 如果您使用的是非 root 帳戶,在運行需要提升權限的命令時,請在命令之前加上 sudo

nano ~/.bashrc

2. 然後,滾動到文件底部並定義目標命令(即 sudo apt-get update)的 alias(即 update),如下所示。

alias update='sudo apt-get update'

保存更改到文件,然後關閉編輯器。

Defining an alias in the .bashrc file

3.保存後,在終端中執行以下命令以source ~/.bashrc文件。此命令不會在終端中產生任何輸出,但會應用您的更改。

source ~/.bashrc

4.現在,運行您定義的update別名,並確認相應的命令(sudo apt-get update)執行。

update

下面的輸出確認了您的update別名像執行sudo apt-get update命令一樣,但按鍵較少。

Testing the newly defined alias (update)

編寫功能以增強生產力

當您需要重複執行複雜操作時,定義別名就會顯得不足夠。但請不要擔心; 函數在這裡提供了一個解決方案,可以應對別名可能會遇到困難的情況。

與僅僅作為單個命令的簡寫的別名不同,函數涵蓋了一系列複雜的命令,旨在執行複雜的操作。

為了了解函數的工作原理,執行以下操作:

1. 在~/.bashrc文件中,追加名為manage_package(任意)的以下函數。

當執行時,此函數會檢查給定的包是否已安裝,並根據該信息更新或安裝包。

請記住,此函數僅接受一個參數,即您感興趣的包名。

manage_package() {
  # 通過使用 dpkg 查詢包狀態來檢查包是否已安裝。
  # $1 是傳遞給函數的第一個參數(包名)的占位符。
  # 將輸出重定向到 /dev/null 以在終端中抑制它。
  # if 語句檢查 dpkg -s 命令的退出狀態。
  # 如果狀態是 0(包已安裝),
  # 則繼續到第一個區塊,更新該包。
  if dpkg -s "$1" &> /dev/null; then
    echo "Package '$1' is already installed. Updating..."
    sudo apt-get update && sudo apt-get install --only-upgrade "$1"
  # 如果包未安裝,則打印一條消息
  # 並運行 sudo apt-get install "$1" 來安裝該包。
  else
    echo "Package '$1' is not installed. Installing..."
    sudo apt-get update && sudo apt-get install "$1"
  fi
}

2. 添加函數後,保存更改,關閉編輯器,然後source ~/.bashrc 檔案以應用更改。

source ~/.bashrc

3. 一旦 sourced,請在終端中調用該函數(manage_package),然後是您希望檢查、更新或安裝的 package-name,如下所示。

本教程選擇的包是 NGINX,但請確保將 package-name 替換為您喜歡的包名。

manage_package package-name

正如您在輸出中所看到的,這類函數使套件管理變得輕而易舉,為您做了繁重的工作。它們會自動確定您想要的套件是否存在,因此您不必操心。

Executing the newly defined function

個性化您的Linux終端和Shell提示(PS1)

將您的Linux終端視為個人工作空間。自定義您的終端會使其變成更具視覺吸引力和信息豐富的環境。

當您為您的Linux終端增添趣味時,天空是極限。您可以通過添加一個很酷的歡迎消息或調整您的shell提示以獲得額外的吸引力,來提升您的終端。

要個性化您的Linux終端,請按照以下步驟進行:

1. 將以下行添加到您的〜/ .bashrc文件的底部。此行在每次啟動終端會話時都會打印一條(問候)消息。

echo "Welcome to your terminal, $USER!

2. 接下來,如果存在,修改主提示字符串1(PS1)環境變量,或將以下行添加到您的〜/ .bashrc文件中。 PS1變量精確控制主提示字符串,即當shell準備接受命令時顯示的主提示(例如,user@linux:〜#)。

修改PS1變量可以更改您的shell提示的外觀,包括其顏色、格式和顯示信息。以下表達式:

  • 使用户名(\u)和主机名(\h)显示为亮绿色(32m)。
  • 使当前工作目录(\w)显示为亮蓝色(34m)。
  • 为后续出现的文本重置颜色属性为默认颜色(通常为白色)(\[\033[00m\])。此重置确保终端的其余文本不受影响。
PS1='\[\033[01;32m\]\u@\h:\[\033[01;34m\]\w\$ \[\033[00m\]'

3. 保存并关闭文件,然后source您的~/.bashrc文件以应用更改。

source ~/.bashrc

请注意,下方的欢迎消息会在执行source后立即出现,并且您定义的Shell提示符的外观会更改。

Applying the shell prompt changes

启动您的脚本:没有路径?没问题!

增强系统以识别附加目录以执行命令可以简化工作流程。以运行脚本为例,不再需要处理长路径,只需纯粹的便利。

要启动您的脚本而无需记忆每个路径,请完成以下步骤:

1. 执行以下命令创建一个名为~/scripts(任意)的目录(mkdir)。

mkdir -p ~/scripts

2. 接下來,打開~/.bashrc文件並將以下行添加到末尾,這會修改系統的命令搜索路徑。此行將~/scripts目錄添加到現有的PATH變量之前。

此行為確保shell優先使用您的腳本,而不是系統中其他位置具有相同名稱的可執行文件。

export PATH="$HOME/scripts:$PATH"

3. 保存並關閉文件,然後source它以應用更改而不重新啟動終端。

source ~/.bashrc

4. 隨後,運行以下每個命令以在您的~/scripts目錄中創建一個名為testscript(任意)的腳本。

這些命令沒有輸出,但此腳本是可執行的(chmod),它將一條消息(echo)打印到終端。

# 在~/scripts目錄中創建一個名為'testscript'的新Bash腳本
echo '#!/bin/bash' > ~/scripts/testscript

# 在'testscript'中追加一行,當執行時打印“Script is running!”
echo 'echo "Script is running!"' >> ~/scripts/testscript

# 通過更改其權限使'testscript'可執行
chmod +x ~/scripts/testscript

5. 最後,通過在終端中調用其名稱來執行您的腳本(testscript)。

系統將從您專用的~/scripts目錄執行您的腳本,而不管終端中的工作目錄如何。

testscript

下面的输出确认了您的脚本,以及系统修改后的命令搜索路径按预期工作。

Executing the new script to confirm it’s functioning as expected

结论

~/.bashrc文件的世界中,您已经通过了其角色的基础知识,以及命令别名和函数自定义的工作方式。甚至现在调整 Linux 终端的外观也可以实现。

除了外观之外,您通过扩展PATH环境变量,解锁了无需每次指定完整路径即可执行脚本的便利性。这些修改节省了时间,增强了用户界面,使您与 Linux 的交互更加高效和愉快。

当您结束对~/.bashrc文件的探索时,请记住 Linux 的真正精髓在于其灵活性和提供给您的控制权。旅程仍在继续,那么为什么不通过探索 ZSH 的增强功能来追求一个定制的体验呢?

深入到 ZSH 和诸如Oh My Zsh这样的框架提供的主题和插件的海洋中。看着您的终端变成一个更具生产力和视觉吸引力的工作空间!

Source:
https://adamtheautomator.com/bashrc/