1 Linux入门
1.1 概述
Linux内核最初只是芬兰人Linux Torvalds在赫尔辛基大学上学时处于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承 了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较出名的发行版有:Ubunta、RedHat、CentOS,Debain、Fedora、SuSE、OpenSUSE。
1.2 Linux和Windows区别
1.3 CentOs下载地址
网易镜像:https://mirrors.163.com/centos/7/isos/
搜狐镜像:https://mirrors.sohu.com/centos/7/isos/
或者从官网下载镜像:Index of /
例如:网易镜像下载CentOS7.9版本的镜像(该路径下一般会更新为该系列版本的最高版):Index of /centos/7/isos/x86_64/
例如:官网下载CentOS7.6版本的镜像:Index of /7.6.1810/isos/x86_64
2 在VM中安装Linux系统
2.1 Linux 系统安装过程
选自定义:
选稍后安装
选择Linux 和对应的版本
为虚拟机命名并新建一个文件夹用于存放Liunx系统实例:
查看任务管理器中本机的CPU核数,选择适当的个数:
查看本机内存,为虚拟机选择合适的内存:
这里一定选择使用桥接网络,后面可以设置固定IP地址(服务器最后是可以IP地址固定):
这里选择合适的磁盘大小:
新建个文件夹作为该Linux实例的磁盘文件:
完成
完成后,相当于基于VMware软件,模拟了一套上面配置情况的硬件,接下来基于这些虚拟的硬件的机器上,要通过CD加载ISO镜像文件来安装Linux系统(镜像文件就是前面下载好的CentOS-7.9):
加点并安装配置CentOS
很不幸,加点开启虚拟机后,我的非正版win10系统出现了蓝屏,网上试了几种建议都无效,看来是因为我的破解的VMware 16 汉化版虚拟机和本机win10系统不兼容,接下来重装其他版本的VMware试试。
重新从官网下载最新版本的VMware workstation 17:VMware - Delivering a Digital Foundation For Businesses
百度激活码激活后打开VMware,发现自动识别了之前安装的CentOS-0304虚拟机,然后加点安装如下:
磁盘分区:
(1)主分区 /
(2)boot
(3)swap 交换分区
配置网络和主机名
配置好上面的配置后,点击安装开始安装:
安装过程中,可以设置Root的密码:
重启后,要输入root的密码继续:
问题来了,由于前面的软件选择没有选择桌面,所以Liunx系统没有安装可视化桌面程序:
接下来尝试再安装一个带桌面的Linux系统,过程同上,不同点如下:
这次终于有界面了:
接受许可证,先不创建用户。
这里输入密码“roots589985”一定要记得
成功:
查看发现,VMware Tools 工具已经一起安装好了,低版本的需要手动安装VMware Tools 工具。
2.2 本机与Linux系统共享文件
(1)Window本机新建一个共享文件夹,用于存放要共享的文件
(2)在VM中设置
然后在Linux中的我的电脑中:
在路径 mnt/hgfs/0305/* 下可以找到window共享文件夹下共享的文件:
2.3 安装secureCRT
安装准备好后,双击scrt8.1.3文件运行安装:
默认第一个(所有用户)即可,也可以选择当前用户
自定义安装
安装完成后,用注册机破解:
2.4 安装FinalShell
(1)官网下载: SSH工具 SSH客户端
(2)下载完后正常安装,过程中要求安装依赖软件,按说明安装就可以
(3)更改下载路径
(4)远程连接Linux服务器
双击打开
(5)从Linux系统下载文件到本机
(6)从win本机上传文件到Linux
3 Linux启动和加载顺序
3.1 有问题我问谁
(1)man 你不会用的命令
enter 键查看下一行
空格键翻页看
按“q”退出
(2)man pages手册页数字说明:
- 用户在shell环境中可以操作的命令或可执行的命令
- 系统内核(kernel)可以调用的函数
- 常用的函数或函数库
- 设备配置文件
- 配置文件的格式
- 游戏相关
- Linux 网络协议和文件系统
- 系统管理员可以用的命令
- 跟内核有关系的文件
(3)具体命令 --help
(4)info 具体命令
注:不常用
3.2 6个终端
Ctrl + Alt + F1/F2 ....../F6 切换到命令行界面
Ctrl + Alt + F7 回到图形化界面
who 命令查看有几个tty连接着
注:不同的系统版本,用上面的快捷键切换的启动级别可能不同。
如本机:
Ctrl + Alt + F2
Ctrl + Alt + F3
Ctrl + Alt + F4
Ctrl + Alt + F5
Ctrl + Alt + F6
Ctrl + Alt + F1 切换回图形化界面
查看当前连接情况:
注:输入“exit”退出命令行界面:
退出后状态:
运用实务:如果图形化界面卡死后,就可以切换到命令行界面杀掉相应的进程,再切换到图形化界面工作。
例如:在图形化界面编辑一个文本,突然卡死了;
然后Ctrl + Alt + F2/F3/......F6 切换到命令行界面,kill掉相应的程序;
然后 Ctrl + Alt + F1 切换回图形化界面,发现卡机的进程被杀掉了,系统可以继续操作了:
3.3 Linux的七个启动级别
3.3.1 系统启动流程
- 计算机加电
- 开机自检(BIOS)
- MBR主引导记录
- Grub菜单
- 加载内核
在加载内核这一步会读取操作系统的运行级别
centos7系统表面是有”运行级别“这个概念,实际上是为了兼容以前的系统 每个所谓的”运行级别“都有对应的软连接指向,默认的启动级别是/etc/systemd/system/default.target 根据他的指向可以知道系统要进入哪个模式
3.3.2 systemd 与 init 简介
(1)init
init 进程是系统启动的第一个进程, PID号为 1.
init进程的从它开始启动,到下一个程序开始,都是以一个进程结束再进行另一个进程的方式(串行)
这样做的显而易见的缺点就是执行速度慢,没有一整套的系统来管理
并且/ect/目录下的随便一个脚本简直长的发指
关机过程差不多是相反的过程,首先init停止所有服务,最后阶段会卸载文件系统。
(2)于是systemd诞生了
- systemd是有Redhat的一个员工首先提出来
(3)systemd
centos7启动的第一个程序systemd, PID号为0
Systemd 系统管理守护进程
systemd几乎完全兼容传统的SysV init 系统
作用: 减少系统引导时间与计算开销
Systemd引入了并行启动的概念
它在内核启动后,服务器什么的全部被systemd接管, 内核只是用来管理硬件资源,相当于内核被架空了
3.3.3 系统启动级别
⛅运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
⛅运行级别 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
⛅运行级别 2:多用户状态(没有NFS)
⛅运行级别 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
⛅运行级别 4:系统未使用,保留
⛅运行级别 5: X11控制台,登陆后进入图形GUI模式
⛅运行级别 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
3.3.4 如何设置默认启动级别
- 现在很多Linux系统都默认启动等级为5。如果我们想切换系统等级,可使用init命令。
(注:切换成功后也相当于重启过)
(1)从启动级别5切换到级别3
注:5 3 :表示从启动级别5切换到启动级别3
(2)从启动级别3切换到级别5
直接回车切换到图形化界面
- 这样就可以切换到多用户状态且带有网络文件系统了, 这种方式对于CentOS7也适用
- 但想修改默认启动级别,Centos 7同其他Linux稍显不同了。
centos6是通过修改 /etc/inittab来修改默认运行级别的
在centos7下运行cat /etc/inittab 结果如下:
注::可以看到,里面除了注释,什么也没有,并没有centos6中设置默认运行级别的方式。但注释告诉了我们 启动级别 3(多用户) 和 启动级别 5(图形化操作界面) 的使用。以及用 targets 替代 runlevels, 即Centos 7采用加载targets的方式替代之前的启动级别。
3.3.5 Centos 7 启动级别文件及文件路径
- 在命令行输入 ls /usr/lib/systemd/system/
3.3.6 启动级别设置命令
- 查看当前默认启动的 target
- 设置默认启动的 target
# systemctl set-default multi-user.target #设置多用户状态
注:输入用户密码,认证两遍,然后确定后如下
#systemctl set-default graphical.target #修改为图形界面状态
注:用用户密码,认证两遍,非root密码
3.3.7 运行级别对应表
init级别 | target |
0 | shutdown.target |
1 | emergency.target |
2 | rescure.target |
3 | multi-user.target |
4 | 系统未,使用保留 |
5 | graphical.target |
6 | reboot.target |
3.4 Linux 系统启动过程
- 内核引导
接通电源BIOS自检,按照BIOS中设置的启动设备(通常是硬盘)来启动,操作系统接管硬件以后,首先读入 /root 目录下的内核文件。
- 运行init(runlevel)
init进程是所有进程的起点,有它唤起其它进程工作,init 进程首先是需要读取配置文件/etc/inittab
- 系统初始化
在init的配置文件中有这么一行:si:sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit, 而rc.sysinit 是一个bash shell的脚步,它主要是完成一些系统的初始化的工作,rc.sysinit 是每个运行级别都要首先运行的重要脚本。它主要完成的工作有: 激活交换分区,检查磁盘,加载硬件模块已经其它一些需要优先执行的任务。
- 建立终端
6 个终端
- 用户登录系统
一般来说,用户登陆方式有三种:
(1)命令行登录
(2)ssh登录
(3)图形界面登录
3.5 关机
正确的关机流程:sync --> shutdown --> reboot -->halt
(1)关机前,执行sync 将数据有内存同步到硬盘中
(2)关机与重启
shutdown -h 10 计算机将在10分钟后关机,会显示到登录用户的当前屏幕中。
注:要使用root用户才可以执行此关机命令,其它一般关机命令不需要
shutdown -h now 立马关机
shutdown -r now 系统立马重启
reboot 重启,等同于 shutdown -r now
halt 关闭系统, 等同于 shutdown -h now 和 poweroff
注:不管是关机还是重启,首先要运行sync将数据写到磁盘中。
3.6 重置和修改密码
(1)没有忘记自己的密码,进行修改
1、修改root密码
执行:passwd root, 按照提示输入新的密码两次。
2、以root身份修改一般用户的密码
执行:passwd username, 按照提示输入新的密码两次。(username是要更改密码的用户名)
(2)忘记root用户密码,重置root密码
进入CentOS7 紧急模式恢复root密码
1、开机之后,三秒内,在内核上按↑↓键,选择第一项按下 e键,然后编辑选项
2、按↑↓键找到ro,将红框内的内容改成 :rw init=/sysroot/bin/sh
3、改完之后,按下 Ctrl+X 进入紧急求援模式,依次输入以下的命令
注:两个空红线那里是输入新密码的地方,新密码输入两次。
命令说明:
# chroot /sysroot //进入系统的根目录
# passwd //重置密码
# touch /.autorelabel //创建文件,让系统重新启动时能够识别修改
# exit //退出chroot模式
# reboot //重启系统
重启之后,就ok,我这里selinux是关闭的。
注意:执行passwd命令修改密码,如果系统的selinux开启着,则需要执行命令:touch /.autorelabel 以
更新系统信息,否则重启之后密码修改不会生效。如果没有开启,则不需要执行 touch命令。
4 Vim 编辑器
4.1 是什么
VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器。
VIM编辑器是从V1从发展出来的一个性能更强大的文本编辑器。可以主动的以文字颜色辨别语法的正确性,方便程序设计。VIM与VI编辑器完全兼容。目前使用比较多的是vim编辑器.
vim可以说是程序开发者的一项很好用的工具。连vim的官方网站(https://www.vim.org)自己也说vim是一个程序开发工具而不是文字处理软件。
4.2 三种模式
(1)一般模式(默认)
键盘上下左右 移动光标
yy 复制光标当前一行
y数字y 复制一段(从第几行到第几行)
y (shift + $) 复制当前光标到结尾的字符串
p 箭头移动到目的行粘贴(粘贴到光标之后)
u 撤销上一步
dd 删除光标当前行
d数字d 删除光标(含)后多少行
x 剪切一个字母,相当于del (光标所在字母)
X 剪切一个字母,相当于Backspace (光标前面字母)
yw 复制一个词(复制从光标及后面的字母,所以一般放在单词首字母)
dw 删除一个词(删除从光标及后面的字母,所以一般放在单词首字母)
shift+^ 移动到行头
shift+$ 移动到行尾
gg 移动到页头
shift+g 移动到页尾
数字+shift+g 移动到目标行
(2)编辑模式
i/I 在当前光标前插入(进入编辑模式)
a/A 在当前光标后插入(进入编辑模式)
o/O 新起下一行插入(进入编辑模式)
esc 退出编辑模式到一般模式
(3)指令模式
在一般默认中,输入【: / ?】 3个中的任何一个按钮,就可以进入指令模式,光标会移动到最底下那一行。在命令模式下,可以查询、读取、存盘、大量取代字符、离开vi、显示行号等动作。
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 不保存强制退出 |
:wq! 保存编辑并退出 (w 表示写入,q 表示退出, !表示强制执行)
:%s/old/new/g 替换 (old是原来内容,new表示新内容)
/被查找的词 查找 (回车查找后,n是查找下一个, shift + n 是查找上一个)
?被查找的词 查找(回车查找后,n是查找下上一个, shift + n 是查找下一个)
相关命令:
- 一般模式下查看文件:vim + 文件名
- 显示文件行号: 一般模式下输入“:set nu”
- 不显示行号:一般模式下输入“:set nonu”
5 用户与用户组
5.1 用户
新增用户:useradd 用户名
对用户设置密码:passwd 新建用户名
用户存在否:id 用户名
查看当前用户:whoami/who am i
查看所有连接的用户终端:who
切换用户:su - 用户名
删除用户:userdel
修改用户:usermod
例如:
问题:当切换回root用户后尝试删除li4 用户,发现不能删除, 提示该用户正在被别的进程使用。
分析:
1、linux是多用户系统,root用户具有最高权限,只有root用户才能创建和删除用户,其他用户无此权限。
2、普通用户之间可以使用su随意进行切换(无需输入密码),但是普通用户向root用户切换时,需要输入root的登陆密码。
3、当我们想删除某个用户的时候,出现 user xxx is currently used by process xxx,可能的原因是你创建用户li4 之后,使用su命令切换到 li4 用户下,之后又想删除 li4 用户,使用su root切换到root用户下,使用userdel li4 。出现上述情况的根本原因在于切换回root用户之后,li4 还被某个进程占用。
解决方案一:ctrl+d(退出当前用户)
第一次使用ctrl+d退出root用户,回到 li4 用户;第二次使用ctrl+d退出 li4 用户,此时会返回到root用户(再按ctrl+d退出登陆连接),此时使用userdel li4 正常删除。
解决方案二:把对应的进程杀了再删。
解决方案三:加入“-f”选项强制删除, 使用命令“userdel -f li4”
思考:如果使用“userdel li4”命令删除用户后,其实只是删除了该用户,但相关的文件档案没有一并删除,用“man userdel”命令可以查看包括那些档案。也可以查看 /home 目录,发现 li4 用户的文件夹仍然存在:
如果需要将用户的相关文件档案一并删除,需要加入“-r”选项,使用“userdel -r li4”命令:
5.2 用户组
新建组:groupadd 组名
删除组:groupdel 组名
修改组名(涉及的东西比较多,一般不建议使用):groupmod -n 新组名 旧组名
5.3 新建与修改用户
修改用户:usermod -g 用户组 用户名
注:删除用户组之前一定要先删除组中的用户,否则用户组无法删除
新建用户并加入组:useradd -g 用户组 用户名
5.4 与用户账号有关的系统文件
完成用户管理的工作有许多中方法,但是每一种方法实际上都是对有关的系统文件进行修改。与用户和用户组相关的信息都存放在一些系统文件中。执行“man userdel”命令可以看到一些文件, 这些文件包括:
/etc/passwd
/etc/shadow
/etc/group
(1) /etc/passwd
分析:“li4:x:1001:1003::/home/li4:/bin/bash”
以“:”作为分隔符,从左到右依次表示:
- 用户名:li4 (一般不超8个字符,大小写字母或数字组成,不能有(:)冒号、(.)字符、(-)号,(+)号)
- 密码(口令):x (许多Linux系统都使用了shadow技术,把加密后的口令放到了/etc/shadow文件中,这里用x或*表示)
- 用户标识号: 1001 (范围是0-65535,0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户从100开始)
- 组标识号:1003 (对应着/etc/group文件中的一条记录)
- 注释性描述:(这里为空)
- 主目录:/home/li4
- 登录Shell:/bin/bash
(2)/etc/shadow
格式:
登录名:加密口令:最后一次修改时间:最小时间间隔:警告时间:不活动时间:失效时间:标志
(3)/etc/group
格式:
组名:口令:组标识号:组内用户列表
可以用如下命令查看组中的用户:
6 常用操作命令
6.1 时间日期类
6.1.1 时间基本语法
date [option] + [format]
date -s 日期时间 设置日期时间
date + “日期时间格式” 指定显示时使用的日期
时间常用命令:
date (显示当前时间)
date +%F (2023-03-16)
date +%Y (年)
date +%m (月)
date +%d (日)
date +%H (时)
date +%M (分)
date +%S (秒)
date “+%Y-%m-%d %H:%m:%S”
date +%Y-%m-%d' '%H:%M:%S
date +%s 查看时间戳
date -d “-1 hours ago” 一个小时后的时间
例如:
ntpdate -u ntp1.aliyun.com 同步时间
date -s "2022-06-19 20:52:22" 设置系统当前时间