Raspbian Stretch Lite:
$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit
在我写的脚本中:
mkdir -p /mnt/target/home/user/resources
哪里/mnt/target/home/user/resources
可能存在。如果是这种情况,脚本将停止并出现以下错误:
mkdir:无法创建目录“/mnt/target/home/user/resources”:文件存在
但手册页说如果它存在它不应该返回错误!
更新
不存在resources
文件:
$ ls -la /mnt/target/home/user/
totale 13
drwxr-xr-x 4 mark mark 1024 gen 10 16:56 .
drwxr-xr-x 4 root root 1024 gen 10 16:56 ..
-rw-r--r-- 1 mark mark 220 nov 13 14:09 .bash_logout
-rw-r--r-- 1 mark mark 3523 nov 13 14:09 .bashrc
drwxr-xr-x 3 root root 1024 gen 10 16:56 bin
-rw-r--r-- 1 mark mark 675 nov 13 14:09 .profile
drwxr-xr-x 2 root root 4096 gen 1 1970 resources
更新2
这是脚本中的周围代码:
losetup -P /dev/loop0 image.img
e2fsck -f /dev/loop0p2
resize2fs /dev/loop0p2
mkfs.ext4 /dev/loop0p3
e2fsck -f /dev/loop0p3
mkfs.vfat -F 32 /dev/loop0p4
mount /dev/loop0p2 /mnt/target
cd /mnt/target/home/
tar cf home.tgz user/
rm -r user/
mount /dev/loop0p1 /mnt/target/boot/
mount /dev/loop0p3 /mnt/target/home/
tar xf home.tgz -C /mnt/target/home/
#mkdir -p /mnt/target/home/user/resources
mount /dev/loop0p4 /mnt/target/home/user/resources
image.img
包含 4 个分区。
答案1
mount /dev/loop0p2 /mnt/target
cd /mnt/target/home/
mount /dev/loop0p3 /mnt/target/home/
mkdir -p /mnt/target/home/user/resources
您正在mkdir
将工作目录设置为/home
on进行调用/dev/loop0p2
。该工作目录以前可以通过路径访问/mnt/target/home
,但现在隐藏在/dev/loop0p3
.当您调用时mkdir
,路径指的是上的/mnt/target/home
目录。/
/dev/loop0p3
我不明白为什么mkdir
会关心它的工作目录,但这看起来很奇怪。如果您在问题中显示脚本之前已经简化了脚本,那么您遇到的问题很可能是由于隐藏在挂载点后面的目录造成的混乱造成的。
所以在安装之前先尝试cd
退出。或者根本/mnt/target/home
不使用并使用调用选项和.cd
-C
tar
rm
作为一般规则,请避免将某些内容安装到以任何方式使用的目录中。目标目录应该为空,并且不应该是任何进程的工作目录。操作系统会做正确的事情,但它认为正确的事情可能会令人惊讶,并且无论如何这都会使人类和软件感到困惑。