Pašalinkite simbolinę nuorodą į katalogą

Turiu simbolinę nuorodą į svarbų katalogą. Noriu atsikratyti šios simbolinės nuorodos, išlaikant katalogą.

Bandžiau rm ir grįžau rm: cannot remove 'foo' .
Bandžiau rmdir ir grįžau rmdir: failed to remove 'foo': Directory not empty
Tada persikėlėu per rm -f , rm -rf ir sudo rm -rf

Tada nuėjau ieškoti atsarginių kopijų.

Ar yra būdas atsikratyti simbolinės sąsajos, nesukeliant kūdikio vonios vandeniu?

758
16 окт. Matthew Scouten rinkinys spalio 16 d 2008-10-16 23:18 '08 11:18 val. 2008-10-16 23:18
@ 8 atsakymai
 # this works rm foo # versus rm foo/ 

Iš esmės turite pranešti apie tai, kad pašalintumėte failą, o ne ištrintumėte katalogą. Manau, kad skirtumas tarp rm ir rmdir yra dėl skirtumų tarp C bibliotekos tvarkymo.

Bet kokiu atveju, pirmasis turėtų veikti, o antrasis - skųstis foo, kuris yra katalogas.

Jei tai neveikia, kaip aprašyta aukščiau, patikrinkite leidimus. Norėdami ištrinti failus, reikia įrašyti leidimą į pateiktą katalogą.

953
16 окт. Matthew Scharley atsakymas spalio 16 d 2008-10-16 23:22 '08 at 11:22 2008-10-16 23:22

naudokite komandą „atsieti“ ir įsitikinkite, kad jo pabaigoje nėra

 $ unlink mySymLink 

atsieti () pašalina pavadinimą iš failų sistemos. Jei šis pavadinimas buvo paskutinė failo nuoroda, o jokie procesai neatidarė failo, failas buvo ištrintas, o panaudota erdvė galėjo būti pakartotinai naudojama. Jei pavadinimas buvo paskutinė nuoroda į failą, tačiau visuose procesuose vis dar yra failas, failas išliks galiojantis tol, kol bus uždarytas paskutinis failo aprašymas.

Manau, kad tai gali būti problemiška, jei jį teisingai perskaitysiu.

Jei pavadinimas nurodo simbolinę nuorodą, nuoroda ištrinama.

Jei pavadinimas, nurodytas lizde, FIFO arba įrenginyje, pavadinimas ištrinamas, tačiau procesai, kuriuose objektas atidarytas, gali toliau jį naudoti.

https://linux.die.net/man/2/unlink

702
16 окт. Joe Phillips atsakymas 16 okt. 2008-10-16 23:22 '08 at 11:22 2008-10-16 23:22

Darant prielaidą, kad tai iš tikrųjų yra simbolinė nuoroda,

 $ rm -d symlink 

Jis turi tai suprasti, bet todėl, kad negalime įtraukti paslėpto kodo, kuris buvo skirtas kitam atvejui, kuris nebėra, bet čia vyksta teisingi dalykai.

12
17 окт. Joshua atsakymas spalio 17 d 2008-10-17 01:29 '08, 1:29 am 2008-10-17 01:29

rm turėtų pašalinti simbolinę nuorodą.

 skrall@skrall-desktop:~$ mkdir bar skrall@skrall-desktop:~$ ln -s bar foo skrall@skrall-desktop:~$ ls -l foo lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar skrall@skrall-desktop:~$ rm foo skrall@skrall-desktop:~$ ls -l foo ls: cannot access foo: No such file or directory skrall@skrall-desktop:~$ ls -l bar total 0 skrall@skrall-desktop:~$ 
11
16 окт. Steve K atsakymas, pateiktas spalio 16 d. 2008-10-16 23:24 '08 at 11:24 2008-10-16 23:24

Naudokite „ rm symlinkname , bet rm symlinkname gale (nenaudokite: rm symlinkname/ ). Tada jums bus paklausta, ar norite ištrinti simbolinę nuorodą y , kad atsakytumėte „taip“.

10
22 авг. atsakymą pateikė DeeEss09 22 rug . 2012-08-22 00:13 '12 - 0:13 2012-08-22 00:13

Jei rm negali ištrinti simbolinės nuorodos, gali tekti pažvelgti į leidimus kataloge, kuriame yra simbolinė nuoroda. Norėdami ištrinti katalogo įrašus, turite rašyti leidimą į katalogą, kuriame yra.

7
16 окт. atsakymas, kurį pateikė Greg Hewgill, spalio 16 d 2008-10-16 23:21 '08, 11:21 val. 2008-10-16 23:21

Darant prielaidą, kad jūsų sąranka atrodo taip: ln -s /mnt/bar ~/foo , galite padaryti rm foo be problemų. Jei negalite, įsitikinkite, kad turite „ foo ir turite leidimą rašyti / vykdyti failą. Ištrinant „ foo “, nelieskite bar nebent tai darote rekursyviai.

3
16 окт. atsakymas duotas tj111 16 okt. 2008-10-16 23:23 '08, 11:23, 2008-10-16 23:23

„CentOS“ tiesiog paleiskite „ rm linkname ir paprašys „ištrinti simbolinę nuorodą?“. Įveskite Y ir Enter , nuoroda bus ištrinta, o katalogas bus saugus.

2
17 сент. Atsakymas pateikiamas Jurijus 17 rugsėjis. 2014-09-17 22:23 '14, 22:23 pm 2014-09-17 22:23

Kiti klausimai apie žymes arba Ask a question