命令语法

一次输入多条命令,可以在命令之间用 ;分割开来

语法: 命令名称 选项 参数

选项有时被称为开关(switches)或标志(flags),选项通常是由一个连字符后面接着一些字母,或者两个连字符后接着一个单词构成。例如 —help,—version(显示版本信息)

使用多个单字符选项时,可以把他们连接在一起,用一个连字符来表示。例如 ls -lF
。注意,unix的选项区分大小写

实际上许多长参数有着对应的短参数,但是长参数是一个完整的单词,为了便于记忆,有时也是用长参数,这时就要用两个连字符

输入命令时,必须要把每个选项和参数用空格分隔开

有些命令有默认值,有些命令没有默认值,例如 ls 如果只输入ls的话他会返回当前工作目录下所有文件

手册中提示的语法

  1. 方括号中的项是可选的
  2. 不再方括号中的项是必选项
  3. 黑体字必须原样输入
  4. 斜体字可以用适当的值代替
  5. 有省略号代表可以重复多次
  6. 如果一个单独的选项和参数组合在一起,这二者必须同时出现
  7. 由竖线(|)字符分开的两个或者多个项,宝石可以从这个列表中选择任意一项
用户提醒命令
  • who 用来显示用这个计算机的用户
  • whoami 用来显示当前用户标识
  • quota 用来看自己拥有多少空间
  • lock 临时上锁 lock -5 锁5分钟
  • leave leave +15 十五分钟后离开 leave 1344 13点44分离开,到了时间它会不停的提醒你,相当于一个闹钟
  • id 用来显示你的基本信息
  • date 时间 date -u 协调世界时间(UTC时间)
  • cal 显示日历 cal+某一年份可以显示某一年份的日历 cal 7 2019 显示2019年7月的日历 cal -j +… 会显示第几天,所以想要知道这一年是不是闰年只需 cal -j 12 + 年份,看看12月最后一天是不是366天就可以了
  • su(substitute user) 这个指令是用来切换用户的,如果你知道一个用户的口令,那么就可以采用su+用户名的方式切换,这个时候用户标识改变了,但是你仍位于旧的环境之中。就像你让别人来你家做事,如果你想让别人在自己家做事,就要用su+’-‘+用户名

特别的,如果你想拥有root权限,你需要 su - root ,这时你输入的是你自己的口令而不是root口令,因为在计算机中有特殊的配置文件,这个文件只有管理员能操作,他可以修改那些人可以通过su口令获得root权限

  • man 联机文档帮助 当你查看联机文档时,可以用/符加上你想搜索的内容进行搜索,用n来显示下一个,用N来显示上一个。?符是向下搜索。
    如果想在查看man文档时执行指令,只需输入!在输入命令,之后按enter键又能回到man文档中
  • foo bar 可以指代任意标识
    man文档显示的内容
  1. 命令
  2. 系统调用
  3. 库函数
  4. 特殊文件
  5. 文件格式
  6. 游戏
  7. 杂项
  8. 系统管理
  • whatis 显示说明书页的第一行(名字和用途)例如 whatis time date,这样同时显示两条指令的信息。这种指令可以用 man -f 替换
  • apropos 搜索命令 他将显示所有带有该字符的命令。这种命令可以用man -k代替
  • info 另一种搜索命令,这种命令的特点是它有到其他命令的连接,就好像网页一样。这时一种树形结构,n跳转到下一个节点,p跳转到上一个节点,t跳转到当前文件的顶节点

    登入登出命令
  • exit 退出当前用户,例如想从root模式退出用exit

  • sudo 以超级用户模式运行一条指令。如果你经常使用超级用户,可能在无意间删去一些重要文件导致系统出现故障,因此超级用户需慎用。因此要用可以用sudo命令。
  • less 浏览配置文件。例如我想浏览passwd文件,只需 less /etc/passwd

配置文件就像windows系统下的注册表和ini文件

  • dmesg 显示启动信息,但是这种显示太快,看不清
  • dmesg | less 显示启动信息
  • init 设置运行级别,1为单用户,2为多用户,等等,0是关机,6是重启

如果想重启,可以用 sudo init 6

  • reboot 重启 sudo reboot
  • shutdown 关机,这个要说关机时间,经常用的是sudo shutdown now
快捷键和便捷输入命令
  • erase 删除最好一个键入的字符,Ctrl+H
  • werase 删除最后一个单词 Ctrl+W
  • kill 删除一行 Ctrl+U
  • intr 停止程序 有些系统是Ctrl+C,有些是delete
  • quit 停止程序 Ctrl+\ 它不仅会停止程序,还会生成一个副本保存在core的文件中
  • stop 停止屏幕显示,Ctrl+S
  • start 开始屏幕显示 Ctrl+Q
  • eof 文件终止信号 Ctrl+D
    可以通过Ctrl+D终止shell,但是有时候会不小心按到。为了让shell忽略eof,需要使用一个叫IGNOREEOF的环境变量,这个变量表示注销前BASH会忽略多少次eof,设置这个变量时,要 IGNOREEOF = 数字
  • stty -a 显示键盘映射,这个命令是表示各个快捷方式如erase的快捷键。stty是set terminal(设置终端)-a表示显示所有设置
  • stty 修改键映射。例如想修改kill命令 ,可以 stty kill Ctrl a
  • 返回字符 ^M,指的是返回到这一行的开头
  • 换行字符 ^J
    文件每一行最后一定是一个返回加换行
  • stty sane,reset 候终端的设置被弄乱,可以采用这个命令是终端恢复到初始值
  • up 向上键,会转到上一条指令
  • down 转到下一条指令
  • fc 查看历史命令列表,用fc -l来查看,前面都有一个编号。如果想转到某一条指令,可以 fc -s(substitute) 编号。如果后面不接编号,则默认为上一条指令。但是用fc -s会立刻执行这条指令

可以对这条命令进行小范围修改,格式为 fc -s pattern=replacement number
。pattern和replacement 都是字符串,而number是要修改时间的编号

  • tab 自动补全命令,按一下如果有歧义,会发出提示声
    立即使用的程序
  • gedit 文本编辑器,相当于windows下的记事本
  • which 看某个命令会使用那些程序,如果显示地址,则说明有这些程序,如果没有输出,或者输出错误信息,则说明这个命令无法使用
  • quit 终止程序命令,但是也可以输入eof使程序终止
  • bc 计算器 如果想用bc内部的函数,要用bc -l命令(library)。如果是多个算式,中间要用”;”号隔开

常用函数

s(x) sinx  弧度制
c(x) cosx
a(x) arctanx
ln(x)
j(n,x) x的n次整阶贝塞尔函数

如果想用小数运算,先要设置标度因子 scale 来确定精确到小数点后多少位。如果输入scale 则会返回scale的当前值 scale=3,则设置小数点后三位

有一点需要注意,当你用来 bc -l时,scale会自动设置为20

bc实际上是一套功能完整的数学编程语言,可以使用的变量有26个字母
例如 x=100 就是将x变量设为100

变量显示命令

环境变量实际上就是全局变量,用env显示环境变量,如果想让输出按字母表排序,可以用 env | sort | less

  • set 显示shell变量

  • echo 显示赋予它对象的值,例如 echo I 将会输出I

如果要显示一个变量的值,可以用$(美元符号),后面的变量最好加花括号({})

例如 echo ${TERM}

实际上,很多标点符号都有特殊的用途,为了能正确显示他们,要在最外面用双引号

  • 变量创建只需要一边写变量名,另一边写值即可。例如,HARLEY=cool,如果希望变量中有空格,则需使用双引号

  • export 将变量导出环境中(即变成全局变量)。还可以在创建同时导出。用 export 变量名=值即可

  • unset 删除变量。实际上没有办法简单的从环境中移除变量,因此最简单的办法是直接删除它。

  • set 显示shell所有选项的当前值,如果用 -o 则会简要的显示 +o是详细的显示。例如,set -o ignoreeof 这样在按 Ctrl+D的时候就不会突出shell了,如果想复位,只要+o

  • alias 建立别名,语法为alias name=command 例如 alias It='-l temp*'。这种时候,单引号就比双引号要好,因为这样可以防止一些特殊字符被转义。此外,可以通过alias name 知道这个别名的当前值。可以只输入alias得知所有别名,通过unalias删去别名。如果想暂时不用别名,可以在命令之前输入” \ “

文件显示指令
  • less,这条指令是让大量的数据分成一页一页进行查看,如果不使用这个程序。那么输出时会直接到这些数据的末尾。less在正常情况下是区分大小写的,如果想不区分,可以使用I选项。此外,less命令内部还有许多搜索,翻页等指令,这些指令可以通过help去查看。

less还有一个特殊的功能,就是直接跳转到某一页。less +5g …代表跳转到第5页,less +/buffer …是从第一个buffer处开始。

显示十六进制文件

显示二进制文件的命令是 hexdump(显示十六进制文件),od(显示八进制文件),

hexdump -C file。将自动选取适合的选项组合进行输出。

-s 偏移一定字节数开始输出。

-n 显示多少字节输出

strings: 显示二进制文件中的字符串

条件执行指令

command1 && command2

在条件1满足的情况下执行command2

command1|| command2

在条件1不满足的情况下也执行command2

正则表达式

regular expression 通常简写成regex或re,是一种指定字符串模式的输出方式。

例如: harley1 harley2 harley3 ,作为正则表达式,可以用harley[123]表达这组模式。

从这里我们可以了解到,正则表达式就像把许多字符串化为一个表达式。

下面介绍一些常用的正则表达式

元字符 含义
. 除新行字符外,匹配任意的单个字符
^ 锚,匹配行的开头
$ 锚,匹配行的末尾
\ < 锚,匹配单词的开头
\ > 锚,匹配单词的末尾
[list] 字符类,匹配list中的任意字符
[ ^ list] 子父类,匹配不再list中的任意字符
() 组,视为一个单独的单元
竖线 匹配选择之一
\ 引用: 从字面上解释元字符
注意 下面是判定匹配次数的字符
* 匹配0次或者多次
+ 匹配一次或者多次
匹配0次或1次,如果是多个字符,则代表最小匹配。例如 <.*?>,这是用来匹配html标签的,如果同时匹配到多个,则选取匹配数目最少的
{n} 匹配n次
{0,m} 最多匹配m次
{n,} 最少匹配n次
{,m} 最多匹配m次
{n,m} 最少n次,最多m次
注意 预定义字符类
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 大小写字母
[:alnum:] 大小写字母,数字
[:digit:] 数字
[:punct:] 标点符号
[:blank:] 制表符或者空格
基本和扩展正则表达式
匹配行和单词

有些元字符具有定位的作用,这些字符叫做。例如,harley$仍是匹配字符串harley,但是这个时候只匹配行末尾的字符了。

如果我们要找以harley开头的行,可以

grep ‘^harley’ data

注意,当我们使用含有元字符的表达式时,为了不干扰,最好加上单引号

通过使用 ^$ ,我们可以很方便的查找空行。这个的意思就是既找行首又找行尾,只有空行才满足这个条件。

例如: grep ‘^$’ data | wc -l

如果我们要找 某个字符位于开头的,可以用 \<

例如: grep ‘\<kn’ data,这个就是找kn为于单词开头的单词。或者grep ‘kn>‘ data

在linux系统中,可以采用\b代替\<和>,\b相当于边界标记。此外,要尊重客观规律,不能把开头标记和结尾标记都写在开头。

如果想匹配所有包含字母 H ,后面加a或者A的,可以用 grep ‘H[aA]’ data

如果想表示一个范围,可以用 [a-b],例如 [3-6] 或 [a-z],这应该是按ascii码来的

grep ‘A-Z,a-z‘ data可以用来搜索所有不包含字母的行

重复使用运算符

例如,如果我想找首字母是大写H,后面接了0个或者多个字母的行,可以使用

grep ‘HPost not found: :alpha:*’ data

如果想搜索一个或者多个,可以用+号,

例如: grep ‘variable[0-9]+’ data

到现在,我们一直使用单个字符作为查找对象,如果想用多个字符作为查找对象,就需要用到组(小括号)

例如: (xyz){5},这条命令就是查找重复出现xyz五次的字符串

如果我们想搜索多个单词,可以用 | 分隔开来。

例如: grep ‘(cat | dog | bird) ‘ data

如果我们想搜索有特殊含义的元字符,可以用(转义字符)把这些字符的含义变成常规字符,如果我们想搜索 \ 本身,那么可以用两个 \

例如: grep ‘$‘ data

字典文件

字典顾名思义,就是许多经常用的单词放到一起,每个单词一行,并且按照字母表顺序排列。一般储存在 /usr/share/dict/words中。

利用这个文件,我们就可以很方便的查找单词。例如,那些单词以qu开头并且以y结尾呢?

grep ‘^qu[a-z]+y$’ /usr/share/dict/words

环境变量
变量名 作用
PATH 设置shell搜索路径
PS1 设置标识符
SHELL shell路径
HISTSIZE fc中最大保存的指令数