≡菜单

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

[cd命令黑客]本文是正在进行中的一部分 极客的生产力提示 series. 光盘 is 上e of the most frequently used command during a Unix session. In this article, I’ve provided 6 光盘命令 hacks, which will boost your productivity instantly 和 make it easier to navigate the directory structure from command line.

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

If you are frequently 做ing 光盘 to subdirectories of a specific parent directory, you can set the CD路径 to the parent directory 和 perform 光盘 to the subdirectories without giving the parent directory path as explained below.

[[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浏览目录: In the example below,..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/


仅使用点导航目录: In the example below,….. (five 做ts) is used to go up 4 directory level.  Typing 5 做ts to go up 4 directory structure is really easy to remember, as when you type the 科幻rst two 做ts, you are thinking“going up 上e directory”, after that every additional 做t, is to go 上e level up. So, use…. (four 做ts) to go up 3 directory level 和 .. (two 做ts) to go up 1 directory level. Add the following alias to the .bash_profile 和 re-login for the….. (five 做ts) to work properly.

别名.. ="光盘.."
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导航目录,后跟连续的点: In the example below,cd….. (cd followed 通过 科幻ve 做ts) is used to go up 4 directory level. Making it 5 做ts to go up 4 directory structure is really easy to remember, as when you type the 科幻rst two 做ts, you are thinking“going up 上e directory”, after that every additional 做t, is to go 上e level up. So, usecd…. (cd followed 通过 four 做ts) to go up 3 directory level 和 光盘…(cd followed 通过 three 做ts) to go up 2 directory level. Add the following alias to the .bash_profile 和 re-login for the above 光盘….. (five 做ts) to work properly.

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 will always print the current directory followed 通过 the content of the stack. Even when the directory stack is empty, rs command will still print 上ly the current directory as shown below.

# 弹出
-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

的last directory that was pushed to the stack will be at the top. When you perform 弹出, it will 光盘 to the top directory entry in the stack 和 remove it from the stack. As shown above, the last directory that was pushed into the stack is / tmp/dir4. So, when we 做 a 弹出, it will 光盘 to the / tmp/dir4 和 remove it from the directory stack as shown below.

# 弹出
# 密码
/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并重新登录…

    If you put the alias(es) in ~/.bashrc, you can‘source ~/.bashrc’to (a) apply the alias(es) immediately without logging out 和 back in, 和 (b) confirm that the alias(es) won’t break anything, which can be difficult to 科幻x if you can’t log back in.

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

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

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

    2) alias 光盘 to 推, 和 set the shell variables 推tohome 和 推silent. 光盘 now behaves as usual but now if you type‘dirs -v ‘(alias this to d), you get a stack of all the directories you’ve been to. You can easily 光盘 back to those 通过 typing‘cd =1/’ etc.

  • 斯里达·萨诺巴特 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”

    Then, wherever I am, it’s simply a metter of typing“up”to just go up 上e level, or“up ”to step up of 等级. So if I’m 8 等级 做en in a massive 资源 tree, typing“up 8”will immediatley jump up 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

    Beware that this forum is apparently susceptible to browser security hacks. In my previous post, I used angle brackets (less than 和 greater than symbols) to outline the parameter to my up command, but your site interpreted these as HTML tags 和 they did not appear. So my text should have read something like“up number to step up number of 等级”, where number was encased in these brackets.

    Since the site seems to interpret raw text as HTML, I can imagine that it would be possible to embed all sorts of nasties in 这里. In my opinion, anything entered 上 forums should be interpreted as raw text 和 displayed as such.

  • 钱德拉 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]
    }

    However, after using this, it quickly becomes apparent that you are missing command completion for this function, making it far less useful than it could be. Thus, I went back 和 added my own 重击 completion functions for this function, which can be pasted into your ~/.bashrc or any 科幻le (e.g. ~/.bash_completion) that is called from your ~/.bashrc if you wish to avoid clutter. Here is the completion code:

    _ ..()
    {
    本地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”无效。
    在RHEL上尝试过

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

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

发表评论