LINUX 怎么删除 文件link
Linux下取消软连接,做个案例来说明:
1.先建立一个软连接
[root@rekfan.com test]# ls -il总计 01491138 -rw-r–r– 1 root root 48 07-14 14:17 file11491139 -rw-r–r– 2 root root 0 07-14 14:17 file21491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand#建立file1和file1soft软连接[root@rekfan.com test]# ln -s file1 file1soft[root@rekfan.com test]# ls -il总计 01491138 -rw-r–r– 1 root root 48 07-14 14:17 file11491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file11491139 -rw-r–r– 2 root root 0 07-14 14:17 file21491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand2.删除上面建立的软连接
[root@rekfan.com test]# ls -il总计 01491138 -rw-r–r– 1 root root 0 07-14 14:17 file11491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file11491139 -rw-r–r– 2 root root 0 07-14 14:17 file21491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand#删除软连接[root@rekfan.com test]# rm -rf file1soft[root@rekfan.com test]# ls -il总计 01491138 -rw-r–r– 1 root root 0 07-14 14:17 file11491139 -rw-r–r– 2 root root 0 07-14 14:17 file21491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
ls -d 上层文件夹名 或者 ls -l 链接文件名
每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。当通过shell的touch命令或者在程序中open一个带有O_CREAT的不存在的文件时,文件的链接数为1。
通常open一个已存在的文件不会影响文件的链接数。open的作用只是使调用进程与文件之间建立一种访问关系,即open之后返回fd,调用进程可以通过fd来read 、write 、 ftruncate等等一系列对文件的操作。
close()就是消除这种调用进程与文件之间的访问关系。自然,不会影响文件的链接数。在调用close时,内核会检查打开该文件的进程数,如果此数为0,进一步检查文件的链接数,如果这个数也为0,那么就删除文件内容。
link函数创建一个新目录项,并且增加一个链接数。
unlink函数删除目录项,并且减少一个链接数。如果链接数达到0并且没有任何进程打开该文件,该文件内容才被真正删除。如果在unlilnk之前没有close,那么依旧可以访问文件内容。
综上所诉,真正影响链接数的操作是link、unlink以及open的创建。
删除文件内容的真正含义是文件的链接数为0,而这个操作的本质完成者是unlink。close能够实施删除文件内容的操作,必定是因为在close之前有一个unlink操作。
举个例子简单说明:通过shell touch test.txt
1、stat("test.txt",&buf);
printf("1.link=%d\n",buf.st_nlink);//未打开文件之前测试链接数
2、fd=open("test.txt",O_RDONLY);//打开已存在文件test.txt
stat("test.txt",&buf);
printf("2.link=%d\n",buf.st_nlink);//测试链接数
3、close(fd);//关闭文件test.txt
stat("test.txt",&buf);
printf("3.link=%d\n",buf.st_nlink);//测试链接数
4、link("test.txt","test2.txt");//创建硬链接test2.txt
stat("test.txt",&buf);
printf("4.link=%d\n",buf.st_nlink);//测试链接数
5、unlink("test2.txt");//删除test2.txt
stat("test.txt",&buf);
printf("5.link=%d\n",buf.st_nlink);//测试链接数
6、重复步骤2 //重新打开test.txt
7、unlink("test.txt");//删除test.txt
fstat(fd,&buf);
printf("7.link=%d\n",buf.st_nlink);//测试链接数
8、close(fd);//此步骤可以不显示写出,因为进程结束时,打开的文件自动被关闭。
顺次执行以上8个步骤,结果如下:
1.link=1
2.link=1 //open不影响链接数
3.link=1 //close不影响链接数
4.link=2 //link之后链接数加1
5.link=1 //unlink后链接数减1
2.link=1 //重新打开 链接数不变
7.link=0 //unlink之后再减1,此处我们改用fstat函数而非stat,因为unlilnk已经删除文件名,所以不可以通过 文件名访问,但是fd仍然是打开着的,文件内容还没有被真正删除,依旧可以使用fd获得文件信息。
执行步骤8,文件内容被删除。。。。
linux ln(link) 命令详解
功能说明:连接文件或目录。
语 法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录...][目的目录]
补充说明:ln指令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
参 数:
-b或--backup 删除,覆盖目标文件之前的备份。
-d或-F或--directory 建立目录的硬连接。
-f或--force 强行建立文件或目录的连接,不论文件或目录是否存在。
-i或--interactive 覆盖既有文件之前先询问用户。
-n或--no-dereference 把符号连接的目的目录视为一般文件。
-s或--symbolic 对源文件建立符号连接,而非硬连接。
-S<字尾备份字符串>或--suffix=<字尾备份字符串> 用"-b"参数备份目标文件.
linux ln(link) 命令详解
功能说明:连接文件或目录。
语 法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录...][目的目录]
补充说明:ln指令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
参 数:
-b或--backup 删除,覆盖目标文件之前的备份。
-d或-F或--directory 建立目录的硬连接。
-f或--force 强行建立文件或目录的连接,不论文件或目录是否存在。
-i或--interactive 覆盖既有文件之前先询问用户。
-n或--no-dereference 把符号连接的目的目录视为一般文件。
-s或--symbolic 对源文件建立符号连接,而非硬连接。
-S<字尾备份字符串>或--suffix=<字尾备份字符串> 用"-b"参数备份目标文件.
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
rm -f 用于强制删除某个文件
rm -f 文件名 rm -r
曹颜独一: linux ln(link) 命令详解功能说明:连接文件或目录.语法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或ln [-b...
浚县17690623479: linux下,一个文件有多个硬链接,如何将其删除?? - ?
曹颜独一: 可以写个shell脚本进行批量删除啊
浚县17690623479: Linux文件的复制、删除和移动命令是.? - ?
曹颜独一: linux 下的复制\删除和移动的命令分别是: cp rm 和 mv详解如下: 1. Linux 的cp命令 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指...
浚县17690623479: linux 如何删除文件 - ?
曹颜独一: 方法步骤如下: 方法1、删除文件夹以及文件夹中的所有文件命令: rm -rf 目录名字 其中: -r:向下递归删除 -f:直接强行删除,且没有任何提示 方法2、删除文件命令 rm -f 文件名 将会强行删除文件,且无提示 这里要注意的是,使用rm -rf要格外注意,linux中没有回收站,慎重删除.百度了下linux文件的内涵:
浚县17690623479: linux下如何删除目录 - ?
曹颜独一: 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思 删除文件夹实例:rm -rf /var/log/httpd/access 将会删除/var/log/httpd/access目录以及其下所有文件、文件夹 需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的,一旦删除不可恢复. 当然,rm还有更多的其他参数和用法,man rm就可以查看了
浚县17690623479: linux 文件删除 - ?
曹颜独一: 首先明白rm的参数-d是直接把欲删除的目录的硬连接数据删成0,删除该目录.记着要删除的是目录的硬链接而不是目录! 在这里用户cb文件夹是一个目录,可用rm -rf cb删除:-r是递归处理,就是一层一层的删;-f是强制删除.其实你要完全删除用户cb,可直接userdel -rf cb.
浚县17690623479: linux下如何删除一个文件? - ?
曹颜独一: 如果要删除文件的话可以使用以下命令: rm [-f] file1 file2 ... 如果不加-f选项的话,将会询问是否删除 如果要删除一个目录的话可以使用以下命令: rm -rf dir1 dir2 ... 必须使用-r选项,意味着递归删除,-f随心情吧(如果你很无聊的话) 推荐你去看看《Linux就该这么学》这本书的第二章,详细介绍了常用命令的用法和选项.
浚县17690623479: LINUX操作系统中,删除文件的命令是什么? - ?
曹颜独一: Linux删除文件命令rm -r 删除目录,不管目录中有没有文件 rm -rf 强制删除,没有提示 一般用到的就这两个,删除文件可以用rm -f,同样是强制删除
浚县17690623479: 如何删除linux服务器上的文件 - ?
曹颜独一: linux里删除文件或者文件夹下所有文件的方法如下: 1、rm -rf 文件名 2、如果你要删除文件夹以及文件夹下所有的内容也使用上述命令 3、在没有确认好是否删除前,请使用 rm -r 文件名.这样没删一个文件都会问你是否删除,选择是才删除,否则不会删除.
浚县17690623479: linux下删除某一目录下所有非文件夹的文件命令 - ?
曹颜独一: 删除文件命令 rm NO1. 删除当前目录的文件 [root@rehat root]# rm test.txt NO2. 强制删除当前目录的文件,不弹出提示 [root@rehat root]# rm -f test.txt NO3. 强制删除整个目录,包括目录与文件全部删除,需要管理员权限 [root@rehat root]# rm -r -f test 删除文件夹命令 rmdir NO1. 删除一个空目录 [root@rehat root]# rmdir emptydir NO2. 删除多级空目录 [root@rehat root]# rmdir -p emptydir/d1/d11