Udostępnij funkcje i sztuczki wiersza poleceń dla systemu Unix / Linux. Staraj się utrzymywać to shell / distro agnostic, jeśli to możliwe. Zainteresowany widzeniem aliasów, liniałów, skrótów klawiaturowych, małych skryptów powłoki itp.
źródło
Udostępnij funkcje i sztuczki wiersza poleceń dla systemu Unix / Linux. Staraj się utrzymywać to shell / distro agnostic, jeśli to możliwe. Zainteresowany widzeniem aliasów, liniałów, skrótów klawiaturowych, małych skryptów powłoki itp.
Rozszerza to nieco !!
sztuczkę wspomnianą w tej odpowiedzi . W rzeczywistości istnieje wiele poleceń związanych z historią, o których często się zapomina (ludzie mają tendencję do dźgania Up100 razy zamiast szukania polecenia, o którym wiedzą, że je wpisali).
history
Komenda pokaże listę ostatnio uruchamianych poleceń z desygnatora zdarzeń w lewo!N
zastąpi polecenie związane z desygnatorem zdarzenia N
!-N
będzie zastąpić N
th ostatnią komendę; np. !-1
zastąpi ostatnie polecenie, !-2
drugie ostatnie itd.!!
jest skrótem !-1
, aby szybko zastąpić ostatnie polecenie!string
zastąpi ostatnie polecenie, które zaczyna się od string
!?string?
zastąpi najnowsze polecenie, które zawiera string
Oznaczenia słów można dodać do !
polecenia historii, aby zmodyfikować wyniki. Dwukropek oddziela oznaczenia zdarzenia i słowa, np !!:0
. Oznaczenie zdarzenia !!
można skrócić do samego !
oznaczenia słowa, więc !!:0
jest to równoważne z !:0
.
!:0
dostanie polecenie, które zostało wykonane!:1
dostanie pierwszy argument (i !:2
drugi itd.)!:2-3
dostanie drugi i trzeci argument!:^
to kolejny sposób na uzyskanie pierwszego argumentu. !:$
dostanie ostatni!:*
otrzyma wszystkie argumenty (ale nie polecenie)Modyfikatory można również dołączyć do !
polecenia historii, każdy poprzedzony dwukropkiem. Dowolną liczbę można układać (np !:t:r:p
.).
h
- Wyrównaj do podstawowej nazwy plikut
- Tylko podstawowa nazwa plikur
- Ustaw zgodnie z rozszerzeniem nazwy plikue
- Tylko rozszerzenie nazwy plikus/search/replacement
- Wymienić pierwsze wystąpienie search
zreplacement
gs/search/replacement
- zastąpić wszystkie wystąpienia search
zreplacement
!-#
. Używam!string
do uruchomienia ostatniego polecenia, które zaczyna się od łańcucha, ale generalnie najpierw kompletuję je tabulatorem (zsh), aby upewnić się, że działam poprawnie!N
uruchomi polecenie ...” jest zbyt wąskim opisem; faktycznie!N
zostanie zastąpione poleceniem ...; i tak dalej dla wszystkich opisów w odpowiedzi. Więcej poprawnych i otwierających o wiele bardziej użytecznych możliwości! Npsudo !!
. Wspomniane .bash
; w Emacs, aby przeglądać historię poleceń wejściowych i wartości (dla Mx lub innych odczytanych wartości), zamiast tego używa się Meta-R (Meta-R jest również używanyeshell
w Emacs). Więc często je psuję.bash - wstaw ostatni parametr poprzedniego wiersza
alt- . najbardziej użyteczna kombinacja klawiszy w historii, spróbuj i przekonaj się, z jakiegoś powodu nikt o niej nie wie.
naciśnij kilkakrotnie, aby wybrać starsze ostatnie parametry.
świetnie, gdy chcesz zrobić coś więcej z argumentem / plikiem, którego użyłeś przed chwilą.
źródło
alt
-.
przejdzie do poprzedniego polecenia i wyciągnie z niego ostatni argument. Więc jeśli chcesz ostatni argument z trzech poleceń temu, po prostu naciśnijalt
-.
trzy razy.yank-last-arg
polecenia readline, więc powinno działać z każdym programem powiązanym z readline, nie tylko BASH lub ZSH.Moim ulubionym jest
Prosty i bardzo przydatny.
Zajrzyj na tę stronę Commandlinefu.com .
Możesz również zapoznać się z tymi czterema artykułami Peterisa Kruminsa na jego blogu
źródło
ascii
program . Oprócz wydrukowania tabeli umożliwia ona zapytanie o jeden lub więcej pojedynczych znaków.Wykonaj ostatnie polecenie jako root:
źródło
Nie jestem pewien, czy liczy się to jako „sztuczka”, ale ludzie wydają się bardzo nieświadomi standardowych skrótów klawiszowych readline. Szczególnego zastosowania w muszlach:
źródło
Ctrl+L
odpowiada znakowi FormFeed ascii. Zazwyczaj przerysowuje ekran w aplikacjach tekstowych z oknem ekranowym (np. Vim, less, mc itp.). Fajnie, jeśli ekran został „zanieczyszczony” przez dane wyjściowe z innego programu.Ctrl+W
wycinanie jednego słowa do tyłu, przewijanieAlt+F
do przodu o jedno słowo, przewijanieAlt+B
do tyłu o jedno słowo w linii. LubięCtrl+Y
iShift+Insert
ponieważ możesz mieć dwie skopiowane linie. Jeden za pomocąCtrl+U
(wklej go za pomocąCtrl+Y
) i jednocześnie możesz skopiować inne słowo (wybierz linię) wklej za pomocą (Shift+Insert
).CTRL+ Rw BASH do wyszukiwania / aktywacji wcześniej wykonanych poleceń (zawartość ~ / .bash_history).
Jest to często bardzo pomocne. Uruchomienie tego aliasu będzie obsługiwać PWD przez HTTP (indeksowane) na porcie 8000:
A ponieważ cały czas biegam, piszę i piszę zbyt szybko, te aliasy są prawdopodobnie najczęściej używane (poważnie):
I prawdopodobnie moim najczęściej używanym fragmentem BASH jest prosty skrypt, który nazywam uploadem. Używam go do blitowania wszelkiego rodzaju treści do mojej Linode, i kopiuje wynikowy adres URL HTTP do mojego schowka (środkowe kliknięcie). Bardzo przydatne do wklejania rzeczy do ludzi w IRC:
Tylko para. Mogę pisać o wiele później, muszę wrócić do pracy!
źródło
alias mk=make
Szybsze pisanie i mniejsze prawdopodobieństwo popełnienia błędu. Lub skompiluj z edytora za pomocą skrótu ...alias m=make
, lub nawetm=make -j6
lub podobny - z wyjątkiem używam jużalias m=mutt
☺diff
wyjście dwóch poleceń bez ręcznego tworzenia pliku tymczasowego (bash):źródło
comm
ponieważ zajmuje tylko pliki, ale w wielu przypadkach jest to marnotrawstwo i-węzłów.Całkiem proste, ale wydaje się, że ludzie nie wiedzą, wraca do poprzedniego katalogu:
źródło
cd..
od DOS jest zakorzenione w mojej pamięci mięśni ...cd
(bez argumentów), który zabierze Cię do twojego katalogu domowego.Rozszerzenie klamry :
Pozwala zastąpić żmudne linie, takie jak:
z krótszą instancją
niektóre inne zastosowania
Rozbudowa arytmetyczna :
źródło
foo[123]
który się rozszerzyfoo1 foo2 foo3
, ale w tym przypadku muszą być nazwami plikówZazwyczaj jest to w moim skrypcie startowym (.bashrc, .profile, cokolwiek)
shopt
Boże, sprawdź komentarze:Alias, który zapisuje naciśnięcia klawiszy:
mkdir
icd
do niego:I na koniec zrezygnowałem z zapamiętywania składni tar, więc:
źródło
mkcd
tej, którą nazywam idmd
. Jednak użycie „$ @” jako argumentu dla cd nie ma żadnego sensu, ponieważ nie można cd do więcej niż jednego katalogu. „$ @” będzie działać dla mkdir, ale wtedy inaczejmd () { mkdir -p "$1"; cd "$1" }
Dwie funkcje bash, które oszczędzają mi wielu naciśnięć klawiszy.
Wykonuj automatycznie ls po każdym udanym cd:
Idź w górę o poziomy:
źródło
builtin foo
obejście, mając zdefiniowaną funkcjęcd
; Korzystałemchdir
z moich funkcji. Przydatnycd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Ponieważ zwykle jestem w połowie drogi do wiersza poleceń, zanim chcę wyszukiwać (CTRL-R w bash), mam następujące .bashrc
Oznacza to, że jeśli wpisuję cd, a następnie naciskam góra / dół, widzę wszystkie opcje, które mam cd. Zasadniczo używam tego do często używanych katalogów. Jak „cd w” i kończę przeglądanie wszystkich obszarów roboczych, z których często korzystam.
źródło
Jedną z rzeczy, która oszczędza mi dużo czasu, są polecenia pushd / popd. Ci faceci pozwalają ci stworzyć stos katalogów i znacznie ograniczyć pisanie:
źródło
u
io
oznaczają tutaj?setopt autopushd
i wszystkie zmiany katalogów będą się wypychać automatyczniescreen
Polecenia . Zasadniczo zapisuje sesję wiersza poleceń na wypadek powrotu. To rodzaj menedżera terminali, jak menedżer okien. W ten sposób w jednej sesji terminala możesz mieć wiele wirtualnych terminali. To jest bardzo fajne.Jeśli się używa
screen
, ta funkcja powłoki (włóż ją.bashrc
) jest niezwykle przydatna:po wpisaniu
scr
sprawdzi, czy twoja sesja główna istnieje i dołączy do niej. W przeciwnym razie go utworzy.źródło
Jeśli potrzebujesz edytować szczególnie długą linię poleceń w bash
otworzy go w edytorze ($ EDITOR).
W zsh możesz uzyskać takie samo zachowanie, dodając to do .zshrc:
źródło
Jeśli jesteś szybkim maszynistą, przydadzą się:
To makro pomaga obliczyć sumy kolumny danych wyjściowych: rozmiary plików, bajty, pakiety, wszystko co musisz zrobić, to określić kolumnę, którą chcesz dodać:
Używasz go w ten sposób, na przykład, bez argumentów, dodaje sumę pierwszej kolumny:
Jeśli podasz argument, suma ta kolumna, na przykład, daje całkowitą liczbę bajtów używanych przez wszystkie pliki C # w / tmp:
Czasami twoja konsola się popsuła, ponieważ przypadkowo obejrzałeś plik binarny (na przykład cat / bin / ls), możesz przywrócić terminal za pomocą tej funkcji powłoki:
Lubię, aby moje znaki używały znaków do rozróżniania klasy plików, a także do ukrywania plików kopii zapasowych generowanych przez mój edytor (pliki kopii kończą się znakiem ~):
źródło
s/fast/sloppy/
reset
tam, gdzie używaszrestaura
.Jeden z moich ulubionych, gdy zapomnę
s
:źródło
bindkey -s '\e[12~' "sudo !!\n"
powiązanie (w tym przypadku) F2, aby uruchomić to polecenie. Mam to powiązanie, więc kiedy coś uruchomię i zobaczę komunikat o błędzie „zapomniałeś sudo”, głupcze ”, mogę po prostu dźgnąć F2 z irytacjąJeśli polecenie pobiera standardowe wejście, możesz je odczytać z pliku za pomocą
<filename
. Może pojawić się w dowolnym miejscu polecenia, więc te linie są równoważne:Jest to szczególnie przydatne w przypadku grep, ponieważ pozwala umieścić wyrażenie na końcu wiersza, dzięki czemu można szybko zmodyfikować polecenie grep, naciskając go Up, bez potrzeby przewijania w lewo, aby ominąć nazwę pliku:
źródło
<input foo | bar | baz >output
, nie działa, jeśli spróbujesz wmieszać się w niektóre prymitywy zapętlające powłoki, takie jakwhile
lubfor
w środku. Więc poddałem się i po prostu położyłem to na końcu zgodnie z konwencją.Możesz użyć,
CDPATH
aby skonfigurować katalog równoważny zPATH
; jeśli spróbujeszcd foo
i nie ma gofoo
w bieżącym katalogu, powłoka sprawdzi każdy katalog, który goCDPATH
szukafoo
, i przełączy się do pierwszego, który znajdzie:źródło
Bo kiedy nie wiesz, gdzie coś mieszka, i ciebie też to nie obchodzi.
źródło
which
automatycznie, więcvi =scriptname
$(scriptname)
Znak handlowe i . Umieszcza twoje polecenie w tle, dzięki czemu możesz kontynuować pisanie.
Pracując dalej, a po chwili zobaczysz:
I twój proces jest zakończony! Idealne do rzeczy, w których nie trzeba czekać na zakończenie.
źródło
&!
do zadania i usuń go z powłoki!bash
.nohup
to.Uzupełnianie tabulatorów . Jak źle by to było, gdybyś musiał wpisać wszystkie postacie z każdej ścieżki?
źródło
rm -fr /
. Więc tak, uzupełnianie Tab jest bardzo istotne ...ls /usr/lib/game-d*/rott*
rm -rf /
wyłączone w większości systemów Linux?Umount ostatnio zamontowane urządzenie:
!mo
rozwija się do ostatniego polecenia, które rozpoczęło sięmo
(przynajmniej w bash). Czasami robi się tomv
w środku, więcu!m
nie będzie tak często działać.źródło
Mam to w moim .bashrc
A kiedy mam kod źródłowy HTML w schowku i chcę znaleźć wszystkie linki, których używam
I mam wszystkie adresy URL w schowku
Mam również tę funkcję
który rozmiar wyświetlacza (czytelny dla człowieka) i nazwa pliku.
ten alias dotyczy temeratury programu
za pomocą tej funkcji mogę obliczyć iloczyn lub sumę argumentów.
Jest to przydatna funkcja, która dzieli standardowe wejście oddzielone wyrażeniem regularnym, a następnie łączy wynik.
funkcja silnia
Ta funkcja wyświetla tekst wiki przez DNS
Mam również trzy funkcje kolorów
Ta funkcja sprawdza poprawność pliku md5.
pokaże to komunikat o błędzie dla danego kodu
Możesz wydrukować wszystkie wiadomości za pomocą
źródło
Kolejna przydatna sztuczka ZSH:
Traktuj wyjście polecenia jako plik:
Spowoduje to otwarcie starej wersji pliku śledzonego przez Mercurial w emacsie do wyświetlania z wyróżnieniem składni. Bez tego, że będę musiał poeksperymentować z
hg revert
,hg archive
lub bezpośrednio wysłaćhg cat
wyjście do pliku tymczasowego.Oczywiście działa to z każdym programem, który otwiera pliki i każdym programem, który drukuje na standardowe wyjście.
źródło
Cechą specyficzną jest ZSH aliasy sufiks, określone przez podanie
alias
na-s
flagę:Jeśli dane rozszerzenie ma alias sufiksu, możesz wykonać plik z tym rozszerzeniem bezpośrednio, a ZSH uruchomi dany program i przekaże nazwę pliku jako argument. Więc jeśli obowiązuje powyższy alias, te linie są równoważne:
źródło
Jedną z moich ulubionych funkcji ZSH są katalogi. Możesz wyeksportować zmienną o podanej nazwie, której wartość wskazuje określoną ścieżkę:
Teraz możesz użyć
~foo
w poleceniu odniesienia do/usr/bin
:źródło
Zobacz to pytanie .
Kiedy biegniesz
ps ax | grep string
:ostatnia linia zawierająca
grep
jest nieco denerwującaMożesz się tego pozbyć, uruchamiając
ps ax | grep '[s]tring'
:aktualizacja : lub po prostu uruchom
pgrep string
źródło
'[o]penbox'
). Nawiasy będą działać jak glob, więc jeśli w twoim katalogu znajduje się openbox (powiedz, że jesteś/usr/bin
), bash po prostu użyje openbox, co zapobiegnie sztuczce grep.Komenda „nic nie rób”
:
jak wRozszerzenie nawiasu klamrowego w połączeniu z pętlą for:
!
operatorzy i operatorzy zwarć||
oraz&&
używanie podpowłok zamiast pop / push (przydaje się w skryptach)
niby-of co-jest komenda
type
również bardzo ładne: tutaj-stringi
i moje ulubione: przekierowanie na listę poleceń
źródło
Uwielbiam wrzucać jak najwięcej rzeczy do mojego PS1. Kilka przydatnych rzeczy do zapamiętania:
\e[s
i odpowiednio\e[u
zapisz i cofnij pozycję kursora. Używam tego, aby u góry ekranu utworzyć „pasek informacyjny” o długości kilku linii, który może pomieścić więcej rzeczy. Przykład:Połącz z
alias clear='echo -e "\e[2J\n"'
. Wypróbuj to!Ponadto,
PROMPT_COMMAND
zmienna określa polecenie do wykonania przed PS1 za każdym razem.Kolejnym jest
bg
polecenie. Jeśli zapomnisz umieścić&
na końcu polecenia, po prostu naciśnij ^Zi wpiszbg
, a zostanie ono uruchomione w tle.źródło
bg
, kiedy mam program działający w tle i przypadkowo naciśnijfg
Nie wiem, jak go odepchnąć: DPS1
więc umieszczam większość rzeczy, które chcę w dolnej linii ekranu ...