Linux 的目录加“/”和不加有什么区别?配环境变量突然想到这个问题,为什么不加“/”! cd 加不加都没差,很疑惑。
1
retanoj 2020-12-07 20:41:55 +08:00 via iPhone
环境变量是个 key- value,加与不加要看怎么用。
cd 命令,是因为 cd 帮你做了判断 |
2
iamwho 2020-12-07 20:52:25 +08:00 1
rsync 中有区别
|
3
liaojl 2020-12-07 20:56:20 +08:00 via iPhone
加 /表示绝对路径,不加表示相对路径,cd 不加没区别是因为系统已经将 /usr/bin 加入到环境变量中去了。
|
6
hazardous 2020-12-07 21:27:42 +08:00
有斜杠说明肯定是个目录,没斜杠有可能是个文件。
对 cd 来说没区别因为它后面肯定是目录,对别的命令可能有区别。 |
7
imdong 2020-12-07 21:29:14 +08:00
通常来说,后面加 / 才是文件夹,否则应该是文件。
由于文件夹和文件不能重名(好像是?),所以,加不加都可以,系统等各方面会自动识别,但是在遇到问题的时候记得有没有 / 其实是两码事。 不然这种小问题 够你头大的。 |
8
Dvel 2020-12-07 21:32:56 +08:00
自动补全的时候都加了 /
|
9
Osk 2020-12-07 21:41:27 +08:00 via Android
mv 等命令加不加后面的斜杠好像会影响行为的
|
10
cmostuor 2020-12-07 21:44:13 +08:00
自己看代码
static void update_cwd(void) { cwd = xrealloc_getcwd_or_warn(cwd); if (!cwd) cwd = xstrdup(bb_msg_unknown); } /* built-in 'cd <path>' handler */ static int builtin_cd(struct child_prog *child) { char *newdir; if (child->argv[1] == NULL) newdir = getenv("HOME"); else newdir = child->argv[1]; if (chdir(newdir)) { bb_perror_msg("cd: %s", newdir); return EXIT_FAILURE; } update_cwd(); return EXIT_SUCCESS; } int chdir(const char *path) { return syscall(SYS_chdir, path); } #ifdef __NR_chdir # define SYS_chdir __NR_chdir #endif |
12
jinliming2 2020-12-07 22:22:56 +08:00 1
比如一个链接到目录的软链接:ln -s /test abc
ls -l abc 就是看到的 abc 这个链接本身,而 ls -l abc/ 看到的就是链接目标下面的内容。 rm abc/ 报错:rm: cannot remove 'abc/': Is a directory rm -r abc/ 报错:rm: cannot remove 'abc/': Not a directory 这两个都报错,因为路径后面带 /,表示一个目录,rm 去删的时候需要加 -r 。然后报错的时候就返回这个链接目标的属性,是一个目录了。而加上 -r 真正去删的时候,会递归先把目标下面的文件全删掉,到删这个链接本身的时候,发现它不是一个目录,所以报错,不是一个目录。 一般后面带 / 表示目录,而不带 / 则会自动判断,得看具体软件的处理的。不同软件的行为可能不一样。 |
13
wnpllrzodiac 2020-12-08 08:13:33 +08:00 via Android 1
cp mv 有区别
|
16
hurrytospring 2020-12-08 11:30:13 +08:00
cp 在不同系统下的处理不一样,所以最好明确
|
17
tomychen 2020-12-08 15:50:28 +08:00
难道不应该是 cd 的时候,shell 会直接把你输入的路径当成了目录,而在实际切换目录的时候发现不是目录才报错吗?
简单理解就是 cp -r /path/to/name . 的时候会把整个目录复制过来带,当前目录会多一个 name 目录,而 cp -r /path/to/name/ . 的时候则会把 /path/to/name/下的文件复制到当前位置并且当前目录无 name 目录,带 /和不带 / 就是告诉系统“作用”域在哪,加上 / 就是相当于 cd 到目录下 以 ./ 的形式操作。而无论什么时候,系统都会以最后一个 /作用作用目录。 |