目录
2.1 Linux命令格式及常用
Linux系统中几乎所有操作都可通过命令实现,实现这些功能的命令大多遵循以下模式:
command [options] [arguments]
command: 命令的名称
options: 选项,定义了命令的执行特性
arguments:命令作用的对象
[]表示非必选项
具体示例如下:
rm -r dir 该命令表示:删除目录dir
rm:命令的名称,用于删除文件
-r:选项,表示删除目录中的文件和子目录
dir:命令作用的对象,该对象是一个目录
2.1.0 查看帮助的命令
使用命令前查看命令的格式和使用方法: help / man
1.help--比较方便,推荐使用
使用方式:
命令名称 --help / help 命令名称
[root@rhcsa001 ~]# ls --help
[root@rhcsa001 ~]# help dir
2.man(manual-手册)
使用方式:
man 命令名称
[root@rhcsa001 ~]# man ls
按h查看帮助,按q退出
进入手册页面时可以按向上向下箭头翻1行,按空格翻1页
下面介绍一些重要的命令:
2.1.1 清屏-Ctrl+L
2.1.2 重启系统命令
[root@rhcsa001 ~]# reboot
[root@rhcsa001 ~]# init 6
2.1.3 关闭系统命令
[root@rhcsa001 ~]# poweroff
2.1.4 重置root密码
交互式:
passwd
非交互式:
首先重新启动虚拟机,然后连续快速按下e键:
持续更新中。。。
2.1.5 在系统中修改密码
[root@rhcsa001 ~]# passwd
输入密码和确认时屏幕不显示提示符!
2.1.6 查看网卡及IP地址
[root@rhcsa001 ~]# nmcli
[root@rhcsa001 ~]# ip address
[root@rhcsa001 ~]# ifconfig
2.1.7 查看日期
1.查看当前日期:
[root@rhcsa001 ~]# date
Mon Sep 9 06:31:40 PM CST 2024
CST-中国时区 UST-世界时区 CST = UST + 8
2.以中文形式查看当前日期:
[root@rhcsa001 ~]# date +%Y/%m/%d
2024/09/09
3.查看当前详细时间:
[root@rhcsa001 ~]# date +%Y-%m-%d-%H:%M:%S
2024-09-09-18:45:15
注意这里要么输入时不要有空格,要么把输入的内容放进引号中-不区分单双引号!
[root@rhcsa001 ~]# date '+%Y-%m-%d-%H:%M:%S'
2024-09-09-18:48:07
4.查看帮助文档:
[root@rhcsa001 ~]# date --help
Usage: date [OPTION]... [+FORMAT]
2.1.8 查看及修改时区
[root@rhcsa001 ~]# timedatectl
Local time: Mon 2024-09-09 18:51:36 CST
Universal time: Mon 2024-09-09 10:51:36 UTC
RTC time: Mon 2024-09-09 10:51:36
Time zone: Asia/Shanghai (CST, +0800)
修改时区-不推荐使用:
[root@rhcsa001 ~]# timedatectl set-timezone Asia/Shanghai
2.2 用户与用户组管理
2.2.0 用户和组配置文件
在Linux中,用户名、密码、用户组和用户组密码都保存在不同的配置文件中:
/etc/passwd:用于保存用户账号文件
/etc/shadow:用于保存用户密码文件
/etc/group:用于保存用户组的文件
/etc/gshadow:用于保存用户组密码的文件
/etc/skel:用于保存用户家目录文件
/etc/default/useradd:用于定义添加用户信息的文件
1./etc/passwd
passwd是一个文本文件,用于定义系统的用户账号,由于所有用户对这个文件具有访问权限,所以
该文件只定义用户的账号,而不保存用户密码(安全考虑)
查看文件:[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
在这个文件中,每一行记录了一个用户信息,而用户信息是以 :进行分割的7部分组成:
root : x : 0 : 0 : root : /root : /bin/bash
1 2 3 4 5 6 7
1.用户名
2.用户登陆密码的占位符:x表示有密码、空或*表示没密码
3.用户的ID,即uid
4.用户所属组ID,即gid
5.用户的个人资料:完整名称、地址、办公电话、家庭住址等
6.用户的家目录
7.用户默认登陆所能使用的shell脚本
2./etc/shadow
查看文件:[root@localhost ~]# cat /etc/shadow
root:$6$SZgqMgm$rc2AvMgHXbBj11h0/z6dpJvC9maS1::0:99999:7:::
文件中每一行记录一个用户的密码信息,共有9个字段:
root : $6$SZgqMgm$rc2AvMgHXbBj11h0/z6dpJvC9maS1 : : 0 : 99999 : 7 : : :
1 2 3 4 5 6 7 8 9
1.用户名
2.用户密码:包括算法、盐和密文 $6$表示算法(id为1表示md5加密、id为5表示sha256加密
id为6表示sha512加密,如果这个字段值为!!表示账号已锁定不能登录、*表示无需登录)
3.最后一次修改密码时间(单位:天,从1970.1.1起到创建账号的时间差、redhat为20008)
4.最小时间间隔(经过多少天才可以再次修改密码单位:天、0表示无限制)
5.最大时间间隔(密码经过多少天后必须修改否则不能登录、默认值:99999-237年)
6.警告时间、密码失效前进行提示默认值:7、值为0表示没有限制
7.不活动时间:密码过期后多少天禁用该账号(0表示立即失效、-1密码表示永不过期、正数表示延长使用)
8.密码失效时间:值为空表示永不过期(以距1970.1.1天数表示)
9.保留字段,目前暂无使用
3./etc/group
这个文件存储用户组信息
查看文件:[root@localhost ~]# cat /etc/group
root:x:0:
文件中每一行记录了一个组信息,使用 :分割成四个字段:
root : x : 0 :
1 2 3 4
1.组名
2.组的密码占位符
3.组ID,即gid
4.附加组中的用户列表,以英文逗号分割(空为无附加用户)
4./etc/gshadow
这个文件存储组的密码信息
查看文件:[root@localhost ~]# cat /etc/gshadow
root:::
文件每一行代表一个组的密码信息,通过 :进行分割:
root : : :
1 2 3 4
1.组名
2.组密码(如果值为!表示无密码)
3.组id(由于这个值通常保存在/ect/group文件中,因此值为空)
4.组中附加用户(于/etc/group相同)
5./etc/skel
这个文件存储用户家目录下的隐藏文件,默认情况下:创建好用户后会在这个用户的家目录下新建一个
隐藏文件,而这些隐藏文件就是从这个文件中拷贝过来的
查看文件:[root@localhost ~]# vim /etc/skel
./
.mozilla/
.bash_logout
.bash_profile
.bashrc
查看root全部文件(主要看隐藏文件):[root@localhost ~]# ls -a
. .bash_logout .bashrc .config .tcshrc
.. .bash_history .bash_profile .cache .local .ssh .viminfo
6./etc/default/useradd
这个文件存储创建文件的相关信息
查看文件:[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 用于建立用户的默认组(公有组,目录使用的是私有组,所以它无效)
HOME=/home 用于指定创建用户所在的家目录(普通用户家目录)
INACTIVE=-1 指定密码过期的宽限时间(值为-1表示不限制)
EXPIRE= 指定密码的过期时间
SHELL=/bin/bash 用于指定用户登陆后的操作
SKEL=/etc/skel 用于指定用户家目录下隐藏文件的拷贝来源
CREATE_MAIL_SPOOL=yes 用于给新建的用户指定邮箱地址
2.2.1 用户管理
Linux是一个多用户、多任务的分时操作系统,在一台Linux主机上可同时登陆多名用户,
为了对用户的状态进行跟踪,并对其可访问的资源进行控制:每名用户在使用Linux之前,
必须先向系统管理员申请一个账号并设置密码,之后才能登陆并访问系统资源。
根据用户的权限,Linux系统中的用户大体分为两类:超级用户root和普通用户;
其中超级用户拥有操作Linux系统的所有权限;为保护系统安全,一般不使用超级用户登录,
而是创建普通用户,以普通用户身份进行一系列操作。
为避免普通用户权限过大或权限不足,通常需要由root用户创建拥有不同权限的多个用户,
此时便需用到用户切换命令。
0.用户分类
对于Linux中的用户类型,我们可以查看/etc/login.defs文件:
基本格式:vim /etc/login.defs
MAIL_DIR /var/spool/mail 创建用户时给用户建立的邮箱地址
UMASK 022 用户的权限掩码
HOME_MODE 0700 用户的家目录权限
ENCRYPT_METHOD SHA512 用户密码的加密算法
USERGROUPS_ENAB yes 删除用户时,如果对应组中还有其他用户则组不能删除,否则可以
CREATE_HOME yes 默认创建用户时,创建用户家目录
PASS_MAX_DAYS 99999 用户密码的最大有效期(237年)
PASS_MIN_DAYS 0 用户密码的最小有效期(值为0表示一直有效)
PASS_WARN_AGE 7 用户密码过期前的警告期限(提前7天发出警告)
UID_MIN 1000 普通用户的uid最小值,即第一个普通用户uid值
UID_MAX 60000 普通用户的uid最大值,即最后一个用户的uid值
GID_MIN 1000 普通用户组的gid最小值
GID_MAX 60000 普通用户组的gid最大值
SYS_UID_MIN 201 系统用户的gid最小值
SYS_UID_MAX 999 系统用户的gid最大值
SYS_GID_MIN 201 系统用户组的gid最小值
SYS_GID_MAX 999 系统用户组的gid最大值
1.添加用户
[root@localhost ~]# useradd --help
基本格式: useradd [选项] <登录/注册>用户名
选项 | 说明 |
-c | 指定账户的备注文字:邮箱、电话、真实姓名 |
-d | 指定创建用户时的家目录,默认/home/用户名目录下 |
-e | 指定账号的失效期 |
-f | 指定密码的宽限期 |
-g | 为所创建用户指定基本组的id |
-G | 为所创建用户指定附加组的id,可指定多个并用" , "分割 |
-M | 创建用户时不创建家目录(一般用于创建系统用户) |
-N | 不创建与用户名相同的组名称 |
-p | 指定用户的登录密码 |
-s | 指定用户可操作的shell脚本 |
-u | 指定用户的用户ID(uid)、默认是已有普通用户最大id值加1 |
1.创建一个用户名为:admin的用户
准备工作:
准备工作:
[root@localhost ~]# tail -n 2 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@localhost ~]# tail -n 2 /etc/shadow
tcpdump:!!:20008::::::
redhat:$6$.IX.QI.syk.M8XIETEaB1:20008:0:99999:7:::
[root@localhost ~]# tail -n 2 /etc/group
tcpdump:x:72:
redhat:x:1000:
[root@localhost ~]# tail -n 2 /etc/gshadow
tcpdump:!::
redhat:!::
[root@localhost ~]# vi /var/spool/mail
./
redhat
rpc
创建用户:
创建用户:
[root@localhost ~]# useradd admin
再次查看相关配置文件:
再次对诸文件进行查看:
[root@localhost ~]# tail -n 2 /etc/passwd
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
admin:x:1001:1001::/home/admin:/bin/bash
[root@localhost ~]# tail -n 2 /etc/shadow
redhat:$6$.IX.QI.L.M8XIETEaB1:20008:0:99999:7:::
admin:!!:20010:0:99999:7:::
[root@localhost ~]# tail -n 2 /etc/group
redhat:x:1000:
admin:x:1001:
[root@localhost ~]# tail -n 2 /etc/gshadow
redhat:!::
admin:!::
[root@localhost ~]# vi /var/spool/mail
./
admin
redhat
rpc
总结:
当一个用户创建好后,需要在:/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow
和/var/spool/mail等文件中添加信息。
2.创建用户admin01,指定其uid为1002、登录的shell为/bin/bash、账号永不过期
[root@localhost ~]# useradd -u 1002 -s /bin/bash -e -1 admin01
3.创建用户admin02,指定家目录/admin、基本组wheel、同时属于adm和root附加组
[root@localhost ~]# useradd -d /home/admin -g wheel -G adm,root admin02
查看附加组:
[root@localhost ~]# cat /etc/group
root:x:0:admin02
adm:x:4:admin02
[root@localhost ~]# cat /etc/gshadow
root:::admin02
adm:::admin02
4.创建用户admin03,账号过期时间2024-12-12、账号信息:admin03,12345678910
[root@localhost ~]# useradd -e "2024-12-12: -c "admin03,12345678910" admin03
5.创建用户admin04,禁止登陆、不创建家目录
[root@localhost ~]# useradd -M -s /sbin/nologin admin04
2.设置用户密码
新建的账号是无法使用的,因为此时未给账号设置密码,账号处于锁定状态;
Linux中通过passwd命令为用户设置密码:
[root@localhost ~]# passwd --help
基本格式: passwd [选项...] 账号名
选项 | 说明 |
-k | 保持身份验证不过期 |
-d | 删除密码(同时删除锁) |
-l | 锁定密码(密码失效,无法登录) |
-u | 解除当前账号密码 |
-e | 指定账号过期时间 |
-x | 密码最长有效期 |
-n | 密码最短有效期 |
-w | 密码过期前多少天开始提示 |
-i | 宽限期:密码过期多少天后账号禁用 |
1.设置/修改Login密码为:123456
#设置密码
[root@localhost ~]# passwd Login
#查看密码
[root@localhost ~]# cat /etc/shadow | grep Login
#有了密码之后就可以登录账号
[root@localhost ~]# su -l Login
[Login@localhost ~]$
3.删除用户
使用userdel命令将该用户从系统中删除,除删除账号外还可以删除指定用户相关的文件和信息
[root@localhost ~]# userdel --help
基本格式: userdel [选项] 用户
选项 | 说明 |
-f | 强制删除(即使该用户为当前用户) |
-r | 删除用户的同时删除相关的所有文件(很重要!!!) |
1.删除Login、但保留相关文件:家目录和邮箱目录等
[root@localhost ~]# userdel -f Login
[root@localhost ~]# cat /etc/passwd |grep Login
2.删除Login且不保留相关文件
[root@localhost ~]# userdel -fr Login
4.修改用户信息
usermod命令用于修改用户信息,即修改与用户相关的属性信息:uid、主目录、用户组、账号期限等
[root@localhost ~]# usermod --help
基本格式: usermod [选项] 用户
注意:在useradd选项都可用的基础上还另有一些命令
选项 | 说明 |
-l | 更改用户名称(用户名未登陆的情况下才能使用) |
-L | 锁定账号密码,使当前帐号不能登录 |
-U | 解除密码锁定 |
1.修改账号admin的有效期为:2024-1-1、宽限期为7天
[root@localhost ~]# usermod -e "2024-1-1" -f 7 admin
2.修改账号admin的shell为/bin/sh
[root@localhost ~]# usermod -s /bin/sh admin
[root@localhost ~]# cat /etc/passwd | grep admin
admin:x:1001:1001::/home/admin: /bin/sh
3.将admin家目录移至/home目录下
[root@localhost ~]# usermod -d /home admin
[root@localhost ~]# cat /etc/passwd | grep admin
admin:x:1001:1001:: /home :/bin/sh
4.将账号admin修改为:Login、暂停使用该账号
[root@localhost ~]# usermod -l Login -L admin
[root@localhost ~]# cat /etc/passwd | grep Login
Login:x:1001:1001::/home:/bin/sh
5.将账号Login解锁
[root@localhost ~]# usermod -U Login
5.用户提权
大部分情况下我们都使用普通用户进行操作,如果想要普通用户也能够使用超级用户的某些权限,
我们需要对普通用户进行提权命令,在Linux中使用sudo实现
[root@localhost ~]# sudo --help
基本格式: sudo
6.修改主机名称
通常为了区分及更好的标识一个虚拟机,我们通常会给当前系统指定一个主机名
指定主机名称通过"hostnamectl"命令实现
[root@rhcsa001 ~]# hostnamectl --help
命令格式:
hostnamectl [选项] 命令
命令 | 说明 |
status | 查看当前主机名称设置 |
hostname [NAME] | 查看/设置主机名称 |
[root@rhcsa001 ~]# hostnamectl hostname rhcsa01
[root@rhcsa001 ~]# reboot 重新启动虚拟机
[root@rhcsa01 ~]# 主机名称由rhcsa001改为rhcsa01
2.2.2 用户组管理
为了方便对用户的管理,Linux系统设置了用户组的概念,一般将权限相同的用户放在同一个用户组
若某个用户组中每名用户都需要一项新的权限,管理员可直接将该权限赋予用户组,在一次操作中
为该组的所有用户提升权限
0.用户组分类
在Linux中用户组也分为以下两类:
1.基本组/私有组:建立用户时如果没有指明用户所属组,则系统自动建立一个与用户名同名的用户组
2.附加组/公有组:可以容纳多个用户,组中的用户拥有所属组的所有权限
注意:一个用户只能有一个基本组,但可以无附加组或同时有多个附加组。
1.添加用户组
增加用户组的方式用两种:一种是由系统默认创建-在创建用户时若无特别指定,系统会为新用户
创建与其同名的用户组;另一种是使用groupadd命令主动添加。
[root@localhost ~]# groupadd --help
基本格式: groupadd [选项] 组
选项 | 说明 |
-g | 指定新建用户组的组ID,默认是已有组最大gid+1 |
-r | 创建系统用户组,组ID取值范围(1~499) |
1.创建gid为:1100、组名admin的组
[root@localhost ~]# groupadd -g 1100 admin
[root@localhost ~]# tail -2 /etc/group
redhat:x:1000:
admin:x:1100:
2.创建组名openlab的组
[root@localhost ~]# groupadd openlab
[root@localhost ~]# tail -2 /etc/group
admin:x:1100:
openlab:x:1101:
2.修改用户组
用户组的GID、组名等属性都可以被修改
[root@localhost ~]# groupmod --help
基本格式: groupmod [选项] 组
选项 | 说明 |
-n | 修改组名 |
-g | 修改GID |
1.将openlab组名称改为:xiaoopenlab
[root@localhost ~]# groupmod -n xiaoopen openlab
[root@localhost ~]# tail -2 /etc/group
admin:x:1100:
xiaoopen:x:1101:
2.把admin组的GID改为:1001
[root@localhost ~]# groupmod -g 1001 admin
[root@localhost ~]# tail -2 /etc/group
admin:x:1001:
xiaoopen:x:1101:
3.删除用户组
[root@localhost ~]# groupdel --help
基本格式: groupdel [选项] 组
注意1:不需要使用选项!!!
注意2:使用groupdel只能删除空组
删除admin和xiaoopen组
[root@localhost ~]# groupdel admin
[root@localhost ~]# groupdel xiaoopen
[root@localhost ~]# tail -2 /etc/group
redhat:x:1000:
4.管理用户组
gpasswd命令用于管理用户组
[root@localhost ~]# gpasswd --help
基本格式: gpasswd [选项] 组
选项 | 说明 |
无选项 | 加密组 |
-r | 删除密码 |
-a | 添加用户到用户组 |
-d | 从用户组中删除用户 |
-M | 将多个用户添加到组 |
-A | 给组指派管理员 |
-R | 访问组中用户 |
1.创建admin组并设置密码
[root@localhost ~]# groupadd -g 1100 admin
#查看组密码
[root@localhost ~]# tail -1 /etc/gshadow
admin:!::
#设置组密码
[root@localhost ~]# gpasswd admin
#查看组密码
[root@localhost ~]# tail -1 /etc/gshadow
admin$6$4cZzHDhc0OvFzXLP/.::
2.删除admin组的密码
[root@localhost ~]# gpasswd -r admin
[root@localhost ~]# tail - /etc/gshadow
admin:::
3.将redhat用户添加到admin组中
#查看组(附加组)
[root@localhost ~]# tail -1 /etc/group
admin:x:1003:
#将redhat用户添加到admin用户组中去
[root@localhost ~]# gpasswd -a redhat admin
#查看组(附加组)
[root@localhost ~]# tail -1 /etc/group
admin:x:1003:redhat
4.将redhat用户从admin用户组中删除
[root@localhost ~]# gpasswd -d redhat admin
[root@localhost ~]# tail -1 /etc/group
admin:x:1003:
5.将root用户添加到admin组,并指派为管理员
#先把root用户放进admin组内
[root@localhost ~]# gpasswd -a root admin
#再把root用户指派为管理员
[root@localhost ~]# gpasswd -A root admin
6.将admin01、admin02用户添加到admin组内
[root@localhost ~]# gpasswd -M admin01,admin02 admin
[root@localhost ~]# tail -1 /etc/group
admin:x:1003:admin01,admin02
7.访问组中用户admin01
[root@localhost ~]# gpasswd -R admin01
2.2.3 用户切换
Linux提供了两种切换用户的方式:
一种是通过Linux系统图形化界面菜单中的"切换用户"选项切换用户;
另一种是在终端使用命令su或sudo切换用户
[root@rhcsa001 ~]# su --help
基本格式:
su [选项] [用户名]
若选项和用户名缺省则表示切换到root用户,但此时仍保留原来用户的工作环境;
使用"su -"则表示从当前用户切换到root用户,并切换到root用户的工作目录
#是超级用户的命令提示符,$是普通用户的命令提示符
选项 | 说明 |
-c | 执行完指定的指令后,切换回原来的用户 |
-l | 切换用户的同时,切换到对应用户的工作目录,环境变量随之改变 |
-m,-p | 切换用户时,不改变环境变量 |
-s | 指定要执行的shell |
1.从root用户切换到普通用户
[root@rhcsa001 ~]# su -l redhat
[redhat@rhcsa001 ~]$
2.从普通用户切换到root用户
[redhat@rhcsa001 ~]$ su -l root
Password:
[root@rhcsa001 ~]#
3.从普通用户切换到普通用户
[redhat@rhcsa001 ~]$ su -l rhcsa
Password:
[rhcsa@rhcsa001 ~]$
4."-l" 环境变量的更改与否
1.不改变环境变量查看redhat用户根目录
[root@rhcsa001 ~]# su redhat
[redhat@rhcsa001 root]$ ls
ls: cannot open directory '.': Permission denied
2.改变环境变量后查看redhat用户根目录
[root@rhcsa001 ~]# su -l redhat
[redhat@rhcsa001 ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
5.使用"exit"命令可退出当前用户,返回上级用户
[root@rhcsa001 ~]# exit
logout
[redhat@rhcsa001 ~]$ exit
logout
[root@rhcsa001 ~]#
2.2.4 查看用户和组
我们可以通过id命令来查看用户和组信息
[root@localhost ~]# id --help
基本格式: id [选项]... [用户]...
通过groups命令来查看组信息
[root@localhost ~]# groups --help
基本格式: groups [选项]... [用户名]...
1.查看redhat用户和组信息
[root@localhost ~]# id redhat
uid=1000(redhat) gid=1000(redhat) groups=1000(redhat),10(wheel)
2.查看redhat用户的组信息
[root@localhost ~]# groups redhat
redhat : redhat wheel
2.2.5 查看用户登录
1-users
这个命令用于查看当前系统登陆用户
[root@localhost ~]# users
root root
2-last
这个命令用于列出目前与过去登录到系统中的用户信息,默认读取/var/log/wtmp文件
#显示最近登陆的两条信息
[root@localhost ~]# last -2
root tty2 tty2 Sun Oct 20 19:40 still logged in
root seat0 login screen Sun Oct 20 19:40 still logged in
3-lastlog
查看每个账号的最近登陆时间,读取/var/log/lastlog文件
#查看root用户的登陆时间
[root@localhost ~]# lastlog |grep root
root tty2 Sun Oct 20 19:40:36 +0800 2024
4-w
用于显示登录到系统的用户信息
[root@localhost ~]# w
21:19:38 up 1:43, 2 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root seat0 19:40 0.00s 0.00s 0.00s /usr/libexec/gdm--session-session
root tty2 19:40 1:43m 0.02s 0.02s /usr/libexec/gnome-session-binary
#第一行显示系统时间、开机时间(1时43分)、用户数量、平均载入时间:1min、5min、15min
#第二行显示各项说明:
user---登陆的系统用户
TTY---用户使用的终端名称
FROM---表示来源
LOGIN@---用户登陆时间
IDLE---表示空闲时间
JCPU---某段时间内所有与该终端相关的进程任务所消耗的CPU时间
PCPU---表示当前活动进程所使用的系统时间
WHAT---表示当前用户执行的进程名称和选项
#第三行以后,每一行表示一个用户登陆的信息
5-who
用于显示当前登录系统的用户,读取/var/run/tump文件
[root@localhost ~]# who
root seat0 2024-10-20 19:40 (login screen)
root tty2 2024-10-20 19:40 (tty2)
2.2.6 手动创建用户和组
接下来我们手动创建一个名为haha的用户来了解Linux中手动创建用户过程:
1.编辑/etc/passwd文件,在文件末尾加上该信息(最好手动添加不要复制)
haha:x:1010:1010::/home/haha:/bin/bash
2.进入/home目录,新建/haha目录
[root@localhost home]# mkdir haha
3.编辑/etc/group文件,在末尾添加行信息
haha:x:1010:
4.修改haha用户的家目录权限
[root@localhost ~]# ll /home
drwxr-xr-x. 2 root root 6 Oct 20 21:46 haha
drwx------. 14 redhat redhat 4096 Oct 20 21:12 redhat
[root@localhost ~]# chown haha:haha /home/haha
[root@localhost ~]# ll /home
drwxr-xr-x. 2 haha haha 6 Oct 20 21:46 haha
drwx------. 14 redhat redhat 4096 Oct 20 21:12 redhat
5.从/etc/skel目录中复制文件到/home/haha目录下
[root@localhost ~]# cp -r /etc/skel/.bash* /home/haha/
[root@localhost ~]# cp -r /etc/skel/.mozilla/* /home/haha/
6.再次修改haha用户的家目录权限
[root@localhost ~]# chown -R haha:haha /home/haha
7.在/etc/spool/mail目录下新建名为haha的文件
[root@localhost ~]# touch /etc/spool/mail/haha
8.修改所属用户和所属组
[root@localhost ~]# chown haha:mail /etc/spool/mail/haha
9.给haha用户指定密码
[root@localhost ~]# passwd haha
2.3 文件管理
2.3.0 文件类型
在Linux中一切皆文件!
文件分类:
Linux一共有7种文件分类:
- 普通文件
d 目录
l 链接文件(分为软链接和硬链接)
c 字符设备文件
b 块设备文件
p 管道文件
s 套接字文件
文件内容格式说明:
[root@rhcsa001 ~]# ll -d /root
d r-xr-x---. 15 root root 4096 Nov 5 2023 /root
1 2 3 4 5 6 7 8
1.文件类型
2.文件操作权限
3.硬链接数
4.文件所有者(创建文件的人)
5.文件所发属组名称
6.文件大小,单位为字节
7.文件最后一次修改时间
8.文件名称
2.3.1 文件操作
2.3.1.1-pwd
用以显示当前工作目录的绝对路径,通常不添加参数,直接在命令行中使用
[root@rhcsa001 ~]# pwd
/root
2.3.1.2-cd
更改目录:若执行该命令的用户有权限,cd命令可更改当前目录到对象目录
[root@rhcsa001 ~]# cd --help
基本格式:cd + 参数(工作路径)
1.切换工作路径到上一级目录(/root->/)
[root@rhcsa001 ~]# pwd
/root
[root@rhcsa001 ~]# cd ..
[root@rhcsa001 /]# pwd
/
2.切换工作路径到当前目录(root)下的Public目录中
[root@rhcsa001 ~]# ls
anaconda-ks.cfg Documents Music Public Videos
Desktop Downloads Pictures Templates
[root@rhcsa001 ~]# cd ./Public
[root@rhcsa001 Public]# ll
total 0
3.切换工作路径到etc目录下的yum目录中(/root->/etc)
[root@rhcsa001 /]# ls
afs boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
[root@rhcsa001 /]# cd /etc/yum
[root@rhcsa001 yum]# ll
total 0
lrwxrwxrwx. 1 root root 14 Mar 15 2023 pluginconf.d -> ../dnf/plugins
lrwxrwxrwx. 1 root root 18 Mar 15 2023 protected.d -> ../dnf/protected.d
lrwxrwxrwx. 1 root root 11 Mar 15 2023 vars -> ../dnf/vars
4.切换工作路径为当前目录的家目录(/root/Public->/root)
[root@rhcsa001 ~]# cd ./Public/
[root@rhcsa001 Public]# cd ~
[root@rhcsa001 ~]# ls
anaconda-ks.cfg Documents Music Public Videos
Desktop Downloads Pictures Templates
5.在最近两个目录之间来回切换
[root@rhcsa001 ~]# cd /home
[root@rhcsa001 home]# cd -
/root
[root@rhcsa001 ~]# cd -
/home
6.直接输入cd则回到/root家目录
[root@rhcsa001 home]# cd /home/redhat/
[root@rhcsa001 redhat]# cd
[root@rhcsa001 ~]# ls
anaconda-ks.cfg Documents Music Public Videos
Desktop Downloads Pictures Templates
2.3.1.3-ls
"ls"命令是"list"的简写即"列出",作用是显示指定路径下的所有文件信息
[root@rhcsa001 ~]# ls --help
基本格式:
ls [选项] [文件]
选项 | 说明 |
-a | 显示所有文件,包括隐藏文件及目录 |
-d | 显示目录本身而不是显示目录下的内容 |
-l | 以详细信息的方式显示目录下的文件(ls - l == ll) |
-h | 以人的读取习惯显示内容 |
-r | 递归显示 |
2.1 显示根目录-a
显示根目录下的子目录:
[root@rhcsa001 ~]# ls /
afs boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
显示根目录下的所有子目录(包含隐藏目录):
[root@rhcsa001 ~]# ls -a /
. afs boot etc lib media opt root sbin sys usr
.. .bash_history bin dev home lib64 mnt proc run srv tmp var
.表示当前目录
..表示上级目录
以.开头的文件或目录表示隐藏文件或目录 .bash_history
2.2 显示目录本身-d
[root@rhcsa001 ~]# ls -d /
/
[root@rhcsa001 ~]# ls -d /root
/root
2.3 以长列表方式显示目录-l
[root@rhcsa001 ~]# ls -l /
total 28
dr-xr-xr-x. 5 root root 4096 Oct 18 2023 boot
drwxr-xr-x. 19 root root 3300 Sep 10 15:39 dev
drwxr-xr-x. 136 root root 8192 Sep 10 15:42 etc
2.4 以人的读取习惯显示目录-h
[root@rhcsa001 ~]# ls -lh /
total 28K
dr-xr-xr-x. 5 root root 4.0K Oct 18 2023 boot
drwxr-xr-x. 19 root root 3.3K Sep 10 15:39 dev
drwxr-xr-x. 136 root root 8.0K Sep 10 15:42 etc
执行命令时可以执行多个选项,两种书写方式:
[root@rhcsa001 ~]# ls -l -h /
[root@rhcsa001 ~]# ls -lh /
2.5 通过文件开头查找文件
0.查看/root/itheima目录下的所有文件
[root@rhcsa001 itheima]# ls
dir01 dir02 dir03 dir1 dir2 dir3
1.查找以dir开头的后一位有效位文件:
[root@rhcsa001 itheima]# ls -d dir?
dir1 dir2 dir3
2.查找以dir开头的后两位有效文件----以此类推
[root@rhcsa001 itheima]# ls -d dir??
dir01 dir02 dir03
3.查找以dir结尾的全部有效文件
[root@rhcsa001 itheima]# ls -d dir*
dir01 dir02 dir03 dir1 dir2 dir3
2.3.1.4-mkdir
创建目录
[root@rhcsa001 ~]# mkdir --help
基本格式: mkdir [选项] 目录名
选项 | 说明 |
-p | 创建多个/多级目录 |
-v | 创建文件过程中查看过程 |
1.通过绝对路径创建
在/root目录下创建/etc/dir01目录:
[root@rhcsa001 ~]# pwd
/root
[root@rhcsa001 ~]# mkdir -v /etc/dir01
mkdir: created directory '/etc/dir01'
2.直接去到所要创建文件的路径下去创建
在/root/itheima目录下创建dir01目录:
[root@rhcsa001 ~]# cd /root/itheima/
[root@rhcsa001 itheima]# pwd
/root/itheima
[root@rhcsa001 itheima]# mkdir -v dir01
mkdir: created directory 'dir01'
[root@rhcsa001 itheima]# ls
dir01
3.创建多级目录
在/root/itheima/dir01目录下创建dir02/dir03多级目录
[root@rhcsa001 ~]# mkdir -pv /root/itheima/dir01/dir02/dir03
mkdir: created directory '/root/itheima/dir01/dir02'
mkdir: created directory '/root/itheima/dir01/dir02/dir03'
[root@rhcsa001 ~]# cd /root/itheima/
[root@rhcsa001 itheima]# tree
.
└── dir01
└── dir02
└── dir03
4.创建多个目录
在/root/itheima目录下创建dir02 dir03 dir04目录
[root@rhcsa001 itheima]# mkdir -pv dir02 dir03 dir04
mkdir: created directory 'dir02'
mkdir: created directory 'dir03'
mkdir: created directory 'dir04'
[root@rhcsa001 itheima]# ls
dir01 dir02 dir03 dir04
创建多级目录的另一种写法:
[root@rhcsa001 itheima]# mkdir -pv dir{10..13}
mkdir: created directory 'dir10'
mkdir: created directory 'dir11'
mkdir: created directory 'dir12'
mkdir: created directory 'dir13'
2.3.1.5-touch/stat
touch命令的主要功能是将已存在文件的时间标签更新为系统的当前时间
若指定文件不存在,则会创建一个新文件(附加功能)
[root@rhcsa001 ~]# touch --help
基本格式: touch [选项]... 文件...
要查看文件的状态可以通过命令:stat来实现
stat命令查看文件状态(创建时间、修改时间、访问时间):
选项 | 说明 |
atime(access time) | 修改文件的访问时间 (选项-a) |
mtime(modify time) | 修改文件的修改时间 (选项-m) |
ctime(change time) | 修改文件元数据的时间 (选项 -m) |
1.在/root/itheima目录下创建文件file1并查看其状态
[root@rhcsa001 ~]# touch ./itheima/file1
[root@rhcsa001 itheima]# ls
file1
[root@rhcsa001 itheima]# stat file1
File: file1
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 101941599 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2024-09-15 20:06:15.491413774 +0800
Modify: 2024-09-15 20:06:15.491413774 +0800
Change: 2024-09-15 20:06:15.491413774 +0800
Birth: 2024-09-15 20:06:15.491413774 +0800
2.再次创建/root/itheima并查看其状态
[root@rhcsa001 itheima]# touch file1
[root@rhcsa001 itheima]# ls
file1
[root@rhcsa001 itheima]# stat file1
File: file1
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 101941599 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2024-09-15 20:14:44.965418885 +0800
Modify: 2024-09-15 20:14:44.965418885 +0800
Change: 2024-09-15 20:14:44.965418885 +0800
Birth: 2024-09-15 20:06:15.491413774 +0800
3.创建多个文件
[root@rhcsa001 itheima]# touch file{2..5}
[root@rhcsa001 itheima]# ls
file1 file2 file3 file4 file5
[root@rhcsa001 itheima]# touch file01 file02
[root@rhcsa001 itheima]# ls
file01 file02 file1 file2 file3 file4 file5
2.3.1.6-cp
复制:将一个或多个源文件复制到指定的目录
[root@rhcsa001 ~]# cp --help
基本格式: cp [选项]... 源路径... 目标路径
注意:只能复制到已存在的文件或目录下
选项 | 说明 |
-a | 拷贝文件的同时保留链接文件属性 |
-r | 递归拷贝,将指定目录及其子目录一并处理 |
-f | 强制覆盖目标路径 |
-d | 拷贝时保留链接 |
1.将/root/itheima/passwd文件复制到/root/itheima路径下并命名为:passwd.cp
[root@rhcsa001 itheima]# ls
passwd
[root@rhcsa001 itheima]# cp ./passwd passwd.cp
[root@rhcsa001 itheima]# ls
passwd passwd.cp
2.在/root/itheima文件下,创建目录dir1,并将/root/itheima/passwd文件以原名称复制到目录中
[root@rhcsa001 itheima]# mkdir dir1
[root@rhcsa001 itheima]# ls
dir1 passwd passwd.cp
[root@rhcsa001 itheima]# cp passwd dir1
[root@rhcsa001 itheima]# ls dir1
passwd
2.3.1.7-mv
用于移动文件或目录
[root@rhcsa001 ~]# mv --help
基本格式: mv [选项]... 源路径... 目标路径
1.将文件1.txt移动到目录dir1中
[root@rhcsa001 itheima]# ls
1.txt dir1
[root@rhcsa001 itheima]# mv 1.txt dir1/
[root@rhcsa001 itheima]# ls
dir1
[root@rhcsa001 itheima]# ls dir1/
1.txt
2.将目录dir1移动到目录dir2中
[root@rhcsa001 itheima]# ls
dir1 dir2
[root@rhcsa001 itheima]# mv dir1 dir2
[root@rhcsa001 itheima]# ls
dir2
3.将文件file1移动到目录dir1中并修改名称为:file2
[root@rhcsa001 itheima]# tree
.
├── dir1
└── file1
1 directory, 1 file
[root@rhcsa001 itheima]# mv file1 dir1/file2
[root@rhcsa001 itheima]# tree
.
└── dir1
└── file2
1 directory, 1 file
2.3.1.7-rm
删除文件/目录
注意:要删除实目录时必须添加选项"-r",空目录可替换成"d"
[root@rhcsa001 ~]# rm --help
基本格式: rm [选项]... [文件]...
选项 | 说明 |
-r | 递归删除,删除目录时需要用到的指定选项 |
-f | 强制删除,删除文件/目录时不会进行提示 |
-rf | 删除目录中所有文件和子目录,并且不一一确认 |
-d | 删除空目录 |
-v | 显示操作过程 |
1.删除/root/itheima下的dir01目录
[root@rhcsa001 ~]# ls ./itheima/
dir1 dir2 dir3
[root@rhcsa001 ~]# rm -rfv ./itheima/dir1
removed directory './itheima/dir1'
[root@rhcsa001 ~]# ls ./itheima/
dir2 dir3
2.删除/root/itheima下的dir02空目录
[root@rhcsa001 ~]# rm -dfv ./itheima/dir2
removed directory './itheima/dir2'
[root@rhcsa001 ~]# ls ./itheima/
dir3
3.删除多个(空)目录,多个目录之间用空格隔开
[root@rhcsa001 itheima]# ls
dir001 dir002 dir3
[root@rhcsa001 itheima]# rm -rfv dir001 dir002
[root@rhcsa001 itheima]# ls
dir3
4.批量删除,使用通配符来删除目录下的所有文件和目录
[root@rhcsa001 itheima]# ls
dir001 dir002 dir01 dir02 dir1 dir2
[root@rhcsa001 itheima]# rm -rfv dir?
[root@rhcsa001 itheima]# ls
dir001 dir002 dir01 dir02
[root@rhcsa001 itheima]# rm -rfv dir*
[root@rhcsa001 itheima]# ll
total 0
2.3.1.8-sort
对文本中的各行进行排序,通常与其他命令一起使用(cut)
建议先看下面的cut命令
[root@rhcsa001 ~]# sort --help
基本格式: sort [选项]... [文件]...
选项 | 说明 |
-b | 忽略缩进与空格 |
-f | 忽略大小写 |
-n | 以数值型排序 |
-r | 反向排序 |
-t | 指定间隔符 |
-k | 指定获取范围(列) |
-u | 去除重复行 |
1.查看/etc/passwd文件中的第三列并排序
原始顺序:
[root@rhcsa001 ~]# cut -d : -f 3 /etc/passwd
0
1
2
3
自然排序:
[root@rhcsa001 ~]# cut -d : -f 3 /etc/passwd | sort
0
1
1000
11
按数值大小排序:
[root@rhcsa001 ~]# cut -d : -f 3 /etc/passwd | sort -n
0
1
2
按数值大小反向排序:
[root@rhcsa001 ~]# cut -d : -f 3 /etc/passwd | sort -nr
65534
1000
999
2.使用sort命令对/etc/passwd文件进行排序
[root@rhcsa001 ~]# sort -n /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
[root@rhcsa001 ~]# sort -nr /etc/passwd
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
systemd-oom:x:986:986:systemd Userspace OOM Killer:/:/usr/sbin/nologin
3.使用sort命令对文件/etc/passwd文件的第三列进行排序
[root@rhcsa001 ~]# sort -t : -k 3 /etc/passwd
root:x: 0 :0:root:/root:/bin/bash
redhat:x: 1000 :1000:redhat:/home/redhat:/bin/bash
operator:x: 11 :0:operator:/root:/sbin/nologin
4.使用sort命令对文件/etc/passwd文件的第三列进行数值排序
[root@rhcsa001 ~]# sort -t : -k 3 -n /etc/passwd
root:x: 0 :0:root:/root:/bin/bash
bin:x:1: 1 :bin:/bin:/sbin/nologin
daemon:x: 2 :2:daemon:/sbin:/sbin/nologin
2.3.2 查看文件
2.3.2.1-cat
将文件中的内容打印到输出设备
一般使用这个命令显示小的文件!!!
[root@rhcsa001 ~]# cat --help
基本格式: cat [选项]... [文件]...
选项 | 说明 |
-n | 显示文件行序号(包含空行) |
-b | 显示文件行序号(不包含空行) |
我们以/etc/passwd文件为例:
[root@rhcsa001 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
1.显示出文件所有的行序号(包含空行)-n
[root@rhcsa001 ~]# cat -n /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.在每行的末尾添加一个$符号-A
[root@rhcsa001 ~]# cat -A /etc/passwd
root:x:0:0:root:/root:/bin/bash$
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
3.显示文件行序号(不含空行)-b
[root@rhcsa001 ~]# cat -b /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.3.2.2-more
用于分页显示文件内容
[root@rhcsa001 ~]# more --help
基本格式:more 文件
快捷键 | 说明 |
Enter键 | 向下翻一行 |
向上向下箭头 | 上下翻一页 |
q | 退出文件查看 |
在使用快捷键查看之前我们先要做些准备工作:
1.我们先多次使用命令对/root/itheima/file3文件进行追加操作
[root@rhcsa001 itheima]# cat /etc/passwd >> file3
[root@rhcsa001 itheima]# cat /etc/passwd >> file3
......
2.使用命令:more file3展示文件并使用快捷键进行查看
[root@rhcsa001 itheima]# more file3
2.3.2.3-less
用于分页显示文件内容
推荐使用less而不是more来查看文件因为它的功能更强!!!
[root@rhcsa001 ~]# more --help
基本格式:less 文件
快捷键 | 说明 |
Enter键 | 向下翻一行 |
向上向下箭头 | 向上向下翻一页 |
g/G | 回到第一行/回到末尾行 |
q | 退出查看 |
我们同样可以就/root/itheima/file3文件使用快捷键进行查看
[root@rhcsa001 itheima]# less file3
2.3.2.4-head
用于查看指定文件的前n行内容,默认为前10行
[root@rhcsa001 ~]# head --help
基本格式: head [选项]... [文件]...
选项 | 说明 |
-n | 查看文件的指定开头行数(默认为10行) |
-c | 查看指定文件的开头指定字符 |
1.查看/etc/passwd文件的默认前10行
[root@rhcsa001 ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
2.查看/etc/passwd的前n行,以3行为例
[root@rhcsa001 ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@rhcsa001 ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
3.查看/etc/passwd文件的开头指定字符,以5个字符为例
[root@rhcsa001 ~]# head -c 5 /etc/passwd
root:
2.3.2.5-tail
用于查看指定文件的后n行内容,默认为后10行
[root@rhcsa001 ~]# tail --help
基本格式: tail [选项]... [文件]...
选项 | 说明 |
-c | 查看指定文件的末尾指定字符 |
-n | 查看文件的指定末尾行数(默认为10行) |
-f | 查看追加内容 |
1.查看/etc/passwd文件的默认后10行
[root@rhcsa001 ~]# tail /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
cockpit-ws:x:983:982:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:982:981:User for cockpit-ws instances:/nonexisting:/sbin/nologin
gnome-initial-setup:x:981:980::/run/gnome-initial-setup/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:980:978:chrony system user:/var/lib/chrony:/sbin/nologin
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
2.查看/etc/passwd文件的指定后3行
[root@rhcsa001 ~]# tail -3 /etc/passwd
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@rhcsa001 ~]# tail -n 3 /etc/passwd
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
3.查看/etc/passwd文件的末尾指定字符,以5个为例
[root@rhcsa001 ~]# tail -c 5 /etc/passwd
bash
4.查看/root/itheima/file1文件的追加展示:
一:以远程登陆软件X-shell为例
1.登录远程登陆系统
2.右击选择复制会话
3.右击选择垂直分割
二:直接以虚拟机为例
1.点击左上角的"+"
2.右击选择 "Detach Terminal"
垂直分割是为了便于观察追加的效果:
进入到file1文件所在的父目录即可进行操作:
1.先在右侧写入显示追加的内容
2.在左侧给指定文件file1追加内容
3.我们可以看到两个文件可以同步展示,即表示追加内容显示成功
退出按:Ctul + C
2.3.2.6-wc
word count:使用wc命令可以计算文件的字节数、字数和列数
[root@rhcsa001 ~]# wc --help
基本格式: wc [选项]... [文件]...
选项 | 说明 |
-c | 统计文件中的字节数/文件大小 |
-m | 统计文件中字符的个数(一个字符就是一个字节) |
-w | 统计文件中的单词数 |
-l | 统计文件中的行数 |
-d | 指定分隔符 |
1.查看/root/itheima/file01文件的字节数
查看file01文件内容:
[root@rhcsa001 ~]# cat /root/itheima/file01
Hello
My Linux redhat
This is fresh
使用wc -c命令来计算字节数: 换行和空格也算字数!!!
[root@rhcsa001 ~]# wc -c /root/itheima/file01
37 /root/itheima/file01
2.查看/root/itheima/file01的字符个数(一个字符为一个字节)
[root@rhcsa001 ~]# wc -m /root/itheima/file01
37 /root/itheima/file01 一个字符为一个字节!!!
3.查看/root/itheima/file01文件中的单词数
[root@rhcsa001 ~]# wc -w /root/itheima/file01
7 /root/itheima/file01
4.查看/root/itheima/file01文件中的行数
[root@rhcsa001 ~]# wc -l /root/itheima/file01
3 /root/itheima/file01
2.3.3 文件搜索
2.3.3.1-grep
grep的基础功能是在文件中搜索与指定字符串匹配的行并打印到终端
[root@rhcsa001 itheima]# grep --help
基本格式: grep [选项]... PATTERNS [文件]...
PATTERNS表示要查找的关键字,严格来说应该是要查找的匹配字符
1.PATTERNS是普通字符 eg:1-6
2.PATTERNS是特殊字符 eg:7-
grep是Linux系统默认支持的文本分析工具,该工具常与正则表达式配合使用以实现:
更灵活、更复杂的功能
此处仅讲解最基础用法,关于正则表达式与grep的更多用法将在第3章详细讲解
选项 | 说明 |
-c | 仅显示找到的行数 |
-n | 显示行号 |
-i | 忽视大小写 |
-v | 反向选择,会列出没有关键字的行 |
-A n | 搜索时显示匹配到的那一行及下n行 |
-B n | 搜索时显示匹配到的那一行及上n行 |
-C n | 搜索时显示匹配到的那一行及上下n行 |
PATTERNS为普通字符1-7:
1.在/etc/passwd文件中查找含有"root"关键字的所有行(显示行号)
[root@rhcsa001 ~]# grep root -n /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@rhcsa001 ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
2.在/etc/passwd文件中查找不包含/sbin/nologin关键字的所有行(显示行号)
[root@rhcsa001 ~]# grep /sbin/nologin -nv /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
39:redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
3.在2的基础上仅显示找到的行数
[root@rhcsa001 ~]# grep /sbin/nologin -vc /etc/passwd
5
4.在/etc/passwd文件中查找包含"libstoragemgmt"关键字的行及上三行(显示行号)
[root@rhcsa001 ~]# grep libstoragemgmt -A 3 -n /etc/passwd
26:libstoragemgmt:x:987:987:daemon account for libstoragemgmt:/:/usr/sbin/nologin
27-systemd-oom:x:986:986:systemd Userspace OOM Killer:/:/usr/sbin/nologin
28-pipewire:x:985:984:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
29-flatpak:x:984:983:User for flatpak system helper:/:/sbin/nologin
5.在/etc/passwd文件中查找包含"libstoragemgmt"关键字的行及上三行(显示行号)
[root@rhcsa001 ~]# grep libstoragemgmt -n -B 3 /etc/passwd
23-sssd:x:995:991:User for sssd:/:/sbin/nologin
24-geoclue:x:994:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
25-setroubleshoot:x:993:989:SELinux troubleshoot server:/var/lib/setroubleshoot
26:libstoragemgmt:x:987:987:daemon account for libstoragemgmt:/:/usr/sbin/nologin
6.在/etc/passwd文件中查找包含"libstoragemgmt"关键字的行及上下1行(显示行号)
[root@rhcsa001 ~]# grep libstoragemgmt -n -C 1 /etc/passwd
25-setroubleshoot:x:993:989:SELinux troubleshoot server:/var/lib/setroubleshoot:/sbin/
26:libstoragemgmt:x:987:987:daemon account for libstoragemgmt:/:/usr/sbin/nologin
27-systemd-oom:x:986:986:systemd Userspace OOM Killer:/:/usr/sbin/nologin
7.在/etc/passwd文件中查找含有ROOT的所有行(不区分大小写,显示行号)
[root@rhcsa001 ~]# grep ROOT -in /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
PATTERNS为特殊字符8-12:
匹配模式 | 说明 |
grep x 文件名 | 查找文件里有 x 的行 |
grep ^[q] 文件名 | 查找文件里以q开头的行 |
grep ^[qf] 文件名 | 查找文件里以q/f开头的行 |
grep ^[^qf] 文件名 | 查找文件里以q/f开头以外的行 |
grep ^[0-9] 文件名 | 查找以数字开头的行 |
grep [0-9] 文件名 | 查找文件中包含数字的行 |
grep [q]$ 文件名 | 查找文件里以q结尾的行 |
grep ^h$ 文件名 | 查找文件里只有q的行 |
8.在/etc/passwd文件中查找以"r或b"关键字开头的行(显示行号)
[root@rhcsa001 ~]# grep ^[rb] -n /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
9.在/etc/passwd文件中查找以"r或b"关键字开头以外的行(显示行号)
[root@rhcsa001 ~]# grep ^[^rb] -n /etc/passwd 有好多,以3行为例!!!
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
10.在/root/itheima/passwd文件中查找以数字开头的行
[root@rhcsa001 ~]# echo 123 >> ./itheima/passwd 自己临时新增的!!!
[root@rhcsa001 ~]# grep ^[0-9] ./itheima/passwd
123
11.在/etc/passwd文件中查找以"n"关键字结尾的行(显示行号)
[root@rhcsa001 ~]# grep [n]$ -n /etc/passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.3.3.2-cut
用于从文件的每一行中提取文本片段,例如列或字段
[root@rhcsa001 ~]# cut --help
基本格式: cut 选项... [文件]...
选项 | 说明 |
-d | 指定分隔符,如果是空格需要用引号引起来 |
-f | 指定获取的列 |
-c | 制定获取的字符 |
[root@rhcsa001 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
我们可以注意到:文本内容是以":"作为分隔符的,一共有7列
1.查看/etc/passwd文件中第一列的全部内容
[root@rhcsa001 ~]# cut -d (分隔符) -f (要获取的列数) 文件名
[root@rhcsa001 ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
2.查看/etc/passwd文件中第1-3列的全部内容
[root@rhcsa001 ~]# cut -d : -f 1-3 /etc/passwd
root:x:0
bin:x:1
3.查看/etc/passwd文件中第1列和第3列的内容
[root@rhcsa001 ~]# cut -d : -f 1,3 /etc/passwd
root:0
bin:1
4.查看/etc/passwd文件中家目录所在列内容
[root@rhcsa001 ~]# cut -d : -f 6 /etc/passwd
/root
/bin
/sbin
5.查看/etc/passwd文件中第4个字符
[root@rhcsa001 ~]# cut -c 4 /etc/passwd
t
:
6.查看/etc/passwd文件中第1-4个字符
[root@rhcsa001 ~]# cut -c 1-4 /etc/passwd
root
bin:
2.3.3.3-uniq
去重显示:可以用于去除文本中连续的重复行
注意:只有连续相同的行才能被称为重复行!!!
[root@rhcsa001 ~]# uniq --help
基本格式: uniq [选项]... [INPUT [OUTPUT]]
选项 | 说明 |
-c | 可以统计重复行数 |
1.对/root/uniq.txt文件进行去重显示
[root@rhcsa001 ~]# cat uniq.txt
Welcome to Redhat
Welcome to Redhat
This is a new world
Welcome to Redhat
Welcome to Redhat
This is a new world
[root@rhcsa001 ~]# uniq uniq.txt
Welcome to Redhat
This is a new world
Welcome to Redhat
This is a new world
2.对/root/uniq.txt文件进行去重并显示重复行数
[root@rhcsa001 ~]# uniq -c uniq.txt
2 Welcome to Redhat
1 This is a new world
2 Welcome to Redhat
1 This is a new world
更新中。。。。。。
2.3.3.4-
2.3.4 权限管理
2.3.5 压缩解压
与Windows系统类似,为了节约磁盘空间,提高文件传输效率,Linux系统也经常会压缩文件。
Linux系统中压缩包的后缀有:.zip、.gz、.bz2、.xz等,后缀不同表示压缩方式不同,
使用的压缩命令也不同。
此外,Linux系统中提供了专门用于打包文件的命令——tar,该命令通常与压缩命令一起使用。
2.3.5.1 tar
tar命令是用于备份文件的命令,该命令可以打包和还原多个文件或目录
[root@rhcsa001 ~]# tar --help
基本格式: tar [选项...] [文件]...
选项 | 说明 |
-c | 创建一个新的归档文件/压缩文件 |
-C | 将压缩文件解压到指定目录 |
-tv | 以列表方式显示归档文件/压缩文件中的内容 |
-v | 显示命令执行过程 |
-x | 解压文件 |
-f | 指定归档文件/压缩文件名称(此选项必须放置最后紧跟压缩名) |
-z | 打包完成后使用gzip命令将包压缩(压缩格式:.tar.gz) |
-j | 打包完成后使用bzip2命令将包压缩(压缩格式:.tar.bz2) |
1.将/etc/passwd文件压缩到当前目录下,别名为:passwd.tar
[root@rhcsa001 ~]# tar -cvf passwd.tar /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd
[root@rhcsa001 ~]# ls
passwd.tar
2.将/root下所有以.txt结尾的文件压缩并进行查看
[root@rhcsa001 ~]# ls
1.txt 2.txt 3.txt
[root@rhcsa001 ~]# tar -cvf txt.tar ./*.txt
[root@rhcsa001 ~]# ls
1.txt 2.txt 3.txt txt.tar
[root@rhcsa001 ~]# tar -tvf txt.tar
-rw-r--r-- root/root 11 2024-10-08 13:00 ./1.txt
-rw-r--r-- root/root 11 2024-10-08 13:00 ./2.txt
-rw-r--r-- root/root 11 2024-10-08 13:00 ./3.txt
3.解压文件,将txt.tar压缩包解压到当前目录下
[root@rhcsa001 ~]# ls
1.txt 2.txt 3.txt txt.tar
#为了方便直观,我们对.txt文件进行别名操作!
[root@rhcsa001 ~]# mv 1.txt file1
[root@rhcsa001 ~]# mv 2.txt file2
[root@rhcsa001 ~]# mv 3.txt file3
[root@rhcsa001 ~]# ls
file1 file2 file3 txt.tar
#对txt.tar压缩包进行解压
[root@rhcsa001 ~]# tar -xvf txt.tar
./1.txt
./2.txt
./3.txt
#解压后的文件和压缩包同时存在
[root@rhcsa001 ~]# ls
1.txt 2.txt 3.txt file1 file2 file3 txt.tar
4.将txt.tar解压到/root/itheima目录中去
[root@rhcsa001 ~]# tar -xvf txt.tar -C itheima/
[root@rhcsa001 ~]# tree ./itheima/
./itheima/
├── 1.txt
├── 2.txt
└── 3.txt
5.将/etc/passwd文件压缩为gzip格式的passwd.tar.gz文件及解压
压缩:
[root@rhcsa001 ~]# tar -zcvf passwd.tar.gz /etc/passwd
[root@rhcsa001 ~]# ls
passwd.tar.gz
解压缩:
[root@rhcsa001 ~]# tar -zxvf passwd.tar.gz
[root@rhcsa001 ~]# tree
.
├── etc
│ └── passwd
└── passwd.tar.gz
2.3.5.2-zip/unzip
使用zip命令压缩文件时压缩包一般命名为"文件名.zip"
[root@rhcsa001 ~]# zip --help
基本格式:zip [选项] 压缩包名 文件
[root@rhcsa001 ~]# unzip --help
基本格式:unzip [选项] 压缩包 文件名
选项 | 说明 |
-9 | 指定最高的压缩率 |
-r | 递归压缩目录下文件及子目录下的文件 |
1.将/root/itheima下的file文件压缩为/root/itheima/file.zip文件
[root@rhcsa001 ~]# zip ./itheima/file.zip ./itheima/file
[root@rhcsa001 ~]# tree ./itheima/
./itheima/
├── file
└── file.zip
2.使用-r选项来递归压缩hello目录下所有文件到hello.zip中
[root@rhcsa001 ~]# tree
hello
├── a.txt
└── world
└── b.txt
[root@rhcsa001 ~]# zip -r hello.zip ./hello/
adding: hello/ (stored 0%)
adding: hello/world/ (stored 0%)
adding: hello/world/b.txt (stored 0%)
adding: hello/a.txt (stored 0%)
2.3.5.3-gzip/gunzip
只能用于压缩文件,压缩包一般命名为"文件名.gz",压缩后默认不保留源文件
[root@rhcsa001 ~]# gzip --help
基本格式: gzip [选项]... [文件]...
[root@rhcsa001 ~]# gunzip --help
基本格式: gunzip [选项]... [文件]...
选项 | 说明 |
-c | 压缩时不删除源文件 |
1.使用gzip命令将/root/itheima目录下的file文件压缩
[root@rhcsa001 ~]# tree ./itheima/
./itheima/
└── file
[root@rhcsa001 ~]# gzip ./itheima/file
[root@rhcsa001 ~]# tree ./itheima/
./itheima/
└── file.gz
2.使用gzip命令压缩/root/itheima目录下的file文件但保留源文件
[root@rhcsa001 ~]# tree ./itheima/
./itheima/
└── file
[root@rhcsa001 ~]# gzip -c /root/itheima/file >> /root/itheima/file.gz
[root@rhcsa001 ~]# tree ./itheima/
./itheima/
├── file
└── file.gz
2.3.5.4-bzip2/bunzip2
只能用于压缩文件,使用bzip2压缩文件时压缩包一般命名为"文件名.bz2"
[root@rhcsa001 ~]# bzip2 --help
基本格式: bzip2 [选项] 文件
[root@rhcsa001 ~]# bunzip2 --help
基本格式: bunzip2 [选项] 压缩包
1.压缩/root/dir目录下的file文件并解压
[root@rhcsa001 ~]# bzip2 /root/dir/file
[root@rhcsa001 ~]# bunzip2 /root/dir/file.bz2
2.3.5.5-别名命令
别名是命令的快捷方式,对于需要经常执行并需要很长时间输入的长命令创建快捷方式
此命令不仅可以设置别名,也可以用来显示别名(Linux自身对于经常使用的命令进行了简化)
[root@rhcsa001 ~]# alias --help
基本格式: alias 别名='原命令 [选项] [新名称 ... ]'
注意1:这里的格式要严格按照规定,不能随意添加空格!!!
注意2:重启系统后,别名消失
1.查看"ll"命令的别名
1.使用"ll"命令的功能
[root@rhcsa001 ~]# ll
total 4
drwxr-xr-x. 2 root root 20 Oct 8 13:41 etc
-rw-r--r--. 1 root root 1028 Oct 8 13:34 passwd.tar.gz
2.查看"ll"命令别名
[root@rhcsa001 ~]# alias ll
alias ll='ls -l --color=auto'
3.使用"ll"别名命令的功能
[root@rhcsa001 ~]# ls -l --color=auto
total 4
drwxr-xr-x. 2 root root 20 Oct 8 13:41 etc
-rw-r--r--. 1 root root 1028 Oct 8 13:34 passwd.tar.gz
2.给"ls"设置别名"openlab"并使用
1.设置"ls"别名"openlab"
[root@rhcsa001 ~]# alias openlab='ls'
2.使用"openlab"命令查看目录
[root@rhcsa001 ~]# openlab
anaconda-ks.cfg Documents Music Public Videos
Desktop Downloads Pictures Templates
2.3.5.6-历史命令
用来查看用户历史使用的命令
[root@rhcsa001 ~]# history --help
基本格式: history [选项] [参数]
注意:从安全角度讲,最好不要有历史记录;否则很方便!!!
选项 | 说明 |
number | 显示最近number条历史指令 |
-c | 清空当前历史命令 |
-a [file] | 后没跟文件时,默认将缓冲区历史命令写入~/.bash_history |
-r [file] | 将历史命令文件中命令读入当前历史缓冲区 |
-w | 将当前历史命令缓冲区命令写入历史文件中 |
1.查看最近的3条历史指令
[root@rhcsa001 ~]# history 3
195 ll
196 ls
197 history 3
2.4 存储管理
Linux系统中磁盘的名称由系统根据设备类型自动识别,常用的存储设备类型有:
IDE、STAT、USB和SCSI等,其中IDE设备在Linux系统中被识别为hd,STAT、USB、SCSI设备
被识别为:sd;若系统中使用了多个同类型的设备,这些设备按照添加的顺序使用小写字母依次
编号:eg;若系统中有两个sd设备,则第一个设备名为sda,第二个设备名为sdb,以此类推。
2.4.1 磁盘分区
一块新的磁盘无法直接使用,无论是Windows系统还是Linux系统,若要使用新添加的磁盘,
都需先对磁盘进行分区;磁盘分区有利于数据的分类存储,管理员可根据磁盘中要存放的文件类型
、数量和文件大小等因素合理规划磁盘空间,以提高磁盘的使用率和读取速率,
常见的磁盘分区有两种:MBR分区和GPT分区。
2.4.1.1添加磁盘
添加一个20G的SATA类型的磁盘和一个30G的NVME类型的磁盘
注意:要添加磁盘需要先关闭虚拟机
1.关闭虚拟机,点击"编辑虚拟机设置"
2.选择"磁盘",点击"添加"
3.点击"硬盘",选择"下一步"
4.选择新增磁盘类型并配置
2.4.1.2 查看磁盘
#查看磁盘信息:
[root@localhost ~]# lsblk --help
[root@localhost ~]# lsblk -l
基本格式:lsblk [选项] [<设备> ...]
#新建磁盘前
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 9.8G 0 rom /run/media/root/RHEL-9-3-0-BaseOS-x86_64
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 18.4G 0 part
├─rhel-root 253:0 0 16.4G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
#新建磁盘后
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk #第一块SATA类型的硬盘
sr0 11:0 1 9.8G 0 rom #第一块光盘
nvme0n1 259:0 0 20G 0 disk #第一块NVME类型的硬盘
├─nvme0n1p1 259:1 0 600M 0 part #第一块NVME硬盘的第一个分区
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 18.4G 0 part
├─rhel-root 253:0 0 16.4G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:4 0 30G 0 disk #第二块NVME类型的硬盘
2.4.1.3 磁盘分区
使用磁盘之前,必须对磁盘进行分区和格式化后才可以使用:
fdisk命令默认分区格式为MBR
[root@localhost ~]# fdisk --help
基本格式:fdisk [选项] <磁盘>
fdisk [选项] -l [<磁盘>...]
1.MBR分区
MBR/主引导分区:早期磁盘采用MBR方式进行分区,磁盘中的空间以扇区为单位,采用MBR方式分区
的磁盘第一个扇区中包含一个64B的磁盘分区表,每个分区占用16B,因此分区表最多可存储4项分区
信息,也就是说,磁盘只能划分出4个主分区;即便4个分区容量总和小于磁盘总容量,也无法再为
剩余空间分区; 但事实上Windows不止有4个分区,这是因为,MBR允许在基础分区中设置一个扩展
分区,而扩展分区又可以划分为多个逻辑分区; 在MBR分区中编号1-4被预留给基础分区,逻辑分区
的编号一定从5开始(即便基础分区数量不足4个),扩展分区也有自己的磁盘分区表,扩展分区的磁盘
分区表存储于扩展分区的第一个扇区中。
总结:支持4个主分区或者3个主分区和1个扩展分区,分区空间最大支持:2.2TB
1.对SATA磁盘进行分区:3个主分区1个拓展分区1个逻辑分区
[root@localhost ~]# fdisk /dev/sda
Command (m for help):
选项 | 说明 |
m | 查看帮助信息 |
n | 新增分区 |
d | 删除分区 |
l | 列出已有的分区类型 |
t | 修改分区类型 |
p | 打印分区表 |
w | 保存分区表并退出 |
q | 退出且不保存 |
g | 创建一个空的GPT分区表 |
G | 创建一个空的SGI分区表 |
o | 创建一个空的DOS分区表 |
s | 创建一个空的SUN分区表 |
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free) #创建主分区
e extended (container for logical partitions) #创建扩展分区
选项 | 说明 |
p | 创建主分区 |
e | 创建扩展分区 |
#输入p,回车,创建主分区
Select (default p): p
#默认主分区序号为1,回车
Partition number (1-4, default 1):
#直接回车,表明当前第2048个扇区开始分区
First sector (2048-41943039, default 2048):
#指定第一个分区大小为:2G
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +2G
#成功创建了一个Linux类型的序号为1的大小为2G的磁盘分区
Created a new partition 1 of type 'Linux' and of size 2 GiB.
#创建第2和第3个主分区则重复上面操作
#创建一个空间为10G的2分区
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4196352-41943039, default 41943039): +10G
Created a new partition 2 of type 'Linux' and of size 10 GiB.
#把剩余的磁盘空间都分给3分区
Last sector, +/-sectors or +/-size{K,M,G,T,P} (25167872-41943039, default 41943039):
Created a new partition 3 of type 'Linux' and of size 8 GiB.
#w选项,对上述操作进行保存并退出!!!
Command (m for help): w
2.执行完分区操作后,使用"lsblk"命令查看磁盘分区情况
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 2G 0 part #第一块SATA硬盘的第一个分区,大小2G
├─sda2 8:2 0 10G 0 part
└─sda3 8:3 0 8G 0 part
2.GPT分区
GPT/全局唯一标识分区表:最多可支持128个分区,大小支持2.2TB到18TB,并向后兼容MBR
1.对磁盘中一个30G的NVME类型的磁盘做GPT格式分区(2个分区)
#查看要分区的磁盘
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n2 259:4 0 30G 0 disk
#对磁盘进行GPT格式分区
[root@localhost ~]# fdisk /dev/nvme0n2
Command (m for help): m
#选择g选项创建GPT分区表
Command (m for help): g
Created a new GPT disklabel (GUID: FB7005DC-BD81-6A4E-9C97-BB356C7D28B7).
#选择n选项创建分区
Command (m for help): n
Partition number (1-128, default 1): #默认分区序号:1
First sector (2048-62914526, default 2048): #直接回车
#指定第一个分区大小为15G
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914526, default 62914526): +15G
#创建了一个序号为1,空间大小为15G的磁盘分区
Created a new partition 1 of type 'Linux filesystem' and of size 15 GiB.
#创建第2个分区
Command (m for help): n
Partition number (2-128, default 2): #默认分区序号:2
First sector (31459328-62914526, default 31459328): #直接回车
#默认把剩余磁盘空间分给磁盘分区2
Last sector, +/-sectors or +/-size{K,M,G,T,P} (31459328-62914526, default 62914526):
#创建了一个序号为2,空间大小为15G的磁盘分区
Created a new partition 2 of type 'Linux filesystem' and of size 15 GiB.
Command (m for help): w #保存并退出分区表
2.查看磁盘分区情况
[root@localhost ~]# lsblk #查看磁盘分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n2 259:4 0 30G 0 disk #第二块NVME磁盘
├─nvme0n2p1 259:7 0 15G 0 part #第二块NVME磁盘的第一个分区
└─nvme0n2p2 259:8 0 15G 0 part #第二块NVME磁盘的第二个分区
2.4.2 分区格式化
磁盘给待存储的数据以硬件支持,但磁盘本身并不规定文件的存储方式,因此在使用磁盘之前,还需
规定文件在磁盘中的组织方式,即格式化磁盘,为磁盘创建文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(告诉磁盘可以用了)
不同的操作系统,对磁盘进行格式化后所体现的文件系统类型不一样
Windows:fat(不支持大于4G的文件)、NTFS(Windows7后默认格式)
Linux:ext系统格式(ext3,ext4)、xfs
#对分区进行格式化
[root@localhost ~]# mkfs --help
基本格式:mkfs [选项] <设备>
#使用blkid命令来查看分区ID号
[root@localhost ~]# blkid --help
基本格式:blkid
选项 | 说明 |
-t 文件系统类型 | 指定格式化文件系统类型 |
mkfs -t ext4 = mkfs.ext4 | mkfs -t xfs = mkfs.xfs |
-c | 建立文件系统前先检查坏块 |
-V | 输出建立的文件系统的详细信息 |
1.对/dev/sda1、/dev/sda2、/dev/sda3进行格式化
#格式化/dev/sda1为ext4文件系统类型
[root@localhost ~]# mkfs.ext4 /dev/sda1
#格式化/dev/sda2为xfs文件系统类型
[root@localhost ~]# mkfs.xfs /dev/sda2
#格式化/dev/sda3为xfs文件系统类型
[root@localhost ~]# mkfs.xfs /dev/sda3
2.查看分区ID
[root@localhost ~]# blkid
/dev/sda2: UUID="600d28-1ccc-4343-9519-3163" TYPE="xfs" PARTUUID="c6b93419-02"
/dev/sda3: UUID="df0ded-7069-4e6d-9fa5-348e" TYPE="xfs" PARTUUID="c6b93419-03"
/dev/sda1: UUID="3417c7-90c7-4075-ba56-d042" TYPE="ext4" PARTUUID="c6b93419-01"
2.4.3 挂载
在Windows系统中,磁盘分区后就可以直接使用,但Linux系统的磁盘不但需要进行分区、格式化操作
还需要经过挂载,才能被使用;
所谓挂载,是指将一个目录作为入口,把磁盘分区中的数据放置在以该目录为根节点的目录关系树中
,这相当于将文件系统与磁盘进行了链接,指定了某个分区中文件系统访问的位置;
Linux系统中根目录是整个磁盘访问的基点,因此根目录必须挂载到某个分区,Linux系统中通过:
mount、unmount实现分区的挂载和卸载。
1.挂载
[root@localhost ~]# mount --help
基本格式:mount [选项] 设备 挂载点/目录
上述挂载方式是临时的,系统重启后还需重新挂载,如果希望永久生效需要修改/etc/fstab文件
[root@localhost ~]# vi /etc/fstab
/dev/sda1 /mnt/mount1 xfs defaults 0 0
分区 挂载点 格式类型 默认设置
选项 | 说明 |
-t | 指定待挂载设备的文件系统类型 |
-o | 指定设备的挂载方式 |
常见的文件系统类型:
ISO9660:光盘/光盘镜像
NFS:文件网络共享
常用的挂载方式:
ro:采用只读的方式进行挂载
rw:采用读写的方式进行挂载
loop:将一个文件视为硬盘分区挂载到系统
1.把/dev/sda1分区挂载到/root/guazai目录下(目标挂载目录必须存在)
#创建目标挂载目录
[root@localhost ~]# mkdir -p ./guazai{1..3}
#把磁盘分区/设备挂载到目标挂载点
[root@localhost ~]# mount /dev/sda1 guazai1
[root@localhost ~]# mount /dev/sda2 guazai2
[root@localhost ~]# mount /dev/sda3 guazai3
2.查看磁盘空间
1.df命令
[root@localhost ~]# df --help
基本格式: df [选项]... [文件]...
#查看/dev/sda1设备的磁盘分区情况
[root@localhost ~]# df -h /dev/sda1
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 2.0G 24K 1.8G 1% /root/guazai1
#查看所有设备的磁盘分区情况
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 866M 0 866M 0% /dev/shm
tmpfs 347M 11M 337M 3% /run
/dev/mapper/rhel-root 17G 4.6G 12G 28% /
/dev/nvme0n1p2 960M 293M 668M 31% /boot
/dev/nvme0n1p1 599M 7.0M 592M 2% /boot/efi
tmpfs 174M 104K 174M 1% /run/user/0
/dev/sr0 9.9G 9.9G 0 100% /run/media/root
/dev/sda1 2.0G 24K 1.8G 1% /root/guazai1
/dev/sda2 10G 104M 9.9G 2% /root/guazai2
/dev/sda3 8.0G 89M 7.9G 2% /root/guazai3
2.du命令
[root@localhost ~]# du --help
基本格式: du [选项]... [文件]...
#使用du命令查看设备/dev/sda1空间使用情况
[root@localhost ~]# du -h /dev/sda1
0 /dev/sda1
3.卸载
[root@localhost ~]# umount --help
基本格式:umount [选项] <设备>
将挂载的设备/dev/sda1、/dev/sda2、/dev/sda3卸载掉
[root@localhost ~]# umount /dev/sda1
[root@localhost ~]# umount /dev/sda2
[root@localhost ~]# umount /dev/sda3
2.4.4 LVM逻辑卷管理
按照传统方式管理磁盘、为磁盘分区时,难以精确地评估和分配磁盘各个分区的容量,极易造成
磁盘空间不足或空间过剩的问题;
为了解决此类问题人们提出了LVM/逻辑卷管理机制,逻辑卷管理机制是Linux系统管理磁盘分区的
一种机制,它建立在磁盘和分区之上,可以帮助管理员动态的管理磁盘,提高磁盘分区管理的灵活性
LVM机制弱化了磁盘分区的概念,它首先将多个物理卷连接为一个整块的卷组,管理员可以设置卷组
的存储单位(PE/物理长度,默认为:4MB),之后管理员可以在卷组上随意创建逻辑卷组,并进一步在
逻辑卷组上创建文件系统(分区格式化)
LVM允许管理员调整存储卷组的大小,并按逻辑卷组进行命名、管理和分配,当系统中添加新的磁盘
后,管理员不必将原有的文件移动到新的磁盘,只需直接扩展文件系统容量即可使用新的磁盘。
逻辑卷组成部分:
1.物理设备:一般指的是系统存储设备,如:/dev/sda1、/dev/sda2等
2.物理卷(physical volume, PV):它是由多个分区或整个硬盘组成
3.卷组(Volume Group,VG):它可以看成单独的逻辑磁盘,一个卷组中至少包括一个PV
在卷组创建好后,可以动态添加PV到卷组中
4.逻辑卷(Logical Volume,LV):相当于物理分区,它是建立在卷组之上
2.4.4.1 部署逻辑卷
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
部署逻辑卷步骤:
1.前提工作(可选)
#1.删除挂载信息
[root@localhost ~]# umount /dev/sda1
[root@localhost ~]# umount /dev/sda2
[root@localhost ~]# umount /dev/sda3
#2.删除分区信息
[root@localhost ~]# fdisk /dev/sda
Command (m for help): d
Partition number (1-3, default 3): 1 #删除分区1
Command (m for help): d
Partition number (2,3, default 3): 2 #删除分区2
Command (m for help): d
Selected partition 3 #默认删除分区3
Command (m for help): w #保存操作
#nvme0n2同
[root@localhost ~]# fdisk /dev/nvme0n2
Command (m for help): d
Partition number (1,2, default 2): 1
Command (m for help): d
Selected partition 2
Command (m for help): w
#查看磁盘分区情况
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
nvme0n2 259:4 0 30G 0 disk
2.用/dev/sda和/dev/nvme0n2来做逻辑卷
1.物理卷管理
#使用pvcreate命令创建物理卷
[root@localhost ~]# pvcreate /dev/sda
Physical volume "/dev/sda" successfully created.
[root@localhost ~]# pvcreate /dev/nvme0n2
Physical volume "/dev/nvme0n2" successfully created.
#查看物理卷信息
[root@localhost ~]# pvs #简略信息
[root@localhost ~]# pvdisplay #详细信息
#删除物理卷信息
[root@localhost ~]# pvremove /dev/nvme0n2
Labels on physical volume "/dev/nvme0n2" successfully wiped.
[root@localhost ~]# pvremove /dev/sda
Labels on physical volume "/dev/sda" successfully wiped.
2.卷组管理
#使用vgcreat命令创建卷组
[root@localhost ~]# vgcreate --help
基本格式:vgcreate 卷组名称 物理卷
[root@localhost ~]# vgcreate my_vg /dev/sda
#查看卷组
[root@localhost ~]# vgs #简略查看
[root@localhost ~]# vgdisplay #详细查看
3.逻辑卷管理
#使用lvcreate命令创建逻辑卷
[root@localhost ~]# lvcreate --help
基本格式:lvcreate -n 逻辑卷名称 -L 逻辑卷大小 卷组名称
[root@localhost ~]# lvcreate -n my_lv -L 10G my_vg
WARNING: ext4 signature detected on /dev/my_vg/my_lv ? [y/n]: y
Wiping ext4 signature on /dev/my_vg/my_lv.
Logical volume "my_lv" created.
#查看逻辑卷信息
[root@localhost ~]# lvs #简略查看
[root@localhost ~]# lvdisplay #详细查看
4.逻辑卷格式化
#将逻辑卷格式化为:xfs类型的文件系统
#利用lvdisplay查看逻辑卷路径
LV Path /dev/my_vg/my_lv
LV Name my_lv
#对逻辑卷进行格式化
[root@localhost ~]# mkfs.xfs /dev/my_vg/my_lv
5.挂载
#将格式化好的逻辑卷挂载到/mnt/mount1目录上(前提存在)
[root@localhost ~]# mount /dev/my_vg/my_lv /mnt/mount1/
#查看挂载是否成功
[root@localhost ~]# mount /dev/my_vg/my_lv /mnt/mount1/
[root@localhost ~]# cp /etc/passwd /mnt/mount1/
[root@localhost ~]# cat /mnt/mount1/passwd |head -3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
6.删除逻辑卷
#删除挂载
#使用df -h命令查看挂载点
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv 10G 104M 9.9G 2% /mnt/mount1
[root@localhost ~]# umount /mnt/mount1 #挂载点
or
[root@localhost ~]# umount /dev/mapper/my_vg-my_lv #设备
#删除逻辑卷
[root@localhost ~]# lvremove /dev/my_vg/my_lv
Do you really want to remove active logical volume my_vg/my_lv? [y/n]: y
Logical volume "my_lv" successfully removed.
#删除卷组
[root@localhost ~]# vgremove my_vg
Volume group "my_vg" successfully removed
#删除物理卷
[root@localhost ~]# pvremove /dev/nvme0n2
Labels on physical volume "/dev/nvme0n2" successfully wiped.
2.4.4.2 交换分区管理
为了解决CPU处理速度过快而磁盘反应过慢的问题,Linux在运行程序时,先将这个程序读入到
内存中以便CPU能够快速读取;
在这个过程中,并不是所有的程序都是常用的,我们将常用的程序加载到内存,而将不常用的程序放到
swap(交换空间),交换空间是硬盘(磁盘)划分出来的一小块区域,这个区域的大小可以是物理内存
的2~4倍,一般我们指定为 2G 即可,因为此部分基本不会用到。
交换分区管理也有相应命令
mkswap 分区设备名:将指定的分区格式化为swap(交换分区)
swapon 交换分区设备名:启用指定的交换分区
swapoff 交换分区设备名:禁用指定的交换分区
swapon -s:查看交换分区的使用情况
free -m:以兆字节为单位显示物理内存、交换分区的使用情况
1.查看当前交换分区使用情况
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 72704 -2
2.以兆字节为单位显示物理分区和交换分区的使用情况
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1731 1296 133 14 465 434
Swap: 2047 68 1979
2.4.5 RAID磁盘阵列
2.4.6 创建RAID
2.5 进程管理
进程是一个二进制程序的执行过程,在Linux操作系统中,向命令行输入一条命令,按回车键,
便会有一个进程被启动;进程存在于计算机的内存中,计算机内存中可同时存在多个进程,每个CPU
上同时只会执行一个进程,但计算机上似乎能够同时运行多个进程,这是因为计算机采用了"多道程序
设计"技术:
多道程序设计技术:计算机允许多个相互独立的程序同时进入内存,在内核的管理控制下,会将CPU
整个生命周期划分为长度相同的时间片,在每个CPU时间片内只处理一个进程(多个进程分时使用CPU
eg:ABCABC)
虽然CPU每个时间片只能处理一个进程,但CPU划分的每个时间片是非常微小的,且当下CPU运行
速度极快,因此在宏观上可以认为计算机能并发执行多个程序,处理多个进程。
2.5.1 进程状态
2.5.2 运行程序
#1.安装httpd包
[root@localhost ~]# yum -y install httpd
#2.查看httpd协议运行状态
[root@localhost ~]# systemctl status httpd
#3.启动httpd服务
[root@localhost ~]# systemctl start httpd
#4.停止httpd服务
[root@localhost ~]# systemctl stop httpd
#5.将httpd服务加入到开机启动列表
[root@localhost ~]# systemctl enable --now httpd
#6.将httpd服务从开机列表中删除
[root@localhost ~]# systemctl disable --now httpd
#7.重启httpd服务
[root@localhost ~]# systemctl restart httpd
2.5.3 查看程序
1-ps
查看当前系统中正在运行的系统
[root@localhost ~]# ps --help
基本格式:ps [选项]
选项 | 说明 |
-a | 显示所有用户的进程 |
-u | 显示用户名和启动时间 |
-x | 显示没有控制终端的进程 |
-e | 显示所有进程(包括没有控制终端的进程) |
-l | 长格式显示 |
-w | 宽行显示,可以使用多个w进行加宽显示 |
-f | 完整输出 |
-aux | 常用的选项 |
#查看当前用户的进程
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TIME CMD
4 S 0 2722 2715 0 80 0 - 128293 do_pol tty2 00:00:00 gnome-session-b
4 R 0 4415 3316 0 80 0 - 56371 - pts/0 00:00:00 ps
F/flag:代表这个程序的标志;4表示此程序的权限为root,1表示此子程序仅进行复制而没有实际执行
S/status:代表这个程序的状态;
-R/run表示运行状态
-S/sleep表示休眠状态
-D表示不可唤醒状态
-T/stop表示停止状态
-Z/zombie表示僵尸状态
-+表示一个进程组
UTD/PID/PPID:用户ID、进程ID、进程的父ID
C:表示CPU使用率,单位是百分比
PRI/NI:进程优先级
ADDR/SZ/WCHAN:与内存相关,ADDR是内核、SZ内存使用多少、WCHAN表示是否在运行中
TTY:终端信息
TIME:使用的CPU时间
CMD:触发此进程的指令
常用进程选项解析:
[root@localhost ~]# ps -aux |head -2
\USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 16:34 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 16:34 0:00 [rcu_gp]
USER:进行进程的用户
PID:进程号
%CPU:CPU占用率
%MEM:内存占用率
VSZ:占用虚拟内存情况
RSS:占用实际内存情况(它需要驻留内存)
TTY:进程运行的终端
STAT:进程状态
S:可中断的睡眠
I:以线程运行方式运行
s:进程的领导者,即父进程
R:运行
D:不可中断的睡眠
T:停止
START:进程的启动时间
TIME:进程占用CPU总时间
COMMAND:触发进程的命令
查看指定进程的PID
#1.使用pgrep命令
[root@localhost ~]# pgrep httpd
4039 4041 4042 4043 4044
#2.使用pidof命令
[root@localhost ~]# pidof httpd
4044 4043 4042 4041 4039
2-top
ps命令执行后,会显示执行命令那一刻系统中进程的相关信息;top命令可以使进程信息动态显示
[root@localhost ~]# top --help
基本格式:top 选项
选项 | 说明 |
-d [数字] | 整个进程界面更新的秒数,默认5秒 |
-b | 以批次的方式来执行,通常搭配数据流、重定向将批次处理的结果输出到指定文件中 |
-n | 与-b搭配,进行几次top输出的结果 |
-i | 忽略闲置或僵死的进程 |
-c | 显示进程整个命令路径,而不是只显示命令名称 |
-s | 使top命令在安全模式下运行 |
-p | 指定pid进行查看 |
1.通过top命令查看进程,每隔3秒刷新一次
[root@localhost ~]# top -d 3
top输出可分为:统计信息区和进程信息区
统计信息区:
top - 19:26:36 up 18 min, 2 users, load average: 0.03, 0.01, 0.00
第一行为任务队列信息:
19:26:36,表示当前时间
up 18min,表示进程运行时间
2 users,表示登录用户树
load average,表示系统1分钟、5分钟、15分钟到现在的平均负载
Tasks: 326 total, 1 running, 325 sleeping, 0 stopped, 0 zombie
第二行为任务信息:
326 total,表示进程总数(一共有326个进程)
1 running,表示正在运行的进程数
325 sleeping,表示处于休眠的进程数
0 stopped,表示处于停滞的进程数
0 zombie,表示处于僵尸状态的进程数
%Cpu(s): 0.8 us, 1.3 sy, 0.0 ni, 97.4 id, 0.0 wa, 0.5 hi, 0.1 si, 0.0 st
第三行为CPU的占用信息:
0.8 us,表示用户进程占用CPU的百分比
1.3 sy,表示系统进程占用CPU的百分比
0.0 ni,表示用户进程空间内改变过优先级的进程占用CPU的百分比
97.4 id,表示空闲CPU占用百分比
0.0 wa,表示等待输入/输出的进程占用CPU百分比
0.5 hi,表示CPU服务用于硬件中断所耗费的时间总额
0.1 si,表示CPU服务于软件中断所耗费的时间总额
0.0 st,表示虚拟机被hypervisor偷去的CPU时间
MiB Mem : 1731.7 total, 127.0 free, 1302.4 used, 467.6 buff/cache
第四行为内存使用情况:
1731.7 total,表示总的内存大小(字节)
127.0 free,表示空闲/可用内存大小
1302.4 used,表示被占用/已使用内存大小
467.6 buff/cache 缓存大小
MiB Swap: 2048.0 total, 1937.2 free, 110.8 used. 429.3 avail Mem
第五行为交换空间使用情况:
2048.0 total,表示总的交换空间大小
1937.2 free,表示空闲交换空间大小
110.8 used,表示被占用的交换空间大小
429.3 avail Mem,表示
进程信息区:
显示每个进程运行状态,这些状态的字段含义与ps相同
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2714 root 20 0 271288 38396 7572 S 0.3 2.2 0:00.25 sssd_kcm
2768 root 20 0 535112 36412 29432 S 0.3 2.1 0:00.30 vmtoolsd
PTD:进程ID
USER:进程所有者的用户名
PR:进程优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位:KB
RES:进程使用的物理内存大小,单位:KB
SHR:共享内存大小,单位:KB
S:进程状态
D表示不可中断睡眠状态
R表示正在运行状态
S表示可中断睡眠状态
T表示跟踪/停止的状态
Z表示僵尸进程
%CPU:内存占用百分比
%MEM:进程占用的物理内存百分比
TIME+:进程总共使用的CPU时间,单位1/100秒
COMMAND:正在运行的进程命令或命令路径
2.5.4 终止进程
一般使用kill命令来终止进程
[root@localhost ~]# kill --help
基本格式为:
kill -9 进程ID
or
killall #用来终止所有进程
or
killall 程序名称 #用来终止指定程序
选项 | 说明 |
-l | 查看所有可列出的支持信号 |
1.查看当前所有支持信号
[root@localhost ~]# kill -l
在实际使用中,用的最多的就是信号9,用以强制中断进程
1) SIGHUP #重新加载配置
2) SIGINT #键盘中断==^C
3) SIGQUIT #键盘退出
9) SIGKILL #强制中断
15) SIGTERM #终止(正常结束),缺省信号
18) SIGCONT #继续
19) SIGSTOP #停止
20) SIGTSTP #暂停
2.终止vim进程(killall命令)
[root@localhost ~]# killall vim
前提是先打开另一个终端来执行vim命令
3.终止httpd进程(进程ID)
#为保证httpd进程在运行,先打开httpd进程
[root@localhost ~]# systemctl start httpd
#使用ps命令查看httpd进程号
[root@localhost ~]# ps -ef |grep httpd
root 1362 1 0 12:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
#使用kill命令强制关闭httpd进程
[root@localhost ~]# kill -9 1362
#查看httpd进程状态-发现已经关闭了
[root@localhost ~]# systemctl status httpd
2.5.5 进程转换
进程转换通常是把前台进程转换为后台进程or后台进程转换为前台进程
1.前台进程转换为后台进程
#休眠系统3秒
[root@localhost ~]# sleep 3
#在休眠命令后加上 &,可以把前台进程转换为后台进程
[root@localhost ~]# sleep 3 &
[1] 3901
#可以通过:Ctrl+Z将前台进程转换为后台进程
[root@localhost ~]# sleep 3
^Z[4]
Done sleep 3
2.查看后台进程需要使用jobs命令
2.6 服务管理
2.7 软件包管理
Linux提供了软件包的集中管理机制,该机制将软件以包的形式存储在仓库中,方便用户搜索、安装
和管理软件包;软件包的管理不仅包括软件包的安装,还包含软件包的升级、卸载与更新;
Linux系统中常用的两种软件包管理工具为:RPM和YUM。
2.7.1 软件安装
在Linux中安装软件有以下三种方式:
1.源码安装 2.rpm包安装 3.yum/dnf安装
2.7.1.1 源码安装
#任务:在虚拟机中安装tree命令
#前提:删除虚拟机中原有的tree命令
[root@localhost ~]# dnf remove tree -y -y表示不提示
1.把桌面准备好的压缩文件(tar)直接拉入Xshell中,如图所示:
2.创建/root/text目录并将压缩文件放置其中
[root@localhost ~]# mkdir -p /root/text
[root@localhost ~]# mv tree-2.0.4.tgz ./text/
3.对压缩文件进行解压缩
[root@localhost text]# tar -xvf tree-2.0.4.tgz
[root@localhost text]# cd tree-2.0.4/ #进入解压缩的文件
4.安装tree-2.0.4软件
4.1由于程序是使用C语言编写的,在进行源码安装时需要先进行编译,而编译C语言需要相应环境
,因此我们需先安装C语言的编译环境:
[root@localhost tree-2.0.4]# dnf install -y make gcc*
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscrip
tion-manager to register.
Error: There are no enabled repositories in "/etc/yum.repos.d", "/etc/yum/repos
.d", "/etc/distro.repos.d".
4.2出现上述错误是告诉我们,没有仓库地址,我们先创建/配置一个仓库:
#进入/etc/yum.repos.d文件
[root@localhost tree-2.0.4]# cd /etc/yum.repos.d
#创建一个新的仓库
[root@localhost yum.repos.d]# vi base.repo
[base] #名称,整个文件唯一
name = base #仓库名称,一般同上
baseurl = /mnt/BaseOS #仓库对应的地址
gpgcheck = 0 #是否需要校验:0表示不校验;1表示需要校验(需指定文件校验地址)
[app]
name = app
baseurl = /mnt/AppStream
gpgcheck = 0
#把光盘挂载到/mnt目录下(一次性):
[root@localhost yum.repos.d]# mount /dev/sr0 /mnt
#可以修改/etc/fstab文件,使其自动挂载
[root@localhost yum.repos.d]# vi /etc/fstab
/dev/sr0 /mnt iso9660 defaults 0 0
4.3创建好仓库后,再次执行环境安装命令
[root@localhost yum.repos.d]# dnf install -y make gcc*
4.4安装软件
#回到解压目录进行操作
[root@localhost ~]# cd /root/text/tree-2.0.4/
#执行make命令进行编译
[root@localhost tree-2.0.4]# make
#执行make install命令进行安装
[root@localhost tree-2.0.4]# make install
#清空哈希表
[root@localhost tree-2.0.4]# hash -r
#验证:执行tree命令
[root@localhost ~]# tree
.
└── text
├── tree-2.0.4
源码安装总结:
1.需要有C语言编译环境
1.配置本地仓库,需在/etc/yum.repos.d/目录下创建文件,eg:base.repo,在这个文件中配置:
BaseOS和AppStream路径
2.挂载光盘
3.安装环境:执行dnf install -y make gcc*
2.源码安装
1.在解压目录下执行make命令进行编译
2.在解压目录下执行make install来进行安装
3.执行hash -r 命令清空哈希表
2.7.1.2 rpm安装
由Red Hat公司开发的一种软件包管理工具,功能强大、广受欢迎、应用广泛;
RPM软件包分为两种:二进制包与源码包;
二进制包中封装的是编译后生成的可执行文件,类似于Windows操作系统下的.exe文件,此种软件包
可使用rpm命令直接安装;
源码包中封装的是源代码,安装前需先安装源码包以生成源码,再对源码进行编译生成后缀为.rpm的
RPM包,之后才能安装软件本身。
RPM软件包典型命名格式:
软件名-版本号-发行号.操作系统版本.硬件平台类型.rpm
eg:zsh-5.0.2-14.el9.x86_64.rpm
zsh:软件名 -5:主版本号 0:次版本号 2:修订号
14:软件发布次数 el9:发行商RHEL9 x86:CPU架构平台 64:支持系统位数
[root@localhost ~]# rpm --help
基本格式: rpm [选项...]
选项 | 说明 |
-i | 安装 |
-e | 删除 |
-u | 更新 |
-q | 查询 |
--nodeps | 不验证软件包依赖 |
-v | 提供更多的详细信息输出 |
下面我们以安装qq软件为例来演示rpm软件包的操作
#前提是有库文件!!!
#下载QQrpm链接
[root@localhost ~]# wget https://dldir1.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.13_241023_x86_64_01.rpm
#安装软件包
[root@localhost ~]# ll
-rw-r--r--. 1 root root 151655168 Oct 24 21:16 QQ_3.2.13_241023_x86_64_01.rpm
[root@localhost ~]# rpm -i QQ_3.2.13_241023_x86_64_01.rpm
error: Failed dependencies:
libXScrnSaver is needed by linuxqq-3.2.13_28971-1.x86_64
#安装失败提示:安装linuxqq-3.2.13_28971-1.x86_64需要先安装libXScrnSaver
#查找所需安装文件路径:
[root@localhost ~]# find /mnt -name "libXScrnSaver*"
/mnt/AppStream/Packages/libXScrnSaver-1.2.3-10.el9.i686.rpm
/mnt/AppStream/Packages/libXScrnSaver-1.2.3-10.el9.x86_64.rpm
/mnt/AppStream/Packages/libXScrnSaver-devel-1.2.3-10.el9.i686.rpm
/mnt/AppStream/Packages/libXScrnSaver-devel-1.2.3-10.el9.x86_64.rpm
#安装所需文件
[root@localhost ~]# rpm -ivh /mnt/AppStream/Packages/libXScrnSaver-1.2.3-10.el9.x86_64.rpm
#安装好依赖软件后,再安装QQ
[root@localhost ~]# rpm -ivh QQ_3.2.13_241023_x86_64_01.rpm
#此时安装成功
Verifying... ############################# [100%]
Preparing... ############################# [100%]
Updating / installing...
1:linuxqq-3.2.13_28971-1 ############################# [100%]
#查看QQ安装路径
[root@localhost ~]# rpm -ql linuxqq
#卸载QQ
[root@localhost ~]# rpm -evh linuxqq
我们再以cmatrix小软件为例:
#前提
在浏览器输入:rpmfind.net
在网站搜索栏输入:cmatrix
#下载软件包
[root@localhost ~]# wget https://rpmfind.net/linux/fedora/linux/development/rawhide/Everything/aarch64/os/Packages/c/cmatrix-2.0-10.fc41.aarch64.rpm
[root@localhost ~]# ll
-rw-r--r--. 1 root root 40207 Aug 9 05:22 cmatrix-2.0-10.fc41.aarch64.rpm
#安装软件包
[root@localhost ~]# rpm -ivh cmatrix-2.0-10.fc41.aarch64.rpm
warning: cmatrix-2.0-10.fc41.aarch64.rpm: Header V4 RSA/SHA256 Signature, key ID 105ef944: NOKEY
error: Failed dependencies:
ld-linux-aarch64.so.1()(64bit) is needed by cmatrix-2.0-10.fc41.aarch64
ld-linux-aarch64.so.1(GLIBC_2.17)(64bit) is needed by cmatrix-2.0-10.fc41.aarch64
libc.so.6(GLIBC_ABI_DT_RELR)(64bit) is needed by cmatrix-2.0-10.fc41.aarch64
#出现错误,我们需要先下载依赖库
2.7.1.3 yum/dnf安装
与RPM相比,YUM最大的优势是可以自动处理软件包之间的依赖关系!!!
dnf是加强版的yum,yum目前作为dnf的软链接,但依然可用
[root@localhost ~]# yum --help
[root@localhost ~]# dnf --help
基本格式:yum 选项 命令 软件包
常用选项:-y 表示安装过程中默认肯定回答,不必再一一确认
命令 | 说明 |
install | 安装 |
remove | 卸载 |
#yum/dnf命令方法
yum repolist [all] # 查看系统中 yum 的资源配置信息
yum list all # 列出仓库里可安装的软件包
yum list installed [包名] # 列出已经安装的软件
yum info 包名 # 查看指定软件包的详细信息
yum grouplist # 查看仓库中所有包组
yum groupinfo 包组名 #查看指定包组的信息
yum install [-y] 包名 # 安装指定的包
yum update [-y] 包名 # 更新指定的包
yum groupinstall 组名 # 安装指定的组名包
yum remove [-y] 包名 # 删除指定的包名
yum provides 包名 # 查找指定的包名是由哪个提供的
yum search 包名 # 查看包名在哪个软件中
yum clean packages all # 清除下载到本机的指定的软件包或yum的缓存文件
下面我们以安装httpd服务来演示
#前提:确保本地仓库或网络仓库可用(挂载)
#1.安装httpd服务软件
[root@localhost ~]# dnf -y install httpd
#2.启动服务
[root@localhost ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
#3.关闭防火墙
#查看防火墙状态
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# systemctl stop firewalld
#4.在浏览器输入:http://虚拟机IP
#5.如果执行操作4之后没有出现如下界面,则还需执行以下操作查看selinux是否关闭--关闭
[root@localhost ~]# getenforce
Enforcing #没关闭
[root@localhost ~]# setenforce 0 #关闭selinux;1为开启
[root@localhost ~]# getenforce
Permissive
上面是查看系统测试页面,我们还可以把显示的页面变成自己的页面
#进入到页面所在目录
[root@localhost ~]# cd /var/www/html
#创建一个首页页面文件并输入显示内容
[root@localhost html]# echo welcome to my http!!! > index.html
#刷新页面
1.配置本地仓库/本地源
#1.创建库文件
[root@localhost ~]# vi /etc/yum.repos.d/bath.repo
[bath]
name = bath
baseurl = /mnt/BaseOS
gpgcheck = 0
[app]
name = app
baseurl = /mnt/AppStream
gpgcheck = 0
#2.临时or永久性挂载
[root@localhost ~]# mount /dev/sr0 /mnt #临时挂载
[root@localhost ~]# vi /etc/fstab #永久性挂载
/dev/sr0 /mnt iso9660 defaults 0 0
2.配置网络仓库/网络源
建立网络源(Redhat9暂时无公开的网络源,暂不可配置,其他发行版本可自行选择对应网源仓库)
- 阿里云网络源,aliyun的镜像站点为:https://mirrors.aliyun.com/
- 清华源镜像站点为:https://mirrors.tuna.tsinghua.edu.cn/
- 中国科技大学镜像站点:https://mirrors.ustc.edu.cn/
- 网易开源镜像站:http://mirrors.163.com/
配置网络仓库前提工作:
#查看内核/发行版本(以便选择相应的仓库)
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
配置阿里云网络仓库/网络源
#1.进入存储/etc/yum.repos.d目录创建网络库文件并对其进行配置
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# vi aliyun.repo
[baseOS]
name = baseOS
baseurl =https://mirrors.aliyun.com/redhat/rhel/rhel-9-beta/baseos/x86_64/
gpgcheck = 0
[appStream]
name = appStream
baseurl = https://mirrors.aliyun.com/redhat/rhel/rhel-9-beta/appstream/x86_64/
gpgcheck = 0
资源定位符来源
1.在浏览器输入阿里云网络地址:https://mirrors.aliyun.com/
2.选择redhat--下载地址--rhel/--rhel9-beta/--
#3.baseOS选择baseOS/--x86_64/--复制网址
#4.appStream选择appStream/--x86_64/--复制网址
配置好网络仓库后进行测试:
#下载成功则表示网络库安装完成
[root@localhost ~]# dnf -y install bind
2.8 文本编辑器
2.8.1 数据流
对于数据流来说:
可分为标准输入、标准输出和标准错误输出
1.标准输入/stdin:指从键盘获取到的输入内容,代码为0
2.标准输出/stdout:指命令执行后把正确的信息输出在屏幕上,代码为1
3.标准错误输出:指命令执行失败后将错误信息输出到屏幕上,代码为2
2.8.2 重定向
重定向也通常称为重定向操作符
在Linux中重定向操作符有以下几种:
1.输出重定向操作符:> >>
2.输入重定向操作符:< <<
(箭头指向谁表示向谁输出内容)
>:覆盖添加 >>:追加添加
利用重定向的方式创建文件:
[root@rhcsa001 ~]# echo 123456 >>/root/itheima/file1
[root@rhcsa001 ~]# cat ./itheima/file1
123456
2.8.3 vi/vim编辑器
vi编辑器是Linux中最常用的文本编辑器,工作在字符模式下由于不使用图形界面,vi的工作效率
非常高,且它在系统和服务管理中的功能是其他带图形界面的编辑器无法比拟的
[root@rhcsa001 ~]# vi --help
基本格式: vim [文件 ..]
vi编辑器共有三种工作模式:命令模式、插入模式、底行模式
三种模式可以相互转换:
2.8.3.1-命令模式
命令模式:使用vi编辑器打开文件后默认进入命令模式;在该模式下可通过键盘控制光标的移动
实现光标移动和文本内容的复制、粘贴、删除等操作
1.光标移动
级别 | 按键 | 说明 |
字符级 | 上下左右键 | 光标向上下左右移动 |
行级 | 符号 $ | 光标移动到行尾 |
符号 ^ / 数字 0 | 光标移动到行首 | |
单词级 | 字母 w | 光标移动到下个单词的首字母 |
字母 b | 光标移动到本单词的首字母 | |
字母 e | 光标移动到本单词的尾字母 | |
文档级 | 字母 gg | 光标移动到文档首行 |
数字n+字母 gg / G | 光标移动到文档的第n行 | |
字母 G | 光标移动到文档尾行 | |
屏幕级 | 字母 H | 光标移至屏幕首部 |
字母 L | 光标移至屏幕尾部 |
2.复制和粘贴
按键 | 说明 |
字母 yy | 复制本行内容 *** |
数字n + 字母 yy | 复制光标所在行及后面的共n行 |
字母 p | 在光标处粘贴所复制的内容 *** |
3.删除
按键 | 说明 |
字母 dd | 删除光标所在行*** |
数字n +字母 dd | 删除包含光标所在行在内的后n行 |
字母 d + $ | 删除光标位置到行尾的所有内容 |
字母 d + gg | 删除光标位置到开头 |
字母 d + G | 删除光标位置到结尾 |
4.其他操作
按键 | 说明 |
字母 u | 撤销命令 *** |
字母 . | 重复执行上次命令 |
字母 J | 合并两行内容 |
2.8.3.2-插入模式
只有在插入模式下才能对文件内容进行修改操作,插入模式与底行模式之间不能直接转换
使用:可以输入以下字母由命令模式进入插入模式;
按Esc键可以从插入模式返回命令模式
操作符 | 说明 |
字母 i | 在光标前衣卫插入 *** |
字母 o | 在光标所在行的下一行插入 *** |
字母 O | 在光标所在行的上一行插入 |
字母 a | 在光标后一位插入 |
字母 A | 在光标所在行末尾插入 |
字母 I | 在光标所在行行首插入 |
字母 s | 删除光标所在字母 |
字母 S | 删除光标所在行 |
2.8.3.3-底行模式
底行模式可以对文件进行保存、查找和退出编译器等操作
使用:在命令模式下输入" : "或" / "进入底行模式
按Esc键可以从底行模式返回命令模式
操作 | 说明 |
:set nu | 设置行号(仅对本次操作有效) |
:set nonu | 取消行号(仅对本次操作有效) |
:n | 使光标移动到第n行 |
:/keyword | 用于关键字搜索(n向后搜索,N向前搜索) |
1.对/root/itheima/passwd文件设置行号
设置行号
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
:set nu
2.对/root/itheima/passwd文件关键字"root"进行查询
:/root
按键-n:向后一位查询关键字
按键-N:向前一位查询关键字
:noh取消高亮
底行模式还可以进行内容替换
操作 | 说明 |
:s/被替换内容/替换内容/ | 替换光标所在行的第一个目标 |
:s/被替换内容/替换内容/g | 替换光标所在行的全部目标 |
:%s/被替换内容/替换内容/g | 替换整个文档中的全部目标 |
:%s/被替换内容/替换内容/ge | 替换光标所在行的第一个目标, 且每替换一个内容都有相应提示 |
1.替换/root/itheima/passwd文件中的所有"root"为"openlab"
:%s/root/openlab/g
操作完毕后,如要保存文件或退出编辑器可先使用Esc进入底行模式并进行以下操作
操作符 | 说明 |
:q | 退出vi编辑器 |
:w :w 文件路径 | 保存编辑后的内容 将文件保存到新的路径下 |
:r 文件路径 | 用于将指定文件导入到当前文件光标所在 |
:wq | 保存并退出vi编辑器 |
:q! | 强行退出vi编辑器,不保存对文件的修改 |
:wq! | 强行保存文件并退出vi编辑器 |
快捷键:Shift + z + z | 保存并退出 |
1.将/root/itheima/passwd添加内容后保存到/root/passwd中
1.查看/root 此时还没有/root/passwd文件
[root@rhcsa001 ~]# ls
anaconda-ks.cfg dir01 Documents itheima Pictures Templates
Desktop dir02 Downloads Music Public Videos
2.使用vim编辑/root/itheima/passwd文件 并指定保存路径
[root@rhcsa001 ~]# vim ./itheima/passwd
THIS IS MY NEW LINE!!!
:w /root/passwd
3.查看/root/passwd文件内容
[root@rhcsa001 ~]# ls
passwd
[root@rhcsa001 ~]# cat passwd
2.创建/root/hello.txt文件并导入/root/itheima/passwd文件中
1.创建hello.txt文件
[root@rhcsa001 ~]# echo HELLO >>hello.txt
[root@rhcsa001 ~]# cat hello.txt
HELLO
2.使用vi在/root/itheima/passwd文件第一行插入
:r /root/hello.txt
效果
root:x:0:0:root:/root:/bin/bash
HELLO
2.9 课外补充
2.9.1.链接文件管理
在Linux中链接文件分为两种:
软链接文件 和 硬链接文件
2.9.2 软链接文件
软链接文件也叫符号链接文件,它和源文件一样也是一种文件,类似于软件的快捷方式
如果源文件删除,那么它所创建(指向)的软链接文件也会被破坏
创建软链接的语法为:
[root@rhcsa001 ~]# ln --help
基本格式: ln [选项]... 源文件 目标文件/链接名称
选项 | 说明 |
-s | 创建文件的软链接文件 |
1.将/root/itheima/passwd文件创建软链接文件/root/itheima/passwdlink
[root@rhcsa001 itheima]# ls
passwd
[root@rhcsa001 ~]# ln -s /root/itheima/passwd /root/itheima/passwdlink
[root@rhcsa001 ~]# ls ./itheima/
passwd passwdlink
2.源文件删除后,软链接文件失效
1.删除源文件
[root@rhcsa001 itheima]# rm -rfv passwd
removed 'passwd'
2.查看软链接文件
[root@rhcsa001 itheima]# cat passwdlink
cat: passwdlink: No such file or directory
2.9.3 硬链接文件
将源文件进行复制操作,它有自己的inode,移除源文件后硬链接还可以使用
创建软链接的语法为:
[root@rhcsa001 ~]# ln --help
基本格式: ln 源文件 目标文件/链接名称
1.创建硬链接文件/root/itheima/passwdhard
1.创建硬链接文件
[root@rhcsa001 itheima]# ln /root/itheima/passwd passwdhard
2.查看源文件、硬链接文件、软链接文件
[root@rhcsa001 itheima]# ll
total 8
-rw-r--r--. 2 root root 2224 Sep 26 17:01 passwd
-rw-r--r--. 2 root root 2224 Sep 26 17:01 passwdhard
lrwxrwxrwx. 1 root root 20 Sep 26 17:04 passwdsoft -> /root/itheima/passwd
2.9.4 软硬链接区别
-i选项 查看文件的Inode值
[root@rhcsa001 itheima]# ll -i
total 8
101941612 -rw-r--r--. 2 root root 2224 Sep 26 17:01 passwd
101941612 -rw-r--r--. 2 root root 2224 Sep 26 17:01 passwdhard
101941611 lrwxrwxrwx. 1 root root 20 Sep 26 17:04 passwdsoft
inode 硬链接数量
1.软链接是以路径的形式存在;
硬链接是以副本的形式存在,但不占用实际空间(Inode相同)
2.软链接可以跨文件系统,而硬链接不可以
3.软链接可以对不存在的文件进行创建,而硬链接只能对同一系统中存在的文件进行创建
4.目录可以创建软链接但不能创建硬链接