Linux命令行初探

讲了命令行结构、命令的语法,以及一些查看信息的命令。

命令行和命令行结构

在Linux系统中,一个命令通常由命令名、命令选项和命令参数构成,中间通常用空格分开。

<命令名> <命令选项> <命令参数>

命令选项通常是以“-”开始的单个字符,或者以双减号“–”为起始的单词(有一些例外)。

根据具体情况,命令选项和命令参数可以省略,而命令名称是必须的。

在命令行中输入命令时,shell会处理这条命令,它假定命令的第一部分是命令名,然后根据该名称搜索并且执行该程序;如果搜索不到,那么就会提示一个错误:

$ abcdefg
abcdefg: command not found

当shell查找到并且要运行这个命令时,就会将整个命令行的一份副本发送给该程序,程序会处理命令名之后的命令选项和命令参数。

有以下四种方法来停止程序:

  • 程序运行完自动停止,比如ls
  • 程序运行时在交互界面,输入指定命令退出,比如vim输入q后停止。
  • 使用^D表示输入完毕,程序停止。
  • 使用^C立即停止程序。

在命令行中可以一次输入多条命令,需要命令之间写入分号就可以了,命令行的末尾 _不需要_ 分号:

$ ls; date

没有人 能够记得住所有的命令和语法,只需要知道常用的几个就行了;至于其他的,可以使用man或者Google。

查看程序 which type

系统中有些程序是独立的程序,有些程序是Bash内建程序,即Bash的一部分。

在命令行中输入命令时,Bash会处理这条命令,独立的程序并不知道Bash怎样处理这条命令,虽然Bash最终会调用该程序,如果该程序存在的话。

命令which显示会运行哪个程序,比如ls命令会运行保存在/bin下的ls程序:

$ which ls
/bin/ls

命令type则告诉我们Bash会怎样处理ls命令,ls命令被Bash认为是ls --color=auto

$ type ls
ls is aliased to `ls --color=auto'

试试下面的命令:

$ which which
$ which type
$ type which
$ type type

显示日期和时间 date、显示日历 cal

命令date查看当前的时间和日期的:

$ date
Fri Mar 17 19:07:28 CST 2017

上面显示的时间是 星期五 三月 17日 19:07:28 中国标准时区 2017年。

命令date能指定显示格式,下面按 “年/月/日 时:分” 显示日期和时间:

$ date +'%Y/%m/%d %H:%M'
2017/03/17 19:32

所有的Linux系统都使用协调世界时间(UTC), Linux默默的在UTC和本地时间(上面例子中是CST)转换,使用date查看UTC时间:

$ date -u
Fri Mar 17 11:11:20 UTC 2017

命令cal显示一个日历:

cal [month] [year]

不指定任何参数时,cal显示当月的日历,当天会高亮显示:

cal.png

指定参数时,可以显示指定月的日历。显示2017年8月的日历:

cal_8_2017.png

查看系统信息 uptime hostname uname

命令update显示系统已经连续运行的时间:

$ uptime
19:46:53 up 28 days, 9:08, 1 user, load average: 0.00, 0.01, 0.00

上面显示的信息是:

  • 目前时间是 19:46:33;
  • 系统已经运行了 28 天 9 小时 8 分钟;
  • 当前有 1 个用户登陆;
  • 最后三项展现了一直等待执行的程序的数量,分别是之前 1 分钟、5 分钟和 15 分钟的平均数。

命令hostname显示主机的名称:

$ hostname
VM-134-97-ubuntu

命令uname显示操作系统的名称:

$ uname
Linux

如果您要得到操作系统更多的信息,可以使用-a命令选项:

$ uname -a
Linux VM-134-97-ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

显示用户信息 whoami users who w

命令whoami显示当前用户名:

$ whoami
wm

Linux很常见的一个用途是作为多个用户共同使用的服务器,为了查看有哪些用户登陆到了计算机上,可以使用users查看当前在使用 Linux 主机的用户:

$ users
jack wm

目前只有jack和wm在使用计算机。

命令who显示当前登录到主机的用户使用的终端、登录时间和登陆计算机名称(或 ip 地址)(下面用 * 替代了具体的ip地址):

$ who
wm      pts/0   Mar 17 19:46 (1**.2**.**.***)
jack    pts/1   Mar 17 20:35 (1**.2**.**.***)

命令w显示当前登录到主机的用户的信息:

$ w
20:39:00 up 28 days, 10:00, 2 users, load average: 0.00, 0.00, 0.00
USER    TTY     FROM            LOGIN@  IDLE    JCPU    PCPU    WHAT
wm      pts/0   1**.2**.**.***  19:46   1.00s   0.08s   0.00s   w
jack    pts/1   1**.2**.**.***  20:35   3:56    0.04s   0.04s   -bash

上面2行显示的信息是:

  • 目前时间是 20:39:00;
  • 系统已经运行了 28 天 10 小时 0 分钟;
  • 当前有 2 个用户登陆;
  • 最后三项展现了一直等待执行的程序的数量,分别是之前 1 分钟、5 分钟和 15分钟的平均数。

之后显示了一个表格:
USER:用户名
TTY:各个用户使用的终端的名称
FROM:各个用户的计算机名称或者地址
LOGIN@:用户标识的登陆时间
IDLE:用户上一次按键过去的时间,这段时间称为空闲时间,也许用户是在等待某个程序执行结束而没有按键,或者只是登陆在 Linux 主机上什么也不做
JCPU:自登陆后所有进程总共只用的处理器时间,其中J代表jobs
PCPU:当前进程所使用的处理器时间,其中P代表process
WHAT:当前用户正在做什么

无论何时,如果您自己使用w命令,那么您总能在w生成的信息中看到自己在运行w命令。

默认情况下,w命令显示所有用户的信息,如果您只要显示某个用户的信息,只需要在 w 命令后加上用户名即可:

$ w wm
20:39:00 up 28 days, 10:00, 2 users, load average: 0.00, 0.00, 0.00
USER    TTY     FROM            LOGIN@  IDLE    JCPU    PCPU    WHAT
wm      pts/0   1**.2**.**.***  19:46   1.00s   0.08s   0.00s   w

bc计算器计算、库、变量、基

在shell提示后面输入bc命令即可打开bc,打开之后会显示版权信息,光标在信息的下一行开始处显示,可以在这里输入算式进行计算。

使用^D表示输入完毕,将会退出 bc 程序。

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+2+3
6
6/5
1
$ 

为何6/5结果是1呢?因为bc默认是不保留小数位的,使用scale=3来使bc保留3位小数,将3替换成需要的小数位数即可显示相应位数的小数。

$ bc
# 省略
6/5
1
scale=4
6/5
1.2000

命令bc中可用的基本运算:

运算符 含义
+ 加法
减法
* 乘法
/ 除法
% 取模
^ 指数
sqrt(x) 平方根

计算器bc除了可以进行基本的运算外,函数库中还有一些函数,使用-l选项启动函数库。

函数 含义
s(x) x 的正弦,x 的单位是弧度
c(x) x 的余弦,x 的单位是弧度
a(x) x 的反正切,x 的单位是弧度
l(x) x 的自然对数
e(x) e 的 x 次方
j(n,x) x 的 n 次整阶贝塞尔函数

计算器bc中可以设置变量,变量由变量名和值组成,变量名由一个小写字母组成( 从a到z), _不要_ 使用大写字母,使用=赋值:

$ bc
# 省略
a=1
a+1
2

计算器bc可以对输入和输出采用不同的基,使用ibase=8将输入数字设置为八进制,使用obase=16将输出数字设置为十六进制(您也可以替换成其他进制):

$ bc
# 省略
ibase=8
11
9

命令行中的Space和Tab

命令的每个部分之间必须要至少有一个空格(space)或者制表符(Tab),通常,使用一个空格将它们分开,即便输入好多个空格,Shell也会将其当作一个空格处理。

制表符Tab在命令行中有一个非常特殊的功能:命令补全或者文件补全。

当在未完成的命令名(整个命令开头的几个字母)后面输入一次Tab时,Shell会搜索符合条件的命令,

  • 有且仅有一条的情况下会自动补全命令;
  • 如果有好多条符合,待输入第二次Tab后显示待选列表;
  • 如果没有一条符合,将不会显示任何信息(无论输入多少次Tab )。

进行文件补全或者命令选项补全时也是这样的逻辑。

下面是一个例子,假设以cal开头的命令在系统中一共有3条,分别是calcalendarcaller:

  • cal后输入一次Tab(不显示任何信息):
$ cal[TAB]
  • cal后输入两次Tab(显示候选列表):
$ cal[TAB][TAB]
cal calendar caller
  • calen后输入Tab(此时仅有一条命令符合,将自动补全):
$ calen[Tab]

补全后:

$ calendar
  • 没有补全信息:
$ calb[Tab][Tab]
  • 补全文件名:
$ ls /r[Tab][Tab]
root/ run/

命令的语法

使用man来查阅联机手册,然后阅读该命令的摘要就可以知道该命令的用途。

在 Linux 中,命令语法遵循 7 条规则:

  1. 方括号中的项是可选的。
  2. 不在方括号中的项是必选项,必须作为命令的一部分输入。
  3. 黑体字(或者高亮)必须按照原样准确键入。
  4. 大写下划线必须用适当的值代替(有时为斜体)。
  5. 后面根省略号( … )的参数可以重复任意多次。
  6. 如果一个单独的选项和一个参数组合在一起,那么该选项和参数必须同时使用。
  7. 有 | 字符分开的两个或者多个选项,表示可以从整个列表中选择一个项。

$ man ls的结果:
man_ls.png

在NAME标签下可以查看命令的简短的解释,一般是命令的用途,在SYNOPSIS下可以看到命令的语法,在上图中:

  • ls 是高亮,并且不在方括号中,表示这部分必须原样输入;
  • OPTION(参数)在方括号之中,并且有下划线,表示这个部分是可选的,需要用适当的值来代替,具体的值可以在下方的详细说明中找到,后面的省略号表示可以有多个参数;
  • FILE (文件名)是可选的、需要用具体的文件名替换的、可以有多个的。

$ man cal的结果:
man_cal.png

cal-A 选项必须与number参数共同使用,命令选项有时会以类似形式 ([-3hjy]) 表示,从中选择合适的选项使用就可以。

$ man who的结果:
man_who.png

对于who命令,[FILE | ARG1 ARG2]是可选的,如果要使用此选项,必须从 FILE或者ARG1 ARG2中使用一个。


相关:

  • 算式(1+2)\times3中缀表示法)可以这样表示:先写运算符,然后才是操作数。即:\times \quad + \quad 1 \quad 2 \quad 3。这种表示方法叫做前缀表示法,也称为逆波兰表示法。处理前缀表示法的算式时,从左到右处理每个元素。首先是\times号,需要两个操作数进行乘法操作,接下来是+号,需要两个操作数进行加法操作。之后是数字,取出两个数字进行加法操作,即 1+2 ,然后用加法结果,与下一个数进行乘法运算(乘法需要两个操作数),即(1+2)\times3,与中缀表示法结果相同。
  • 算式(1+2)\times3也可以表示为1\quad2\quad+\quad3\quad*,叫做后缀表示法。从左到右依次处理每个元素,先记录1 \quad 2 ,然后处理+号,取出1 \quad 2 进行进行计算,即1+2,然后记录加法结果并处理下一个元素3。之后处理最后的元素\times,得到(1+2)\times3。dc计算器就是使用这种表示法进行计算的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注