4. Cruising The Filesystem
Visiting Specific Directories Efficiently
Jump to Your Home Directory
1
2
3
4
5
| $ pwd
/etc Start somewhere else
$ cd Run cd with no arguments...
$ pwd
/home/smith ...and you're home again
|
1
2
| $ cd $HOME/Work
$ cd ~/Work
|
1
2
| $ echo $HOME ~
/home/smith /home/smith
|
1
2
| $ echo ~jones
/home/jones
|
Move Faster with Tab Completion
1
2
3
| $ cd /usr
$ ls
bin games include lib local sbin share src
|
1
2
| $ cd sha<Tab>
$ cd share/
|
1
2
3
4
5
6
7
| $ cd s<Tab>
$ cd s<Tab><Tab>
sbin/ share/ src/
$ cd sh<Tab>
$ cd share/
|
Tab completion is not only for cd
commands, but also works for most commands.
Hop to Frequently Visited Directories Using Aliases or Variables
1
2
3
4
5
6
| # In a shell configuration file:
alias work="cd $HOME/Work/Projects/Web/src/include"
$ work
$ pwd
/home/smith/Work/Projects/Web/src/include
|
1
2
3
4
5
6
| $ work=$HOME/Work/Projects/Web/src/include
$ cd $work
$ pwd
/home/smith/Work/Projects/Web/src/include
$ ls $work/css Use the variable in other ways
main.css mobile.css
|
1
2
| # Place in a shell configuration file and source it:
alias rcedit='cc $HOME/.bashrc'
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| # Define the qcd function
qcd () {
# Accept 1 argument that's a string key, and perform a different
# "cd" operation for each key.
case "$1" in
work)
cd $HOME/Work/Projects/Web/src/include
;;
recipes)
cd $HOME/Family/Cooking/Recipes
;;
video)
cd /data/Arts/Video/Collection
;;
beatles)
cd $HOME/Music/mp3/Artists/B/Beatles
;;
*)
# The supplied argument was not one of the supported keys
echo "qcd: unknown key '$1'"
return 1
;;
esac
# Helpfully print the current directory name to indicate where you are
pwd
}
# Set up tab completion
complete -W "work recipes video beatles" qcd
|
1
2
3
4
| $ qcd <Tab><Tab>
beatles recipes video work
$ qcd v<Tab><Enter> Completes 'v' to 'video'
/data/Arts/Video/Collection
|
Make a Big Filesystem Feel Smaller with CDPATH
1
2
3
4
| $ CDPATH=/usr Set a CDPATH
$ cd /tmp No output: CDPATH wasn't consulted
$ cd bin cd consults CDPATH...
/usr/bin ...and prints the new working directory
|
Organize Your Home Directory for Fast Navigation
1
2
| # Place in a shell configuration file and source it:
export CDPATH=$HOME:$HOME/Work:$HOME/Family:$HOME/Linux:$HOME/Music:..
|
1
| $ (ls -d */ && ls -d */*/ | cut -d/ -f2-) | sort | uniq -c | sort -nr | less
|
Returning to Directories Efficiently
Toggle Between Two Directories with “cd -“
1
2
3
4
5
| $ pwd
/home/smith/Finances/Bank/Checking/Statements
$ cd /etc
$ cd -
/home/smith/Finances/Bank/Checking/Statements
|
Toggle Among Many Directories with pushd and popd
Push a directory onto the stack
1
2
3
4
5
6
7
8
9
10
| $ pwd
/home/smith/Work/Projects/Web/src
$ pushd /var/www/html
/var/www/html ~/Work/Projects/Web/src
$ pushd /etc/apache2
/etc/apache2 /var/www/html ~/Work/Projects/Web/src
$ pushd /etc/ssl/certs
/etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src
$ pwd
/etc/ssl/certs
|
View a directory stack
1
2
| $ dirs
/etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src
|
1
2
3
4
5
| $ dirs -p
/etc/ssl/certs
/etc/apache2
/var/www/html
~/Work/Projects/Web/src
|
1
2
3
4
5
| $ dirs -p | nl -v0
0 /etc/ssl/certs
1 /etc/apache2
2 /var/www/html
3 ~/Work/Projects/Web/src
|
1
2
3
4
5
6
7
8
| $ dirs -v
0 /etc/ssl/certs
1 /etc/apache2
2 /var/www/html
3 ~/Work/Projects/Web/src
# Place in a shell configuration file and source it:
alias dirs='dirs -v'
|
Pop a directory from the stack
1
2
| $ dirs
/etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src
|
1
2
3
4
5
6
7
8
9
10
| $ popd
/etc/apache2 /var/www/html ~/Work/Projects/Web/src
$ popd
/var/www/html ~/Work/Projects/Web/src
$ popd
~/Work/Projects/Web/src
$ popd
bash: popd: directory stack empty
$ pwd
~/Work/Projects/Web/src
|
1
2
3
| # Place in a shell configuration file and source it:
alias gd=pushd
alias pd=popd
|
Swap directories on the stack
1
2
3
4
5
6
7
8
| $ dirs
/etc/apache2 ~/Work/Projects/Web/src /var/www/html
$ pushd
~/Work/Projects/Web/src /etc/apache2 /var/www/html
$ pushd
/etc/apache2 ~/Work/Projects/Web/src /var/www/html
$ pushd
~/Work/Projects/Web/src /etc/apache2 /var/www/html
|
Turn a mistaken cd into a pushd
1
2
3
4
5
| $ dirs
~/Work/Projects/Web/src /var/www/html /etc/apache2
$ cd /etc/ssl/certs
$ dirs
/etc/ssl/certs /var/www/html /etc/apache2
|
1
2
3
4
| $ pushd -
~/Work/Projects/Web/src /etc/ssl/certs /var/www/html /etc/apache2
$ pushd
/etc/ssl/certs ~/Work/Projects/Web/src /var/www/html /etc/apache2
|
Go deeper into the stack
1
2
3
4
5
6
| $ dirs
/etc/ssl/certs ~/Work/Projects/Web/src /var/www/html /etc/apache2
$ pushd +1
~/Work/Projects/Web/src /var/www/html /etc/apache2 /etc/ssl/certs
$ pushd +2
/etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src /var/www/html
|
1
2
3
4
5
6
| # To shift /var/www/html to the top of the stack (and make it your current directory), run pushd +3.
$ dirs -v
0 /etc/apache2
1 /etc/ssl/certs
2 ~/Work/Projects/Web/src
3 /var/www/html
|
1
2
3
4
5
| # To jump to the directory at the bottom of the stack, run pushd -0 (dash zero):
$ dirs
/etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src /var/www/html
$ pushd -0
/var/www/html /etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src
|
1
2
3
4
5
6
| $ dirs
/var/www/html /etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src
$ popd +1
/var/www/html /etc/ssl/certs ~/Work/Projects/Web/src
$ popd +2
/var/www/html /etc/ssl/certs
|
An alternative is to open multiple virtual displays using command-line programs like screen
and tmux
, which are called terminal multiplexers. They’re more effort to learn than directory stacks but worth a look.
Screen
会话管理
操作 | 快捷键 | 说明 |
---|
创建新会话 | screen 或 screen -S <会话名> | 直接输入 screen 创建无名称会话;-S 选项可指定会话名,如 screen -S myproject 创建名为 myproject 的会话 |
分离当前会话 | Ctrl + A ,然后按 d | 将会话置于后台继续运行,可随时重新连接 |
列出所有会话 | screen -ls | 显示所有正在运行和已分离的 screen 会话 |
恢复会话 | screen -r <会话名或编号> | 重新连接到指定会话,若只有一个分离会话,可直接用 screen -r |
终止会话 | 在会话中输入 exit 或 screen -X -S <会话名或编号> quit | 前者在会话内直接退出,后者在外部终止指定会话 |
窗口操作
操作 | 快捷键 | 说明 |
---|
创建新窗口 | Ctrl + A ,然后按 c | 在当前会话中创建一个新的终端窗口 |
切换到下一个窗口 | Ctrl + A ,然后按 n | 按顺序切换到下一个窗口 |
切换到上一个窗口 | Ctrl + A ,然后按 p | 按顺序切换到上一个窗口 |
切换到指定编号窗口 | Ctrl + A ,然后按 <窗口编号> | 直接切换到对应编号的窗口,编号从 0 开始 |
列出所有窗口 | Ctrl + A ,然后按 w | 显示当前会话中所有窗口的列表及状态 |
重命名当前窗口 | Ctrl + A ,然后按 A | 输入新的窗口名称并回车确认 |
其他实用操作
操作 | 快捷键 | 说明 |
---|
锁定会话 | Ctrl + A ,然后按 x | 锁定当前会话,需要输入登录密码解锁 |
进入滚动模式 | Ctrl + A ,然后按 [ | 可以使用方向键、Page Up 、Page Down 滚动屏幕查看历史输出 |
退出滚动模式 | 按 Enter | 在滚动模式下按此键退出 |
复制模式 | Ctrl + A ,然后按 [ ,移动光标到起始位置,按 Space 开始标记,移动到结束位置按 Enter 完成复制 | 用于复制屏幕上的文本内容 |
粘贴内容 | Ctrl + A ,然后按 ] | 将复制模式中复制的内容粘贴到当前位置 |