shell常用命令整理

只整理一些平时想用,可能又突然记不起来的命令和用法。都是基于bash。
如果不想在命令行使用man来阅读手册,可以在这个网站查看 http://explainshell.com/

概述

  1. 学会使用man命令,查看特定命令的手册。man -kapropos,可以在你不知道执行某个特定任务所需要命令的名称时,查找这个命令。
  2. 学会使用><来重定向输入输出,用|建立管道。
  3. 学习使用通配符。
  4. 学习使用bash的任务管理器, &, ctrl-z, ctrl-c, jobs, fg, bg, kill, killall等。
  5. 学习使用ssh, 并且知道如果通过ssh-agent,ssh-add等实现无密码认证。
  6. 掌握文件管理命令, ls, less, head, tail, ln ln -s(硬链接/软链接), chown, chmod, du等。
  7. 掌握文件系统命令, df, mount, fdisk, mkfs, lsblk等。
  8. 熟练掌握正则表达式,以及grep/egrep/fgrep工具。有必要知道 -i, -o, -A, -a 以及 -B 选项的意思。
  9. 学习基本的网络管理命令, ifconfig, dig等。
  10. 学习使用包管理器,针对不同的linux发行版本有不同的包管理器, apt-get, yum, brew等。
  11. 学习使用打包命令, tar, zip等。

基础知识

bash组合键

  • ctrl-a 移动到行首
  • ctrl-e 移动到行尾
  • ctrl-xx 在命令行首和光标之间移动
  • ctrl-u 删除整行
  • ctrl-w 从光标处删除到词首
  • ctrl-k 删除到行尾
  • ctrl-r 逆向搜索命令历史
  • ctrl-p 历史中上一条命令
  • ctrl-n 历史中下一条命令
  • ctrl-l clear,清空屏幕
  • !$ 上一个参数
  • !! 历史中上一条命令

通配符

引号

  • 单引号 '
    由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。

  • 双引号 "
    单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` .
    来看一个例子来说明单引号和双引号的区别:

1
2
3
4
5
6
7
~ x=*
~ echo $x
a b pet.txt wget
~ echo '$x'
$x
~ echo "$x"
*

shell在处理时会先作变量替换,然后作文件名替换,最后把这行处理为参数。

  • 反引号 `
    命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(…)结构括起来,其中,$(…)格式受到POSIX标准支持,也利于嵌套。
1
2
3
4
~ echo "now is `date`"
now is 2015年 9月13日 星期日 22时23分42秒 CST
~ echo "now is $(date)"
now is 2015年 9月13日 星期日 22时23分55秒 CST

标准输入输出

执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

输入输出重定向

  1. 输入重定向
    输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。
    <<<两种操作符。
  2. 输出重定向
    输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。输出重定向还可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道)。
  • >后的文件如果存在,此文件会被重写;>>会追加到文件后面。
  • 2>2>>表示错误输出重定向
  • &>表示将标准输出和错误输出同时写到同一个文件中。

其他

  1. 多条命令, ;, &&, ||
    1
    2
    3
    1) command1 ; command2 //不管command1是否执行成功都会执行command2
    2) command1 && command2 //只有command1执行成功后,command2才会执行,否则command2不执行
    3) command1 || command2 //command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行

管道

管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。
比如很常用的 ps -ef | grep resin,结果只会展现出resin的ps信息。

正则表达式

RE字符 意义与范例
^word 意义:待搜寻的字串(word)在行首!
范例:搜寻行首为 # 开始的那一行,并列出行号。
grep -n '^#' regular_express.txt
word$ 意义:待搜寻的字串(word)在行尾!
范例:将行尾为 ! 的那一行列印出来,并列出行号。
grep -n '!$' regular_express.txt
. 意义:代表『一定有一个任意字节』的字符!
范例:搜寻的字串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee) !亦即 e 与 e 中间『一定』仅有一个字节,而空白字节也是字节!
grep -n 'e.e' regular_express.txt
\ 意义:跳脱字符,将特殊符号的特殊意义去除!
范例:搜寻含有单引号 ‘ 的那一行!
grep -n \' regular_express.txt
* 意义:重复零个到无穷多个的前一个 RE 字符
范例:找出含有 (es) (ess) (esss) 等等的字串,注意,因为 * 可以是 0 个,所以 es 也是符合带搜寻字串。另外,因为 * 为重复”前一个RE字符”的符号,因此,在*之前必须要紧接著一个RE字符!例如任意字节则为”.*“。
grep -n 'ess*' regular_express.txt
[list] 意义:字节集合的 RE 字符,里面列出想要撷取的字节!
范例:搜寻含有 (gl) 或 (gd) 的那一行,需要特别留意的是,在 [] 当中『谨代表一个待搜寻的字节』, 例如『 a[afl]y 』代表搜寻的字串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思!
grep -n 'g[ld]' regular_express.txt
[n1-n2] 意义:字节集合的 RE 字符,里面列出想要撷取的字节范围!
范例:搜寻含有任意数字的那一行!需特别留意,在字节集合 [] 中的减号 - 是有特殊意义的,他代表两个字节之间的所有连续字节!但这个连续与否与 ASCII 编码有关,因此,你的编码需要配置正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字节则为 [A-Z]
grep -n '[A-Z]' regular_express.txt
[^list] 意义:字节集合的 RE 字符,里面列出不要的字串或范围!
范例:搜寻的字串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时,代表的意义是『反向选择』的意思。 例如,我不要大写字节,则为 [^A-Z]。但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来搜寻,却发现该文件内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字节』的意思,因为每一行均有非大写字节,例如第一行的 “Open Source” 就有 p,e,n,o…. 等等的小写字
grep -n 'oo[^t]' regular_express.txt
{n,m} 意义:连续 n 到 m 个的『前一个 RE 字符』
意义:若为 {n} 则是连续 n 个的前一个 RE 字符。
意义:若是 {n,} 则是连续 n 个以上的前一个 RE 字符!
范例:在 g 与 g 之间有 2 个到 3 个的 o 存在的字串,亦即 (goog)(gooog)
grep -n 'go\{2,3\}g' regular_express.txt

文件处理

awk

http://wzktravel.github.io/2015/09/21/linux-awk/

sed

http://wzktravel.github.io/2015/09/19/linux-sed/

shell编程

shell数组

linux shell数组建立及使用技巧

常用命令

  1. cd - 回到上一个目录
  2. ls -lh -h表示human-readable,即友好可读的显示方式。
  3. ls -lrt 以文件修改时间排序
  4. ls -lrS 以文件大小排序
  5. df -h 查看各挂载点磁盘使用情况
  6. du -hs . 查看当前目录的总大小
  7. du -hs ./* 查看当前目录下文件和目录的大小
  8. echo $((0x1509d314690))echo $((16#1509d314690)) 十六进制转十进制

附几个dos命令

  • dir 类似于ls
  • rd /s/q ${path} 递归删除路径

参考