一、冯·洛依曼计算机体系结构

1、结构图

2、特点

  • 指令和数据采用二进制表示
  • 指令在存储器中按顺序存放
  • 指令和数据以相同形式存放与存储器中
  • 指令有操作码和地址码组成
  • 计算机有运算器、存储器、控制器、输入设备和输出设备五大部件组成

二、进制转换

1、bc 命令(进制之间的转换,默认为10进制)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@Rocky8-en ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2*3
6 // 默认为10进制,得计算结果
ibase=2 // 设定输入的数字类型为二进制,输出默认为10进制
110
6
quit
[root@Rocky8-en ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
obase=2 // 设定输出的类型为二进制,默认输入为十进制
8
1000
9
1001

2、各进制之间的转换

1
2
3
4
5
6
7
8
9
10
11
12
-十进制转二进制-
[root@Rocky8-en ~]# echo "obase=2;9" | bc // 将十进制9转化为二进制输出
1001
-八进制转十进制-
[root@Rocky8-en ~]# echo "obase=10;ibase=8;11" | bc
9
-二进制转十进制-
[root@Rocky8-en ~]# echo "obase=10;ibase=2;110" | bc
6
-二进制转十六进制-
[root@Rocky8-en ~]# echo "obase=16;ibase=2;10010" | bc
12

三、Unix 的哲学思想

  • 一切皆文件
    • 不管是普通的文件,还是目录、字符设备、块设备、套接字等在Unix中都是以文件形式对待,采用统一的接口被提供
  • 配置数据存储在文本中
    • Linux中大部分配置文件存放在文本中,方便我们进行修改来解决一些发生的错误;像Windows中的程序配置文件放在注册表中,注册表采用若干个二进制文件,出错很难修改。
  • 提供许多小型的单一用途的程序
    • 使用单一的程序就可以完成相应的操作
  • 避免令人困惑的用户界面
    • 更多的采用字符界面,图形界面会产生一些虚假的现象,执行过程中不稳定
  • 连接程序,完成复杂的功能
    • 某些复杂的任务,可以连接多个简单的程序来实现其复杂的功能。像编写SHELL程序。

四、SHELL

​ Shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 显示当前使用的shell
[root@Rocky8-en ~]# echo $SHELL
/bin/bash
-- 显示当前系统使用的所有shell
[root@Rocky8-mini ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
wh@unbuntu18:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash

4.1 Shell中执行的命令

4.1.1 shell 中可执行的两类命令
  • 内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并常驻内存中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- type 判断指定的命令时外部命令还是内部命令
[root@Rocky8-en ~]# type -a cat // 外部命令
cat is /usr/bin/cat
[root@Rocky8-en ~]# type -a echo // 内部命令也是外部命令
echo is a shell builtin
echo is /usr/bin/echo
-- 列出当前shell所有的内部命令
[root@Rocky8-en ~]# enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
···
···
enable wait
  • 外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除
1
2
3
4
5
-- 查看外部名令的路径
[root@Rocky8-en ~]# which cat
/usr/bin/cat
[root@Rocky8-en ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz
  • Hash缓存表

​ 系统初始时hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当在此使用该命令时,shell解释器首先查看hash表。

1
2
3
4
5
6
7
常见用法	
hash 显示hash缓存
hash -l 显示hash缓存,可作为输入使用
hash -p PATH NAME 将命令全路径path起别名为name
hash -t NAME 打印缓存中命令的路径
hash -d NAME 清除指定命令缓存
hash -r 清除缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@Rocky8-mini ~]# hash -t clock
/usr/sbin/clock
=========================================================================
[root@Rocky8-mini ~]# hash -l
builtin hash -p /usr/bin/dnf dnf
builtin hash -p /usr/bin/screen screen
builtin hash -p /usr/bin/systemctl systemctl
builtin hash -p /usr/bin/vim vim
builtin hash -p /usr/bin/date date
builtin hash -p /usr/bin/uname uname
builtin hash -p /usr/bin/who who
builtin hash -p /usr/bin/whoami whoami
builtin hash -p /usr/bin/man man
builtin hash -p /usr/sbin/shutdown shutdown
builtin hash -p /usr/sbin/clock clock
builtin hash -p /usr/sbin/hwclock hwclock
===========================================================================
[root@Rocky8-mini ~]# hash -d clock
[root@Rocky8-mini ~]# hash
hits command
1 /usr/bin/dnf
1 /usr/bin/screen
1 /usr/bin/systemctl
1 /usr/bin/vim
5 /usr/bin/date
1 /usr/bin/uname
1 /usr/bin/who
1 /usr/bin/whoami
2 /usr/bin/man
8 /usr/sbin/shutdown
3 /usr/sbin/hwclock
==============================================================================
[root@Rocky8-mini ~]# hash -r
[root@Rocky8-mini ~]# hash
hash: hash table empty
4.1.2、命令别名

​ 对于经常执行的较长命令,可以将其定义为较短的别名,方便执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 显示当前shell进程所有可用的命令别名
[root@Rocky8-mini ~]# alias

-- 定义别名 alias 新名='需要定义别名的命令'
[root@Rocky8-en ~]# ls /etc/yum.repos.d/
CentOS-Base.repo epel-modular.repo epel.repo epel-testing-modular.repo epel-testing.repo
[root@Rocky8-en ~]# alias lsrepo='ls /etc/yum.repos.d'
[root@Rocky8-en ~]# lsrepo
CentOS-Base.repo epel-modular.repo epel.repo epel-testing-modular.repo epel-testing.repo

-- 取消别名 unalias 别名
[root@Rocky8-en ~]# unalias lsrepo
[root@Rocky8-en ~]# lsrepo
bash: lsrepo: command not found...

-- 定义别名配置永久有效
* 仅对当前用户 ~/.bashrc
* 对所有用户 /etc/bashrc

-- 如果别名同原命令,仍然向执行原命令
\ALIASNAME
'ALIASNAME'
4.1.3 命令的执行次序
  • 系统先判断是否是别名,如果是就立即执行
  • 如果不是别名,判断是否是内部命令,是就执行
  • 如果不是内部命令,查询hash对应的缓存区中是否有此命令对应的路径,如果有就按照此路径在磁盘上查找此命令的文件并执行。如果找不到对应的文件,无法执行此命令。
  • 如果在hash缓存区中没有对应的命令,则按照PATH系统变量指定的路径进行搜索,如果找到了,则立刻执行,停止向后查找。
  • 如果在PATH系统变量中也无法查找到,则提示没有此命令。

五、常见命令

5.1 查看当前所在的终端

1
2
3
4
[root@Rocky8-en ~]# tty
/dev/pts/0 // 伪终端
[root@Rocky8-en ~]# tty
/dev/tty1 // 虚拟终端

5.2 设置主机名

1
2
3
4
-- 临时生效
hostname NAME
-- 永久生效(CentOS7和Ubuntu18.04以上版本)
hostnamectl set-hostname NAME

5.3 查看 CPU的架构信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
[root@Rocky8-mini ~]# lscpu
Architecture: x86_64 // cpu架构信息
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2 // 虚拟机的cpu核数
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
BIOS Vendor ID: GenuineIntel
CPU family: 6
Model: 142
Model name: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz // 物理机的CPU型号
BIOS Model name: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
Stepping: 9
CPU MHz: 2712.002
BogoMIPS: 5424.00
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0,1
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities
=========================================================================================
[root@Rocky8-mini ~]# cat /proc/cpuinfo // 将每一个cpu的完整信息展现出来
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping : 9
microcode : 0xc6
cpu MHz : 2712.002
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips : 5424.00
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping : 9
microcode : 0xc6
cpu MHz : 2712.002
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips : 5424.00
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:

5.4 查看内存大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- 展示系统内存的使用情况,-h 选项便于可读 --
[root@Rocky8-mini ~]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 254Mi 1.1Gi 8.0Mi 437Mi 1.3Gi
Swap: 2.0Gi 0B 2.0Gi
=========================================================================================
[root@Rocky8-mini ~]# cat /proc/meminfo
MemTotal: 1833232 kB
MemFree: 1124496 kB
MemAvailable: 1410600 kB
Buffers: 3164 kB
Cached: 400380 kB
SwapCached: 0 kB
Active: 246284 kB
Inactive: 257196 kB
Active(anon): 1928 kB
Inactive(anon): 106892 kB
Active(file): 244356 kB
Inactive(file): 150304 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2129916 kB
···
···
DirectMap1G: 0 kB

5.5 查看硬盘和分区情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@Rocky8-mini ~]# lsblk      // 默认查看所有设备,也可后接设备,查看指定的设备
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─rl-root 253:0 0 47G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 10G 0 rom

-- major: 主版本号 minor: 次版本号 name: 设备名称 #blocks: 表示block的数目
[root@Rocky8-mini ~]# cat /proc/partitions
major minor #blocks name

8 0 52428800 sda
8 1 1048576 sda1
8 2 51379200 sda2
11 0 10465280 sr0
253 0 49246208 dm-0
253 1 2129920 dm-1

5.6 查看系统版本信息

  • 查看系统架构
1
2
[root@Rocky8-mini ~]# arch
x86_64
  • 查看内核版本
1
2
3
4
[root@Rocky8-mini ~]# uname -r
4.18.0-348.el8.0.2.x86_64
[root@centos7-mini ~]# uname -r
3.10.0-1160.el7.x86_64
  • 查看操作系统发行版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Rocky8-mini ~]# cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
=========================================================================================
[root@Rocky8-mini ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.5 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8.5:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"

5.7 日期和时间

Linux的两种时钟:

  • 系统时钟 Linux内核通过CPU工作频率进行计时
  • 硬件时钟 计算机主板的内部物理芯片计时

(1)date

date - print or set the system date and time

date [OPTION]… [+FORMAT]
date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- 显示当前默认时间格式 --
[root@Rocky8-mini ~]# date
Wed Mar 2 01:56:39 EST 2022
-- 只显示当前日期 --
[root@Rocky8-mini ~]# date +%F
2022-03-02
-- 只显示当前的小时、分钟、秒数时间 --
[root@Rocky8-mini ~]# date +%T
02:12:05
-- 显示昨天的日期 --
[root@Rocky8-mini ~]# date -d '-1 day' +%F
2022-03-01
-- 设置当前的日期为明年的日期 --
[root@Rocky8-mini ~]# date -s '1 year' +%F
2023-03-02
[root@Rocky8-mini ~]# date "+%F %T"
2023-03-02 02:10:19
-- 设置时间为2022年7月1日12点30分30秒 --
[root@Rocky8-mini ~]# date 070112302022.30
Fri Jul 1 12:30:30 EDT 2022

(2)hwclock/clock 操作硬件时钟

-s 以硬件时间为准,设定系统时间

-w 以系统时间为准,设定硬件时间

1
2
3
4
5
6
7
8
-- 显示硬件时间 --
[root@Rocky8-mini ~]# hwclock
2022-03-04 06:30:41.965061-05:00
-- 调整系统时间 --
[root@Rocky8-mini ~]# hwclock -s
[root@Rocky8-mini ~]# clock;date
2022-03-04 06:32:00.405387-05:00
Fri Mar 4 06:32:00 EST 2022

5.8 关机和重启

关机:shutdown、halt、poweroff

重启:reboot

1
2
3
4
5
6
7
8
9
10
11
shutdown now 立刻关机
+# #分钟之后关机
hh:mm 指明具体时间
-c 取消关机
-r 重启
[root@Rocky8-mini ~]# shutdown 12:30 //十二点半关机
Shutdown scheduled for Fri 2022-03-04 12:30:00 EST, use 'shutdown -c' to cancel.
[root@Rocky8-mini ~]# shutdown +5 // 五分钟后关机
Shutdown scheduled for Fri 2022-03-04 06:42:52 EST, use 'shutdown -c' to cancel.
[root@Rocky8-mini ~]# date
Fri Mar 4 06:37:58 EST 2022

5.9 用户登录信息查看

whoami 显示当前登录的有效用户

who 显示系统当前所有的登录会话

w 显示系统当前所有的登录会话及所做的操作

1
2
3
4
5
6
7
8
[root@Rocky8-mini ~]# whoami
root
[root@Rocky8-mini ~]# who
root pts/0 2022-03-04 06:16 (192.168.84.1)
[root@Rocky8-mini ~]# w
06:49:03 up 48 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.84.1 06:16 5.00s 0.15s 0.00s w

5.10 会话管理

​ 当我们打开一个终端窗口的时候,终端的窗口与启动的进程连接在一起。如果此时窗口突然关闭了,那我们正在执行的某个进程也会终止。使用会话,可以在终端窗口不正常关闭的同时,依然保存着他当前的会话。

image

删除掉此screen会话,在新建一个正常会话,查看ping命令是否还在继续执行

1
2
3
4
5
6
[root@Rocky8-mini ~]# ps aux | grep ping      // ping 命令还在继续执行
root 2464 0.0 0.2 55252 5012 pts/0 S+ 10:09 0:00 ping www.baidu.com
root 2495 0.0 0.0 12136 1176 pts/3 S+ 10:14 0:00 grep --color=auto ping
[root@Rocky8-mini ~]# kill -15 2464 // 终止此命令
[root@Rocky8-mini ~]# ps aux | grep ping
root 2497 0.0 0.0 12136 1176 pts/3 S+ 10:14 0:00 grep --color=auto ping

5.11 命令行历史(history)

​ 当执行一条命令时,系统会在内存记录执行过的命令,当用户退出时,会将内存的命令写入对应的历史文件中(~/.bash_history)

常用选项:

1
2
3
4
-c:清空命令历史
-d NUMBER:删除历史中指定的第几条命令
n:显示最近到的n条历史
-a:追加新执行的命令到历史文件中

命令历史环境变量

1
2
3
4
HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami` " 显示时间和用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- 设置查看命令历史时可以查看执行的时间 --
[root@Rocky8-mini ~]# export HISTTIMEFORMAT="%F %T"
[root@Rocky8-mini ~]# history | head
1 2022-03-04 10:11:16ip a
2 2022-03-04 10:11:16systemctl restart network
3 2022-03-04 10:11:16systemctl restart network-manager
4 2022-03-04 10:11:16quit
5 2022-03-04 10:11:16exit
6 2022-03-04 10:11:16ls]
7 2022-03-04 10:11:16ls
8 2022-03-04 10:11:16cd /root
9 2022-03-04 10:11:16ls
10 2022-03-04 10:11:16cd /honme
==============================================================================
-- 如果需要永久存储,需要写进配置文件中 --
[root@Rocky8-mini ~]# cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export HISTTIMEFORMAT="%F %T"

5.12 tr

​ tr 命令可以接受标准输入并按指定规则进行转换

SYNOPSIS
tr [OPTION]… SET1 [SET2]

常用选项

1
2
3
-c, -C, --complement		use the complement of SET1
-d, --delete delete characters in SET1, do not translate
-s, --squeeze-repeats 将最后指定的 SET 中列出的重复字符的每个序列替换为该字符的单个匹配项

实例

1
2
3
4
[root@Rocky8-mini test]# cat /dev/urandom | tr -dc [:alnum:] | echo `head -c 8`
Q9WE83YS
[root@Rocky8-mini test]# echo Ixamxwh | tr -s x " "
I am wh

5.13 输出信息 echo

5.13.1 基础用法

​ 将echo后面的字符进行输出,默认以空白字符分隔。

1
2
3
4
option:
-E 不支持转义(默认)
-n 不自动换行
-e 启用 '\' 字符功能

​ 显示变量

1
2
3
4
5
6
7
echo "$var_name"				弱引用,会输出变量的值
echo '$var_name' 强引用,变量的值不会输出

[root@Rocky8-mini ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Rocky8-mini ~]# echo '$PATH'
$PATH

​ 使用-e选项后支持的转义符号及所表达的意思

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
\\     backslash
[root@Rocky8-mini ~]# echo -e \\
\

\a alert (BEL)
[root@Rocky8-mini ~]# echo -e '\a'

\b backspace

\c produce no further output

\e escape

\f form feed

\n new line 换行
[root@Rocky8-mini ~]# echo -e 'abc\nasdf'
abc
asdf

\r carriage return 回车,光标移至行首,但不换行

\t horizontal tab

\v vertical tab

\0NNN byte with octal value NNN (1 to 3 digits)

\xHH byte with hexadecimal value HH (1 to 2 digits)
5.13.2 高级用法

​ 在终端中,可以输出带有颜色的字符。

1
"\033[字符背景颜色;字体颜色m字符串\033[0m"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 字体颜色范围:30--37
30 黑
31 红
32 绿
33 黄
34 蓝
35 紫
36 深绿
37 白

# 字符背景颜色范围:40--47
40 黑
41 红
42 绿
43 黄
44 蓝
45 紫
46 深绿
47 白

5.14 压力测试 ab

ab - Apache HTTP server benchmarking tool

1
2
3
4
5
6
[option]
-n 指定总共发起多少请求
-c 指定同时发起的请求数(并发)
-T 指定请求的数据格式
-k 保持连接(每次请求复用前面建立的连接)
-m 指定请求方法名称,如GET、POST等

六、命令行历史(history)

​ 在终端执行命令后,系统会在内存记录执行过的命令。当用户正常退出时,会将内存中保存的命令写入到对于应的历史文件中,默认是~/.bash_history。当再一次登录到shell时,会读取历史文件中记录的命令到内存中。

1
2
3
4
5
6
常用选项:
-c 清空命令历史
-d offset 删除历史中指定的第offset命令
n 显示最近的n跳命令
-a 手动将新执行的命令列表写入到历史文件中
-w 保存历史列表到指定的历史文件

命令历史相关环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
HISTSIZE	命令历史记录的条数

HISTFILE 指定存储命令历史的文件,默认~/.bash_history

HISTFILESIZE 命令历史文件记录历史命令的条数

HISTTIMEFORMAT="%F %T `whoami`" 显示时间和用户

HISTCONTROL 控制命令历史的记录方式
ignoredups 默认,忽略重复的命令,相同且连续为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups,ignorespace的组合
erasedups 删除重复命令

持久保存变量

​ 使用 export 变量名=”值” 的形式存放在 /etc/profile 或 ~/.bash_profile 中实现永久保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@Rocky8-mini ~]# cat ./.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "

[root@Rocky8-mini ~]# history 2
999 2022-08-16 08:02:43 exit
1000 2022-08-16 08:02:47 history 2

七、BASH快捷键

1
2
3
4
5
6
7
8
9
10
11
12
Ctrl + l	清屏,相当于clear命令
Ctrl + s 阻止屏幕输出
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移动到行首
Ctrl + e 光标移动到行尾
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除整行
Ctrl + w 从光标处向左删除单词首
Alt + d 从光标处向右删除至词尾

​ 注:为了防止Alt快捷键与其他软件冲突,在 Xshell 中启动自己的Alt键

image-20220816201742468