美文网首页
linux bash sheet

linux bash sheet

作者: busy_living | 来源:发表于2019-03-24 17:45 被阅读0次

    ##############################################################################

    #BASH CHEATSHEET (中文速查表)  -  by skywind (created on 2018/02/14)

    #Version: 46, Last Modified: 2019/02/25 16:53

    #https://github.com/skywind3000/awesome-cheatsheets

    ##############################################################################

    ##############################################################################

    #常用快捷键(默认使用 Emacs 键位)

    ##############################################################################

    CTRL+A#移动到行首,同

    CTRL+B#向后移动,同

    CTRL+C#结束当前命令

    CTRL+D#删除光标前的字符,同 ,或者没有内容时,退出会话

    CTRL+E#移动到行末,同

    CTRL+F#向前移动,同

    CTRL+G#退出当前编辑(比如正在 CTRL+R 搜索历史时)

    CTRL+H#删除光标左边的字符,同

    CTRL+K#删除光标位置到行末的内容

    CTRL+L#清屏并重新显示

    CTRL+N#移动到命令历史的下一行,同

    CTRL+O#类似回车,但是会显示下一行历史

    CTRL+P#移动到命令历史的上一行,同

    CTRL+R#历史命令反向搜索,使用 CTRL+G 退出搜索

    CTRL+S#历史命令正向搜索,使用 CTRL+G 退出搜索

    CTRL+T#交换前后两个字符

    CTRL+U#删除字符到行首

    CTRL+V#输入字符字面量,先按 CTRL+V 再按任意键

    CTRL+W#删除光标左边的一个单词

    CTRL+X#列出可能的补全

    CTRL+Y#粘贴前面 CTRL+u/k/w 删除过的内容

    CTRL+Z#暂停前台进程返回 bash,需要时可用 fg 将其切换回前台

    CTRL+_#撤销(undo),有的终端将 CTRL+_ 映射为 CTRL+/ 或 CTRL+7

    ALT+b#向后(左边)移动一个单词

    ALT+d#删除光标后(右边)一个单词

    ALT+f#向前(右边)移动一个单词

    ALT+t#交换字符

    ALT+BACKSPACE#删除光标前面一个单词,类似 CTRL+W,但不影响剪贴板

    CTRL+X CTRL+X#连续按两次 CTRL+X,光标在当前位置和行首来回跳转

    CTRL+X CTRL+E#用你指定的编辑器,编辑当前命令

    ##############################################################################

    #BASH 基本操作

    ##############################################################################

    exit#退出当前登陆

    env#显示环境变量

    echo$SHELL#显示你在使用什么 SHELL

    bash#使用 bash,用 exit 返回

    which bash#搜索 $PATH,查找哪个程序对应命令 bash

    whereis bash#搜索可执行,头文件和帮助信息的位置,使用系统内建数据库

    whatis bash#查看某个命令的解释,一句话告诉你这是干什么的

    clear#清初屏幕内容

    reset#重置终端(当你不小心 cat 了一个二进制,终端状态乱掉时使用)

    ##############################################################################

    #目录操作

    ##############################################################################

    cd#返回自己 $HOME 目录

    cd{dirname}#进入目录

    pwd#显示当前所在目录

    mkdir {dirname}#创建目录

    mkdir -p {dirname}#递归创建目录

    pushd{dirname}#目录压栈并进入新目录

    popd#弹出并进入栈顶的目录

    dirs-v#列出当前目录栈

    cd-#回到之前的目录

    cd-{N}#切换到目录栈中的第 N个目录,比如 cd -2 将切换到第二个

    ##############################################################################

    #文件操作

    ##############################################################################

    ls#显示当前目录内容,后面可接目录名:ls {dir} 显示指定目录

    ls -l#列表方式显示目录内容,包括文件日期,大小,权限等信息

    ls -1#列表方式显示目录内容,只显示文件名称,减号后面是数字 1

    ls -a#显示所有文件和目录,包括隐藏文件(.开头的文件/目录名)

    ln -s {fn} {link}#给指定文件创建一个软链接

    cp {src} {dest}#拷贝文件,cp -r dir1 dir2 可以递归拷贝(目录)

    rm {fn}#删除文件,rm -r 递归删除目录,rm -f 强制删除

    mv {src} {dest}#移动文件,如果 dest 是目录,则移动,是文件名则覆盖

    touch {fn}#创建或者更新一下制定文件

    cat {fn}#输出文件原始内容

    any_cmd>{fn}#执行任意命令并将标准输出重定向到指定文件

    more {fn}#逐屏显示某文件内容,空格翻页,q 退出

    less {fn}#更高级点的 more,更多操作,q 退出

    head {fn}#显示文件头部数行,可用 head -3 abc.txt 显示头三行

    tail {fn}#显示文件尾部数行,可用 tail -3 abc.txt 显示尾部三行

    tail -f {fn}#持续显示文件尾部数据,可用于监控日志

    nano {fn}#使用 nano 编辑器编辑文件

    vim {fn}#使用 vim 编辑文件

    diff {f1} {f2}#比较两个文件的内容

    wc {fn}#统计文件有多少行,多少个单词

    chmod 644 {fn}#修改文件权限为 644,可以接 -R 对目录循环改权限

    chgrp group {fn}#修改文件所属的用户组

    chown user1 {fn}#修改文件所有人为 user1, chown user1:group1 fn 可以修改组

    file {fn}#检测文件的类型和编码

    basename {fn}#查看文件的名字(不包括路径)

    dirname {fn}#查看文件的路径(不包括名字)

    grep {pat} {fn}#在文件中查找出现过 pat 的内容

    grep -r {pat}.#在当前目录下递归查找所有出现过 pat 的文件内容

    stat {fn}#显示文件的详细信息

    ##############################################################################

    #用户管理

    ##############################################################################

    whoami#显示我的用户名

    who#显示已登陆用户信息,w / who / users 内容略有不同

    w#显示已登陆用户信息,w / who / users 内容略有不同

    users#显示已登陆用户信息,w / who / users 内容略有不同

    passwd#修改密码,passwd {user} 可以用于 root 修改别人密码

    finger {user}#显示某用户信息,包括 id, 名字, 登陆状态等

    adduser {user}#添加用户

    deluser {user}#删除用户

    w#查看谁在线

    su#切换到 root 用户

    su -#切换到 root 用户并登陆(执行登陆脚本)

    su {user}#切换到某用户

    su -{user}#切换到某用户并登陆(执行登陆脚本)

    id {user}#查看用户的 uid,gid 以及所属其他用户组

    id -u {user}#打印用户 uid

    id -g {user}#打印用户 gid

    write {user}#向某用户发送一句消息

    last#显示最近用户登陆列表

    last {user}#显示登陆记录

    lastb#显示失败登陆记录

    lastlog#显示所有用户的最近登陆记录

    sudo {command}#以 root 权限执行某命令

    ##############################################################################

    #进程管理

    ##############################################################################

    ps#查看当前会话进程

    ps ax#查看所有进程,类似 ps -e

    ps aux#查看所有进程详细信息,类似 ps -ef

    ps auxww#查看所有进程,并且显示进程的完整启动命令

    ps -u {user}#查看某用户进程

    ps axjf#列出进程树

    ps xjf -u {user}#列出某用户的进程树

    ps -eo pid,user,command#按用户指定的格式查看进程

    ps aux|grep httpd#查看名为 httpd 的所有进程

    ps --ppid {pid}#查看父进程为 pid 的所有进程

    pstree#树形列出所有进程,pstree 默认一般不带,需安装

    pstree {user}#进程树列出某用户的进程

    pstree -u#树形列出所有进程以及所属用户

    pgrep {procname}#搜索名字匹配的进程的 pid,比如 pgrep apache2

    kill{pid}#结束进程

    kill-9 {pid}#强制结束进程,9/SIGKILL 是强制不可捕获结束信号

    kill-KILL {pid}#强制执行进程,kill -9 的另外一种写法

    kill-l#查看所有信号

    kill-l TERM#查看 TERM 信号的编号

    killall {procname}#按名称结束所有进程

    pkill {procname}#按名称结束进程,除名称外还可以有其他参数

    top#查看最活跃的进程

    top -u {user}#查看某用户最活跃的进程

    any_command&#在后台运行某命令,也可用 CTRL+Z 将当前进程挂到后台

    jobs#查看所有后台进程(jobs)

    bg#查看后台进程,并切换过去

    fg#切换后台进程到前台

    fg{job}#切换特定后台进程到前台

    trapcmd sig1 sig2#在脚本中设置信号处理命令

    trap""sig1 sig2#在脚本中屏蔽某信号

    trap- sig1 sig2#恢复默认信号处理行为

    nohup {command}#长期运行某程序,在你退出登陆都保持它运行

    nohup {command}&#在后台长期运行某程序

    disown{PID|JID}#将进程从后台任务列表(jobs)移除

    wait#等待所有后台进程任务结束

    ##############################################################################

    #常用命令:SSH / 系统信息 / 网络

    ##############################################################################

    ssh user@host#以用户 user 登陆到远程主机 host

    ssh -p {port} user@host#指定端口登陆主机

    ssh-copy-id user@host#拷贝你的 ssh key 到远程主机,避免重复输入密码

    scp {fn} user@host:path#拷贝文件到远程主机

    scp user@host:path dest#从远程主机拷贝文件回来

    scp -P {port} ...#指定端口远程拷贝文件

    uname -a#查看内核版本等信息

    man {help}#查看帮助

    man -k {keyword}#查看哪些帮助文档里包含了该关键字

    info {help}#查看 info pages,比 man 更强的帮助系统

    uptime#查看系统启动时间

    date#显示日期

    cal#显示日历

    vmstat#显示内存和 CPU 使用情况

    vmstat 10#每 10 秒打印一行内存和 CPU情况,CTRL+C 退出

    free#显示内存和交换区使用情况

    df#显示磁盘使用情况

    du#显示当前目录占用,du . --max-depth=2 可以指定深度

    uname#显示系统版本号

    hostname#显示主机名称

    showkey -a#查看终端发送的按键编码

    ping {host}#ping 远程主机并显示结果,CTRL+C 退出

    ping -c N {host}#ping 远程主机 N 次

    traceroute {host}#侦测路由连通情况

    mtr {host}#高级版本 traceroute

    host {domain}#DNS 查询,{domain} 前面可加 -a 查看详细信息

    whois {domain}#取得域名 whois 信息

    dig {domain}#取得域名 dns 信息

    route -n#查看路由表

    netstat -a#列出所有端口

    netstat -an#查看所有连接信息,不解析域名

    netstat -anp#查看所有连接信息,包含进程信息(需要 sudo)

    netstat -l#查看所有监听的端口

    netstat -t#查看所有 TCP 链接

    netstat -lntu#显示所有正在监听的 TCP 和 UDP 信息

    netstat -lntup#显示所有正在监听的 socket 及进程信息

    netstat -i#显示网卡信息

    netstat -rn#显示当前系统路由表,同 route -n

    ss -an#比 netstat -an 更快速更详细

    ss -s#统计 TCP 的 established, wait 等

    wget {url}#下载文件,可加 --no-check-certificate 忽略 ssl 验证

    wget -qO- {url}#下载文件并输出到标准输出(不保存)

    curl -sL {url}#同 wget -qO- {url} 没有 wget 的时候使用

    sz {file}#发送文件到终端,zmodem 协议

    rz#接收终端发送过来的文件

    ##############################################################################

    #变量操作

    ##############################################################################

    varname=value#定义变量

    varname=valuecommand#定义子进程变量并执行子进程

    echo$varname#查看变量内容

    echo$$#查看当前 shell 的进程号

    echo$!#查看最近调用的后台任务进程号

    echo$?#查看最近一条命令的返回码

    exportVARNAME=value#设置环境变量(将会影响到子进程)

    array[0]=valA#定义数组

    array[1]=valB

    array[2]=valC

    array=([0]=valA [1]=valB [2]=valC)#另一种方式

    array=(valA valB valC)#另一种方式

    ${array[i]}#取得数组中的元素

    ${#array[@]}#取得数组的长度

    ${#array[i]}#取得数组中某个变量的长度

    declare-a#查看所有数组

    declare-f#查看所有函数

    declare-F#查看所有函数,仅显示函数名

    declare-i#查看所有整数

    declare-r#查看所有只读变量

    declare-x#查看所有被导出成环境变量的东西

    declare-p varname#输出变量是怎么定义的(类型+值)

    ${varname:-word}#如果变量不为空则返回变量,否则返回 word

    ${varname:=word}#如果变量不为空则返回变量,否则赋值成 word 并返回

    ${varname:?message}#如果变量不为空则返回变量,否则打印错误信息并退出

    ${varname:+word}#如果变量不为空则返回 word,否则返回 null

    ${varname:offset:len}#取得字符串的子字符串

    ${variable#pattern}#如果变量头部匹配 pattern,则删除最小匹配部分返回剩下的

    ${variable##pattern}#如果变量头部匹配 pattern,则删除最大匹配部分返回剩下的

    ${variable%pattern}#如果变量尾部匹配 pattern,则删除最小匹配部分返回剩下的

    ${variable%%pattern}#如果变量尾部匹配 pattern,则删除最大匹配部分返回剩下的

    ${variable/pattern/str}#将变量中第一个匹配 pattern 的替换成 str,并返回

    ${variable//pattern/str}#将变量中所有匹配 pattern 的地方替换成 str 并返回

    ${#varname}#返回字符串长度

    *(patternlist)#零次或者多次匹配

    +(patternlist)#一次或者多次匹配

    ?(patternlist)#零次或者一次匹配

    @(patternlist)#单词匹配

    !(patternlist)#不匹配

    array=($text)#按空格分隔 text 成数组,并赋值给变量

    IFS="/"array=($text)#按斜杆分隔字符串 text 成数组,并赋值给变量

    text="${array[*]}"#用空格链接数组并赋值给变量

    text=$(IFS=/;echo"${array[*]}")#用斜杠链接数组并赋值给变量

    A=( foo bar"a  b c"42 )#数组定义

    B=("${A[@]:1:2}")#数组切片:B=( bar "a  b c" )

    C=("${A[@]:1}")#数组切片:C=( bar "a  b c" 42 )

    echo"${B[@]}"#bar a  b c

    echo"${B[1]}"#a  b c

    echo"${C[@]}"#bar a  b c 42

    echo"${C[@]:-2:2}"#a  b c 42  减号前的空格是必须的

    $(UNIX command)#运行命令,并将标准输出内容捕获并返回

    varname=$(id -u user)#将用户名为 user 的 uid 赋值给 varname 变量

    num=$(expr 1 + 2)#兼容 posix sh 的计算,使用 expr 命令计算结果

    num=$(expr$num+ 1)#数字自增

    expr 2\*\(2 + 3\)#兼容 posix sh 的复杂计算,输出 10

    num=$((1+2))#计算 1+2 赋值给 num,使用 bash 独有的 $((..)) 计算

    num=$(($num+1))#变量递增

    num=$((num+1))#变量递增,双括号内的 $ 可以省略

    num=$((1+(2+3)*2))#复杂计算

    ##############################################################################

    #事件指示符

    ##############################################################################

    !!#上一条命令

    !^#上一条命令的第一个单词

    !$#上一条命令的最后一个单词

    !string#最近一条包含string的命令

    !^string1^string2#最近一条包含string1的命令, 快速替换为string2, 相当于!!:s/string1/string2/

    !## 本条命令之前所有的输入内容

    ##############################################################################

    #函数

    ##############################################################################

    #定义一个新函数

    functionmyfunc(){

    #$1 代表第一个参数,$N 代表第 N 个参数

    #$# 代表参数个数

    #$0 代表被调用者自身的名字

    #$@ 代表所有参数,类型是个数组,想传递所有参数给其他命令用 cmd "$@"

    #$* 空格链接起来的所有参数,类型是字符串

        {shell commands ...}

    }

    myfunc#调用函数 myfunc

    myfunc arg1 arg2 arg3#带参数的函数调用

    myfunc"$@"#将所有参数传递给函数

    myfunc"${array[@]}"#将一个数组当作多个参数传递给函数

    shift#参数左移

    unset-f myfunc#删除函数

    declare-f#列出函数定义

    ##############################################################################

    #条件判断(兼容 posix sh 的条件判断):man test

    ##############################################################################

    statement1&&statement2#and 操作符

    statement1||statement2#or 操作符

    exp1 -a exp2#exp1 和 exp2 同时为真时返回真(POSIX XSI扩展)

    exp1 -o exp2#exp1 和 exp2 有一个为真就返回真(POSIX XSI扩展)

    ( expression )#如果 expression 为真时返回真,输入注意括号前反斜杆

    !expression#如果 expression 为假那返回真

    str1 = str2#判断字符串相等,如 [ "$x" = "$y" ] && echo yes

    str1!= str2#判断字符串不等,如 [ "$x" != "$y" ] && echo yes

    str1<str2#字符串小于,如 [ "$x" \< "$y" ] && echo yes

    str2>str2#字符串大于,注意 < 或 > 是字面量,输入时要加反斜杆

    -n str1#判断字符串不为空(长度大于零)

    -z str1#判断字符串为空(长度等于零)

    -a file#判断文件存在,如 [ -a /tmp/abc ] && echo "exists"

    -d file#判断文件存在,且该文件是一个目录

    -e file#判断文件存在,和 -a 等价

    -f file#判断文件存在,且该文件是一个普通文件(非目录等)

    -r file#判断文件存在,且可读

    -s file#判断文件存在,且尺寸大于0

    -w file#判断文件存在,且可写

    -x file#判断文件存在,且执行

    -N file#文件上次修改过后还没有读取过

    -O file#文件存在且属于当前用户

    -G file#文件存在且匹配你的用户组

    file1 -nt file2#文件1 比 文件2 新

    file1 -ot file2#文件1 比 文件2 旧

    num1 -eq num2#数字判断:num1 == num2

    num1 -ne num2#数字判断:num1 != num2

    num1 -lt num2#数字判断:num1 < num2

    num1 -le num2#数字判断:num1 <= num2

    num1 -gt num2#数字判断:num1 > num2

    num1 -ge num2#数字判断:num1 >= num2

    ##############################################################################

    #分支控制:if 和经典 test,兼容 posix sh 的条件判断语句

    ##############################################################################

    test{expression}#判断条件为真的话 test 程序返回0 否则非零

    [ expression ]#判断条件为真的话返回0 否则非零

    test"abc"="def"#查看返回值 echo $? 显示 1,因为条件为假

    test"abc"!="def"#查看返回值 echo $? 显示 0,因为条件为真

    test-a /tmp;echo$?#调用 test 判断 /tmp 是否存在,并打印 test 的返回值

    [-a/tmp ];echo$?#和上面完全等价,/tmp 肯定是存在的,所以输出是 0

    testcond&&cmd1#判断条件为真时执行 cmd1

    [ cond ]&&cmd1#和上面完全等价

    [ cond ]&&cmd1||cmd2#条件为真执行 cmd1 否则执行 cmd2

    #判断 /etc/passwd 文件是否存在

    #经典的 if 语句就是判断后面的命令返回值为0的话,认为条件为真,否则为假

    iftest-e /etc/passwd;then

    echo"alright it exists ..."

    else

    echo"it doesn't exist ..."

    fi

    #和上面完全等价,[ 是个和 test 一样的可执行程序,但最后一个参数必须为 ]

    #这个名字为 "[" 的可执行程序一般就在 /bin 或 /usr/bin 下面,比 test 优雅些

    if[-e/etc/passwd ];then

    echo"alright it exists ..."

    else

    echo"it doesn't exist ..."

    fi

    #和上面两个完全等价,其实到 bash 时代 [ 已经是内部命令了,用 enable 可以看到

    [-e/etc/passwd ]&&echo"alright it exists"||echo"it doesn't exist"

    #判断变量的值

    if["$varname"="foo"];then

    echo"this is foo"

    elif["$varname"="bar"];then

    echo"this is bar"

    else

    echo"neither"

    fi

    #复杂条件判断,注意 || 和 && 是完全兼容 POSIX 的推荐写法

    if[$x-gt10 ]&&[$x-lt20 ];then

    echo"yes, between 10 and 20"

    fi

    #可以用 && 命令连接符来做和上面完全等价的事情

    [$x-gt10 ]&&[$x-lt20 ]&&echo"yes, between 10 and 20"

    #小括号和 -a -o 是 POSIX XSI 扩展写法,小括号是字面量,输入时前面要加反斜杆

    if[\($x-gt10\)-a\($x-lt20\)];then

    echo"yes, between 10 and 20"

    fi

    #同样可以用 && 命令连接符来做和上面完全等价的事情

    [\($x-gt10\)-a\($x-lt20\)]&&echo"yes, between 10 and 20"

    #判断程序存在的话就执行

    [-x/bin/ls ]&&/bin/ls -l

    #如果不考虑兼容 posix sh 和 dash 这些的话,可用 bash 独有的 ((..)) 和 [[..]]:

    https://www.ibm.com/developerworks/library/l-bash-test/index.html

    ##############################################################################

    #流程控制:while / for / case / until

    ##############################################################################

    #while 循环

    whilecondition;do

        statements

    done

    i=1

    while[$i-le10 ];do

    echo$i;

    i=$(expr$i+ 1)

    done

    #for 循环:上面的 while 语句等价

    foriin{1..10};do

    echo$i

    done

    forname [in list];do

        statements

    done

    #for 列举某目录下面的所有文件

    forfin/home/*;do

    echo$f

    done

    #bash 独有的 (( .. )) 语句,更接近 C 语言,但是不兼容 posix sh

    for((initialisation ; ending condition ; update));do

        statements

    done

    #和上面的写法等价

    for((i=0; i<10; i++));doecho$i;done

    #case 判断

    caseexpressionin

        pattern1 )

            statements ;;

        pattern2 )

            statements ;;

    *)

            otherwise ;;

    esac

    #until 语句

    untilcondition;do

        statements

    done

    #select 语句

    selectname[in list];do

    statements that can use$name

    done

    ##############################################################################

    #命令处理

    ##############################################################################

    commandls#忽略 alias 直接执行程序或者内建命令 ls

    builtincd#忽略 alias 直接运行内建的 cd 命令

    enable#列出所有 bash 内置命令,或禁止某命令

    help{builtin_command}#查看内置命令的帮助(仅限 bash 内置命令)

    eval$script#对 script 变量中的字符串求值(执行)

    ##############################################################################

    #输出/输入 重定向

    ##############################################################################

    cmd1|cmd2#管道,cmd1 的标准输出接到 cmd2 的标准输入

    <file#将文件内容重定向为命令的标准输入

    >file#将命令的标准输出重定向到文件,会覆盖文件

    >>file#将命令的标准输出重定向到文件,追加不覆盖

    >|file#强制输出到文件,即便设置过:set -o noclobber

    n>|file#强制将文件描述符 n的输出重定向到文件

    <>file#同时使用该文件作为标准输入和标准输出

    n<>file#同时使用文件作为文件描述符 n 的输出和输入

    n>file#重定向文件描述符 n 的输出到文件

    n<file#重定向文件描述符 n 的输入为文件内容

    n>&#将标准输出 dup/合并 到文件描述符 n

    n<&#将标准输入 dump/合并 定向为描述符 n

    n>&m#文件描述符 n 被作为描述符 m 的副本,输出用

    n<&m#文件描述符 n 被作为描述符 m 的副本,输入用

    &>file#将标准输出和标准错误重定向到文件

    <&-#关闭标准输入

    >&-#关闭标准输出

    n>&-#关闭作为输出的文件描述符 n

    n<&-#关闭作为输入的文件描述符 n

    diff<(cmd1)<(cmd2)#比较两个命令的输出

    ##############################################################################

    #文本处理 - cut

    ##############################################################################

    cut -c 1-16#截取每行头16个字符

    cut -c 1-16 file#截取指定文件中每行头 16个字符

    cut -c3-#截取每行从第三个字符开始到行末的内容

    cut -d':'-f5#截取用冒号分隔的第五列内容

    cut -d';'-f2,10#截取用分号分隔的第二和第十列内容

    cut -d''-f3-7#截取空格分隔的三到七列

    echo"hello"|cut -c1-3#显示 hel

    echo"hello sir"|cut -d''-f2#显示 sir

    ps|tr -s""|cut -d""-f 2,3,4#cut 搭配 tr 压缩字符

    ##############################################################################

    #文本处理 - awk / sed

    ##############################################################################

    awk'{print $5}'file#打印文件中以空格分隔的第五列

    awk -F',''{print $5}'file#打印文件中以逗号分隔的第五列

    awk'/str/ {print $2}'file#打印文件中包含 str 的所有行的第二列

    awk -F',''{print $NF}'file#打印逗号分隔的文件中的每行最后一列

    awk'{s+=$1} END {print s}'file#计算所有第一列的合

    awk'NR%3==1'file#从第一行开始,每隔三行打印一行

    sed's/find/replace/'file#替换文件中首次出现的字符串并输出结果

    sed'10s/find/replace/'file#替换文件第 10 行内容

    sed'10,20s/find/replace/'file#替换文件中 10-20 行内容

    sed -r's/regex/replace/g'file#替换文件中所有出现的字符串

    sed -i's/find/replace/g'file#替换文件中所有出现的字符并且覆盖文件

    sed -i'/find/i\newline'file#在文件的匹配文本前插入行

    sed -i'/find/a\newline'file#在文件的匹配文本后插入行

    sed'/line/s/find/replace/'file#先搜索行特征再执行替换

    sed -e's/f/r/'-e's/f/r'file#执行多次替换

    sed's#find#replace#'file#使用 # 替换 / 来避免 pattern 中有斜杆

    sed -i -r's/^\s+//g'file#删除文件每行头部空格

    sed'/^$/d'file#删除文件空行并打印

    sed -i's/\s\+$//'file#删除文件每行末尾多余空格

    sed -n'2p'file#打印文件第二行

    sed -n'2,5p'file#打印文件第二到第五行

    ##############################################################################

    #排序 - sort

    ##############################################################################

    sort file#排序文件

    sort -r file#反向排序(降序)

    sort -n file#使用数字而不是字符串进行比较

    sort -t: -k 3n /etc/passwd#按 passwd 文件的第三列进行排序

    sort -u file#去重排序

    ##############################################################################

    #快速跳转 - https://github.com/rupa/z

    ##############################################################################

    source/path/to/z.sh#.bashrc 中初始化 z.sh

    z#列出所有历史路径以及他们的权重

    z foo#跳到历史路径中匹配 foo 的权重最大的目录

    z foo bar#跳到历史路径中匹配 foo 和 bar 权重最大的目录

    z -l foo#列出所有历史路径中匹配 foo 的目录及权重

    z -r foo#按照最高访问次数优先进行匹配跳转

    z -t foo#按照最近访问优先进行匹配跳转

    ##############################################################################

    #键盘绑定

    ##############################################################################

    bind'"\eh":"\C-b"'#绑定 ALT+h 为光标左移,同 CTRL+b /

    bind'"\el":"\C-f"'#绑定 ALT+l 为光标右移,同 CTRL+f /

    bind'"\ej":"\C-n"'#绑定 ALT+j 为下条历史,同 CTRL+n /

    bind'"\ek":"\C-p"'#绑定 ALT+k 为上条历史,同 CTRL+p /

    bind'"\eH":"\eb"'#绑定 ALT+H 为光标左移一个单词,同 ALT-b

    bind'"\eL":"\ef"'#绑定 ALT+L 为光标右移一个单词,同 ALT-f

    bind'"\eJ":"\C-a"'#绑定 ALT+J 为移动到行首,同 CTRL+a /

    bind'"\eK":"\C-e"'#绑定 ALT+K 为移动到行末,同 CTRL+e /

    bind'"\e;":"ls -l\n"'#绑定 ALT+; 为执行 ls -l 命令

    ##############################################################################

    #网络管理:ip / ifconfig / nmap ...

    ##############################################################################

    ip a#显示所有网络地址,同 ip address

    ip a show eth1#显示网卡 IP 地址

    ip a add 172.16.1.23/24 dev eth1#添加网卡 IP 地址

    ip a del 172.16.1.23/24 dev eth1#删除网卡 IP 地址

    ip link show dev eth0#显示网卡设备属性

    ip linkseteth1 up#激活网卡

    ip linkseteth1 down#关闭网卡

    ip linkseteth1 address {mac}#修改 MAC 地址

    ip neighbour#查看 ARP 缓存

    ip route#查看路由表

    ip route add 10.1.0.0/24 via 10.0.0.253 dev eth0#添加静态路由

    ip route del 10.1.0.0/24#删除静态路由

    ifconfig#显示所有网卡和接口信息

    ifconfig -a#显示所有网卡(包括开机没启动的)信息

    ifconfig eth0#指定设备显示信息

    ifconfig eth0 up#激活网卡

    ifconfig eth0 down#关闭网卡

    ifconfig eth0 192.168.120.56#给网卡配置 IP 地址

    ifconfig eth0 10.0.0.8 netmask 255.255.255.0 up#配置 IP 并启动

    ifconfig eth0 hw ether 00:aa:bb:cc:dd:ee#修改 MAC 地址

    nmap 10.0.0.12#扫描主机 1-1000 端口

    nmap -p 1024-65535 10.0.0.12#扫描给定端口

    nmap 10.0.0.0/24#给定网段扫描局域网内所有主机

    nmap -O -sV 10.0.0.12#探测主机服务和操作系统版本

    ##############################################################################

    #有趣的命令

    ##############################################################################

    man hier#查看文件系统的结构和含义

    mantest#查看 posix sh 的条件判断帮助

    man ascii#显示 ascii 表

    getconf LONG_BIT#查看系统是 32 位还是 64 位

    bind-P#列出所有 bash 的快捷键

    mount|column -t#漂亮的列出当前加载的文件系统

    curl ip.cn#取得外网 ip 地址和服务商信息

    disown-a&&exit#关闭所有后台任务并退出

    cat /etc/issue#查看 Linux 发行版信息

    lsof -i port:80#哪个程序在使用 80 端口?

    showkey -a#取得按键的 ASCII 码

    svn diff|view -#使用 Vim 来显示带色彩的 diff 输出

    mv filename.{old,new}#快速文件改名

    timeread#使用 CTRL-D 停止,最简单的计时功能

    cp file.txt{,.bak}#快速备份文件

    sudo touch /forcefsck#强制在下次重启时扫描磁盘

    find~-mmin 60 -type f#查找 $HOME 目录中,60 分钟内修改过的文件

    curl wttr.in/~beijing#查看北京的天气预报

    echo${SSH_CLIENT%%*}#取得你是从什么 IP 链接到当前主机上的

    echo$[RANDOM%X+1]#取得 1 到 X 之间的随机数

    bind-x'"\C-l":ls -l'#设置 CTRL+l 为执行 ls -l 命令

    find / -type f -size +5M#查找大于 5M 的文件

    chmod --reference f1 f2#将 f2 的权限设置成 f1 一模一样的

    curl -L cheat.sh#速查表大全

    ##############################################################################

    #常用技巧

    ##############################################################################

    #列出最常使用的命令

    history|awk'{a[$2]++}END{for(i in a){print a[i] " " i}}'|sort -rn|head

    #列出所有网络状态:ESTABLISHED / TIME_WAIT / FIN_WAIT1 / FIN_WAIT2

    netstat -n|awk'/^tcp/ {++tt[$NF]} END {for (a in tt) print a, tt[a]}'

    #通过 SSH 来 mount 文件系统

    sshfs name@server:/path/to/folder /path/to/mount/point

    #显示前十个运行的进程并按内存使用量排序

    ps aux|sort -nk +4|tail

    #在右上角显示时钟

    whilesleep 1;dotput sc;tput cup 0$(($(tput cols)-29));date;tput rc;done&

    #从网络上的压缩文件中解出一个文件来,并避免保存中间文件

    wget -qO -"http://www.tarball.com/tarball.gz"|tar zxvf -

    #性能测试:测试处理器性能

    python -c"import test.pystone;print(test.pystone.pystones())"

    #性能测试:测试内存带宽

    dd if=/dev/zero of=/dev/null bs=1M count=32768

    #Linux 下挂载一个 iso 文件

    mount /path/to/file.iso /mnt/cdrom -oloop

    #通过主机 A 直接 ssh 到主机 B

    ssh -t hostA ssh hostB

    #下载一个网站的所有图片

    wget -r -l1 --no-parent -nH -nd -P/tmp -A".gif,.jpg"http://example.com/images

    #快速创建项目目录

    mkdir -p work/{project1,project2}/{src,bin,bak}

    #按日期范围查找文件

    find.-type f -newermt"2010-01-01"!-newermt"2010-06-01"

    #显示当前正在使用网络的进程

    lsof -P -i -n|cut -f 1 -d""|uniq|tail -n +2

    #Vim 中保存一个没有权限的文件

    :w!sudo tee>/dev/null %

    #在 .bashrc / .bash_profile 中加载另外一个文件(比如你保存在 github 上的配置)

    source~/github/profiles/my_bash_init.sh

    #反向代理:将外网主机(202.115.8.1)端口(8443)转发到内网主机 192.168.1.2:443

    ssh -CqTnN -R 0.0.0.0:8443:192.168.1.2:443  user@202.115.8.1

    #正向代理:将本地主机的 8443 端口,通过 192.168.1.3 转发到 192.168.1.2:443

    ssh -CqTnN -L 0.0.0.0:8443:192.168.1.2:443  user@192.168.1.3

    #socks5 代理:把本地 1080 端口的 socks5 的代理请求通过远程主机转发出去

    ssh -CqTnN -D localhost:1080  user@202.115.8.1

    #终端下正确设置 ALT 键和 BackSpace 键

    http://www.skywind.me/blog/archives/2021

    ##############################################################################

    #有用的函数

    ##############################################################################

    #自动解压:判断文件后缀名并调用相应解压命令

    functionq-extract(){

    if[-f$1];then

    case$1in

    *.tar.bz2)  tar -xvjf$1;;

    *.tar.gz)    tar -xvzf$1;;

    *.tar.xz)    tar -xvJf$1;;

    *.bz2)      bunzip2$1;;

    *.rar)      rar x$1;;

    *.gz)        gunzip$1;;

    *.tar)      tar -xvf$1;;

    *.tbz2)      tar -xvjf$1;;

    *.tgz)      tar -xvzf$1;;

    *.zip)      unzip$1;;

    *.Z)        uncompress$1;;

    *.7z)        7z x$1;;

    *)echo"don't know how to extract '$1'...";;

    esac

    else

    echo"'$1' is not a valid file!"

    fi

    }

    #自动压缩:判断后缀名并调用相应压缩程序

    functionq-compress(){

    if[-n"$1"];then

    FILE=$1

    case$FILEin

    *.tar)shift&&tar -cf$FILE$*;;

    *.tar.bz2)shift&&tar -cjf$FILE$*;;

    *.tar.xz)shift&&tar -cJf$FILE$*;;

    *.tar.gz)shift&&tar -czf$FILE$*;;

    *.tgz)shift&&tar -czf$FILE$*;;

    *.zip)shift&&zip$FILE$*;;

    *.rar)shift&&rar$FILE$*;;

    esac

    else

    echo"usage: q-compress ./foo ./bar"

    fi

    }

    #漂亮的带语法高亮的 color cat ,需要先 pip install pygments

    functionccat(){

    localstyle="monokai"

    if[$#-eq0 ];then

    pygmentize -P style=$style-P tabsize=4 -f terminal256 -g

    else

    forNAMEin$@;do

    pygmentize -P style=$style-P tabsize=4 -f terminal256 -g"$NAME"

    done

    fi

    }

    ##############################################################################

    #好玩的配置

    ##############################################################################

    #放到你的 ~/.bashrc 配置文件中,给 man 增加漂亮的色彩高亮

    exportLESS_TERMCAP_mb=$'\E[1m\E[32m'

    exportLESS_TERMCAP_mh=$'\E[2m'

    exportLESS_TERMCAP_mr=$'\E[7m'

    exportLESS_TERMCAP_md=$'\E[1m\E[36m'

    exportLESS_TERMCAP_ZW=""

    exportLESS_TERMCAP_us=$'\E[4m\E[1m\E[37m'

    exportLESS_TERMCAP_me=$'\E(B\E[m'

    exportLESS_TERMCAP_ue=$'\E[24m\E(B\E[m'

    exportLESS_TERMCAP_ZO=""

    exportLESS_TERMCAP_ZN=""

    exportLESS_TERMCAP_se=$'\E[27m\E(B\E[m'

    exportLESS_TERMCAP_ZV=""

    exportLESS_TERMCAP_so=$'\E[1m\E[33m\E[44m'

    #ALT+hjkl/HJKL 快速移动光标,将下面内容添加到 ~/.inputrc 中可作用所有工具,

    #包括 bash/zsh/python/lua 等使用 readline 的工具,帮助见:info rluserman

    "\eh": backward-char

    "\el": forward-char

    "\ej": next-history

    "\ek": previous-history

    "\eH": backward-word

    "\eL": forward-word

    "\eJ": beginning-of-line

    "\eK": end-of-line

    ##############################################################################

    #References

    ##############################################################################

    https://github.com/Idnan/bash-guide

    http://www.linuxstall.com/linux-command-line-tips-that-every-linux-user-should-know/

    https://ss64.com/bash/syntax-keyboard.html

    http://wiki.bash-hackers.org/commands/classictest

    https://www.ibm.com/developerworks/library/l-bash-test/index.html

    https://www.cyberciti.biz/faq/bash-loop-over-file/

    https://linuxconfig.org/bash-scripting-tutorial

    https://github.com/LeCoupa/awesome-cheatsheets/blob/master/languages/bash.sh

    https://devhints.io/bash

    https://github.com/jlevy/the-art-of-command-line

    https://yq.aliyun.com/articles/68541

    #vim: set ts=4 sw=4 tw=0 et :

    相关文章

      网友评论

          本文标题:linux bash sheet

          本文链接:https://www.haomeiwen.com/subject/sinuvqtx.html