Czy utworzenie pliku tekstowego w vi zmieni mój komputer?

9

Wiem, że Linux to system operacyjny zbudowany na plikach tekstowych. Chciałbym utworzyć plik przy użyciu viwszystkich różnych poleceń, których się nauczyłem. W ten sposób mogłem bardzo łatwo znaleźć każde polecenie za pomocą polecenia /in vi. Ale chcę to zrobić tylko wtedy, gdy nie zmieni to sposobu działania mojego komputera. Czy to byłby dobry pomysł?

BJsgoodlife
źródło
12
Tak, gdzieś będzie miał plik tekstowy. ;-) (Żarty) Naprawdę plik to plik. To jak pytanie, czy dodanie zdjęcia do folderu lub utworzenie nowego dokumentu Word zmieni komputer. Tak, to będzie; masz tam jeszcze jedno zdjęcie / dokument. Cokolwiek, odpowiedzi, które masz, są w większości prawidłowe.
Rmano
Dlaczego tak myślisz?
Braiam
2
Nie jestem pewien, co rozumiesz przez „system operacyjny oparty na plikach tekstowych”, ale Linux tak naprawdę nie różni się od, powiedzmy, Windowsa, jeśli chodzi o pliki tekstowe. Windows ma na przykład pliki .ini i .bat, jeśli tak właśnie myślisz.
hyde
Czy uważasz, że jest coś wyjątkowego w vi(w porównaniu do powiedzmy gedit), czy miałeś na myśli „edytor tekstu”?
Pan Lister
1
@BJsgoodlife Niektóre pliki tekstowe kontrolują system. Są umieszczane w specjalnych miejscach i na ogół nie można ich modyfikować sudo.
cpast

Odpowiedzi:

34

Zapisanie pliku tekstowego nie zmieni „sposobu działania komputera”.

W szczególności, aby zrobić coś takiego, musisz zrobić jedną z nich

  • zastąpić jakiś ważny plik
  • zapisz plik w specjalnej chronionej lokalizacji, takiej jak katalog * .d w / etc; nie będziesz mieć na to pozwolenia
  • zaznacz plik wykonywalny i umieść go na swojej ścieżce

Ponieważ nie zamierzasz robić czegoś takiego wprost, nie musisz się martwić. W szczególności druga odpowiedź jest niepotrzebna, sugerując, że pliki tekstowe muszą zaczynać się od skrótów w każdej linii. Oczywiście, że nie. Samo przechowywanie pliku tekstowego w normalnym katalogu domowym nic nie da.

thomasrutter
źródło
3
Zasugerowałem umieszczenie, #aby przypadkiem nie wykonano niczego niezamierzonego. Myślę, że zawsze lepiej jest być po bezpieczniejszej stronie.
heemayl
8
Myślę, że nie zawsze lepiej jest być po bezpieczniejszej stronie. Bezpieczeństwo ma swój koszt i istnieje punkt, w którym zmniejszone ryzyko nie jest już warte kosztów. Na przykład, gdy przekracza wartość rzeczy, którą próbujesz zachować bezpieczeństwo (w kontekstach, w których ten argument ma sens). Na temat bezpieczeństwa informacji można znaleźć wiele odpowiedzi omawiających, w jaki sposób właściwe bezpieczeństwo jest kompromisem, a jedyny całkowicie bezpieczny system jest również całkowicie bezużyteczny, więc głupio byłoby nalegać na idealne bezpieczeństwo we wszystkich przypadkach.
David Z
9
Jako nieco odrębnej kwestii, myślę, że najbardziej istotny punkt, aby przywołać (która to odpowiedź robi, a drugi nie) jest to, że tworząc dowolny plik nie zrobi nic, aby zmienić system. Możesz wpływać na system tylko poprzez utworzenie pliku, którego szuka jakiś inny proces, lub wykonanie utworzonego pliku, jeśli zawiera on kod wpływający na system - ale to jest zgodne z ogólną radą, aby nie uruchamiać całkowicie nieznanych poleceń powłoki , który jest inteligentny niezależnie od tego, czy pracujesz z plikami, czy nie.
David Z
2
Zrób mi kanapkę. You won't have permission to do this. sudo zrób mi kanapkę. Aye, aye, sir!
Lie Ryan,
2
@ heemayl dlaczego nie zrobić pierwszej linii w pliku exit?
Random832
15

Możesz zapisać wszystkie polecenia, których nauczyłeś się w pliku, ale należy pamiętać o kilku ważnych kwestiach:

  • Nie uruchamiaj pliku
  • Nigdy sourceplik
  • Najlepszym sposobem byłoby umieszczenie #na początku wszystkich poleceń w celu skomentowania wszystkich poleceń, aby nie zostały one wykonane przypadkowo. W ten sposób możesz wyszukać potrzebne polecenie, a także nie ryzykować. Możesz dodać #na początku każdej linii za pomocą następującego polecenia:

    sed -i 's/^/#/' <file_name>

EDYCJA: Podałem trzeci punkt jako ekstremalny środek bezpieczeństwa, ponieważ „neon_overload” i „David Z” zauważyli, że wstawianie skrótów we wszystkich wierszach jest zbyt obszerne i dlatego nie jest potrzebne, poparłbym je w tym kontekście. Również, jak wskazano w „random832”, znacznie lepszą alternatywą dla mojego trzeciego punktu byłoby uruchomienie pliku exit, ponieważ nie będą wtedy wykonywane żadne późniejsze polecenia.

EDYCJA 2: „Rinzwind” wspomniał o dwóch ważnych kwestiach:

  • Nie zastępuj istniejącego pliku

  • Zapisz plik w katalogu domowym użytkownika ( /home/$USER/).

heemayl
źródło
4
put a # in the beginning of all the commands to comment out all the commands so they don't get executed accidentallyNie jestem do końca pewien, czy to ma być poważna sugestia, czy żart. Mój detektor sarkazmu zawiódł mnie dzisiaj.
Lie Ryan,
Słowo, na które należy zwrócić uwagę, brzmi „przypadkowo”. Użytkownik może przypadkowo zatrzymać plik w bezpiecznym miejscu jako plik wykonywalny… tutaj nie
ryzykuję
4
Czy nie mógłby po prostu umieścić „wyjścia” lub czegoś takiego na początku pliku, zamiast komentować każdą linię?
o0 ”.
Może miał na myśli #! - ustawiono interpreter na zero, aby nie działał.
Joshua
1
@BJsgoodlife, no #!- just exit; w ten sposób jesteś również chroniony, przed sh yourfilektórym nieprawidłowy shebang nie pomoże.
Charles Duffy
7

neon_overload ma bardzo dobrą odpowiedź.

Rozbuduję trochę kwestię twojego pytania - chciałbym zamienić to w komentarz, ale nie mam tutaj wystarczającej reputacji.

Linux, jako system operacyjny, w dużej mierze NIE jest oparty na plikach tekstowych. To powiedziawszy, widzę, skąd pochodzisz. Zewnętrznemu obserwatorowi sporo się dzieje przy edycji i uruchamianiu plików „tekstowych”, szczególnie w porównaniu z Windows.

Ma to kilka przyczyn, z których niektóre to:

  • W systemie Linux nie ma systemu rejestru, podobnie jak w systemie Windows. Dlatego aplikacje przechowują swoje ustawienia w plikach tekstowych i zaleca się ich edycję, a nie edycję rejestru, tak jak w systemie Windows.
  • Linux jest bardzo szeroko stosowany jako system serwerowy, a wielu z tych, którzy używają go na komputerach, działa z systemami serwerowymi. W przeciwieństwie do Windows Server, serwery Linux zwykle działają bez interfejsu graficznego. Dlatego oczekuje się, że produkty, które mają działać na serwerach Linux, a także ich użytkownicy i administratorzy, będą działać bez interfejsu graficznego. Produkty (i funkcje systemowe, o których warto wspomnieć), które powinny działać tylko w systemie Windows, są zwykle bardziej zorientowane na GUI (np. MS SQL)
  • System skryptowy Linux jest nieco bardziej powszechny i ​​bardziej przejrzysty niż Windows. Zobaczysz skrypty w systemie Windows - ale będą się nazywać coś. Vbs lub inny. Nietoperz. Nie musisz koniecznie zdawać sobie sprawy, że są to pliki tekstowe - ale biorąc pod uwagę moją drugą kwestię, w Linuksie o wiele częściej jest szperanie w plikach .sh.
  • Wreszcie, wielu użytkowników Linuksa jest przyzwyczajonych do pracy bez interfejsu graficznego i, z wielu powodów, raczej edytuje pliki bezpośrednio, tak jak bez GUI, zamiast bawić się narzędziami graficznymi. Wiem, że kiedy chcę zrobić coś głębszego w systemie, po prostu uruchamiam terminal, podobnie jak wielu moich kolegów.
Fabo.sk
źródło
„W systemie Linux nie ma systemu rejestru”, ale jest dconf ( en.wikipedia.org/wiki/Dconf ). Nie wszystkie systemy z jądrem Linuksa będą go mieć i nie wszystkie rzeczy, które system Windows skonfigurowałby w rejestrze, będą tam jednak skonfigurowane.
Daniel Landau
1

Krótka odpowiedź brzmi: nie, nie zmienisz komputera , tworząc plik tekstowy w vi. Jeśli jednak nie będziesz ostrożny, utworzenie pierwszego pliku tekstowego może tylko zmienić twoje życie . Nauka uniksowego sposobu może być bardzo satysfakcjonującą praktyką.

hackerb9
źródło
0

vijest edytorem tekstowym , więc jeśli wszystko, czego potrzebujesz, to po prostu przechowuj fragmenty tekstu w pliku tekstowym i przeszukuj go, możesz to wszystko zrobić bezpośrednio z terminala za pomocą wbudowanych poleceń.

  1. Napisz notatkę do pliku tekstowego (utworzy plik, jeśli nie istniał):

    echo z ważnymi danymi >> info.txt

WAŻNE: Uważaj na pojedyncze i podwójne cudzysłowy i poprzedz je ukośnikami, jeśli chcesz je uwzględnić.

  1. Wyszukaj w pliku jakiś tekst (np. important):

    grep - kolor -i ważne info.txt

Aby uniknąć pisania, --color -iktóre powinno być w twoim aliasie ~/.bashrc.

Możesz także dodać tekst wielowierszowy do istniejących lub nieistniejących plików tekstowych:

cat >> info2.txt

następnie wpisz lub wklej tekst, a po zakończeniu naciśnij CTR+Z

Jeśli chodzi o zmianę systemu, nie, nie zmieni to sposobu działania systemu, dopóki tworzysz pliki we własnym folderze domowym i nie wykonujesz ich (możesz wykonać plik, nawet jeśli nie jest wykonywalny, np. Za pomocą bash myFile) . Upewnij się także, że korzystasz z uprawnień roota tylko wtedy, gdy ich potrzebujesz.

I wreszcie, twoja interpretacja systemu opartego na plikach nieco cię wprowadziła w błąd: większość systemów operacyjnych ma pliki, które przechowują ważne ustawienia, które głęboko wpływają na sposób działania systemu, ale są one zlokalizowane w predefiniowanych lokalizacjach i zwykle są chronione przed modyfikacjami przez zwykłych użytkowników.

Możliwe jest jednak łatwe strzelanie sobie w stopę, na przykład, jeśli jako zwykły użytkownik masz lokalny folder „wykonywalny”, który dodałeś PATH, i jeśli w tym folderze masz pliki wykonywalne, które mają takie same nazwy jak wbudowane -W wspólnych narzędzi lub bash słów kluczowych, takich jak test, echo, cat, for, cut, etc.

ccpizza
źródło