bash命令常用技巧

115 阅读2分钟

常用技巧

# 列出最常使⽤的命令
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.gz" | 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/images

# 快速创建项⽬⽬录
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

有用的函数

⾃动解压:判断⽂件后缀名并调⽤相应解压命令

# ⾃动解压:判断⽂件后缀名并调⽤相应解压命令
function q-extract() {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar -xvjf $1 ;;
*.tar.gz) tar -xvzf $1 ;;
*.tar.xz) tar -xvJf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar -xvf $1 ;;
*.tbz2) tar -xvjf $1 ;;
*.tgz) tar -xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}

⾃动压缩:判断后缀名并调⽤相应压缩程序

# ⾃动压缩:判断后缀名并调⽤相应压缩程序

function q-compress() {
if [ -n "$1" ] ; then
FILE=$1
case $FILE in
*.tar) shift && tar -cf $FILE $* ;;
*.tar.bz2) shift && tar -cjf $FILE $* ;;
*.tar.xz) shift && tar -cJf $FILE $* ;;
*.tar.gz) shift && tar -czf $FILE $* ;;
*.tgz) shift && tar -czf $FILE $* ;;
*.zip) shift && zip $FILE $* ;;
*.rar) shift && rar $FILE $* ;;
esac
else
echo "usage: q-compress <foo.tar.gz> ./foo ./bar"
fi
}

漂亮的带语法⾼亮的 color cat

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

function ccat() {
local style="monokai"
if [ $# -eq 0 ]; then
pygmentize -P style=$style -P tabsize=4 -f terminal256 -g
else
for NAME in $@; do
pygmentize -P style=$style -P tabsize=4 -f terminal256 -g "$NAME"
done
fi
}