Unix & Linux 大学教程 第八章

第8章

8.1在系统中查找程序which 、type、whence
#which的目的就是让shell回答下述问题:
#如果我准备输入一条具体的命令,那么将会运行哪个程序
which date
which date less vi emacs

#type针对bash
type date
type date less vi emacs
type which
which type
type type
which which

#Korn shell
whence date
8.2 如何停止程序

eof:<Ctrl + D>
intr:^C

8.3 显示时间和日期:date
date
date -u #UTC时间
8.4 显示日历:cal
cal 
cal 1991
cal 4 1991

#这一天是一年找那个的第几天
cal -j  #Julian 儒略历:由儒略.凯撒 于公元前46年制定
8.5 Unix提醒服务:calendar

显示今天和明天的提醒,如果是星期五,显示未来3天的提示。
创建一个calendar文件,calendar程序将在档期目录中查找这个文件
日期和提示消息之间是制表符:<TAB>,不是空格

$ vim calendar
------------------------------
October 21      xiaochao's ss
November 20     xixihaha
June 12 xiaochao's birthday
June 11 xixi haha
June 13 nihaoya
------------------------------

$ calendar
 6 11*  xixi haha
 6 12*  xiaochao's birthday
8.6 查看系统信息:uptime、hostname、uname
  1. uptime:显示系统已经运行了多长时间
$ uptime
# 当前时间  |  up了多长时间  |  当前登录用户数  |
#  一直等待执行的程序数量(前1分钟,前5分钟,前15分钟)
 9:26  up 10 mins, 3 users, load averages: 1.14 4.52 4.76
  1. hostname 查看计算机名
  2. uname查看操作系统的名称 (-a)
8.7 显示自己信息:whoami 、quota
  1. whoami:显示登录使用的用户标识
  2. who am i
  3. quota:查看共享系统上系统管理员限制每个用户使用多少磁盘空间
8.8 显示其他用户信息:users、who、w
#1. users显示当前登录系统的所有用户标识
$ users
everjiankang everjiankang everjiankang root

#2. who显示用户标识、终端名称、登录时间、远程主机
[everjiankang@10-100-1-229 ~]$ who
root     tty1         2019-05-12 09:44
everjiankang pts/0        2019-06-12 09:15 (192.168.248.178)
everjiankang pts/1        2019-06-12 09:16 (192.168.248.178)
everjiankang pts/2        2019-06-12 09:35 (192.168.249.104)
everjiankang pts/3        2019-06-11 21:56 (192.168.251.85)
everjiankang pts/4        2019-06-11 10:25 (192.168.249.186)
everjiankang pts/5        2019-06-11 19:28 (192.168.251.168)
everjiankang pts/7        2019-06-11 15:57 (192.168.250.137)
everjiankang pts/10       2019-06-10 12:03 (192.168.251.205)
# 如果终端名称是:tty1、tty2,那么代表主计算机的虚拟控制台。
# pts:pseudo-terminal master and slave. 伪终端或虚拟终端

#3. w:who is doing what?
#第一行是统计信息,等同于uptime命令的输出,
# IDLE:用户上一次按键后已经过去的时间
# JCPU:自登录后所有进程总共使用的处理器时间,“J”代表“jobs(作业)”
# PCPU:当前进程所使用的处理器时间。P代表process(进程)
# WHAT:当前正在运行的命令
[everjiankang@10-100-1-229 ~]$ w
 09:42:24 up 115 days, 12:29,  9 users,  load average: 1.02, 1.64, 1.63
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                12May19 30days  0.01s  0.01s -bash
everjian pts/0    192.168.248.178  09:15   26:27   0.00s  0.00s -bash
everjian pts/1    192.168.248.178  09:16   25:47   0.00s  0.00s -bash
everjian pts/2    192.168.249.104  09:35    0.00s  0.07s  0.02s w
everjian pts/3    192.168.251.85   21:56   11:35m  0.06s  0.06s -bash
everjian pts/4    192.168.249.186  Tue10   23:13m  0.13s  0.13s -bash
everjian pts/5    192.168.251.168  Tue19   13:56m  0.35s  0.35s -bash
everjian pts/7    192.168.250.137  Tue15   17:33m  0.65s  0.56s tail -f syzx/ucbj/dev/medical-record/10-100-10-140/9000/logs/catalina.2019-06-11.out
everjian pts/10   192.168.251.205  Mon12   39:05m  0.16s  0.16s -bash

#后跟用户名称,查看特定某人
[everjiankang@10-100-1-229 ~]$ w root
 09:48:52 up 115 days, 12:36,  9 users,  load average: 1.60, 1.77, 1.74
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                12May19 31days  0.01s  0.01s -bash
8.9 终端临时上锁:lock、vlock (很多版本不支持)

默认锁住15分钟

lock
key:
Again:
#指定锁住5分钟
lock -5
8.10 请求Unix提醒何时离开:leave

可以将leave命令写在配置文件里,系统初始化的时候就设置一下leave时间

#输入时间格式:hhmm
guchunchao$ leave  
When do you have to leave? 1000
Alarm set for 2019年 6月12日 星期三 10时00分00秒 CST. (pid 755)
guchunchao$ You have to leave in 5 minutes.
guchunchao$ Just one more minute!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
Time to leave!
You're going to be late!
That was the last time I'll tell you. bye.
#十点半离开
leave 1030
#15分钟后离开
leave +15
#时间既可以是12小时制,也可以是24小时制
#下午 1:14 离开
leave 1314
#现在是8:00PM,下面命令将理解为 8:55PM,而不是 8:55AM
leave 855
8.11 内置计算器:bc

+ - * / % ^ sqrt(x)

~ guchunchao$ bc
123 + 456
579

20+30; 20 * 30 #多个式子用分号分割
50
600

3^2  # 3的2次幂
9

sqrt(9)  # 开平方根
3

1+2*3
7

(1+2)*3
9

~ guchunchao$ bc -l #使用bc内置的输血函数库(library)

s(x):x的正弦:sin(x)
c(x):x的余弦:cos(x)
a(x):x的反正切:
ln(x):x的自然对数
j(n,x):x的n次整阶贝塞尔函数

bc标度因子:scale

bc:默认做整数运算(忽略小数点右边的数字)
bc -l: 默认将标度因子(scale factor)设置为20
scale = 3 : 保留3位小数
scale:显示标度因子

$bc
scale
0
scale = 3
scale
3
9 / 4
2.250
scale=0
9 / 4
2
$bc -l
scale
20
8.13 在bc中使用变量

bc不仅仅是计算器,还是一个功能完整的数学编程语言,允许使用变量。变量名由一个小写字母组成,即:26个小写英文字母:a~z(千万不能用大小字母)

x
100
20 + x
120
w=160
r=(w*2)*1000
d=(w/3)*2000
r+d
426000
w
160
w=w/2.2
w
72
r+d
426000
r=(w*2)*1000
d=(w/3)*2000
r+d
192000
8.14 在bc中使用不同的基

默认是基10,还可以是基16(十六进制)、基8(八进制)、基2(二进制)
值范围是2 ~ 16
ibase:输入基
obase:输出基

ibase
10
obase
10
ibase;obase
10
10
obase=16 #以16进制显示
ibase=8 #以8进制输入

A + 5
15

A、B、C、D、E、F
10、11、12、13、14、15

ibase=16
ibase
16
ibase=10   # 16进制的10代表16
ibase
16
ibase=A  # 所以用A代替,不用数字,避免出错
ibase
10

obase=16
obase
10    #16进制的16显示成10

ibase=A; obase=A

8.15 逆波兰标识法

bc是基于dc(desk caculator)dc是最古老的计算器程序甚至比C语言还早最初版本是B语言编写的。
如果您倾向于技术,那么dc的理解十分重要:

  1. 逆波兰表示法(数学、工程、计算机科学)
  2. 理解栈
  3. dc的思考方式和Unix的思考方式相同

\color{green}{1. 中缀表示法}

(23 + 12) * 5

\color{green}{2. 前缀表示法(波兰表示法):}

\* + 10 2 5  

从前往后:
*:只要获得2个数就执行一个乘法
+ :只要获得2个数就相加
接下来是10 和2 : 10 + 2 = 12,记录12,接下来是5,12 * 5 = 60

\color{green}{3. 后缀表示法(逆波兰表示法:RPN)}(postfix notation)
将操作符放在操作数之后。后缀表示法适合自动计算。

10 2 + 5 *

dc基于RPN,bc将中缀表示法转换为逆波兰表示法,然后调用dc完成实际工作。换句话说:bc是dc的前端,dc是bc的后台。GNU将bc完全重写了,不再依赖dc,但是dc仍然可以独立使用。

8.16 基于栈的计算器:dc

从左向右读取表达式,每次一个元素,如果遇到的是数值,压栈,如果遇到的是运算符,则从栈中弹出合适数量的袁术,执行运算,然后将结果压入栈中。

逆波兰表达式:10 2 + 5 *
1)将10压栈:[10]  
2)将2压栈:[2 10]
3)+ ,弹出2 和10 相加,结果12压栈:[12]
4)5压栈:[5 12]
5)*,弹出5和12相乘,结果60压栈:[60]
$dc
10 20 30
f      #展示全栈
30
20
10
+ 
f
50
10
*
f
500
20 30
f
30
20
500
p    #小写p显示栈顶
30
P  #大写P(Pop)弹出栈顶,但不显示
f
20
500
14 k #将精度修改为14位小数,默认精度是0。
命令 含义
q 退出
p 显示栈顶
P 弹出栈顶但不显示
n 弹出栈顶且显示
f 显示栈的全部内容
c 清空栈
d 复制栈顶值
r 反转(交换)栈顶2个值
+ 相加
- 相减
* 相乘
/ 相除
% 取余
~ 相除,将商压入栈中,再将余数压入栈中
^ 弹出2个值,第一个数是第二个数的次幂,结果压栈
v 弹出一个值,求平方根,压栈
k 弹出一个值,使其设置为精度
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容