缘起
在nix系统中,shell命令就是你的工具箱,它可以帮助你完成各种各样的任务。于是就有人好奇,平常用的最多的命令是啥啊?于是乎,某命令就出现了
$ history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[a] \
$ " " CMD[a]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t | \
$ sort -nr | nl | head -n10
1 295 29.5% ls
2 189 18.9% cd
3 133 13.3% vim
4 96 9.6% python
5 59 5.9% exit
6 33 3.3% df
7 26 2.6% history
8 25 2.5% sudo
9 17 1.7% rm
10 14 1.4% clear
瞧,这就是我的命令使用情况,cd排名第二。看来在nix寻路是一件再平常不过的事情了。于是乎,敢问路在何方?
cd以及相关命令
要想到某个目录,直接cd
命令就可以了,而且cd
命令还支持绝对路径和相对路径。但是,但是,每次都要在几个目录里跳来跳去,烦啊
预定义命令
shell预定义了一些命令,可以方便的进行一下跳转,比如
cd - #回到上一次目录
cd ~ #回到当前根目录
cd ~vagrant #回到vagrant用户的根目录
$ cp file.txt /some/annoyingly/deep/target/directory/other.txt
$ cd !$:h #这个其实是shell命令对参数的处理了,有空细说
$ pwd # => /some/annoyingly/deep/target/directory
alias的妙用
通过alias
命令,可以自己设定一些快捷命令,很方便的进行目录的跳转。比如最烦的就是跳转到上层目录,上上层目录,上上上层目录,上上…层目录。通过设定alias
,这种问题可以很方便的解决
alias cd1="cd .."
alias cd2="cd ../.."
alias cd3="cd ../../.."
alias cd4="cd ../../../.."
alias cd5="cd ../../../../.."
dirs、pushd、popd
有时候会在几个目录之间不停的来回跳转,何不把目录栈存放起来呢,这就是这几个命令的用处了
$dirs #显示目录栈,第一条记录为当前目录,没有存放在栈中
$pushd . #把当前目录压栈
$pushd /dev #把当前目录压栈,并跳转到/dev目录
$popd #出栈,并跳转到出栈的目录
目录跳转神器(autojump, z, j2)
个人猜测,根据8:2原则,80%的cd
命令只跳转到20%的常用目录中,20%的cd
命令跳转到80%的不常用目录中。既然这样,为啥不把所有cd的目录存放起来,然后做一些分析,这样岂不是更容易了?于是乎,某贴出现了
Hacker News某人发了一个帖子,讲了一些unix trick的用法,其中提到了j.py
‘j.py’ http://tiny.cc/62qjow remembers your most used folders and is an incredible substitute to browse directories by name instead of ‘cd’
HN评论里有人不满意了,于是又出来一个玩意
Use z (https://github.com/rupa/z), not j.py.
后来我翻了翻github,才明白,这些玩意的祖宗叫autojump,python+shell写的一个目录跳转神器
整理一下:
至于怎么用,神器还是值得自己研究的
神器后的幸福生活
自从用上了z/j2.py后,妈妈再也不担心我迷路了,因为神器在手,条条大路通罗马