it-swarm-vi.com

Các tính năng hoặc thủ thuật dòng lệnh yêu thích của bạn là gì?

Chia sẻ các tính năng và thủ thuật dòng lệnh của bạn cho Unix/Linux. Cố gắng giữ cho Shell/distro bất khả tri nếu có thể. Quan tâm đến việc xem bí danh, một lớp, phím tắt, tập lệnh Shell nhỏ, v.v.

93
cmcginty

Điều này mở rộng phần nào trên !! mẹo được đề cập trong câu trả lời này . Thực tế có một loạt các lệnh liên quan đến lịch sử có xu hướng bị lãng quên (mọi người có xu hướng đâm Up 100 lần thay vì tìm kiếm một lệnh họ biết họ đã gõ).

  • Lệnh history sẽ hiển thị danh sách các lệnh chạy gần đây với một người chỉ định sự kiện ở bên trái
  • !N sẽ thay thế lệnh được liên kết với trình chỉ định sự kiện N
  • !-N sẽ thay thế N thứ tự lệnh gần đây nhất; ví dụ. !-1 sẽ thay thế lệnh gần đây nhất, !-2 gần đây thứ hai, v.v.
  • Như đã đề cập trong câu trả lời khác, !! là viết tắt của !-1, để nhanh chóng thay thế lệnh cuối cùng
  • !string sẽ thay thế lệnh gần đây nhất bắt đầu bằng string
  • !?string? sẽ thay thế lệnh gần đây nhất chứa string

Trình chỉ định từ có thể được thêm vào một ! lệnh lịch sử để sửa đổi kết quả. Dấu hai chấm ngăn cách các sự kiện và các nhà chỉ định Word, ví dụ: !!:0. Người chỉ định sự kiện !! có thể được viết tắt thành chỉ ! khi sử dụng công cụ chỉ định Word, vì vậy !!:0 tương đương với !:0.

  • !:0 sẽ nhận được lệnh đã được thực thi
  • !:1 sẽ nhận được đối số đầu tiên (và !:2 thứ hai, v.v.)
  • !:2-3 sẽ nhận được các đối số thứ hai và thứ ba
  • !:^ là một cách khác để có được đối số đầu tiên. !:$ sẽ nhận được cuối cùng
  • !:* sẽ nhận được tất cả các đối số (nhưng không phải lệnh)

Công cụ sửa đổi cũng có thể được thêm vào ! lệnh history, mỗi tiền tố được tạo bởi dấu hai chấm. Bất kỳ số nào cũng có thể được xếp chồng lên nhau (ví dụ: !:t:r:p).

  • h - Sắp xếp theo tên tệp cơ sở
  • t - Chỉ tên tệp cơ sở
  • r - Sắp xếp theo phần mở rộng tên tệp
  • e - Chỉ phần mở rộng tên tệp
  • s/search/replacement - Thay thế lần xuất hiện đầu tiên của search bằng replacement
  • gs/search/replacement - Thay thế tất cả các lần xuất hiện của search bằng replacement
88
Michael Mrozek

bash - chèn tham số cuối cùng của dòng trước

alt-. tổ hợp phím hữu ích nhất từ ​​trước đến nay, hãy thử và xem, vì một số lý do không ai biết về cái này.

nhấn nó một lần nữa và một lần nữa để chọn các tham số cuối cùng cũ hơn.

thật tuyệt khi bạn muốn làm gì đó hơn với đối số/tệp bạn đã sử dụng chỉ một lúc trước.

64
chillitom

Sở thích của tôi là

man 7 ascii

Đơn giản và rất hữu ích.

   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

Hãy xem trang web này Commandlinefu.com .

Bạn cũng có thể xem bốn bài viết này của Peteris Krumins trên blog của mình

49
Moeb

Thực hiện lệnh cuối cùng là root:

Sudo !!
46
Alex B

Không chắc chắn nếu điều này được tính là một "mánh khóe", nhưng mọi người dường như rất không biết về các phím nóng đọc tiêu chuẩn. Sử dụng đặc biệt trong vỏ:

  • Ctrl+U - Cắt đường hiện tại
  • Ctrl+Y - Dán một đường cắt bằng Ctrl+U
  • Ctrl+L - Xóa màn hình và vẽ lại dòng hiện tại
  • Ctrl+G - Nhận một dòng mới và từ bỏ dòng hiện tại
42
Michael Mrozek

CTRL+R trong BASH để tìm kiếm/kích hoạt các lệnh đã thực hiện trước đó (nội dung của ~/.bash_history).

Điều này thường cực kỳ hữu ích. Chạy bí danh này sẽ phục vụ PWD lên trên HTTP (được lập chỉ mục) trên cổng 8000:

alias webserver="python -m SimpleHTTPServer"

Và bởi vì tôi chạy mọi lúc, và thoát ra và gõ quá nhanh, những bí danh này có lẽ là thứ được tôi sử dụng nhiều nhất (nghiêm túc):

alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make

Và có lẽ phần BASH được sử dụng thường xuyên nhất của tôi là một tập lệnh đơn giản mà tôi gọi là tải lên. Tôi sử dụng nó để làm mờ bất kỳ loại nội dung nào vào Linode của mình và nó sao chép URL HTTP kết quả vào bảng tạm của tôi (nhấp chuột giữa). Rất hữu ích để dán công cụ cho những người ở IRC:

scp -r $* [email protected]$Host:public_html && {
    URL="http://$Host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

Chỉ là một đôi. Tôi có thể đăng nhiều hơn sau đó, phải trở lại làm việc!

36
Aaron Bockover

diff đầu ra của hai lệnh mà không tạo tệp tạm thời theo cách thủ công (bash):

diff <(ls dir1) <(ls dir2)
31
Alex B

Khá cơ bản, nhưng mọi người dường như không biết, sẽ đưa bạn trở lại thư mục trước:

cd -
30
Robert Swisher

Mở rộng cú đúp :

Mở rộng cú đúp là một cơ chế theo đó các chuỗi tùy ý có thể được tạo ra.

Nó cho phép bạn thay thế các dòng tẻ nhạt như:

mv loong/and/complex/file/name loong/and/complex/file/name.bacukup

với một ví dụ ngắn hơn

mv loong/and/complex/file/name{,backup}

một số cách sử dụng khác

# 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 

Mở rộng số học :

Mở rộng số học cho phép đánh giá biểu thức số học và thay thế kết quả. Định dạng để mở rộng số học là:

$((expression))

Biểu thức được xử lý như thể nó nằm trong dấu ngoặc kép, nhưng trích dẫn kép bên trong dấu ngoặc đơn không được xử lý đặc biệt. Tất cả các mã thông báo trong biểu thức trải qua mở rộng tham số, mở rộng chuỗi, thay thế lệnh và xóa trích dẫn. Mở rộng số học có thể được lồng nhau.

$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
29
Stefan

Điều này thường có trong tập lệnh khởi động của tôi (.bashrc, .profile, sao cũng được)

shopt lòng tốt, kiểm tra các ý kiến:

shopt -s cdspell        # try to correct typos in path
shopt -s dotglob        # include dotfiles in path expansion
shopt -s hostcomplete   # try to autocomplete hostnames

Một bí danh lưu tổ hợp phím: mkdircd vào đó:

mkcd () { mkdir -p "[email protected]" && cd "[email protected]"; }

Và cuối cùng nhưng không kém phần quan trọng, tôi đã từ bỏ việc ghi nhớ cú pháp tar, vì vậy:

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
}
29
Sygo

Hai hàm bash giúp tôi tiết kiệm nhiều nét chính.

Tự động làm một ls sau mỗi cd thành công:

function cd {
    builtin cd "[email protected]" && ls
}

Tăng n cấp:

# Usage .. [n]
function .. (){
    local arg=${1:-1};
    local dir=""
    while [ $arg -gt 0 ]; do
        dir="../$dir"
        arg=$(($arg - 1));
    done
    cd $dir #>&/dev/null
}
21
Maik

Vì tôi thường đi được một nửa vào dòng lệnh trước khi muốn tìm kiếm (CTRL-R trong bash), tôi có phần sau trong .bashrc của mình

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

Điều này có nghĩa là nếu tôi gõ cd rồi nhấn lên/xuống tôi có thể thấy tất cả các tùy chọn mà tôi có cd'd. Về cơ bản tôi sử dụng điều này cho các dir thường được sử dụng. Giống như "cd w" và cuối cùng tôi sẽ trải qua tất cả các không gian làm việc tôi sử dụng.

17
mendicant

Một điều giúp tôi tiết kiệm rất nhiều thời gian là các lệnh Pushd/popd. Những kẻ này cho phép bạn tạo một chồng thư mục và giảm việc gõ rất nhiều:

/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
17
jacksonh

screenlệnh . Về cơ bản, nó lưu phiên dòng lệnh của bạn khi bạn quay lại. Nó là một trình quản lý đầu cuối, giống như một trình quản lý cửa sổ. Bằng cách đó, trong một phiên thiết bị đầu cuối duy nhất, bạn có thể có nhiều thiết bị đầu cuối ảo đang diễn ra. Nó rất tuyệt.

Nếu một người sử dụng screen, hàm Shell này (đặt nó vào .bashrc) cực kỳ hữu ích:

function scr {
    if screen -ls | grep -q Main; then
         # reattach to Main: 
         screen -xr Main
    else
         # name session "Main":
         screen -S Main
    fi
   }

khi gõ scr, nó sẽ kiểm tra xem phiên chính của bạn có tồn tại hay không và sẽ đính kèm với nó. Nếu không nó sẽ tạo ra nó.

14
user394

Nếu bạn cần chỉnh sửa một dòng lệnh đặc biệt dài trong bash

^X^E (Ctrl-X Ctrl-E) 

sẽ mở nó trong trình chỉnh sửa ($ EDITOR).

Trong zsh, bạn có thể có hành vi tương tự bằng cách thêm phần này vào .zshrc:

autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line 
13
redacted

Nếu bạn là một người đánh máy nhanh, những thứ này có ích:

alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'

Macro này giúp bạn tính tổng các cột của đầu ra: kích thước tệp, byte, gói, tất cả những gì bạn phải làm là chỉ định cột mà bạn muốn thêm:

total ()
{
        if [ x$1 = x ]; then set `echo 1`; fi
        awk "{total += \$$1} END {print total}"
}

Bạn sử dụng nó như thế này chẳng hạn, không có đối số, nó thêm tổng số cột đầu tiên:

du | total

Nếu bạn cung cấp đối số, nó sẽ tính tổng cột đó, ví dụ, điều này cung cấp cho bạn tổng số byte được sử dụng bởi tất cả các tệp C # trong/tmp:

ls -l /tmp/*cs | total 5

Đôi khi bảng điều khiển của bạn bị rối vì bạn vô tình xem tệp nhị phân (ví dụ cat/bin/ls), bạn có thể khôi phục thiết bị đầu cuối với chức năng Shell này:

restaura ()
{
    Perl -e 'print "\e)B";'
}

Tôi thích ls của tôi sử dụng các ký tự để phân biệt lớp tệp và cũng để ẩn các tệp sao lưu được tạo bởi trình soạn thảo của tôi (tệp sao lưu kết thúc bằng ký tự ~):

alias ls='ls -FB'
12
miguel.de.icaza
alias s='Sudo'
alias r='rake' # i'm a Ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.

Một trong những mục yêu thích của tôi khi tôi quên s:

$ s !! # last command with super user priviledges
11
Eimantas

Nếu một lệnh mất đầu vào stdin, bạn có thể đọc đầu vào từ một tệp có <filename. Điều này có thể xuất hiện bất cứ nơi nào trong lệnh, vì vậy những dòng này là tương đương:

cat filename
cat <filename
<filename cat

Điều này đặc biệt hữu ích cho grep, vì nó cho phép bạn đặt biểu thức ở cuối dòng, vì vậy bạn có thể nhanh chóng sửa đổi lệnh grep bằng cách nhấn Up, không cần phải cuộn sang trái để vượt qua tên tệp:

<filename grep 'expression'
10
Michael Mrozek

Bạn có thể sử dụng CDPATH để thiết lập thư mục tương đương với PATH; nếu bạn cố gắng cd foo và không có foo trong thư mục hiện tại, Shell sẽ kiểm tra từng thư mục trong CDPATH tìm kiếm foo trong đó và chuyển sang thư mục đầu tiên tìm thấy:

export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
9
Michael Mrozek
vi `which scriptname`

Vì khi bạn không biết nơi nào đó sống và bạn cũng không quan tâm.

9
Matt Simmons

ký hiệ. Nó đặt lệnh của bạn trong nền, vì vậy bạn có thể tiếp tục gõ.

$> Sudo updatedb &

Làm việc cùng, và sau một thời gian bạn thấy:

[1] 17403

Và quá trình của bạn đã hoàn tất! Tuyệt vời cho những thứ mà bạn không cần đợi chúng chấm dứt.

9
user394

Hoàn thành tab. Sẽ tệ đến mức nào nếu bạn phải loại tất cả các nhân vật của mọi con đường?

8
user394

Tôi có cái này trong .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]"
}

Và khi tôi có mã nguồn html trong clipboard và muốn tìm tất cả các liên kết tôi sử dụng

c-v | find-all 'href="([^"]*)"' | c-c

Và tôi có tất cả các url trong clipboard

Tôi cũng có chức năng này

function lsq(){
    ls -lh [email protected] | tr -s ' ' | cut -d' ' -f5,8
}

kích thước hiển thị (con người có thể đọc được) và tên tệp.

alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'

bí danh này là để hiển thị temerature

function separate() {
    python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}

với hàm này tôi có thể tính sản phẩm hoặc tổng của các đối số.

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()))";
}

Đây là chức năng hữu ích giúp phân tách đầu vào tiêu chuẩn được phân tách bằng regex và sau đó tham gia kết quả.

function factorial() {
    seq -s* $1 | bc
}

chức năng giai thừa

function wiki() { Dig +short txt $1.wp.dg.cx; }

Hàm này hiển thị văn bản wiki qua DNS

Tôi cũng có ba màu sắc

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]
}

Hàm này xác nhận tệp băm md5.

điều này sẽ hiển thị thông báo lỗi cho một mã nhất định

function strerror() { python -c "import os; print os.strerror($1)"; }

Bạn có thể in tất cả các tin nhắn với

alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
7
jcubic

Umount thiết bị được gắn cuối cùng:

mount /media/whatever
...
u!mo

!mo mở rộng đến lệnh cuối cùng bắt đầu bằng mo (ít nhất là trong bash). Đôi khi một người làm mv ở giữa, vì vậy u!m sẽ không làm việc thường xuyên.

7
Roberto Bonvallet

Một mẹo ZSH hữu ích khác:

Xử lý đầu ra của lệnh dưới dạng tệp:

emacs =(hg cat -r 100 somefile)

Điều này mở ra một phiên bản cũ của tệp được theo dõi Mercurial trong emacs để xem được tô sáng theo cú pháp. Nếu không có điều đó, tôi sẽ phải loay hoay với hg revert, hg archive hoặc gửi rõ ràng hg cat xuất ra một tệp tạm thời.

Tất nhiên, điều này hoạt động với bất kỳ chương trình nào mở tệp và bất kỳ chương trình nào in ra đầu ra tiêu chuẩn.

6
Matthew Flaschen

Một tính năng dành riêng cho ZSH là các bí danh hậu tố, được đặt bằng cách cho alias the -s cờ:

alias -s ext=program

Nếu một phần mở rộng nhất định có bí danh hậu tố, bạn có thể thực thi trực tiếp một tệp có phần mở rộng đó và ZSH sẽ khởi chạy chương trình đã cho và truyền tên tệp làm đối số. Vì vậy, nếu bí danh trên có hiệu lực, các dòng này là tương đương:

/path/to/foo.ext
program /path/to/foo.ext
5
Michael Mrozek

Một trong những tính năng ZSH yêu thích mọi thời đại của tôi được đặt tên là các thư mục. Bạn có thể xuất một biến có tên đã cho, với giá trị trỏ đến một đường dẫn nhất định:

export foo=/usr/bin

Bây giờ bạn có thể sử dụng ~foo trong một lệnh để chỉ /usr/bin:

cd ~foo
~foo/ls
cat ~foo/filename
5
Michael Mrozek
  • Lệnh không làm gì : như trong

    while :; do :; done
    
  • Mở rộng cú đúp kết hợp với các vòng lặp:

    for c in {1..3}; do :; done
    
  • ! toán tử và toán tử ngắn mạch ||&&

    [ -d /tmp/dir ] || mkdir /tmp/dir
    
    if ! ping 34.41.34.1; then :; fi
    
  • sử dụng shell phụ thay vì pop/Push (có ích trong các tập lệnh)

    ~$ ( cd /tmp; echo $PWD )
    /tmp
    ~$
    
  • loại what-is lệnh 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 () 
    { 
         :
    
    }
    
  • cũng rất hay: đây-chuỗi

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
    
  • và yêu thích của tôi: chuyển hướng trong danh sách các lệnh

    { w; ps; ls /tmp; } 2>/dev/null |less
    
4
artistoex

Xem cái này câu hỏi.

Khi bạn chạy 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

dòng cuối cùng chứa grep đôi khi hơi anoying

Bạn có thể thoát khỏi điều này bằng cách chạy 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

cập nhật : hoặc chỉ chạy pgrep string

4
Stefan

Đôi khi, cài đặt bash sao cho rm được đặt bí danh là rm -i và do đó yêu cầu xác nhận cho mỗi tệp bị xóa. Khi tôi thỉnh thoảng làm việc trên một tài khoản như vậy, tôi sử dụng \rm để truy xuất hành vi ban đầu của rm mà không thay đổi cấu hình người dùng.

3
mouviciel

Tôi thích chucking nhiều thứ nhất có thể vào PS1 của mình. Một số điều hữu ích cần nhớ:

\e[s\e[u lưu và bỏ vị trí con trỏ tương ứng. Tôi sử dụng điều này để tạo một 'thanh thông tin' ở đầu màn hình, một vài dòng dài, có thể phù hợp với nhiều thứ hơn. Thí dụ:

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\]\$ '

Kết hợp với alias clear='echo -e "\e[2J\n"'. Hãy thử nó!

Ngoài ra, Prompt_COMMAND biến xác định một lệnh để thực thi trước PS1 mỗi lần.

Một số khác là lệnh bg. Nếu bạn quên đặt & ở cuối lệnh, chỉ cần nhấn ^Z và gõ bg, và nó chạy trong nền.

3
Lucas Jones

Hiển thị nhánh và trạng thái Git trong Lời nhắc

[.__.] xuất GIT_PS1_SHOWDIRTYSTATE = true [.__.] [.__ sau đó [.__.] PS1 = '$ {debian_chroot: + ($ debian_chroot)}\[\ 033 [01; 32m \]\u @\h\[\ 033 [00m \]:\[\ 033 [01; 34m \]\w\[\ 033 [00m \] $ (__ git_ps1 "#% s")\$ '[.__.] Khác [.__.] PS1 =' $ {debian_chroot: + ($ debian_chroot)}\u @\h:\w $ (__ git_ps1 "#% s")\$ '[.__.] fi [.__.]
3
Bauna

Lệnh yêu thích của tôi là 'tìm', tôi sử dụng nó ở mọi nơi ... ví dụ:

find . -name "*.log" -exec ls -l {} \; | grep "$(find . -name "*.log" -exec ls -l {} \;| nawk '{print $5}' | sort -n | tail )"

Chỉ hiển thị các tập tin nặng nhất ở định dạng ls -l (dài).

Sau đó, nếu bạn cần mã của mình với quyền 0640, chỉ cần tìm kiếm:

find . \( \( ! -perm 0640 \) -a \( -name "*.cpp" -o -name "*.h" \) \) -ls | nawk '{print $3"\t"$11}'

hoặc thay thế:

find . \( -name "*.cpp" -o -name "*.h" \) | xargs chmod 640

Sau đó, bạn có cần một biểu tượng và không biết nó ở đâu ??

(
  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
)

Các tệp mới hơn XFILE ??

find . -newer XFILE -type f

Vâng, "tìm" rulez!

3
D4RIO

Một lần rất thường xuyên khi bạn gõ một lệnh dài và trước khi hoàn thành, bạn nhận ra rằng nó sẽ không hoạt động ngay lập tức, bởi vì bạn cần chạy một cái gì đó khác trước đó (ví dụ: đã nhập git commit -m "long commit message here"), bạn có thể nhấn ^A^K để đi đến đầu dòng và giết nó (lưu vào bộ đệm), tiếp theo chạy một lệnh để sửa chữa mọi thứ, và cuối cùng là ^Y để dán lệnh bị giết và tiếp tục. Tiết kiệm rất nhiều gõ lại. Tất cả điều này, tất nhiên là khi readline ở chế độ Emacs.

Một trình tiết kiệm thời gian khác: mkdir -p some/nested/dirs/to/be/created tạo tất cả các thư mục trong một đường dẫn nếu chúng bị thiếu.

3
alex

Hiển thị một nghệ thuật Nice ascii của cây xử lý hiện tại, với quy trình chuyên sâu cpu nhất được tô sáng.

while true; do 
  clear; 
  pstree $( ps -eo pid --sort %cpu | tail -n 1 ); 
  sleep 1;
done

Giết nó bằng Ctrl + C

3
Stefan

Xem đầu ra lệnh được cập nhật mỗi n giây

watch -n 60 df -h (displays df -h every 60 seconds)

Hiển thị số liệu thống kê về thiết bị mạng wlan0

ip -s link ls wlan0

Hiển thị bảng định tuyến cho thiết bị eth1

ip route ls dev eth1

Hiển thị số liệu thống kê cho tất cả các gói bộ định tuyến đi qua để đến Máy chủ

mtr --interval 5 HOSTNAME

Tham khảo các bản ghi DNS ngược cho tên máy chủ trên NETWORK

nmap -sL NETWORK

Điểm chuẩn một trang web

ab

Nhận tất cả các liên kết từ một trang web

lynx -dump http://www.yahoo.com | awk '/http/{print $2}'

Hiển thị cổng mặc định

netstat -rn | awk '/UG/{print $2}'

Viết lỗi tiêu chuẩn vào một tập tin

foo 2> errors.txt

Chuyển hướng stderr sang stdout

foo 2>&1

Chuyển hướng cả stderr và stdout vào cùng một tệp.

foo > file.txt 2>&1
2
boardstretcher
# 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}'
2
SergioAraujo

Thay thế các phần của lệnh trước:

^Tìm kiếm^thay thế

$ echo a b c d
a b c d
$ ^b c^X
echo a X d
a X d

Tuyệt vời cho lỗi chính tả:

$ mkae
-bash: mkae: command not found
$ ^ka^ak
make
[...]
2
user6362

Tóm tắt kích thước thư mục, với kích thước con người giảm dần

du -hs */ | sort -hr

ví dụ.

10.2G   foo/
4M      bar/
2
Eric Fortis

mở rộng sao đôi với zsh (đệ quy đi xuống cây thư mục, không chỉ một cấp, tương tự như $(find ! -type d):

grep string **/*.cc
2
Andre Holzner

tính năng yêu thích của tôi là KHÔNG MÀU SẮC! =)

TERM = xterm-mono hoặc TERM = linux-m tùy thuộc vào hệ điều hành ...

Tôi thực sự thích IRSSI đen trắng, mc và bất kỳ công cụ "Giao diện người dùng văn bản" nào khác

2
holms

ZSH có bí danh toàn cầu. Nó mở rộng bí danh bất cứ nơi nào trong dòng lệnh. Tôi đã tìm thấy điều này hữu ích cho tên máy chủ:

Ví dụ.:

alias -g sub='sub.domain.tld'

Sau đó, tôi có thể làm ví dụ:

sftp sub
ssh sub

vân vân.

2
Matthew Flaschen

Không thực sự là một lót nhưng tôi nghĩ nó hữu ích. Chuyển đổi nhiều tệp thành chữ hoa, ví dụ file_to_upper *php *c. Có nhiều trường hợp tương tự như chuyển đổi thành thấp hơn, đổi tên tất cả các tệp theo hậu tố/tiền tố, v.v.

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
}
1
sakisk

lấy tên tệp với dấu thời gian gần đây nhất trong thư mục hiện tại:

latest () { ls -lrt | tail -1 | awk '{print $NF}' }

1
Moses Xu
function calc() { echo $* p | dc }

dc là máy tính RPN; Hàm này cho phép tôi nhập biểu thức dưới dạng đối số lệnh:

$ calc 5 3 +
8
1
André Paramés

Hiển thị lời nhắc trong đó tên máy chủ là đậm. Tôi đã thử nhắc nhở màu sắc trong một thời gian, nhưng màu sắc đôi khi sẽ trông xấu tùy thuộc vào nền. Bold làm việc cho tôi cho nền sáng, nền tối, nền màu xanh, vv.

Đây là trong .bashrc của tôi:

    bold=$(tput bold)
    reset=$(tput sgr0)
    export PS1="\[email protected]\[$bold\]\h\[$reset\]:\w \$ "
1
Stefan Lasiewski

Tôi thấy hữu ích sau đây khi liên tục chuyển đổi giữa Windows và Unix/Linux:

alias dir="ls -l"
alias copy="cp"
alias del="rm"
1
artdanil

Đây là cho zsh, không phải bash, fyi (nếu bạn chưa sử dụng nó, bạn sẽ không hối tiếc khi dùng thử). Điều này thực sự hữu ích để nhanh chóng gõ các đường dẫn dài để chuyển scp. Nó hoạt động giống như sử dụng để hoàn thành hoặc liệt kê tên tệp/thư mục có sẵn.

Thí dụ

scp [email protected]:/home/webdev/domains/example.com/http.public/long<tab>

sẽ hoàn thành đường dẫn đến /home/webdev/domains/example.com/http.public/longdirname.

Tôi rất tệ trong các ví dụ, nhưng điều đó sẽ cho bạn ý tưởng. Hãy thử nó, nó thực sự có thể giúp bạn tiết kiệm ngón tay từ gõ.

# 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
1
pho3nixf1re

ReTTY , cho phép bạn di chuyển một chương trình đang chạy từ thiết bị đầu cuối này sang thiết bị đầu cuối khác. Bằng cách đó, nếu bạn có chương trình ncurses chạy bên ngoài màn hình, tmux hoặc ssh, bạn có thể đính kèm nó vào phiên ssh hoặc màn hình được nối mạng hoặc phiên tmux bằng cách chạy ReTTY bên trong thiết bị đầu cuối mà bạn muốn sử dụng chương trình được đề cập. Nói cách khác, nó tương tự như màn hình và tmux nhưng với ngoại lệ là (a) nó chỉ có thể chạy một chương trình tại một thời điểm và (b) nó có thể chạy sau bạn bắt đầu quá trình con.

1
mmirate

Yêu thích của tôi là sử dụng lệnh python để tạo máy chủ http tạm thời:

python -m SimpleHTTPServer

và truy cập các tệp từ máy này qua lan như:

http://192.168.1,70:80

Một cách khác là tải xuống tệp tar ở dạng trích xuất như:

wget -qO - http://192.168.1,70:8000/test.bz2 | tar xjvf -

Ở đây, liên kết có thể là bất kỳ trên www và bz2 có thể là gz, tgz hoặc bz2 cho vấn đề đó.

1
SHW

Tự động sao lưu các tập tin dấu chấm ưa thích của bạn

Mô-đun .bashrc -> .bashrc.d

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

An toàn hơn rm, tương thích với Linux và Mac OS X

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
}

Hành động 'cd' siêu nóng

# 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 ../../../../../../../../../../../../../../..'

Readline là một vị thần thực sự của bạn.

bind -p | egrep -v '(not|self)' # No existential jokes included.

Phông chữ thiết bị đầu cuối

Sau khi nhìn vào bazillions của phông chữ, tôi sử dụng 14 pt Monaco, Anti-aliased với iTerm2.

Trên máy Mac (Ứng dụng): Hãy thử ứng dụng này cung cấp các ràng buộc chính.

KeyCue (tm) (r) (c) ($) đưa ra bối cảnh của gần như BẤT K app ứng dụng đang chạy nào chỉ bằng cách giữ command.

1
dhchdhd

tính năng tự động đẩy của zsh:

setopt autopushd

và cùng với đó:

alias dirs='dirs -v'

Vì vậy, bất cứ lúc nào, tôi có thể nhập dirs và tôi nhận được lịch sử của nơi tôi đã đến:

0   /var/log
1   /tmp
2   /usr/local/bin
3   ~

và sau đó tôi có thể cd quay lại ví dụ: /usr/local/bin bằng cách gõ:

cd ~2
1
Andre Holzner

Không có "thủ thuật" nào dưới đây là thách thức về mặt kỹ thuật hay ấn tượng, nhưng chúng có một số tác động đối với người khác. Nếu chúng ta không thể sử dụng công việc của mình để làm cho cuộc sống của chúng ta hạnh phúc hơn, thì chúng ta nên suy nghĩ lại về một số điều.

Tôi thích alias. Thủ thuật yêu thích của tôi là chỉnh sửa ~/.bash_aliases trên máy tính của bạn gái tôi khi cô ấy bị thiếu và thêm một dòng như:

alias gfname='echo Myname is thinking of you'

hoặc một trích dẫn lãng mạn khác.

Một "mẹo" khác tôi đặc biệt thích là:

#!/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`

trong đó 123 là người mà tôi muốn chúc mừng sinh nhật và mails.txt chứa thông điệp mà tôi muốn viết dưới dạng nội dung của email. Ngủ 1; đôi khi là cần thiết vì có giới hạn về fork (). Bạn cũng có thể sử dụng đối số dòng lệnh $1 Vân vân...

1
Dimitris Leventeas

Tôi có các thư mục có tên trong thư mục nhà của tôi là Tài liệu, Tải xuống, Temp, v.v với chữ cái đầu tiên viết hoa. Khi tôi làm việc trên thiết bị đầu cuối, thật khó chịu khi thay đổi phím đầu tiên khi bạn đang vào một thư mục. Chỉ cần nhập vào phần sau trong thiết bị đầu cuối của bạn và bash sẽ tự động sửa trường hợp cho bạn.

shopt -s nocaseglob
1
tsudot

Sử dụng pgrep foo thay vì ps aux | grep foo nếu bạn muốn tìm xem có bao nhiêu trường hợp foo đang chạy và các pids của họ:

ví dụ. thay vì ps aux | grep firefox, sử dụng pgrep firefox

1
user1888

Tôi không thể sống mà không có

set editing-mode vi
set blink-matching-paren on

trong ~/.inputrc của tôi.

Kích hoạt chúng trong mọi ứng dụng kích hoạt readline. Chỉ kích hoạt chỉnh sửa dòng lệnh vi trong Shell hoạt động thông qua:

set -o vi

Do đó, nhấn ESC hoặc CTRL + [giúp bạn có chế độ vi-lệnh nổi tiếng. Và bạn có thể sử dụng các lệnh vi mạnh mẽ ở khắp mọi nơi!

1
maxschlepzig

Có một trang web tuyệt vời cho việc này tại: http://www.commandlinefu.com/commands/browse

1
Andrew Stern

Sở thích cá nhân của tôi là

find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'

Những gì lệnh trên làm là tìm một tệp có tên x và sau đó tìm kiếm tệp đã nói cho bất kỳ mẫu nào bạn đang tìm kiếm. Cực kỳ hữu ích nếu bạn đang tìm kiếm một đoạn mã cụ thể trong một tệp nằm ở đâu đó trong thư mục con của bạn.

0
Mark D
find path expr -exec ls -ld {} \;

Cách dễ dàng để xem quyền sở hữu, quyền, kích thước (nếu tệp) và các đặc điểm khác của bất kỳ biểu thức 'tìm thấy' nào của bạn trả về.

0
TCKMusing

Tôi thường nhận thấy, ngay sau khi bắt đầu một lệnh 15 phút, tôi sẽ muốn thêm một số nội dung khác vào dòng lệnh bằng cách sử dụng &&. Thay vì làm gián đoạn công việc đã chạy, tôi có xu hướng sử dụng at để xếp hàng thứ hai, cho bản thân tôi một thời gian dài hơn tôi không cần phải xem thiết bị đầu cuối.

Nói chung, at xếp hàng công việc để thực hiện tại một thời điểm nhất định:

$ at 14:30
> myscript
> anotherscript
> <CTRL-D>

Các mục nhập vào hàng đợi có thể được xem bằng atq và được xóa bằng atrm.

Một bổ sung khác cho các mẹo tùy chỉnh bash Prompt: Tôi thích đảo ngược Prompt, vì điều này mang lại tín hiệu thị giác tốt nơi đầu ra lệnh bắt đầu và kết thúc trong danh sách đầu cuối dài. Điều này hoạt động tốt cho cả nền sáng và tối.

export PS1="\[\e[7m\][\[email protected]\h \w]\[\e[0m\]$ "
0
jstarek

đồng bộ hóa, đồng bộ hóa, đồng bộ hóa, khởi động lại

đôi khi có thể thực sự hữu ích Hãy cẩn thận !

0
Tony Lambert

Tôi thấy việc hiểu các nét chính của bash dẫn đến việc bắn phá hiệu quả hơn, và rất nhiều trong số chúng là trực tiếp từ emacs làm rõ cách sử dụng của chúng (tức là meta-XXX là phiên bản anh lớn của ctrl-XXX lệnh thường).

Phím "meta" thường là phím "alt", nhưng cũng có thể là phím "esc". ví dụ. meta-f có thể nhận được bằng alt-f hoặc là esc f.

Để ánh xạ phím alt hoạt động, bạn có thể phải bỏ "phím truy cập menu" hoặc tương đương trong các tùy chọn bảng điều khiển. Về cơ bản nếu bạn nhấn alt-f và nhận menu menu Prompt, hãy tắt các menu truy cập phím alt.

ctrl-a / ctrl-e : move to start / end of line những điều cơ bản bạn không thể làm mà không có

ctrl-f, meta-f : forward char/Word nhấn alt-f sẽ đưa bạn chuyển tiếp "1 Word" mà trên dòng lệnh gần như là một lệnh hoặc đối số

ctrl-b, meta-b : backwards char/Word giống như alt-f, nhưng lùi lại để nhảy lùi qua dòng lệnh

ctrl-d, meta-d : delete char/Word nhấn alt-d sẽ xóa (đến hết) Word hiện tại dưới con trỏ. nhanh hơn nhiều sau đó giữ xóa trong 30 giây. Hữu ích khi tab của bạn hoàn thành ở giữa một cái gì đó và muốn chuyển tiếp xóa đến cuối Word.

ctrl-k : kill line xóa đến cuối dòng

ctrl-u : undo ví dụ. gõ mật khẩu và bạn biết rằng bạn đã nhầm nó ở đâu đó, thay vì nhấn backspace 20 lần, chỉ cần nhấn ctrl-u. cũng xóa dòng lệnh hiện tại.

meta-# : insert comment điều này thật tuyệt vời để giữ cho dòng lệnh của bạn đang xây dựng như một bình luận trước khi chạy nó nếu bạn cần làm gì khác trước. nó sẽ đi vào lịch sử lệnh của bạn nhưng không chạy.

ctrl-r : reverse search tìm kiếm ngược qua lịch sử Shell của bạn (lặp lại ctrl-r cho trận đấu tiếp theo)

ctrl-g : abort nếu bạn ở giữa ctrl-r và muốn quay lại nơi bạn đang gõ, chỉ cần hủy tìm kiếm của bạn với ctrl-g

meta-space / ctrl-x ctrl-x : set mark and jump to mark nếu bạn cần nhanh chóng nhảy đến một vị trí trong dòng lệnh của mình, trước tiên hãy đặt dấu, sau đó nhảy trở lại vị trí đó bằng ctrl-x ctrl-x. Lưu ý bạn có thể phải sử dụng esc-space để lấy dấu được đặt là alt-space thường bị ràng buộc để đưa xuống menu console.

ctrl-] <char> : quick jump to <char> nhảy về phía trước để nhân vật gõ sau ctrl-] trên dòng lệnh. Anh trai lớn Meta-ctrl-] <char> nhảy lùi lại.

0
markf

Favs của tôi dưới đây. Tôi sử dụng hầu hết chúng thường xuyên

df -k (kiểm tra hệ thống tập tin) kill hoặc kill -9 (kill a process) set -o vi (đặt dòng lệnh của bạn thành vi) topas (công cụ hiệu suất) mount/unmount

oh yeah và làm thế nào tôi có thể quên> (để chuyển hướng đầu ra sang một tệp) ls> /tmp/tmp.txt

Nhiều hơn nhưng một số ra khỏi đầu của tôi.

0
vegasbrianc