第一部分 系统安装与基本使用
一、实验背景
你是DHU-CS实验室的一名管理人员,现在要为新的机器配置面向全院师生使用的Linux系统,并进行相关系统管理操作。你需要配置并熟悉所选的Linux系统后进行一些基本的管理操作。
二、预备知识
安装Linux系统的流程,系统基本操作,用户及组管理、权限管理与任务管理相关shell命令及其常用参数的使用方法。
三、试验内容
内容1:Linux系统安装
1-1 ubantu 18.04 安装
ubantu 18.04 已经安装好了,安装的是服务器版本,不带桌面。已经完成网卡配置,ssh远程连接等;
并使用windows终端进行远程连接来
1-2、选择与调整桌面终端
我没有安装桌面版,安装的服务器版本,直接用终端去操作
内容2:系统基本操作
2-1 切换字符终端与图形终端(略)
2-2 在字符终端与图形终端分别查看运行级别,使用命令切换至不同格式的终端
2-3 使用命令关闭终端
2-4 使用命令关闭以及重启系统
# 远程登录linux系统
ssh root@192.168.202.136
# 断开连接
exit
# 重启系统
reboot 或者 shutdown -h now
# 关机指令
shutdown #默认30秒之后才会关机
# 立即关机
shutdown -h now
# 十分钟之后关机长度
shutdown -h 10
4-1 shutdown
2-5 熟悉目录切换命令cd与新建目录命令mkdir
cd
cd ./ # 切换到当前目录
cd ../ # 切换到上一级目录
cd ~ # 切换到主目录
cd / # 切换到系统根目录
cd /home/aini # 切换到指定目录
mkdir
##创建目录directory,这里说的目录就是文件夹,默认显示是蓝色的字体,文件显示是白色的字体
## mkdir 全称make directory
例子1:mkdir dev #创建一个dev目录
例子2:mkdir dev{01..10} #批量创建多个目录
例子3:mkdir -p 1/2/3/4/5/6 #一次性创建多级子目录
## 重命名:
mv aini aini01 # 将jaden目录改名为wulaoban
rm
## 参数 -f -r
-f ## 强制删除
-r ## 删除文件夹
例子1: rm /opt/123.txt #将/opt目录下的123.txt文件删除,需要回复y确认删除
例子2: rm -f /opt/test01.txt
#将/opt目录下的test01.txt文件删除,不需要回复,强制删除,很多指令都有自己的参数,而且有好多,-f就是强制的意思。
例子3: rm 文件1 文件2 文件3 #删除多个文件
#删除一个目录,linux的参数大部分没有先后顺序
#直接删除文件夹,比如 rm dev,这是不行的,会报错,需要带上r参数
rm -f -r dev02
rm -r -f dev03
rm -fr dev # rm的两个参数可以合并到一起
rm -rf dev01
2-6 熟悉文件编辑操作vi与vim
6-1 移动光标
## 左,下,上,右,如果键盘上没有上下左右键,可以h,j,k,l
## 进入编辑模式有三个按钮:i、a、o, i在光标位置编辑、a是在光标后一位编辑、o是换行编辑,新起一行
ctrl+f 下翻一页
ctrl+b 上翻一页
ctrl+u 上翻半页
ctrl+d 下翻半页
0 # 跳至行首,不管有无缩进,就是跳到第0个字符
^ # 跳至行首的第一个字符
$ # 跳至行尾(shift+4)
gg # 跳至文首
G # 跳至文尾(shift+g)
5gg/5G # 调至第5行,或者命令行模式:5回车,也是跳到第5行,所以其实操作命令都不是唯一的
6-2 删除复制
x # 删除单个字符
10x #删除10个字符
dd # 删除光标所在行(其实dd是剪切的操作),
## 使用u撤销之前的操作,使用ctrl+r恢复
6dd # 从光标开始往下删除6行
dw # 删除一个单词(word)
小p # 粘贴粘贴板的内容到当前行的下面,比如将dd剪切的行黏贴到下面
大P # 粘贴粘贴板的内容到当前行的上面
yy # 复制行
5yy # 复制5行,复制的内容可以通过p\P来黏贴
6-3 搜索和替换
## 搜索:
/pattern 向后搜索字符串pattern #辅助小n向下和大N向上,一般都是用/来搜索
?pattern 向前搜索字符串pattern #辅助小n向上和大N向下,?搜索用的少
## 替换:
:1369s/shell/aini/g # 将第1369行的shell替换为jaden,/还可以用#或者@符号来代替::1369s#shell#aini#g
:1369,1379s/shell/jaden/g # 将1369至1379这10行中的shell替换为aini
:1369,$s/shell/jaden/g # 将1369至文末中的shell替换为aini
:%s/old/new/g #搜索整个文件,将所有的old替换为new
:%s/old/new/gc #搜索整个文件,将所有的old替换为new,每次都要你确认是否替换(y/n/a/..),y表示确认替换一个、n表示不替换、a表示全部替换
6-4 退出编辑器
:w ## 将缓冲区写入文件,即保存修改到硬盘上,但是不退出vi,如果我们改到一半的时候可以提前保存一下,以防断电,因为新编辑的数据是在内存中的,而且vi不会自动保存。
:wq ## 保存修改并退出
:x ## 保存修改并退出,和wq一样的效果。
:q ## 退出,如果对缓冲区进行过修改,则会提示
:q! ## 强制退出,放弃修改
:wq! ## 强制保存修改并退出
2-7 使用uname命令显示计算机及操作系统相关信息
2-8 使用hostname命令显示及修改主机名
8-1 临时修改主机名
#临时修改主机名 hostname
hostname test #需要重新登录生效
8-2 查看主机的信息
hostnamectl
8-3 永久修改主机名
#永久修改主机名
hostnamectl set-hostname test #需要重新登录生效
2-9 退出超级用户su 和 sudo
2-9-1 su
# su全称:switch user
# root用户可以很方便的切换到任意用户
su - aini
# 普通用户切换到root用户,必须输入root密码
su - root
# 不带-也是可以的,带-的话,就是切换完用户之后,直接到用户家目录下,不带-就不是家目录。
su root
exit
2-9-2 sudo
## sudo全称:superuser do,它的作用是用来授权的。就是给普通用户高级权限用的。原因就是很多的操作,如果都需要root用户去做,太麻烦了,所以可以给普通用户做一些授权,普通用户操作就方便了。授权就用到了sudo,sudo并不是一下子给用户很多权限,而是一个命令一个命令的授权。
## sudo需要修改配置才能开启。
# root用户才能修改这个配置。
1.配置/etc/sudoers
# 直接visudo就能编辑这个文件
[root@localhost ~]# visudo
#用户名 所有终端 = 运行的用户身份 命令ALL,ALL是所有指令,不能给所有的,不然权限太高了
#在100行下面添加如下内容
aini ALL=(ALL) /bin/systemctl,/usr/bin/vim,/usr/sbin/reboot # 单独给指令权限,而且要写指令的绝对路径,逗号分割
# 修改完配置文件,保存退出之后,立马就生效了,不需要重启或者重新登录。
#切换到普通用户,查看可以使用的授权命令
2-10 联机帮助命令
内容3:用户与组管理
3-1、创建管理员用户DHU_admin,赋予该用户创建新用户的权限(root用户除外),所属组名admin,工作主目录为\home\admin
3-1-1 创建用户DHU_admin并设置工作主目录
3-1-2 赋予该用户创造新用户的权限
echo "DHU_admin ALL=(ALL) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel" | sudo tee /etc/sudoers.d/dhu_admin
3-1-3 设置该用户所属组为admin
sudo groupadd admin
sudo usermod -aG admin DHU_admin
3-2 切换到管理员用户DHU_admin登录,以管理员用户身份创建两个普通用户user1与user2(也可以自行设计普通用户名称,如stu与tch),普通用户都放在组users中,工作主目录为\home\users
sudo groupadd users
sudo useradd -g users -d /home/users user1
sudo useradd -g users -d /home/users user2
3-3 修改每个账号的密码为:用户名_123(也可设置为方便自己记忆的密码)
3-4 设置普通用户的密码有效期,期限自拟(图示期限为有效期半年)
内容4:进程管理
#查看进程
ps
参数1:ps -ef
pid:# 全称process id,是进程编号,每次启动某个程序,它的编号可能都不一样,这个是程序启动之后系统随机分配的。
uid:# 全称user id,是进程所属用户,也就是哪个用户启动的,我们可以切换个用户执行一下sleep 60,就可以看到效果
ppid:# 全称parent process id,父进程,记录的是某个进程是由哪个进程创建出来的。可以通过pstree工具来查看从属关系。
C: # 这个不用管。
STIME:# 全称start time,进程的启动时间。
TTY: # 用来显示哪些是本地启动的,哪些是远程终端连接上来启动的。通过w指令可以看到哪些终端登录着主机。只要登录成功一个终端,那就多一个终端。
TIME:# 这个没啥用
CMD:# 这个进程执行了什么指令
#关闭进程
kill pid号
kill 7851 #使用进程id号,来终止进程
kill -9 pid号 #慎用!!!
#批量关闭进程,pkill全称program kill
pkill CMD命令名称
pkill sleep #使用进程的命令名称,来终止进程,会中止所有CMD执行着sleep的进程的。
pkill -9 sleep
# kill -9,这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。
# 如果想把某个远程连接踢下线,可以杀掉显示pts的远程连接进程的父进程,如下图
4-2 查看当前系统的进程(eg:ps -aux)
4-2 使用kill结束某个进程
4-3 查看系统目录(/var/log)
4-4 查看系统信息
4-1 查看cpu
#查看cpu
lscpu
4-2 查看内存命令
#查看内存命令
free -h
4-3 查看硬盘命令
#查看硬盘命令
df -h #h表示人类可读
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 100G 2.2G 98G 3% /
tmpfs 199M 0 199M 0% /run/user/0
4-4 查看计算机的cpu,内存,进程等信息
# 含有tmp的表示是内存给硬盘的空间,默认会给1半内存空间,把内存当作硬盘使用,这个我们不用管。
# 查看计算机的cpu,内存,进程等信息(和windows的任务管理器很像)
top
top - 08:34:27 up 20 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 89 total, 2 running, 87 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0
st
KiB Mem : 2027872 total, 1779000 free, 135668 used, 113204 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1755332 avail Mem
内容5:任务管理
5-1 定时任务的格式
#定时任务的格式
* * * * * cmd
分 时 日 月 周 命令
分:0-59
时:0-23
日:0-31
月:1-12
周:1-7
#每5分钟执行一次
*/5 * * * *
#每1小时的01分执行一次
01 */1 * * *
#每半个小时执行一次,下面的意思是每小时的00分和30分各执行一次
00,30 */1 * * *
#每天晚上8:00执行一次
00 20 * * *
#每个月1号晚上8:00执行
00 20 1 * *
#每年1月1号晚上8:00执行
00 20 1 1 *
#每周1、周三、周五晚上8:00执行一次
00 20 * * 1,3,5
# 几个符号的意思:
# * 每分钟
# */5 每5分钟
# 05 第5分钟
# 每秒钟执行的任务,需要单独写脚本,繁琐一些。
5-2 查看,编辑定时任务
#查看定时任务,遇到特殊符号%,需要添加转义符号\;
crontab -l
* * * * * echo `date +\%T` >>/tmp/time.txt
#编辑定时任务
crontab -e
* * * * * date >> /tmp/time.txt # 每分钟执行一次
crontab -l
* * * * * date >> /tmp/time.txt
## 我们可以通过cat来查看任务是否执行了,但是比较麻烦,每次手动输入cat,所以我们可以用如下指令
tail -f /tmp/time.txt #监测文件尾部内容的变化.
tail -f /tmp/time.txt
2023年 03月 24日 星期五 10:58:01 CST
2023年 03月 24日 星期五 10:59:01 CST
2023年 03月 24日 星期五 11:00:01 CST
2023年 03月 24日 星期五 11:01:01 CST
# 是这个进程再帮我们执行定时任务:
ps -ef|grep cron
root 581 1 0 18:05 ? 00:00:00 /usr/sbin/crond -n
# 我们还可以自行重启这个进程
systemctl restart crond
ps -ef|grep cron # 可以看到进程启动时间变化了
root 2611 1 25 21:27 ? 00:00:00 /usr/sbin/crond -n
#改为每小时的03分执行
crontab -e
crontab -l
03 * * * * date >> /tmp/time.txt
#修改一下系统时间
date -s '12:02:50'
2023年 03月 24日 星期五 12:02:50 CST
tail -f /tmp/time.txt
...
2023年 03月 24日 星期五 11:13:01 CST
2023年 03月 24日 星期五 11:14:01 CST
2023年 03月 24日 星期五 12:03:03 CST # 12点03分执行的
# crontab -e里面每一行都可以写一个定时任务,也就是可以写多个定时任务。
设置并执行crontab命令(eg:每半小时同步时间,每月的某日固定时间检查/home磁盘……)