Chciałbym otworzyć dyskusję, która zgromadziłaby najlepsze praktyki i wskazówki dotyczące wiersza poleceń systemu Linux (CLI).
Szukałem takiej dyskusji, aby podzielić się poniższym komentarzem, ale jej nie znalazłem, stąd ten post.
Mam nadzieję, że wszyscy moglibyśmy się z tego nauczyć.
Zapraszamy do dzielenia się wskazówkami dotyczącymi Basha, grep, sed, AWK, / proc i wszystkimi innymi powiązanymi administracjami systemami Linux / Unix, najlepszymi praktykami programowania powłoki z korzyścią dla nas wszystkich.
Odpowiedzi:
Użyj screena , darmowego multipleksera terminali opracowanego przez GNU Project, który pozwoli ci mieć kilka terminali w jednym.
Możesz rozpocząć sesję, a terminale zostaną zapisane nawet po utracie połączenia, dzięki czemu możesz wznowić je później lub z domu.
źródło
SSH!
SSH to rozkaz boga - myślę, że jest to najcenniejsze z możliwych rozkazów do nauki. Opcje mogą być dość zniechęcające, ale wygląda na to, że ciągle uczę się korzystać z nowych opcji wiersza polecenia dla SSH, których nigdy nie uważałem za konieczne. Być może w tym momencie korzystałem z nich wszystkich.
Im częściej go używasz, tym więcej się o nim uczysz. Możesz go użyć do robienia niesamowitych rzeczy.
Uwaga: WSZYSTKIE te rzeczy są możliwe do wykonania zdalnie bez konfiguracji na serwerze, z wyjątkiem uruchomienia serwera ssh.
Zamontuj system plików przez Internet
wyszukaj w sieci SSHFS
Przekaż polecenia .
Protokół SVN + SSH to Subversion ze zdalnego klienta na serwer bez uruchomionego na nim ŻADNEGO DEAMONA! Komenda SVN uruchamia serwer przez powłokę ssh i przekazuje informacje tam iz powrotem przez istniejący potok. Program rsync robi to samo, działa na serwerze bez demona rsync, uruchamiając się przez SSH. Łatwo jest pisać własne pliki bash, aby wykonywać podobne sztuczki.
Łańcuch, aby przejść przez zapory ogniowe
Używam tego cały czas, aby przeskakiwać przez mój serwer linux w domu do mojego komputera Mac.
Przekazywanie portów:
Wydaje się tylko umiarkowanie przydatne, dopóki nie uświadomisz sobie, że możesz odbić się przez zaporę domową i skonfigurować router w domu z pracy tak, jakbyś robił to z sieci domowej).
Przekaż żądania X:
To kolejny niesamowity. Z serwerem X działającym w systemie zdalnym lub bez niego, możesz uruchomić program X-Windows, a okno pojawi się na ekranie lokalnym. Wystarczy użyć przełącznika -X, to wszystko!
Ponieważ nie musisz mieć serwera X działającego na zdalnym serwerze, wpływ procesora na Twój serwer jest minimalny, możesz mieć serwer TINY Linux, który obsługuje ogromne aplikacje na potężnym komputerze z systemem Windows i cygwin / X.
Oczywiście VI i EMACS działają na SSH, ale kiedy pracuję w domu, czasami chcę więcej. Używam ssh -X, aby uruchomić kopię Eclipse! Jeśli Twój serwer ma większą moc niż laptop, masz GUI na swoim laptopie, ale kompilacje są wykonywane na serwerze, więc nie martw się o obciążenie systemu.
Uruchom w plikach wsadowych
(co oznacza uruchomienie lokalnego pliku wsadowego, który „robi rzeczy” w innych systemach):
Dwie rzeczy sprawiają, że ta jedna jest fajna. Jednym z nich jest wyeliminowanie monitów o hasło przy użyciu (bezpieczniejszych) kluczy szyfrowania. Po drugie, możesz podać polecenie w interfejsie SSH CLI. Użyłem tego na kilka interesujących sposobów - na przykład, gdy kompilacja kończy się niepowodzeniem na zdalnym serwerze, włączam SSH do mojego komputera i odtwarzam plik dźwiękowy).
Pamiętaj, że możesz przekierować dane wyjściowe ze zdalnego polecenia i użyć go w lokalnym pliku wsadowym, abyś mógł także lokalnie dostosowywać kompilację działającą na serwerze.
Wbudowany w Mac
Zarówno serwer, jak i klient są wbudowane zarówno w system Mac, jak i Linux. W przypadku komputerów Mac i Ubuntu włączenie serwera jest tak proste, jak znalezienie odpowiedniego pola wyboru.
Na komputerze zainstaluj cygwin lub cygwin / X (cygwin / X pozwoli ci przesłać dane wyjściowe x-window z komputera z systemem Linux na komputer z systemem Windows - instaluje serwer X)
Ważne wskazówki / plik konfiguracyjny
Nigdy nie używaj portu 22 w zaporze. Dostaniesz wiele prób włamań, po prostu nie warto. Po prostu pozwól zaporze przekierować inny port na twój serwer.
Istnieje wiele opcji konfiguracji, które pozwalają znacznie uprościć polecenia ssh. Oto mój przykład w pracy:
Kiedy piszę „ssh home” (nic więcej), działa to tak, jakbym napisał:
a następnie przesyła mój lokalny port 1025 do mojego systemu „mac” w domu. Powodem tego jest to, że mam inny wpis w moim pliku:
więc gdy zrobię „ssh home” i nadal mam otwarte okno, mogę wpisać „ssh mac”, a komputer w tym miejscu będzie próbował połączyć się z własnym portem 1025, który został przesłany do „mac: 22 ”drugim poleceniem, więc połączy się z moim komputerem Mac w domu za pośrednictwem zapory.
Edycja - fajny skrypt!
Odkopałem stary skrypt, który po prostu uwielbiam - musiałem wrócić i opublikować go dla każdego, kto mógłby być zainteresowany. Skrypt nazywa się „authMe”
Jeśli masz ten skrypt w katalogu domowym i istnieje host, z którym możesz się połączyć (przez ssh), możesz wpisać „./authMe nazwa_hosta”.
W razie potrzeby utworzy dla ciebie publiczną / prywatną parę kluczy, następnie prześle ssh na inny komputer i skopiuje twój klucz publiczny (polecenie ssh poprosi o podanie hasła ...)
Po tym komenda SSH nie powinna już pytać o hasło podczas dołączania do tego zdalnego systemu, użyje klucza publicznego / prywatnego.
Jeśli Twój komputer zdalny nie zawsze jest bezpieczny, powinieneś rozważyć ustawienie „hasła” po wyświetleniu monitu.
Możesz także skonfigurować serwer ssh na drugim końcu, aby nie zezwalał na hasła tekstowe (tylko klucze) dla dodatkowego bezpieczeństwa.
źródło
ssh-copy-id
ona i jest tak prosta, jakssh-copy-id user@someserver
Lubię korzystać
aby przejść do poprzedniego katalogu. Bardzo przydatne!
źródło
Niedawno odkryłem
pv
polecenie (przeglądarka potoków), które jest jak cat, ale ze szczegółami przesyłania.Więc zamiast
Możesz użyć
Więc zamiast nie mieć pojęcia, kiedy operacja się zakończy, teraz będziesz wiedział!
Dzięki uprzejmości Peterisa Kruminsa
źródło
tee(1)
.Uruchom ponownie poprzednie polecenie jako root.
[Bieżące najwyższe polecenie w witrynie http://www.commandlinefu.com , strona o tematyce zgodnej z tym pytaniem.]
źródło
Naciśnij Ctrl-R i zacznij pisać polecenie (lub dowolną jego część) - przeszukuje historię poleceń. Ponowne wciśnięcie Ctrl-R spowoduje przejście do następnego dopasowania, enter wykonuje aktualnie wyświetlane polecenie, a strzałka w prawo (przynajmniej) pozwoli ci go najpierw edytować.
Użyłem Linuksa przez około 7 lat jako mój główny system operacyjny, zanim się tego dowiedziałem, ale teraz, gdy go znam, jest całkiem przydatny.
źródło
stty -ixon
najpierw, aby wyłączyć znaczenie kontroli przepływu XON / XOFF (powoduje to również, że Ctrl-Q jest dostępny, domyślnie jest odwzorowany tak samo, jak wstawka cytowana Ctrl-V, ale można go zmienić na coś innego ). Zobaczman stty
iman readline
więcej informacji.stty
Komenda może zostać dodany do~/.bashrc
Wiersz poleceń to zabawna rzecz. Myślę, że tyle sam możesz się nauczyć, a reszty uczysz się przez przypadek, obserwując kogoś innego za pomocą wiersza poleceń.
Przez lata używałem powłoki, starannie wpisując nazwy katalogów ręcznie. Pewnego dnia patrzyłem, jak kolega bawi się w systemie, a on wciąż naciskał klawisz tab. Zapytałem „dlaczego trafiasz na kartę?”. Odpowiedź: próbuje uzupełnić katalog lub nazwę pliku. Kto by zgadł - zakładka! Wpisz trochę pliku lub katalogu, wciśnij tab, a spróbuje dokończyć to, co wpisałeś (zachowanie zależy od tego, która powłoka).
Pewnego dnia przyjaciel powiedział, że obserwuje mnie w wierszu poleceń i obserwował, jak piszę:
Kto by zgadł !? Nigdy nie wiedział o
popd
/pushd
. Chyba jesteśmy nawet ...źródło
Naucz się Vima.
Jest to (prawdopodobnie) najlepszy edytor, ale z pewnością najlepszy edytor dostępny na czystym serwerze Linux.
źródło
Czasami przydatne jest pozostawienie programu uruchomionego nawet po wylogowaniu. Widziałem niektóre rozwiązania, które używają do tego celu nohup, a nawet ekranu. Najprostszy o którym wiem to:
Możesz także odłączyć działający program:
źródło
Kiedy chcę się upewnić, że używam rzeczywistego polecenia, a nie aliasu, używam wiodącego ukośnika odwrotnego:
źródło
builtin
”.Ta wskazówka sprawi, że Twój CLI będzie wygodniejszy (przynajmniej dla mnie):
utwórz plik ~ / .inputrc z następującą zawartością:
Załaduj ponownie bash (np. Wpisując „exec bash”). Kiedy wpiszesz prefiks polecenia i naciśniesz strzałkę w górę, przejrzysz polecenia zaczynające się od prefiksu, na przykład, jeśli wpiszesz ssh, wyświetli poprzednie połączenia ze zdalnymi powłokami. Jeśli monit jest pusty, strzałka w górę przejrzy historię w normalny sposób.
źródło
exec bash
man readline
i zapamiętywanie jego domyślnych skrótówbind -f ~/.inputrc
aby ponownie załadować inputrc bez konieczności rozpoczynania nowego bashu i usuwania obecnego środowiska.Użyj
&&
zamiast;
wykonywania wielu poleceń jednocześnie. Zatrzymuje się, gdy wystąpi błąd, i nie wykonuje innych poleceń.Klasyczny przykład:
źródło
dosomething && echo "success" || echo "teh fail"
Podczas pisania pętli w linii poleceń w bash często poprzedzam ryzykowne polecenia poleceniem „echo”.
W ten sposób widzę „coś ryzykownego” w całości, zanim zdecyduję się go uruchomić. Pomaga, gdy twoje ryzykowne polecenie zawiera zmienne rozszerzenia i globusy. A „set -x” jest bardzo przydatne podczas pisania skryptów bash.
„set -x” włącza debugowanie. Zobacz http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html, aby uzyskać informacje na temat debugowania bash.
źródło
Wymaganie
Musisz przetestować maksymalną przepustowość między 2 serwerami.
Rozwiązanie
Na serwerze SERVER1 wykonaj:
Na SERVER2 wykonaj:
Zobaczysz dane wyjściowe, takie jak:
Interesującym czynnikiem jest tutaj 117 MB / s , który pokazuje rzeczywistą szerokość pasma transferu sieci.
Objaśnienie :
Gdy pakiet zacznie przepływać przez sieć, będziesz mógł zobaczyć statystyki przepustowości na SERVER2, co jest całkiem dobrym oszacowaniem rzeczywistej maksymalnej możliwej przepustowości między dwoma serwerami.
Kopiowanie przez UDP (w celu uniknięcia obciążenia TCP).
Kopiowanie z pamięci (/ dev / zero) na SERWERZE1 do pamięci (/ dev / null) na SERVER2, zapobiegając w ten sposób wąskiemu gardłu we / wy dysku.
źródło
Przeglądanie struktur katalogów kolorów jest łatwiejsze.
Edytować
źródło
Kilka małych wskazówek dotyczących przeglądania dziennika:
źródło
tail -f
niemu możesz oglądać wiele dzienników jednocześnie! Np .:tail -f log1.txt -f log2.txt
Dawno temu nauczyłem się sztuczki od znajomego , aby łatwo zmieniać rozszerzenie pliku:
Rozszerzenie powłoki rozszerzy to do:
Można to również wykorzystać do zmiany nazwy pliku na inne sposoby, na przykład poprzez dodanie czegoś do:
źródło
ls -l /bin/c
a następnie nacisnąć Alt-Shift- {a to dokończy tols -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
dla Ciebie.Użyj „tar xf”, aby wyodrębnić skompresowane archiwa. J dla bzip2 i z dla gzip nie są konieczne, ponieważ tar wykryje typ pliku twojego archiwum. Ani argument „-” przed argumentami. Zaoszczędzisz dużo czasu (ponad tysiąclecia ;-)).
Lepiej jeszcze użyj cofnij do wypakowania dowolnego archiwum za pomocą jednego polecenia bez zbędnych argumentów.
źródło
alias ut="tar xf"
- sprawia, że rozpakowywanie archiwów jest jeszcze łatwiejsze.Zainstaluj pakiet bash-complete. Zawiera szereg predefiniowanych reguł ukończenia powłoki. Włącz go, wpisując „source / etc / bash_completion”, jeśli dystrybucja nie zrobi tego za ciebie. Następnie, na przykład za każdym razem, gdy wypełnisz po kpdf, zobaczysz tylko listę katalogów i plików PDF. Jest tak sprytny, jak uzupełnianie zdalnych plików po scp ssh: // server / XXX (jeśli włączyłeś logowanie bez hasła).
źródło
Ciągle używam tych
ALT-. (ESC +. W niektórych terminalach) kopiuje ostatnio używany argument (bardzo przydatne)
CTRL-W usuwa słowo
CTRL-L, wyczyść terminal (jak wyczyść polecenie, ale szybciej)
ALT-B (ESC + B w niektórych terminalach) przesuwa słowo do tyłu
ALT-F (ESC + F w niektórych terminalach) przesuwa słowo do przodu
CTRL-E przeskocz do EOL
CTRL-A przeskocz do BOL
Wyszukiwanie CTRL-R w historii
źródło
W bash używam ! $ Dużo. Powtarza ostatni argument ostatniego polecenia:
Uruchomi on ls, a jeśli chcesz go edytować, nie musisz go ponownie wpisywać, po prostu użyj! $. Jest to bardzo przydatne w przypadku długich ścieżek / nazw plików. Również ! * Powtarza wszystkie argumenty poprzedniego polecenia. Nie używam tego tak często, ale wygląda na użyteczny.
Wiedziałem, że zostały wspomniane, ale używam vim, screen i cd - dużo.
Zapomniałem noclobber:
From man bash :
źródło
Alt-.
.Przełącz się z bash na zsh i zobacz, jak poprawia się Twoja wydajność:
Google powie Ci o wiele więcej korzyści.
źródło
Old school, przenoszenie drzewa katalogów z jednego miejsca do drugiego, zachowanie dowiązań symbolicznych, uprawnień i wszystkich innych dobrych rzeczy:
lub przez sieć
Nowa szkoła:
lub przez sieć
źródło
tar xvBpf - -C /destination
==(cd /destination; tar xvBpf -)
Trochę mniej pisania i łatwiejszy w użyciu przez ssh.rsync -avh
najlepiej na jednym komputerze -h
zapewnia, że twarde linki są przesyłane poprawnie bez przekształcania każdego linku w osobny plik, ale jeśli masz ogromną liczbę plików, może zużyć dużo pamięci.rsync -avzh . foo.com/destination
jest odpowiednikiem sieci i zwykle nie potrzebujesz,-e ssh
ponieważ rsync będzie wiedział, że używa ssh.rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Wymagania : Masz katalog zawierający dużą listę plików, które chcesz usunąć. rm -r zawiedzie!
przykład
Rozwiązanie :
Objaśnienie :
Edycja: Naprawienie wyjaśnienia po komentarzu @ephemient.
find dostarczy argumenty do rm przez maksymalną dozwoloną liczbę argumentów. Umożliwi to rm usuwanie plików partiami, co jest najszybszą znaną mi techniką bez korzystania z operacji -delete znajdowania się. Jest to równoważne z
które mogą okazać się przydatne, jeśli
find
nie są obsługiwane-exec ... +
.źródło
\;
z+
: wtedyfind
będą robić to, coxargs
robi domyślnie, czyli partia się argumenty, jak to tylko możliwe (bez uruchamiania na liście limitu argument). Lub po prostu użyj-delete
intead-exec rm
(GNU Findutils potrzebne dla obu)find ... -delete
, jeśli twoje znalezisko jest tak obdarzone.Używam tych dwóch wskazówek tak często, że pomyślałem, że dobrym pomysłem będzie podzielenie się:
Uruchomi ostatnie polecenie w pliku historii zaczynające się od „foo” (często używam go podczas kompilacji,
!gcc
).Drugi to skrót klawiaturowy (Ctrl + O zamiast Return), który wykona polecenie ORAZ wyświetli następne polecenie w pliku historii. Na przykład, kiedy kompiluję i testuję plik, zawsze wykonuję 3 lub 4 polecenia, make, cd do katalogu testu, uruchom test, cd do katalogu makefile. Użycie Ctrl + O znacznie ułatwia to zadanie :)
Mam nadzieję, że to pomoże!
źródło
Jak korzystać z subversion w Linuksie bez pomocy fantazyjnych interfejsów graficznych, które mogą być niedostępne.
To dziwnie powstrzymuje wielu programistów od korzystania z Linuksa.
źródło
Najczęściej pomijane polecenie starej szkoły:
find
Wczoraj naprawiłem poważny błąd uprawnień:
źródło
chmod 644 $(find . -type f)
,chmod 755 $(find . -type d)
-perm
możliwościfind
zlokalizowania plików, które mają określone uprawnienia.W przypadku powłok, takich jak
bash
iksh
, możesz sprawić, aby wiersz poleceń reagował na polecenia nawigacyjne, takie jak edytor tekstu:lub
pozwoli ci przeszukać swoją historię i poruszać się po linii poleceń w sposób, w jaki jesteś przyzwyczajony do robienia plików tekstowych (np. w trybie vi, naciśnięcie,
ESC
a następnie wpisanie/string
przeszuka poprzednie komendy pod kątem „łańcucha” - możesz użyćn
iN
przenieść między meczami)źródło
grep jest moim przyjacielem. Poważnie.
Lista
.rb
plików zawierających tekstclass foo
:Lista
.rb
plików, które nie zawierają tekstuclass foo
:Lista
.rb
plików, które nie zawierają foo ani baru (możesz użyć dowolnego wyrażenia regularnego z -e, ale musisz uciec od operatorów):źródło
Podstawienie powłoki odbywa się za pomocą
^
:źródło