第8章
8.1在系統(tǒng)中查找程序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天的提示擦俐。
創(chuàng)建一個calendar文件檬嘀,calendar程序?qū)⒃跈n期目錄中查找這個文件
日期和提示消息之間是制表符:<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 查看系統(tǒng)信息:uptime、hostname鸳兽、uname
- uptime:顯示系統(tǒng)已經(jīng)運行了多長時間
$ uptime
# 當前時間 | up了多長時間 | 當前登錄用戶數(shù) |
# 一直等待執(zhí)行的程序數(shù)量(前1分鐘掂铐,前5分鐘,前15分鐘)
9:26 up 10 mins, 3 users, load averages: 1.14 4.52 4.76
- hostname 查看計算機名
- uname查看操作系統(tǒng)的名稱 (-a)
8.7 顯示自己信息:whoami 揍异、quota
- whoami:顯示登錄使用的用戶標識
- who am i
- quota:查看共享系統(tǒng)上系統(tǒng)管理員限制每個用戶使用多少磁盤空間
8.8 顯示其他用戶信息:users全陨、who、w
#1. users顯示當前登錄系統(tǒng)的所有用戶標識
$ 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?
#第一行是統(tǒng)計信息,等同于uptime命令的輸出镜悉,
# IDLE:用戶上一次按鍵后已經(jīng)過去的時間
# JCPU:自登錄后所有進程總共使用的處理器時間祟辟,“J”代表“jobs(作業(yè))”
# 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命令寫在配置文件里,系統(tǒng)初始化的時候就設置一下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
#現(xiàn)在是8:00PM,下面命令將理解為 8:55PM,而不是 8:55AM
leave 855
8.11 內(nèi)置計算器: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內(nèi)置的輸血函數(shù)庫(library)
s(x)
:x的正弦:sin(x)
c(x)
:x的余弦:cos(x)
a(x)
:x的反正切:
ln(x)
:x的自然對數(shù)
j(n,x)
:x的n次整階貝塞爾函數(shù)
bc標度因子:scale
bc
:默認做整數(shù)運算(忽略小數(shù)點右邊的數(shù)字)
bc -l
: 默認將標度因子(scale factor)設置為20
scale = 3
: 保留3位小數(shù)
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不僅僅是計算器吼具,還是一個功能完整的數(shù)學編程語言,允許使用變量矩距。變量名由一個小寫字母組成拗盒,即: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代替鲁纠,不用數(shù)字,避免出錯
ibase
10
obase=16
obase
10 #16進制的16顯示成10
ibase=A; obase=A
8.15 逆波蘭標識法
bc是基于dc(desk caculator)dc是最古老的計算器程序甚至比C語言還早最初版本是B語言編寫的鳍寂。
如果您傾向于技術改含,那么dc的理解十分重要:
- 逆波蘭表示法(數(shù)學、工程迄汛、計算機科學)
- 理解棧
- dc的思考方式和Unix的思考方式相同
(23 + 12) * 5
\* + 10 2 5
從前往后:
*:只要獲得2個數(shù)就執(zhí)行一個乘法
+ :只要獲得2個數(shù)就相加
接下來是10 和2 : 10 + 2 = 12捍壤,記錄12,接下來是5鞍爱,12 * 5 = 60
(postfix notation)
將操作符放在操作數(shù)之后鹃觉。后綴表示法適合自動計算。
10 2 + 5 *
dc基于RPN睹逃,bc將中綴表示法轉(zhuǎn)換為逆波蘭表示法盗扇,然后調(diào)用dc完成實際工作祷肯。換句話說:bc是dc的前端,dc是bc的后臺疗隶。GNU將bc完全重寫了佑笋,不再依賴dc,但是dc仍然可以獨立使用斑鼻。
8.16 基于棧的計算器:dc
從左向右讀取表達式蒋纬,每次一個元素,如果遇到的是數(shù)值坚弱,壓棧蜀备,如果遇到的是運算符,則從棧中彈出合適數(shù)量的袁術荒叶,執(zhí)行運算碾阁,然后將結(jié)果壓入棧中。
逆波蘭表達式:10 2 + 5 *
1)將10壓棧:[10]
2)將2壓棧:[2 10]
3)+ 停撞,彈出2 和10 相加瓷蛙,結(jié)果12壓棧:[12]
4)5壓棧:[5 12]
5)*,彈出5和12相乘戈毒,結(jié)果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位小數(shù),默認精度是0埋市。
命令 | 含義 |
---|---|
q | 退出 |
p | 顯示棧頂 |
P | 彈出棧頂?shù)伙@示 |
n | 彈出棧頂且顯示 |
f | 顯示棧的全部內(nèi)容 |
c | 清空棧 |
d | 復制棧頂值 |
r | 反轉(zhuǎn)(交換)棧頂2個值 |
+ | 相加 |
- | 相減 |
* | 相乘 |
/ | 相除 |
% | 取余 |
~ | 相除冠桃,將商壓入棧中,再將余數(shù)壓入棧中 |
^ | 彈出2個值道宅,第一個數(shù)是第二個數(shù)的次冪食听,結(jié)果壓棧 |
v | 彈出一個值,求平方根污茵,壓棧 |
k | 彈出一個值樱报,使其設置為精度 |