Ubuntu 使用dotfiles个性化配置模板

发布于:2025-05-08 ⋅ 阅读:(20) ⋅ 点赞:(0)

在这里插入图片描述

什么是dotfile

每个人都有自己用电脑的习惯,比如命令的简写、关键字的高亮、函数的缩写等等。这些设置都会被我们一劳永逸的设置在配置文件中。但是如果我们更换了电脑,想要快速恢复这些设置,或者我们在网络上找到了一个心仪的别人的配置,想要复刻,我们应该怎样操作呢?这就关系到dotfile的配置和管理。

在Linux系统中,有一些隐藏的以 . 开头的文件,使用 ls -a 就可以看到。这些文件就是dotfile。
在这里插入图片描述

这些文件大多是各种软件的配置文件

比如使用 sudo apt install git 安装了“版本控制工具”,并且使用 git config --global user.name "你的名字"git config --global user.email "你的邮箱@example.com" 设置了全局用户名和邮箱,则会自动创建 ~/.gitconig。不设置用户名和邮箱,git的配置文件不会在安装了git之后自动生成。

在这里插入图片描述

再比如Vim的配置文件 .vimrc ,如果用户未主动配置,Vim会使用内置的默认设置,因此 ~/ 下没有 .vimrc 。Vim的系统级配置问价通常位于 /etc/vim/vimrc ,但用户个人配置需要单独创建。

如果只是进行简单的设置的情况下,可以简单手动创建 touch ~/.vimrc
并在文件中输入下面内容:

# 显示行号
set number

# 启用语法高亮
syntax on

# 设置缩进为4空格
set tabstop=4
set shiftwidth=4
set expandtab

编译完成后,按下 esc ,输入 :wq,保存并退出,可以发现在路径 ~/ 下新增了关于Vim的配置文件
在这里插入图片描述
可以输入下面的命令查看Vim的配置路径

vim --version | grep "vimrc"

得到类似下面的结果:
在这里插入图片描述
当再次输入

vim ~/.vimrc

进入Vim编辑界面时,会与之前有所不同,显示了行号、关键字高亮和缩进。(不修改直接退出,按下 esc ,输入 :q即可)
在这里插入图片描述

rcm软件

当我们初次使用一些软件时,会花大量的时间对响应的dotfile文件逐一进行配置。但是当我们更换电脑时,又会花费大量时间重新设置。怎样可以快速方便的统一进行设置呢?可以使用Github上开源的rc file management(rcm)软件。这个软件主要思想就是将所有你希望用rcm管理的dotfile移动并集中存储在一个目录中(默认是在 ~/.dotflies 下),并在你的个人目录下创建所有被rcm管理的dotfile的符号连接(symlink)。

可以直接执行下面三行命令下载rcm:

sudo add-apt-repository ppa:martin-frost/thoughtbot-rcm
sudo apt-get update
sudo apt-get install rcm

如果第一次在本地使用rcm,可以使用 mkrc 命令指定要管理哪些文件
当前文件夹 ~/ 下的文件如下所示:
在这里插入图片描述
我想将 .viminfo.vimrc 文件放到 ~/.dotflies 下,方便后续统一管理,使用命令

mkrc .viminfo .vimrc

将指定的dotfiles移动到 ~/.dotflies 目录下并重命名将文件前的 . 去掉,同时在原目录下创建响应的符号链接:
在这里插入图片描述
注意事项:请勿对已经由rcm管理并创建的符号连接使用mkrc命令,否则会让 ~/.dotfiles 下的文件变成指向自己的符号链接并丢失源文件。

手动修改/生成dotfile

启动脚本 .bash_profile

Bash在登录时会按照一下顺序查找配置文件:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile 如果前两个文件不存在,则会加载 3. ~/.profile

大多数Linux发行版(如Ubuntu)默认不自动创建 ~/.bash_profile,而是通过以下文件管理Bash配置

  • ~/.bashrc:用于非登录 Shell(如终端分页或新窗口)。
  • ~/.profile/etc/profile:用于登录 Shell(如系统登录或 SSH 连接)。

如果想要创建 .bash_profile 文件,可以通过以下方法

touch ~/.bash_profile
nano ~/.bash_profile

之后在文件中编辑文件内容,具体内容我参考的Github中webpro开源的代码,内容如下:

# 仅限交互式Shell执行,如果是非交互式的,则直接退出

[ -z "$PS1" ] && return

# 定位dotfiles目录,确定dotfiles 的存储路径 DOTFILES_DIR
# (assuming ~/.dotfiles on distros without readlink and/or $BASH_SOURCE/$0)
CURRENT_SCRIPT=$BASH_SOURCE

if [[ -n $CURRENT_SCRIPT && -x readlink ]]; then
  SCRIPT_PATH=$(readlink -n $CURRENT_SCRIPT)
  DOTFILES_DIR="${PWD}/$(dirname $(dirname $SCRIPT_PATH))"
elif [ -d "$HOME/.dotfiles" ]; then
  DOTFILES_DIR="$HOME/.dotfiles"
else
  echo "Unable to find dotfiles, exiting."
  return
fi

# 添加自定义工具到 PATH

PATH="$DOTFILES_DIR/bin:$PATH"

# 加载系统配置文件,批量加载dotfiles/system/ 目录下的配置文件(如函数、别名、环境变量等)

for DOTFILE in "$DOTFILES_DIR"/system/.{function,function_*,n,path,env,exports,alias,fzf,grep,prompt,completion,fix,zoxide}; do
  . "$DOTFILE"
done

# macOS特定配置(略)
if is-macos; then
  for DOTFILE in "$DOTFILES_DIR"/system/.{env,alias,function}.macos; do
    . "$DOTFILE"
  done
fi

# 设置目录颜色

eval "$(dircolors -b "$DOTFILES_DIR"/system/.dir_colors)"

# 清理与导出

unset CURRENT_SCRIPT SCRIPT_PATH DOTFILE
export DOTFILES_DIR

然后分别按下 Ctrl + O 保存和 Ctrl + X退出

别忘了把文件放到 ~/.dotfiles

mkrc .bash_profile

按键绑定 .inputrc

.inputrc用于配置 GNU Readline 库的文件(影响 Bash、Python REPL、MySQL 客户端等工具的输入行为)

系统不会自动创建此文件,除非你手动配置或某些程序需要它。

Readline 的默认配置通常位于 /etc/inputrc,用户无需手动创建 .inputrc 即可使用默认行为。

如果想要创建 .inputrc 文件,可以通过以下方法

touch ~/.inputrc
nano ~/.inputrc

之后在文件中编辑文件内容,具体内容我参考的Github中webpro开源的代码,内容如下:

# 忽略大小写:补全时不区分文件名的大小写
# (如输入 FILE 可补全 file.txt)
set completion-ignore-case on

# 显示所有可能项:当有多个补全选项时,直接列出所有结果,无需按两次 Tab。
set show-all-if-ambiguous on

# 目录符号链接补全加斜杠:补全符号链接指向的目录时,自动添加 /
# (如 ln -s dir link,补全 link 会变成 link/)。
set mark-symlinked-directories on

# 禁用分页显示:补全结果直接全部显示,而非分页
# (类似 ls 与 ls | less 的区别)。
set page-completions off

# 提示确认数量:当补全选项超过 200 个时,询问是否显示全部
# (避免意外刷屏)。
set completion-query-items 200

# 显示文件类型标识:补全时像 ls -F 一样标记文件类型
# (如目录加 /,可执行文件加 *)。
set visible-stats on

# 智能跳过已输入部分:补全时忽略光标后的内容
# (例如输入 cd ~/src/mozil,光标在 z 处按 Tab,补全为 mozilla 而非 mozillail)。
set skip-completed-text on

# 允许输入 UTF-8 元字符:支持输入非 ASCII 字符(如中文、Emoji)。
# 允许输出 UTF-8 元字符:正确显示非 ASCII 字符。
# 禁用字符转义:不将特殊字符转换为转义序列(如避免显示 $'\0123\0456')。
set input-meta on
set output-meta on
set convert-meta off

# Shift+Tab 遍历补全选项:按 Shift+Tab 反向循环选择补全结果(默认 Tab 正向循环)。
"\e[Z": menu-complete

# ”上“键搜索历史命令:根据已输入的前缀过滤历史命令(如输入 git 后按”上“,只显示以 git 开头的历史命令)。
# ”下“键搜索历史命令:同上,向下搜索。
"\e[A": history-search-backward
"\e[B": history-search-forward

然后分别按下 Ctrl + O 保存和 Ctrl + X退出

别忘了把文件放到 ~/.dotfiles

mkrc .inputrc

效果:文件起作用,需要重启虚拟机/电脑,重启之后,可以尝试代码中进行的第一项设置:Tab补齐不需要区分大小写
请添加图片描述

别名 .alias

.alias 文件并非系统默认生成,而是用户手动创建的配置文件,通常用于集中管理命令行别名(alias)

如果想要创建 .bash_profile 文件,可以通过以下方法

touch ~/.alias
nano ~/.alias

之后在文件中编辑文件内容,具体内容我参考的Github中webpro开源的代码,内容如下:

# Shortcuts

alias reload="source ~/.bash_profile"
alias _="sudo"
alias g="git"
alias rr="rm -rf"
alias mux="tmuxinator"

# Default options

alias rsync="rsync -vh"
alias json="json -c"
alias psgrep="psgrep -i"

# Global aliases

if $(is-supported "alias -g"); then
  alias -g G="| grep -i"
  alias -g H="| head"
  alias -g T="| tail"
  alias -g L="| less"
fi

# List declared aliases, functions, paths

alias aliases="alias | sed 's/=.*//'"
alias functions="declare -f | grep '^[a-z].* ()' | sed 's/{$//'"
alias paths='echo -e ${PATH//:/\\n}'

# Directory listing/traversal

LS_COLORIZED=$(is-supported "ls --color" --color -G)
LS_TIMESTYLEISO=$(is-supported "ls --time-style=long-iso" --time-style=long-iso)
LS_GROUPDIRSFIRST=$(is-supported "ls --group-directories-first" --group-directories-first)

alias l="ls -lahA $LS_COLORIZED $LS_TIMESTYLEISO $LS_GROUPDIRSFIRST"
alias ll="ls -lA $LS_COLORIZED"
alias lt="ls -lhAtr $LS_COLORIZED $LS_TIMESTYLEISO $LS_GROUPDIRSFIRST"
alias ld="ls -ld $LS_COLORIZED */"
alias lp="stat -c '%a %n' *"

unset LS_COLORIZED LS_TIMESTYLEISO LS_GROUPDIRSFIRST

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias -- -="cd -"                  # Go to previous dir with -
alias cd.='cd $(readlink -f .)'    # Go to real dir (i.e. if current dir is linked)

# p/npm

alias b="bun"
alias p="pnpm"
alias ncu="npm-check-updates --interactive"
alias ncuw="npm-check-updates --interactive --root --workspaces"

# Network

alias ip="curl -s ipinfo.io | jq -r '.ip'"
alias ipl="ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'"

# Miscellaneous

alias hosts="sudo $EDITOR /etc/hosts"
alias quit="exit"
alias week="date +%V"
alias speedtest="wget -O /dev/null http://speed.transip.nl/100mb.bin"
alias grip="grip --browser --pass=$GITHUB_TOKEN"
alias fkill="ps -e | fzf | awk '{print $1}' | xargs kill"
alias formatmd="remark --use remark-preset-webpro"

基本语法:alias 别名="原名"

然后分别按下 Ctrl + O 保存和 Ctrl + X退出

别忘了把文件放到 ~/.dotfiles

mkrc .inputrc

其他dotfiles

还有 .functions .prompt 等等配置文件。更多请参考Github-webpor的开源

从github克隆

从Github库中下载代码

在home(~)目录下输入git命令即可

git clone https://github.com/webpro/dotfiles.git

让dotfile文件生效

~/.doffiles 目录下的配置文件通过复制或创建符号链接(symlink)的方式,放置到用户的 home (即~) 目录下。否则这些文件不会生效。

注意事项:用户原有的 .bash_profile、.gitconfig 等文件可能已存在,操作前需备份重要文件,避免覆盖或丢失配置。

cp ~/.bash_profile ~/.bash_profile.bak

建议使用符号链接而非直接复制,便于后续同步更新。

上一章手动创建dotfile时,是在home目录下创建的文件,之后用 mkrc 命令将文件移动到 ~/.dotfile 文件夹中,并在原地留下了一个链接

这一章因为我们可以直接在Github库中下载 .dotfile 文件夹,所以在home文件夹下没有链接。因此需要通过 ln 命令创建符号链接

ln -sv ~/.doffiles/.test ~

会有下面的结果
在这里插入图片描述

GUN stow管理

如果我们从Github中下载了一个完整的模板,里面会有很多已经设置好的配置文件,如果我们一条一条使用 ln 命令创建链接,非常麻烦。这时我们可以使用Stow按照软件(即分类的文件夹),统一对文件夹中的配置文件创建链接。

安装Stow

sudo apt install stow

不知道有没有安装,可以使用下面的命令查看

stow --version

如果安装了,就会显示版本号,没安装则会显示找不到命令
在这里插入图片描述
在这里插入图片描述

初始化目录结构

如果是自己手动创建的dotfile,那么可以按照软件分类存储文件,在dotfiles文件夹下创建几个文件夹

mkdir -p ~/.dotfiles/{bash,git,vim,tmux,input,ali}

然后按照分类将对应配置文件放到相应的目录中

mv ~/.bashrc ~/.dotfiles/bash/

假设目录结构如下:

~/.dotfiles/
├── bash/
│   ├── .bashrc
│   └── .bash_profile
├── git/
│   └── .gitconfig
└── vim/
    └── .vimrc

使用Stow

  • 使用Stow创建符号链接
    ~/.dotfiles 目录下运行

    stow -v -t ~ bash  # 为 bash 配置创建链接到 HOME
    

    -v:显示详细输出。
    -t ~:指定目标目录为 $HOME(默认是上级目录)。
    bash:要链接的模块名(对应 ~/.dotfiles/bash/)。

    效果:
    ~/.dotfiles/bash/.bashrc 会符号链接到 ~/.bashrc。

  • 也可以一次性配置多个模块

    stow -v -t ~ bash git vim
    
  • 删除符号链接(卸载配置)

    stow -D -v -t ~ bash  # 删除 bash 模块的链接
    

    -D:删除(卸载)符号链接,不会删除源文件。

在这里插入图片描述

参考文章

代码主要来源:

内容参考:


网站公告

今日签到

点亮在社区的每一天
去签到