① 性能问题:Windows 操作系统性能不如 Linux 系统高。
② 稳定性问题:Linux 系统比 Windows 系统更稳定,可以运行长达几年而不关机。Linux 底层源代码开源。
③ 安全性问题:Linux 系统相较于 Windows 系统更加安全。
④ 远程管理:Windows 远程管理不如 Linux 方便。
⑤ 资源利用率:Windows 较多资源用于图像渲染,资源利用率差,而 Linux 系统大多没有图形化界面。
① redhat(企业版)、centos(社区版-最常用)
② ubuntu(个人用户常用)
③ suse、debian
④ 银河麒麟、深度OS、红旗(国产系统)
Linux 的所有进程都存放在 /proc
目录中,以进程号为目录保存。
Linux 添加新硬盘主要分为三个步骤:硬盘分区、格式化、挂载到目录
首先确定添加的硬盘名称,如下 /dev/sdb
为我新添加的硬盘,还没有分区信息
[root@192 ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0009b364 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 8e Linux LVM 磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节
① 分区
[root@192 ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xc7a73831 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n #这里既然我们是要创建一个分区,就用 n 选项。 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p #创建主分区或者扩展分区。默认情况下我们最多可以有 4 个主分区。 分区号 (1-4,默认 1):1 #按需求输入分区编号。推荐使用默认的值 1。 起始 扇区 (2048-20971519,默认为 2048):2048 #输入第一个扇区的大小。如果是一个新的磁盘,通常选择默认值。如果你是在同一个磁盘上创建第二个分区,我们需要在前一个分区的最后一个扇区的基础上加 1。 Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):20971519 #输入最后一个扇区或者分区大小的值。通常推荐输入分区的大小。 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w #保存更改并退出。 The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
随后我们可以看到硬盘 /dev/sdb
已经有一个名为 /dev/sdb1
分区了
[root@192 ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0009b364 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 8e Linux LVM 磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xc7a73831 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20969471 10483712 83 Linux 磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节
② 格式化
[root@192 ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2620928 blocks 131046 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2151677952 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
③ 挂载到目录
mount /dev/sdb1 /mnt
可以看到 /mnt
目录已经被挂载了
[root@192 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.4M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.3G 16G 8% / /dev/sda1 1014M 151M 864M 15% /boot tmpfs 182M 0 182M 0% /run/user/0 /dev/sdb1 9.8G 37M 9.2G 1% /mnt
在 /etc/fstab
文件中添加条目以便永久启动时自动挂载。
/dev/sdb1 /mnt ext4 defaults 0 0
/bin
目录下存放系统命令,普通用户和 root 用户都可执行。/sbin
保存与系统环境设置相关的命令,只有 root 用户可以使用这些命令来配置环境。cd -
命令可以直接回到上一次的工作目录cd ~
命令可以直接回到当前用户的家目录shutdown -h now # 立即关机 shutdown -h 10 # 十分钟之后关机 shutdown -c # 取消关机计划
可以用 hostnamectl
命令查看当前主机名称。
[root@192 ~]# hostnamectl Static hostname: localhost.localdomain Transient hostname: 192.168.0.200 Icon name: computer-vm Chassis: vm Machine ID: 3e9a06c84a384e72b9bb51b8147906a8 Boot ID: 6305e4e798664c019add98a765175fcf Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-1160.el7.x86_64 Architecture: x86-64
Transient hostname
为瞬态主机名称:临时主机名称,重启或关机后,名称失效。hostnamectl --transient set-hostname redis.liuli.com
Static hostname
为静态主机名称:关机或者重启,设置的主机名仍然生效。hostnamectl --static set-hostname redis.liuli.com
Pretty hostname
为灵活主机名称:可以设置特殊符号hostnamectl --pretty set-hostname "liuli's server"
swap 就是 Linux 下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是 swap 分区)虚拟成内存来使用,防止系统内存被程序占满,而导致系统卡死。swap 分区大小一般是物理内存的 1-2 倍。
由于 swap 空间是由磁盘划出的,磁盘的读取写入速度都比传统内存条慢,所以性能不强,不推荐长久使用 swap 分区,应及时拓展服务器内存。
使用 {开始序号..结束序号}
来设置创建数量
# 创建目录 mkdir {1..100}_dir # 创建文件 touch file{1..100}
tar -tf root.tar
tar -uf root.tar 1.txt
# 替换当前行第一个满足条件的 :s/old_word/new_word # 替换当前行所有满足条件的 :s/old_word/new_word/g # 整个文本全局替换第一个满足条件的 :%s/old_word/new_word # 整个文本全局替换所有满足条件的 :%s/old_word/new_word/g
# 显示 :set nu # 取消 :set nonu
使用 vim 粘贴代码时,会出现逐行叠加的缩进,如下图:
使用 set paste
模式,可以解决这种逐行缩进
# 在粘贴代码前 :set paste # 粘贴完代码后 :set nopaste
命令模式下:
然后按上下左右键选取要复制的内容,y 复制,p 粘贴。
待操作文本
:9 + 回车
:光标定位到第九行ctrl + v
:进入可视块模式9-17
行shift + i
: 进入编辑模式#
号ESC
键完成注释:9 + 回车
:光标定位到第九行ctrl + v
:进入可视块模式9-17
行delete
键删除# 开启 :syntax on # 关闭 :syntax off
cat 1.py 2.py > 3.py
more
命令读取文件,是一次性将所有文件所有内容加载到内存中,如果文件较大,则有可能会产生卡顿。less
命令是 more
的增强版,加载文件为一点点加载,而不是一次加载完毕。读取大文件时,效率较高。与用户组相关的文件:/etc/group
# 添加 tester 用户组,指定 gid 为 1100 groupadd -g 1100 tester # 修改 tester 用户组名字为 testgroup groupmod tester -n testgroup # 修改 testgroup 用户组 gid 为 1010 groupmod testgroup -g 1010 # 删除 testgroup 用户组 groupdel testgroup
与用户组相关的文件:/etc/passwd
tester:x:1001:1100:test user:/home/tester:/sbin/nologin 第一列:tester: 用户名称 第二列: x: 密码占位符 第三列: 1001: uid 第四列: 1100: gid 第五列: test user: 备注信息 第六列: /home/tester: 家目录 第七列: /sbin/nologin: 可以使用的 bash 类型
# 添加用户 tester 指定用户组 gid 为 1100,不允许登录 useradd tester -g 1100 -s /sbin/nologin -c 'test user' # 查看用户信息 id tester # 修改 tester 用户名为 testuser,并允许登录 usermod tester -l testuser -s /bin/bash # 删除用户,-r 参数,同时删除用户家目录 userdel -r testuser
# 锁定/禁止 testuser 用户登录 usermod -L testuser # 解锁/允许 testuser 用户登录 usermod -U testuser
|
: 前面一个程序的标准输出(stdout)作为后面程序的标准输入(stdin)
0:标准输入:程序或命令需要外部的某些程序传递相应的参数,才能正常运行。
1:标准输出:程序或命令正确的输出结果,我们就称之为标准输出。
2:标准错误:程序或命令错误的输出结果,我们就称之为标准错误。
# 查找 sshd 进程 ps -ef | grep sshd # 查找 mysql 安装信息 rpm -qa | grep mysql # less 组合 cat /etc/my.cnf | less # 统计 /etc/ 目录下的文件数 ls /etc/ | wc -l
由于很多命令不支持使用管道符来传入参数,所以使用 xargs 命令来拓展管道符的使用,是所有命令都支持管道符。
# ls -l 显示 /etc 目录下的 *.conf 文件 find /etc -name '*.conf' -type f | xargs ls -l # 删除 /root 目录下 *.py 文件 find /root -name '*.py' | xargs rm -rf {}
共享带宽的设备,采用广播的形式来传输信息,可以实现多台电脑同时使用一个进线接口来上网或组成局域网。
集线器不管有多少个端口,所有端口都共享一条带宽,在同一时刻只能有两个端口传送数据,其他端口只能等待。
运作在 OSI 模型的物理层
独享带宽的设备,能够进行地址学习(mac地址:源端和目标端),采用存储转发的形式来交换报文。
可以隔离冲突域。因为没一个端口都有一个独占的带宽,当两个端口工作时,不影响其他端口工作。
运行在 OSI 模型的数据链路层
一个作用是连通不同的网络,另一个作用是选择信息传送的线路(选路)
选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来。
路由器可以在无网络或有网络时可以让几台电脑同时互联,并且进行局域网连接。
运行在 OSI 模型的网络层
VMnet0:用于虚拟 桥接 网络下的虚拟交换机
VMnet1:用于虚拟 Host-Only 网络下的虚拟交换机
VMnet8:用于虚拟 NAT 网络下的虚拟交换机
VMware Network Adapter VMnet1:Host 用于与 Host-Only 虚拟网络进行通信的虚拟网卡
VMware Network Adapter VMnet8:Host 用于与 NAT 虚拟网络进行通信的虚拟网卡
桥接模式:桥接网络是指虚拟网卡通过 VMnet0 虚拟交换机和本地物理网卡进行桥接,那么物理网卡和虚拟网卡就相当于处在同一个网段,虚拟交换机就相当于现实网络中的一台交换机。所以想虚拟机也可以连接到互联网中,那么两个网卡的 IP 地址也要设置成同一个网段。
NAT 模式:会用到 VMware Network Adapter VMnet8 虚拟网卡,主机上的 VMware Network Adapter VMnet8 虚拟网卡被直接连接到 VMnet8 虚拟交换机上与虚拟网卡进行通信。VMware Network Adapter VMnet8 虚拟网卡的作用仅限于和 VMnet8 网段进行通信,它不给 VMnet8 网段提供路由功能,所以虚拟机虚拟一个 NAT 服务器,使虚拟网卡可以连接到 internet 。VMware Network Adapter VMnet8 虚拟网卡的 IP 地址是在安装 VMware 时系统指定生成的,我们尽量不要修改这个数值,否则会使主机和虚拟机无法通信。
Host-Only 模式:虚拟网络是一个全封闭的网络,它唯一能访问的就是物理真机。主机和虚拟机之间的通信是通过 VMware Network Adapter VMnet1 虚拟网卡来实现的。
# ifconfig ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::4d30:ec98:587b:cc03 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:18:89:d9 txqueuelen 1000 (Ethernet) RX packets 63102974 bytes 33626145608 (31.3 GiB) RX errors 0 dropped 14 overruns 0 frame 0 TX packets 36389113 bytes 147282307107 (137.1 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
inet 192.168.1.11: 代表 ens192 网卡的 ip 地址 netmask 255.255.255.0: 子网掩码,一般为 255.255.255.0 broadcast 192.168.1.255: 广播地址
网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-ens192
# 网络类型,Ethernet 以太网 TYPE="Ethernet" # IP 的获取方式,dhcp 代表自动获取,static/none 代表手动设置 BOOTPROTO="none" # 启动默认路由 DEFROUTE="yes" # 不启用 ipv4 错误检测 IPV4_FAILURE_FATAL="no" # 网卡的名称 NAME="ens192" # 网卡的唯一 UUID 编号 UUID="9c6f674b-ecd2-4ed0-bde2-415d55fc9f5b" # 设备名称 DEVICE="ens192" # 网卡是否开机启动,no 表示不启动 ONBOOT="yes" # 手动设置网卡的 IP 地址 IPADDR="192.168.1.11" # 手动设置网卡的网关地址 GATEWAY="192.168.1.1" # 手动设置网卡的 DNS 服务器地址 DNS1="192.168.1.1"
# 查看网络状态 systemctl status network # 开启网卡 systemctl start network # 关闭网卡 systemctl stop network # 重启网卡 systemctl restart network
[root@localhost ~]# ethtool ens33 Settings for ens33: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: off (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes
交换、路由、路由表的概念
查看路由表信息
[root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
Destination: 目标网络 Gateway: 网关 Genmask: 子网掩码 Flags: 路由标志,U 启动状态,UG 该网关为路由器 Iface: 网卡
路由表编辑
# 增加一个默认网关 route add default gw 192.168.2.1 # 删除默认网关 route del default gw 192.168.2.1 # 增加一条到达网络 route add -net 192.168.1.0/24 dev ens33 # 删除一条到达网路 route del -net 192.168.1.0/24 dev ens33
# 列出所有系统服务 systemctl list-units --type service --all # 仅列出启动的系统服务 systemctl list-units --type service # 启动 sshd 服务 systemctl start sshd.service # 停止 sshd 服务 systemctl stop sshd.service # 查看 sshd 服务状态 systemctl status sshd.service # 重载 sshd 服务 systemctl reload sshd.service # 设置 sshd 服务开机自启 systemctl enable sshd.service # 取消 sshd 服务开机自启 systemctl disable sshd.service
rpm -qa | grep mysql -q:query,查询操作 -a:all,代表所有
rpm -e mysql --nodeps --nodeps:强制卸载
rpm -ivh mysql.rpm -i:install,安装 -v:显示进度条 -h:以 '#' 形式显示进度条
rpm -Uvh mysql5.7.rpm -U:Update,升级
rpm -qf /etc/my.cnf
rpm -ql mysql-community-server 配置文件类:/etc 使用手册类:/usr/share/doc 二进制程序:/usr/bin 或 /usr/sbin
ntp 服务器池:http://www.ntp.org.cn/pool
# 手动同步 ntpdate cn.ntp.org.cn # 自动同步 systemctl start ntpd.service systemctl enable ntpd.service
firewalld 防火墙增加了区域(zone)的概念,类似于预设的策略模版,可以根据不同的使用场景选择区域模版。CentOS 7 默认使用 public 区域。
区域 | 默认策略 |
---|---|
trusted | 允许所有数据包 |
home | 拒绝流入的流量,除非与流出的流量相关,允许 ssh,mdns,ippclient,amba-client,dhcpv6-client |
Internal | 与 home 相同 |
work | 拒绝流入的流量,除非与流出的流量相关,允许 ssh,ippclient,dhcpv6-client |
public | 拒绝流入的流量,除非与流出的流量相关,允许 ssh,dhcpv6-client |
external | 拒绝流入的流量,除非与流出的流量相关,允许 ssh |
dmz | 拒绝流入的流量,除非与流出的流量相关,允许 ssh |
block | 拒绝流入的流量,除非与流出的流量相关,非法流量采取拒绝操作 |
drop | 拒绝流入的流量,除非与流出的流量相关,非法流量采取丢弃操作 |
运行模式:此模式下,配置的防火墙规则立即生效,但是不写入配置文件,重启后失效。firewalld 默认采用此模式。
永久模式:此模式下,配置的防火墙规则写入配置文件,但是需要 reload 加载才能生效。
# 查看默认使用的区域 [root@localhost ~]# firewall-cmd --get-default-zone public # 查看所有支持的区域 [root@localhost ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work # 列出当前使用的区域配置 [root@localhost ~]# firewall-cmd --list-all public (active) # 当前使用的区域 target: default icmp-block-inversion: no # 服务器 IP 是否禁 ping interfaces: ens33 # 防火墙规则适用的网卡 sources: # 来源 IP services: dhcpv6-client ssh # 防火墙放行的服务 ports: # 端口 protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # 放行规则
① 添加服务
firewalld 支持的服务在 /usr/lib/firewalld/services/
目录中,如果不存在,可以自己添加文件。
将 http 服务添加到防火墙规则中
# 1)运行模式(立即生效,重启失效) firewall-cmd --zone=public --add-service=http # 2)永久模式(reload 后生效,永久有效) firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --reload
将 http 服务从防火墙规则中移除
# 1)运行模式(立即生效,重启失效) firewall-cmd --zone=public --remove-service=http # 2)永久模式(reload 后生效,永久有效) firewall-cmd --zone=public --remove-service=http --permanent firewall-cmd --reload
② 添加端口
添加 80 端口到防火墙规则中
# 1)运行模式(立即生效,重启失效) firewall-cmd --zone=public --add-port=80/tcp # 2)永久模式(reload 后生效,永久有效) firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
将 80 端口从防火墙规则中移除
# 1)运行模式(立即生效,重启失效) firewall-cmd --zone=public --remove-port=80/tcp # 2)永久模式(reload 后生效,永久有效) firewall-cmd --zone=public --remove-port=80/tcp --permanent firewall-cmd --reload
在指定的时间,进行指定的操作
crontab [选项] -l: list,显示当前已经设置的计划任务 -e: 使用 vim 编辑计划任务的文件
命令规则
使用的命令要使用命令的完整路径,可以使用 whereis
查找完整路径
[root@localhost ~]# whereis echo echo: /usr/bin/echo
时间规则
* * * * * program - - - - - | | | | | | | | | +----- 星期中星期几 (0 - 6) (星期天 为0) | | | +---------- 月份 (1 - 12) | | +--------------- 一个月中的第几天 (1 - 31) | +-------------------- 小时 (0 - 23) +------------------------- 分钟 (0 - 59)
符号规则
* : 表示取值范围内的任意一个数字 - : 做连续区间表达式,要想表示 1 至 7,则写 1-7 / : 表示多少次,比如想每 10 分钟执行一次,则在分钟位置写:*/10 , : 表示取多少值,比如想在 1 点,2 点,6 点执行,则在小时的位置写:1,2,6
计划任务文件
# 计划任务文件 /var/spool/cron/用户名文件 # 计划任务日志文件 /var/log/cron
# 查看是否在运行 systemctl status atd # 如果没有该服务则安装 yum install -y at
示例
/bin/ls
命令[root@localhost ~]# at 5pm+3 days at> /bin/ls at> <EOT> # ctrl + d 退出 job 1 at Thu Oct 14 17:00:00 2021
[root@localhost ~]# at 17:00 tomorrow at> echo '123' > /root/1.txt at> <EOT> job 2 at Tue Oct 12 17:00:00 2021
查询已设定的 at
任务
[root@localhost ~]# atq 1 Thu Oct 14 17:00:00 2021 a root 2 Tue Oct 12 17:00:00 2021 a root
删除指定的 at
任务
atrm 任务号
grep 'core id' /proc/cpuinfo | sort -u | wc -l
PR:数值越小,优先级越高
NI:NICE 优先级,数值越小,优先级越高(范围:-20 ~ 19,默认是 0)
P: 将进程按照 CPU 使用率,从高到低排序 M: 将进程按照 内存 使用率,从高到低排序 c: 显示进程的详细命令 q: 退出 top 界面