#linux
Czy ktoś jest w stanie wyjaśnić mi następujący fenomen?
bash-5.2$ which sh
/usr/bin/sh
bash-5.2$ ls -lah /usr/bin/sh
lrwxrwxrwx 1 root root 20 Dec 12 19:17 /usr/bin/sh -> /etc/alternatives/sh
bash-5.2$ ls -lah /etc/alternatives/sh
lrwxrwxrwx 1 root root 13 Apr 23 2023 /etc/alternatives/sh -> /usr/bin/bash
bash-5.2$ ls -lah /usr/bin/bash
-rwxr-xr-x 1 root root 1.3M Apr 23 2023 /usr/bin/bash
bash-5.2$ sh
sh-5.2$
/usr/bin/sh pośrednio wskazuje na /usr/bin/bash, mimo to po wykonaniu sh zgłasza się sh. Inb4 - tak, doczytałem że korzystanie z update-alternatives do tego to nie jest najlepszy pomysł, ale z tak wyglądającymi symlinkami powinno działać.
ataxbras

@6502 Powinno działać, ale możesz mieć PATH ze ścieżką bezpośrednio do sh o wyższym priorytecie (zakładam, że /bin). Tak gdybam. I fakt, alternatives może namieszać.

Co do alternatives per se, preferuję asdf, właśnie dlatego, że mniej się może zepsuć

6502

@ataxbras 

O tym nie pomyślałem, ale i tak:

bash-5.2$ echo $PATH

/mnt/lfs_volume/tools/bin:/usr/bin

koszotorobur

@6502

PATH order precedence is determined first to last, with earlier entries having priority.

Sprawdź co masz w zmiennej PATH

6502

@koszotorobur wkleiłem w odpowiedzi wyżej

koszotorobur

@6502 - sprawdź jakie te binaries mają inodes - jeśli takie same to znaczy, że są zhardlinkowane:

stat -L -c %i /usr/bin/sh

stat -L -c %i /usr/bin/bash

6502

@koszotorobur 

bash-5.2$ stat -L -c %i /usr/bin/sh

19924521

bash-5.2$ stat -L -c %i /usr/bin/bash

19924521

Są zhardlinkowane. Jakie to ma tutaj znaczenie?

koszotorobur

@6502 - znaczenie ma takie, że /usr/bin/bash oraz /usr/bin/sh to ten sam plik (a właściwie bardziej precyzyjnie, jest to hardlink do tego samego ionode w systemie plików - bo każdy plik to właściwie jest hardlink do jakiegoś ionodea).

Zapraszam do poczytania o hardlinkach i o ionodeach:


6502

@koszotorobur Wiem jaka jest różnica, chodziło mi tylko o to, co mógłby zmieniać hardlink w tej konkretnej sytuacji.

6502

@ataxbras @koszotorobur

Wszystko jasne:

bash-5.2$ sh --version    

GNU bash, version 5.2.15(1)-release (x86_64-pc-linux-gnu)

Copyright (C) 2022 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>


This is free software; you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

To od początku był bash, ale z promptem "sh", zakładam że jest ustawiany na podstawie polecenia uruchamiającego konkretnego shella.

koszotorobur

@6502 - w Twoim przypadku, bez względu na to czy uruchomisz /usr/bin/bash czy /usr/bin/sh to uruchomi się to samo, gdyż oba pliki są hardlinkiem do tego samego ionode.

ataxbras

@6502 A to niespodzianka :D. Sprawdziłem u mnie i mam "normalnego" sh (dash). Co ciekawe, dowiedziałem się, że nie mogę sprawdzić jego wersji (o czym wcześniej nie wiedziałem). Próbowałem nawet strings, mając nadzieję, że wersja jest gdzieś w binarce, ale nie.

WolandWspanialy

@6502  Byś wkleił od razu całego enva to by było wiadomo od ręki

Zaloguj się aby komentować