bash

常用快捷键(默认使用 Emacs 键位)

CTRL + A              # 移动到行首,同 <Home>
CTRL + B              # 向后移动,同 <Left>
CTRL + C              # 结束当前命令
CTRL + D              # 删除光标前的字符,同 <Delete> ,或者没有内容时,退出会话
CTRL + E              # 移动到行末,同 <End>
CTRL + F              # 向前移动,同 <Right>
CTRL + G              # 退出当前编辑(比如正在 CTRL+R 搜索历史时)
CTRL + H              # 删除光标左边的字符,同 <Backspace>
CTRL + K              # 删除光标位置到行末的内容
CTRL + L              # 清屏并重新显示
CTRL + N              # 移动到命令历史的下一行,同 <Down>
CTRL + O              # 类似回车,但是会显示下一行历史
CTRL + P              # 移动到命令历史的上一行,同 <Up>
CTRL + R              # 历史命令反向搜索,使用 CTRL+G 退出搜索
CTRL + S              # 历史命令正向搜索,使用 CTRL+G 退出搜索
CTRL + T              # 交换前后两个字符
CTRL + U              # 删除字符到行首
CTRL + V              # 输入字符字面量,先按 CTRL+V 再按任意键
CTRL + W              # 删除光标左边的一个单词
CTRL + X              # 列出可能的补全
CTRL + Y              # 粘贴前面 CTRL+u/k/w 删除过的内容
CTRL + Z              # 暂停前台进程返回 bash,需要时可用 fg 将其切换回前台
CTRL + _              # 撤销(undo),有的终端将 CTRL+_ 映射为 CTRL+/ 或 CTRL+7

ALT + b               # 向后(左边)移动一个单词
ALT + d               # 删除光标后(右边)一个单词
ALT + f               # 向前(右边)移动一个单词
ALT + t               # 交换字符
ALT + BACKSPACE       # 删除光标前面一个单词,类似 CTRL + W,但不影响剪贴板

CTRL + X CTRL + X     # 连续按两次 CTRL+X,光标在当前位置和行首来回跳转 
CTRL + X CTRL + E     # 用你指定的编辑器,编辑当前命令

BASH 基本操作

目录操作

文件操作

用户管理

进程管理

常用命令:SSH / 系统信息 / 网络

变量操作

事件指示符

函数

条件判断(兼容 posix sh 的条件判断):man test

分支控制:if 和经典 test,兼容 posix sh 的条件判断语句

流程控制:while / for / case / until

命令处理

输出/输入 重定向

文本处理 - cut

文本处理 - awk / sed

排序 - sort

键盘绑定

网络管理:ip / ifconfig / nmap ...

有趣的命令

常用技巧

列出最常使用的命令

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

列出所有网络状态:ESTABLISHED / TIME_WAIT / FIN_WAIT1 / FIN_WAIT2

netstat -n | awk '/^tcp/ {++tt[$NF]} END {for (a in tt) print a, tt[a]}'

通过 SSH 来 mount 文件系统

sshfs name@server:/path/to/folder /path/to/mount/point

显示前十个运行的进程并按内存使用量排序

ps aux | sort -nk +4 | tail

在右上角显示时钟

while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done&

从网络上的压缩文件中解出一个文件来,并避免保存中间文件

wget -qO - "http://www.tarball.com/tarball.gzarrow-up-right" | tar zxvf -

性能测试:测试处理器性能

python -c "import test.pystone;print(test.pystone.pystones())"

性能测试:测试内存带宽

dd if=/dev/zero of=/dev/null bs=1M count=32768

Linux 下挂载一个 iso 文件

mount /path/to/file.iso /mnt/cdrom -oloop

通过主机 A 直接 ssh 到主机 B

ssh -t hostA ssh hostB

下载一个网站的所有图片

wget -r -l1 --no-parent -nH -nd -P/tmp -A".gif,.jpg" http://example.com/imagesarrow-up-right

快速创建项目目录

mkdir -p work/{project1,project2}/{src,bin,bak}

按日期范围查找文件

find . -type f -newermt "2010-01-01" ! -newermt "2010-06-01"

显示当前正在使用网络的进程

lsof -P -i -n | cut -f 1 -d " "| uniq | tail -n +2

Vim 中保存一个没有权限的文件

:w !sudo tee > /dev/null %

在 .bashrc / .bash_profile 中加载另外一个文件(比如你保存在 github 上的配置)

source ~/github/profiles/my_bash_init.sh

反向代理:将外网主机(202.115.8.1)端口(8443)转发到内网主机 192.168.1.2:443

ssh -CqTnN -R 0.0.0.0:8443:192.168.1.2:443 user@202.115.8.1

正向代理:将本地主机的 8443 端口,通过 192.168.1.3 转发到 192.168.1.2:443

ssh -CqTnN -L 0.0.0.0:8443:192.168.1.2:443 user@192.168.1.3

socks5 代理:把本地 1080 端口的 socks5 的代理请求通过远程主机转发出去

ssh -CqTnN -D localhost:1080 user@202.115.8.1

终端下正确设置 ALT 键和 BackSpace 键

http://www.skywind.me/blog/archives/2021arrow-up-right

有用的函数

自动解压:判断文件后缀名并调用相应解压命令

自动压缩:判断后缀名并调用相应压缩程序

漂亮的带语法高亮的 color cat ,需要先 pip install pygments

好玩的配置

放到你的 ~/.bashrc 配置文件中,给 man 增加漂亮的色彩高亮

ALT + hjkl/HJKL 快速移动光标,将下面内容添加到 ~/.inputrc 中可作用所有工具, 包括 bash/zsh/python/lua 等使用 readline 的工具,帮助见:info rluserman

References

Last updated