🌍 Čeština ∙ Deutsch ∙ Ελληνικά ∙ English ∙ Español ∙ Français ∙ Indonesia ∙ Italiano ∙ 日本語 ∙ 한국어 ∙ polski ∙ Português ∙ Română ∙ Русский ∙ Slovenščina ∙ Українська ∙ 简体中文 ∙ 繁體中文
Uwaga: Poszukuję nowego (i potencjalnie odpłatnego) głównego autora, który pomoże rozszerzyć ten materiał do formy bardziej wszechstronnego Przewodnika. Chociaż jest on bardzo popularny, mógłby być zarówno obszerniejszy jak i bardziej pomocny. Jeśli lubisz pisać, jesteś niemalże ekspertem w tej dziedzinie i chcesz pomóc, daj mi znać na josh (0x40) holloway.com. –jlevy, Holloway
Biegła obsługa wiersza poleceń często jest umiejętnością zaniedbywaną lub uważaną za "wiedzę tajemną", ale poprawiającą elastyczność i produktywność inżynierów w sposób oczywisty jak i bardziej subtelny. Oto zbiór informacji i wskazówek na temat użycia wiersza poleceń, które uznaliśmy za przydatne w pracy z systemami Linux. Niektóre wskazówki dotyczą podstaw, inne zaś są całkiem specyficzne dla danego zagadnienia, wyszukane lub niezbyt powszechne. Ta strona nie jest obszerna, lecz znając i pamiętając sposób użycia wszystkiego, co zostało tutaj opisane - wiesz już dużo.
Niniejszy tekst jest efektem pracy zbiorowej wielu autorów i tłumaczy. Niektóre z zagadnień początkowo pojawiły się na Quora, ale od tamtego czasu zostały przeniesione na GitHub, gdzie ludzie zdolniejsi od autora oryginalnego posta dokonali licznych poprawek. Zadaj pytanie, jeśli jest ono związane z użyciem wiersza poleceń. Dodaj coś od siebie, jeśli widzisz błąd lub uważasz, że coś można poprawić!
Zakres:
Uwagi:
apt
, yum
, dnf
, pacman
, pip
lub brew
(odpowiednio), aby zainstalować nowe programy.Naucz się podstaw Basha. Właściwie, wpisz man bash
i przynajmniej przejrzyj całość - jest całkiem łatwa w zrozumieniu i niezbyt długa. Inne powłoki mogą być fajne, ale Bash jest potężny i obecny praktycznie wszędzie (o ile nauczenie się wyłącznie powłoki zsh, fish, itp. na swoim własnym laptopie jest kuszące, będzie Cię ograniczać w wielu sytuacjach, takich jak użycie istniejących serwerów).
Naucz się dobrze co najmniej jednego edytora tekstowego. Edytor nano
jest jednym z najłatwiejszych do opanowania w podstawowych operacjach (otwieranie, edycja, zapisywanie, przeszukiwanie). Jednakże zaawansowanym użytkownikom terminala nic nie zastąpi Vima (vi
) - trudnego do nauczenia, ale zacnego, szybkiego i w pełni wyposażonego edytora. Wielu używa też klasycznego Emacsa, zwłaszcza do większych zadań. (Rzecz jasna żaden współczesny twórca oprogramowania, pracujący nad dużym projektem, raczej nie będzie używał wyłącznie edytora w trybie tekstowym i powinien znać również nowoczesne IDE i narzędzia dla trybu graficznego.)
Znajdywanie dokumentacji:
man
(dla dociekliwych man man
podaję numerację sekcji, np. 1 jest dla "zwykłych" poleceń, 5 jest dla plików/składni, a 8 dla administracji systemem). Odszukuj odpowiednie strony podręczników używając apropos
.help
i help -d
. Możesz się zorientować, czy dana komenda jest plikiem wykonywalnym, poleceniem wbudowanym, czy aliasem przy użyciu type komenda
.curl cheat.sh/polecenie
pokaże krótką "ściągawkę" z najczęstszymi przykładami użycia polecenia.Przyswój wiedzę o przekierowywaniu strumieni wyjścia i wejścia za pomocą operatorów >
i <
oraz o potokach tworzonych przy użyciu |
. Wiedz, że >
nadpisuje plik wyjściowy, a >>
dodaje treść. Dowiedz się o strumieniach: standardowego wyjścia (stdout) i standardowego błędu (stderr).
Naucz się rozwijania nazw plików przy użyciu wzorców globalnych, zawierających *
(może też ?
i [
...]
) oraz zastosowania i różnic między podwójnym "
i pojedynczym '
znakiem cudzysłowu. (Zobacz także poniżej - o rozwijaniu nazw zmiennych.)
Zapoznaj się ze sposobami zarządzania zadaniami Basha: &
, ctrl-z, ctrl-c, jobs
, fg
, bg
, kill
, itp.
Poznaj ssh
i podstawy uwierzytelniania bez haseł przy użyciu ssh-agent
, ssh-add
, itp.
Podstawy zarządzania plikami: ls
i ls -l
(w szczególności dowiedz się co reprezentuje każda kolumna wyświetlana z ls -l
), less
, head
, tail
oraz tail -f
(a nawet lepiej, less +F
), ln
i ln -s
(poznaj różnice i przewagi "dowiązania twardego" nad "dowiązaniem miękkim/symbolicznym"), chown
, chmod
, du
(szybkie podsumowanie użycia przestrzeni dyskowej: du -hs *
). Do zarządzania systemami plików: df
, mount
, fdisk
, mkfs
, lsblk
. Dowiedz się, czym jest "i-węzeł" (ls -i
lub df -i
).
Podstawy zarządzania połączeniami sieciowymi: ip
lub ifconfig
, dig
, traceroute
, route
.
Naucz się i korzystaj z systemu zarządzania kontrolą wersji, takiego jak git
.
Dobrze poznaj wyrażenia regularne oraz różne przełączniki dla poleceń grep
/egrep
. Warto znać opcje -i
, -o
, -v
, -A
, -B
, and -C
.
Naucz się używać apt-get
, yum
, dnf
lub pacman
(w zależności od dystrybucji) do odnajdywania i instalacji pakietów oprogramowania. Upewnij się także, że masz pip
, aby móc instalować narzędzia wiersza poleceń oparte o język Python (kilka omówionych poniżej najłatwiej jest zainstalować używając pip
).
W Bashu używaj klawisza Tab do uzupełniania listy argumentów lub wyświetlania listy dostępnych poleceń, a kombinacji ctrl-r do przeszukiwania historii wydanych poleceń (po wciśnięciu tej kombinacji wpisz kolejne litery polecenia do odnalezienia, powtórz ctrl-r, aby przełączać się pomiędzy kolejnymi pasującymi wpisami, wciśnij Enter, żeby wykonać znalezione polecenie lub strzałkę w prawo, by móc zmodyfikować bieżącą linię z poleceniem).
W Bashu, używaj kombinacji ctrl-w do usunięcia ostatniego wyrazu oraz ctrl-u do usunięcia zawartości od bieżącej pozycji kursora do początku linii. Używaj kombinacji alt-b i alt-f, żeby przeskakiwać "słowo po słowie", ctrl-a do umieszczenia kursora na początku linii, ctrl-e do umieszczania kursora na końcu linii, ctrl-k, żeby wymazać zawartość od bieżącej pozycji kursora do końca linii, ctrl-l do wyczyszczenia zawartości całego ekranu. Sprawdź man readline
, by poznać wszystkie kombinacje w Bashu. Jest ich bardzo dużo. Dla przykładu alt-. skacze po wszystkich argumentach poprzednich poleceń, a alt-* rozwija wzorzec globalny.
Alternatywnie, jeśli kochasz skróty klawiaturowe w stylu vi, użyj set -o vi
(i set -o emacs
, aby powrócić do poprzednich ustawień).
Do edycji długich poleceń, po ustawieniu edytora (na przykład export EDITOR=vim
), ctrl-x ctrl-e otworzy bieżące polecenie w edytorze z możliwością edycji wieloliniowej. W trybie vi to samo zrobi escape-v.
Żeby zobaczyć ostatnio wydane polecenia, użyj history
. Następnie !n
(gdzie n
jest numerem polecenia), żeby wykonać polecenie ponownie. Możesz także użyć wielu skrótów, z których najbardziej przydatne są prawdopodobnie !$
dla ostatniego argumentu i !!
dla ostatniego polecenia (sprawdź "HISTORY EXPANSION" w podręczniku). Jednakże, często skróty te zastępowane są przy użyciu ctrl-r i alt-..
Przejdź do swojego katalogu domowego za pomocą cd
. Używaj prefiksu ~
, aby dostać się do zawartości plików w ścieżkach podanych względem twojego katalogu domowego (np. ~/.bashrc
). W skryptach powłoki sh
odwołuj się do katalogu domowego przy użyciu $HOME
.
Cofnij się do poprzedniego katalogu roboczego przy użyciu: cd -
.
Jeśli zmienisz zdanie będąc już w połowie pisanego polecenia, użyj kombinacji alt-#, żeby dodać znak #
na początku i zamienić tę linię w komentarz (lub użyj ctrl-a, #, enter). Możesz później wrócić do tego polecenia za pośrednictwem historii.
Używaj xargs
(lub parallel
). To potężne narzędzie. Zwróć uwagę, że możesz kontrolować zarówno liczbę elementów obsłużonych w jednej linii (-L
) jak i stopień zrównoleglenia (-P
). Jeśli nie masz pewności co do poprawności wyników operacji, najpierw użyj xargs echo
. Ponadto, -I{}
jest przydatne. Przykłady:
find . -name '*.py' | xargs grep jakas_funkcja
cat serwery | xargs -I{} ssh root@{} hostname
pstree -p
to pomocna prezentacja działających procesów - w postaci drzewa.
Używaj pgrep
i pkill
by znaleźć proces lub wysłać do niego sygnał, odwołując się po nazwie (-f
jest pomocne).
Poznaj różne sygnały, które można wysyłać do procesów. Przykładowo, aby wstrzymać proces, użyj kill -STOP [pid]
. Zobacz pełną listę w man 7 signal
Używaj nohup
lub disown
jeśli chcesz, żeby proces uruchomiony w tle działał w nieskończoność.
Sprawdź, które procesy nasłuchują połączeń, przy pomocy netstat -lntp
lub ss -plat
(dla TCP; dodaj -u
dla UDP) lub lsof -iTCP -sTCP:LISTEN -P -n
(które działa również w macOS).
Zobacz także lsof
i fuser
dla otwartych gniazd i plików.
Zobacz uptime
lub w
, aby dowiedzieć się jak długo system jest uruchomiony.
Używaj alias
do tworzenia skrótów dla często używanych poleceń. Na przykład, alias ll='ls -latr'
utworzy nowy skrót ll
.
Zachowuj często używane skróty, ustawienia powłoki oraz funkcje w ~/.bashrc
, a także upewnij się, że powłoka logowania odczytuje je przy starcie. To sprawi, że wszystkie Twoje ustawienia będą dostępne we wszystkich Twoich sesjach powłoki.
Umieść ustawienia zmiennych środowiskowych oraz polecenia, które powinny być uruchomione przy logowaniu w ~/.bash_profile
. Osobna konfiguracja będzie wymagana dla powłok uruchamianych ze środowiska graficznego i zadań polecenia cron
.
Synchronizuj swoje pliki konfiguracyjne (np. .bashrc
i .bash_profile
) na różnych komputerach - używając Git.
Wiedz, że zmienne i nazwy plików zwierające "znaki białe" należy traktować z dozą ostrożności. Umieszczaj zmienne Basha w cudzysłowach, np. "$FOO"
. Kładź nacisk na opcje -0
lub -print0
pozwalające oddzielać nazwy plików "znakiem pustym", np. locate -0 wzorzec | xargs -0 ls -al
lub find / -print0 -type d | xargs -0 ls -al
. W celu iteracji wewnątrz pętli "for" po nazwach plików zawierających "znaki białe", ustaw zmienną IFS tak, aby zawierała tylko "znak nowej linii" - przy pomocy IFS=$'\n'
.
W skryptach Basha używaj set -x
(lub wariantu set -v
, który przechwytuje strumień wejścia w formie "surowej", włącznie z nierozwiniętymi nazwami zmiennych i komentarzami) do debugowania strumienia wyjścia. Używaj trybów ścisłych, chyba że masz dobry powód by tego nie robić: użycie set -e
przerywa wykonanie w przypadku wystąpienia błędów (niezerowych kodów zakończenia). Użycie set -u
wykrywa próby skorzystania z niezainicjowanych zmiennych. Rozważ także użycie set -o pipefail
, które przerywa wykonanie w przypadku wystąpienia błędów w potokach (aczkolwiek poczytaj o tym więcej, jako że jest to nieco delikatny temat). W przypadku bardziej zaangażowanych skryptów, używaj także pułapek trap
na sygnały EXIT lub ERR. Przydatnym nawykiem jest rozpoczynanie skryptów jak poniżej, co pozwala wykryć najczęstsze błędy i przerwać wykonanie wyświetlając komunikat:
set -euo pipefail
trap "echo 'wystąpił błąd: Skrypt przestał działać poprawnie: zobacz polecenie powyżej'" ERR
# wykonaj coś w bieżącym katalogu
(cd /jakis/inny/katalog && inne-polecenie)
# kontynuuj w oryginalnej lokalizacji
Zwróć uwagę, że w Bashu jest wiele różnych rodzajów rozwijania nazw zmiennych. Sprawdzenie, czy zmienna istnieje: ${nazwa_zmiennej:?komunikat błędu}
. Przykładowo, jeśli skrypt Basha wymaga podania jednego argumentu, po prostu napisz plik_wejsciowy=${1:?Sposób użycia: $0 plik_wejsciowy}
. Użycie wartości domyślnej, gdy zmienna jest pusta: ${nazwa_zmiennej:-wartosc_domyslna}
. Aby mieć dodatkowy (opcjonalny) parametr do poprzedniego przykładu, możesz użyć czegoś takiego plik_wyjsciowy=${2:-logfile}
. Jeśli argument $2
zostanie pominięty i tym samym będzie on pusty, wartość zmiennej plik_wyjsciowy
zostanie ustawiona na logfile
. Rozwinięcie arytmetyczne: i=$(( (i + 1) % 5 ))
. Sekwencje: {1..10}
. Skracanie łańcuchów znakowych: ${nazwa_zmiennej%przyrostek}
oraz ${nazwa_zmiennej#przedrostek}
. Na przykład, jeśli plik=foo.pdf
, wtedy echo ${plik%.pdf}.txt
wyświetli foo.txt
.
Rozwijanie nawiasów klamrowych {
...}
pozwala ograniczyć konieczność przepisywania powtarzalnego tekstu i zautomatyzować kombinacje elementów. Jest to pomocne w przypadkach, takich jak mv foo.{txt,pdf} jakis-katalog
(które przeniesie oba pliki), cp jakisplik{,.bak}
(które zostanie rozwinięte do cp jakisplik jakisplik.bak
) lub mkdir -p test-{a,b,c}/subtest-{1,2,3}
(które rozwinie wszystkie możliwe kombinacje i utworzy strukturę katalogów). Rozwinięcie nawiasów klamrowych ma pierwszeństwo przed jakimikolwiek innymi rozwinięciami.
Kolejność wykonywania rozwinięć jest następująca: rozwijanie nawiasów klamrowych; rozwijanie znaku tylda, rozwijanie parametrów i nazw zmiennych, rozwinięcia arytmetyczne oraz podstawianie poleceń (wykonywane "od lewej do prawej"); dzielenie wyrazów; rozwijanie nazw plików. (Przykładowo: zakresu {1..20}
nie można wyrazić za pomocą zmiennych {$a..$b}
. Zamiast tego użyj seq
lub pętli for
, np. seq $a $b
lub for((i=a; i<=b; i++)); do ... ; done
.)
Strumień wyjścia z polecenia może zostać potraktowany jak plik przy użyciu <(jakies polecenie)
(mechanizm znany jako podstawienie procesu). Na przykład, porównanie lokalnego pliku /etc/hosts
z plikiem na maszynie zdalnej:
diff /etc/hosts <(ssh jakisserwer cat /etc/hosts)
{
# Tutaj jest Twój kod
}
cat <<EOF
wejście
w kilku liniach
EOF
W Bashu, jednoczesne przekierowanie strumieni standardowego wyjścia i standardowego błędu można uzyskać za pomocą: jakies-polecenie >plik_logu 2>&1
lub jakies-polecenie &>plik_logu
. Często, aby upewnić się, że polecenie nie zostawi otwartego uchwytu do pliku strumienia standardowego wejścia, wiążącego go z obecnie używanym terminalem, jako dobrą praktykę stosuje się dodanie do polecenia </dev/null
.
Używaj man ascii
, aby uzyskać dobrą tabelę kodów ASCII, zawierającą wartości szesnastkowe i dziesiętne. Do uzyskania ogólnych informacji o kodowaniu znaków, pomocne są polecenia man unicode
, man utf-8
i man latin1
.
Używaj polecenia screen
lub tmux
do zwielokrotnienia ekranu, szczególnie przydatnego w sesjach ssh do maszyn zdalnych, aby odłączać się i ponownie podłączać do sesji. byobu
rozszerza możliwości screena lub tmuxa dostarczając więcej informacji i ułatwiając zarządzanie. Minimalistyczną alternatywą jedynie do celów utrzymania ciągłości sesji jest dtach
.
W używaniu ssh, wiedza na temat tunelowania portów z użyciem -L
lub -D
(i czasami -R
) jest przydatna, np. do przeglądania stron w sieci z maszyny zdalnej.
Wprowadzenie kilku usprawnień do konfiguracji Twojego ssh może być przydatne; na przykład, poniższy ~/.ssh/config
zawiera ustawienia pozwalające uniknąć zrywania połączeń w pewnych środowiskach sieciowych, używa kompresji (co może być pomocne w użyciu scp na łączach o niskiej przepustowości), zwielokrotnia kanały dostępowe do tego samego serwera przy użyciu lokalnego pliku kontrolnego:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
Kilka innych opcji, istotnych dla ssh, jest związanych z bezpieczeństwem i powinno być stosowanych z rozwagą, np. w odniesieniu do konkretnej podsieci lub serwera lub w zaufanych sieciach: StrictHostKeyChecking=no
, ForwardAgent=yes
Uznaj mosh
za alternatywę dla ssh używającą UDP, unikającą przerywania połączeń i zwiększającą wygodę (wymaga konfiguracji po stronie serwera).
Aby zobaczyć uprawnienia do pliku w postaci ósemkowej, co jest przydatne w konfiguracji systemu, ale niedostępne w ls
i łatwe do rozwalenia, użyj czegoś takiego
stat -c '%A %a %n' /etc/timezone
Aby móc interaktywnie wybierać wartości z wyjścia innego polecenia, używaj percol
lub fzf
.
Do interaktywnej pracy z plikami, bazującej na wyjściu z innego polecenia (takiego jak git
), używaj fpp
(PathPicker).
Jako prostego serwera stron, serwującego wszystkie pliki z bieżącego katalogu (i podkatalogów), dostępnego dla każdego w Twojej sieci, użyj:
python -m SimpleHTTPServer 7777
(dla użycia portu 7777 w wersji Python 2) oraz python -m http.server 7777
(dla użycia portu 7777 w wersji Python 3).
Żeby wykonać polecenie jako inny użytkownik, używaj sudo
. Jako domyślne konto docelowe używane jest konto root; użyj -u
, aby określić konto innego użytkownika. Użyj -i
, żeby zalogować się jako docelowy użytkownik (zostaniesz poproszony o podanie Twojego hasła).
Aby w bieżącej powłoce przełączyć się na konto innego użytkownika, używaj su uzytkownik
lub su - uzytkownik
. To drugie z "-" zapewnia takie ustawienia środowiska, jak zaraz po zalogowaniu docelowego użytkownika. Pominięcie nazwy użytkownika skutkuje przełączeniem się na konto root. Zostaniesz poproszony o podanie hasła do konta użytkownika, na którego się przełączasz.
Wiedz o ograniczeniu do 128K znaków dla długości pojedynczego polecenia. Błąd mówiący "Argument list too long" występuje często, gdy wzorzec globalny dla nazw pasuje do dużej liczby plików. (Gdy tak się zdarzy, zamienniki takie jak find
i xargs
mogą pomóc.)
Jako podstawowego kalkulatora (i oczywiście, żeby ogólnie móc korzystać z Pythona), używaj interpretera python
. Przykładowo:
>>> 2+3
5
Aby zlokalizować plik po nazwie w bieżącym katalogu, find . -iname '*jakasnazwa*'
(lub podobnie). Aby zlokalizować znajdujący się gdziekolwiek plik po nazwie, użyj locate jakasnazwa
(ale miej na uwadze, że updatedb
mógł jeszcze nie zindeksować plików utworzonych niedawno).
Do przeszukiwania zawartości plików z kodem źródłowym lub danymi, istnieje kilka opcji bardziej zaawansowanych lub szybszych niż grep -r
, wliczając w to (z grubsza od najstarszego do najnowszego) ack
, ag
("srebrny szukacz") oraz rg
(ripgrep).
Żeby skonwertować kod HTML do postaci tekstowej: lynx -dump -stdin
Do konwersji Markdown, HTML i różnych innych formatów dokumentów, wypróbuj pandoc
. Na przykład, aby skonwertować dokument Markdown do formatu Word: pandoc README.md --from markdown --to docx -o tymczasowy.docx
Jeśli musisz zająć się danymi w formacie XML, xmlstarlet
- jest wiekowy, ale przydatny.
Do danych w formacie JSON używaj jq
. Do pracy interaktywnej sprawdź także jid
oraz jiq
.
Do danych w formacie YAML używaj shyaml
.
Do pracy z plikami w formacie Excel lub CSV, csvkit dostarcza in2csv
, csvcut
, csvjoin
, csvgrep
, itp.
Do obsługi Amazon S3, s3cmd
jest wygodny, a s4cmd
jest szybszy. aws
i ulepszony saws
od Amazona są kluczowe dla innych zadań związanych z usługami AWS.
Poznaj sort
i uniq
, włącznie z opcjami -u
i -d
dla uniq -- sprawdź jednolinijkowce poniżej. Sprawdź także comm
.
Poznaj cut
, paste
i join
do manipulacji zawartością plików tekstowych. Wiele osób używa cut
, ale zapominają o join
.
Poznaj wc
do liczenia znaków nowej linii (-l
), wszystkich znaków (-m
), słów (-w
) i bajtów (-c
).
Poznaj tee
do równoczesnego kopiowania zawartości z stdin do pliku i stdout, np. ls -al | tee file.txt
.
Do bardziej złożonych operacji obliczeniowych, uwzględniających grupowanie, odwracanie kolejności pól i obliczenia statystyczne, rozważ użycie datamash
.
Wiedz, że ustawienia regionalne mają subtelny wpływ na wiele narzędzi wiersza poleceń, wliczając w to kolejność sortowania (porównywanie) i wydajność. Większość systemów Linux przy instalacji ustawia LANG
lub inne zmienne dla ustawień regionalnych na lokalną wartość, taką jak np. US English. Miej świadomość tego, że kolejność sortowania zmieni się, jeśli zmienisz ustawienia regionalne. I wiedz, że reguły i18n mogą spowodować, że sort lub inne polecenia będą działać wielokrotnie wolniej. W niektórych przypadkach (takich, jak ustawianie zmiennych lub stwierdzanie unikatowości opisane poniżej) można bezpiecznie w całości zignorować powolne reguły i18n i używać tradycyjnego, opartego na wartości bajtowej porządku sortowania, przy użyciu export LC_ALL=C
.
Możesz zmodyfikować środowisko danego polecenia, poprzedzając jego wywołanie ustawieniem zmiennej środowiskowej, np. TZ=Pacific/Fiji date
.
Poznaj podstawy awk
i sed
do prostej obróbki danych. Zobacz przykłady w sekcji Jednolinijkowce.
Aby zastąpić "w miejscu" wszystkie wystąpienia danego łańcucha znaków, w jednym lub wielu plikach na raz:
perl -pi.bak -e 's/stary-łańcuch/nowy-łańcuch/g' moje-pliki-*.txt
repren
. (W niektórych przypadkach, polecenie rename
również umożliwi zmianę nazw wielu plików, ale ostrożnie, gdyż jego funkcjonalność różni się w zależności od dystrybucji Linuksa.) # Pełna zmiana nazw plików, katalogów i zawartości foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Odzyskiwanie plików z kopii bezpieczeństwa cokolwiek.bak -> cokolwiek:
repren --renames --from '(.*)\.bak' --to '\1' *.bak
# Tak jak wyżej, przy użyciu rename, jeśli jest dostępne:
rename 's/\.bak$//' *.bak
rsync
jest naprawdę szybkim i niezwykle wszechstronnym narzędziem do kopiowania plików. Znany jest z synchronizacji zawartości między maszynami, ale jest równie użyteczny lokalnie. Jeśli pozwalają na to ustawienia bezpieczeństwa, użycie rsync
zamiast scp
umożliwia wznowienie transferu bez cofania się do początku. Jest on także wśród najszybszych sposobów na usuwanie dużych liczb plików:mkdir pusty && rsync -r --delete pusty/ jakis-katalog && rmdir jakis-katalog
Do śledzenia postępu przetwarzania plików używaj pv
, pycp
, pmonitor
, progress
, rsync --progress
lub w kopiowaniu na poziomie blokowym - dd status=progress
.
Używaj shuf
do "przetasowania" lub wyboru losowych linii z pliku.
Poznaj opcje polecenia sort
. Do pracy z liczbami używaj -n
lub -h
, żeby obsłużyć liczby w formacie czytelnym dla człowieka (np. wyjście z du -h
). Dowiedz się, jak działają "klucze" (-t
i -k
). Zwróć szczególną uwagę na to, że musisz napisać -k1,1
, żeby posortować pod względem zawartości tylko pierwszego pola; -k1
oznacza sortowanie względem zawartości całej linii. Sortowanie stabilne (sort -s
) może być przydatne. Przykładowo, żeby najpierw posortować po polu numer 2, a następnie po polu numer 1, możesz użyć sort -k1,1 | sort -s -k2,2
.
Jeśli kiedykolwiek w wierszu poleceń Basha zajdzie potrzeba umieszczenia znaku tabulacji, dosłownie (np. jako argumentu dla opcji -t do sortowania), wciśnij ctrl-v [Tab] lub wpisz $'\t'
(to drugie rozwiązanie jest lepsze, bo możesz je skopiować i wkleić).
Standardowymi narzędziami do "łatania" plików z kodem źródłowym są diff
i patch
. Sprawdź także diffstat
dla uzyskania podsumowania z diff oraz sdiff
dla porównywania zawartości obok siebie. Zwróć uwagę, że diff -r
zadziała dla całych katalogów. Użyj diff -r drzewo1 drzewo2 | diffstat
, żeby uzyskać podsumowanie różnic. Używaj vimdiff
do porównywania i edycji plików.
W pracy z plikami binarnymi używaj hd
, hexdump
lub xxd
do uzyskania prostych zrzutów zawartości w formie liczb szesnastkowych, a bvi
, hexedit
lub biew
do binarnej edycji.
Także w odniesieniu do plików binarnych, strings
(oraz grep
, itp.) pozwoli Ci znaleźć kawałki tekstu.
Do obsługi plików różnic binarnych (kompresja delta), używaj xdelta3
.
Do zmiany kodowania znaków w tekście wypróbuj iconv
. Możesz także użyć uconv
do bardziej zaawansowanych operacji; obsługuje on bardziej zaawansowane rzeczy, związane z Unicode. Przykładowo:
# Wyświetla szesnastkowe kody lub faktyczne nazwy znaków (przydatne do debugowania):
uconv -f utf-8 -t utf-8 -x '::Any-Hex;' < dane_wejsciowe.txt
uconv -f utf-8 -t utf-8 -x '::Any-Name;' < dane_wejsciowe.txt
# Konwertuje teskt na małe litery i usuwa wszystkie znaki akcentu (rozwijając i pozbywając się ich):
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC;' < dane_wejsciowe.txt > dane_przetworzone.txt
Aby podzielić plik na mniejsze kawałki, sprawdź jak użyć split
(do podziału na podstawie zadanego rozmiaru) i csplit
(do podziału na podstawie zadanego wzorca).
Data i czas: aby uzyskać aktualną datę i czas w przydatnym formacie ISO 8601, użyj date -u +"%Y-%m-%dT%H:%M:%SZ"
(inne opcje są kłopotliwe). Do manipulacji wyrażeniami zawierającymi datę i czas, używaj dateadd
, datediff
, strptime
itp. z pakietu dateutils
.
Używaj zless
, zmore
, zcat
oraz zgrep
do pracy ze skompresowanymi plikami.
Atrybuty plików da się ustawiać przy użyciu chattr
i oferują one niskopoziomową alternatywę dla uprawnień do plików. Na przykład, aby uchronić plik przed przypadkowym usunięciem, ustaw mu flagę niezmienności (immutable): sudo chattr +i /wazny/katalog/lub/plik
Używaj getfacl
i setfacl
, aby zachować i przywrócić uprawnienia do plików (ACL). Przykładowo:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txt
truncate
(tworzy plik z rezerwacją miejsca), fallocate
(dla systemów plikowych ext4, xfs, btrfs oraz ocfs2), xfs_mkfile
(prawie dla każdego systemu plików, zawarty w pakiecie xfsprogs), mkfile
(dla systemów uniksowych, takich jak Solaris, Mac OS).Do debugowania stron w sieci przydane są curl
i curl -I
lub ich odpowiedniki z użyciem wget
, albo bardziej nowoczesny httpie
.
Żeby poznać aktualny stan cpu/dysku, klasycznymi narzędziami są top
(lub lepszy htop
), iostat
i iotop
. Użyj iostat -mxz 15
dla uzyskania podstawowych informacji o użyciu CPU i szczegółowych statystyk użycia każdej partycji dyskowej oraz wglądu w ich wydajność.
Aby uzyskać szczegóły połączeń sieciowych, używaj netstat
i ss
.
Dla szybkiego podglądu tego, co dzieje się w systemie, dstat
jest wybitnie przydatny. Aby uzyskać najszerszy obraz sytuacji wraz ze szczegółami, użyj glances
.
Żeby poznać stan pamięci, uruchom i zrozum dane wyjściowe poleceń free
i vmstat
. W szczególności pamiętaj, że pamięć "podręczna (cached)" to zarezerwowana przez jądro Linuksa pamięć podręczna dla plików, więc skutecznie jej wartość zalicza się do wartości pamięci "wolnej (free)".
Debugowanie podsystemu Java to inna para kaloszy, ale prostą sztuczką w systemach Oracle i niektórych innych JVMach może być uruchomienie kill -3 <pid>
, aby uzyskać pełny zrzut zawartości stosu i podsumowanie zawartości sterty (włącznie ze szczegółami nt. 'zbierania śmieci', które mogą dać wiele informacji) do strumienia standardowego błędu/logów. Z narzędzi JDK przydatne są jps
, jstat
, jstack
, jmap
. Narzędzia SJK są bardziej zaawansowane.
Używaj mtr
jako lepszego narzędzia traceroute do identyfikowania problemów z siecią.
Sprawdzenie przyczyny zapełnienia dysku przy użyciu ncdu
oszczędza czas w porównaniu z użyciem "zwyczajnych" poleceń, takich jak du -sh *
.
Żeby odszukać gniazdo lub proces, które zużywają przepustowość połączenia sieciowego, wypróbuj iftop
lub nethogs
.
Narzędzie ab
(dostarczane w pakiecie z Apache) pomaga w szybkim sprawdzeniu wydajności serwera stron. Do bardziej złożonych testów obciążenia, wypróbuj siege
.
Do poważniejszego debugowania sieci, wireshark
, tshark
lub ngrep
.
Poznaj strace
oraz ltrace
. Mogą one pomóc w znalezieniu przyczyny, gdy program nie działa poprawnie, zawiesza się lub całkowicie "rozsypuje" lub gdy chcesz poznać jego ogólną wydajność. Zwróć uwagę na opcję profilowania (-c
) oraz możliwość wpięcia się w działający proces (-p
). Używaj opcji śledzenia procesów potomnych (-f
), żeby nie przeoczyć ważnych wywołań systemowych.
Poznaj ldd
do sprawdzania współdzielonych bibliotek, itp. — ale nigdy nie uruchamiaj go z niezaufanymi plikami.
Dowiedz się, jak można się wpiąć w działający proces przy pomocy gdb
i prześledzić jego użycie stosu.
Używaj /proc
. Czasami jest niezwykle pomocny w rozwiązywaniu trwających problemów. Przykłady: /proc/cpuinfo
, /proc/meminfo
, /proc/cmdline
, /proc/xxx/cwd
, /proc/xxx/exe
, /proc/xxx/fd/
, /proc/xxx/smaps
(gdzie xxx
jest nazwą procesu lub jego numerem pid).
Kiedy sprawdzasz, dlaczego w przeszłości coś poszło źle, sar
może być bardzo pomocny. Pokazuje on historyczne statystyki użycia CPU, pamięci, sieci, itp.
Do głębszych analiz systemów i wydajności, rzuć okiem na stap
(SystemTap), perf
oraz sysdig
.
Sprawdź w jakim jesteś systemie operacyjnym, używając uname
lub uname -a
(ogólne informacje na temat Uniksa/jądra systemu) albo lsb_release -a
(informacje na temat dystrybucji Linuksa).
Używaj dmesg
zawsze, gdy coś się "dziwnie zachowuje" (to może oznaczać problemy ze sprzętem lub sterownikami).
Jeśli usuwasz plik, ale nie zwalnia to oczekiwanej ilości miejsca jak np. wskazywanej przez du
, sprawdź czy plik ten nie jest używany przez jakiś proces:
lsof | grep deleted | grep "nazwa-pliku-zajmujacego-miejsce"
Kilka przykładów składania poleceń:
sort
/uniq
. Przypuśćmy, że a
i b
są plikami tekstowymi, niezawierającymi żadnych powtórzeń. Taka operacja jest szybka i działa na plikach o dowolnym rozmiarze, do kilku gigabajtów. (Sortowanie nie jest ograniczone rozmiarem pamięci, aczkolwiek może wymagać użycia opcji -T
, jeśli /tmp
znajduje się na partycji głównej o małym rozmiarze.) Zobacz także uwagi na temat LC_ALL
powyżej oraz opcję -u
dla polecenia sort
(pominiętą poniżej dla zachowania przejrzystości). sort a b | uniq > c # c jest sumą a i b
sort a b | uniq -d > c # c jest częścią wspólną a i b
sort a b b | uniq -u > c # c jest różnicą zbiorów a - b
diff <(jq --sort-keys . < plik1.json) <(jq --sort-keys . < plik2.json) | colordiff | less -R
Używaj grep . *
, aby szybko przeanalizować zawartość wszystkich plików w katalogu (tak, by każda linia była powiązana z nazwą pliku) lub head -100 *
(tak, by każdy plik miał nagłówek). To może być użyteczne dla katalogów zawierających ustawienia konfiguracyjne, jak w /sys
, /proc
, /etc
.
Sumowanie wszystkich liczb zawartych w trzeciej kolumnie pliku tekstowego (to rozwiązanie jest prawdopodobnie 3X szybsze i zawarte w 3X mniejszej ilości kodu, niż odpowiednik w Pythonie):
awk '{ x += $3 } END { print x }' mojplik
ls -l
, ale czytelniejsze niż ls -lR
: find . -type f -ls
acct_id
obecnego w adresach URL. Jeśli chcesz otrzymać zestawienie liczby zapytań dla każdego acct_id
: egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
By śledzić zmiany w sposób ciągły, użyj watch
, np. sprawdzanie zmian plików w katalogu watch -d -n 2 'ls -rtlh | tail'
lub zmian ustawień sieciowych podczas naprawy ustawień Twojego połączenia wifi watch -d -n 2 ifconfig
.
Uruchom tę funkcję, aby otrzymać losowo wybraną wskazówkę z tego dokumentu (przetwarza Markdown i wyodrębnia jeden element):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README-pl.md |
sed '/cowsay[.]png/d' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80 | iconv -t US
}
expr
: wykonaj działania arytmetyczne lub logiczne albo oceniaj wyrażenia regularne
m4
: prosty edytor makr
yes
: wyświetl łańcuch znaków wiele razy
cal
: wygodny kalendarz
env
: wykonaj polecenie (przydatny w skryptach)
printenv
: wyświetl zmienne środowiskowe (przydatny w debugowaniu i skryptach)
look
: znajdź angielskie słowa (lub linie w pliku) zaczynające się od łańcucha znaków
cut
, paste
i join
: manipulacja zawartością plików
fmt
: sformatuj linie tekstu
pr
: sformatuj tekst na stronach/w kolumnach
fold
: zwiń linie tekstu
column
: sformatuj pola tekstowe do postaci wyrównanych kolumn lub tabel o stałej szerokości
expand
i unexpand
: zamień znaki tabulacji na spacje i odwrotnie
nl
: dodaj numerację linii
seq
: wyświetl ciąg liczb
bc
: kalkulator
factor
: rozłóż liczby całkowite na czynniki
gpg
: zaszyfruj i podpisz pliki
toe
: tabela wpisów terminfo
nc
: debugowanie połączeń sieciowych i przesyłanie danych
socat
: przekazywanie połączeń i przekierowanie portów TCP (podobny do netcat
)
slurm
: obrazowanie ruchu sieciowego
dd
: przenoszenie danych między plikami lub urządzeniami
file
: zidentyfikuj typ pliku
tree
: wyświetl katalogi i podkatalogi w postaci zagnieżdżonego drzewa; jak ls
, ale rekurencyjny
stat
: informacje o pliku
time
: wykonaj polecenie i zmierz czas jego działania
timeout
: wykonaj polecenie przez określony czas i zatrzymaj jego działanie, gdy ten czas upłynie.
lockfile
: utwórz plik semaforowy, który można usunąć tylko przy użyciu rm -f
logrotate
: wykonaj rotację, skompresuj i wyślij pocztą logi.
watch
: powtarzaj wykonanie polecenia, pokazując wyniki i/lub podkreślając zmiany
when-changed
: wykonuje dowolne zadane polecenie, gdy tylko zauważy zmianę w pliku. Zobacz też inotifywait
oraz entr
.
tac
: wyświetl zawartość pliku w odwrotnej kolejności
comm
: porównaj posortowane zawartości plików, linia po linii
strings
: wyodrębnij tekst z plików binarnych
tr
: zamiana lub edycja znaków
iconv
lub uconv
: zmiana kodowania znaków w tekstach
split
i csplit
: dzielenie plików na części
sponge
: odczytaj pełną zawartość strumienia danych wejściowych przed ich wypisaniem, przydatne przy odczycie i zapisie do tego samego pliku, np. grep -v cośtam jakis-plik | sponge jakis-plik
units
: obliczenia i zamiana jednostek miar; zamienia furlongi/dwa-tygodnie na twipy/mrugnięcie (zobacz także /usr/share/units/definitions.units
)
apg
: generuje hasła, dobierając ich znaki losowo
xz
: wysokowydajna kompresja plików
ldd
: informacje o bibliotekach dołączanych dynamicznie
nm
: uzyskaj symbole z plików obiektowych
ab
lub wrk
: badanie wydajności serwerów stron
strace
: debugowanie wywołań systemowych
mtr
: lepszy traceroute do debugowania połączeń sieciowych
cssh
: powłoka równoległa w trybie graficznym
rsync
: zsynchronizuj pliki i katalogi przez SSH lub na lokalnym systemie plików
wireshark
i tshark
: przechwytywanie pakietów danych i debugowanie sieci
ngrep
: grep dla warstwy sieciowej
host
i dig
: sprawdzanie DNSów
lsof
: informacje o deskryptorach plików i gniazdach używanych przez proces
dstat
: przydatne statystyki systemowe
glances
: wysokopoziomowy podgląd użycia wielu podsystemów
iostat
: statystyki użycia dysku
mpstat
: statystyki użycia CPU
vmstat
: statystyki użycia pamięci
htop
: ulepszona wersja polecenia top
last
: historia logowania użytkowników
w
: sprawdzanie, kto jest zalogowany
id
: informacje o tożsamości użytkownika/grupy
sar
: historyczne statystyki systemowe
iftop
or nethogs
: podgląd użycia połączeń sieciowych przez gniazdo lub proces
ss
: statystyki użycia gniazda
dmesg
: komunikaty błędów systemu i jego uruchomienia
sysctl
: podejrzyj i skonfiguruj parametry jądra Linux w trakcie działania
hdparm
: zmiana ustawień i badanie wydajności dysków SATA/ATA
lsblk
: wyświetl urządzenia blokowe: podgląd listy dysków i partycji w postaci drzewa
lshw
, lscpu
, lspci
, lsusb
, dmidecode
: informacje o sprzęcie, wliczając w to CPU, BIOS, RAID, podsystem grafiki, urządzenia, itd.
lsmod
i modinfo
: wyświetl listę i szczegóły dotyczące modułów jądra.
fortune
, ddate
oraz sl
: hm, no cóż, wszystko zależy od tego, czy lokomotywy parowe i dymki z komiksów uważasz za "użyteczne"
Poniższe wpisy mają znaczenie tylko dla systemów macOS.
Zarządzanie pakietami oprogramowania za pomocą brew
(Homebrew) i/lub port
(MacPorts). Można ich użyć do instalacji na macOS wielu z powyższych poleceń.
Skopiujesz dane wyjściowe dowolnego polecenia do aplikacji pulpitowej za pomocą pbcopy
, a dane wejściowe do polecenia wkleisz używając pbpaste
.
Żeby użyć klawisza Option w Terminalu macOS jako klawisza alt (do użycia np. jak w powyższych kombinacjach alt-b, alt-f, itp.), otwórz Preferences -> Profiles -> Keyboard i wybierz "Use Option as Meta key".
Do otwarcia pliku w aplikacji pulpitowej, użyj poleceń open
lub open -a /Applications/Whatever.app
.
Spotlight: szukaj plików używając mdfind
i wyświetl metadane (takie jak informacje EXIF ze zdjęcia) przy pomocy mdls
.
Bądź świadom tego, że macOS oparty jest na systemie BSD Unix i wiele poleceń (np. ps
, ls
, tail
, awk
, sed
) trochę się różni od tych samych poleceń w systemach Linux, na które to systemy w główny wpływ miały Uniksy podobne do System V i narzędzia GNU. Różnice można często zauważyć, przyglądając się nagłówkom podręczników, mówiącym "BSD General Commands Manual." W niektórych przypadkach, zainstalowane mogą być również wersje GNU (takie polecenia, jak gawk
i gsed
jako awk i sed z pakietu narzędzi GNU). Jeżeli piszesz wieloplatformowe skrypty Bash, unikaj takich poleceń (rozważ na przykład użycie Pythona lub perl
a) albo przetestuj je dokładnie.
Aby uzyskać informacje o wersji macOS, użyj sw_vers
.
Poniższe wpisy mają znaczenie tylko dla systemów Windows.
Okiełznaj moc powłoki systemów Unix w systemach Microsoft Windows instalując Cygwin. Większość rzeczy opisanych w tym dokumencie będzie działać od razu.
W Windows 10 możesz użyć Windows Subsystem for Linux (WSL), który zapewnia znajome środowisko Basha z narzędziami wiersza poleceń Unix.
Jeśli chcesz używać głównie narzędzi programistycznych GNU (takich jak GCC) w systemach Windows, rozważ użycie MinGW i jego pakietu MSYS, który zapewnia takie narzędzia, jak bash, gawk, make i grep. MSYS nie spełnia wszystkich funkcji w porównaniu z Cygwinem. MinGW jest szczególnie przydatny do tworzenia odpowiedników narzędzi systemu Unix, działających natywnie w systemach Windows.
Kolejną opcją zapoznania się z systemami Unix z poziomu systemu Windows jest Cash. Miej na uwadze, że tylko nieliczne uniksowe polecenia i ich opcje są dostępne w tym środowisku.
Możesz wykonać i oskryptować większość zadań administracyjnych Windows z poziomu wiersza poleceń, znając i używając wmic
.
Natywne narzędzia wiersza poleceń Windows do zarządzania siecią, które mogą się okazać użyteczne, to między innymi ping
, ipconfig
, tracert
i netstat
.
Możesz wykonać wiele przydatnych zadań w Windows, używając polecenia Rundll32
.
Instaluj dodatkowe programy Unix, używając zarządcy pakietów oprogramowania Cygwina.
Używaj mintty
jako Twojego programu do obsługi wiersza poleceń.
Uzyskaj dostęp do zawartości schowka Windows przez /dev/clipboard
.
Uruchom cygstart
, aby otworzyć dowolny plik przy użyciu zarejestrowanej aplikacji.
Uzyskaj dostęp do rejestru systemowego Windows używając regtool
.
Zauważ, że Windowsowa ścieżka do dysku C:\
w Cygwinie staje się ścieżką /cygdrive/c
oraz, że katalog /
Cygwina pojawia się w lokalizacji C:\cygwin
systemu Windows. Zmieniaj sposób zapisu ścieżek między Cygwinem a Windows używając cygpath
. To najbardziej przydatne w skryptach, które uruchamiają programy systemu Windows.
Z wyjątkiem opisów drobnych zadań, kod napisany jest tak, aby był czytelny dla innych. Z mocą przychodzi odpowiedzialność. To, że coś możesz zrobić w Bashu, niekoniecznie oznacza, że powinieneś/powinnaś to zrobić! ;)
Ta praca została udostępniona na licencji Creative Commons Attribution-ShareAlike 4.0 International License.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。