linux - 即使我在文件上使用 `/bin/cp` 和 chmod 777,bash 脚本中的复制也会失败

标签 linux bash shell permissions copy

我写了一个 bash 程序来设置新的 Debian 安装....但我无法解决这个问题/错误......我无法将 .bashrc 文件复制给新用户/home 目录甚至有 777 权限。

这里是变量的声明和设置:

 21 CURRENTDIR=/tmp/svaka
 22 BASHRC=.bashrc
 23 NANORC=.nanorc
 24 BASHRCROOT=.bashrcroot

这是程序使用的文件,它们位于程序运行的同一目录中:

$ls -sail /tmp/svaka
total 110
 21  1 drwxrwxrwx  3 root        root         1024 Sep 13 05:21 .
  2  3 drwxrwxrwt 13 root        root         3072 Sep 13 05:20 ..
 34  4 -rwxrwxrwx  1 root        root         3250 Sep 11 23:27 .bashrc
 36  3 -rwxrwxrwx  1 root        root         2517 Sep 11 23:27 .bashrcroot
 31  1 -rwxrwxrwx  1 root        root          524 Sep 11 23:27 changePasswords.bash
 28  2 -rwxrwxrwx  1 root        root         1235 Sep 11 23:27 checkSystem
 42  1 -rwxrwxrwx  1 root        root         594 Sep 13 04:29 checuserpass.sh
 39  0 -rwxrwxrwx  1 root        root            0 Sep 11 23:28 cpSuccessCodes.txt
 25  8 -rwxrwxrwx  1 root        root         8048 Sep 11 23:27 debianConfig_1.bash
 32 11 -rwxrwxrwx  1 root        root        10326 Sep 13 05:21 debianConfig_awsome.3.2.sh
 33  4 -rwxrwxrwx  1 root        root         3971 Sep 11 23:27 debianConfig.sh
 35  9 -rwxrwxrwx  1 root        root         8481 Sep 11 23:27 debianConfig_version.3.0.sh
 38  7 -rwxrwxrwx  1 root        root         6970 Sep 13 05:07 debianConfigVersion3.1ERRORS.txt
340  1 -rw-r--r--  1 root        root  1024 Sep 13 05:13 .debianConfigVersion3.1ERRORS.txt.swp
 40 11 -rwxrwxrwx  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb
 41 11 -rwxrwxrwx  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb.1
397 11 -rw-r--r--  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb.2
 43  3 drwxrwxrwx  6 root        root         3072 Sep 13 05:01 nanorc
 26  9 -rwxrwxrwx  1 root        root         8833 Sep 11 23:27 .nanorc
 30  1 -rwxrwxrwx  1 root        root          862 Sep 11 23:27 sources.list
 37  2 -rwxrwxrwx  1 root        root         1723 Sep 11 23:27 ssh_config
 27  3 -rwxrwxrwx  1 root        root         2573 Sep 11 23:27 sshd_config
 24  1 -rwxrwxrwx  1 root        root          134 Sep 11 23:27 testing3892739.sh
 22  1 -rwxrwxrwx  1 root        root          772 Sep 11 23:27 testing.sh
 29  1 -rwxrwxrwx  1 root        root           71 Sep 11 23:27 userlist.txt
 23  1 -rwxrwxrwx  1 root        root           71 Sep 11 23:27 users.txt

代码如下:

300 for user in "$@"
301 do
302     if [ "$user" = root ]
303     then
304         continue
305     fi
306     sudo -i -u "$user" user="$user" CURRENTDIR="$CURRENTDIR" BASHRC="$BASHRC" bash <<'EOF'
307     echo "usersBashrc"
308     if /bin/cp -f "$CURRENTDIR/$BASHRC" "$HOME/.bashrc"
309     then
310         echo "Copy for $user \(bashrc\) succeeded!"
311         sleep 3
312     else
313         echo "Couldn't cp .bashrc for user $user"
314         exit 127
315     fi
316     chown $user:$user "$HOME/.bashrc" || exit 127
317     chmod 644 "$HOME/.bashrc"
318     wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O "$HOME"/.dircolors
319     echo 'eval $(dircolors -b $HOME/.dircolors)' >> "$HOME"/.bashrc
320 EOF
321 done

如果我添加这一行,我可以让它工作:

chown $user:$user "$CURRENTDIR"/.bashrc

就在我输入sudo

之前

问题:

我的问题是,我不应该能够复制 文件 因为它设置了 777 个权限 read,write and execute 即使我不是所有者?

编辑#1:

(root@HOST)-(15:11:52)-(/tmp/svaka)
$./system38.sh something71 something
+ for user in "$@"
+ '[' something71 = root ']'
+ chown something71:something71 /tmp/svaka/.bashrc
+ sudo -i -u something71 user=something71 CURRENTDIR=/tmp/svaka BASHRC= bash
usersBashrc
/bin/cp: -r not specified; omitting directory '/tmp/svaka/'
Couldn't cp .bashrc for user something71


(root@HOST)-(15:11:54)-(/tmp/svaka)
$ls -sail
total 136
 21  1 drwxrwxrwx  3 root        root         1024 Sep 13 15:11 .
  2  3 drwxrwxrwt 13 root        root         3072 Sep 13 15:11 ..
 34  4 -rwxrwxrwx  1 something71 something71  3250 Sep 11 23:27 .bashrc
 36  3 -rwxrwxrwx  1 root        root         2517 Sep 11 23:27 .bashrcroot
 31  1 -rwxrwxrwx  1 root        root          524 Sep 11 23:27 changePasswords.bash
 28  2 -rwxrwxrwx  1 root        root         1235 Sep 11 23:27 checkSystem
 42  1 -rwxrwxrwx  1 something78 something78   594 Sep 13 04:29 checuserpass.sh
 39  0 -rwxrwxrwx  1 root        root            0 Sep 11 23:28 cpSuccessCodes.txt
 25  8 -rwxrwxrwx  1 root        root         8048 Sep 11 23:27 debianConfig_1.bash
 32 11 -rwxrwxrwx  1 root        root        10426 Sep 13 14:32 debianConfig_awsome.3.3.sh
 33  4 -rwxrwxrwx  1 root        root         3971 Sep 11 23:27 debianConfig.sh
 35  9 -rwxrwxrwx  1 root        root         8481 Sep 11 23:27 debianConfig_version.3.0.sh
 38 11 -rwxrwxrwx  1 root        root        10661 Sep 13 09:06 debianConfigVersion3.1ERRORS.txt
 40 11 -rwxrwxrwx  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb
 41 11 -rwxrwxrwx  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb.1
397 11 -rwxrwxrwx  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb.2
398 11 -rwxrwxrwx  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb.3
340 11 -rw-r--r--  1 root        root        10658 Aug  3  2016 deb-multimedia-keyring_2016.8.1_all.deb.4
 43  3 drwxrwxrwx  6 root        root         3072 Sep 13 05:01 nanorc
 26  9 -rwxrwxrwx  1 root        root         8833 Sep 11 23:27 .nanorc
 30  1 -rwxrwxrwx  1 root        root          862 Sep 11 23:27 sources.list
 37  2 -rwxrwxrwx  1 root        root         1723 Sep 11 23:27 ssh_config
 27  3 -rwxrwxrwx  1 root        root         2573 Sep 11 23:27 sshd_config
400  1 -rwxr-xr-x  1 root        root          793 Sep 13 15:11 system38.sh
 24  1 -rwxrwxrwx  1 root        root          134 Sep 11 23:27 testing3892739.sh
 22  1 -rwxrwxrwx  1 root        root          772 Sep 11 23:27 testing.sh
 29  1 -rwxrwxrwx  1 root        root           71 Sep 11 23:27 userlist.txt
 23  1 -rwxrwxrwx  1 root        root           71 Sep 11 23:27 users.txt
(root@HOST)-(15:12:05)-(/tmp/svaka)

最佳答案

如果我更改变量的引号,我可以让它工作......

/bin/cp "$CURRENTDIR/$BASHRC""$HOME/.bashrc"

/bin/cp "$CURRENTDIR"/"$BASHRC""$HOME/.bashrc"

我是编程新手,所以我对此没有任何解释。

关于linux - 即使我在文件上使用 `/bin/cp` 和 chmod 777,bash 脚本中的复制也会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52306748/

相关文章:

arrays - bash 中的数组运算

linux - 在 Linux 中递归添加 bash 脚本作为命令?

linux - 使用用户输入运行 crontab

c - 在 Korn shell 脚本中将斜杠替换为单词 'slash'

linux - 如何判断我使用的是哪个 Unix shell?

linux - 通过蓝牙与 bash 或其他东西自动绑定(bind) ePuck

c - 两个进程之间的全局变量访问同步

linux - 如何调试 Linux 内核模块 `init()` 中的问题?

linux - bash 中的简单正则表达式解析

shell - shell 中奇怪的厕所行为