1.Linux之旅

1.1前言

记录本人的Ubuntu之旅
Linux路上凶险很多,实在解决不了的问题就重装系统吧🥹

1.2初始化

1.2.1WSL2下安装 Ubuntu和共享网络

第一步

  • 控制面板 - > 程序 -> 启用或关闭windows功能 -> 开启适用于windows的子系统虚拟机平台 -> 重启电脑

第二步

  • win+r -> powershell -> wsl --install Ubuntu-22.04

    Tips : wsl --list --online 查看发行版名称
    第三步

  • 在C:\Users\用户名.wslconfig里输入(不要#后内容)

1
2
3
4
5
6
[experimental]
networkingMode=mirrored # 这意味着 WSL2 的网络接口会直接映射到宿主机上
dnsTunneling=true # WSL2 会通过宿主机来解析 DNS
firewall=true # WSL2 会使用 Windows 防火墙来过滤网络流量
autoProxy=true # WSL2 会自动继承宿主机上的代理设置
sparseVhd=true # WSL2 的虚拟硬盘会采用稀疏文件格式,即只有实际使用到的部分才会占用磁盘空间。这可以节省磁盘空间。

1.2.2Ubuntu换源

第一步

  • 前往清华源并找到对应版本替换/etc/apt/sources.list

第二步

  • sudo apt update && sudo apt upgrade -y更新软件包

1.2.3终端美化

1.2.4zsh美化

  • sudo apt install zsh git curl -y

Tips: curl — client url

  • chsh -s /bin/zsh 设置默认终端
Method Command
curl sh -c “$(curl -fsSL https://install.ohmyz.sh/)”
wget sh -c “$(wget -O- https://install.ohmyz.sh/)”
fetch sh -c “$(fetch -o - https://install.ohmyz.sh/)”
国内curl镜像 sh -c “$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)”
国内wget镜像 sh -c “$(wget -O- https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)”

Tips:
curl -f --fail 不显示http错误消息
-s 不输出进度条和错误
-S 只输出错误
-L 支持重定向d
sh -c 使用sh(命令解释器)执行之后的脚本,$(command)符号将输出变成输入
wget -O file将下载的信息保存在file中, 而-O-表示输出到终端

Thoughs:
没有魔法可以去gitee上找开源项目的镜像网址

下载主题

1
2
3
4
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# 中国用户可以使用 gitee.com 上的官方镜像加速下载
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

修改配置文件

  • ZSH_THEME="haoomz"
  • source ~/.zshrc 加载配置文件

下载插件

  • zsh-autosuggestion命令补全
1
2
3
4
5
6
7
8
9
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# 中国用户可以使用下面任意一个加速下载
# 加速1
git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 加速2
git clone https://gh.xmly.dev/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 加速3
git clone https://gh.api.99988866.xyz/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
  • zsh-syntax-highlighting语法检验
1
2
3
4
5
6
7
8
9
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# 中国用户可以使用下面任意一个加速下载
# 加速1
git clone https://github.moeyy.xyz/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 加速2
git clone https://gh.xmly.dev/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 加速3
git clone https://gh.api.99988866.xyz/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
  • z

    oh-my-zsh 内置了 z 插件。z 是一个文件夹快捷跳转插件,对于曾经跳转过的目录,只需要输入最终目标文件夹名称,就可以快速跳转,避免再输入长串路径,提高切换文件夹的效率

  • extract

    oh-my-zsh 内置了 extract 插件。extract 用于解压任何压缩文件,不必根据压缩文件的后缀名来记忆压缩软件。使用 x 命令即可解压文件

  • websearch

    oh-my-zsh 内置了 web-search 插件。web-search 能让我们在命令行中使用搜索引擎进行搜索。使用搜索引擎关键字+搜索内容 即可自动打开浏览器进行搜索。如baidu 天气预报

修改~/.zshrc

  • plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search)
  • source ~/.zshrc 加载配置文件

本文参考

大功告成…

1.2.5vim美化

下载较新的vim

  1. sudo add-apt-repository ppa:vim/stable
  2. sudo apt update
  3. sudo apt install vim

Tips: 利用git安装最新版

1
2
3
git clone https://github.com/vim/vim.git
cd vim/src
make

免责声明: 作者没试过,出现依赖问题自行解决🤣

配置文件
以下是本人的仅供参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
set confirm "确认文件是否保存
set wildmenu "按TAB键时命令行自动补齐
set ignorecase "忽略大小写
set number "显示行号"
set relativenumber "相对行号
set ruler "显示当前光标位置
set autoread "文件在Vim之外修改过,自动重新读入
set autowrite "设置自动保存内容
set autochdir "当前目录随着被编辑文件的改变而改变
set nocp "使用vim而非vi
set laststatus=2 "永远显示状态栏
filetype on "启动文件类型检查
syntax on "启动语法高亮
set cindent "c/c++自动缩进"
set smartindent
set autoindent "参考上一行的缩进方式进行自动缩进"
filetype indent on "根据文件类型进行缩进
set softtabstop=4 "4 character as a tab"
set shiftwidth=4
set smarttab
set hlsearch "开启搜索结果的高亮显示"
set incsearch "边输入边搜索(实时搜索)"
set colorcolumn=80
set updatetime=100
nnoremap <A-Left> :tabprevious<CR> "ALT加箭头切换标签页
nnoremap <A-Right> :tabnext<CR>
nmap ;s :%s/\<<C-R>=expand("<cword>")<CR>\>/
nmap ;g :vimgrep <C-R>=expand("<cword>")<CR>
vnoremap <C-c> :w !xclip -selection clipboard<CR><CR>
if has("multi_byte")
set fileencodings=utf-8,ucs-bom,cp936,cp1250,big5,euc-jp,euc-kr,latin1
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
"-----------------------------------------------------------------------------
"-----------------------------------------------------------------------------
"-----------------------------插件--------------------------------------------
call plug#begin()
Plug 'vim-airline/vim-airline'
let g:airline_powerline_fonts = 1 " 支持 powerline 字体
let g:airline#extensions#tabline#enabled = 1 " 显示窗口tab和buffer
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
Plug 'scrooloose/nerdtree'
map <C-n> :NERDTreeToggle<CR>
Plug 'joshdick/onedark.vim'
Plug 'jiangmiao/auto-pairs'
call plug#end()

colorscheme onedark

Tips: sudo apt install xclip然后可以ctrl+c把vim的内容复制到系统剪切板

下载vim插件

  • curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  • ~/.vimrc ->
1
2
3
4
call plug#begin() 
Plug xxx
Plug xxx
call plug#end()

1.3开始启程

1.3 .1 推荐工具

参考B站

Github

  1. neofetch – 展示操作系统等信息 --> sudo apt install neofetch

  2. w3m – 文本浏览器 --> sudo apt install w3m

  3. mpv – 视频播放器 --> sudo apt install mpv

  4. ncmpcpp – 音乐播放器 --> sudo apt install ncmpcpp
    音乐播放器教程作者表示为网易云资深用户不想折腾

  5. nomacs – 图片查看器 --> sudo apt install nomacs

  6. pass – 密码管理器 --> sudo apt install pass

  7. zip – 压缩工具 --> sudo apt install zip --> zip -r data.zip file1 file2 dir1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gpg --gen-key # 生成gpg密钥
    pass init name # 主目录->.password-store目录
    pass add your_service # 创建
    pass show your_service # 展示
    pass edit your_service # 编辑
    pass # 列出所有密码
    高级用法
    pass add social/facebook # 密码分类
    pass | grep facebook # 搜索
    pass | xclip -sel clip # 复制到系统剪贴板
  8. tree – 查看目录结构 --> sudo apt install tree

  9. mc – 终端双窗口查看目录结构 --> sudo apt install mc

    Tips: 建议在~/.zshrc中写入aliasmc='mc --nocolor'
    进入之后下方的是f1,f2,f3…不是1,2,3
    F9 -> o -> p -> 空格选中Panel options -> 只需要方向键既就可以进入目录或退出目录。

    命令 解释
    Tab 两个窗口间移动
    参考文章

1.3.2命令知识手册

  • Good command -> sudo !! --> 读作!!(代表上一条命令)
1
2
3
foo=1
echo $foo // 1
echo $(pwd) // 将pwd的输出转化为echo的输入
  • $的大作用🤣

    1. "$var"展开变量, '$var'不展开变量
    2. $? 上一条命令的返回码
    3. $_ 上一条命令的最后一个参数
    4. $$ 该shelld的PID --> sudo kill "$$" -9 😁
    5. $_ 上一条命令最后一个参数
    6. $# 上一条命令参数数量
    7. $@ 上一条命名参数列表 --> for var in $@
    8. $0 第一个参数(脚本名称)
    9. ${1..9}参数…
  • ; && ||的大作用

    1. cmd1 ; cmd2 ; cmd3 --> 按顺序执行不论是否执行成功
    2. cmd && cmd2 && cmd3 --> 状态码为0才执行
    3. cmd || cmd2 || cmd3 --> 状态码为1才执行
  • 重定向

    1. > 标准输出
    2. 2> 标准错误
    3. &> 标准输出和标准错误
  • 了解一些常见的正则表达式

符号 解释 速记
. 任意字符 点子王
\w 字母,下划线,数字 变量名
\s 空白字符 space
\d 数字 digit
^ ^xxx 以xxx开头
$ xxx$ 以xxx结尾
\W\S\D 非wsd
[abc] 任意[]中的一个字符 任我选
[^abc] 出来[]中的任我选
次数 解释
* 0~n
+ 1~n
? 0?1 布尔值
{n} n
{m,n} m~n
{*,+,?}? 禁用贪婪模式

详情见该博客

  • 图片转换

    1. convert input_file output_file
    2. `convert a.jpg -resize widthxheight b.jpg
  • {}的妙用

    1. mkdir foo{1,2,a,b}会创建四个文件夹
    2. mkdir foo{1..9}/{a..z}会创建9x26个文件夹
  • find

    给定路径下找文件(夹)的工具

    • 格式 find [path] [condition] [expr]
    condition expr 解释
    -name “*.cpp” 以cpp结尾
    -size “+10M” 超过10M
    -ctime "+30 修改时间超过30天
    -type f/d/l 文件,文件夹,链接
    -exec command {} 对找到的文件执行操作

    Tips: 可以同时指定多个选项

    Extension: find支持的通配符并非所有正则表达式
    只有 * ? [] {}
    可以使用 find path -regex "expr"

  • locate

    依据已经建立的数据库在根目录下快速查找文件(夹)

    1. sudo apt install mlocate 下载软件包
    2. sudo updatedb
    3. locate [option] [file]
    4. -i(gnore) -r(egex) -c(olumn)
  • rg

    rust写的替代grep的工具,支持正则表达式,默认递归搜索(grep需要-r选项)
    ,自动忽略.gitignore文件

    • 格式: rg <文本> [文件或目录]
    • 下载: sudo apt install ripgrep
    选项 作用
    --stats 显示统计信息
    --type xxx 指定文件类型
    -u 不忽略.文件
  • history

    1. history n 显示最近n条命令
    2. !-n, !n, !! 执行对应命令
  • tree
    常用选项

    选项 用处
    -L x 限制层数
    -h k,m显示文件大小
    • ulimit
    • -a 查看系统资源限制
    • -选项 -值 修改系统资源限制
  • tail

查看文件尾部内容

  • tail -n 20 file查看倒数20行
  • tail -n +20 file查看从20到末尾
  • tail -c 10 file 查看倒数20个字符

笑死了,你以为只有这点? – 鲁迅
特此说明 ^ 代表 ctrl

常见信号

操作 信号
^c SIGINT
^z SIGSTOP
logout SIGHUP
nohup 忽略SIGHUP,退出终端程序依旧运行
kill SIGKILL
1
2
3
4
5
6
7
command & -- 在后台运行
# 当工作被STOP后可以
jobs -- 查看后台作业
bg %n -- 恢复到后台运行
fg %n -- 恢复到前台运行
# 如何精准的发送信号?
kill -信号名 %n -- 发送信号