博客
关于我
linux下怎么删除链接文件,Linux下链接文件使用RM无法删除的解决办法
阅读量:801 次
发布时间:2023-02-03

本文共 4108 字,大约阅读时间需要 13 分钟。

http://www.xici.net/main.asp?url=/u13287071/d78561671.htm

在进行U-boot开发的时候,遇到一个小问题。网友wanglida79前几天刚遇到过,我当时没有模拟出来,现在自己倒是遇上了。不过我想出了解决的办法,只不过原因不明确,或许使用方法不对,或许有bug。   现象描述:

我进行U-boot移植的开发,为了patch方便,将源码的名字命名为.orig,这样以示区分。但是名字太长,在命令行下操作不太方便,所以想法就是建立软链接。

[ARMLinux@lqm bootloader]$ tree -L 1

.

|-- patch

|-- u-boot-1.1.3

|-- u-boot-1.2.0

|-- u-boot-1.2.0.orig

|-- vivi

`-- vivi_origin

6 directories, 0 files

上面是目录下的主要文件夹。现在将源码链接为orig,将开发部分链接为develop。

[ARMLinux@lqm bootloader]$ ln -s u-boot-1.2.0.orig/ orig

[ARMLinux@lqm bootloader]$ ln -s u-boot-1.2.0 develop

[ARMLinux@lqm bootloader]$ ls

develop orig patch u-boot-1.1.3 u-boot-1.2.0 u-boot-1.2.0.orig vivi vivi_origin

如上。现在想要删除develop和orig。出现意外情况:

[ARMLinux@lqm bootloader]$ rm develop/

rm: cannot remove `develop/': Not a directory

[ARMLinux@lqm bootloader]$ rm -f develop/

rm: cannot remove `develop/': Not a directory

[ARMLinux@lqm bootloader]$ unlink develop/

unlink: cannot unlink `develop/

看来删不掉。删除orig也同样如此。转念又实验了利用find来删除:

[ARMLinux@lqm bootloader]$ find . -type l | xargs rm -f

[ARMLinux@lqm bootloader]$ ls

patch u-boot-1.1.3 u-boot-1.2.0 u-boot-1.2.0.orig vivi vivi_origin

看来能够成功。

现象分析与解决:

上面提供的find and xargs的删除方法可以实现。但是只用rm为什么不能删除呢。我想应该是使用的方法上有问题,必须查阅rm和ln的用法。经过man查阅,ln的使用和rm的使用并没有问题。**了前面的想法,我想从rm直接删除和find删除的不同入手找到原因。

[ARMLinux@lqm bootloader]$ find . -type l

./develop

./orig

看来原因找到了。我在使用rm的时候总是习惯使用TAB键补全命令,但是TAB补全命令的时候,最后是以“/”结尾的。很明显的原因,rm也好,unlink也好,并不能很好的处理这种情况,这算是一处bug。我在前面写shell脚本来实现autozip时的时候,自己遇到过这个问题,采用了awk解决。原有的脚本如下:

[ARMLinux@lqm bin]$ cat autozip

#!/bin/bash

# Copyright 2007 (c), Shandong University

# All rights reserved.

#

# Filename : autozip

# Description: Compress files, and print "OK" out if the file

# can be compressed successfully.

# Syntax : autozip [filename | directory name]

# Author : Liu Qingmin

# Version : 1.0

# Date : 07-04-29

#

# Func: get_target()

# Desc: Obtain the name of target file

# Para: $1 -- file name that will be compressed

# Ret : TARGET -- current file name

get_target()

{

TARGET=`echo $1 |

awk -F/ '{if ($NF == "") print $(NF-1);

else print $(NF)}'`

}

# Handle Parameters

if [ $# != 1 ];then

echo "Usage: `basename $0` "

exit 1

fi

# Assign the parameter to the Macro OPT

OPT=$1

# Uncompress files

if [ -d $OPT ]; then

get_target $OPT

tar zcvf ${TARGET}.tar.gz $OPT && echo "OK"

elif [ -f $OPT ]; then

get_target $OPT

cp $OPT tmp

gzip tmp

cp tmp.gz ${TARGET}.gz

rm tmp.gz

if [ -x ${TARGET}.gz ]; then

chmod -x ${TARGET}.gz

fi

echo "OK"

fi

上面的get_target就是对这个情况的处理。不过没有想到rm也无法处理这种情况,要知道,使用TAB键提高效率是经常用的手段啊。

找到了bug,还没有看rm的源代码,倒是可以利用上面的脚本的思路来解决这个小bug。写了一个脚本rmlink,如下:

[ARMLinux@lqm bin]$ cat rmlink

#!/bin/sh

# Copyright 2007 (c), Shandong University

# All rights reserved.

#

# Filename : rmlink

# Description : solve the bug of "rm" and "unlink"

# Syntax : rmlink

# Author : Liu Qingmin

# Version : 1.0

# Date : 07-09-19

#

# Func: get_target()

# Desc: Obtain the name of target file

# Para: $1 -- file name that will be compressed

# Ret : TARGET -- current file name

get_target()

{

TARGET=`echo $1 |

awk -F/ '{if ($NF == "") print $(NF-1);

else print $(NF)}'`

}

# Handle Parameters

if [ $# != 1 ];then

echo "Usage: `basename $0` "

exit 1

fi

# Assign the parameter to the Macro OPT

OPT=$1

# Uncompress files

if [ -d $OPT ]; then

# eliminate the "/" at the ending

get_target $OPT

# you also can use "unlink" instead of "rm"

rm ${TARGET}

fi

# OK

exit 0

测试:

[ARMLinux@lqm bootloader]$ ls

develop orig patch u-boot-1.1.3 u-boot-1.2.0 u-boot-1.2.0.orig vivi vivi_origin

[ARMLinux@lqm bootloader]$ rmlink develop

[ARMLinux@lqm bootloader]$ rmlink orig

[ARMLinux@lqm bootloader]$ ls

patch u-boot-1.1.3 u-boot-1.2.0 u-boot-1.2.0.orig vivi vivi_origin

可见测试正常,rmlink可以正常使用。

至此,问题最终解决。

附:

vmware崩溃,导致关心查阅磁盘空间和文件大小。现在附几个常用的小命令,备查阅。

.查看文件的大小

[ARMLinux@lqm bootloader]$ ls -hl

如果只想看到大小,而不希望看到其他信息,可以使用下面的命令:

[ARMLinux@lqm bootloader]$ ls -hl | awk '{print $5 "  " $NF}'

.查看单个目录占用空间的大小

[ARMLinux@lqm bootloader]$ du -hs u-boot-1.2.0

71M u-boot-1.2.0

.查看磁盘剩余空间的大小

[ARMLinux@lqm bootloader]$ df -hl

关于选项-h,在ls等等的命令中都有,具体的含义是一致的,如下:

-h, --human-readable

with -l, print sizes in human readable format (e.g., 1K 234M 2G)

转载地址:http://nczfk.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>