Sdílejte funkce a triky příkazového řádku pro systém Unix/Linux. Pokuste se udržet Shell/distro agnostik, pokud je to možné. Zájem o zobrazování aliasu, jednodílných linek, klávesových zkratek, malých skriptů Shell atd.
To se poněkud rozšiřuje trikem !!
Zmíněným v tato odpověď . Ve skutečnosti existuje spousta příkazů souvisejících s historií, na které se obvykle zapomíná (lidé mají tendenci bodnout) Up 100krát místo toho hledali příkaz, který vědí, že napsali).
history
zobrazí seznam nedávno spuštěných příkazů s označením události vlevo!N
Nahradí příkaz spojený s označením události N
!-N
Nahradí N
tis poslední příkaz; např. !-1
Nahradí poslední příkaz, !-2
Druhý nejnovější atd.!!
Je zkratka pro !-1
, Aby se rychle nahradil poslední příkaz!string
Nahradí poslední příkaz začínající string
!?string?
Nahradí poslední příkaz, který obsahuje string
K úpravě výsledků lze do příkazu historie !
Přidat slovo. Dvojtečka odděluje událost a označení Word, např. !!:0
. Označovač události !!
Může být zkrácen na pouhých !
, Když se používá textový identifikátor, takže !!:0
Je ekvivalentní !:0
.
!:0
Získá příkaz, který byl proveden!:1
Získá první argument (a !:2
Druhý atd.)!:2-3
Získá druhý a třetí argument!:^
Je další způsob, jak získat první argument. !:$
Získá poslední!:*
Získá všechny argumenty (ale nikoli příkaz)Modifikátory lze také připojit k historickému příkazu !
, Z nichž každý má dvojtečku. Na libovolné číslo lze skládat (např. !:t:r:p
).
h
- Zarovnejte základní název souborut
- Pouze základní název souborur
- Zarovnat se na příponu názvu souborue
- Pouze přípona názvu souborus/search/replacement
- Nahraďte první výskyt search
za replacement
gs/search/replacement
- Nahraďte všechny výskyty search
za replacement
bash - vložte poslední parametr předchozího řádk
alt-. nejužitečnější kombinace kláves vůbec, zkuste to a uvidíte, z nějakého důvodu o tom nikdo neví.
stiskněte znovu a znovu pro výběr starších posledních parametrů.
skvělé, když chcete udělat něco více s argumentem/souborem, který jste použili před chvílí.
Moje oblíbená je
man 7 ascii
Jednoduché a tak velmi užitečné.
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
Podívejte se na tento web commandlinefu.com .
Můžete se také podívat na tyto čtyři články od Peteris Krumins na jeho blogu
Proveďte poslední příkaz jako root:
Sudo !!
Nejste si jisti, zda se to počítá jako „trik“, ale lidé se zdají velmi neví o standardních klávesových zkratkách readline. Zvláštní použití ve skořápkách:
CTRL+R v BASH pro vyhledávání/aktivaci dříve provedených příkazů (obsah ~/.bash_history).
To je často velmi užitečné. Spuštění tohoto aliasu bude sloužit PWD nahoru přes HTTP (indexované) na portu 8000:
alias webserver="python -m SimpleHTTPServer"
A protože běžím, abych dělal celou dobu, a spaz ven a psát příliš rychle, tyto aliasy jsou pravděpodobně moje nejpoužívanější (vážně):
alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make
A pravděpodobně můj nejčastěji používaný kousek BASH je jednoduchý skript, který nazývám upload. Používám jej pro smíchání jakéhokoli obsahu s mým Linode a zkopíruje výslednou HTTP URL do mé schránky (prostřední kliknutí). Velmi užitečné pro vkládání věcí lidem v IRC:
scp -r $* [email protected]$Host:public_html && {
URL="http://$Host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
Jen pár. Mohu přispívat mnohem později, musím se vrátit do práce!
diff
výstup dvou příkazů bez manuálního vytvoření dočasného souboru (bash):
diff <(ls dir1) <(ls dir2)
Docela základní, ale zdá se, že lidé nevědí, vrací vás k předchozímu dir:
cd -
Ortéza je mechanismus, kterým mohou být generovány libovolné řetězce.
To vám umožní nahradit nudné řádky jako:
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
s kratší instancí
mv loong/and/complex/file/name{,backup}
některá další použití
# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}
# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share
Aritmetická expanze :
Aritmetická expanze umožňuje vyhodnocení aritmetického výrazu a nahrazení výsledku. Formát pro aritmetické rozšíření je:
$((expression))
S výrazem se zachází jako s dvojitými uvozovkami, ale s dvojitými uvozovkami uvnitř závorek se nebude zacházet zvlášť. Všechny tokeny ve výrazu podléhají expanzi parametrů, rozšiřování řetězce, nahrazování příkazů a odstraňování nabídek. Aritmetická rozšíření mohou být vnořena.
$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
To je obvykle v mém spouštěcím skriptu (.bashrc, .profile, cokoli)
shopt
bože, podívejte se na komentáře:
shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
Alias, který do něj ukládá stisknutí kláves: mkdir
a cd
:
mkcd () { mkdir -p "[email protected]" && cd "[email protected]"; }
A v neposlední řadě jsem se vzdal zapamatování syntaxe dehtu, takže:
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.Zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
Dvě bash funkce, které mi ušetří mnoho klíčových tahů.
Po každém úspěšném CD proveďte automatické ls:
function cd {
builtin cd "[email protected]" && ls
}
Nahoru n úrovně:
# Usage .. [n]
function .. (){
local arg=${1:-1};
local dir=""
while [ $arg -gt 0 ]; do
dir="../$dir"
arg=$(($arg - 1));
done
cd $dir #>&/dev/null
}
Protože jsem obvykle na půli cesty k příkazové řádce, než chci hledat (CTRL-R v bash), mám ve svém .bashrc následující
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
To znamená, že pokud napíšu cd, stiskem nahoru/dolů uvidím všechny možnosti, které mám cd'd. V podstatě to používám pro často používané dirty. Jako „cd w“ a skončím procházením všemi pracovními prostory, které hodně využívám.
Jedna věc, která mi ušetří spoustu času, jsou příkazy pushd/popd. Tito kluci vám umožní vytvořit hromadu adresářů a snížit psaní hodně:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
screen
příkaz . V zásadě ukládá relaci příkazového řádku, když se vrátíte. Je to druh správce terminálů, jako správce oken. V jedné relaci terminálu tak můžete mít spuštěno více virtuálních terminálů. To je hodně dobrý.
Pokud jeden používá screen
, tato funkce Shell (vložte ji do .bashrc
) je nesmírně užitečné:
function scr {
if screen -ls | grep -q Main; then
# reattach to Main:
screen -xr Main
else
# name session "Main":
screen -S Main
fi
}
po zadání scr
zkontroluje, zda vaše hlavní relace existuje, a připojí se k ní. Jinak to vytvoří.
Pokud potřebujete upravit zvláště dlouhý příkazový řádek v bash
^X^E (Ctrl-X Ctrl-E)
otevře v editoru ($ EDITOR).
V zsh můžete získat stejné chování přidáním tohoto do .zshrc:
autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line
Pokud jste rychlý pisatel, jsou užitečné:
alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
Toto makro vám pomůže vypočítat součty sloupce výstupu: velikost souboru, bajty, pakety, vše, co musíte udělat, je zadat sloupec, který chcete přidat:
total ()
{
if [ x$1 = x ]; then set `echo 1`; fi
awk "{total += \$$1} END {print total}"
}
Používáte to takto například, bez argumentů, přidá součet prvního sloupce:
du | total
Pokud zadáte argument, sčítá například tento sloupec, čímž získáte celkový počet bajtů použitých všemi soubory C # v/tmp:
ls -l /tmp/*cs | total 5
Někdy je vaše konzole zmatená, protože jste omylem prohlíželi binární soubor (například kočka/bin/ls), můžete terminál obnovit pomocí této funkce Shell:
restaura ()
{
Perl -e 'print "\e)B";'
}
Líbí se mi, že moje znaky používají k rozlišování třídy souborů a také ke skrytí záložních souborů generovaných mým editorem (záložní soubory končí znakem ~):
alias ls='ls -FB'
alias s='Sudo'
alias r='rake' # i'm a Ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
Jeden z mých oblíbených, když zapomenu s
:
$ s !! # last command with super user priviledges
Pokud příkaz vezme vstup stdin, můžete přečíst vstup ze souboru pomocí <filename
. To se může objevit kdekoli v příkazu, takže tyto řádky jsou rovnocenné:
cat filename
cat <filename
<filename cat
To je zvláště užitečné pro grep, protože vám umožňuje umístit výraz na konec řádku, takže můžete rychle upravit příkaz grep tím, že stisknete Up, aniž byste museli posouvat doleva, abyste se dostali za název souboru:
<filename grep 'expression'
Pomocí CDPATH
můžete nastavit ekvivalent adresáře PATH
; pokud se pokusíte cd foo
a v aktuálním adresáři není foo
, Shell zkontroluje každý z adresářů v CDPATH
hledá v nich foo
a přepne na první najde:
export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
vi `which scriptname`
Nebo když nevíte, kde něco žije, a nestaráte se o to.
ampersand. Umístí váš příkaz na pozadí, takže můžete pokračovat v psaní.
$> Sudo updatedb &
Pracujete spolu a po chvíli uvidíte:
[1] 17403
A váš proces je hotový! Skvělé pro věci, u kterých nemusíte čekat, až skončí.
Dokončení karty. Jak špatné by to bylo sát, kdybyste museli zadat všechny znaky každé cesty?
Mám to ve svém .bashrc
#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'
function find-all() {
python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
if type(i) == type(''):
print i
else:
print i[0]"
}
A když mám ve schránce zdrojový kód html a chci najít všechny odkazy, které používám
c-v | find-all 'href="([^"]*)"' | c-c
A mám všechny adresy URL ve schránce
Také mám tuto funkci
function lsq(){
ls -lh [email protected] | tr -s ' ' | cut -d' ' -f5,8
}
které zobrazují velikost (lidsky čitelné) a název souboru.
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
tento alias slouží pro ukázkovou teplotu
function separate() {
python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}
pomocí této funkce mohu spočítat produkt nebo součet argumentů.
alias sum='separate + | bc'
alias product='separate * | bc'
function split-join() {
python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}
Toto je užitečná funkce, která rozdělí standardní vstup oddělený regexem a pak se připojí k výsledku.
function factorial() {
seq -s* $1 | bc
}
faktoriální funkce
function wiki() { Dig +short txt $1.wp.dg.cx; }
Tato funkce zobrazuje wiki text přes DNS
Mám také tři barevné funkce
function blue() {
echo -e "\x1b[34m\x1b[1m"[email protected]"\x1b[0m";
}
function green() {
echo -e "\x1b[32m\x1b[1m"[email protected]"\x1b[0m";
}
function red() {
echo -e "\x1b[31m\x1b[1m"[email protected]"\x1b[0m";
}
function md5check() {
test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}
Tato funkce ověřuje hash souboru md5.
zobrazí se chybová zpráva pro daný kód
function strerror() { python -c "import os; print os.strerror($1)"; }
Všechny zprávy můžete vytisknout pomocí
alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
Počet naposledy připojených zařízení:
mount /media/whatever
...
u!mo
!mo
expanduje na poslední příkaz, který začal s mo
(alespoň v bash). Někdy je uprostřed mv
, takže u!m
nebude fungovat tak často.
Další užitečný trik ZSH:
Považujte výstup příkazu za soubor:
emacs =(hg cat -r 100 somefile)
Otevře se stará verze souboru sledovaného Mercurial v emacs pro syntakticky zvýrazněné prohlížení. Bez toho bych se musel pohrávat s hg revert
, hg archive
nebo explicitně poslat hg cat
výstup do dočasného souboru.
Samozřejmě to funguje s jakýmkoli programem, který otevírá soubory, a jakýmkoli programem, který tiskne na standardní výstup.
Funkce specifická pro ZSH je aliasy přípon, které jsou nastaveny tak, že příznak alias
-s
:
alias -s ext=program
Pokud má daná přípona alias přípony, můžete spustit soubor s tímto rozšířením přímo a ZSH spustí daný program a předá název souboru jako argument. Pokud tedy výše uvedený alias existuje, jsou tyto řádky rovnocenné:
/path/to/foo.ext
program /path/to/foo.ext
Jedna z mých nejoblíbenějších funkcí ZSH je pojmenovaná adresáře. Můžete exportovat proměnnou s daným názvem s hodnotou, která ukazuje na určitou cestu:
export foo=/usr/bin
Nyní můžete použít ~foo
v příkazu odkazovat na /usr/bin
:
cd ~foo
~foo/ls
cat ~foo/filename
Příkaz do-nic :
jako v
while :; do :; done
Ortéza v kombinaci s pro smyčky:
for c in {1..3}; do :; done
!
operátor a zkratující operátoři ||
a &&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
použití subshellů namísto pop/Push (přichází vhod v skriptech)
~$ ( cd /tmp; echo $PWD )
/tmp
~$
druh what-is příkaz type
~$ type type
type is a Shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
také velmi pěkné: zde řetězce
~$ cat <<<"here $PWD"
here /home/yourname
~$
a můj oblíbený: přesměrování na seznam příkazů
{ w; ps; ls /tmp; } 2>/dev/null |less
Podívejte se na to otázka.
Když spustíte ps ax | grep string
:
[[email protected] ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
poslední řádek obsahující grep
je něco anoying
Můžete se toho zbavit spuštěním ps ax | grep '[s]tring'
:
[[email protected] ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
aktualizace : nebo stačí spustit pgrep string
Někdy jsou bashová nastavení taková, že rm
je pojmenováno na rm -i
, a proto vyžaduje potvrzení každého mazaného souboru. Když na takovém účtu občas pracuji, používám \rm
pro načtení původního chování rm
bez změny konfigurace uživatele.
Miluju, jak se do svého PS1 chucků tolik věcí, kolik můžu. Některé užitečné věci k zapamatování:
\e[s
a \e[u
uložení a uložení pozice kurzoru. Používám to k vytvoření „informačního pruhu“ v horní části obrazovky, pár řádků dlouhých, které se vejdou více věcí. Příklad:
PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t \j / \! / \#\[\e[u\e[0m\e[33;1m\][\[email protected]\h \[\e[34m\]\W]\[\e[0m\]\$ '
Kombinováno s alias clear='echo -e "\e[2J\n"'
. Vyzkoušej to!
Také Prompt_COMMAND
proměnná definuje příkaz, který se má pokaždé provést před PS1.
Dalším příkazem je příkaz bg
. Pokud zapomenete dát &
Na konci příkazu stačí stisknout ^Z a zadejte bg
a spustí se na pozadí.
Zobrazte větev a stav Git v řádku
export GIT_PS1_SHOWDIRTYSTATE = true pokud ["$ color_Prompt" = yes]; pak PS1 = '$ {debian_chroot: + ($ debian_chroot)}\[\ 033 [01; 32m \]\u @\h\[\ 033 [00m \]:\[\ 033 [01; 34m \]\w\[\ 033 [00m \] $ (__ git_ps1 "#% s")\$ ' Else PS1 =' $ {debian_chroot: + ($ debian_chroot)}\\ u @\h:\w $ (__ git_ps1 "#% s")\$ ' fi
Můj oblíbený příkaz je 'najít', používám ho všude ... příklady:
find . -name "*.log" -exec ls -l {} \; | grep "$(find . -name "*.log" -exec ls -l {} \;| nawk '{print $5}' | sort -n | tail )"
Stačí zobrazit nejtěžší soubory ve formátu ls -l (dlouhý).
Pokud potřebujete kód s oprávněními 0640, stačí hledat:
find . \( \( ! -perm 0640 \) -a \( -name "*.cpp" -o -name "*.h" \) \) -ls | nawk '{print $3"\t"$11}'
nebo nahradit:
find . \( -name "*.cpp" -o -name "*.h" \) | xargs chmod 640
Pak potřebujete symbol a nevíte, kde to je?
(
for myObj in $(find . -name "*.o"); do
gotSym=$(dump -Xany -t $myObj | grep .MY_SYMBOL)
if ! test "x$gotSym" = "x"
then
echo "OBJECT [$myObj] ========================"
echo "$gotSym"
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"^
fi
done
)
Novější soubory než XFILE ??
find . -newer XFILE -type f
Jo, "najdi" pravidlo!
Jednou tak často, když jste zadali dlouhý příkaz a před jeho dokončením jste si uvědomili, že to nebude fungovat hned, protože musíte spustit něco jiného (např. Zadat git commit -m "long commit message here"
), můžete zasáhnout ^A^K
na začátek řádku a jeho zabití (uložení do vyrovnávací paměti), další spuštění příkazu k opravě věcí a nakonec ^Y
vložit zabitý příkaz a pokračovat. Šetří hodně přepisování. To vše samozřejmě je, když readline
je v Emacs módu.
Další spořič času: mkdir -p some/nested/dirs/to/be/created
vytvoří všechny diry v cestě, pokud chybí.
Zobrazuje pěkné ASCII umění současného stromu procesů se zvýrazněným procesem s nejintenzivnějším procesorem.
while true; do
clear;
pstree $( ps -eo pid --sort %cpu | tail -n 1 );
sleep 1;
done
Zabijte to pomocí Ctrl + C
Viz výstup příkazů aktualizovaný každých n sekund
watch -n 60 df -h (displays df -h every 60 seconds)
Zobrazit statistiky o síťovém zařízení wlan0
ip -s link ls wlan0
Zobrazit směrovací tabulku pro zařízení eth1
ip route ls dev eth1
Zobrazení statistik všech paketů směrovačů, které prochází, aby dosáhly hostitele
mtr --interval 5 HOSTNAME
Podívejte se na reverzní záznamy DNS ohledně názvů hostitelů na SÍTI
nmap -sL NETWORK
Porovnejte web
ab
Získejte všechny odkazy z webové stránky
lynx -dump http://www.yahoo.com | awk '/http/{print $2}'
Zobrazit výchozí bránu
netstat -rn | awk '/UG/{print $2}'
Zápis standardní chyby do souboru
foo 2> errors.txt
Přesměrujte stderr na stdout
foo 2>&1
Přesměrujte stderr i stdout do stejného souboru.
foo > file.txt 2>&1
# change chmod to file dowloaded --> $_
wget -c http://link/to/file -O /path/to/save/namefile && chmod 0755 $_
# extract tar.bz2 or tar.gz whit less work
# this avoids having to unpack and then move the files to another location, in this case have # already extracted in the desired location
tar jxvf file.tar.bz2 -C /pat/to/extract
# calculator with bc - in bashrc
calc(){ echo "scale=2;[email protected]" | bc;}
# set magic-space in bashrc
bind Space:magic-space # !pin<space> expand last cmd pin...
# alias to open last edited file in vim
alias lvim="vim -c \"normal '0\""
# alias to show your path set
alias path='echo -e ${PATH//:/\\n}'
Nahradit části předchozího příkazu:
^
Vyhledávání^
nahradit
$ echo a b c d
a b c d
$ ^b c^X
echo a X d
a X d
Skvělé pro překlepy:
$ mkae
-bash: mkae: command not found
$ ^ka^ak
make
[...]
Shrňte velikost adresáře s klesající lidskou velikostí
du -hs */ | sort -hr
např.
10.2G foo/
4M bar/
dvojitá hvězdná expanze se zsh (která rekurzivně sestupuje do adresářového stromu, nejen na jedné úrovni, něco podobného $(find ! -type d)
:
grep string **/*.cc
moje oblíbená funkce je ŽÁDNÉ BARVY! =)
TERM = xterm-mono nebo TERM = linux-m závisí na OS ...
Moc se mi líbí černá a bílá IRSSI, MC a jakýkoli jiný nástroj „Textové uživatelské rozhraní“
ZSH má globální aliasy. Rozšiřuje alias kdekoli v příkazovém řádku. Toto se mi hodilo pro názvy hostitelů:
Např.:
alias -g sub='sub.domain.tld'
Pak mohu udělat např .:
sftp sub
ssh sub
atd.
Ve skutečnosti není jednosložková loď, ale myslím, že je to užitečné. Převést mnoho souborů na velká písmena, například file_to_upper *php *c
. Existuje mnoho podobných případů, jako je převod na nižší, přejmenování všech souborů příponou/předponou atd.
file_to_upper ()
{
for file in "[email protected]"
do
if [ ! -f "$file" ]; then
echo "File $file does not exist";
else
mv -f "$file" "`echo "$file" | tr '[a-z]' '[A-Z]'`"
fi
done
return 0
}
získat název souboru s nejnovější časovou značkou v aktuálním adresáři:
latest () { ls -lrt | tail -1 | awk '{print $NF}' }
function calc() { echo $* p | dc }
dc je RPN kalkulačka; tato funkce mi umožňuje zadat výraz jako argumenty příkazu:
$ calc 5 3 +
8
Zobrazí výzvu, kde je hostname tučně. Chvíli jsem vyzkoušel barevné výzvy, ale barva by někdy vypadala špatně v závislosti na pozadí. Tučné práce pro mě pro světlé pozadí, tmavé pozadí, modré pozadí atd.
Toto je v mém .bashrc:
bold=$(tput bold)
reset=$(tput sgr0)
export PS1="\[email protected]\[$bold\]\h\[$reset\]:\w \$ "
Při neustálém přepínání mezi Windows a Unix/Linux mi připadalo užitečné:
alias dir="ls -l"
alias copy="cp"
alias del="rm"
Toto je pro zsh, ne bash, fyi (pokud jste ho nepoužili, nebudete litovat, že to vyzkoušíte). To je opravdu užitečné pro rychlé zadání dlouhých cest pro přenosy scp. Funguje to stejně jako pomocí k dokončení nebo seznamu dostupných názvů souborů/adresářů.
Příklad
scp [email protected]:/home/webdev/domains/example.com/http.public/long<tab>
dokončí cestu k /home/webdev/domains/example.com/http.public/longdirname
.
Jsem špatný na příkladech, ale to by vám mělo dát nápad. Vyzkoušejte to, může vám opravdu ušetřit prsty při psaní.
# SSH Completion
zstyle ':completion:*:scp:*' tag-order \
files users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:scp:*' group-order \
files all-files users hosts-domain hosts-Host hosts-ipaddr
zstyle ':completion:*:ssh:*' tag-order \
users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:ssh:*' group-order \
hosts-domain hosts-Host users hosts-ipaddr
zstyle '*' single-ignored show
ReTTY , což vám umožňuje přesunout běžící program z jednoho terminálu na druhý. Pokud tedy máte ncurses program spuštěný mimo obrazovku, tmux nebo ssh, můžete jej připojit k ssh relaci nebo síťové obrazovce nebo relaci tmux spuštěním ReTTY uvnitř terminálu, kde chcete daný program použít. Jinými slovy, je to podobné obrazovce a tmuxu, ale s výjimkou, že (a) může současně spustit pouze jeden program a (b) může být spuštěn po zahájíte podřízený proces.
Můj oblíbený je použít příkaz python) k vytvoření dočasného http serveru:
python -m SimpleHTTPServer
a přístup k souborům z tohoto stroje přes lan jako:
Dalším je stáhnout soubor dehtu v extrahované podobě jako:
wget -qO - http://192.168.1.70:8000/test.bz2 | tar xjvf -
Zde může být odkaz přes www a bz2 může být buď gz, tgz nebo bz2 samotný.
mkdir -p ~/.bashrc.d
cat<<'EOF' >> ~/.bashrc
echo ""
echo -n ".bashrc.d warming up: "
for script in ~/.bashrc.d/* ; do
if [ -x "$script" ] ; then
echo -n "${script##*/} "
. "$script"
fi
done
echo ""
echo ""
echo " All systems are go."
echo ""
EOF
rm() {
local src
local final_status=0
for src in "[email protected]"; do
# Process only non command-line arguments.
if [[ "$src" != -* ]]; then
local trash="$HOME/.Trash"
if [ ! -e "$src" ]; then
echo "Safer rm: $src: No such file or directory."
final_status=1
fi
# Create the trash directory if needed.
if [ ! -d "$trash" ]; then
# Assume Mac trash, but it'll work on *nix too.
mkdir -p "$trash"
if [ ! -d "$trash" ]; then
echo "Safer rm: Unable to create trash directory $trash"
echo ""
echo " Nothing moved or deleted. Consider carefully:"
echo ""
echo " /bin/rm -rf $src"
return 1
fi
fi
local dest="$trash/${src##*/}"
# Find a filename combination which does not already exist.
if [ -e "$dest" ]; then
# Try appending ISO datetime.
dest="$dest.$(date +%Y-%m-%dT%H-%M-%S)"
if [ -e "$dest" ]; then
local n=1
# Try increasing monotony.
while [ -e "$dest.$n" ]; do
n = $[n + 1]
done
dest="$dest.$n"
fi
fi
echo -n "Safer rm: Trashing $src to $dest ..."
/bin/mv "$src" "$dest"
echo " done."
echo ""
echo " To restore: /bin/mv '$dest' '$src'"
echo ""
echo " To purge: /bin/rm -rf '$dest'"
echo ""
echo ""
fi
done
return $final_status
}
# Don't ask why I need 15 levels of cd ..
alias ..='cd ..'
alias .2='cd ../..'
alias ...='.2'
alias .3='cd ../../..'
alias .4='cd ../../../..'
alias .5='cd ../../../../..'
alias .6='cd ../../../../../..'
alias .7='cd ../../../../../../..'
alias .8='cd ../../../../../../../..'
alias .9='cd ../../../../../../../../..'
alias .10='cd ../../../../../../../../../..'
alias .11='cd ../../../../../../../../../../..'
alias .12='cd ../../../../../../../../../../../..'
alias .13='cd ../../../../../../../../../../../../..'
alias .14='cd ../../../../../../../../../../../../../..'
alias .15='cd ../../../../../../../../../../../../../../..'
bind -p | egrep -v '(not|self)' # No existential jokes included.
Poté, co jsem se podíval na baziliony písem, používám 14 pt Monaco
, Anti-aliased
s iTerm2
.
KeyCue (tm) (r) (c) ($) poskytuje kontext téměř jakékoli spuštěné aplikace pouhým přidržením command.
funkce automatického push zsh:
setopt autopushd
a spolu s tím:
alias dirs='dirs -v'
Takže kdykoli mohu napsat dirs
a dostanu historii toho, kde jsem byl:
0 /var/log
1 /tmp
2 /usr/local/bin
3 ~
a pak mohu cd
zpět do např. /usr/local/bin
zadáním:
cd ~2
Žádný z následujících „triků“ není technicky náročný ani působivý, ale mají na jiného člověka určitý dopad. Pokud nemůžeme využít našich pracovních míst k tomu, aby náš život byl šťastnější, měli bychom znovu myslet na některé věci.
Líbí se mi alias
. Můj oblíbený trik je upravit ~/.bash_aliases na počítači mého gf, protože chybí, a přidat řádek jako:
alias gfname='echo Myname is thinking of you'
nebo jinou romantickou nabídku.
Dalším „trikem“, který se mi obzvláště líbí, je:
#!/bin/bash
xaa=123`
for ((a=1; a <= xaa; a++))
do
#sleep 1;
mail -s "Happy Birthday $a" [email protected] < mails.txt
done
exit 0`
kde 123 je osoba, které bych chtěl popřát všechno nejlepší k narozeninám a mails.txt obsahuje zprávu, kterou bych chtěl napsat jako tělo e-mailu. Spánek 1; je někdy nutné, protože na vidlici je omezený limit (). Mohli byste také použít argumenty příkazového řádku $1
atd...
Ve své domovské složce mám složky pojmenované jako Dokument, Stahování, Temp atd. S prvním písmenem velkými. Když pracuji na terminálu, je nepříjemné posunout stiskem první klávesy, když cd'ing do adresáře. Stačí zadat následující v terminálu a bash by případ automaticky opravil.
shopt -s nocaseglob
Použijte pgrep foo
namísto ps aux | grep foo
Pokud chcete zjistit, kolik případů foo běží a jejich pids:
např. namísto ps aux | grep firefox
, použijte pgrep firefox
Bez nich nemůžu žít
set editing-mode vi
set blink-matching-paren on
v mém ~/.inputrc.
Aktivuje je v každé aplikaci s povoleným readline. Aktivace editace příkazového řádku vi v prostředí Shell funguje pouze prostřednictvím:
set -o vi
Úderem do ESC nebo CTRL + [získáte tak dobře známý režim příkazů vi. A všude můžete používat výkonné příkazy vi!
Existuje skvělý web pro toto: http://www.commandlinefu.com/commands/browse
Můj osobní oblíbený je
find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'
Výše uvedený příkaz dělá soubor s názvem x a poté prohledá uvedený soubor podle vzoru, který hledáte. Neuvěřitelně užitečné, pokud hledáte určitý kousek kódu v souboru, který je někde ve vašich podadresářích.
find path expr -exec ls -ld {} \;
Pěkný snadný způsob, jak vidět vlastnictví, oprávnění, velikosti (pokud jsou soubory) a další vlastnosti, ať už se váš výraz „najít“ vrátí.
Často jsem si hned po spuštění 15minutového příkazu všiml, že bych chtěl přidat další příkazy do příkazového řádku pomocí &&
. Místo toho, abych přerušil již spuštěnou úlohu, mám tendenci používat at
do fronty ve druhé frontě, takže si delší dobu nemusím dívat na terminál.
Obecně at
fronty úloh pro provedení v daném čase:
$ at 14:30
> myscript
> anotherscript
> <CTRL-D>
Položky do fronty lze zobrazit pomocí atq
a odstranit pomocí atrm
.
Další doplněk k tipům pro přizpůsobení bash Prompt: Rád invertuji Prompt, protože to dává dobré vizuální podněty, kde výstup příkazů začíná a končí dlouhými výpisy terminálů. To funguje dobře pro světlé i tmavé pozadí.
export PS1="\[\e[7m\][\[email protected]\h \w]\[\e[0m\]$ "
sync; sync; sync; restartujte počítač
může být někdy užitečné. Buď opatrný !
Zjistil jsem, že porozumění bash klíčovým tahům vede k efektivnějšímu ostřelování a že mnoho z nich je přímo z emacsu objasňuje jejich použití (tj. Že meta-XXX
Je verze velkého bratra příkazu ctrl-XXX
Obvykle).
Klávesa „meta“ je obvykle klávesa „alt“, ale může to být také klávesa „esc“. např. meta-f
Lze získat buď s alt-f
Nebo esc f
.
Aby mapování kláves alt fungovalo, možná budete muset zrušit „přístupové klávesy nabídky“ nebo jejich ekvivalent v možnostech konzoly. V zásadě, pokud stisknete klávesu alt-f a dostanete nabídku Soubor výzva, vypněte přístupové nabídky alt-key.
ctrl-a / ctrl-e : move to start / end of line
Základy, bez kterých se neobejdete
ctrl-f, meta-f : forward char/Word
Stisknutí alt-f skočí vpřed "1 slovo", které na příkazovém řádku je do značné míry příkaz nebo argument
ctrl-b, meta-b : backwards char/Word
Stejný jako alt-f, ale dozadu pro skok dozadu přes příkazový řádek
ctrl-d, meta-d : delete char/Word
Stisknutím alt-d odstraníte (na konec) aktuální slovo pod kurzorem. mnohem rychleji, poté přidržte smazání po dobu 30 sekund. Je to užitečné, když uprostřed něčeho dokončujete kartu a chcete přeposlat smazání na konec aplikace Word.
ctrl-k : kill line
Odstraní na konec řádku
ctrl-u : undo
Např. zadáním hesla a víte, že jste to někde udělali špatně, namísto toho, abyste dvakrát zasáhli backspace, stačí stisknout ctrl-u. také vymaže aktuální příkazový řádek.
meta-# : insert comment
Je to skvělé pro udržení své příkazové řádky, kterou vytváříte jako komentář před spuštěním, pokud potřebujete udělat něco jiného. půjde to do vaší historie příkazů, ale nebude spuštěna.
ctrl-r : reverse search
Vyhledávání zpět ve vaší historii Shell (opakované ctrl-r pro další zápas)
ctrl-g : abort
Pokud jste uprostřed ctrl-r
A chcete se vrátit zpět na místo, kde jste psali, jednoduše vyhledávání ukončete pomocí ctrl-g
meta-space / ctrl-x ctrl-x : set mark and jump to mark
, Pokud potřebujete rychle přejít na místo v příkazovém řádku, nejprve nastavte značku a poté na ni přeskočte pomocí ctrl-x ctrl-x
. Možná budete muset použít esc-space
, Abyste získali značku nastavenou, protože alt-space
Je často vázáno na vyvolání menu konzoly.
ctrl-] <char> : quick jump to <char>
Skočí vpřed na znak zadaný po ctrl-]
Na příkazovém řádku. Velký bratr Meta-ctrl-] <char>
Skočí dozadu.
Moje oblíbené jsou níže. Většinu z nich používám pravidelně
df -k (zkontrolujte souborové systémy) kill or kill -9 (kill process) set -o vi (nastavte příkazový řádek na vi) topas (výkonný nástroj) mount/unmount
jo jo a jak bych mohl zapomenout> (přesměrovat výstup do souboru) ls> /tmp/tmp.txt
Mnohem více, ale někteří mimo mě.