cp: cannot create symbolic link XXX Operation not permitted

【已搞懂】cp: cannot create symbolic link XXX Operation not permitted + 用mount或 df -T可查得某个文件夹是什么文件系统的

【已搞懂】cp: cannot create symbolic link XXX Operation not permitted + 用mount或 df -T可查得某个文件夹是什么文件系统的

【背景】

在Linux下,将某个目录及其下所有文件拷贝到另外一个目录,结果拷贝过程中出错:

cp: cannot create symbolic link `/mnt/linuxdev/Focus/carifan/kernel/2007R1/Bfin_425/linux-2.6.x/Focus/include/asm’: Operation not permitted

【解决过程】

网上搜了下,得知,此处不能创建符号链接,主要有两种可能,

1.没有权限

此处已经保证包括的源和目的地,都是由权限操作的,排除此原因。

2.目标文件系统不支持符号链接

此处经过去查看目标文件夹,是什么文件系统的,查得是smbfs:

[e516537@RD-Linux-2420 ~]$ ls /mnt/linuxdev/Focus/carifan/kernel/2007R1/Bfin_425 -l
total 4
drwxrwxrwx 1 root RandD 4096 Aug 26 01:47 linux-2.6.x
[e516537@RD-Linux-2420 ~]$ ls /usr/src/blackfin/ADI_release/kernel/2007R1/carifan_Bfin_425 -l
total 224
drwxr-xr-x 11 e516537 root 4096 Aug 23 02:52 bfin_patch
-rwxr-xr-x 1 e516537 root 4023 Aug 23 01:22 bfin-serial-handle-status.patch
。。。

drwxr-xr-x 29 e516537 root 4096 Aug 23 23:39 linux-2.6.x
-rw-r–r– 1 e516537 root 13648 Aug 23 01:36 Makefile
。。。

drwxr-xr-x 66 e516537 root 4096 Aug 23 02:56 vendors
[e516537@RD-Linux-2420 ~]$ mount
/dev/sda5 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda3 on /boot type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/sdb1 on /newdisk type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
//nj55w2572/LinuxDev on /mnt/beta/linuxdev type smbfs (0)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/sdc1 on /mnt/USBext type ext2 (rw)
[e516537@RD-Linux-2420 ~]$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda5 ext3 233918968 123418360 98618136 56% /
/dev/sda3 ext3 194449 23555 160854 13% /boot
none tmpfs 516604 0 516604 0% /dev/shm
/dev/sdb1 ext3 307663800 177760488 114274880 61% /newdisk
//nj55w2572/LinuxDev
smbfs
1120894976 1046872064 74022912 94% /mnt/beta/linuxdev
/dev/sdc1 ext2 961432072 961432072 0 100% /mnt/USBext

[e516537@RD-Linux-2420 ~]$ ls /mnt/ -l
total 64
drwxr-xr-x 5 root root 4096 Feb 7 2007 beta
drwxr-xr-x 2 rddev RandD 4096 Apr 19 2006 betalinuxdev
drwxr-xr-x 3 root root 4096 May 14 2007 bwfile02
lrwxrwxrwx 1 root root 13 Feb 8 2007 linuxdev -> beta/linuxdev
lrwxrwxrwx 1 root root 12 Jan 2 2007 _linuxdev.backup -> betalinuxdev
drwxr-xr-x 2 root root 4096 Nov 7 2005 RP
drwxr-xr-x 2 root root 4096 Jul 27 2009 test1
drwxr-xr-x 3 root root 16384 Aug 20 00:00 USBext

即,源文件夹是 /usr/src/blackfin/ADI_release/kernel/2007R1/carifan_Bfin_425,属于/目录下面,对应的是ext3,因此本身是支持符号链接的,而目标文件夹是 /mnt/linuxdev/Focus/carifan/kernel/2007R1/Bfin_425 属于/mnt下面的linuxdev,即/mnt/beta/linuxdev,属于smbfs,是通过SMB共享出来的目录,那对应的原始文件夹//nj55w2572/LinuxDev,看来应该是从某个Windows服务器共享过来的,文件系统是FAT或NTFS的,所以不支持符号链接。

即,此处拷贝的源文件夹是支持符号链接,要拷贝到的目标文件夹,不支持符号链接,所以才会报错。但知道原因,也无法解决,因为此处又不能更换smbfs。。。。

 

用mount或 df -T可查得某个文件夹是什么文件系统的

从上面可知,通过mount或df -T 可以查得某个文件夹是什么文件系统的:

[e516537@RD-Linux-2420 ~]$ mount
/dev/sda5 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda3 on /boot type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/sdb1 on /newdisk type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
//nj55w2572/LinuxDev on /mnt/beta/linuxdev type smbfs (0)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/sdc1 on /mnt/USBext type ext2 (rw)
[e516537@RD-Linux-2420 ~]$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda5 ext3 233918968 123418360 98618136 56% /
/dev/sda3 ext3 194449 23555 160854 13% /boot
none tmpfs 516604 0 516604 0% /dev/shm
/dev/sdb1 ext3 307663800 177760488 114274880 61% /newdisk
//nj55w2572/LinuxDev
smbfs 1120894976 1046872064 74022912 94% /mnt/beta/linuxdev
/dev/sdc1 ext2 961432072 961432072 0 100% /mnt/USBext

即,知道你要查询的文件夹,比如

/usr/src/blackfin/ADI_release/kernel/2007R1/carifan_Bfin_425

很明显,其是属于根目录/下面的某个文件夹,

而根目录/对应的文件系统是ext3,所以,得知此文件夹是ext3的文件系统的。

 

一句话两个文件系统不一样,一个支持符号链接另一个不支持符号链接

 

<think>好的,用户遇到了在复制文件时出现“cp: cannot create symbolic link XXX Operation not permitted”的错误,需要帮助解决。我需要先理解这个问题产生的原因,然后给出解决方案。 根据提供的引用信息,这个问题通常有两个主要原因:文件系统不支持符号链接,或者用户权限不足。首先,用户可能在尝试将文件复制到一个不支持符号链接的文件系统,比如FAT或NTFS。这时候,即使用户有权限,系统也无法创建符号链接。其次,用户可能没有足够的权限来创建符号链接,特别是在目标目录没有写权限的情况下。 接下来,我需要验证这些原因。比如,用户可以使用`df -T`命令查看目标挂载点的文件系统类型。如果发现是FAT或NTFS,那么问题很可能出在文件系统不支持上。另外,检查目录权限和用户权限是否足够,可以通过`ls -ld`查看目录权限,并用`sudo`命令尝试提升权限来测试。 解决方案方面,如果是文件系统的问题,可以改用支持符号链接的文件系统,如ext4,或者改用其他方法复制,比如使用`rsync`并排除符号链接。如果是因为权限不足,可能需要使用`sudo`或者修改目录权限。另外,用户可能需要检查SELinux或AppArmor是否阻止了操作,但这在引用中没有提到,可能需要进一步确认。 用户提到的具体路径是“qcom dispcc-sm8150.h”,这可能涉及内核或驱动相关的文件。这种情况下,可能需要特别注意权限问题,或者确认文件系统是否合适。如果用户是在跨文件系统操作,比如从Linuxext4分区复制到Windows的NTFS共享文件夹,那么改用归档命令或者避免符号链接可能是解决办法。 最后,需要将这些步骤整理成用户易懂的解决方案,分点说明可能的原因和对应的解决方法,并确保建议的命令正确无误。同时,提醒用户根据具体情况选择合适的方法,并注意备份数据,避免操作失误导致数据丢失。</think>### 问题原因分析 出现`cp: cannot create symbolic link Operation not permitted`错误的主要原因有两个: 1. **文件系统不支持符号链接**:例如FAT32/NTFS等文件系统不支持符号链接,而Linuxext4支持[^3][^4]; 2. **权限不足**:用户没有创建符号链接的权限,或目标目录缺少写入权限[^1][^2]。 ### 分步解决方案 #### 方法一:验证文件系统类型 1. 使用命令查看目标文件夹的文件系统类型: ```bash df -T /目标文件夹路径 | awk '{print $2}' | tail -n 1 ``` 2. 如果显示`vfat`(FAT32)或`ntfs`,则需改用支持符号链接的文件系统(如ext4),或改用普通文件复制方式。 #### 方法二:权限修复 1. 尝试使用`sudo`提升权限: ```bash sudo cp -a 源文件 目标路径 ``` 2. 检查目标文件夹权限: ```bash ls -ld 目标文件夹路径 # 确认有写权限(w标志) chmod +w 目标文件夹路径 # 若无写权限则添加 ``` #### 方法三:特殊场景处理 * 当复制内核头文件(如`qcom dispcc-sm8150.h`)时: ```bash # 使用--no-dereference参数避免跟随符号链接 cp --preserve=links --no-dereference 源文件 目标路径 ``` * 若需保留符号链接但不复制链接内容: ```bash cp -P 源文件 目标路径 # -P参数保留符号链接本身 ``` #### 替代方案(推荐) 使用`rsync`代替`cp`命令: ```bash rsync -lK 源路径 目标路径 # -l保留符号链接,-K处理内核相关文件 ``` ### 关键注意事项 1. 跨操作系统文件共享(如Windows共享文件夹)时,建议先打包为`tar`文件再复制: ```bash tar czvf archive.tar.gz 源目录 && cp archive.tar.gz 目标路径 ``` 2. 对于Android/QCOM开发环境,建议在Linux原生文件系统中操作符号链接。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值