终端命令
Terminal的定义
只有操作系统的内核kernel才能控制计算机硬件,无论是图形界面GUI还是命令行都是假设在用户和内核之间的一座桥梁,shell或者terminal可以被理解为一种 “代理”,与QQ,微信等应用软件平级。
常见的shell有Powershel,cmd, bash, git bash, zsh。复杂的有Alacritty,iTerm 2, Tabby。这里要推荐zsh作为自己的终端。
dotfiles
github上有一些dotfiles库,将常用的配置打包发布,便于整理转移,譬如dotfiles, 请阅读文档。
linux终端配置-zsh
#我们知道在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插件
## 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 会话名称
窗格操作:
- 上下划分两个窗格
tmux split-window
, 左右加入-h
- 光标移动到上方窗格
tmux select-pane -U
或者D,L,R - 交换窗格位置
tmux swap-pane -U
- 删除窗格操作
tmux kill-pane -t .
窗口操作:
- 新建窗口:
tmux new-window -n 新窗口名称
- 切换窗口:
tmux select-window -t 窗口名称
- 重命名:
tmux rename-window -t 旧名称 新名称
tmux可以设置在退出ssh连接后仍然能在服务器后台运行程序
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
查找工具,模糊匹配,
- 快捷键ctrl+R在命令历史记录里面查找
- 快捷键ctrl+t在当前文件夹下查找, 譬如'mv ctrl+t ', 'find ctrl+t' ,' vi ctrl+t'
- 一般命令为
cat a.txt | fzf
交互界面实时查找,Esc键退出。
autojump
具体安装参考autojump-github
git clone git@github.com:wting/autojump.git
cd autojump
./install.py or ./uninstall.py
# 安装完成后会提示一句话需要手动加入终端配置文件中,在这里我加入~/.zshrc中
which autojump
# 可以删除git clone的仓库
使用方法:j 文件夹
基础命令
# 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文件搜索
find 查找位置 -name '名称' -type d或者是f
- 查找并删除:
find . -name '*.txt' | xargs rm -rf
grep文本搜索
Globally search a Regular Expression and Print的缩写。 grep 字符名称 文件名称
,递归搜索用-R
xargs
xargs 捕获一个命令的输出,转换格式(换行和空白将会被空格取代)编程参数然后传递给另一个命令。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数
- 查找并删除:
find . -name '*.txt' | xargs rm -rf
History
查找历史命令:history
ps 进程 与 pstree 与 kill
调试相关
- lsof 查看打开的文件以及对应的程序
- web调试 curl wget http
- netstat 监听端口netstat -lntp
- htop系统信息
- ncdu磁盘信息
less分页
常常是cat ssh.log | less
其他不常见命令
- 使用nohup或者disown使一个后台进程持续运行
tips
- 在两个文件夹中上下切换
cd -
<
用来更改输入,>
用来更改输出,>
表示 重写,>>
表示追加, 譬如cat < hello1.txt >> hello2.txt
- 在linux系统中
/sys
是存放很多系统文件的地方,一般不要改动。 - sudo 切换为superuser,
sudo su
$转换成#,但是有可能忘记exit导致更改系统,因此可以采用echo 1060 | sudo tee brightness
xdg_open
,linux中使用合适的程序打开文件,在mac上是open
- 通配符:
*
和?
- 首行识别运行文件的解释器或编译器 eg: python文件首行总是
#!/usr/local/env python
需要注意
-
shell中的命令通常使用 空格来区分参数,不要随意使用空格(除非空格后代入参数,如果是普通的赋值,就使用简单的A=B不加空格即可),字符串参数或者代用空格的参数使用 ""或者 ‘’
-
shell中的变量可以使用 $来引用, 譬如
echo "Value is $foo"
-
shell编写控制程序:
-
vim mcd.sh
,文件内容如下:bash mcd(){ mkdir -p "$1" cd "$1" }
$0
是程序名称,$1以及之后
是参数。 -
然后编译加载mcd.sh,source mcd.sh
-
传入参数并运行:mcd test
-
或者
./mcd.sh test
-
shell预定了很多变量:
-
譬如
$?
能获取上条命令的返回值 ,通常用来检查错误。 $_
会获取上条命令的最后一个参数$$
获取进程PID-
$#
获取参数数量 -
shellcheck是一款shell 脚本静态检查工具,可以直接在终端pip install shellcheck,运行shellcheck test.sh检查程序,另外 vscode中有shellcheck插件,使用很方便。