GNU项目是由Richard Stallman发起的自由软件运动,旨在创建一个完全自由的操作系统。虽然GNU项目已经开发了大量的系统组件和工具,但它一直缺少一个完整的操作系统内核。在这时Linus Torvalds开发了Linux内核,并将其发布为自由软件。后来,Linux内核与GNU项目提供的系统组件和工具相结合,形成了完整的操作系统,通常被称为GNU/Linux系统。
因此,尽管Linux内核是操作系统的核心部分,但是在形成完整的操作系统时,GNU项目提供了大量的系统组件和工具,如GNU C库(glibc)、Shell工具(Bash)、编译器工具链(GCC)等,这些组件与Linux内核相结合,构成了现代GNU/Linux操作系统。因此,人们通常会将Linux操作系统称为GNU/Linux系统,以体现GNU项目对整个操作系统的贡献。
Linux 命令在线查询:https://www.linuxcool.com/
企业级应用:RHEL/CentOS
桌面平台:Ubuntu
开源服务器:CentOS
RHEL是指Red Hat Enterprise Linux,是由Red Hat公司开发和维护的一款商业Linux操作系统。它是基于社区版的Fedora操作系统,并通过添加商业支持、管理工具、安全性和稳定性方面的增强来满足企业级用户的需求。RHEL的主要特点包括:
RHEL被广泛应用于企业服务器、虚拟化、云计算、嵌入式系统等领域,在金融、医疗、科学研究等行业中得到了广泛的应用。RHEL也是OpenShift等Red Hat公司的其他产品的基础操作系统。同时,作为商业Linux操作系统,RHEL也需要购买许可证才能使用。
CentOS是一种开源的Linux操作系统,它是以Red Hat Enterprise Linux (RHEL)为基础的一个克隆版本。CentOS的全称是Community Enterprise Operating System,它由社区开发和维护,目标是提供一个稳定、可靠的企业级操作系统,同时保持与RHEL高度兼容。
CentOS的主要特点包括:
CentOS被广泛应用于企业服务器、Web服务器、数据库服务器等各种应用场景。它提供了广泛的软件包选择,包括常用的服务器软件、开发工具、数据库系统等,可以满足不同用户的需求。同时,CentOS也是许多云计算平台、虚拟化环境和容器平台的首选操作系统之一。
Debian是一种广泛使用的自由操作系统,它以稳定性、安全性和开放性著称。Debian由社区开发和维护,它的目标是提供一个完全自由的操作系统,同时支持多种硬件体系结构,并提供广泛的软件包选择。
Debian的主要特点包括:
Debian被广泛应用于各种场景,包括桌面系统、服务器、嵌入式系统等。它还是Ubuntu、SteamOS等其他Linux操作系统的基础操作系统。由于其稳定性和安全性,Debian也被许多企业和组织选择作为他们的首选操作系统。
Ubuntu是一种广泛使用的自由Linux操作系统,它以易用性、稳定性和社区支持著称。Ubuntu由Canonical公司开发和维护,它的目标是提供一个易于安装、易于使用、易于维护的Linux操作系统。
Ubuntu的主要特点包括:
Ubuntu被广泛应用于桌面系统、服务器、云计算平台等各种场景。它还是许多其他Linux发行版的基础操作系统,包括Linux Mint、Kubuntu等。由于其易用性和广泛的软件包选择,Ubuntu也受到了许多普通用户和开发者的喜爱。
以后内容我们都将使用CentOS为例。
我们可以使用vi/vim编译器修改相关文件来修改网络配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
进入文件后,i
进入编辑模式
修改BOOTPROTOT=dhcp
为BOOTPROTOT=static
,删除UUID
一整行,将NOBOOT=no
修改NOBOOT=yes
。
随后在文件末尾添加:
IPADDR=自己的子网IP
NETMASK=子网掩码
GATEWAY=自己的网关
DNS1=自己的网关
DNS2=114.114.114.114 (中国的服务器)
DNS3=8.8.8.8 (谷歌全球的)
如果不知道自己虚拟机的相关信息,可以通过点击 编辑–>虚拟网络编辑器,进行查看,自己的子网IP最后一位通常选择10到250之间,网关最后一位通常为2,因为1已经被自己的计算机占用了。
修改完成后,Esc
退出编译模式,:wq
保存退出。
最后重启网络:systemctl restart network
,可以通过ping baidu.com
命令进行检测网络是否配置成功。
关闭虚拟机 shutdown -h now
vi /etc/hostname
进入文件后,i
进入编辑模式
把主机名改为自己需要的名字即可
文件系统:操作系统如何管理文件,内部定义了一些规则或者定义。在Linux中所有的东西都是以文件的方式进行操作的,Linux的文件访问与Window不同,Window通过盘符进行访问,Linux维护这一个树状结构的文件模型,只有 /
一个根节点,一个节点上可以有多个子节点。
在Linux中查找文件的方式有:
/
:Linux文件系统的根目录。/bin
:普通用户和管理员都能运行的文件。软链接:/usr/bin。/boot
:引导分区。/dev /media /mnt
:第三方挂载目录。/etc
:Linux操作系统配置文件所在地。/home
:普通用户的家目录。/lib /lib64
:Linux操作系统所需的系统资源。软链接:/usr/lib、/usr/lib64。/opt
:类似Windows系统的非系统盘。/proc
:Linux操作系统内存相关的文件。/root
:超级管理员root的家。/run
:Linux操作系统进程相关的文件。/sbin
:管理员才能运行的命令文件。软链接:/usr/sbin/srv
:类似Windows系统的非系统盘。/sys
:Linux操作系统的相关文件。/temp
:临时目录,每次服务器重启会自动清空。/usr
:类似Windows系统的系统盘。/var
:动态数据文件,例如日志数据库文件。head -A profile | tail -1
ZZ
:保存并退出ZQ
:不保存退出:
或者 /
进入Esc
:set nu
:显示行号:set nonu
:关闭行号:set ff
:关闭行号/
:查找:w
:保存:q
:退出:wq
:保存退出:!q
:强制不保存退出:数字
:跳到第数字行VIM的优点:
因为Linux操作系统有sshd服务所以可以进行计算机间的数据传输。
ssh用户@主机
执行流程:
ssh用户@主机
.ssh/known_hosts
存:主机名,IP 加密密文scp 源头 目的地 无脑覆盖,文件传输
scp -Crp -l 1 test/ root@192.168.88.100:~
scp root@192.168.88.100:/etc/profile ~
rsync 源头 目的地 比较覆盖
常用选项:
rsync用于通过远程 Shell 在两个位置之间同步文件,它通传输源和目标之间的差异来提供更快的文件传输。
rsunc 原头是自己 目的地是对方
rsync -az --exclude 'log' --bwlimit=1 test/ root@192.168.88.100:~
rsync 原头是对方 目的地是自己
rsync root@node01:/opt/HelloWorld.java /srv
1.生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2.拷贝公钥
把自己的公钥传递给对方主机即可,这个公钥文件必须放在对方主机的~/.ssh/authorized_keys 文件中。
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.163.102
3.SSH 公钥检查
为了方便,关闭严格的密钥检查。
本次生效: ssh -o StrictHostKeyChecking=no root@node01
永久生效:修改 /etc/ssh/ssh_config 文件的配置,在 Host * 节点下配置以下信息:
# 严格的密钥检查 no
StrictHostKeyChecking no
SSH 对主机公钥的检查等级是根据 StrictHostKeyChecking 变量来配置的:
简而言之Linux服务器之间免密的实现步骤如下:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
useradd 命令可以用来创建新的用户或更改用户的信息。帐号建好之后,再用 passwd 设定帐号的密码。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
useradd [选项] [用户名]
新增用户(默认会创建同名的组和家目录)
useradd 用户名
设置密码
passwd 用户密码
查看用户
id 用户名
cat /etc/passwd
cat /etc/shadow
修改用户
# 修改用户名(组名称和家目录是不会被修改的)
usermod -l newname oldname
# 锁定用户(禁止登录)
usermod -L 用户
# 解锁用户
usermod -U 用户名
删除用户
userdel -r 用户名
切换用户
su - 用户名
注意:使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。
修改用户的组:
# -g 修改主组(只能一个)
[root@node01 ~]# usermod 用户名 -g 组名
# -G 修改附属组(可以多个)
[root@node01 ~]# groupadd 组名
[root@node01 ~]# groupadd 组名
[root@node01 ~]# usermod 用户名 -G 组名,组名
这个组是别人的主组就删不了。
权限分别对应了用户、组、其他,那我们就可以直接修改文件所属信息来达到权限的控制。
chmod ugo+w xxx.sh
可以赋予一个普通用户一些超级管理员命令,方便业务操作。
例如创建用户的命令我们可以交给一个特定的用户去操作。但是默认情况下是不允许的,因为这个命令属于 sbin 命令即超级用户才可以使用的命令。
我们可以通过修改 /etc/sudoer
配置文件来赋予普通用户权限。
以上配置支持通配符 * ,如果想赋予更多权限 /sbin/user* 或者 /sbin/* 即可。
配好之后再用户执行该命令之前,添加sudo就可以使用该命令了。
管道 |
就是将前面命令的结果作为参数传递给后面的命令。
Linux 中的重定向就是将原本要输出到屏幕中的数据信息,重新指向某个特定的文件中,或者定向到黑洞(/dev/null)中。
在 Linux 系统中,有标准输入,标准输出和错误输出,分别对应 0,1,2 这三个文件描述符
如果想收集这些内容或者不希望它输出干扰到终端,可以使用重定向将其进行处理:
>
:将输出内容追加到目标文件,如果文件不存在,就创建文件;如果文件存在,就将其清空。例如: echo > .bash_history ,将文件内容清空(文件大小变成 0 字节)。>>
:将输出内容追加到目标文件,如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到文件末尾,该文件中的原有内容不受影响。输入重定向,即原本从键盘等设备上获得的输入信息,重定向由命令的输出作为输入。
只需要在命令的后面添加一个 &
符号即可将进程切换为后台执行
以上方式开启的后台进程,当退出终端时进程就一并结束了。可以使用 nohup 命令防止后台进程被挂起,nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
kill命令用于向指定的进程发送信号
配置环境变量的几种方式:
rpm -i xxx.rpm rpm [选项] 软件包
yum [选项] install/remove/update 安装包
tar -zxvf 安装包 -zx (解压)v(过程)f(文件)
在Linux中可以使用 systemd
添加系统服务,systemd 是目前 Linux 系统上主要的系统守护进程管理工具。
systemctl [command] [unit](配置的服务名称):
在 Linux 系统中的 crond 是一个定时计划任务服务,该服务默认开机启动。定时计划任务,故名意思就计划好的任务,到了时间就会自动执行。用户只要按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,那么就会按照预定的周期时间自动的执行下去。
在线编写 Crontab:https://crontab.guru/examples.html
语法格式:
编辑任务:
特殊符号:
*
:星号,代表每个时刻。如 5 个星号就是每 1 分钟,每 1 个小时,每 1 天,每 1 个月,每 1 周。简单理解就是每时每刻,每 1 分钟执行一次命令。,
:逗号,代表分隔字段。例如: 15,20,45 * * * * command 代表每小时的第 15 分、20 分、45 分执行命令。-
:减号,代表一段时间的范围。例如: 10 7-10 * * * command 代表每天的 7 点 到 10 点这个时间范围,逢第 10 分钟执行命令。也就是7点10分、8点10分、9点10分、10点10分执行命令。/n
:/ 代表间隔,n 代表数字,也就是每隔 n 个单位间隔的意思。例如: */5 * * * * command 代表每隔 5 分钟执行命令一次。