第一周总结
1. 冯·诺依曼体系
8 个二进制位(bit,b)为 1 个字节(byte,B)。
00000000 ~ 11111111 (共有 28 种可能)
1.1.1 二进制
二进制,即逢 2 升位。
通过声卡、显卡等设备,将二进制数据转换成文字、图像、音视频等。
二进制 | 十进制 | |
---|---|---|
0 | 0 | |
20 | 1 | 1 |
21 | 10 | 2 |
11 | 3 | |
22 | 100 | 4 |
101 | 5 | |
110 | 6 | |
111 | 7 | |
23 | 1000 | 8 |
… | … | |
24 | 10000 | 16 |
… | … | |
25 | 100000 | 32 |
… | … | |
26 | 1000000 | 64 |
… | … | |
27 | 10000000 | 128 |
... | ... | |
28 | 100000000 | 256 |
.. | ... | |
29 | 1000000000 | 512 |
... | ... | |
210 | 10000000000 | 1024 |
... | ... | |
211 | 100000000000 | 2048 |
... | ... |
1.1.1.1 十进制转二进制
找最近的 2n 的数字进行依次相减余数为 2n 的时候,用二进制对位相加得出目标数字二进制数值。
例1: 26
∵ 26-16=10-8=2
∴ 26=16+8+2
∴ 26 的二进制表达为:
例2: 57
∵ 57-32=25-16=9-8=1
∴ 57=32+16+8+1
∴ 57 的二进制表达为:
1.1.1.2 二进制转十进制
将二进制的值拆分成 2n 的值,将其数值相加即可。
例1: 10101101
∵
∴ 10101101= 128+32+8+4+1=173
1.1.2 Linux 计算器—— bc
指令:bc
- bc 计算器默认输入、输出都为 10 进制。
[root@centos6 ~]# bc #打开bc计算器
bc 1.06.95
Copyright 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
88*123 #计算 88*123
10824 #计算器输出结果
#
#
123+65*2-100 #计算123+65*2-100
153 #计算器输出结果
- bc 计算器进制转换
先设置
obase
之后再设置ibase
,否则会输出异常。且在计算过程中 ibase 与 obase 只能赋值一次。
[root@centos6 ~]# bc
obase=16 #设置输出为16进制
ibase=2 #设置输入为2进制
1111111111111100011010 #输入2进制数
3FFF1A #转换为16进制
- 通过管道运算与进制转换
这里使用的管道可以简单的理解为将 echo"< content >"
发送给 bc 计算器
[root@centos6 ~]# echo "1+1" | bc #将1+1发送给bc计算器
2
[root@centos6 ~]#
[root@centos6 ~]# echo "5*10-1" | bc #将5*10-1发送给bc计算器
49
#十进制转二进制:echo "obase=2;255" | bc
#八进制转十进制:echo "obase=10;ibase=8;377" | bc
#二进制转十进制:echo "obase=10;ibase=2;11111111" | bc
#二进制转16进制:echo "obase=16;ibase=2;11111111" | bc
[root@centos8 ~]#echo "obase=2;255" | bc
11111111
[root@centos8 ~]#echo "obase=10;ibase=8;377" | bc
255
[root@centos8 ~]#echo "obase=10;ibase=2;11111111" | bc
255
[root@centos8 ~]#echo "obase=16;ibase=2;11111111" | bc
FF
#注意前后顺序, ibase在前计算结果会有误。 如下:
[root@centos8 ~]#echo "ibase=2;obase=16;11111111" | bc
100110
2. 开源协议
各种开源协议如下图:
- GPLv2, GPLv3, LGPL(lesser) :通用公共许可 copyleft
- Apache: apache
- BSD: bsd
- Mozilla
- MIT
2.1 GNU
GNU: GNU is not Unix
目标: 编写大量兼容于Unix系统的自由软件
2.2 GPL
GPL: GNU General Public License
自由软件基金会:Free Software Foundation
允许用户任意复制、传递、修改及再发布
基于自由软件修改再次发布的软件,仍需遵守GPL
2.3 LGPL
LGPL:Lesser General Public License
LGPL相对于GPL较为宽松,允许不公开全部源代码
查看软件的发行许可
[root@host1 ~]# rpm -qi kernel
Name : kernel
Version : 3.10.0
Release : 1062.el7
Architecture: x86_64
Install Date: Wed 15 Apr 2020 07:50:52 PM EDT
Group : System Environment/Kernel
Size : 67060903
License : GPLv2
Signature : RSA/SHA256, Thu 22 Aug 2019 05:27:58 PM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : kernel-3.10.0-1062.el7.src.rpm
Build Date : Wed 07 Aug 2019 02:28:07 PM EDT
Build Host : kbuilder.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.kernel.org/
Summary : The Linux kernel
Description :
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
Name : kernel
Version : 3.10.0
Release : 1127.8.2.el7
Architecture: x86_64
Install Date: Mon 01 Jun 2020 12:51:16 AM EDT
Group : System Environment/Kernel
Size : 67357308
License : GPLv2
Signature : RSA/SHA256, Thu 14 May 2020 04:58:03 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : kernel-3.10.0-1127.8.2.el7.src.rpm
Build Date : Tue 12 May 2020 01:12:40 PM EDT
Build Host : kbuilder.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.kernel.org/
Summary : The Linux kernel
Description :
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
[root@host1 ~]# rpm -qi openssh
Name : openssh
Version : 7.4p1
Release : 21.el7
Architecture: x86_64
Install Date: Wed 15 Apr 2020 07:50:43 PM EDT
Group : Applications/Internet
Size : 1991172
License : BSD
Signature : RSA/SHA256, Thu 22 Aug 2019 05:37:23 PM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : openssh-7.4p1-21.el7.src.rpm
Build Date : Thu 08 Aug 2019 09:40:49 PM EDT
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.openssh.com/portable.html
Summary : An open source implementation of SSH protocol versions 1 and 2
Description :
SSH (Secure SHell) is a program for logging into and executing
commands on a remote machine. SSH is intended to replace rlogin and
rsh, and to provide secure encrypted communications between two
untrusted hosts over an insecure network. X11 connections and
arbitrary TCP/IP ports can also be forwarded over the secure channel.
OpenSSH is OpenBSD's version of the last free version of SSH, bringing
it up to date in terms of security and features.
This package includes the core files necessary for both the OpenSSH
client and server. To make this package useful, you should also
install openssh-clients, openssh-server, or both.
3. Unix/Linux 哲学思想
- 一切皆文件,包括硬件,如硬盘、网卡等
- 小型,单一用途的程序(指令)
- 链接程序,共同完成复杂的任务(将多个小程序组合起来完成复杂任务,即shell脚本)
- 避免令人困惑的用户界面
- 配置数据储存在文本中
4. 终端 Terminal
- 控制台终端: /dev/console
- 串行终端:/dev/ttyS#
- 虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
- 伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接
- 图形终端:startx, xwindows
4.1 查看当前的终端设备
-
w
可查看当前服务器所有登录的终端设备root@admin:~# w 17:50:08 up 10 min, 2 users, load average: 1.02, 0.63, 0.34 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.137.1 17:40 0.00s 0.02s 0.00s w root pts/1 192.168.137.1 17:49 15.00s 0.01s 0.01s -bash
-
who
也可查看当前服务器所有登录的终端设备root@admin:~# who root pts/0 2022-11-19 17:40 (192.168.137.1) root pts/1 2022-11-19 17:49 (192.168.137.1)
-
tty
可查看本机登录的终端设备信息root@admin:~# tty /dev/pts/0
5. Linux 命令
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
Linux可执行的命令分为三种:
- alias命令:对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
- 内部命令:由shell自带的,而且通过某命令形式提供, ,用户登录后自动加载并常驻内存中
- 外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除
5.1 Linux命令执行的优先级
系统三种命令的优先级:
alias命令 > 内部命令 > 外部命令
当用户通过CLI输入一条指令时,系统环境会优先判断该指令是否为alias指令;若不是,则判断是否为内部指令;若仍不是内部指令,则为外部指令并执行。
5.2 判断内部指令与外部指令
指令: type
root@admin:~# type -a echo
echo is a shell builtin #内部指令
echo is /usr/bin/echo #外部指令,以及可执行程序文件的位置
echo is /bin/echo #外部指令,以及可执行程序文件的位置
出于系统冗余性的考虑,有些指令即是内部指令也是外部指令。
5.3 内部命令相关
-
查看全部内部命令
help
-
内部命令的管理
enable <CMD>
启用内部命令enable –n <CMD>
禁用内部命令enable –n
查看所有禁用的内部命令
5.4 外部指令相关
-
查看外部命令路径
which -a <CMD> --skip-alias
whereis <CMD>
-
Hash缓存表
系统初始hash表为空
当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的
路径记录到hash表中。当再次使用该命令时,shell解释器首先会查看hash表,存在则将其执行;如果不存在,将会去PATH路径下寻找。
利用hash缓存表可大大提高命令的调用速率
hash 命令常见用法:
- hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除缓存
5.5 Alias命令
-
显示当前shell进程所有可用的命令别名
alias
-
定义别名
alias
,其相当于执行命令VALUE:alias NAME='VALUE'
例如:
root@centos8 ~]#alias scandisk='echo - - - > /sys/class/scsi_host/host0/scan;echo - - - > /sys/class/scsi_host/host1/scan;echo - - - > /sys/class/scsi_host/host2/scan'
-
撤销别名
unalias
unalias name [name ...] unalias -a #撤销所有别名
注意:在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件
source /path/to/config_file
OR
. /path/to/config_file
如果别名同原命令同名,如果要执行原命令,可使用以下方法:
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令
6. 命令行扩展和括号扩展
6.1 命令行扩展:`` 和 $()
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令
$(COMMAND)
Command
例如:
[root@host1 ~]# cat 1.txt
a
b
c
[root@host1 ~]# echo `cat 1.txt`
a b c
[root@host1 ~]# echo $(cat 1.txt)
a b c
双引号""、单引号''和反向单引号``的比较:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"
双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"
例如:
root@admin:~# echo $HOSTNAME
admin
root@admin:~# echo "echo $HOSTNAME"
echo admin
root@admin:~# echo 'echo $HOSTNAME'
echo $HOSTNAME
root@admin:~# echo `echo $HOSTNAME`
admin
root@admin:~# echo "This system's name is $(hostname)"
This system's name is admin
root@admin:~# echo "I am `whoami`"
I am root
root@admin:~# touch $(date +%F).log
root@admin:~# ls -l *.log
-rw-r--r-- 1 root root 0 Nov 20 03:15 2022-11-20.log
root@admin:~# touch `date +%F`.txt
root@admin:~# ls -l *.txt
-rw-r--r-- 1 root root 0 Nov 20 03:16 2022-11-20.txt
root@admin:~# touch `hostname`-`date +%F`.log
root@admin:~# ls -l *.log
-rw-r--r-- 1 root root 0 Nov 20 03:16 admin-2022-11-20.log
6.2 括号扩展 {}
{} 可以实现打印重复字符串的简化形式
{元素1,元素2,元素3 ······} 表示n个元素的集合
root@admin:~# echo {1,3,4}
1 3 4
root@admin:~# echo {1,3,4,5}
1 3 4 5
{元素1..元素2..元素3} 表示从元素1到元素2范围中的所有元素,步长为元素3
root@admin:~# echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
root@admin:~# echo {1..10}
1 2 3 4 5 6 7 8 9 10
root@admin:~# echo {1..10..2}
1 3 5 7 9
root@admin:~/test# echo {A..Z..2}
A C E G I K M O Q S U W Y
批量生成文件:
root@admin:~/test# echo {A..Z..2}
A C E G I K M O Q S U W Y
root@admin:~/test# echo {1..10..2}
1 3 5 7 9
root@admin:~/test# touch {A..Z..2}-{1..10..2}.txt
root@admin:~/test# ls
A-1.txt C-1.txt E-1.txt G-1.txt I-1.txt K-1.txt M-1.txt O-1.txt Q-1.txt S-1.txt U-1.txt W-1.txt Y-1.txt
A-3.txt C-3.txt E-3.txt G-3.txt I-3.txt K-3.txt M-3.txt O-3.txt Q-3.txt S-3.txt U-3.txt W-3.txt Y-3.txt
A-5.txt C-5.txt E-5.txt G-5.txt I-5.txt K-5.txt M-5.txt O-5.txt Q-5.txt S-5.txt U-5.txt W-5.txt Y-5.txt
A-7.txt C-7.txt E-7.txt G-7.txt I-7.txt K-7.txt M-7.txt O-7.txt Q-7.txt S-7.txt U-7.txt W-7.txt Y-7.txt
A-9.txt C-9.txt E-9.txt G-9.txt I-9.txt K-9.txt M-9.txt O-9.txt Q-9.txt S-9.txt U-9.txt W-9.txt Y-9.txt
关闭和启用{}的扩展功能
root@admin:~# echo $-
himBHs
root@admin:~# echo {1..10}
1 2 3 4 5 6 7 8 9 10
#禁用{}扩展功能
root@admin:~# set +B
root@admin:~# echo $-
himHs
root@admin:~# echo {1..10}
{1..10}
#启用{}扩展功能
root@admin:~# set -B
root@admin:~# echo $-
himBHs
root@admin:~# echo {1..10}
1 2 3 4 5 6 7 8 9 10
7. Linux 常用快捷键
- 清屏:
ctrl + l
或clear
- 终止当前命令:
ctrl + c
- 光标移至命令行首:
ctrl + a
- 光标移至命令行尾:
ctrl + e
- 从光标处删除至命令行首:
ctrl + u
- 从光标处删除至命令行尾:
ctrl + k
- 从光标处向左删除至单词首:
ctrl + w
- 从光标处向右删除至单词尾:
alt + d
- 删除光标处的一个字符:
ctrl + d