≡菜单

6个很棒的Linux 光盘命令技巧–极客的生产率提示3

[cd命令黑客]本文是正在进行中的一部分 极客的生产力提示 系列。 光盘是Unix会话中最常用的命令之一。在本文中,我’ve提供了6个cd命令hack,可立即提高您的工作效率,并使您可以更轻松地从命令行导航目录结构。

hack#1: 采用CDPATH to define the base directory for 光盘命令

如果您经常对特定父目录的子目录执行cd,则可以将CDPATH设置为父目录,并对子目录执行cd,而无需提供父目录路径,如下所述。

[[email protected] ~]# 密码
/home/ramesh

[[email protected] ~]# 光盘 mail
-bash: 光盘: mail: No such 科幻le or directory
[Note: This is looking for mail directory under current directory]

[[email protected] ~]# 导出CDPATH = / etc
[[email protected] ~]# 光盘 mail
[Note: This is looking for mail under /etc 和 not under current directory]

[[email protected] /etc/mail]# 密码
/etc/mail

要使此更改永久生效,请添加 导出CDPATH = / etc 到你的〜/ .bash_profile

在以下情况下,此hack非常有用:

  • 经常在$ ORACLE_HOME下工作的Oracle DBA可以将CDPATH变量设置为oracle home
  • Unix系统管理员经常在/ etc下工作,可以将CDPATH变量设置为/ etc
  • 经常在项目目录/ home / projects下工作的开发人员可以将CDPATH变量设置为/ home / projects
  • 最终用户经常访问其主目录下的子目录,可以将CDPATH变量设置为〜(主目录)

技巧2: 采用cd alias to navigate up the directory effectively

当您浏览很长的目录结构时,您可能正在使用带有多个.. \的cd .. \ .. \’取决于要上移的目录数量,如下所示。

# mkdir -p / tmp/very/long/directory/structure/that/is/too/deep

# 光盘 / tmp/very/long/directory/structure/that/is/too/deep
# 密码
/tmp/very/long/directory/structure/that/is/too/deep

# 光盘../../../../
# 密码
/tmp/very/long/directory/structure

代替执行cd ../../../ ..来向上浏览四个级别,请使用以下别名方法之一:

使用..n浏览目录: 在下面的示例中,..4 is used to go up 4 directory level, ..3 to go up 3 directory level, ..2 to go up 2 directory level. Add the following alias to the .bash_profile 和 re-login.

别名.. ="光盘.."
alias ..2="光盘../.."
alias ..3="光盘../../.."
alias ..4="光盘../../../.."
alias ..5="光盘../../../../.."

# 光盘 / tmp/very/long/directory/structure/that/is/too/deep
#..4
[Note: use ..4 to go up 4 directory level]
# 密码
/tmp/very/long/directory/structure/


仅使用点导航目录: 在下面的示例中,…..(五个点)用于提升4个目录级别。键入5个小点以增加4个目录结构确实很容易记住,因为当您键入前两个小点时,您正在思考“上一个目录”,之后每增加一个小点,就向上一级。因此,使用…。 (四个点)上升到3个目录级别,..(两个点)上升到1个目录级别。将以下别名添加到.bash_profile,然后重新登录…..(五个点)正常工作。

别名.. ="光盘.."
alias ...="光盘../.."
alias ....="光盘../../.."
alias .....="光盘../../../.."
alias ......="光盘../../../../.."

# 光盘 / tmp/very/long/directory/structure/that/is/too/deep
# .....
[Note: use ..... (five 做ts) to go up 4 directory level]
# 密码
/tmp/very/long/directory/structure/


使用cd导航目录,后跟连续的点: 在下面的示例中,cd…..(cd后跟五个点)用于上升到4目录级别。使其很容易记住5个点,并增加4个目录结构,因为当您键入前两个点时,您正在思考“上一个目录”,之后每增加一个小点,就向上一级。因此,使用cd…。 (cd后跟四个点)以转到3目录级别和cd…(cd后跟三个点)以进入2目录级别。将以下别名添加到.bash_profile中,并重新登录上述cd…..(五个点)正常工作。

alias 光盘..="光盘.."
alias 光盘...="光盘../.."
alias 光盘....="光盘../../.."
alias 光盘.....="光盘../../../.."
alias 光盘......="光盘../../../../.."

# 光盘 / tmp/very/long/directory/structure/that/is/too/deep
# 光盘.....
[Note: use 光盘..... to go up 4 directory level]
# 密码
/tmp/very/long/directory/structure

技巧3: 使用单个命令执行mkdir和cd

有时,当您创建一个新目录时,您可能会立即CD到新目录中以执行某些工作,如下所示。

# mkdir -p / tmp/subdir1/subdir2/subdir3
# 光盘 / tmp/subdir1/subdir2/subdir3
# 密码
/tmp/subdir1/subdir2/subdir3

不会’在单个命令中同时组合mkdir和cd会很好吗?将以下内容添加到.bash_profile中,然后重新登录。

function mkdircd () { mkdir -p "[email protected]" && eval 光盘 "\"\$$#\""; }

现在,使用一个命令同时执行mkdir和cd,如下所示:

# mkdircd / tmp/subdir1/subdir2/subdir3
[Note: This creates the directory 和 光盘 to it automatically]
# 密码
/tmp/subdir1/subdir2/subdir3

技巧4: 采用“cd -”在最后两个目录之间切换

您可以使用cd在最后两个当前目录之间切换– as shown below.

# 光盘 / tmp/very/long/directory/structure/that/is/too/deep
# 光盘 / tmp/subdir1/subdir2/subdir3

# 光盘-
# 密码
/tmp/very/long/directory/structure/that/is/too/deep

# 光盘-
# 密码
/tmp/subdir1/subdir2/subdir3

# 光盘-
# 密码
/tmp/very/long/directory/structure/that/is/too/deep

注意:您还可以使用历史记录中提到的example#12和#13将历史记录中其他命令的参数替换为cd命令。 命令行历史记录示例 文章。

技巧5: 采用dirs, 推 和 弹出 to manipulate directory stack

您可以使用目录堆栈将目录压入其中,然后再从堆栈中弹出目录。在此示例中,使用以下三个命令。

  • 目录:显示目录堆栈
  • 推入:将目录推入堆栈
  • 弹出:从堆栈弹出目录,然后将其cd到

Dirs将始终打印当前目录,后跟堆栈内容。即使目录堆栈为空,dirs命令仍将仅打印当前目录,如下所示。

# 弹出
-bash: 弹出: directory stack empty

# rs
~

# 密码
/home/ramesh

如何使用推入式和弹出式?让我们首先创建一些临时目录,然后将它们推入目录堆栈,如下所示。

# mkdir / tmp/dir1
# mkdir / tmp/dir2
# mkdir / tmp/dir3
# mkdir / tmp/dir4

# 光盘 / tmp/dir1
# 推 .

# 光盘 / tmp/dir2
# 推 .

# 光盘 / tmp/dir3
# 推 .

# 光盘 / tmp/dir4
# 推 .

# rs
/tmp/dir4 / tmp/dir4 / tmp/dir3 / tmp/dir2 / tmp/dir1
[Note: 的first directory (/tmp/dir4) of the dir command output is always
          the current directory 和 not the content from the stack.]

在此阶段,目录堆栈包含以下目录:

/ tmp/dir4
/tmp/dir3
/tmp/dir2
/tmp/dir1

推送到堆栈的最后一个目录将位于顶部。当您执行popd时,它将cd到堆栈中的顶级目录条目,并将其从堆栈中删除。如上所示,最后被压入堆栈的目录是/ tmp / dir4。因此,当我们执行popd时,它将cd到/ tmp / dir4并将其从目录堆栈中删除,如下所示。

# 弹出
# 密码
/tmp/dir4

[Note: After the above 弹出, directory Stack Contains:
/tmp/dir3
/tmp/dir2
/tmp/dir1]

# 弹出
# 密码
/tmp/dir3

[Note: After the above 弹出, directory Stack Contains:

/tmp/dir2
/tmp/dir1]

# 弹出
# 密码
/tmp/dir2

[Note: After the above 弹出, directory Stack Contains: / tmp/dir1]

# 弹出
# 密码
/tmp/dir1

[Note: After the above 弹出, directory Stack is empty!]

# 弹出
-bash: 弹出: directory stack empty

技巧6: 采用“shopt -s 光盘spell”自动更正cd上错误键入的目录名称

采用shopt -s 光盘spell 如下所示自动纠正cd命令中的错别字。如果您不擅长键入并犯了很多错误,这将非常有帮助。

# 光盘 /etc/mall
-bash: 光盘: / etc / mall:没有这样的文件或目录

# shopt -s 光盘spell
# 光盘 /etc/mall
# 密码
/etc/mail
[Note: By mistake, when I typed mall instead of mail,
          光盘 corrected it automatically]


如果您喜欢这篇文章,请在其上添加书签 美味的, 绊倒它.

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 32 评论… 加一 }

  • 匿名 2008年10月9日,上午11:07

    优秀的技巧。我已经成为您博客的忠实拥护者。非常感谢所有的好帖子。

  • 海武 2008年10月9日,下午2:08

    我想添加:您可以向CDPATH变量添加多个条目,与使用PATH的方法相同:使用冒号分隔它们。例如:

    导出CDPATH = .:〜:〜/ src:/ etc

  • 波吉斯 2008年10月10日,上午12:43

    I’因为我一直想念空格,所以我曾经把`cd..`混叠了一段时间,但是我从未想过要扩展它。整洁的想法-

  • 约翰 2008年10月10日,上午2:30

    你做完后总是做什么“cd”?

    好… At least I 做 an “ls”.

    功能cd()
    {
    内置cd $ {1:-$ HOME}&& ls;
    }

  • levi_h 2008年10月12日,上午4:00

    I’我不是别名的忠实拥护者,因此对于#3(进入刚刚创建的目录),我通常会

    # mkdir / tmp/subdir1/subdir2/subdir3
    #cd!$

  • 一月 2008年10月14日,上午11:09

    您可能还想看看cdargs(http://www.skamphausen.de/cgi-bin/ska/CDargs)。它可以使您免于大多数此类麻烦(例如CDPATH)–当您不小心将CD插入与预期不同的目录中时,这是一种使自己立足的好方法!)。

    问候,

    一月

  • 古斯 2008年10月14日,下午12:32

    如您所说,目录栈非常有用。

    I’我发现自己需要

    o查看堆栈并
    o更快地在其中移动。

    因此,〜/ .bashrc获得了以下有价值的单字符别名:‘m’ for less 和 ‘c’ for bzip2

    别名d =’dirs -v’#获取堆栈上的目录列表

    别名1 =’pushd +1′#滚动堆栈以到达指定目录
    别名2 =’pushd +2′

    等等。我的堆栈通常最多可以容纳9或10个深度,这些别名可以帮助您移动。

  • 雷南 2008年10月14日,下午3:52

    Hack#6很可爱。谢谢。 --

  • 最小的 2008年10月21日,上午11:46

    一些建议包括:

    将以下别名添加到.bash_profile并重新登录…

    如果将别名放在〜/ .bashrc中,则可以‘source ~/.bashrc’(a)立即应用别名而不注销并重新登录,并且(b)确认已赢得别名’不要破坏任何东西,如果可以的话,很难修复’t log back in.

    I’我不确定,但我相信你也可以‘来源〜/ .bash_profile’.

  • 斯里达·萨诺巴特(Sridhar Sarnobat) 2008年10月23日,上午10:37

    在TCSH中:
    1)您还有一个隐含的shell变量,所以您不用’t need to type ‘cd’ at all.

    2)别名cd为pushd,并设置shell变量pushdtohome和pushdsilent。 光盘现在表现正常,但是现在如果您键入‘dirs -v ‘(将其别名为d),将得到所有目录的堆栈’去过。您可以通过键入轻松地将其恢复为CD‘cd =1/’ etc.

  • 斯里达·萨诺巴特(Sridhar Sarnobat) 2008年10月23日,上午10:38

    3)另外,将pwd别名为p。

    4)在TCSH中,使用bindkey进行绑定‘Alt-p’ to 密码.

  • 山姆 2008年10月26日,下午1:18

    评估?什么’函数mcd(){mkdir -p $ *错误&& 光盘 $* }

  • 萨姆斯_ 2009年1月18日,下午4:38

    我同意山姆的观点,但引号很重要,我建议这样:

    mcd(){mkdir -p“$1” && 光盘 “$1”; }

    后者赢了’在论点上有空格有问题。

    至于cd别名,与其定义多个别名,不如也使用函数:

    ..(){
    当地水平= $ 1
    而((> 0)); 做
    光盘.. ||打破
    让“levels–”
    完成
    }

    有了这个你’ll 做 “.. 3”它将返回三个级别,您可以使用任何数字。

  • 桑迪·米勒 2009年5月6日,上午3:00

    一个朋友和我自己一直在争论与此问题类似的问题!现在我知道我是对的。大声笑!感谢您发布的信息。

  • 罗伯特·科沃德 2009年9月22日,上午10:47

    关于在Linux中更改目录级别,请点击此处’我一直使用的方法。首先,在路径上的某个位置定义一个名为upl的shell脚本:

    #!/ bin / 重击
    如果[$ 1]
    然后
    steps=$1
    其他
    steps=1
    科幻
    而[$ steps -gt 0]

    cd ..
    (( steps = steps – 1 ))
    完成
    密码

    然后,将以下行添加到我的.bashrc中:

    别名=”source upl”

    然后,无论我在哪里’只是打字的一米“up”只是上升一个水平,或者“up ”提升水平。所以如果我’在巨大的源代码树中完成m个8级的输入“up 8” will immediatley jump 上8 等级, 和 print the new directory where I am. In this way, I can roughly guess how many 等级 I need to step up, 和 科幻ne tune if afterwards, if required.

    这个简单的脚本虽然非常点头,却节省了很多麻烦,我真的认为类似的东西应该是Linux命令外壳中的标准配置。

  • 罗伯特·科沃德 2009年9月23日,上午9:18

    请注意,该论坛显然容易受到浏览器安全黑客的攻击。在我以前的文章中,我使用尖括号(小于和大于符号)来概述我的up命令的参数,但是您的网站将它们解释为HTML标记,但它们没有出现。所以我的文字应该读过“增加数量以增加级别数”,其中的数字用括号括起来。

    由于该网站似乎将原始文本解释为HTML,因此我可以想象有可能在这里嵌入各种形式的内容。我认为,在论坛上输入的所有内容均应解释为原始文本并显示为原始文本。

  • 钱德拉 2011年4月30日,上午11:38

    当我尝试使用别名跳转到上述目录时,出现以下错误:
    “-bash: alias: …..: not found”
    “-bash:别名:cd:找不到”
    有人可以建议我吗?谢谢。

  • 道格·W 2011年6月3日,上午11:29

    在.bashrc中创建函数后,无需重新登录’轻松输入‘. .bashrc’(点是“source” command).

  • 诺伯特五世 2011年7月15日,下午6:45

    在最近的bash版本中,有
    shopt -s autocd#如果仅给出目录,将自动进行cd

    shopt -s 光盘able_vars#将让您cd进入一个变量

    这将启用:
    做c @ desktop:〜$ shopt -s autocd 光盘able_vars; foo =”/tmp”; $foo
    光盘 / tmp

    因此,您只需键入$ var,它将被带到$ var代表的目录中。
    对于$ gitrepo,$ rpmbuild,$ sources等有用。

    请记住使用小写的变量名,以避免意外覆盖环境变量。

  • 萨蒂亚·普拉卡什(Satya Prakash) 2011年9月19日,上午7:11

    精湛的把戏。您是Linux专家。

  • 阿兰文 2012年6月22日,上午4:02

    什么’hack#5的用法? ack!

  • 罗素·斯图尔特 2013年4月14日,上午2:00

    这是我发现的一点改进:

    通常,当您使用cd ..返回一个目录时,您最终将返回一个目录。要使此工作有效,您必须使用函数而不是别名,因此,请不要:

    别名.. =”cd ../”
    别名..2 =”cd ../../”

    您可以使用:

    ..()
    {
    光盘../[email protected]
    }
    ..2()
    {
    光盘../../[email protected]
    }

    但是,使用完此功能后,很快就会发现您缺少此功能的命令完成功能,这使其实用性大大降低。因此,我回过头来为此函数添加了自己的bash完成函数,可以将其粘贴到〜/ .bashrc或〜/ .bashrc中调用的任何文件(例如〜/ .bash_completion)中,如果您希望避免混乱。这是完成代码:

    _ ..()
    {
    本地cur = .. / $ {COMP_WORDS [COMP_CWORD]}
    COMPREPLY =($(compgen -d— $cur) )
    本地i = $ {#COMPREPLY [*]}
    而[$((–i)) -ge 0 ]; 做
    COMPREPLY [$ i] = $(echo $ {COMPREPLY [$ i]} | sed -r‘s/(\.\.\/)*//’)
    完成
    }
    完成-F _ .. -o nospace -S / ..

    _..2()
    {
    本地cur = .. / .. / $ {COMP_WORDS [COMP_CWORD]}
    COMPREPLY =($(compgen -d— $cur) )
    本地i = $ {#COMPREPLY [*]}
    而[$((–i)) -ge 0 ]; 做
    COMPREPLY [$ i] = $(echo $ {COMPREPLY [$ i]} | sed -r‘s/(\.\.\/)*//’)
    完成
    }
    完成-F _ .. 2 -o nospace -S / ..2

  • 巴尔加夫 2013年10月28日,上午4:22

    您可以使用cd-进入上一个目录,而不是上一个目录。
    例如,如果您在/ var /
    光盘〜
    将带到您的主目录。因此,使用cd转到上一个目录–
    然后目录将更改为/ var /。
    存储该值的Bash变量为OLDPWD
    回声$ OLDPWD
    如果您在打开新的外壳程序后未更改目录,则此变量将为空。

  • 维沙尔·古普塔 2014年5月9日,上午3:08

    目录栈有什么用。在必要的地方?

  • 伊拉 2014年6月25日,下午1:03

    我发现目录书签的使用(请参阅 这里)成为我每天从事开发工作所需要的东西。它为命令行导航增加了很多功能。

    伊拉

  • 总结 2014年7月30日,上午7:04

    为什么要创建目录堆栈?它的实际目的是什么?

  • Debgab 2015年2月16日,晚上9:36

    目录堆栈的实际用途是什么?

  • Habeeb Perwad 2015年5月23日,上午1:51

    的“shopt -s 光盘spell” not working.
    得到错误“/ etc / mall:没有这样的文件或目录” again.
    [测试:Ubuntu 14.04,GNU 重击,版本4.3.11]

  • 哈里尼 2015年8月6日,上午1:24

    感谢您-

  • 里沙德 2016年3月30日,上午7:50

    好清单 这里.

    特别是请参阅本文未涵盖的acd_func.sh。

  • 阿吉特 2016年6月22日,上午7:38

    的“shopt -s 光盘spell” not working.
    在RHEL上尝试过

  • 迪内什 2017年3月30日,上午12:05

    shopt -s 光盘spell:它最多只能进行一次拼写更正吗?

发表评论