跳转至

终端命令

命令行的艺术 explainshell 解释终端命令网页

Terminal的定义

只有操作系统的内核kernel才能控制计算机硬件,无论是图形界面GUI还是命令行都是假设在用户和内核之间的一座桥梁,shell或者terminal可以被理解为一种 “代理”,与QQ,微信等应用软件平级。

常见的shell有Powershel,cmd, bash, git bash, zsh。复杂的有Alacritty,iTerm 2, Tabby。这里要推荐zsh作为自己的终端。

dotfiles

github上有一些dotfiles库,将常用的配置打包发布,便于整理转移,譬如dotfiles, 请阅读文档

linux终端配置-zsh

Bash
#我们知道在linux系统的/etc/passwd文件内是保存系统内所有用户和用户的设置。
cat /etc/passwd
# 查看已安装的shells
cat /etc/shells
echo $SHELL
# 安装zsh
sudo apt-get install zsh
# 设置当前用户使用zsh
chsh 
输入zsh路径 /bin/zsh
# 安装oh-my-zsh
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

zsh插件

Bash
## zsh主题 powerlevel10k
## git@github.com:romkatv/powerlevel10k.git
## 在oh-my-zsh下安装
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
## 在.zshrc设置主题,ZSH_THEME="powerlevel10k/powerlevel10k"
# 使用下面命令对p10k进行配置
p10k configure

#安装插件-自动补全
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
#配置zsh-autosuggestions,同样打开.zshrc,将plugin加上一个zsh-autosuggestions:
vim ~/.zshrc
#在plugins这一行改为下面这一行
plugins=(git zsh-autosuggestions)
#按esc,然后输入:wq,敲回车,保存修改,再执行下面这一行
source .zshrc


#安装插件-语法高亮
git clone https://gitee.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
vim ~/.zshrc
#在plugins这一行改为下面这一行
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
#按esc,然后输入:wq,敲回车,保存修改,再执行下面这一行
source .zshrc

zsh配置conda

容易出现conda:command not found错误。解决方法是将.bashrc中对conda的配置直接复制到.zshrc中,source一下即可解决。

终端多路复用器 tmux

windows,sessions,panes 一些命令:

  • 快捷键:ctrl+B+:
  • 所有tmux命令 tmux list-commands
  • 当前会话所有信息:tmux info

  • 创建会话:tmux new -s 会话名称

  • 分离会话: tmux detach
  • 杀死会话: tmux kill -s 会话名称
  • ls会话: tmux ls
  • 接入会话: tmux attach -s 会话名称
  • 退出会话: exit
  • 重命名会话: tmux rename-sesion -t 旧名称 新名称
  • 切换会话: tmux switch -t 会话名称

窗格操作:

  1. 上下划分两个窗格tmux split-window, 左右加入-h
  2. 光标移动到上方窗格tmux select-pane -U 或者D,L,R
  3. 交换窗格位置tmux swap-pane -U
  4. 删除窗格操作tmux kill-pane -t .

窗口操作:

  1. 新建窗口:tmux new-window -n 新窗口名称
  2. 切换窗口: tmux select-window -t 窗口名称
  3. 重命名:tmux rename-window -t 旧名称 新名称

tmux可以设置在退出ssh连接后仍然能在服务器后台运行程序

Bash
tmux new -s bgpython
tmux detach
exit
# 重新登录ssh
tmux list-sessions
tmux attach -t bgpython
# 删除会话
exit

包管理工具

windows下 scoop, Chocolatey. Mac 下 homebrew, linux下apt-get。

终端命令好用的包

tldr

too long don't read:给出命令使用实例,非常好用,用上即爱上。

fd

安装参考fd github仓库 高阶版的find工具,支持模糊匹配fd 文件名 路径

fzf

查找工具,模糊匹配,

  1. 快捷键ctrl+R在命令历史记录里面查找
  2. 快捷键ctrl+t在当前文件夹下查找, 譬如'mv ctrl+t ', 'find ctrl+t' ,' vi ctrl+t'
  3. 一般命令为cat a.txt | fzf 交互界面实时查找,Esc键退出。

autojump

具体安装参考autojump-github

Bash
git clone git@github.com:wting/autojump.git
cd autojump
./install.py or ./uninstall.py
# 安装完成后会提示一句话需要手动加入终端配置文件中,在这里我加入~/.zshrc中
which autojump
# 可以删除git clone的仓库

使用方法:j 文件夹

基础命令

Bash
# list
ls -la 
# 输出, 注意转义字符
echo hello \ world
# concatenate
cat < hello1.txt > hello2.txt
# 管道 |,  tail 显示文件末尾内容
ls -l | tail -n1 > ls.txt
# tee 用于显示程序的输出并将其复制到一个文件中 ,不仅写入文件而且写入终端,有时可以替代echo
echo 1060 | sudo tee brightness
# mv 重命名或移动
mv source_file dest_file
# cp,rm类似,rmdir
# 查看帮助
man 指令
#查找字符串
grep 字符 文件或文件夹

type

展示命令的类型以及位置

alias

别名 alias mv="mv -i", 查看使用alias mv, 如果需要长期使用,修改.bashrc文件

find文件搜索

  1. find 查找位置 -name '名称' -type d或者是f
  2. 查找并删除:find . -name '*.txt' | xargs rm -rf

grep文本搜索

Globally search a Regular Expression and Print的缩写。 grep 字符名称 文件名称,递归搜索用-R

xargs

xargs 捕获一个命令的输出,转换格式(换行和空白将会被空格取代)编程参数然后传递给另一个命令。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数

  1. 查找并删除:find . -name '*.txt' | xargs rm -rf

History

查找历史命令:history

Bash
# 查找最近10条命令中包含git的命令
history 10 | grep git

ps 进程 与 pstree 与 kill

Bash
ps aux #显示正在使用的进程
ps aux | grep name
pstree -p #进程树
kill #杀死进程

调试相关

  1. lsof 查看打开的文件以及对应的程序
  2. web调试 curl wget http
  3. netstat 监听端口netstat -lntp
  4. htop系统信息
  5. ncdu磁盘信息

less分页

常常是cat ssh.log | less

其他不常见命令

  1. 使用nohup或者disown使一个后台进程持续运行

tips

  1. 在两个文件夹中上下切换 cd -
  2. < 用来更改输入, > 用来更改输出, > 表示 重写>>表示追加, 譬如cat < hello1.txt >> hello2.txt
  3. 在linux系统中 /sys 是存放很多系统文件的地方,一般不要改动。
  4. sudo 切换为superuser, sudo su $转换成#,但是有可能忘记exit导致更改系统,因此可以采用echo 1060 | sudo tee brightness
  5. xdg_open ,linux中使用合适的程序打开文件,在mac上是open
  6. 通配符*?
  7. 首行识别运行文件的解释器或编译器 eg: python文件首行总是#!/usr/local/env python

需要注意

  1. shell中的命令通常使用 空格来区分参数,不要随意使用空格(除非空格后代入参数,如果是普通的赋值,就使用简单的A=B不加空格即可),字符串参数或者代用空格的参数使用 ""或者 ‘’

  2. shell中的变量可以使用 $来引用, 譬如 echo "Value is $foo"

  3. shell编写控制程序:

  4. vim mcd.sh,文件内容如下:

    bash mcd(){ mkdir -p "$1" cd "$1" }

    $0是程序名称,$1以及之后是参数。

  5. 然后编译加载mcd.sh,source mcd.sh

  6. 传入参数并运行:mcd test

  7. 或者./mcd.sh test

  8. shell预定了很多变量:

  9. 譬如 $?能获取上条命令的返回值 ,通常用来检查错误。

  10. $_会获取上条命令的最后一个参数
  11. $$获取进程PID
  12. $#获取参数数量

  13. shellcheck是一款shell 脚本静态检查工具,可以直接在终端pip install shellcheck,运行shellcheck test.sh检查程序,另外 vscode中有shellcheck插件,使用很方便。


最后更新: September 28, 2022
Back to top