`alias rm =„ rm -i ”` uważany za szkodliwy?


17

Jakiś czas temu przeczytałem (nie mogę znaleźć odnośnika), że użycie takiego aliasu alias rm="rm -i"było bardzo złe.

Czy istnieją dowody historyczne lub rozsądne wyjaśnienie tego faktu?

Wyobrażam sobie, że daje to użytkownikowi zły nawyk polegania na monicie potwierdzenia w celu sprawdzenia jego polecenia, co może prowadzić do katastrof, jeśli zrobi to na innym profilu, który nie ma aliasu.



Myślę, że znalazłem temat, który wspomniałeś.
Daniel Beck

1
@ Daniel rzeczywiście najbardziej uprzywilejowana odpowiedź w tym wątku wspomina o złej praktyce, ale tak naprawdę nie jest to główny temat pytania.
Dunaril

Odpowiedzi:


36

Masz rację.

Jest źle, ponieważ przyzwyczajasz się do tego. Jeśli korzystasz z systemu, który go nie ma, a Ty rmnatychmiast zaczyna się usuwać i zastanawiasz się, co się dzieje.

Wielu użytkowników jest przyzwyczajonych do SSH w różnych systemach; więc używanie wielu różnych systemów, czasem bez skonfigurowanych spersonalizowanych kont użytkowników (w tym aliasów), jest dość powszechne.

Zamiast tego użyj np. alias rmi='rm -i'I naucz się go używać. Jeśli nie jest to skonfigurowane w innym systemie, nie usunąłeś przypadkowo plików i zawsze możesz wrócić do wpisania pełnego polecenia.


4

Jak powiedział @Daniel, nie jest to samo w sobie szkodliwe, poza szkoleniem, jak można się spodziewać. W rzeczywistości jest to domyślna konfiguracja na CentOS (i, jak sądzę, przez rozszerzenie RHEL - minęło dużo czasu, odkąd użyłem jednej) maszyny, i jest to ogromny ból w tuchusie . Przez resztę czasu na tym koncercie pisałem / bin / rm, aby uniknąć konfiguracji „Linux dla osób, które nie powinny mieć dostępu do roota”.


3
RHEL ma to domyślnie, masz rację, przynajmniej systemy, których używałem.
Daniel Beck

4

Myślę, że dużym niebezpieczeństwem jest to, że ludzie mogą polegać na czymś takim, aby filtrować glob. Wyobraź sobie, że chcesz usunąć niektóre obrazy z katalogu, ale nie wszystkie:

rm -i pics/*.jpg

Możesz użyć tego do ręcznego filtrowania globu, co byłoby całkowicie rozsądne. Ale jeśli byłeś aliasowany i używałeś rmi zdarzyło Ci się wylądować w skorupce bez tego aliasu i wypróbować go ... właśnie usunąłeś wszystkie swoje zdjęcia, ups!

Osobiście uważam również, że ten alias jest szkodliwy dla mojego ciśnienia krwi;). Ale to tylko ja.


Niezły przykład. Oczywiście, jeśli lubisz niebezpieczeństwo lub hazard ...
Dunaril

2

Oprócz tego, co powiedział Daniel Beck, znalazłem się przy -fomijaniu -i, co jest potencjalnie niebezpieczne, ponieważ skutkuje użyciem rm -fi rm -rfniepotrzebnie. Jakoś spokrewniony: sposobem na uniknięcie rm -rfproblemów jest utworzenie pliku o nazwie „-i”, jak wyjaśniono w odpowiedzi na to pytanie: Jak zapobiec przypadkowemu rm -rf / *? .

Ale znowu, jeśli nie byłoby tego aliasu, nie użyłbym -f, a cała sprawa nie będzie problemem.


3
Wygląda na to, że znalazłeś sposób na pogorszenie tej złej praktyki :)
Dunaril

0

Jest to o wiele mniej szkodliwe, w oparciu o moje doświadczenie w pracy z setkami użytkowników w przeszłości:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • Użytkownicy są szkoleni w zakresie prawidłowego używania symboli wieloznacznych, a nie tylko „*”, a następnie polegania na monitach o wybranie plików
  • Uwarunkowania użycia poprawnych symboli wieloznacznych często ratowały przed katastrofą, gdy były używane rmw innym kontekście, w którym brakowało tej funkcji lub rm -ialiasu.
  • Mniej czasu spędziłem na przywracaniu plików, w których użytkownik wpisał „y” zbyt wiele razy
  • Użytkownicy muszą odpowiedzieć tylko raz - zapewniając wyraźne pozytywne opinie na temat korzystania z nich
  • Control-c przerywa działanie i jest raportem, który nic nie robi
  • Nie skrypt, więc rzeczywistość rmpozostaje nietknięta, co pozostawia inne programy niezrażone.

Styl kodu jest w większości kompatybilny z SH (z wyjątkiem użycia echo .... | tr -d '\012'w powłokach poprzedzających bash), nie krępuj się, aby tworzyć własne bardziej specyficzne dla bash. Nie publikuję, aby udostępnić sam kod, ale podzielić się wrażeniami użytkownika związanymi z nim.


Kamil: Moja odpowiedź obejmuje, że rm -ihistorycznie (z mojego doświadczenia z posiadaniem setek użytkowników) skutkuje to błędnym usunięciem pliku, a dołączona funkcja wyszkoliła użytkowników do używania poprawnych symboli wieloznacznych, obniżając poziom błędu. rm -i Rozwiązałem więc dręczące mnie najważniejsze problemy i podałem rozwiązanie dla wygody, a sam fakt, że punkty kulkowe znajdują się pod funkcją, nie przeszkadza im być germańskim.
Alex North-Keys,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.