Linux学习

_

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的安装程序  双击准备安装

image-20230917115150502.png

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

image-20230917115310180.png

接收条款  ,选择 下一步

image-20230917115342289.png


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

image-20230917115522445.png

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

image-20230917115722769.png

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

image-20230917115915905.png

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

image-20230917120027755.png

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

image-20230917120127258.png

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

image-20230917120237602.png

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

image-20230917120334418.png

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

image-20230917120357977.png

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

image-20230917120531929.png

到此安装完成

image-20230917120723572.png

4、设置虚拟机基本参数

找到桌面上VMware Workstation  图标,双击启动,启动后会看到下面界面,这时就可以创建虚拟机,或者管理已经存在的虚拟机

现在就可以开始使用VM去构建一个虚拟的电脑硬件环境(即虚拟机),只有构建出这个虚拟的硬件环境,才能够去安装操作系统(window、Linux、mac)

image-20230917121207087.png

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

image-20230917121638839.png

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

image-20230917121746446.png

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

image-20230917122317334.png

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

image-20230917122625145.png
image-20230917122843188.png

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

image-20230917123120195.png

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

image-20230917123212783.png

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

image-20230917123311705.png

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

image-20230917123412830.png

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

image-20230917123455565.png

建议选择创建新磁盘

image-20230917123530131.png

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

image-20230917123649322.png

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

image-20230917123802371.png

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

image-20230917123848956.png

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

image-20230917124403473.png

那就是在设置虚拟机存储位置的时候,不要将虚拟机与vm的安装文件放在一起,即可解决(我上面就出了这个错误)


文件系统介绍

Linux系统中一切皆文件。根目录 /,通过文件夹的嵌套,形成了一个目录结构树

1718083505923-72bc4c02-eb28-4e87-a968-06806766a401.png

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
1718085297077-9c830142-be82-4d0c-aef7-e990587b8386.png

2、网络连接模式

一般在配置虚拟机的时候,VMware提供了三种网络连接模式:

  • 桥接模式:虚拟机直接连接外部物理网络的模式,主机起到网桥的作用。这种模式下,虚拟机可以直接访问外部网络,并且对外部网络是可见的。虚拟机与宿主机处于同一个局域网中。

  • NAT模式:虚拟机与宿主机构建一个专用网络,并通过虚拟网络地址转换(NAT)设备对IP进行转换。虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机。

  • 仅主机模式:虚拟机与宿主机共享一个专用网络,与外部网络无法通信。

3、修改静态IP

需要配置IP地址和主机名,保证可以远程链接Linux系统

有三个地址需要配置:宿主机的虚拟机网卡ip地址,vm的网络地址,Linux系统的ip地址

3.1、配置vm网络地址

1715078963263-acfe3d63-5b5d-4657-b48a-5951475d88a7.png
1715079169458-e4c35717-21f9-440c-b177-58a5c5b16a72.png
1715079264870-167bf63b-e0e5-4d9b-8a9d-71674d70dce7.png

3.2、设置宿主机网络

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

1715080419287-4bb0dd24-d214-4be2-8a59-61bed728b1ab.png
1715080458458-4a9e4e74-9337-44dd-80da-72d6becc2c6f.png

选择IPv4,设置网络

1715080490545-3c9227ab-a120-498a-85e4-91ba38682441.png

配置好对应的IP地址即可

1715082305707-e5204f2a-6b62-4a24-8da7-91909a414635.png

3.3、配置Linux系统ip地址

3.3.1、修改ip地址

登录linux系统,使用vim,编辑网络

# 使用vim进行网络编辑
vim /etc/sysconfig/network-scripts/ifcfg-ens33 

可以看到默认是动态ip地址,需要修改为静态的ip地址

1715080880196-0859b464-a841-4653-a7b0-9e6a21ac8d41.png

修改为静态的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					# 配置dns

3.3.2、修改主机名

vim /etc/hostname
1715081361786-d88f1919-cd7b-4365-bfca-e6fabf9e67ee.png

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
1715123484718-9b203c00-5c99-4325-beec-bfb1795cd80e.png

所有的都配置完成之后,重启Linux系统,reboot

4、远程登录

一般在公司里面,服务器都在机房,而我们都在自己工位(办公室),需要使用远程工具链接Linux系统

链接的工具非常多:推荐使用xshell、MobaXterm、WindTerm等

xshell的链接的主机设置

1715130995443-fb08b5d2-adcc-440c-a48a-531ea3f0b88a.png

账号和密码设置

1715131050688-87012178-9b5f-4c0f-924c-62596a2d5798.png

链接Linux

1715131122850-1432dc3b-7eda-42a6-8cc7-20539945b7bb.png

常用命令

1、系统服务

1.1、系统服务介绍

Linux中包含很多系统相关的服务(防火墙、网络等),同时安装的一些软件也可以配置为系统服务。

可以使用systemctl指令来操作这些服务

基本语法:systemctl start | stop | restart | status 服务名

centos7版本:服务主要存放在/usr/lib/systemd/system目录下

1.2、系统运行级别

image-LHPA.png

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.target

1.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
image-tcJa.png
# 查询防火墙状态
[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.service

1.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 now

2、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 --help

3、目录操作

3.1、pwd 显示当前工作目录的绝对路径

# pwd:print working directory 打印工作目录
[root@hcss-ecs-3c1a ~]# pwd
/root

3.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
image-fWRV.png

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
containerd

4、文件操作

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  tmp

4.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  hello

4.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  tmp

4.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 要查看的文件

快捷键

功能说明

空格键

代表向下翻一页

enter回车键

代表向下翻一行

q

代表立刻离开more,不再显示该文件内容

ctrl + F

向下滚动一屏

ctrl + B

返回上一屏

=

输出当前行的行号

:F

输出文件名和当前行的行号

4.7、less 分屏显示文件内容

less 指令用来分屏查看文件内容,它的功能与more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

语法:less 要查看的文件

快捷键

功能说明

空格键

向下翻一页

pagedown

向下翻一页

pageup

向上翻一页

/字符串

向下搜索【字符串】的功能;n:向下查找;N:向上查找

?字符串

向上搜索【字符串】的功能;n:向下查找;N:向上查找

q

离开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
linux

5.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 hello

5.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:39

6.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 2024

6.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:19

6.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.
image-xFRz.png

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 user

4、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                # 查询当前是哪个账号
root

6、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添加到其中
image-Wtmh.png

7、删除用户

语法:

  • userdel 用户

oot@hcss-ecs-3c1a ~]# userdel test2              # 删除test2用户
[root@hcss-ecs-3c1a ~]# ls /home				   # 删除test2用户,但test2对应的家目录还在
demo  test1

8、用户组

每个用户都一个用户组,系统可以对一个用户组中的所有用户进行集群中管理。不同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)

符号

数字

含义

rwx

7

具备所有权限

rw-

6

具备读写权限

r-x

5

具备读和执行权限

r--

4

具备只读权限

-wx

3

具备写和执行权限

-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.txt

chmod 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/mysql

2、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 data

4、“|” 管道符

管道符"|" ,表示将前一个命令的处理结果输出传递给后面的命令处理。

# 使用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/merged

3、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          0B

4、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编辑器,开始编辑任务

* 执行任务

符号

说明

第一个“*”

一小时当中的第几分钟,范围0-59

第二个“*”

一天时当中的第几小时,范围0-23

第三个“*”

一月时当中的第几天,范围1-31

第四个“*”

一年时当中的第几月,范围1-12

第五个“*”

一周当中的星期几,范围0-7(0和7都代表星期日)

特殊符号

说明

*

代表任何时间,比如第一个“*”就代表一小时中的每分钟都执行一次

,

代表不连续的时间,比如“0 8,12,15 * * * 命令”,代表在每天的8点0分,12点0分,16点0分都执行一次命令

-

代表连续的时间范围,比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令

*/n

代表每个多久执行一次。比如“*/10 * * * * 命令”,代表每个10分钟就执行一次命令

特定时间执行命令

时间

说明

45 22 * * * 命令

每天22点45分执行命令

0 17 * * 1 命令

每周1的17点0分执行命令

0 5 1,15 * * 命令

每月1号和15号的凌晨5点0分执行命令

40 4 * * 1-5 命令

每周一到周五的凌晨4点40分执行命令

*/10 4 * * * 命令

每天的凌晨4点,每个10分钟执行一次命令

0 0 1,15 * 1 命令

每月1号和15号,每周一的0点0分都会执行命令

软件包管理

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源的更新

1728520538710.jpg

备份原有的 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 update

mysql安装

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
image-dxhY.png
rm -rf 上面的目录
image-enVN.png

再次查找机器是否安装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; 

评论区