# Linux基础
# 1、介绍
Linux是一套免费使用和自由传播的类Unix操作系统,是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
说的简单点,它就是一个操作系统
# 2、Linux目录结构
Linux没有盘符概念,只有一个根目录/,所有文件都在它下面
# 3、基础命令
Linux命令的通用格式
command [-options] [parameter]
command:命令本身
-options:可选选项,控制命令细节
parameter:可选参数,控制命令的指向目标
# 3.1 ls
ls [-a -l -h] [Linux路径]
ls:平铺列出当前目录下的所有子文件夹与子文件【简单信息】
-a:可以展示出隐藏文件,比如以.开头的文件夹
-l:以列表的形式展示内容,可以展示更多细节
-h:能够显示文件所占用的大小,通常与-l搭配使用,以更加人性化的方式显示文件的大小单位
# 3.2 cd、pwd
cd [Linux路径]
除了root用户外,其他用户默认进入命令行时,会在用户的home目录下
pwd:显示当前所在的目录
# 3.3 mkdir
mkdir [-p] Linux路径
mkdir:创建新的目录
-p:表示自动创建不存在的父级目录
# 3.4 touch、cat、more
touch Linux路径
touch:创建一个文件
cat Linux路径
cat:表示查看文件的内容,只能查看,不能编辑
more Linux路径
more:也是表示查看文件的内容,more支持翻页,而cat是直接将内容全部展示出来。more在查看过程中,通过空格翻页,通过q退出查看
# 3.5 cp、mv、rm
cp [-r] Linux路径 Linux路径
cp:可以用于复制文件或者文件夹
-r:在复制文件夹的时候可以使用,表示递归复制文件夹里面的内容
参数一:Linux路径:表示被复制的文件夹或者文件
参数二:Linux路径:表示要复制到的地方
mv Linux路径 Linux路径
参数一:Linux路径:表示被移动的文件夹或文件
参数二:Linux路径:表示要移动的地方,如果目标不存在,则进行改名
rm [-r -f] 参数1 参数2 参数3 ..... 参数N
rm:用于删除文件夹或者文件
-r:表示递归删除,同样适用于文件夹
-f:表示force,强制删除(不会弹出提示信息)
参数1 参数2 参数3 ..... 参数N:表示要删除的文件或者文件夹路径,用空格隔开
# 3.6 which、find
which Linux路径
其实我们所学习的Linux命令,都是一个个二进制可执行程序,就像Window的exe文件一样。
我们可以通过which命令,查看我们所使用的一系列的命令的程序文件放在哪里
find 起始路径 -name "被查找的文件名"
被查找的文件名支持使用*通配符来做模糊查询
find 起始路径 -size +|-n[KMG]
+、-:表示大于小于
n:表示大小数字
KMG:表示大小单位
# 3.7 grep、wc、管道符
grep [-n] 关键字 文件路径
grep:从文件中通过关键字过滤文件行
-n:表示匹配到的行的行号
参数关键字:必填,表示要过滤的关键字,带有空格或者其他特殊符号,建议使用“”双引号包裹起来
参数文件路径:必填,表示要过滤的文件路径
wc [-c -m -l -w] 文件路径
可以通过wc命令统计文件的函数、单词数量等
-c:统计bytes数量
-m:统计字符的数量
-l:统计函数
-w:统计单词数量
参数,文件路径:表示被统计的文件
|
一个特殊符号|:表示管道符
管道符的含义是将左边命令的结果,作为右边命令的输入
# 3.8 echo、tail 、重定向
echo ""
echo:用于在命令行输出字符,如果你想要输出的命令被执行,那你需要用``号包裹起来
> >>
>
:表示将左侧的内容覆盖写入到右侧指定的文件中
>>
:表示将左侧的内容追加写入到右侧指定的文件中
tail [-f -num] Linux路径
tail:查看文件尾部的内容,跟踪文件的内容
-f:表示持续跟踪
-num:表示查看尾部多少行,默认10行
# 3.9、vi和vim编辑器
区别:vi/vim 是 Linux 系统内置的不可或缺的文本编辑命令,VIM 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。
# 2.1 三种常见模式
# 2.1.1 正常模式
刚刚启动 vi/vim,则进入一般模式,可以移动光标、复制粘贴、删除字符等。此状态下键盘输入会被识别为命令操作,常用到的包括 i(切换到插入模式),x(删除当前光标所在字符),:(切换到命令行模式)。
# 2.1.2 插入模式
在一般模式下按下键盘【i, I, o, O, a, A】进入插入模式,屏幕的左下方会出现【--INSERT--】的字样,表示当前模式下,用户可以编辑修改文本的内容。按下【Esc】则退出编辑模式。
# 2.1.3 命令行模式
在一般模式下按下键盘【: / ?】任意一个,光标移动到最下面一行,进入末行模式。可以查找数据、替换、可保存文件、退出 vi、显示行号等操作。
常见操作:
# 4、用户和用户组
# 4.1 root用户拥有最大的系统权限
su - 用户名
su:表示切换用户
切换完用户后可以使用exit退出用户
sudo 其他命令
sudo:可以为后面的命令临时赋予root权限
但是不是所有用户都能执行sudo,我们需要用root用户对这个普通用户配置sudo认证
# 4.2 Linux系统中可以配置多个用户、多个用户组、一个用户可以加入多个用户组
Linux中关于权限的管控级别有2个级别,分别是:
- 针对用户的权限控制
- 针对用户组的权限控制
关于用户组:
以下命令都需要root用户执行:
创建用户组:
groupadd 用户组名
删除用户组:
groupdel 用户组名
关于用户:
以下命令都需要root用户执行:
创建用户:
useradd [-g -d] 用户名
- -g:表示指定用户所在的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
- -d:表示指定用户HOME目录,不指定,HOME目录默认在:/home/用户名
删除用户:
userdel [-r] 用户名
- -r:表示删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
查看用户所属组
id [用户名]
修改用户所属组
usermod -aG 用户组 用户名
将指定的用户 加入到指定的用户组
# 4.3 getent
查看当前系统一共有哪些用户和用户组
查看用户:
getent passwd
查看用户组:
getent group
# 5、权限管控
# 5.1 查看权限
ll 或者ls -l
权限细节一共10个槽位
r:表示读权限
w:表示写权限
x:表示执行权限
针对文件和文件夹,rwx的含义有稍微差别
r:
- 对于文件来说,表示可以查看文件内容
- 对于文件夹来说,可以查看文件夹内容,如ls命令
w:
- 对于文件来说,表示可以修改此内容
- 对于文件夹来说,表示可以再文件夹内:创建、删除、改名等操作
x:
对于文件来说,可以将文件作为程序执行
对于文件夹来说,表示可以更改工作目录到此文件夹,比如cd进入操作
# 5.2 修改权限
修改文件或者文件夹的权限:
chmod [-R] 权限 文件或者文件夹
注意:只有文件或者文件夹的所属用户或者root用户才可以修改
选项:-R : 表示对文件夹内的全部内容应用同样的操作
示例:
chmod u=rwx,g=rx,o=x hello.txt ,将文件权限修改为:rwxr-x--x
- 其中,u表示user所属用户的权限,g表示group组权限,o表示other其他用户权限
chmod -R u=rwx,g=rx,o=x test ,将文件夹test以及文件夹内的全部权限修改为rwxr-x--x
但是,由于每次修改都要写一堆u,g,o,太多了,官方建议可以修改数字,快捷写法:chmod 751 hello.txt
在数字表示法中,r记为4,w记为2,x记为1,可以有:
- 0:为任何权限,即---
- 1:仅有x权限,即--x
- 2:仅有w权限,即-w-
- 3:表示w,x权限,即-wx
- 4:仅有r权限,即r--
- 5:有r和x权限,即r-x
- 6:有r和w权限,即rw-
- 7:有全部权限,即rwx
所以751:表示的是u=rwx,g=r-x,o=x
修改文件或者文件夹的所属用户和用户组
chown [-R] [用户][:][用户组] 文件或文件夹
注意:普通用户无法修改所属其他用户或组,所以此命令值适用于root用户执行
# 6、软件安装
安装方式一:去官网下载相应的linux安装包
安装方式二:Linux命令行内的“应用商店”,yum 命令安装软件
yum:RPM包的软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题
yum [-y] [install | remove | search] 软件名称
选项:-y:表示自动确认,无需手动确认安装或卸载过程
install :安装
remove:卸载
search:搜索
注意:
- yum命令需要root权限,可以使用su切换root,或者sudo提权
- yum命令需要联网
上面的yum命令是Centos系统所执行的,在Ubuntu中,要使用apt命令
# 7、systemctl命令
Linux系统由很多内置软件或者第三方软件,均可使用systemctl命令控制启动、停止。但是有些第三方软件并没有自动集成到systemctl中,需要自己手动添加。
能够被systemctl管理的软件,一般也称之为:服务
systemctl start | stop | status | enable | disable 服务名
start:启动
stop:停止
status:查看状态
enable:开机自动启动
disable:关闭开机自动启动
系统内置服务:
NetworkManager,主网络服务
network,副网络服务
firewalld,防火墙服务
sshd,ssh服务(远程登录服务)
# 8、软链接
在Liunx中创建软链接,可以将文件、文件夹链接到其他位置上。类似于window系统中的快捷方式。
ln -s 参数1 参数2
选项-s:表示创建软链接
参数1:被链接的文件或者文件夹
参数2:表示要链接的目的地
# 9、日期和时区
查看日期
date [-d] [+格式化字符串]
选项:-d:一般用于日期计算。
校准时间可以利用ntp程序
# 10、网络
# 10.1 ping
ping命令,可以检查指定的网络服务器是否可以可联通的状态
ping [-c num] ip或主机名
选项:-c,检查的次数,不使用-c选项,默认无限次数检查
参数:ip或主机名,被检查的服务器的ip地址或主机名地址
示例:
ping -c 4 www.baidu.com
检查baidu.com是否可以联通,并且检查4次
# 10.2 wget
wget是一个非交互式的文件下载器,可以在命令行内下载网络文件
wget [-b] url
选项:-b:表示后台下载,会将日志写入到当前工作目录的wget-log文件中
参数:url:表示下载链接
示例:
wget -b http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
# 10.3 curl
curl可以发送http网络请求,可用于:下载文件、获取信息等
curl [-O] url
选项:-O:用于下载文件时,当url是下载文件的链接时,可以使用此项来保存文件
参数:url,要发起请求的网络地址
# 11、端口
可以通过netstat命令,查看端口占用情况
netstat -anp | grep 6000
netstat -anp | grep 端口号,安装netstat:yum -y install net-tools
可以看到6000端口被进程7437占用
# 12、进程
ps -ef
查看系统所有的进程
可以携带 | grep 过滤一些数据
ps -ef | grep java
就可以过滤java相关的进程,当然最后一条是不算的,它表示这个命令本身,因为命令本身也带了java
# 关闭进程
kill [-9] 进程号
结束进程,-9表示:强制结束进程
# 13、查看系统状态
top
top命令查看Linux系统的运行状态,相当于window的任务管理器,可以查看cpu、内存等的运行情况
第一行:
top
:命令名称,15:13:35
表示当前时间,up 6:22
表示已经启动6分钟了,2 user
表示2个用户
第二行:
Task:一共162个进程,一个正在运行,161个正在睡眠,0个停止,0个僵尸
第三行:
Cpu使用率
第四五行:
Kib Mem:物理内存,total:总量字节,free:空闲 used:已使用 buff/cache 占用
Kib Swap:虚拟内存,total:总量字节,free:空闲 used:已使用 buff/cache 占用
# 14、环境变量
环境变量就是一组信息记录,KeyValue形式,用于操作系统运行的时候记录关键信息
env 命令可以查看系统的全部环境变量
通过$符号,可以取出环境变量的值
如何修改环境变量:
修改/etc/profile 文件,配置完成后使用source命令使其生效
# 15、解压和压缩
Linux系统中,压缩格式一般分为2种,
- .tar 称为tarball,归档文件。
- .gz,也常见.tar.gz,gzip格式压缩文件。
针对两种格式均可使用 tar命令对其压缩和解压的操作
tar [-c -v -x -f -z -C] 参数1 参数2 参数..... 参数N
-c:创建压缩文件,用于压缩模式
-v:显示压缩、解压过程,用于查看进度
-x:解压模式
-f:要创建的文件,或要解压的文件 , -f选项必须在所有选项位置处于最后一个
-z:gzip模式,不使用-z 就是普通的tarball模式
-C:选择解压的目的地,用于解压模式
示例:
tar -cvf test.tar 1.txt 2.txt
将1.txt 2.txt 使用普通模式压缩成test.tar
示例:
tar -zcvf test.tar.gz 1.txt 2.txt
将1.txt 2.txt 压缩到test.tar.gz文件中
示例:
tar -xvf test.tar -C /home/www/test
将test.tar文件解压到 /home/www/test 目录下
示例:
tar -zxvf test.tar.gz -C /home/www/test
将文件test.tar.gz 解压到 /home/www/test 目录下
# 16、实战
# 16.1 MYSQL5.7 在Centos安装
1、配置yum仓库
# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
由于MySQL并不在CentOS的官方仓库中,所以我们通过上述rpm命令:
- 导入MySQL仓库的密钥
- 配置MySQLQ的yum仓库
2、使用yum安装MySQL
# yum安装Mysql
yum -y install mysql-community-server
3、安装完成后,启动MySQL并配置开机自启动
systemctl start mysqld # 启动
systemctl enable mysqld # 开机自启
4、检查MySQL的运行状态
systemctl status mysqld
# 配置
1、主要配置管理员用户root的密码以及配置允许远程登录的权限。
# 通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
grep 'temporary password' /var/log/mysqld.log
2、登陆MySQL数据库系统
# 执行
mysql -uroot -p
# 解释
# -u,登陆的用户,MySQL数据库的管理员用户同Linux一样,是root
# -p,表示使用密码登陆
# 执行完毕后输入刚刚得到的初始密码,即可进入MySQL数据库
3、修改root用户密码
# 在MySQL控制台内执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
4、[扩展],配置root的简单密码
# 如果你想设置简单密码,需要降低Mysql的密码安全级别
set global validate_password_policy=LOW; # 密码安全级别低
set global validate_password_length=4; # 密码长度最低4位即可
# 然后就可以用简单密码了(课程中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码';
5、[扩展],配置root运行远程登录
默认情况下,root用户是不运行远程登录的,只允许在MySQL所在的Linux服务器登陆MySQL系统
请注意,允许root远程登录会带来安全风险
# 授权root远程登录
grant all privileges on *.* to root@"IP地址" identified by '密码' with grant option;
# IP地址即允许登陆的IP地址,也可以填写%,表示允许任何地址
# 密码表示给远程登录独立设置密码,和本地登陆的密码可以不同
# 刷新权限,生效
flush privileges;
6、退出MySQL控制台页面
# 退出命令
exit
# 或者通过快捷键退出:ctrl + d
7、检查端口
MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态
netstat -anp | grep 3306
# 16.2 MySQL8.0版本在CentOS系统安装
安装
配置yum仓库
# 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # 安装Mysql8.x版本 yum库 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
使用yum安装MySQL
# yum安装Mysql yum -y install mysql-community-server
安装完成后,启动MySQL并配置开机自启动
systemctl start mysqld # 启动 systemctl enable mysqld # 开机自启
MySQL安装完成后,会自动配置为名称叫做:
mysqld
的服务,可以被systemctl所管理检查MySQL的运行状态
systemctl status mysqld
# 配置
主要修改root密码和允许root远程登录
获取MySQL的初始密码
# 通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码 grep 'temporary password' /var/log/mysqld.log
登录MySQL数据库系统
# 执行 mysql -uroot -p # 解释 # -u,登陆的用户,MySQL数据库的管理员用户同Linux一样,是root # -p,表示使用密码登陆 # 执行完毕后输入刚刚得到的初始密码,即可进入MySQL数据库
修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
[扩展],配置root的简单密码
我们可以给root设置简单密码,如123456.
请注意,此配置仅仅是用于测试环境或学习环境的MySQL,如果是正式使用,请勿设置简单密码
set global validate_password.policy=0; # 密码安全级别低 set global validate_password.length=4; # 密码长度最低4位即可
允许root远程登录,并设置远程登录密码
默认情况下,root用户是不运行远程登录的,只允许在MySQL所在的Linux服务器登陆MySQL系统
请注意,允许root远程登录会带来安全风险
# 第一次设置root远程登录,并配置远程密码使用如下SQL命令 create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码!'; -- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc # 后续修改密码使用如下SQL命令 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
退出MySQL控制台页面
# 退出命令 exit # 或者通过快捷键退出:ctrl + d
检查端口
MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态
netstat -anp | grep 3306
至此,MySQL就安装完成并可用了,请妥善保存好MySQL的root密码。