Linkki katoaa (ln)

~$ ls * >> teso.n
~$ ln teso.n teso.h
~$ ls -i teso.*
410105 teso.h 410105 teso.n
~$ ls * >> teso.h
~$ ls -i teso.*
410105 teso.h 410105 teso.n
~$ vi teso.h (:wq)
~$ ls -i teso.*
410225 teso.h 410105 teso.n

Miksi linkki katosi kun editoisin sitä editorilla? Millä/miten voin muokata niin ettei linkki katoa?
10437
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

kokeileppas ln -s vipua

Äänestä
  • ~$ ln -s teso.n teso.s
    410205 teso.s 410105 teso.n

    Käy samanlai kuin edelisessä tapauksessa (linkki katoaa).
    Haluan siis kaksi tiedostoa jotka osoittaa samaan node:en (Data ei saisi kadota jos tuhoan teso.n tiedoston mutta en siitä tehtyjä linkkejä). Pitäisi myös saada editoitua jompaa kumpaa tiedostoa niin että kummatkin muuttuvat (Kuten kävi tuossa ls * >> teso.h lauseessa, mutta kun editoin sitä vi editorilla niin ne alkoivatkin osoitamaan eriin node:en eli linkki katosi).

    Äänestä

Linkki on linkki (osoitin?) alkuperäiseen tiedostoon. Ei linkin poistaminen edes oletuksena poista alkuperäistä tiedostoa eikä alkuperäisen tiedoston poistaminen poista linkkiä.
Parametrisi -i:
-i, --interactive
prompt whether to remove destinations
man ln

Äänestä
  • Ehkä selkeä esimerkki on useissa jakeluissa /etc/grub/menu.lst, joka on linkki tiedostoon /boot/grub/grub.conf
    Toinen esimerkki voisi olla vmlinuz, joka osoittaa kulloinkin viimeiseksi asennettuun kernel-versioon (hieman jakelusta hieman riippuen).

    Äänestä

  • Siis tarkoitan miksi linkki katosi/katkesi/katosi kun editoisin sitä vi editorilla mutta ei silloin kun "editoin" sitä (>>) operaattorilla (vai miksi tota merkkiä sanotaan).

    ~$ ls * >> teso.n
    ~$ ln teso.n teso.h
    ~$ ls -i teso.*
    410105 teso.h 410105 teso.n
    ~$ ls * >> teso.h (Muutan >> operattorilla sisältöä)
    ~$ ls -i teso.*
    410105 teso.h 410105 teso.n (Linkki on viellä voimassa)
    ~$ vi teso.h (:wq) (Muutan vi:n kanssa sisältöä)
    ~$ ls -i teso.*
    410225 teso.h 410105 teso.n (Linki on katkennut/kadonnut/poistunut)

    Siis mitä mun pitää muuttaa ettei toi linkki katoa/katkea/poistu kun editoin sitä vi:llä vai katoaako se aina?

    (Ähh. Mikä on hyvä sivu missä kerrotan linkin käytöstä by finska kun ei tää englanti ole vahvin alani)

    Äänestä

  • Törppö aloitelija kirjoitti:

    Siis tarkoitan miksi linkki katosi/katkesi/katosi kun editoisin sitä vi editorilla mutta ei silloin kun "editoin" sitä (>>) operaattorilla (vai miksi tota merkkiä sanotaan).

    ~$ ls * >> teso.n
    ~$ ln teso.n teso.h
    ~$ ls -i teso.*
    410105 teso.h 410105 teso.n
    ~$ ls * >> teso.h (Muutan >> operattorilla sisältöä)
    ~$ ls -i teso.*
    410105 teso.h 410105 teso.n (Linkki on viellä voimassa)
    ~$ vi teso.h (:wq) (Muutan vi:n kanssa sisältöä)
    ~$ ls -i teso.*
    410225 teso.h 410105 teso.n (Linki on katkennut/kadonnut/poistunut)

    Siis mitä mun pitää muuttaa ettei toi linkki katoa/katkea/poistu kun editoin sitä vi:llä vai katoaako se aina?

    (Ähh. Mikä on hyvä sivu missä kerrotan linkin käytöstä by finska kun ei tää englanti ole vahvin alani)

    Pelkkä ln komento tekee niinsanotun hard linkin eli linkki ja tiedosto jota linkataan ovat eroittamattomia ne jakavat saman inoden. Siinä syy ongelmaasi. Hard linkkejä ei tulisi käyttää!!!

    ln -s vipu tekee soft linkin joka on oma tiedostotyyppinsä eli osoitin toiseen tiedostoon. Kun poistat soft linkin poistuu vain tämä linkki kun poistat hard linkin häviää myös tiedosto johon linkkasit.

    Siis ÄLÄ käytä hard linkkejä!!

    info coreutils ln kertoo


    A "hard link" is another name for an existing file; the link and the
    original are indistinguishable. Technically speaking, they share the
    same inode, and the inode contains all the information about a
    file--indeed, it is not incorrect to say that the inode _is_ the file.
    On all existing implementations, you cannot make a hard link to a
    directory, and hard links cannot cross filesystem boundaries. (These
    restrictions are not mandated by POSIX, however.)

    "Symbolic links" ("symlinks" for short), on the other hand, are a
    special file type (which not all kernels support: System V release 3
    (and older) systems lack symlinks) in which the link file actually
    refers to a different file, by name. When most operations (opening,
    reading, writing, and so on) are passed the symbolic link file, the
    kernel automatically "dereferences" the link and operates on the target
    of the link. But some operations (e.g., removing) work on the link
    file itself, rather than on its target. *Note Symbolic Links:
    (libc)Symbolic Links.

    Äänestä

  • pösilöv0.1 kirjoitti:

    Pelkkä ln komento tekee niinsanotun hard linkin eli linkki ja tiedosto jota linkataan ovat eroittamattomia ne jakavat saman inoden. Siinä syy ongelmaasi. Hard linkkejä ei tulisi käyttää!!!

    ln -s vipu tekee soft linkin joka on oma tiedostotyyppinsä eli osoitin toiseen tiedostoon. Kun poistat soft linkin poistuu vain tämä linkki kun poistat hard linkin häviää myös tiedosto johon linkkasit.

    Siis ÄLÄ käytä hard linkkejä!!

    info coreutils ln kertoo


    A "hard link" is another name for an existing file; the link and the
    original are indistinguishable. Technically speaking, they share the
    same inode, and the inode contains all the information about a
    file--indeed, it is not incorrect to say that the inode _is_ the file.
    On all existing implementations, you cannot make a hard link to a
    directory, and hard links cannot cross filesystem boundaries. (These
    restrictions are not mandated by POSIX, however.)

    "Symbolic links" ("symlinks" for short), on the other hand, are a
    special file type (which not all kernels support: System V release 3
    (and older) systems lack symlinks) in which the link file actually
    refers to a different file, by name. When most operations (opening,
    reading, writing, and so on) are passed the symbolic link file, the
    kernel automatically "dereferences" the link and operates on the target
    of the link. But some operations (e.g., removing) work on the link
    file itself, rather than on its target. *Note Symbolic Links:
    (libc)Symbolic Links.

    Tarkoitan linkin tuhoamisella rm komentoa.

    rm teso.h (hard linkkin tuhoaminen)
    rm teso.s (symbolinen linkki tuhoaminen)
    rm teso.n (alkuperäinen tiedoston tuhoaminen)

    Eli jos poistaisin alkuperäisen tiedoston niin teso.h säylyy ja sisältää edelleen alkp. datan mutta teso.s taas viittaa tiedoston nimeen jota ei enää joten se ei sisällä "mitään" dataa paitsi.

    Mutta edelleen ihmetelen sitä miksi pystyn muuttamaan "kummankin" (eli teso.n sisältö myös muuttuu) sisältöä yhtäaikaa komennolla.

    ls >> teso.h
    ls >> teso.s
    ls > teso.h
    ls > teso.s

    mutta en komennolla

    vi teso.h
    vi teso.s

    Miksi toi vi editori räjäytää ton linkin atomeiksi? Millä komennolla tai editorilla pystyisin editoimaan linkiä niin ettei se hajoa.

    siis haluasin kirjoittaa käskyn

    vi [joku vipu] teso.[sh] (Poistun wq komennolla)

    ja editoida sitä niin että kun tallennan muutokset niin alkuperäinen tiedosto myös on muuttunut sekä kaikki siitä tehdyt linkit. Mutta mun tapauksessa toi vi editori ei näytä editoivan alkuperäistä tiedostoa vaan antaa olla sen selaisena kuin se oli???

    Äänestä

  • Törppö aloitelija kirjoitti:

    Tarkoitan linkin tuhoamisella rm komentoa.

    rm teso.h (hard linkkin tuhoaminen)
    rm teso.s (symbolinen linkki tuhoaminen)
    rm teso.n (alkuperäinen tiedoston tuhoaminen)

    Eli jos poistaisin alkuperäisen tiedoston niin teso.h säylyy ja sisältää edelleen alkp. datan mutta teso.s taas viittaa tiedoston nimeen jota ei enää joten se ei sisällä "mitään" dataa paitsi.

    Mutta edelleen ihmetelen sitä miksi pystyn muuttamaan "kummankin" (eli teso.n sisältö myös muuttuu) sisältöä yhtäaikaa komennolla.

    ls >> teso.h
    ls >> teso.s
    ls > teso.h
    ls > teso.s

    mutta en komennolla

    vi teso.h
    vi teso.s

    Miksi toi vi editori räjäytää ton linkin atomeiksi? Millä komennolla tai editorilla pystyisin editoimaan linkiä niin ettei se hajoa.

    siis haluasin kirjoittaa käskyn

    vi [joku vipu] teso.[sh] (Poistun wq komennolla)

    ja editoida sitä niin että kun tallennan muutokset niin alkuperäinen tiedosto myös on muuttunut sekä kaikki siitä tehdyt linkit. Mutta mun tapauksessa toi vi editori ei näytä editoivan alkuperäistä tiedostoa vaan antaa olla sen selaisena kuin se oli???

    En käytä vi:tä joten toistin operaatiosi käyttämällä nanoa. Toimii.

    Tästä voisi tehdä sen johtopäätöksen, että vi kaipaa jotain parametriä tms. toimiakseen samoin. Eipä muuta kuin 'man vi' sitten.

    Hardlinkin tuhoaminen ei poista alkuperäistä tiedostoa. Alkuperäisen tiedoston tuhoaminen ei poista linkkejä - softlink ei enää osoita mihinkään olevaan, mutta hardlink avaa alkuperäisen tiedoston (kuin kopio). Kieltämättä tuo hardlink on vaikeasti ymmärrettävä.

    Äänestä

  • 24h kirjoitti:

    En käytä vi:tä joten toistin operaatiosi käyttämällä nanoa. Toimii.

    Tästä voisi tehdä sen johtopäätöksen, että vi kaipaa jotain parametriä tms. toimiakseen samoin. Eipä muuta kuin 'man vi' sitten.

    Hardlinkin tuhoaminen ei poista alkuperäistä tiedostoa. Alkuperäisen tiedoston tuhoaminen ei poista linkkejä - softlink ei enää osoita mihinkään olevaan, mutta hardlink avaa alkuperäisen tiedoston (kuin kopio). Kieltämättä tuo hardlink on vaikeasti ymmärrettävä.

    Hardlink siis avaa kiintolevyltä saman alkuperäisen tiedoston, joka poistetaan vasta kun kaikki hardlinkitkin on poistettu.

    Äänestä

  • 24h kirjoitti:

    En käytä vi:tä joten toistin operaatiosi käyttämällä nanoa. Toimii.

    Tästä voisi tehdä sen johtopäätöksen, että vi kaipaa jotain parametriä tms. toimiakseen samoin. Eipä muuta kuin 'man vi' sitten.

    Hardlinkin tuhoaminen ei poista alkuperäistä tiedostoa. Alkuperäisen tiedoston tuhoaminen ei poista linkkejä - softlink ei enää osoita mihinkään olevaan, mutta hardlink avaa alkuperäisen tiedoston (kuin kopio). Kieltämättä tuo hardlink on vaikeasti ymmärrettävä.

    Täytyy koittaa kun pääsen taas linux koneelle.

    Äänestä

Kommentoi aloitusta


Törppö aloittelija kirjoitti:

~$ ls * >> teso.n
~$ ln teso.n teso.h
~$ ls -i teso.*
410105 teso.h 410105 teso.n
~$ ls * >> teso.h
~$ ls -i teso.*
410105 teso.h 410105 teso.n
~$ vi teso.h (:wq)
~$ ls -i teso.*
410225 teso.h 410105 teso.n

Miksi linkki katosi kun editoisin sitä editorilla? Millä/miten voin muokata niin ettei linkki katoa?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu