为什么要运行 cd 。在做任何事情之前?

qdi*_*dii 22 directory

这个 sysadmin 恐怖汇编中,其中一位作者写道,作为经验法则:

cd .在做任何事情之前总是做一个。

你为什么想这么做?

Rom*_*man 32

你没有。

至少不仅仅是这样。引用文件中的前一行很重要:

  • 设置您的提示以在pwd每次 cd 时执行一次。
  • cd .在做任何事情之前总是做一个。

这样,您作为操作员在做任何重要的事情之前验证您当前的工作目录,因为每次更改都会打印出来。cd .否则没有任何意义。

这种“验证”是一件好事,你应该采用它的一种形式。这个主题的一个更(恕我直言)常见的变体是总是在提示时打印出工作目录。

  • 其实,还是有用的。如果您通过符号链接进入一个目录,然后该链接被删除并在其他地方重新创建,例如在服务器部署期间,其中版本由“current_release”的符号链接控制,那么执行 `cd .` 会更改您所在的实际底层目录。 (15认同)
  • 最好将此视为“在执行任何重要操作以确保您位于您认为所在的目录中之前始终输入'pwd'” (11认同)
  • 为什么不在做任何事情之前先做一个`pwd`? (4认同)
  • @Stewart 不幸的是,如果符号链接在 *after* `cd .` 但 *before* 做其他事情之前改变,这将无济于事。它只是减少了进入错误目录的可能性,但并不能解决一般问题。除非你使用类似 `cd $(readlink -f .)` 的东西切换到真正的目录,因为你真的想留在那里。 (4认同)

小智 18

如果删除了 shell 的当前工作目录,则可能会丢失数据。

例如,

$ pwd
/home/user/test
$ rmdir /home/user/test
$ pwd
/home/user/test
$ some_command | tee command.log
tee: command.log: No such file or directory
<long output>
Run Code Online (Sandbox Code Playgroud)

的输出some_command未写入磁盘。

cd .在运行命令之前键入将揭示问题。

$ pwd
/home/user/test
$ rmdir /home/user/test
$ cd .
$ pwd
.
Run Code Online (Sandbox Code Playgroud)

如果删除并重新创建当前工作目录目录,则键入cd .将“刷新”对该目录的引用。

$ ls
foo bar ljz
$ pwd
/home/user/test
$ rmdir /home/user/test
$ mkdir /home/user/test
$ pwd
/home/user/test
$ ls
$ cd .
$ ls 
foo bar ljz
Run Code Online (Sandbox Code Playgroud)


eww*_*ite 13

我认为显示您当前的目录更重要。

在每个 linux 服务器上,我/etc/bashrc通过将“W”更改为“w”来修改提示。

 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
Run Code Online (Sandbox Code Playgroud)

 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \w]\\$ "
Run Code Online (Sandbox Code Playgroud)

这样做的效果是:

[root@xt include]#
Run Code Online (Sandbox Code Playgroud)

相对

[root@xt /usr/src/spl-0.6.1/include]# 
Run Code Online (Sandbox Code Playgroud)

  • @ott-- 坚持你的`~/.profile` 或`~/.bash_profile` 以及更新`/etc/skel/.profile` (2认同)