Linux系统介绍
Linux 是一种开源的操作系统,基于 UNIX 操作系统的设计思想。自从 Li
发行版,目标是提供一个易于使用的桌面和服务器操作系统,特别适合初学者。
Debian:一个社区驱动的发行版,以其稳定性和广泛的软件包支持而闻名。Debian 是许多其他发行版(如 Ubuntu)的基础。
Fedora:由 Red Hat 支持的发行版,注重最新技术和创新,常作为新技术的测试平台。
CentOS:一个社区版本的 Red Hat Enterprise Linux(RHEL),适用于服务器和企业环境,提供 RHEL 的稳定性和兼容性。
Arch Linux:一个滚动发布的发行版,强调简单性和用户控制,适合有经验的 Linux 用户。
虚拟机安装
1、虚拟机介绍
Linux需要在一台电脑上进行安装,获得一台电脑的方式有很多,比如网上或者实体店购买。当然现在有了更加便宜的解决方案,那就是借助虚拟机软件,使用虚拟机软件可以模拟出计算机,从而可以在上面安装任何的操作系统,大大节约了成本;
2、常见的虚拟机软件
vmware:虚拟机软件中的NO.1,特点:模拟完善、有商业授权、收费软件(序列号),内存大;
virtualbox:原来的sun公司,现属于Oracle,免费开源,更新及时,体积小,内存优化,兼容性不是特别好;
virtual PC 微软的免费产品:仅支持windows系统(微软官方说只支持windows,其实别的系统也可以安装)现已停止更新;
Hyper:微软最新的虚拟机软件;
3、虚拟机安装
下载 VMware的安装程序 双击准备安装

等待初始化安装程序,加载也就几秒钟的事,开始准备安装,选择下一步

接收条款 ,选择 下一步

建议选择自定义 方式安装,选中之后下一步

建议更下安装目录,尽量不要在C盘安装,目录选择好之后

建议修改下安装的共享目录哦~~~,端口号默认就行(如果本地有其他软件占用了443,可以考虑修改,但不建议),设置好后

建议将启动检查更新去掉,然后

建议将用户体验改进计划给去掉,勾选后,会后台收集使用习惯和数据给vm提供,设置好

桌面快捷方式,根据自己的情况,需要就勾选,然后下一步

所有安装前的准备工作完事,准备开始安装,选择继续

程序开始安装,等待安装结束

安装完成,需要输入许可证密钥,请自行去资料找或者百度搜个就行,找到密钥,填写到对应位置,选择输入,关于序列号,网络上有很多

到此安装完成

4、设置虚拟机基本参数
找到桌面上VMware Workstation 图标,双击启动,启动后会看到下面界面,这时就可以创建虚拟机,或者管理已经存在的虚拟机
现在就可以开始使用VM去构建一个虚拟的电脑硬件环境(即虚拟机),只有构建出这个虚拟的硬件环境,才能够去安装操作系统(window、Linux、mac)

在上图中选择创建新的虚拟机,在下面图中选择自定义(高级) 方式进行虚拟机的创建

这里让选择 虚拟机 的兼容性,默认即可

需要选择将来安装的操作系统的镜像文件,可以在资料中找到,也可以先不选择,后面再挂载也行

选择安装的操作系统,我们是要安装Linux的,那就必须选择Linux(若自己想测试别的系统,也可以去安装玩玩),选择Linux之后,需要选择对应的版本,我们使用CentOS 64位


这里选择 cpu 的核心数,不要超过自己本机的核心数,一般选择1,就可以

选择内存大小,不要太大了,否则可能导致你自己本机非常卡哦~~~,2G基本够了

选择虚拟机上网的方式,默认是NAT模式,就可以哦~~~

让选择读写的IO控制器,默认即可

选择磁盘的类型,默认即可

建议选择创建新磁盘

设置磁盘大小,默认20G,够用了,同时建议选择单个文件存放方式(多个文件,将来目录下会有很多自己看不懂的文件)

给指定的磁盘命名,默认即可

基本创建好虚拟机了,可以针对需要硬件进行有效的添加或者移除(比如声卡、打印机之类,没啥用,可以移除的哦~~)

最后选择完成即可,如果点击完成 ,出现

那就是在设置虚拟机存储位置的时候,不要将虚拟机与vm的安装文件放在一起,即可解决(我上面就出了这个错误)
文件系统介绍
Linux系统中一切皆文件。根目录 /,通过文件夹的嵌套,形成了一个目录结构树

bin:它是一个快捷方式,指向 /usr/bin,存放的是二进制可执行命令
sbin:它是一个快捷方式,指向 /usr/bin,存放超级管理员的系统级别的执行命令
lib和lib64:它是一个快捷方式,指向 /usr/lib或lib64,存放系统库文件,类似于windows,system中的dll文件
usr:用户所需的所有文件和程序所在的目录
boot:linux的引导分区、启动的核心文件
etc:软件和系统的配置文件所在目录
home:每个非root用户的家目录
root:超级管理root用户的家目录
opt:第三方软件包安装目录
tmp和opt目录可以随便改变,不会对系统造成什么影响。
VIM编辑器
1、vi或vim介绍
vi是unix操作系统和类unix操作系统中最通用的文本编辑器。
vim编辑器是从vi发展出来的一个性能更强大的文本编辑器,可以主动的以字体颜色辨别语法的正确性,方便程序设计,vim与vi编辑器完全兼容。
vim编辑器:普通模式(一般模式)、编辑模式、命令行模式
打开终端,输入vim后面跟上你想要编辑的文件名来启动vim并编辑该文件。如果文件不存在,vim将会创建一个新的文件。
2、普通模式(一般模式)
普通模式(一般模式):在Linux系统中直接使用 vim xxx 进入后就为普通模式
普通模式下无法编辑文件,可以对文件中的数据进行删除、复制、粘贴等操作
删除:dd删除当前行,x删除光标下的字符。
复制和粘贴:yy复制当前行,p在光标下一行粘贴。
3、编辑模式
进入方式:在命令模式下,按下i可以在光标当前位置开始插入文本,a在光标后插入,o在当前行下方新开一行插入。
退出方式:按下Esc或Ctrl + [回到命令模式。
4、命令模式(底线模式)
在一般模式下需要按** :或 / ** 进入到命令行模式,
进入方式:在普通模式下按下:即可进入命令模式,此时可以在底线输入命令。
常用命令:
:w 保存文件但不退出。
:q 退出vim,如果文件未被修改则直接退出。
:q! 强制退出,不保存任何改动。
:wq 或 :x 保存并退出。
:w filename 另存为指定的文件名。
/pattern 在文件中搜索指定的文本。
网络设置
1、网络连接测试
通过ping命令可以查阅两台设备之间的网络是否畅通
# 测试当前电脑是否与百度服务器之间畅通
ping www.baidu.com
2、网络连接模式
一般在配置虚拟机的时候,VMware提供了三种网络连接模式:
桥接模式:虚拟机直接连接外部物理网络的模式,主机起到网桥的作用。这种模式下,虚拟机可以直接访问外部网络,并且对外部网络是可见的。虚拟机与宿主机处于同一个局域网中。
NAT模式:虚拟机与宿主机构建一个专用网络,并通过虚拟网络地址转换(NAT)设备对IP进行转换。虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机。
仅主机模式:虚拟机与宿主机共享一个专用网络,与外部网络无法通信。
3、修改静态IP
需要配置IP地址和主机名,保证可以远程链接Linux系统
有三个地址需要配置:宿主机的虚拟机网卡ip地址,vm的网络地址,Linux系统的ip地址
3.1、配置vm网络地址



3.2、设置宿主机网络
在宿主机(win10或者win11)中找到网络链接,找到对应的vmnet8


选择IPv4,设置网络

配置好对应的IP地址即可

3.3、配置Linux系统ip地址
3.3.1、修改ip地址
登录linux系统,使用vim,编辑网络
# 使用vim进行网络编辑
vim /etc/sysconfig/network-scripts/ifcfg-ens33 可以看到默认是动态ip地址,需要修改为静态的ip地址

修改为静态的ip地址
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 需要修改静态,ip的配置方法(none|static|bootp|dhcp)
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=049d48b6-3e20-433c-8bd5-bf1078e27755 # 随机id
DEVICE=ens33 # 网卡,设备名称
ONBOOT=yes # 系统启动的时候网络接口是否有效(yes/no)
IPV6_PRIVACY=no
IPADDR=192.168.10.100 # 配置ip地址
GATEWAY=192.168.10.2 # 配置网关
DNS1=192.168.10.2 # 配置dns3.3.2、修改主机名
vim /etc/hostname
3.3.3、修改hosts文件(暂时可以不配置)
vim /etc/hosts# 添加如下映射,将来需要用到多少个ip和域名的映射都可以配置
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
所有的都配置完成之后,重启Linux系统,reboot
4、远程登录
一般在公司里面,服务器都在机房,而我们都在自己工位(办公室),需要使用远程工具链接Linux系统
链接的工具非常多:推荐使用xshell、MobaXterm、WindTerm等
xshell的链接的主机设置

账号和密码设置

链接Linux

常用命令
1、系统服务
1.1、系统服务介绍
Linux中包含很多系统相关的服务(防火墙、网络等),同时安装的一些软件也可以配置为系统服务。
可以使用systemctl指令来操作这些服务
基本语法:systemctl start | stop | restart | status 服务名
centos7版本:服务主要存放在/usr/lib/systemd/system目录下
1.2、系统运行级别

Linux系统有7种运行级别(run level),常用的是级别3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
运行级别2:多用户状态(没有NFS网络系统),不支持网络
运行级别3:完全的多用户状态(有NFS网络系统),登录后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登录后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
CentOS7的运行级别简化为:
multi-user.target:等价于原运行级别3(多用户有网络,无图形界面)
graphical.target: 等价于原运行级别5(多用户有网络,有图形界面)
查询当前运行级别:
[root@hcss-ecs-3c1a ~]# systemctl get-default
multi-user.target修改当前运行级别
systemctl set-default TARGET.target (这里TARGET 取值multi-user或 graphical )
# 可以使用init 直接切换
init 3
# 或者
init 5# 查阅 /etc/inittab 可以看到系统运行的级别相关介绍和设置方式
[root@hcss-ecs-3c1a ~]# cat /etc/inittab
# inittab is no longer used.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target1.3、配置服务开机启动
在CentOS6中使用chkconfig --list 查询服务的开机启动状态
[root@hcss-ecs-3c1a ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
hostguard 0:off 1:off 2:on 3:on 4:on 5:on 6:off
multi-queue-hw 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# 这里的0-6,表示在哪种系统运行级别下可以开启或者关闭当前服务在CentOS7中使用systemctl list-unit-files 查询服务的开机启动状态
[root@hcss-ecs-3c1a ~]# systemctl list-unit-files
# 查询防火墙状态
[root@hcss-ecs-3c1a ~]# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
# 设置防火墙开机禁止启动
[root@hcss-ecs-3c1a ~]# systemctl disable firewalld.service
# 设置防火墙开机启动
[root@hcss-ecs-3c1a ~]# systemctl enable firewalld.service
# 设置关闭防火墙(只是当前关闭,重启系统,防火墙若没禁用,依然会重启开启)
[root@hcss-ecs-3c1a ~]# systemctl stop firewalld.service
# 设置启动防火墙
[root@hcss-ecs-3c1a ~]# systemctl start firewalld.service1.4、关机重启命令
在Linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑的一个服务是永无止境的,除非特殊情况下,不得已才会关机
sync : 将数据有内存同步到硬盘中
halt : 停机,关闭系统,但不断电
poweroff : 关机,断电
reboot : 重启,等同于 shutdown -r now
shutdown [选项] 时间
-H 相当于 --halt,关机
-r reboot重启
now 立刻执行
# 立刻关机
[root@hcss-ecs-3c1a ~]# shutdown now
# 1分钟后关机
[root@hcss-ecs-3c1a ~]# shutdown 1
# 取消关机
[root@hcss-ecs-3c1a ~]# shutdown -c
# 1分钟后重启
[root@hcss-ecs-3c1a ~]# shutdown -r 1
# 立刻重启
[root@hcss-ecs-3c1a ~]# shutdown -r now2、linux命令分类
linux系统的命令分为外部命令和内部命令,可以通过type查询某个命令属于哪种命令
[root@hcss-ecs-3c1a ~]# type cd
cd is a shell builtin # 属于shell的内置命令
[root@hcss-ecs-3c1a ~]# type useradd
useradd is /usr/sbin/useradd # 属于外部命令可以使用man查阅任意命令的使用,但是man列出的内容太多,一般使用help查询某个命令的作用
# 内部命令查阅
help cd
# 外部命令查询
ls --help3、目录操作
3.1、pwd 显示当前工作目录的绝对路径
# pwd:print working directory 打印工作目录
[root@hcss-ecs-3c1a ~]# pwd
/root3.2、cd 切换目录
# cd : change directory 切换目录
# 进入到目录
[root@hcss-ecs-3c1a /]# cd /app/
# 退出目录 , .. 表示退回上级目录
[root@hcss-ecs-3c1a app]# cd ..
# 进入根目录
[root@hcss-ecs-3c1a app]# cd /
# 进入当前位置下的目录
[root@hcss-ecs-3c1a app]# cd ./html # 也可以直接写目录名3.3、ls 列出目录的内容
# ls:list 列出目录内容
# ls [选项] [目录或文件]
# 选项 -a 列出全部文件,包含隐藏文件(.开始的文件)
# 选项 -l 长数据串列出,包含文件的属性与权限等信息,等同于 命令 ll
[root@hcss-ecs-3c1a html]# ls -a
. .. 2.html 3.html 4.html index.html js
[root@hcss-ecs-3c1a html]# ll
total 20
-rw-r--r-- 1 root root 1363 Sep 11 2023 2.html
-rw-r--r-- 1 root root 2850 Sep 11 2023 3.html
-rw-r--r-- 1 root root 2445 Sep 11 2023 4.html
-rw-r--r-- 1 root root 2701 Sep 11 2023 index.html
drwxr-xr-x 2 root root 4096 Jun 10 11:18 js
3.4、mkdir 创建一个新目录
# mkdir :make directory 建立目录
# 用法 mkdir [选项] 目录
# 选项:-p 包含父目录
[root@hcss-ecs-3c1a /]# cd /opt # 进入到opt目录下,进行操作
[root@hcss-ecs-3c1a opt]# mkdir a # 创建 a目录
[root@hcss-ecs-3c1a opt]# ls
a containerd
[root@hcss-ecs-3c1a opt]# mkdir b/c/d # 不能直接创建多级目录
mkdir: cannot create directory ‘b/c/d’: No such file or directory
[root@hcss-ecs-3c1a opt]# mkdir -p b/c/d # 添加参数-p 一次创建多级目录3.5、rmdir 删除一个空目录
# rmdir : remove directory 删除目录
[root@hcss-ecs-3c1a opt]# rmdir a # 删除a目录
[root@hcss-ecs-3c1a opt]# ls
b containerd
[root@hcss-ecs-3c1a opt]# rmdir b # 删除b目录,报错,因为b目录是非空目录
rmdir: failed to remove 'b': Directory not empty
[root@hcss-ecs-3c1a opt]# rmdir -p b/c/d # 添加参数-p ,删除多级目录
[root@hcss-ecs-3c1a opt]# ls
containerd4、文件操作
4.1、touch 创建文件
# 在当前目录下创建 a.txt文件
[root@hcss-ecs-3c1a opt]# touch a.txt
[root@hcss-ecs-3c1a opt]# ls
a.txt containerd
# 在当前目录下创建 hello 文件 ,文件是可以没有扩展名的
[root@hcss-ecs-3c1a opt]# touch hello
[root@hcss-ecs-3c1a opt]# ls
a.txt containerd hello
# 给指定目录下创建文件
[root@hcss-ecs-3c1a opt]# touch /usr/hello
# 可以使用vi或vim 编辑不存在的文件,在退出时选择wq,可以得到一个新的文件4.2、cp 复制文件或目录
# cp [选项] source dest # 复制source文件到dest
# 选项 -r 递归复制整个文件夹
# 复制文件,将a.txt 文件复制并改名为b.txt
[root@hcss-ecs-3c1a opt]# cp a.txt b.txt
[root@hcss-ecs-3c1a opt]# ls
a.txt b.txt containerd hello
# 将某个文件复制到指定目录下
[root@hcss-ecs-3c1a opt]# cp a.txt /usr/
[root@hcss-ecs-3c1a opt]# ls /usr # 可以看到文件已经复制到指定目录
a.txt bin games hello include lib lib64 libexec local sbin share src tmp
# 复制并覆盖
[root@hcss-ecs-3c1a opt]# cp a.txt b.txt # 由于当前目录已经存在 b.txt
cp: overwrite 'b.txt'? y # 提示覆盖,输入 y 确认覆盖,输入 n 取消覆盖
# 强制覆盖,不提示
[root@hcss-ecs-3c1a opt]# \cp a.txt b.txt # \命令 :采用linux的原生命令(了解即可)
###################################################################
###################################################################
###################################################################
###################################################################
# 复制目录,在当前目录创建a目录,其中创建hello文件
# 将整个a目录包含其中的子目录或文件,复制到/usr下
[root@hcss-ecs-3c1a opt]# cp a /usr
cp: -r not specified; omitting directory 'a' # 报错:a并不是空目录,需要递归复制
[root@hcss-ecs-3c1a opt]# cp -r a /usr
[root@hcss-ecs-3c1a opt]# ls /usr # a目录已经复制到/usr下
a a.txt bin games hello include lib lib64 libexec local sbin share src tmp4.3、rm 删除文件或目录
# rm [选项] 文件或目录
# 选项 -r 递归删除目录中的所有内容
# 选项 -f 强制执行删除操作,不提示确认
# 选项 -v 显示指令的详细执行过程
# 删除 /usr 下的hello文件
[root@hcss-ecs-3c1a opt]# rm /usr/hello
rm: remove regular empty file '/usr/hello'? y # 会提示是否删除 y删除,n不删除
[root@hcss-ecs-3c1a opt]# ls /usr # 可以看到hello文件已经被删除
a a.txt bin games include lib lib64 libexec local sbin share src tmp
# 删除目录
[root@hcss-ecs-3c1a opt]# rm /usr/a
rm: cannot remove '/usr/a': Is a directory # 提示a是个目录,不能直接删除,需要添加参数
[root@hcss-ecs-3c1a opt]# rm -r /usr/a # 添加-r 参数,删除目录,会出现多次提示
rm: descend into directory '/usr/a'? y
rm: remove regular empty file '/usr/a/hello'? y
rm: remove directory '/usr/a'? y
[root@hcss-ecs-3c1a opt]# ls /usr # a目录包含其中的子目录或文件全部被删除
a.txt bin games include lib lib64 libexec local sbin share src tmp
# 删除时不需要提示
[root@hcss-ecs-3c1a opt]# rm -f /usr/a.txt # 删除时没有任何提示
[root@hcss-ecs-3c1a opt]# ls /usr
bin games include lib lib64 libexec local sbin share src tmp
# 强制删除,并不提示,这个操作有点危险(删除前请确认好)
[root@hcss-ecs-3c1a opt]# ls
a b.txt containerd hello
[root@hcss-ecs-3c1a opt]# rm -fr a # 强制删除a目录包含其中子目录和文件
[root@hcss-ecs-3c1a opt]# ls
b.txt containerd hello4.4、mv 移动(重命名)文件
# mv 旧文件 新文件
[root@hcss-ecs-3c1a opt]# ls
b.txt containerd hello
[root@hcss-ecs-3c1a opt]# mv b.txt c.txt # 将b.txt 文件名修改为 c.txt
[root@hcss-ecs-3c1a opt]# ls
containerd c.txt hello
# mv 移动文件到指定目录
[root@hcss-ecs-3c1a opt]# mv c.txt /usr
[root@hcss-ecs-3c1a opt]# ls /usr
bin c.txt games include lib lib64 libexec local sbin share src tmp4.5、cat 查看文件内容
# cat [选项] 要查询的文件
# 选项 -n 显示所有行的行号,包含空行
# 一般用于查询较小的文件,一屏幕能显示全的
# 使用vim 给当前目录中的hello文件中添加数据(内容可以任意编辑)
[root@hcss-ecs-3c1a opt]# cat hello
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html/his-ui;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://his-server:8080;
}
}4.6、more 文件内容分屏查看器
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置若干快捷键。
语法:more 要查看的文件
4.7、less 分屏显示文件内容
less 指令用来分屏查看文件内容,它的功能与more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
语法:less 要查看的文件
5、其它命令
5.1、echo
echo 输出内容到控制台
语法:echo [选项] [输出内容]
选项:-e 支持反斜线控制的字符转换
[root@hcss-ecs-3c1a ~]# echo "hello linux"
hello linux
[root@hcss-ecs-3c1a ~]# echo "hello\tlinux" # 并没有解析出制表符
hello\tlinux
[root@hcss-ecs-3c1a ~]# echo -e "hello\tlinux" # 添加参数-e 可以识别特殊符号 \t \n 等
hello linux
[root@hcss-ecs-3c1a ~]# echo -e "hello\nlinux"
hello
linux5.2、输出重定向
语法:
ls -l > 文件 将ls -l 的结果写到文件中(覆盖原文件内容)
ls -al >> 文件 将ls -al 的结果追加到文件末尾
cat 文件1 > 文件2 将文件1的内容覆盖文件2
echo "数据" >> 文件 将echo输出的数据追加到文件末尾
[root@hcss-ecs-3c1a opt]# ls -l > info.txt # 将opt目录下的列出的内容输出到info.txt文件中
[root@hcss-ecs-3c1a opt]# ll # 在opt目录下多info.txt文件
total 12
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 157 Jun 12 16:11 info.txt
[root@hcss-ecs-3c1a opt]# cat info.txt # 查询info.txt中的内容
total 8
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 0 Jun 12 16:11 info.txt
[root@hcss-ecs-3c1a opt]# echo "追加数据到末尾" >> info.txt # 给文件末尾追加数据
[root@hcss-ecs-3c1a opt]# cat info.txt
total 8
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 0 Jun 12 16:11 info.txt
追加数据到末尾5.3、head 显示文件头部内容
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
语法:
head 文件 查询文件前10行内容
head -n 5 文件 查询文件前5行内容
[root@hcss-ecs-3c1a /]# ll -l >> /opt/info.txt # 给info.txt中追加写数据信息
[root@hcss-ecs-3c1a /]# head /opt/info.txt # 查询前10行数据
total 8
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 0 Jun 12 16:11 info.txt
追加数据到末尾
total 68
drwxr-xr-x 5 root root 4096 Jun 11 10:22 app
lrwxrwxrwx. 1 root root 7 Dec 6 2023 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 Jan 31 11:04 boot
drwxr-xr-x 7 root root 4096 Jan 31 11:06 CloudrResetPwdAgent
[root@hcss-ecs-3c1a /]# head -n 3 /opt/info.txt # 查询前3行数据
total 8
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello5.4、tail 输出文件尾部内容
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件后10行内容
语法:
tail 文件 查询文件尾部10行内容
tail -n 5 文件 查询文件尾部5行内容
tail -f 文件 实时追踪稳定的所有更新
[root@hcss-ecs-3c1a /]# tail /opt/info.txt # 查询文件尾部10行数据
drwxr-xr-x. 3 root root 4096 Jun 12 16:11 opt
dr-xr-xr-x 162 root root 0 Jun 9 09:14 proc
dr-xr-x---. 5 root root 4096 Jun 12 11:14 root
drwxr-xr-x 31 root root 1020 Jun 9 10:33 run
lrwxrwxrwx. 1 root root 8 Dec 6 2023 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Dec 6 2023 srv
dr-xr-xr-x 12 root root 0 Jun 9 09:14 sys
drwxrwxrwt 10 root root 220 Jun 12 16:01 tmp
drwxr-xr-x. 12 root root 4096 Jun 12 10:55 usr
drwxr-xr-x. 18 root root 4096 Jan 31 11:03 var
[root@hcss-ecs-3c1a /]# tail -n 4 /opt/info.txt # 查询文件尾部4行数据
dr-xr-xr-x 12 root root 0 Jun 9 09:14 sys
drwxrwxrwt 10 root root 220 Jun 12 16:01 tmp
drwxr-xr-x. 12 root root 4096 Jun 12 10:55 usr
drwxr-xr-x. 18 root root 4096 Jan 31 11:03 var
# 开启两个命令行窗口
[root@hcss-ecs-3c1a /]# tail -f /opt/info.txt # 监控文件中实时数据
# 在另外一个命令行中使用 echo "数据内容" >> /opt/info.txt 追加数据5.5、ln 软链接
软链接也称为符号链接,类似于windows里的快捷方式,有自己的数据块,主要存放链接其它文件的路径
语法: ln -s [源文件或目录] [软链接名] 给源文件或目录创建一个软链接
删除软链接: rm -rf 软链接名
注意这里有坑:** rm -rf 软链接名/ 会把软链接对应的真是目录下的内容删除**
[root@hcss-ecs-3c1a opt]# ln -s hello /he
[root@hcss-ecs-3c1a opt]# cd /
[root@hcss-ecs-3c1a /]# ll
5.6、history 查询执行命令历史记录
语法:history
[root@hcss-ecs-3c1a ~]# history # 显示所有操作过的历史命令
[root@hcss-ecs-3c1a ~]# history 10 # 显示最近操作的10个命令
[root@hcss-ecs-3c1a ~]# history -c # 清除所有历史记录6、时间日期
语法:date [OPTION] [+FORMAT]
选项:
-d<时间字符串> 显示指定的“时间字符串”表示的时间,而非当前时间
-s<日期时间> 设置系统日期时间
参数:
+<日期时间格式> 指定显示使用的日期时间格式
6.1、date显示当前时间
语法:
date 显示当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" 显示年月日时分秒
[root@hcss-ecs-3c1a ~]# date
Wed Jun 12 07:06:31 PM CST 2024
[root@hcss-ecs-3c1a ~]# date +%Y
2024
[root@hcss-ecs-3c1a ~]# date "+%Y-%m-%d %H:%M:%S"
2024-06-12 19:07:396.2、date显示非当前时间
语法:
date -d '1 days ago' 显示前一天时间
date -d '-1 days ago' 显示明天时间
[root@hcss-ecs-3c1a ~]# date -d '1 days ago'
Tue Jun 11 07:09:54 PM CST 20246.3、date设置系统时间
语法:
date -s 字符串时间
[root@hcss-ecs-3c1a ~]# date -s "2025-06-06 12:12:12"
Fri Jun 6 12:12:12 PM CST 2025
[root@hcss-ecs-3c1a ~]# date "+%Y-%m-%d %H:%M:%S"
2025-06-06 12:12:196.4、cal 查看日历
语法:
cal [选项] 不加选项,显示本月日历
[root@hcss-ecs-3c1a ~]# cal
June 2025
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
[root@hcss-ecs-3c1a ~]# cal 2025
2025
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1
5 6 7 8 9 10 11 2 3 4 5 6 7 8 2 3 4 5 6 7 8
12 13 14 15 16 17 18 9 10 11 12 13 14 15 9 10 11 12 13 14 15
19 20 21 22 23 24 25 16 17 18 19 20 21 22 16 17 18 19 20 21 22
26 27 28 29 30 31 23 24 25 26 27 28 23 24 25 26 27 28 29
30 31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 1 2 3 1 2 3 4 5 6 7
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28
27 28 29 30 25 26 27 28 29 30 31 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 1 2 1 2 3 4 5 6
6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13
13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20
20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27
27 28 29 30 31 24 25 26 27 28 29 30 28 29 30
31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5 6
5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13
12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20
19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31
30 用户管理
1、useradd添加新用户
语法:
useradd 用户名 添加新用户
useradd -g 组名 用户名 添加新用户到某个组
默认情况下添加用户的时候,就会在/home目录下创建与用户名同名的文件夹作为当前用户家目录
# 添加一个用户名为test1,在/home目录会出现test1文件夹
[root@hcss-ecs-3c1a ~]# useradd test1
[root@hcss-ecs-3c1a ~]# ls /home
test1
# 添加一个用户名为test2,通过 -d 参数指定当前用户的家目录名称为demo
[root@hcss-ecs-3c1a ~]# useradd -d /home/demo test2
[root@hcss-ecs-3c1a ~]# ls /home
demo test1
2、passwd 设置用户密码
语法:
passwd 用户名 设置用户密码
[root@hcss-ecs-3c1a ~]# passwd test1
Changing password for user test1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

3、id 查询用户
语法:id 用户名
# 通过id命令查询某个用户,可以看到用户信息,说明用户存在
[root@hcss-ecs-3c1a ~]# id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1)
# 查询的用户不存在情况
[root@hcss-ecs-3c1a ~]# id qubo
id: ‘qubo’: no such user4、cat /etc/passwd 查看创建哪些用户
[root@hcss-ecs-3c1a ~]# 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
unbound:x:997:949:Unbound DNS resolver:/etc/unbound:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
dbus:x:81:81:D-Bus:/var/run/dbus:/sbin/nologin
polkitd:x:949:948:User for polkitd:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
chrony:x:948:946::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
systemd-network:x:995:995:systemd Network Management:/:/usr/sbin/nologin
systemd-resolve:x:994:994:systemd Resolver:/:/usr/sbin/nologin
systemd-timesync:x:993:993:systemd Time Synchronization:/:/usr/sbin/nologin
test1:x:1000:1000::/home/test1:/bin/bash
test2:x:1001:1001::/home/demo:/bin/bash可以看到查询出来的用户账号非常多,因为其中有些是系统为了运行某些系统服务而创建的用户,这些用户不能作为登录系统的账号。而我们自己创建的账号在查询的末尾。
5、su 切换用户
语法:
su 用户名 切换用户,只能获得用户的执行权限,不能获得环境变量
su - 用户名 切换到用户并获得该用户的环境变量及执行权限
[root@hcss-ecs-3c1a ~]# su test1 # root 切换到test1账号 ,不用输入密码
[test1@hcss-ecs-3c1a root]$ su root # 其它账号切root账号必须输入root对应的密码
Password:
[root@hcss-ecs-3c1a ~]# whoami # 查询当前是哪个账号
root6、sudo 设置普通用户具有root权限
sudo:让普通用户临时具备root账号的权限
# 切换到test1账号,去查询/root目录,这时提示没有权限
[root@hcss-ecs-3c1a ~]# su test1
[test1@hcss-ecs-3c1a root]$ ls /root
ls: cannot open directory '/root': Permission denied
# 使用sudo命令,让test1临时具备root权限
[test1@hcss-ecs-3c1a root]$ sudo ls /root
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for test1: # 这里输入密码后提示test1账号不再sudoers文件中
test1 is not in the sudoers file. This incident will be reported.
# sudoers文件是书写权限的
[test1@hcss-ecs-3c1a root]$ exit # 退出test1账号,回到root账号
exit
[root@hcss-ecs-3c1a ~]# vim /etc/sudoers # 使用vim 编辑这个文件,将test1添加到其中
7、删除用户
语法:
userdel 用户
oot@hcss-ecs-3c1a ~]# userdel test2 # 删除test2用户
[root@hcss-ecs-3c1a ~]# ls /home # 删除test2用户,但test2对应的家目录还在
demo test18、用户组
每个用户都一个用户组,系统可以对一个用户组中的所有用户进行集群中管理。不同Linux系统对用户组的规定有所不同。
Linux系统中的用户属于与它同名的用户组,这个用户组在创建用户时创建。
用户组的管理涉及用户组的添加、删除和修改。实际是对/etc/group文件的更新
8.1、groupadd 新增组
语法:groupadd 组名
[root@hcss-ecs-3c1a ~]# id test1 # 查询用户,可以看到所属组
uid=1000(test1) gid=1000(test1) groups=1000(test1)
[root@hcss-ecs-3c1a ~]# cat /etc/group # 查询组信息
root:x:0:
bin:x:1:
# 中间其它组信息删除
systemd-timesync:x:993:
cgred:x:945:
docker:x:944:
test1:x:1000:
############################################################
# 添加新组 ,组名为demo
[root@hcss-ecs-3c1a ~]# groupadd demo
# 将用户test1添加到新的组demo中
[root@hcss-ecs-3c1a ~]# id test1 # 查询用户test1,目前在test1组中
uid=1000(test1) gid=1000(test1) groups=1000(test1)
[root@hcss-ecs-3c1a ~]# usermod -g demo test1 # 将test1用户添加到demo组中
[root@hcss-ecs-3c1a ~]# id test1 # 查询用户,发现已经在demo中
uid=1000(test1) gid=1001(demo) groups=1001(demo)8.2、groupdel 删除组
语法:groupdel 组名
# 删除test1
[root@hcss-ecs-3c1a ~]# groupdel test1权限
1、文件属性和权限
1.1、文件属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包含目录文件)的权限做不同的规定。在Linux中。我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用户和组

1.2、文件类型
第一个位置代表的是Linux中的文件类型:

1.3、文件权限

权限分段,每一段代表不同的用户:
属主权限:当前文件所属用户的权限,在Linux中每一个文件都有所属的用户
属组权限:当前文件的用户所在组的其它成员的权限
其它用户权限:跟文件所属用户不在同组的其它用户的权限
每一段中的内容都是一样的,分别限定:读(r=4)、写(w=2)、执行(x=1)
2、更改文件权限
2.1、修改文件权限
语法:chmod 权限 文件
chm-[ {ugoa} { +-= } {rwx} ] 文件或目录
chmod [mode=421] [文件或目录]
# chmod 修改文件权限
# 创建一个abc.txt文件
[root@hcss-ecs-3c1a opt]# touch abc.txt
[root@hcss-ecs-3c1a opt]# ll
total 12
# 创建的文件默认当前用户有rw,本组有r,其它有r权限
-rw-r--r-- 1 root root 0 Jun 13 14:37 abc.txt
# 将abc.txt文件权限修改为:创建者拥有所有读写执行权限,本组用户和其他用户拥有读和执行权限
[root@hcss-ecs-3c1a opt]# chmod u=rwx,g=rx,o=rx abc.txt
[root@hcss-ecs-3c1a opt]# ll
total 12
-rwxr-xr-x 1 root root 0 Jun 13 14:37 abc.txt
# 直接使用数字更改权限,与上面效果相同
[root@hcss-ecs-3c1a opt]# chmod 755 abc.txtchmod g+w abc.txt # 给本组用户增加写的权限
chmod o-x abc.txt # 去掉(收回)其他用户的执行权限
chmod o=r abc.txt # 给其他用户直接设置读权限
chmod a=rw abc.txt # 给所有用户直接设置读写权限
如果修改的是一个目录,需要如果中的子目录或者文件都具备相应的权限 需要加上参数 -R
chmod -R 666 docs/ # 给所有用户直接设置读写权限
2.2、修改文件所属
语法:chown [选项] [最终用户] [文件或目录] 改变文件或目录的所有者
[root@hcss-ecs-3c1a opt]# ll
total 12
# abc.txt 目前属于root用户和root组
-rwxrwxr-x 1 root root 0 Jun 13 14:37 abc.txt
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 1443 Jun 12 16:32 info.txt
# 将abc.txt文件所属修改为test1用户
[root@hcss-ecs-3c1a opt]# chown test1 abc.txt
[root@hcss-ecs-3c1a opt]# ll
total 12
# abc.txt 所属用户已经为test1,但所属的组依然为root
-rwxrwxr-x 1 test1 root 0 Jun 13 14:37 abc.txt
chown user1:guest a.txt # 将a.txt文件所属修改为user1用户和guest组
chown -R user1:guest abc # 将abc目录及其子内容的所属修为user1用户和guest组2.3、chgrp 改变所属组
语法:
chgrp [最终用户组] [文件或目录] 改变文件或目录所属组
[root@hcss-ecs-3c1a opt]# chgrp demo abc.txt
[root@hcss-ecs-3c1a opt]# ll
total 12
-rwxrwxr-x 1 test1 demo 0 Jun 13 14:37 abc.txt搜索查找
1、find 查找文件或目录
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端
语法:
find [搜索范围] [选项]
选项:
-name<查询方式> 按照指定的文件名查找模式查找文件
user<用户名> 查找属于指定用户名所有文件
size<文件大小> 按照指定的文件大小查找文件,单位:b(块,512字节)、c(字节)、w(字,2字节)、M(兆字节)、G(吉字节)
# 从根目录通过名称查询 mysql
[root@hcss-ecs-3c1a opt]# find / -name mysql
/var/lib/selinux/targeted/active/modules/100/mysql
/var/lib/docker/overlay2/25016c3252fdf3d0b00de5da833bb9e8e240d98d8ce2a66b5581e3ef3d4a6ed1/diff/etc/mysql
/var/lib/docker/overlay2/ad1aff4145b04e57504e7d6254654425d3cba2041f2396e6711d7e437c304d4e/diff/var/lib/mysql
/var/lib/docker/overlay2/ad1aff4145b04e57504e7d6254654425d3cba2041f2396e6711d7e437c304d4e/diff/etc/mysql
/var/lib/docker/overlay2/ad1aff4145b04e57504e7d6254654425d3cba2041f2396e6711d7e437c304d4e/diff/usr/lib/mysql
/var/lib/docker/overlay2/ad1aff4145b04e57504e7d6254654425d3cba2041f2396e6711d7e437c304d4e/diff/usr/bin/mysql
/var/lib/docker/volumes/mydemo_mysql-data/_data/mysql
/app/mydata/mysql2、locate 快速定位文件路径
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
语法:
locate 搜索文件
由于locate 指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
# 跟新locate数据库
updatedb
# 使用locate查询 , 查询文件或目录中包含tmp
locate tmp 使用which 可以查询某个命令的位置
[root@hcss-ecs-3c1a opt]# which ls
/usr/bin/ls
3、grep 过滤查找
语法:
grep 选项 查找内容 源文件
选项:
-n 显示匹配行及行号
# 查找在info.txt文件中的data字符数据,并显示所在文件的行号
[root@hcss-ecs-3c1a opt]# grep -n data info.txt
11:drwxr-xr-x. 4 root root 4096 Jan 31 10:58 data4、“|” 管道符
管道符"|" ,表示将前一个命令的处理结果输出传递给后面的命令处理。
# 使用ls 获取根目录下列表,将获取的结果通过管道符交给grep进行顾虑,从中找到opt
[root@hcss-ecs-3c1a opt]# ls / | grep opt
opt压缩与解压缩
1、gzip/gunzip 压缩
语法:
gzip 文件 压缩文件,只能将文件压缩为*.gz文件
gunzip 文件.gz 解压缩文件命令
只能压缩文件,不能压缩目录,不保留原来的文件,同时多个文件回产生多个压缩包
[root@hcss-ecs-3c1a opt]# ll
total 12
-rw-r--r-- 1 root root 1443 Jun 12 16:32 info.txt # 压缩前大小
[root@hcss-ecs-3c1a opt]# gzip info.txt # 压缩文件
[root@hcss-ecs-3c1a opt]# ll
total 12
-rw-r--r-- 1 root root 489 Jun 12 16:32 info.txt.gz # 压缩后的文件,源文件就没了
# 解压缩
[root@hcss-ecs-3c1a opt]# gunzip info.txt.gz 2、zip/unzip压缩
语法:
zip [选项] xxx.zip 将要压缩的内容 压缩文件或目录的命令
unzip [选项] xxx.zip 解压缩文件
选项:
zip : -r 压缩目录(递归压缩)
unzip : -d<目录> 指定解压后文件的存放目录
zip压缩命令在window/linux都通用,可以压缩目录且保留源文件
# 在opt目录下,创建demo目录,给其中随便创建目录和文件,然后进行压缩
[root@hcss-ecs-3c1a opt]# zip -r mydemo.zip ./demo
adding: demo/ (stored 0%)
adding: demo/abc.txt (stored 0%)
adding: demo/info.txt (deflated 68%)
[root@hcss-ecs-3c1a opt]# ll
total 16
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
drwxr-xr-x 2 root root 4096 Jun 13 15:40 demo
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 928 Jun 13 15:42 mydemo.zip
# 解压,将当前目录下的mydemo.zip 解压到根目录下
[root@hcss-ecs-3c1a opt]# unzip -d / ./mydemo.zip
Archive: ./mydemo.zip
creating: /demo/
extracting: /demo/abc.txt
inflating: /demo/info.txt 3、tar打包
语法:
tar [选项] xxx.tar.gz 要打包的内容 打包目录,压缩后的文件格式.tar.gz
选项:
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
-C 解压到指定目录
[root@hcss-ecs-3c1a opt]# tar -zcvf demo.tar.gz ./demo
./demo/
./demo/abc.txt
./demo/info.txt
[root@hcss-ecs-3c1a opt]# ll
total 20
drwx--x--x 4 root root 4096 Jun 9 10:04 containerd
drwxr-xr-x 2 root root 4096 Jun 13 15:40 demo
-rw-r--r-- 1 root root 650 Jun 13 15:58 demo.tar.gz
-rw-r--r-- 1 root root 298 Jun 12 11:14 hello
-rw-r--r-- 1 root root 928 Jun 13 15:42 mydemo.zip
# 解压缩到当前目录
[root@hcss-ecs-3c1a opt]# tar -zxvf demo.tar.gz
./demo/
./demo/abc.txt
./demo/info.txt
# 解压缩到指定目录 tar -xvf 压缩文件名 -C 目标目录
[root@hcss-ecs-3c1a opt]# tar -zxvf demo.tar.gz -C /tmp
./demo/
./demo/abc.txt
./demo/info.txt
[root@hcss-ecs-3c1a opt]# ls /tmp
demo磁盘管理
1、du 查看文件和目录占用磁盘空间
语法:
du 目录/文件 显示目录下每个字母的磁盘使用情况
选项:
-h 以人们较易阅读的GBytes,MBytes,KBytes 等格式自行显示
-a 不仅查看字母大小,还要包含文件
-c 显示所有的文件和子目录大小后,显示总和
-s 只显示总和
--max-depth=n 指定统计子目录的深度为第n层
[root@hcss-ecs-3c1a opt]# du -h
4.0K ./containerd/lib
4.0K ./containerd/bin
12K ./containerd
8.0K ./demo
36K .
[root@hcss-ecs-3c1a opt]# du -sh # 查询当前目录总大小
36K .2、df 查看磁盘空间使用情况
语法:
df 选项 列表文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况
选项:
-h 以人民较易阅读的GBytes,MBytes,KBytes 等格式自行显示
[root@hcss-ecs-3c1a /]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 907M 0 907M 0% /dev/shm
tmpfs 907M 33M 875M 4% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/vda1 40G 6.2G 31G 17% /
tmpfs 907M 4.0K 907M 1% /tmp
overlay 40G 6.2G 31G 17% /var/lib/docker/overlay2/b946032464fda0685db36a1dd75e480a824b8f999401d52dca5f1fa0c10de7f6/merged3、free 查询内存使用情况
[root@hcss-ecs-3c1a ~]# free -h
total used free shared buff/cache available
Mem: 1.8Gi 395Mi 220Mi 34Mi 1.2Gi 1.2Gi
Swap: 0B 0B 0B4、lsblk 查询设备挂载情况
语法:lsblk 查看设备挂载情况
选项:-f 查看详细的设备挂载情况,显示文件系统信息
[root@hcss-ecs-3c1a ~]# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
vda
└─vda1
ext4 1.0 80578fd4-53ab-4744-b279-f2a4c0e17e44 30.9G 16% /进程管理
1、linux中的进程和服务
计算机中,一个正在执行的程序或命令,被称为“进程”(process)
启动之后一直存在、常驻内存的进程,一般称为“服务”(service)
进程分为前台进程和后台(守护)进程。
2、service服务管理(centos6版本)
语法:service 服务名 start | stop | restart | status (作为了解内容)
查看服务的方法:/etc/init.d/服务名
3、systemctl(centos7版本)
语法:systemctl start | stop | restart | status 服务名
查看服务的方法:/usr/lib/systemd/system
4、ps查看当前系统进程状态
语法:
ps aux | grep xxx 查看系统中所有进程
ps -ef | grep xxx 可以查看子父进程之间的关系
选项:
a 列出带有终端的所有用户的进程,不会列出那些不带终端后台服务
x 列出当前用户的所有进程,包括没有终端的进程
u 面向用户友好的显示风格
-e 列出所有进程
-u 列出某个用户关系的所有进程
-f 显示完整格式的进程列表
[root@hcss-ecs-3c1a ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 100468 11292 ? Ss Jun09 0:08 /usr/lib/systemd/sys
root 2 0.0 0.0 0 0 ? S Jun09 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jun09 0:00 [rcu_gp]
# 有比较多的进程信息,省略了,可以直接通过命令查阅
[root@hcss-ecs-3c1a ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun09 ? 00:00:08 /usr/lib/systemd/systemd --switched
root 2 0 0 Jun09 ? 00:00:00 [kthreadd]
root 3 2 0 Jun09 ? 00:00:00 [rcu_gp]
root 4 2 0 Jun09 ? 00:00:00 [rcu_par_gp]
# 中间同样有比较多的进程信息,省略了,可以直接通过命令查阅
root 52348 1249 0 19:45 ? 00:00:00 sleep 3600
root 52387 52027 0 20:01 pts/0 00:00:00 ps -ef如果想查看进程的CPU占用率和内存占用率,可以使用aux
如果想查看进程的父进程ID可以使用ef
5、查看远程登录进程
[root@hcss-ecs-3c1a ~]# ps -ef | grep sshd
root 1343 1 0 Jun09 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 52024 1343 0 19:26 ? 00:00:00 sshd: root [priv]
root 52026 52024 0 19:26 ? 00:00:00 sshd: root@pts/0
root 52393 52027 0 20:08 pts/0 00:00:00 grep --color=auto sshd
6、kill终止进程
语法:
kill [选项] 进程号 通过进程号杀死进程
killall 进程名称 通过进程名称杀死进程,也支持
查询mysqld 进程
ps -ef | grep mysqld
# 杀掉这个进程
kill -9 mysqld进程号7、pstree查看进程树
语法:pstree [选项]
选项:
-p 显示进程的PID
-u 显示进程的所属用户
[root@hcss-ecs-3c1a ~]# pstree -u
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[agetty]
├─auditd───{auditd}
├─chronyd(chrony)
├─containerd───9*[{containerd}]
├─containerd-shim─┬─java───35*[{java}]
│ └─10*[{containerd-shim}]
├─containerserver───5*[{containerserver}]
├─crond
├─dbus-daemon(dbus)
├─dockerd─┬─docker-proxy───6*[{docker-proxy}]
│ ├─docker-proxy───8*[{docker-proxy}]
│ └─15*[{dockerd}]
├─gssproxy───5*[{gssproxy}]
├─haveged
├─hostguard───22*[{hostguard}]
├─hostwatch───2*[{hostwatch}]
├─irqbalance───{irqbalance}
├─python───osmt-agent───sleep
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───sshd─┬─bash───pstree
│ └─sftp-server
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─uniagent───6*[{uniagent}]8、top实时监控进程状态
语法:top [选项]
选项:
-d 秒数 指定top命令每隔几秒更新,默认是3秒
-i 使top不显示任何闲置或者僵尸进程
-p 通过指定监控进程ID来仅仅监控某个进程的状态
操作说明
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top
[root@hcss-ecs-3c1a ~]# top
top - 20:27:58 up 4 days, 11:06, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.3 hi, 0.2 si, 0.0 st
MiB Mem : 1813.8 total, 215.1 free, 397.0 used, 1201.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1203.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
941 root 20 0 81884 33104 12272 S 0.3 1.8 0:59.39 python
1 root 20 0 100468 11292 7320 S 0.0 0.6 0:08.92 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_trace
11 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0
12 root 20 0 0 0 0 I 0.0 0.0 0:07.37 rcu_sched
13 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.14 migration/1
17 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/1
19 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
23 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
24 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kauditd
27 root 20 0 0 0 0 S 0.0 0.0 0:00.03 khungtaskd
28 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
29 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
30 root 20 0 0 0 0 S 0.0 0.0 0:02.86 kcompactd0
31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
32 root 39 19 0 0 0 S 0.0 0.0 0:01.61 khugepaged
46 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 cryptd
92 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
93 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
94 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 blkcg_punt_bio
95 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 tpm_dev_wq
96 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 md
97 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 edac-poller
98 root -51 0 0 0 0 S 0.0 0.0 0:00.00 watchdogd
99 root 0 -20 0 0 0 I 0.0 0.0 0:00.47 kworker/0:1H-kblockd 第一行(top):
“20:27:58”为系统当前时刻;
“4 days, 11:06”为系统启动后到现在的运作时间;
“1 user”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
“load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;
第二行(Tasks):
“93 total”为当前系统进程总数;
“1 running”为当前运行中的进程数;
“92 sleeping”为当前处于等待状态中的进程数;
“0 stoped”为被停止的系统进程数;
“0 zombie”未被复原的进程数(僵尸进程);
第三行(Cpus):
分别表示了 CPU 当前的使用率;
“0.0 us”:用户进程占用CPU百分比
“0.0 sy”:内核进程占用CPU百分比
“0.0 ni”:用户进程空间内改变过优先级的进程占用CPU百分比
“99.5 id”:空闲CPU百分比
“0.0 wa”:等待输入输出的CPU时间百分比
“0.3 hi”:硬件中断请求时间
“0.2 si”:软终端请求时间
第四行(Mem):
分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;
第五行(Swap):
表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
列表部分:
PID:进程id
USER;进程所有者的用户名
PR:进程的优先级
NI:nice值。负值表示高优先级,正值表示低优先级
VIRT -- 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES -- 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR -- 共享内存大小,单位kb
S -- 进程状态。
D =不可中断的睡眠状态
R =运行
S =睡眠
T =跟踪/停止
Z =僵尸进程
%CPU -- 上次更新到现在的CPU时间占用百分比
%MEM -- 进程使用的物理内存 百分比
TIME+ -- 进程使用的CPU时间总计,单位1/100秒
COMMAND:启动任务的命令行(包括参数)
9、netstat网络状态和端口
语法:
netstat -anp | grep 进程号 查看该进程网络信息
netstat -nlp | grep 端口号 查看网络端口号占用情况
选项:
-a 显示所有正在监听(listen)和未监听的套接字(socket)
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出在监听的服务状态
-p 表示显示哪个进程在调用
[root@hcss-ecs-3c1a ~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 30626/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1343/sshd: /usr/sbi
tcp 0 0 192.168.6.106:37912 100.125.11.131:10180 ESTABLISHED 804/hostguard
tcp 0 36 192.168.6.106:22 123.181.205.29:3134 ESTABLISHED 52024/sshd: root [p
tcp6 0 0 :::8080 :::* LISTEN 30633/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 1343/sshd: /usr/sbi
udp 0 0 127.0.0.1:323 0.0.0.0:* 683/chronyd
udp 0 0 0.0.0.0:68 0.0.0.0:* 857/dhclient
udp6 0 0 ::1:323 :::* 683/chronyd
# 内容信息较多,可以直接使用命令查询系统定时任务
1、crontab 服务管理
针对crontab服务,在后台对应的crond的守护进程
[root@hcss-ecs-3c1a ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-06-09 09:14:24 CST; 4 days ago
Main PID: 1350 (crond)
Tasks: 1 (limit: 11434)
Memory: 5.5M
CGroup: /system.slice/crond.service
└─ 1350 /usr/sbin/crond -n
Jun 13 11:01:01 hcss-ecs-3c1a CROND[49097]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 12:01:01 hcss-ecs-3c1a CROND[49443]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 13:01:01 hcss-ecs-3c1a CROND[49785]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 14:01:01 hcss-ecs-3c1a CROND[50131]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 15:01:01 hcss-ecs-3c1a CROND[50528]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 16:01:01 hcss-ecs-3c1a CROND[50912]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 17:01:01 hcss-ecs-3c1a CROND[51313]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 18:01:01 hcss-ecs-3c1a CROND[51649]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 19:01:01 hcss-ecs-3c1a CROND[51988]: (root) CMD (run-parts /etc/cron.hourly)
Jun 13 20:01:01 hcss-ecs-3c1a CROND[52367]: (root) CMD (run-parts /etc/cron.hourly)若crond的守护进程没有启动,可以使用 systemctl restart crond 重启这个任务
2、crontab 定时任务设置
语法:crontab [选项]
选项:
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
参数说明:
[root@hcss-ecs-3c1a ~]# crontab -e
进入到crontab编辑界面,会打开vim编辑器,开始编辑任务
* 执行任务
软件包管理
linux系统中安装软件,针对不同的系列,有不同的安装包管理方式
Red Hat 系列:
RPM (Red Hat Package Manager):这是 Red Hat 系列的主要包管理工具。
YUM (Yellowdog Updater, Modified):用来管理 RPM 包,已被 DNF 取代。
DNF (Dandified YUM):YUM 的继任者,改进了依赖处理和性能。
发行版示例:Red Hat Enterprise Linux (RHEL), CentOS, Fedora。
Debian 系列:
DPKG (Debian Package):这是 Debian 系列的底层包管理工具。
APT (Advanced Package Tool):用来管理 DPKG 包的高层工具,提供简便的安装和更新功能。
发行版示例:Debian, Ubuntu, Linux Mint。
Arch Linux 系列:
Pacman:Arch Linux 的默认包管理工具,管理软件包的安装、更新和删除。
发行版示例:Arch Linux, Manjaro。
yum源的更新

备份原有的 YUM 源配置文件:
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载阿里云的YUM源配置文件。可以通过以下命令直接下载:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo清理yum缓存,并生成新的缓存
yum clean all
yum makecache更新yum源检查是否生效
yum updatemysql安装
1、mysql卸载
查看当前安装mysql情况
rpm -qa|grep -i mysql参数说明:rpm:RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”
-qa|grep -i mysql:[搜索指定rpm包是否安装] -all搜索mysql
-q就是 --query ,
-a就是--all,
|grep mysql就是查含有mysql的包名(grep正则表达式)
-i, --install install package(s) -- 可以省略
删除之前安装的rpm -e --noscripts 包名,如果出现有报错有依赖,可以加上--nodeps,
rpm -e --noscripts 包名 --nodeps参数说明:
-e:删除包
--noscripts: 忽略RPM包的脚本执行
查找之前老版本mysql的目录、并且删除老版本mysql的文件和库
find / -name mysql
rm -rf 上面的目录
再次查找机器是否安装mysql,如果没有就说明卸载干净了
2、Mysql安装
注意:这种安装需要下载,所有需要联网,如果网速不好会导致安装失败,所以安装之前建议先快照,mysql安装失败之后可以恢复到指定的快照版本,重新来一次;
# 第一步:切换到/opt/software
cd /opt/software
# 第二步:下载mysql的rpm源码包
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
# 注意:在什么地方下载就要在那个目录中执行安装,否则提示找不到rpm包,安装完后将rpm包删除
# 第三步:安装mysql-community-release-el7-5.noarch.rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
# 参数说明:
# -ivh:安装显示安装进度--install--verbose--hash
# 第四步:安装mysql
yum install mysql-server
# 注意:如果出现进程被占用,可以使用kill -9 进程ID
# 第五步:启动mysql服务
systemctl start mysqld查看Mysql状态:systemctl status mysqld 或者 service mysqld status
开启mysql服务:systemctl start mysqld 或者 service mysqld start
关闭mysql服务:systemctl stop mysqld 或者 service mysqld stop
重启mysql服务:systemctl restart mysqld 或者 service mysqld restart
# 第六步:Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来设置root用户的密码
[root@hadoop101 software]# mysqladmin -u root password "123456"
# 第七步:连接到Mysql服务器(多种方式 -- 密码可以点击回车之后再输入也行)
[root@hadoop101 software]# mysql -uroot -p你刚刚设置的密码
[root@hadoop101 software]# mysql -h127.0.0.1 -uroot -p你刚刚设置的密码
[root@hadoop101 software]# mysql -hlocalhost -uroot -p你刚刚设置的密码
[root@hadoop101 software]# mysql -h本机ip地址 -uroot -p你刚刚设置的密码注意:如果提示没有wget命令,可以使用以下命令下载wget命令: yum -y install wget
3、Mysql编码集设置
安装完的MySQL的默认字符集为 latin1 ,那么如果此时创建表和数据库,或者导入外部带中文的数据,mysql是不支持的。为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件;
# 查看默认字符集
mysql> show variables like 'character_set%';修改字符集,修改 /etc/my.cnf文件(输入exit或Ctrl + C退出mysql命令窗口):
vi /etc/my.cnf # (没有就自己创建一个,vi会自动创建)注意:如果my.cnf存在,那么就在[mysqld]处将下面的配置拷贝进去,并删除原来的[mysqld],因为配置中存在一个,不能有两个;
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8退出编辑模式,保存并退出,重启mysql(按Ctrl + C 退出编辑,退出编辑输入:wq!退出编辑器)
systemctl restart mysqld注意:如果重启卡住,很有可能是你my.cnf中出问题了,重新编辑,或者从其他人那里拷贝一个;
再次连接mysql,查看字符集编码
[root@hadoop101 software]# mysql -u root -p
mysql> show variables like 'character_set%';4、增加Mysql远程登录权限
为了解决这个问题,允许远程访问,需要本地登陆MySQL后执行如下命令:
# 第一步:进入mysql,授权远程连接
mysql> grant all privileges on *.* to root@'%' identified by '123456';
# 这句话的意思是:任意用户使用root用户使用123456密码访问,可以设置成mysql的密码
# 第二步:刷新授权
mysql> flush privileges;