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ć.
@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ć
@ataxbras
O tym nie pomyślałem, ale i tak:
bash-5.2$ echo $PATH
/mnt/lfs_volume/tools/bin:/usr/bin
@6502
PATH order precedence is determined first to last, with earlier entries having priority.
Sprawdź co masz w zmiennej PATH
@koszotorobur wkleiłem w odpowiedzi wyżej
@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
@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?
@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:
@koszotorobur Wiem jaka jest różnica, chodziło mi tylko o to, co mógłby zmieniać hardlink w tej konkretnej sytuacji.
@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.
@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.
@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.
@6502 Byś wkleił od razu całego enva to by było wiadomo od ręki
Zaloguj się aby komentować