Swollen

导航

第一周总结

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

  1. 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                                                   #计算器输出结果
  1. bc 计算器进制转换

先设置 obase 之后再设置 ibase,否则会输出异常。

且在计算过程中 ibase 与 obase 只能赋值一次。

[root@centos6 ~]# bc
obase=16                                        #设置输出为16进制
ibase=2                                         #设置输入为2进制
1111111111111100011010                          #输入2进制数
3FFF1A                                          #转换为16进制
  1. 通过管道运算与进制转换

这里使用的管道可以简单的理解为将 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

  1. 控制台终端: /dev/console
  2. 串行终端:/dev/ttyS#
  3. 虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
  4. 伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接
  5. 图形终端:startx, xwindows

4.1 查看当前的终端设备

  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
    
  2. 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)
    
  3. 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 内部命令相关

  1. 查看全部内部命令

    help

  2. 内部命令的管理

    • enable <CMD> 启用内部命令
    • enable –n <CMD> 禁用内部命令
    • enable –n 查看所有禁用的内部命令

5.4 外部指令相关

  1. 查看外部命令路径

    which -a <CMD> --skip-alias

    whereis <CMD>

  2. 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命令

  1. 显示当前shell进程所有可用的命令别名

    alias

  2. 定义别名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'
    
  3. 撤销别名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 + lclear
  • 终止当前命令:ctrl + c
  • 光标移至命令行首: ctrl + a
  • 光标移至命令行尾: ctrl + e
  • 从光标处删除至命令行首:ctrl + u
  • 从光标处删除至命令行尾:ctrl + k
  • 从光标处向左删除至单词首:ctrl + w
  • 从光标处向右删除至单词尾:alt + d
  • 删除光标处的一个字符:ctrl + d

posted on 2022-11-20 14:02  Swollen_D  阅读(98)  评论(0编辑  收藏  举报