Files
team-learning-program/Blockchain/part0_Linux基础.md
T

385 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 新手建议
## 学习Linux的注意事项
* Linux严格区分大小写(命令全都是小写)—— 命令、文件名、选项等均区分大小写
* Linux中**所有内容**以文件形式保存,包括硬件
* 硬盘文件是/dev/sd[a-p]
* 光盘文件是/dev/sr0等
* Windows通过扩展名区分文件类型,还有图标可以区分;Linux不靠扩展名区分文件类型,靠文件权限区分,但也有一些约定俗成的扩展名:
* 压缩包:"*.gz", "*.bz2", "*.tar.bz2", "*.tgz"等
* 二进制软件包:".rpm"
* 网页文件:"*.sh"
* 配置文件:"*.conf"
注意:这些扩展名不是必要的,即时不加扩展名也没有影响,只是便于管理而已
* Linux所有存储设备都必须挂在之后用户才能使用,包括硬盘、U盘、光盘(将设备与挂载点连接的过程就是挂载)
* Windows下的程序不能直接在Linux中安装和运行
## 服务器管理和维护建议
### 服务器管理
| 目录名 | 目录作用 |
| :----------: | :----------------------------------------------------------: |
| /bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行,不过放在/bin下的命令在单用户模式下也可以执行 |
| /sbin/ | 保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看 |
| /usr/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行,这些命令和系统启动无关,在单用户模式下不能执行 |
| /usr/sbin/ | 存放根文件系统不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用 |
| /boot/ | 系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
| /dev/ | 设备文件保存位置,我们已经说过Linux中所有内容以文件形式保存,包括硬件,这个目录就是用来 保存所有硬件设备的 |
| /etc/ | 配置文件保存位置,系统内所有采用默认安装方式(npm安装)的服务的配置文件全部保存在这个目录中,如用户账户和密码,服务的启动脚本,常用服务的配置文件等 |
| /home/ | 每个用户的默认登陆位置,普通用户的home目录就是在/home下建立一个和用户名相同的目录 |
| /lib/ | 系统调用的函数库保存位置 |
| /lost+found/ | 当系统意外崩溃或机器意外关机时,产生的一些文件碎片放在这里,当系统启动的过程中fsck工具会对其进行检查,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份恢复目录 |
| /media/ | 挂载目录,系统建议是用来挂载媒体设备的,例如软盘和光盘 |
| /mnt/ | 挂载目录,建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区 |
| /misc/ | 挂载目录,系统建议用来挂载NFS服务的共享目录 |
| /opt/ | 第三方安装的软件保存位置,但现在更多的是保存在/usr/local中 |
| /proc/ | 虚拟文件系统,该目录的数据不保存到硬盘中,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态灯,如/proc/cpuinfo是保存CPU信息的,/proc/devices是保存设备驱动的列表的,/proc/filesystems是保存 文件系统列表的,/proc/net/是保存网络协议信息的 |
| /sys/ | 虚拟文件系统,主要保存内核相关信息 |
| /root/ | 超级用户的家目录 |
| /srv/ | 服务数据目录, 一些系统服务启动后可以在这个目录保存需要的数据 |
| /tmp/ | 临时目录,系统存放临时文件的目录,该目录下所有用户都可以访问和写入,我们建议此目录不能保存重要数据,最好每次开机都把该目录清空 |
| /usr/ | 系统软件资源目录,注意usr不是user的缩写,而是"Unix Software Resource"的缩写,所以不是存放用户数据,而是存放系统软件资源的目录。系统中安装的软件大多数都在这里 |
| /var/ | 动态数据保存位置,主要保存缓存、日志以及软件运行所产生的文件 |
### 服务器注意事项
1. 远程服务器不允许关机,只能重启
2. 重启时应该关闭服务
3. 不要在服务器的访问高峰运行高负载命令
4. 远程配置防火墙时不要把自己踢出服务器(可以设置每五分钟将防火墙规则重置一次,配置完之后再取消该设置)
5. 指定合理的密码规范并定期更新
6. 合理分配权限
7. 定期备份重要数据和日志
磁盘分区是用分区编辑器在磁盘上划分几个逻辑部分,碟片一旦划分成数个分区,不同类的目录和文件 可以存储进不同的分区。
# 系统分区
## 分区类型
* 主分区:最多只能有4个
* 扩展分区:
* 最多只能有1个
* 主分区加扩展分区最多有4个
* 不能写入数据,只能包含逻辑分区(这种限制是硬盘的限制)
* 逻辑分区
## 格式化
硬盘经过正确分区后仍不能写入数据,我们的硬盘还必须经过格式化之后才能写入数据。格式化又称逻辑格式化,它是根据用户选定的文件系统(如FAT16、FAT32、NTFS、EXT 2、EXT3、EXT4等),在磁盘的特定区域写入特定数据,在分区中划分出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间。格式化就是按照文件系统的规则将硬盘分成等大小的数据块,我们把数据块称为block。
> 注:Windows可以识别的系统有FAT16、FAT32、NTFSLinux可以识别的系统有EXT2、EXT3、EXT4
## 设备文件名
#### 硬盘设备文件名
Windows是直接分区——>格式化——>分配盘符即可使用,Linux需要分区——>格式化——>给分区建立设备文件名——>分配盘符才能使用。
| 硬件 | 设备文件名 |
| ----------------- | ------------------- |
| IDE硬盘 | /dev/hd[a-d] |
| SCSI/SATA/USB硬盘 | /dev/sd[a-p] |
| 光驱 | /dev/cdrom或dev/sr0 |
| 软盘 | /dev/fd[0-1] |
| 打印机(25针) | /dev/lp[0-2] |
| 打印机(USB | /dev/usb/lp[0-15] |
| 鼠标 | /dev/mouse |
#### 分区设备文件名
分区设备文件名直接**在硬盘设备文件名后面加分区号**即可,如
* IDE硬盘接口第一个分区:/dev/hda1(如今几乎看不到)
* SCSI硬盘接口、SATA硬盘接口的第一个分区:/dev/sda1
> IDE硬盘是最古老的硬盘,理论最高传输速度是133M/s
>
> SCSI硬盘接口与IDE硬盘同时代,更加昂贵但速度更快,理论最高传输速度可达200M/s,但这种硬盘主要用在服务器上
>
> 但上两种硬盘接口如今已经基本淘汰,如今使用更多的是小口的SATA串口硬盘,SATA已发展到3代,其理论传输速度最高可达500M/s,目前不管是服务器还是个人机基本使用的都是SATA硬盘接口。
需要留意的是,逻辑分区永远都是从5开始的
## 挂载
挂载实际上就是Windows中分配盘符的过程,盘符则被相应地称为挂载点,必须分区的分区有以下两种:
1. 根分区:/
2. swap分区(交换分区):可以理解为虚拟内存,当真正内存不够用时,可以使用这部分交换分区的硬盘空间来当内存,理论上来说交换分区应该是内存的两倍,但最大不超过2GB
若无这两个分区,Linux不能正常使用,但我们还推荐把/boot单独分区,这是为了防止Linux系统启动不起来,一般200MB即可。
# 远程登陆管理工具
## 网络连接
网络连接从虚拟机设置中可以看到,一共有三种:桥接、NAT和Host-only,下面讲解其区别:
* 桥接:桥接意味着虚拟机如同一个单独的主机一样访问Wifi等,也可以和其他机器通信
* NAT:虚拟机仅能和主机通信,但若主机可以访问互联网,虚拟机也可以访问互联网
* Host-only:虚拟机仅能和主机本机通信,不能访问互联网
## 网络配置
1. 首先调成Host-only模式,使得虚拟机仅与主机连接
2. 在主机上找到VMware Network Adapter VMnet1的IP地址,我本地地址为192.168.19.1
3. 在虚拟机上使用`ishw -c netwowrk`命令找到logical name,此即为虚拟机的网卡名称,我的虚拟网卡名称为ens33
4. 使用命令ifconfig [不等于IP地址] logical name,例如我使用的是`ifconfig ens33 192.168.19.2`
5. 此时再ifconfig即可看到我们设置的已生效
6. 我们可以在主机ping这个IP地址看到生效
7. 使用secureCRT连接即可
需要注意的是,以上方法配置IP地址时不是永久生效的,也就是重新启动电脑时就失效了,若想永久生效需要改变配置文件
若使用NAT模式,则步骤简单很多,只需要ifconfig获得IP地址之后直接用secureCRT连接即可
## WinSCP
另外推荐一个Windows主机与Linux虚拟机进行文件传输的工具——WinSCP,操作方法与上面类似,只需输入对应的IP地址即可连接。
## 安装linux系统(以ubuntu为例)
- 使用vmware虚拟机安装
[参考此博客:VMware安装Ubuntu18.04](https://zhuanlan.zhihu.com/p/38797088)
- 使用win10子系统安装
[参考此博客:在 win10 下使用 ubuntu 子系统](https://zhuanlan.zhihu.com/p/76032647)
# Linux常用命令
## 一、最常用命令
这是我们**使用得最多**的命令了,**Linux最基础的命令**!
- 可用 `pwd`命令查看用户的当前目录
- 可用 `cd` 命令来切换目录
- `.`表示当前目录
- `..` 表示当前目录的上一级目录(父目录)
- `-`表示用 cd 命令切换目录**前**所在的目录
- `~` 表示**用户主目录**的绝对路径名
**绝对路径:**
- 以斜线(/)开头 ,描述到文件位置的**完整说明** ,任何时候你想指定文件名的时候都可以使用
**相对路径 **
- 不以斜线(/)开头 ,指定**相对于你的当前工作目录而言的位置** ,可以被用作指定文件名的简捷方式
## 二、文件处理命令
### 1. 命令格式与目录处理命令`ls`
**命令格式**`命令[-选项][-参数]`,例:`ls -la /etc`
**说明**
1. 个别命令使用不遵循此格式
2. 当有多个选项时,可以写在一起
3. 简化选项与完整选项:`-a` 等于 `--all`
`ls`命令的语法:
1. `ls -a`可以显示所有文件,包括隐藏文件(以点.开头的文件是隐藏文件)
2. 若希望查询的不是当前目录,可以使用`ls+其他目录`进行查询
3. `ls -l`可以显示更多属性(long),属性阐述如下:
1. 第一列分为三个部分,第一部分(如d告诉我们文件的类型是一个目录,-为二进制文件,1为软链接文件),drwx表示该文件支持读写和执行操作,r,w,x分别对应读、写、执行三个权限,三列分别对应所有者,所属组,其他人的权限
2. 第二列的2、2、3等表示调用次数
3. 第三列表示所有者,也就是这个文件的总负责人(拥有文件的所有权,可转让)
4. 第四列表示所属组,也就是可以操作这个文件的人
5. 第五列表示文件大小,默认单位是字节(很反Windows)
6. 最后一个是文件的最后一次修改时间(Linux没有创建时间这个概念)
4. `ls -lh`比原先的更人性化(humanitarian),它将对应的单位也显示了出来,`-h`实际上是一个通用选项,很多命令都可以加
5. `-d`显示当前目录本身而不显示目录下的数据,一般与`-l`结合使用,如`ls -ld /etc`
6. `ls -id`可以查看当前目录对应的文件ID
### 2. 目录处理命令
##### `mkdir`
**语法**`mkdir -p [目录名]`
**功能描述**:创建新目录,`-p`递归创建(若一个目录本身不存在,可以在创建这个目录的同时创建子目录),也可以同时创建多个目录
##### `cd`
**语法**`cd directory`
**功能描述**:改变当前目录
##### `pwd`
**语法**`pwd`
**功能描述**:显示当前目录(print working directory
##### `rmdir`
**语法**`rmdir [目录名]`
**功能描述**:删除空目录(若目录非空则不能删除)
##### `cp`
**语法**`cp -rf [源文件或目录] [目标目录] -r 复制目录 -p 保留文件属性(文件创建时间等不发生变化)`
**功能描述**:复制文件或目录
##### `mv`
**语法**`mv [源文件或目录] [目标目录]`
**功能描述**:剪切文件、改名
##### `rm`
**语法**`rm -rf [文件或目录] -r 删除目录 -f 强制执行`
**功能描述**:删除文件
### 3. 文件处理命令
##### `touch`
**语法**`touch [文件名]`
**功能描述**:创建空文件
##### `cat`
**语法**`cat [文件名]`
**功能描述**:显示文件内容 `-n`可显示行号
##### `tac`
`cat`相反,可以倒着显示
##### `more`
`cat`命令显示的往往过多,若希望分页显示可以使用`more`,用法与`cat`相同,使用时按空格可以一页页往后翻,使用q或Q退出
##### `less`
由于`more`无法向上翻,我们可以使用`less`命令,可以使用page up一页页往上翻,也可以使用上箭头一行行往上翻,其他操作与`more`相同。另外`less`还可以进行搜索,比如想要搜索关键词service,可以输入/service进行检索,页面会对这些关键词进行高亮,可以使用`n`找到其他关键词位置
##### `head`
若只想要看文件的前几行,可以使用`head -n`加指定行数,若不加则默认显示前10行
##### `tail`
`head`类似 ,但是显示后面几行。
常用搭配为:`tail -f`,该命令会动态显示文件末尾内容
## 三、链接命令`ln`
**语法**`ln -s [原文件] [目标文件] -s 创建软链接`
**功能描述**:生成链接文件
**示例**
* `ln -s /etc/issue issue.soft`:生成软链接
* `ln /etc/issue issue.hard`:生成硬链接
**软链接和硬链接的区别**
我们使用`ls -l`查看这两个文件的信息:
```
-rw-r--r-- 2 root root 26 Jul 15 2020 issue.hard
lrwxrwxrwx 1 root root 10 Jan 31 04:55 issue.soft -> /etc/issue
```
我们会发现这两个文件的信息相差的非常多,软链接文件开头的文件类型是`l(link)`,三个权限都是`rwx`,即可读可写可执行,软链接文件就类似于Windows的快捷方式,用处是便于做管理,我们可以看到最后有一个箭头指向`/etc/issue`。另外我们看到这个文件只有31个字节,因为它只是一个符号链接。我们可以总结得出软链接的三个特点:
1. 权限是`rwx`
2. 文件很小,只是符号链接
3. 箭头指向源文件
下面我们看硬链接的特点,我们首先分别查看 这两个文件的信息:
```
ls -l issue.hard
ls -l /etc/issue
```
我们可以看到这两个文件的所有信息一模一样,包括文件的大小,这类似于拷贝,似乎相当于`cp -p`,而硬链接和`cp -p`的最大不同就是硬链接可以实现同步更新,我们可以做一个简单的实验,我们先查看硬链接文件,然后往源文件中写入文件,可以发现硬链接文件也被同时修改了,当然软链接也会同步修改。
但当我们将源文件复制到另一个位置并删除原位置文件之后,再试图打开软链接会提示“没有那个文件或目录”,而且再显示这个目录软链接会标红并一直闪,而硬链接可以正常访问,没有影响,这就是硬链接和软连接的不同之处。
实际上我们可以通过命令`ls -i`来识别其`i`节点以辨别出是硬链接还是软链接,硬链接和源文件的`i`节点相同,软链接则不同。
硬链接相当于一个同步文件,但可以做实时备份(一个文件删了不会影响另一个文件),硬链接有两个限制,这也是硬链接和软链接的区别:
1. 不能跨分区
2. 不能针对目录使用
## 四、权限管理命令
Linux用户一共分成三类,分别是所有者(U),所属组(G)和其他人(O),权限也分成三类,分别是`r``w``x`,对应读、写、执行,我们首先学习如何更改权限。
#### `chmod`
更改文件的人只能是文件所有者或者管理员root用户,更改文件权限有两种方式,第一种方式如下:
```
chmod [{ugoa}{+-=}{rwx}][文件或目录]
```
其中第一个花括号里`u``g``o``a`分别表示所有者,所属组,其他人和所有人,第二个花括号`+``-`分别表示增加和减少权限,`=`表示成为后面的权限。第二种方式如下:
```
chmod [mod=421][文件或目录] -R 递归修改
```
数字的意思只是将三个权限位分别用数字来表示,比如`r`用4表示,`w`用2表示,`x`用1表示,则若要表示`rwxrw-r--`则记为`764`
#### `chown`
命令英文原意是`change file ownership`,作用是改变文件或目录的所有者,改变文件file的所有者为user的具体用法为:
```
chown user file
```
要注意只有root和文件的所有者可以改变文件的权限
#### `chgrp`
命令英文原意是`change file group ownership`,作用是改变文件或目录的所属组,若具体用法和前面`chown`相同。我们可以使用`groupadd`命令添加组(使用`useradd`命令添加用户)
#### `umask`
命令英文原意是`the user file-creation mask`,作用是显示、设置文件的缺省权限,语法是:
```shell
umask [-S]
```
其中`-S`的作用是显示新建文件的缺省权限,但需要注意的是缺省创建文件时不可以有可执行权限的,所以当`touch`创建文件时会发现所有权限都少了`x`
当我们直接使用`umask`时,比如显示0022,第一个0是特殊权限,我们暂时不涉及,第二只第四位分别是所有者、所属组和其他人,我们的最终权限实际上是`777-022=755`,也就是`rwx r-x r-x`,当然这指的是目录,如果是文件由于没有可执行权限,文件权限应当是`rw- r-- r--`,当然缺省创建的权限可以更改,直接使用`umask 077`即可将文件缺省权限更改为`rwx --- ---`,但不推荐做这种更改