首页 终端技巧Shell
文章
取消

终端技巧Shell

参考:

  1. Shell 工具和脚本 · the missing semester of your cs education (missing-semester-cn.github.io)
  2. [命令行总结-Windows包管理器Olimi](https://o.olimi.icu/posts/%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%80%BB%E7%BB%93-Windows%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/#%E4%B8%AD%E6%96%87%E5%B8%AE%E5%8A%A9man)
  3. [构建我的工作空间Olimi](https://o.olimi.icu/posts/%E6%9E%84%E5%BB%BA%E6%88%91%E7%9A%84%E5%B7%A5%E4%BD%9C%E7%A9%BA%E9%97%B4/)
  4. [GitOlimi](https://o.olimi.icu/posts/Git/#git%E7%8E%A9%E6%B3%95)

Windows termianl

小技巧

启用alternate scroll mode

滚动查看备用缓冲区,如man xx;git log等。

1
printf "\e[?1007h"

网络问题

wsl2 2.0版本以后,wsl网络与主机网络互通。但是未设置的话会提示:

wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。

在%USERPROFILE%.wslconfig目录添加.wslconfig文件(或者在原有的文件中加入)以下:

1
2
3
4
5
6
7
[experimental]
autoMemoryReclaim=gradual  # gradual  | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

更新

wsl —update提示:

已禁止(403)。 Error code: Wsl/UpdatePackage/0x80190193

此时:

wsl --update --web-download

如果还不行可能是代理网络的问题,关掉TUN模式或者直接关掉代理。

常用命令及使用

Git

配置登录

目前只能用ssh登录,因此如果要读写GitHub仓库,应该拷贝ssh url。

然后需要本地升成一个ssh key,添加到GitHub中。

  1. 生成密钥。ssh-keygen -t {{rsa}} -C "{{email}}”
  2. 拷贝公钥id_rsa.pub. cat id_rsa.pub | xclip -selection clipboard
  3. 添加到Github中settings/ssh

添加git别名

1
2
3
4
5
6
7
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual '!gitk'

终端工具

配置帮助手册

man

配置中文man:[命令行总结-Windows包管理器Olimi](https://o.olimi.icu/posts/%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%80%BB%E7%BB%93-Windows%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/#%E4%B8%AD%E6%96%87%E5%B8%AE%E5%8A%A9man)

tldr

查看简单的命令,官网:tldr pages

我使用python安装,pip3 install tldr,默认路径在$HOME/.local/bin,加到环境变量去。

1
2
nano ~/.zshrc
export PATH="$HOME/.local/bin:$PATH"
  • 删除

    1
    
      sudo npm install -g tldr
    

    第一次安装碰到问题:Error: Invalid filename重装一次解决了。

    1
    
      sudo npm install -g tldr --force
    

然后tldr —update更新数据库。tldr也可以显示中文,方法同上面man(配置过man的中文后这里自动显示中文)

markdown输出(tldr官网本质上就是一些md文档),使用glow:

1
2
3
4
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg
echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install glow

然后就可以渲染markdown查看:

1
tldr -m tar | glow

结果:

img

进一步可以将这个命令约简,在.zshrc中加入这个:

1
2
3
help() {
    tldr -m "$1" | glow
}

即可使用help xxx查看命令的简单介绍的markdown形式。

发现一个新问题(关于pages页),之前某个终端先用npm下载,会创建一个~/.tldr目录,会同时下载pages和pages.zh,但是后面用pip下载则没有这个目录,只有~/.cache/tldr/pages.zh目录,而有些命令中文是没有翻译的,必须看pages。此时可以手动clone pages,然后拷贝过去即可。

1
2
3
4
5
6
# Clone the tldr pages repository
git clone https://github.com/tldr-pages/tldr.git

# Copy the 'pages' and 'pages.zh' directories to your tldr cache directory
cp -r tldr/pages ~/.cache/tldr/
cp -r tldr/pages.zh ~/.cache/tldr/

查找工具

locate

对于WSL,因为会包含windows系统的文件,建立数据库会非常慢,所以安装时应该屏蔽掉windows系统,屏蔽/mnt目录即可。过程:

  1. 安装:

    1
    
     sudo apt-get install mlocate # mlocate是locate的一个改进版本
    
  2. 安装时就会启动扫描磁盘建立数据库,看到类似

    Initializing plocate database; this may take some time…

    再开个终端ps -a查看一下,

    1
    2
    3
    4
    5
    6
    7
    8
    
     $ ps -a
         PID TTY          TIME CMD
         398 pts/1    00:00:01 zsh
        1361 pts/0    00:00:00 sudo
        1363 pts/2    00:00:00 apt-get
        1418 pts/3    00:00:00 plocate.postins
        1431 pts/3    00:01:01 updatedb.plocat
        1779 pts/4    00:00:00 ps
    

    发现updatedb.plocat进程应该是在扫描,改掉他。

    1
    
     sudo killall updatedb.plocat
    
  3. 修改配置文件,sudo nano /etc/updatedb.conf,写入屏蔽/mnt

    1
    2
    3
    
     PRUNE_BIND_MOUNTS="yes"
     # PRUNENAMES=".git .bzr .hg .svn"
     PRUNEPATHS="/mnt /tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs />PRUNEFS="NFS afs autofs binfmt_misc ceph cgroup cgroup2 cifs coda configfs curlftpfs debug>
    
  4. 重新扫描。sudo updatedb,应该瞬间就可以完成(ssd)。

fd

sudo apt-get install fd-find.摘录一些用法

简单搜索

fd 被设计用来在你的文件系统中寻找条目。你可以进行的最基本的搜索,fd 只带一个参数:搜索模式。例如,假设你想找到你的一个旧脚本(它名字包含 netflix):

1
2
> fd netfl
Software/python/imdb-ratings/netflix-details.py

如果像这样只调用一个参数,fd 会递归搜索当前目录中任何包含 netfl 模式的条目。

正则表达式搜索

搜索模式被当作一个正则表达式来处理。这里,我们搜索以 x 开头、以 rc 结尾的条目:

1
2
3
4
> cd /etc
> fd '^x.*rc$'
X11/xinit/xinitrc
X11/xinit/xserverrc

fd 使用的正则表达式语法在这里

指定根目录

如果我们想搜索一个特定的目录,可以把它作为 fd 的第二个参数:

1
2
3
4
> fd passwd /etc
/etc/default/passwd
/etc/pam.d/passwd
/etc/passwd

列出所有文件,递归

fd 可以在没有参数的情况下被调用。这对于快速了解当前目录中的所有条目非常有用,它是递归的(类似于 ls -R):

1
2
3
4
5
> cd fd/tests
> fd
testenv
testenv/mod.rs
tests.rs

如果你想使用这个功能来列出一个给定目录中的所有文件,你必须使用一个全包模式,如 . 或 ^

1
2
3
4
> fd . fd/tests/
testenv
testenv/mod.rs
tests.rs

搜索一个特定的文件扩展名

通常,我们对某一特定类型的所有文件感兴趣。这可以用 -e(或 --extension)选项来完成。在这里,我们搜索 fd 资源库中的所有 Markdown 文件:

1
2
3
4
> cd fd
> fd -e md
CONTRIBUTING.md
README.md
  • e 选项可以与搜索模式结合使用:

> fd -e rs mod src/fshelper/mod.rs src/lscolors/mod.rs tests/testenv/mod.rs

目录管理

autojump

  1. sudo apt install autojump
  2. echo source /usr/share/autojump/autojump.zsh >> ~/.zshrc

文本编辑

micro

本文由作者按照 CC BY 4.0 进行授权

2023年12月23日分享

Notion文档导出与统计