cd
常用cd
命令切换目录。
cd -
命令回到之前的目录,-
相当于$OLDPWD。cd -
就相当于cd $OLDPWD
。
目录栈
linux目录栈顶端永远都存放着当前目录
kun@ubuntu:~/fluoride$ dirs
~/fluoride
pushd
和popd
对一个目录栈进行操作,dirs
显示目录栈的内容
dir选项 | 含义 |
---|---|
-p | 每行显示一条记录 |
-v | 每行显示一条记录,同时展示该记录在栈中的index |
-c | 清空目录栈 |
pushd
用pushd切换目录时,将历史目录以栈结构的形式保存了下来。cd不会保存,仅替换栈顶
kun@ubuntu:~/fluoride$ pushd bluetooth/
~/fluoride/bluetooth ~/fluoride
kun@ubuntu:~/fluoride/bluetooth$ dirs -v
0 ~/fluoride/bluetooth
1 ~/fluoride
kun@ubuntu:~/fluoride/bluetooth$ cd ..
kun@ubuntu:~/fluoride$ dirs -v
0 ~/fluoride
1 ~/fluoride
pushd不带任何参数,将目录栈最顶层的两个目录进行交换。效果等于cd -
,但目录栈的结果不同
kun@ubuntu:~/fluoride$ cd ..
kun@ubuntu:~$ dirs -v
0 ~
1 ~/fluoride
kun@ubuntu:~$ pushd
~/fluoride ~
kun@ubuntu:~/fluoride$ dirs -v
0 ~/fluoride
1 ~
kun@ubuntu:~/fluoride$ cd -
/home/kun
kun@ubuntu:~$ dirs -v
0 ~
1 ~
pushd +n
切换到目录栈中的第n个目录(这里的n就是dirs -v
命令展示的index),并将该目录以栈循环的方式推到栈顶。
kun@ubuntu:~/fluoride/bluetooth$ dirs -v
0 ~/fluoride/bluetooth
1 ~/fluoride
2 ~
kun@ubuntu:~/fluoride/bluetooth$ pushd +2
~ ~/fluoride/bluetooth ~/fluoride
kun@ubuntu:~$ dirs -v
0 ~
1 ~/fluoride/bluetooth
2 ~/fluoride
popd
popd
不带参数,将目录栈中的栈顶元素出栈。这时,栈顶元素发生变化,自然当前目录也会发生相应的切换(接上文的执行现场)
kun@ubuntu:~$ dirs -v
0 ~
1 ~/fluoride
kun@ubuntu:~$ popd
~/fluoride
kun@ubuntu:~/fluoride$ dirs -v
0 ~/fluoride
popd +n
将目录栈中的第n个元素删除
kun@ubuntu:~$ dirs -v
0 ~
1 ~/fluoride/bluetooth
2 ~/fluoride
kun@ubuntu:~$ popd +1
~ ~/fluoride
kun@ubuntu:~$ dirs -v
0 ~
1 ~/fluoride
pushd和popd的-n
参数
上面我们用的都是+n作为参数,实际在使用pushd和popd的时候,有时候也会用到-n参数。两者的差别如下:+n的含义是从栈顶往栈底方向进行计数,从0开始;-n的含义刚好相反,从栈底向栈顶方向计数,从0开始。这样有点拗口,实际上,从默认的dirs命令(不带任何参数)的输出来解释最好理解了:+n是指从左往右数,-n是指从右往左数,都是从0开始。