Linux 环境配置的最佳实践
本文将会长期更新。。。
文章是基于 Ubuntu 和 Mint 系统的,其他 Linux 发行版可以参考一下思路
主要区别在于包管理工具不一样,但是我基本都会附上官方链接,可以参考官方文档进行安装
前言:
- 文章并不是给纯小白看的,需要有 Linux 基础!
- 文章主要是个人笔记和记录,所以可能会有些简洁,欢迎指点
Linux 基础知识
简单记录一些基础知识,有基础的同学可以跳过,直接看后面的 Linux 环境配置
硬链接 & 软链接
硬链接:Linux 系统中,每一个文件都会 有一个索引节点,用来标识文件,链接就是通过这个索引节点进行链接。只有在同一个文件系统中的文件之间才能创建硬连接,不能对目录进行创建。硬链接可以创建多个,即可以有多个文件指向同一个索引节点,或者说一个文件可以拥有多个路径名,因此一个文件可以对应多个文件名。
硬连接就是 “完美的复制”,
cp
实现的复制文件,源文件和复制后的文件,索引节点是不同的。
但是通过硬链接得到的文件,索引节点都一模一样。
# 创建一个文件 source_file
touch source_file
# 建立硬链接文件 hardlink_file
ln source_file hardlink_file
ls -li
发现这两个文件的索引节点相同,所以源文件和硬链接文件指向同一个索引节点。
total 8
1181866 -rw-rw-r-- 2 yusael yusael 9 5月 10 18:40 hardlink_file
1181866 -rw-rw-r-- 2 yusael yusael 9 5月 10 18:40 source_file
对一个文件,可以建立多个硬链接,即使删除了其中一个链接也没事,其他仍然能用。
目录不能建立硬链接,如果可以建立硬链接,目录树就会变成环形的了。
软链接:为某一个文件在另一位置建立一个不同的链接,实现文件或目录的共享,类似 Windows 下的快捷方式。
软链接不要求在同一文件系统中,摆托了硬链接的限制。
软链接可以指向任意一个文件系统下的任意文件或目录,甚至可以指向不存在的文件(无法对不存在的文件创建硬链接)。
# 创建一个文件 source_file
touch source_file
# 创建软链接
ln -s source_file softlink_file
# 删除源文件
rm -rf source_file
# 访问软链接(无法访问到)
cat softlink_file
由于源文件已经被删除,访问软链接也无法访问到了。
cat: softlink_file: No such file or directory
注意:正常创建软链接时务必使用绝对路径,不然访问会报错
软链接的使用场景:
- 有时需要执行很多的命令,不同的命令对应不同的目录的路径,有些路径很长很难记,可以使用软链接将这些路径链接到当前路径,就会变的很简单。
- 有很多交叉编译器时,不同的编译器可能会用到不同的第三方库,一般的做法是将库文件放到编译器的路径下,编译程序时就会自动找到头文件。但是如果这个库比较大,每个编译器都要用的话,分别搬过去会很占空间,可以通过创建软链接的方式,将这个库共享给不同的变异器使用。
Linux 目录
着重强调几个目录:
/usr
不是 user 的缩写,是 Unix Software Resource 的缩写,是Unix操作系统软件资源所放置的目录,而不是用户的数据;所有系统默认的软件都会放置到 /usr, 系统安装完时,这个目录会占用最多的硬盘容量。/usr/local
主要存放那些手动安装的软件,即不是通过 apt-get 安装的软件。它具有和usr
类似的目录结构,让软件包管理器来管理 /usr 目录,而把自定义的脚本放到 /user/local 目录下面。/opt
主要存放那些可选的程序。尝试完后可以随时直接删除,不会有任何影响。安装到 /opt 目录下的程序,所有的数据、库文件等等都是放在同一个目录下面。
系统启动必须:
- /boot:存放的启动 Linux 时使用的内核文件,包括连接文件以及镜像文件
- /etc:存放所有的系统需要的配置文件和**子目录列表,**更改目录下的文件可能会导致系统不能启动
- /lib:存放基本代码库(比如 C++ 库),其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
- /sys: 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。sysfs 文件系统集成了下面 3 种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:
- /bin:存放着最常用的程序和指令
- /sbin:只有系统管理员能使用的程序和指令
外部文件管理:
- /dev:Device(设备)的缩写,存放的是 Linux 的外部设备。注意:在 Linux 中访问设备和访问文件的方式是相同的
- /media:类似 Windows 的其他设备,例如 U 盘、光驱等等,识别后 Linux 会把设备放到这个目录下
- /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了
临时文件:
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run
- /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件
- /tmp:这个目录是用来存放一些临时文件的
账户:
- /root:系统管理员的用户主目录
- /home:用户的主目录,以用户的账号命名的
- /usr:用户的很多应用程序和文件都放在这个目录下,类似于 Windows 下的 program files 目录
- /usr/bin:系统用户使用的应用程序与指令
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序
- /usr/src:内核源代码默认的放置目录
运行过程中要用:
- /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)
- /proc:管理内存空间虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改
扩展用的:
- /opt:默认是空的,我们安装额外软件可以放在这个里面
- /srv:存放服务启动后需要提取的数据(不用服务器就是空)
基本指令
系统相关:
# 显示电脑及操作系统相关信息
uname -a
# 显示 Linux 发行版信息
lsb_release -a
目录相关:
du
-a 列出所有的文件与目录容量
-h 以易懂的容量格式显示, 自动选择显示单位
-s 列出总量, 而不递归列出子目录的容量
-k 以 KB 为单位进行显示
-m 以 MB 为单位进行显示
# 查看指定目录的大小
du -sh <directory_name>
# 查看当前目录下所有文件大小
du -sh *
Linux 环境配置
安装 zsh 和 oh-my-zsh
终端是 Linux 下使用最多的东西,必须打造的漂亮又实用!
对于一个全新的 Linux 系统,务必第一个安装终端环境,因为安装终端会把一些配置文件清空重写,而安装一些其他环境时,会自动往配置文件中配置环境变量,如果后面安装终端,可能会将之前已有的环境变量清除。
# Ubuntu 使用 apt 包管理工具安装
sudo apt-get install zsh
# 验证是否安装成功
zsh --version
# 安装 oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# 安装 Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# 在配置文件中配置主题
vi ~/.zshrc
# 修改以下配置内容
# ZSH_THEME="powerlevel10k/powerlevel10k"
安装 Hack Nerd Font 字体,去该网址下载字体文件:https://www.nerdfonts.com/font-downloads
也可以直接点击下载 Hack Nerd Font:https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Hack.zip
关于 .zshrc
和 vim 相关的配置,可参考我的配置文件:https://gitee.com/szluyu99/my-unix-config
开发环境安装(必用)
nvm 管理 Node 环境
nvm 是一款 Node.js 环境管理器,可用于安装和切换不同的 Node 环境,建议使用它管理 Node 环境
# 使用脚本安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# 添加环境变量到 ~/.zshrc 或 ~/.profile 或 ~/.bashrc
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
# 通过 nvm 安装 & 使用 node
nvm install --lts
nvm use --lts
jEnv 管理 Java 环境
jEnv 是一款 Java 环境管理器,可以用于管理本地的不同 Java 环境,建议使用它来管理 Java 环境
jEnv - Manage your Java environment
# 根据文档安装 jenv
git clone https://github.com/jenv/jenv.git ~/.jenv
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
# 使用包管理工具安装 jdk17
sudo apt install openjdk-17-jdk
使用 ls -l
查看安装的 java 的真实路径:
# 默认使用的是 /usr/bin/java,但这不是安装的 jdk 的真实路径
$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 May 27 01:20 /usr/bin/java -> /etc/alternatives/java
$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 43 May 27 01:20 /etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
得到真实路径后,使用 jenv 管理:
$ jenv add /usr/lib/jvm/java-17-openjdk-amd64
openjdk64-17.0.3 added
17.0.3 added
17.0 added
17 added
# 指定当前使用的 jdk
$ jenv global 17
开发环境安装(可选)
安装 Redis
Redis 5.0 被包含在默认的 Ubuntu 20.04 软件源中,可以使用 apt 包管理工具安装:
sudo apt update
sudo apt install redis-server
常用指令
这里记录一些非常非常常用的指令,Linux 基础很好可以略过
后台运行文件
后台运行文件的方法:nohup ./cfw &
,会在当前目录生成一个 nohup.out
文件作为日志
手动结束后台进程的方法:
# 找到 clash 的进程号
ps -aux | grep clash
# 或
ps -ef | grep clash
# 杀死该进程
kill -9 3458
解压到指定目录
tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz
一些无聊有趣的工具
下面都使用 apt 包管理工具来安装
一般来说 Mac 通过brew install xxx
也可以安装
sl
是 Steam Locomotive 蒸汽火车的缩写,使用后会有一辆火车开过
$ sudo apt install sl
$ sl
(@@) ( ) (@) ( ) @@ () @ O @ O @
( )
(@@@@)
( )
(@@@)
==== ________ ___________
_D _| |_______/ \__I_I_____===__|_________|
|(_)--- | H\________/ | | =|___ ___| _________________
/ | | H | | | | ||_| |_|| _| \_____A
| | | H |__--------------------| [___] | =| |
| ________|___H__/__|_____/[][]~\_______| | -| |
|/ | |-----------I_____I [][] [] D |=======|____|________________________|_
_/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__|__________________________|_
|/-=|___|= O=====O=====O=====O|_____/~\___/ |_D__D__D_| |_D__D__D_|
\_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/
cmatrix
是模拟类似黑客帝国的数字雨场景来进行显示
$ sudo apt install cmatrix
$ cmatrix
htop
是 Liunx 操作系统的图形化性能检测工具
$ sudo apt install htop
$ htop
hollywood
抖音中很火的那个,想象中的程序猿
$ sudo apt install hollywood
$ hollywood
aafire
让字符串像火焰一样燃烧的输出
$ sudo apt install libaa-bin
$ aafire
bastet
可以在 Linux 系统下玩俄罗斯方块:
$ sudo apt install bastet
$ bastet
cowsay
会说话的奶牛
$ sudo apt install cowsay
$ cowsay "hello world"
_____________
< hello world >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
figlet
将用户输入的内容转换成 ASCII 横幅并在显示屏上输出(无长度限制
$ sudo apt instal figlet
$ figlet I Love Linux!
___ _ _ _ _
|_ _| | | _____ _____ | | (_)_ __ _ ___ _| |
| | | | / _ \ \ / / _ \ | | | | '_ \| | | \ \/ / |
| | | |__| (_) \ V / __/ | |___| | | | | |_| |> <|_|
|___| |_____\___/ \_/ \___| |_____|_|_| |_|\__,_/_/\_(_)
实践操作
启动 SSH
参考:在 Ubuntu 20.04 启用 SSH,并且通过局域网登录 Ubuntu 机器
一、在 Ubuntu 上启用 SSH
# 安装 openssh-server
sudo apt update
sudo apt install openssh-server
# 验证是否运行
sudo systemctl status ssh
# Ubuntu 自带的防火墙配置工具, 打开 SSH 端口
sudo ufw allow ssh
修改配置项:vi /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
二、连接到 SSH 服务器
# 在 Linux 上查看 IP 地址,下面两个指令都可以
ifconfig
ip a
在其他主机上,通过 SSH 命令登录远程机器:ssh username@ip
ssh root@192.168.3.11
三、通过 VsCode 打开远程目录,编辑代码
安装插件:Remote - SSH,输入主机进行连接然后选择文件目录,即可开始编辑
其他
Linux Mint 相关记录
ctrl + alt + F1 ~ F6 进入 tty1 ~ tty6(文本模式),ctrl + alt + F7 可以退出
Linux Mint 下将键盘 Ctrl 位置换到 CAPSLOCK 上的方法:系统自带功能可以实现
- 系统 -> 键盘 -> 布局 -> 选项 -> Ctrl key position -> …
Mint 和 Windows 一致的快捷键:
- Alt + F4:关闭程序
- Alt + Tab:切换程序
- Win + 方向键,移动窗口贴合到指定方向
蓝牙管理
这个主要针对 Mint 系统,因为默认的 blueberry 十分不好用(经常找不到蓝牙设备,连接也不好用)
换成 blueman 以后就正常了
卸载自带的 blueberry,安装 blueman:
sudo apt-get remove blueberry
sudo apt-get install blueman